From 9ec715d2deb18a269dd49c48da91a36632d08c81 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 18 六月 2025 00:56:26 +0800
Subject: [PATCH] 最新代码上传,优化功能等

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs |   69 ++++++++++++++++------------------
 1 files changed, 32 insertions(+), 37 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 c700679..d591f56 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"
@@ -131,6 +131,7 @@
                             keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer);
                         }
                     }
+                    proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty;
                     proOutOrderDetails.Add(proOutOrderDetail);
                 }
                 Dt_ProOutOrder  proOutOrder= new Dt_ProOutOrder()
@@ -717,7 +718,7 @@
         /// <summary>
         /// 鏌ヨERP璁㈠崟鎵i櫎搴撳瓨鏁伴噺
         /// </summary>
-        public async Task<WebResponseContent> OutProErpSync(string outProOrderNo)
+        public WebResponseContent OutProErpSync(string outProOrderNo)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -726,52 +727,54 @@
                 Dt_ProOutOrder proOutOrder = BaseDal.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== outProOrderNo).Includes(x => x.Details).First();
                 if (proOutOrder==null)
                 {
-                    return await Task.FromResult(content.Error($"鏈壘鍒版垚鍝佸嚭搴撹鍗晎outProOrderNo}"));
+                    return content.Error($"鏈壘鍒版垚鍝佸嚭搴撹鍗晎outProOrderNo}");
                 }
                 if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
                 {
-                    return await Task.FromResult(content.Error($"鍑哄簱璁㈠崟宸插畬鎴愭垨鍏抽棴"));
+                    return content.Error($"鍑哄簱璁㈠崟宸插畬鎴愭垨鍏抽棴");
                 }
                 //璋冪敤erp鍑哄簱璁㈠崟搴撳瓨鏌ヨ鎺ュ彛
                 string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo);
                 ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>();
                 if (erpOutProSyncResponse.Code!=200)
                 {
-                    return await Task.FromResult(content.Error($"ERP鍑哄簱璁㈠崟鏌ヨ鎺ュ彛璋冪敤澶辫触,閿欒淇℃伅:{erpOutProSyncResponse.Msg}"));
+                    return content.Error($"ERP鍑哄簱璁㈠崟鏌ヨ鎺ュ彛璋冪敤澶辫触,閿欒淇℃伅:{erpOutProSyncResponse.Msg}");
                 }
                 List<OutProStock> outProStocks = erpOutProSyncResponse.Data;
                 if (outProStocks.Count<=0 || outProStocks==null)
                 {
-                    return await Task.FromResult(content.Error($"鎴愬搧鍑哄簱璁㈠崟{outProOrderNo}ERP褰撳墠鏈湁鍑哄簱搴撳瓨淇℃伅"));
+                    return content.Error($"鎴愬搧鍑哄簱璁㈠崟{outProOrderNo}ERP褰撳墠鏈湁鍑哄簱搴撳瓨淇℃伅");
+                }
+                // 楠岃瘉鎵�鏈夊嚭搴撳崟鍙锋槸鍚︿竴鑷�
+                OutProStock? outExist = outProStocks.FirstOrDefault(x => x.ShippingNumber != outProOrderNo);
+                if (outExist != null)
+                {
+                    return content.Error($"ERP杩斿洖浜嗗嚭搴撹鍗晎outExist.ShippingNumber}搴撳瓨淇℃伅");
                 }
                 //鑾峰彇骞冲簱搴撳尯
                 Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
                 if (warehouse==null)
                 {
-                    return await Task.FromResult(content.Error("鏈壘鍒板簱鍖轰俊鎭�"));
+                    return content.Error("鏈壘鍒板簱鍖轰俊鎭�");
                 }
+                var productCodes = outProStocks.Select(x => x.Partnum).Distinct().ToList();
                 //鑾峰彇鎵�鏈夊钩搴撳簱瀛�
-                List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.proStockInfoDetails).ToList();
-                List<Dt_ProStockInfoDetail> proStockInfoDetails= new List<Dt_ProStockInfoDetail>();
-                foreach (var item in proStockInfos)
-                {
-                    proStockInfoDetails.AddRange(item.proStockInfoDetails);
-                }
-                proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList() ;
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
+                .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && productCodes.Contains(detail.ProductCode))
+                .Select((master, detail) => detail)
+                .ToList();
+                proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList();
+
                 List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>();
                 List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>();
                 foreach (var item in outProStocks)
                 {
-                    //鏌ヨ搴撳瓨璁板綍
-                    if (item.ShippingNumber != outProOrderNo)
-                    {
-                        return await Task.FromResult(content.Error($"ERP杩斿洖浜嗗嚭搴撹鍗晎item.ShippingNumber}搴撳瓨淇℃伅"));
-                    }
+                    
                     //鑾峰彇搴撳瓨
                     List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x=>x.ProductCode==item.Partnum).ToList();
                     if (outStocks.Count==0 || outStocks==null)
                     {
-                        return await Task.FromResult(content.Error($"{item.Partnum}浜у搧鍨嬪彿搴撳瓨涓嶅瓨鍦�"));
+                        return content.Error($"{item.Partnum}浜у搧鍨嬪彿搴撳瓨涓嶅瓨鍦�");
                     }
                     foreach (var itemOut in outStocks)
                     {
@@ -779,13 +782,9 @@
                         {
                             break;
                         }
+                        Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum) ?? throw new Exception($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�");
                         if (item.Quantity >= itemOut.StockPcsQty)
                         {
-                            Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum);
-                            if (proOutOrderDetail == null)
-                            {
-                                return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�"));
-                            }
                             //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
                             proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty;
                             item.Quantity -= (int)itemOut.StockPcsQty;
@@ -793,7 +792,7 @@
                             proStockInfoDetails.Remove(itemOut);
                             if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
                             {
-                                return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
+                                return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
                             }
                             if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                             {
@@ -806,11 +805,7 @@
                         }
                         else if (item.Quantity < itemOut.StockPcsQty)
                         {
-                            Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum);
-                            if (proOutOrderDetail == null)
-                            {
-                                return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�"));
-                            }
+                            
                             //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
                             proOutOrderDetail.OverQtyPcs += item.Quantity;
                             item.Quantity -= item.Quantity;
@@ -819,7 +814,7 @@
                             itemOut.StockPcsQty -= item.Quantity;
                             if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
                             {
-                                return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
+                                return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
                             }
                             if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                             {
@@ -839,7 +834,7 @@
                 else
                 {
                     Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt());
-                    return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}"));
+                    return content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}");
                 }
                 //鏇存柊鏁版嵁
                 _unitOfWorkManage.BeginTran();
@@ -847,16 +842,16 @@
                 {
                     _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.鑷姩鍒犻櫎);
                 }
-                await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(proStockInfoDetails);
-                await BaseDal.UpdateDataAsync(proOutOrder);
-                await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details);
+                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
+                BaseDal.UpdateData(proOutOrder);
+                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details);
                 _unitOfWorkManage.CommitTran();
-                return await Task.FromResult(content.OK());
+                return content.OK();
             }
             catch (Exception ex)
             {
                 _unitOfWorkManage.RollbackTran();
-                return await Task.FromResult(content.Error(ex.Message));
+                return content.Error(ex.Message);
             }
         }
         /// <summary>

--
Gitblit v1.9.3