wangxinhui
2026-03-17 89bccb9b8fb1070f7ac5f36510c868fecead9384
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderService.cs
@@ -1,4 +1,4 @@
using AutoMapper;
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -23,6 +23,8 @@
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Http;
using HslCommunication;
using SqlSugar;
using WIDESEA_Core.Enums;
namespace WIDESEA_OutboundService
{
@@ -45,6 +47,75 @@
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
        }
        public override PageGridData<Dt_OutSGOrder> GetPageData(PageDataOptions options)
        {
            // 1. è°ƒç”¨åŸºç±»æ–¹æ³•获取分页数据
            PageGridData<Dt_OutSGOrder> pageData = base.GetPageData(options);
            // 2. å¦‚果有数据,处理每个订单的物料编号和幅宽
            if (pageData.Rows != null && pageData.Rows.Count > 0)
            {
                // èŽ·å–æ‰€æœ‰è®¢å•ID
                var orderIds = pageData.Rows.Select(o => o.Id).ToList();
                // æ‰¹é‡æŸ¥è¯¢æ‰€æœ‰å…³è”的明细,过滤掉物料编号为空的数据
                var allDetails = BaseDal.Db.Queryable<Dt_OutSGOrderDetail>()
                    .Where(d => orderIds.Contains(d.OutSGOrderId))
                    .ToList();
                // æŒ‰è®¢å•ID分组
                var detailsByOrderId = allDetails.GroupBy(d => d.OutSGOrderId).ToDictionary(g => g.Key, g => g.ToList());
                // å¤„理每个订单
                foreach (var order in pageData.Rows)
                {
                    if (detailsByOrderId.TryGetValue(order.Id, out var details))
                    {
                        // èŽ·å–æ‰€æœ‰ç‰©æ–™ç¼–å·ï¼ŒåŒ…æ‹¬é‡å¤çš„
                        var allMaterialNos = details
                            .Select(d => d.MaterialNo)
                            .ToList();
                        // èŽ·å–æ‰€æœ‰å”¯ä¸€çš„å¹…å®½
                        var uniqueWidths = details
                            .Select(d => d.Width.ToString())
                            .Distinct()
                            .ToList();
                        // è®¾ç½®ç‰©æ–™ç¼–号,所有物料编号用斜杠分隔,包括重复的
                        order.MaterialNos = string.Join("/", allMaterialNos);
                        // è®¾ç½®å¹…宽:如果幅宽有多个不一致的数值就显示多个,如果一样就显示一个
                        order.MaterialWides = uniqueWidths.Count == 1
                            ? uniqueWidths[0]
                            : string.Join("/", uniqueWidths);
                        // è®¾ç½®æ˜¯å¦ç¼ºæ–™ï¼šå¦‚果有任何一个明细是缺料状态,就设置为true
                        // å¼•用WIDESEA_Common.OrderEnum命名空间来使用OutOrderStatusEnum枚举
                        order.IsLackMaterial = details.Any(d => d.OutSGOrderDetailStatus == 3); // 3是缺料状态的枚举值
                        // ç”Ÿæˆç‰©æ–™ç¼ºæ–™çŠ¶æ€å­—ç¬¦ä¸²ï¼šç‰©æ–™ç¼–å·:状态,物料编号:状态
                        var materialLackStatus = new List<string>();
                        foreach (var detail in details)
                        {
                            var isLack = detail.OutSGOrderDetailStatus == 3;
                            materialLackStatus.Add($"{detail.MaterialNo}:{isLack.ToString().ToLower()}");
                        }
                        order.MaterialLackStatus = string.Join(",", materialLackStatus);
                    }
                    else
                    {
                        order.MaterialNos = "";
                        order.MaterialWides = "";
                        order.IsLackMaterial = false;
                        order.MaterialLackStatus = "";
                    }
                }
            }
            return pageData;
        }
        
        public WebResponseContent AddOutSGOrder(List<SGOutOrderDTO> outOrderDTOs)
        {