From a6e0ea9ce13e791f3edae4edffeb3be3ccb760be Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 31 三月 2025 02:14:59 +0800
Subject: [PATCH] 版本更新

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs |  266 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 228 insertions(+), 38 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 7effb11..9954061 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"
@@ -159,7 +159,7 @@
             return content;
         }
         /// <summary>
-        /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱
+        /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱(缁戝畾浜嗗嚭搴撳崟搴撳瓨)
         /// </summary>
         /// <returns></returns>
         public WebResponseContent OutProductPK(string[] OutPKCodes,string ProOutNo)
@@ -183,8 +183,12 @@
                 string? userName = App.User.UserName;//GSWMS
                 //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁
                 List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
-                    .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
+                    .Where(x => OutPKCodes.Contains(x.PalletCode) && x.ShipmentOrder == proOutOrder.ProOutOrderNo && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
                     .Includes(x => x.proStockInfoDetails).ToList();
+                if (AllproStockInfos.Count<=0)
+                {
+                    return content.Error($"鍑哄簱鍗晎ProOutNo}宸叉棤缁戝畾搴撳瓨");
+                }
                 List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
                 List<Dt_ProStockInfoDetail> proStockInfoDetails=new List<Dt_ProStockInfoDetail>();
                 List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
@@ -219,6 +223,7 @@
                 {
                     return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖");
                 }
+                int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                 foreach (var item in proStockInfoDetails)
                 {
                     //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁
@@ -236,54 +241,80 @@
                     {
                         proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                     }
-                    StockOutItemsItem outItemsItem = new StockOutItemsItem()
-                    {
-                        PartNum=item.ProductCode,
-                        Rev=item.ProductVersion,
-                        SoNumber=item.SaleOrder,
-                        BatchNumber=item.BagNo,
-                        QtyPcs=item.StockPcsQty,
-                        QtySet=item.SETQty
-                    };
-                    stockOutItems.Add(outItemsItem);
+                    
                 }
-                int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                
                 int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
-                if (proOutOrder.Details.Count== (OldOverCount + AddOverCount))
+                if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
                 {
                     proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                    //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨
+                    List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+                    .Where(x => x.ShipmentOrder== ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt())
+                    .Includes(x => x.proStockInfoDetails).ToList();
+                    AllOutStocks.ForEach(x =>
+                    {
+                        proStockInfoDetails.AddRange(x.proStockInfoDetails);
+                    });
+                    proStockInfos.AddRange(AllOutStocks);
+                    foreach (var item in proStockInfoDetails)
+                    {
+                        StockOutItemsItem outItemsItem = new StockOutItemsItem()
+                        {
+                            PartNum = item.ProductCode,
+                            Rev = item.ProductVersion,
+                            SoNumber = item.SaleOrder,
+                            BatchNumber = item.BagNo,
+                            QtyPcs = item.StockPcsQty,
+                            QtySet = item.SETQty
+                        };
+                        stockOutItems.Add(outItemsItem);
+                    }
                 }
+                _unitOfWorkManage.BeginTran();
                 Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
                 //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
-                _unitOfWorkManage.BeginTran();
-                _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
-                _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
-                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
-                BaseDal.UpdateData(proOutOrder);
-                //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
-                ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+                if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
                 {
-                    Way = 1,
-                    StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
-                    ConfirmedUserNo=userName,
-                    AssignUserNo=userName,
-                    WarehouseCode=warehouse.WarehouseCode,
-                    ShipDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    DeliverplanCode=proOutOrder.ProOutOrderNo,
-                    Remark=proOutOrder.Remark,
-                    StockOutItems= stockOutItems
-                };
-                string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
-                ErpRequestContent erpRequestContent= response.DeserializeObject<ErpRequestContent>();
-                if (erpRequestContent.res==1)
-                {
-                    _unitOfWorkManage.CommitTran();
-                    content.OK();
+                    //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+                    ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+                    {
+                        Way = 1,
+                        StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+                        ConfirmedUserNo = "admin",
+                        AssignUserNo = "admin",
+                        WarehouseCode = warehouse.WarehouseCode,
+                        ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                        DeliverplanCode = proOutOrder.ProOutOrderNo,
+                        Remark = proOutOrder.Remark,
+                        StockOutItems = stockOutItems
+                    };
+                    _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+                    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
+                    string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+                    ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+                    if (erpRequestContent.res != 1)
+                    {
+                        throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+                    }
                 }
                 else
                 {
-                    throw new Exception(erpRequestContent.Data);
+                    proStockInfos.ForEach(x =>
+                    {
+                        x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+                    });
+                    proStockInfoDetails.ForEach(x =>
+                    {
+                        x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+                    });
+                    _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
+                    _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
                 }
+                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
+                BaseDal.UpdateData(proOutOrder);
+                _unitOfWorkManage.CommitTran();
+                content.OK();
             }
             catch (Exception ex)
             {
@@ -292,5 +323,164 @@
             }
             return content;
         }
+        /// <summary>
+        /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱(鏈粦瀹氬嚭搴撳崟搴撳瓨)
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                if (OutPKCodes.IsNullOrEmpty())
+                {
+                    return content.Error("涓嶈兘涓虹┖");
+                }
+                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
+                if (proOutOrder == null)
+                {
+                    return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�");
+                }
+                if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�");
+                }
+                string? userName = App.User.UserName;//GSWMS
+                //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁
+                List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+                    .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
+                    .Includes(x => x.proStockInfoDetails).ToList();
+                List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
+                foreach (var item in OutPKCodes)
+                {
+                    //鑾峰彇搴撳瓨
+                    Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault();
+                    if (proStockInfo == null)
+                    {
+                        return content.Error($"鏈壘鍒皗item}搴撳瓨");
+                    }
+                    if (proStockInfo.ShipmentOrder!=null)
+                    {
+                        return content.Error($"澶栫鍙穥item}涓哄嚭搴撳崟{proStockInfo.ShipmentOrder}鎸囧畾搴撳瓨!");
+                    }
+                    Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault();
+                    if (dt_Warehouse == null)
+                    {
+                        return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨");
+                    }
+                    proStockInfos.Add(proStockInfo);
+                    proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails);
+                }
+
+                if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty))
+                {
+                    return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}");
+                }
+                List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
+                List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
+                if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0)
+                {
+                    return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖");
+                }
+                int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                foreach (var item in proStockInfoDetails)
+                {
+                    //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁
+                    Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
+                    if (proOutOrderDetail == null)
+                    {
+                        return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�");
+                    }
+                    proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
+                    if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+                    {
+                        return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
+                    }
+                    if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+                    {
+                        proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                    }
+
+                }
+                proStockInfos.ForEach(x =>
+                {
+                    x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+                });
+                proStockInfoDetails.ForEach(x =>
+                {
+                    x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+                });
+                int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
+                {
+                    proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                    //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨
+                    List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+                    .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt())
+                    .Includes(x => x.proStockInfoDetails).ToList();
+                    AllOutStocks.ForEach(x =>
+                    {
+                        proStockInfoDetails.AddRange(x.proStockInfoDetails);
+                    });
+                    proStockInfos.AddRange(AllOutStocks);
+                    foreach (var item in proStockInfoDetails)
+                    {
+                        StockOutItemsItem outItemsItem = new StockOutItemsItem()
+                        {
+                            PartNum = item.ProductCode,
+                            Rev = item.ProductVersion,
+                            SoNumber = item.SaleOrder,
+                            BatchNumber = item.BagNo,
+                            QtyPcs = item.StockPcsQty,
+                            QtySet = item.SETQty
+                        };
+                        stockOutItems.Add(outItemsItem);
+                    }
+                }
+                _unitOfWorkManage.BeginTran();
+                Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
+                //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
+                if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+                    ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+                    {
+                        Way = 1,
+                        StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+                        ConfirmedUserNo = "admin",
+                        AssignUserNo = "admin",
+                        WarehouseCode = warehouse.WarehouseCode,
+                        ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                        DeliverplanCode = proOutOrder.ProOutOrderNo,
+                        Remark = proOutOrder.Remark,
+                        StockOutItems = stockOutItems
+                    };
+                    _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+                    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
+                    string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+                    ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+                    if (erpRequestContent.res != 1)
+                    {
+                        throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+                    }
+                }
+                else
+                {
+                    _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
+                    _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
+                }
+                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
+                BaseDal.UpdateData(proOutOrder);
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3