helongyang
2 天以前 cb25acc46bf41863e068b6f968f1592b7a14d1c9
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs
@@ -87,8 +87,10 @@
                {
                    return content.Error($"出库单号{outOrderDTO.OrderNo}已存在!");
                }
                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());
@@ -97,16 +99,21 @@
                {
                    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>();
                // å¤„理原始明细并存储到临时列表
                var tempDetails = new List<Dt_ProOutOrderDetail>();
                foreach (var item in outOrderDTO.OrderDetails)
                {
                    //判断客户是否存在
                    Dt_CustomerInfo? customerInfo = customerInfos.Where(x=>x.Code== item.Customer).FirstOrDefault();
                    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))
                    {
@@ -122,19 +129,52 @@
                            {
                                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);
                }
                // æŒ‰æ¡ä»¶åˆ†ç»„并合并明细
                var groupedDetails = tempDetails.GroupBy(detail => new
                {
                    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,
@@ -145,6 +185,7 @@
                    Remark= outOrderDTO.Note,
                    Details= proOutOrderDetails
                };
                Db.InsertNav(proOutOrder).Include(x => x.Details).ExecuteCommand();
                content.OK("成功");
            }