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 | 143 ++++++++++++++++++++++++++++++++++------------- 1 files changed, 102 insertions(+), 41 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 662402c..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" @@ -1,5 +1,6 @@ 锘縰sing AutoMapper; using Castle.Core.Resource; +using Org.BouncyCastle.Asn1.Cmp; using System; using System.Collections.Generic; using System.Linq; @@ -79,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)) + + if (outOrderDTO.OType == 1 && string.IsNullOrEmpty(outOrderDTO.WaType)) { - warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString()); + warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString()); } - else if (outOrderDTO.OType==2) + else if (outOrderDTO.OType == 2) { - warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + 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("鎴愬姛"); } @@ -764,19 +806,14 @@ .Select((master, detail) => detail) .ToList(); proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList(); - + List<int> stockIds = proStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList(); + //鑾峰彇鎵�鏈夊钩搴撲富琛� + List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => stockIds.Contains(x.Id)).Includes(x => x.proStockInfoDetails).ToList(); List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>(); List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>(); foreach (var item in outProStocks) { - - //鑾峰彇搴撳瓨 - List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x=>x.ProductCode==item.Partnum).ToList(); - if (outStocks.Count==0 || outStocks==null) - { - return content.Error($"{item.Partnum}浜у搧鍨嬪彿搴撳瓨涓嶅瓨鍦�"); - } - foreach (var itemOut in outStocks) + foreach (var itemOut in proStockInfoDetails.Where(x => x.ProductCode == item.Partnum).ToList()) { if (item.Quantity==0) { @@ -808,10 +845,20 @@ //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲� proOutOrderDetail.OverQtyPcs += item.Quantity; - item.Quantity -= item.Quantity; - float Range = itemOut.StockPcsQty / itemOut.SETQty; - itemOut.SETQty = item.Quantity / Range; + int Range = (int)itemOut.StockPcsQty / (int)itemOut.SETQty; + if (Range == 0) + { + return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�,Range:{Range}"); + } + int outSet =item.Quantity / Range; + if (outSet == 0) + { + return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�,outSet:{outSet}"); + } + itemOut.SETQty -= outSet; + itemOut.StockPcsQty -= item.Quantity; + item.Quantity = 0; if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) { return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"); @@ -826,6 +873,10 @@ } } } + if (item.Quantity>0) + { + return content.Error($"鏈壘鍒皗item.SoNumber}鍙墸鍑忓簱瀛�"); + } } if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count()) { @@ -836,12 +887,22 @@ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt()); return content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}"); } + //鑾峰彇鍒犻櫎鐨勫簱瀛樹富琛� + List<int> delStockIds = delStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList(); + List<int> delStockDetailIds = delStockInfoDetails.Select(x => x.Id).ToList(); + foreach (var item in delStockIds) + { + Dt_ProStockInfo proStockInfo = proStockInfos.FirstOrDefault(x => x.Id == item); + Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo.proStockInfoDetails.FirstOrDefault(x => !delStockDetailIds.Contains(x.Id)); + if (proStockInfoDetail == null) + { + delProStockInfos.Add(proStockInfo); + } + } //鏇存柊鏁版嵁 _unitOfWorkManage.BeginTran(); - if (delStockInfoDetails.Count > 0) - { - _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.鑷姩鍒犻櫎); - } + _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.鑷姩鍒犻櫎); + _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.鑷姩瀹屾垚); _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); BaseDal.UpdateData(proOutOrder); _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details); -- Gitblit v1.9.3