From cb25acc46bf41863e068b6f968f1592b7a14d1c9 Mon Sep 17 00:00:00 2001
From: helongyang <647556386@qq.com>
Date: 星期六, 13 九月 2025 08:12:14 +0800
Subject: [PATCH] 功能更新优化

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs |   93 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 67 insertions(+), 26 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
index 833e973..34893b2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
@@ -80,71 +80,112 @@
         /// <returns></returns>
         public WebResponseContent AddDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
         {
-            WebResponseContent content=new WebResponseContent();
+            WebResponseContent content = new WebResponseContent();
             try
             {
-                if (BaseDal.QueryFirst(x => x.ProOutOrderNo == outOrderDTO.OrderNo) != null) 
+                if (BaseDal.QueryFirst(x => x.ProOutOrderNo == outOrderDTO.OrderNo) != null)
                 {
                     return content.Error($"鍑哄簱鍗曞彿{outOrderDTO.OrderNo}宸插瓨鍦�!");
                 }
-                Dt_Warehouse warehouse=null;
+
+                Dt_Warehouse warehouse = null;
                 List<Dt_CustomerInfo> customerInfos = _basicRepository.CustomerInfoRepository.QueryData();
-                if (outOrderDTO.OType==1 && string.IsNullOrEmpty(outOrderDTO.WaType))
-                {
-                    warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString());
-                }
-                else if (outOrderDTO.OType==2)
+
+                if (outOrderDTO.OType == 1 && string.IsNullOrEmpty(outOrderDTO.WaType))
                 {
                     warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
                 }
+                else if (outOrderDTO.OType == 2)
+                {
+                    warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
+                }
+
                 List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
-                Dictionary<string,string> keyValuePairs =new Dictionary<string, string>();
+                Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
+
+                // 澶勭悊鍘熷鏄庣粏骞跺瓨鍌ㄥ埌涓存椂鍒楄〃
+                var tempDetails = new List<Dt_ProOutOrderDetail>();
                 foreach (var item in outOrderDTO.OrderDetails)
                 {
-                    //鍒ゆ柇瀹㈡埛鏄惁瀛樺湪
-                    Dt_CustomerInfo? customerInfo = customerInfos.Where(x=>x.Code== item.Customer).FirstOrDefault();
-                    if (customerInfo==null) 
+                    // 鍒ゆ柇瀹㈡埛鏄惁瀛樺湪
+                    Dt_CustomerInfo? customerInfo = customerInfos.FirstOrDefault(x => x.Code == item.Customer);
+                    if (customerInfo == null)
                     {
                         return content.Error($"瀹㈡埛{item.Customer}涓嶅瓨鍦�!");
                     }
+
                     Dt_ProOutOrderDetail proOutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item);
                     if (!string.IsNullOrEmpty(item.SaleOrder))
                     {
-                        if (keyValuePairs!=null && keyValuePairs.ContainsKey(item.SaleOrder))
+                        if (keyValuePairs != null && keyValuePairs.ContainsKey(item.SaleOrder))
                         {
                             proOutOrderDetail.EndCustomer = keyValuePairs[item.SaleOrder];
                         }
                         else
                         {
                             string request = _invokeERPService.InvokeProSaleCustomer(item.SaleOrder);
-                            ErpSaleCustomResponseContent responseContent=request.DeserializeObject<ErpSaleCustomResponseContent>();
-                            if (responseContent.Code!=200)
+                            ErpSaleCustomResponseContent responseContent = request.DeserializeObject<ErpSaleCustomResponseContent>();
+                            if (responseContent.Code != 200)
                             {
                                 return content.Error($"璁㈠崟{item.SaleOrder}缁堢瀹㈡埛鑾峰彇澶辫触!");
                             }
-                            //鍒ゆ柇缁堢瀹㈡埛鏄惁瀛樺湪
-                            Dt_CustomerInfo? customerInfoEnd = customerInfos.Where(x => x.Code == responseContent.Data[0].Endcustomer).FirstOrDefault();
+
+                            // 鍒ゆ柇缁堢瀹㈡埛鏄惁瀛樺湪
+                            Dt_CustomerInfo? customerInfoEnd = customerInfos.FirstOrDefault(x => x.Code == responseContent.Data[0].Endcustomer);
                             if (customerInfoEnd == null)
                             {
                                 return content.Error($"缁堢瀹㈡埛{responseContent.Data[0].Endcustomer}涓嶅瓨鍦�!");
                             }
+
                             proOutOrderDetail.EndCustomer = responseContent.Data[0].Endcustomer;
                             keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer);
                         }
                     }
+
+                    // 鍏堢疮鍔犲綋鍓嶆槑缁嗙殑鏁伴噺锛堝寘鍚鍝侊級
                     proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty;
-                    proOutOrderDetails.Add(proOutOrderDetail);
+                    tempDetails.Add(proOutOrderDetail);
                 }
-                Dt_ProOutOrder  proOutOrder= new Dt_ProOutOrder()
+
+                // 鎸夋潯浠跺垎缁勫苟鍚堝苟鏄庣粏
+                var groupedDetails = tempDetails.GroupBy(detail => new
                 {
-                    ProOutOrderNo= outOrderDTO.OrderNo,
-                    WarehouseId= warehouse.WarehouseId,
-                    ProOrderType= outOrderDTO.OType,
-                    ProOrderStatus=OutOrderStatusEnum.鏈紑濮�.ObjToInt(),
-                    PlantShipDate= outOrderDTO.PlantShipDate.ObjToDate(),
-                    Remark= outOrderDTO.Note,
-                    Details= proOutOrderDetails
+                    detail.PCode,
+                    detail.PVer,
+                    detail.PLot,
+                    detail.DateCode,
+                })
+                .Select(group =>
+                {
+                    // 鍙栧垎缁勪腑绗竴涓槑缁嗕綔涓哄熀纭�
+                    var firstDetail = group.First();
+                    return new Dt_ProOutOrderDetail
+                    {
+                        // 澶嶅埗鍩虹淇℃伅
+                        PCode = firstDetail.PCode,
+                        PVer = firstDetail.PVer,
+                        PLot = firstDetail.PLot,
+                        DateCode = firstDetail.DateCode,
+                        EndCustomer = firstDetail.EndCustomer,
+                        QtyPcs = group.Sum(d => d.QtyPcs),
+                        // 绱姞澶囧搧鏁�
+                        SpareQty = group.Sum(d => d.SpareQty)
+                    };
+                });
+
+                proOutOrderDetails.AddRange(groupedDetails);
+
+                Dt_ProOutOrder proOutOrder = new Dt_ProOutOrder()
+                {
+                    ProOutOrderNo = outOrderDTO.OrderNo,
+                    WarehouseId = warehouse.WarehouseId,
+                    ProOrderType = outOrderDTO.OType,
+                    ProOrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(),
+                    PlantShipDate = outOrderDTO.PlantShipDate.ObjToDate(),
+                    Remark = outOrderDTO.Note,
+                    Details = proOutOrderDetails
                 };
+
                 Db.InsertNav(proOutOrder).Include(x => x.Details).ExecuteCommand();
                 content.OK("鎴愬姛");
             }

--
Gitblit v1.9.3