From b0ed419ede8bd1829e670891ffe878630ba517e2 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期一, 03 十一月 2025 17:57:32 +0800
Subject: [PATCH] 优化

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs |   78 +++++++++++++++++++++++++--------------
 1 files changed, 50 insertions(+), 28 deletions(-)

diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
index b9b42b1..f61e1a2 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
@@ -60,6 +60,11 @@
             _materielInfoService = materielInfoService;
             _locationInfoService = locationInfoService;
         }
+        public override WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            return base.UpdateData(saveModel);
+        }
+
         #region 鍒涘缓鍑哄簱鍗�
         /// <summary>
         /// 鍒涘缓鍑哄簱鍗�
@@ -350,7 +355,7 @@
                             #region 鏁翠欢浼樺厛鍒嗛厤澶т欢搴�,璁″垝搴撳瓨,娣诲姞鍑哄簱浠诲姟
                             foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ))
                             {
-                                if (xs <= 0) break;
+                                if (xs <= 0 || item.AvailableQuantity <= 0) break;
                                 decimal outqty = 0;
                                 while (item.AvailableQuantity > 0 && xs > 0)
                                 {
@@ -431,7 +436,9 @@
                             if (orderDetailLK != null)
                             {
                                 #region 娣诲姞鍑哄簱浠诲姟銆佷慨鏀瑰簱瀛樹俊鎭�
-                                Dt_InventoryInfo inventoryInfo = dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
+                                Dt_InventoryInfo? inventoryInfo = dt_InventoryInfos.FirstOrDefault(x => x.WarehouseCode == WareCodeLK);
+                                if (inventoryInfo == null)
+                                    throw new Exception($"鏈壘鍒扮墿鏂欑紪鍙枫�恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戝湪绔嬪簱涓殑搴撳瓨淇℃伅锛涙墍闇�鏁伴噺銆恵orderDetailLK.Order_qty}銆戣琛ヨ揣");
                                 inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty;
                                 inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty;
                                 Dt_SupplyTask supplyTask = new Dt_SupplyTask()
@@ -464,15 +471,22 @@
                             //_supplyTaskService.AddData(supplyTasks);
                         }
                     }
-                    _unitOfWorkManage.BeginTran();
-                    _supplyTaskService.AddData(supplyTasks);
-                    _inventory_BatchServices.UpdateData(batchesUp);
-                    _inventoryInfoService.UpdateData(inventoryInfosUp);
-                    if (entityOrder.Details.Count > 0)
-                        BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
-                    if (entityOrderLK.Details.Count > 0)
-                        BaseDal.Db.CopyNew().InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
-                    _unitOfWorkManage.CommitTran();
+                    try
+                    {
+                        _unitOfWorkManage.BeginTran();
+                        _supplyTaskService.AddData(supplyTasks);
+                        _inventory_BatchServices.UpdateData(batchesUp);
+                        _inventoryInfoService.UpdateData(inventoryInfosUp);
+                        if (entityOrder.Details.Count > 0)
+                            BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+                        if (entityOrderLK.Details.Count > 0)
+                            BaseDal.Db.CopyNew().InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
+                        _unitOfWorkManage.CommitTran();
+                    }
+                    catch (Exception ex)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                    }
                     #endregion
                 }
                 webResponseContent.OK();
@@ -480,7 +494,6 @@
             catch (Exception ex)
             {
                 _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, (outorder.order_type == "3" ? "鍏ュ簱閫�璐�" : "姝e父鍑哄簱") + $"锛氬崟鍙枫�恵outorder.order_no}銆�", ex.Message);
-                _unitOfWorkManage.RollbackTran();
                 webResponseContent.Error(ex.Message);
             }
             return webResponseContent;
@@ -509,7 +522,7 @@
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
                         Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
-                        var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
+                        var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
                         if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
                         //鎵炬墍鏈夊簱瀛�
                         List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
@@ -533,7 +546,7 @@
                                     Creater = App.User.UserName,
                                     LocationCode = inventoryInfo.LocationCode,
                                     OrderNo = order.order_no,
-                                    StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                    StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                     SupplyQuantity = 0,
                                     Remark = "鐩樹簭鍏ュ簱"
                                 };
@@ -541,11 +554,13 @@
                                 supplyTask_Hties.Add(supplyTask_Hty);
                             }
                             #endregion
-                            inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                            inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                            inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                             inventoryInfo.SupplyQuantity = 0;
                             inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                         }
-                        inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                        inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                        inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                         inventory_Batch.SupplyQuantity = 0;
                         infosUp.AddRange(inventoryInfos);
                         batchesUp.Add(inventory_Batch);
@@ -596,17 +611,20 @@
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
                         Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
-                        var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
+                        var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
                         if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
                         //鎵炬墍鏈夊簱瀛�
                         List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
                         //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�.銆傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘��
                         var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
-                        var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity);
+                        //var LkQty = Math.Abs(inventoryLK.SupplyQuantity);
+                        var LkQty = inventoryLK.SupplyQuantity;
                         //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
                         var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
-                        var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity));
-                        if (LkQty + DJQty != Qty) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏鐩堟暟閲忎笉绗�");
+                        //var DJQty = Math.Abs(inventoryDJ.Sum(x => x.SupplyQuantity));
+                        var DJQty = inventoryDJ.Sum(x => x.SupplyQuantity);
+                        var count = Math.Abs(LkQty + DJQty);
+                        if (count != Qty) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏浜忔暟閲忎笉绗�");
                         if (LkQty == 0)//绔嬪簱鏃犲樊寮�
                         {
                             #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
@@ -630,7 +648,7 @@
                                         Creater = App.User.UserName,
                                         LocationCode = inventoryInfo.LocationCode,
                                         OrderNo = order.order_no,
-                                        StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                         SupplyQuantity = 0,
                                         Remark = "鐩樹簭鍏ュ簱"
                                     };
@@ -638,12 +656,14 @@
                                     supplyTask_Hties.Add(supplyTask_Hty);
                                 }
                                 #endregion
-                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                                inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                                inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                                 inventoryInfo.SupplyQuantity = 0;
                                 inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                             }
                             //_inventoryInfoService.UpdateData(inventoryInfos);
-                            inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                            inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                            inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                             inventory_Batch.SupplyQuantity = 0;
                             //_inventory_BatchServices.UpdateData(inventory_Batch);
                             infosUp.AddRange(inventoryInfos);
@@ -701,7 +721,7 @@
                                         Creater = App.User.UserName,
                                         LocationCode = inventoryInfo.LocationCode,
                                         OrderNo = order.order_no,
-                                        StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                         SupplyQuantity = 0,
                                         Remark = "鐩樹簭鍑哄簱"
                                     };
@@ -709,7 +729,8 @@
                                     supplyTask_Hties.Add(supplyTask_Hty);
                                 }
                                 #endregion
-                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                                inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                                inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                                 inventoryInfo.SupplyQuantity = 0;
                                 inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                             }
@@ -746,7 +767,7 @@
                                 deliveryOrdersAdd.Add(cabinOrder);
                             }
                             #endregion
-
+                            //杩欓噷
                             #region 鍒涘缓绔嬪簱鐩樼偣鍗�
                             var entityOrder = new Dt_DeliveryOrder
                             {
@@ -760,7 +781,7 @@
                                 Details = order.details.Select(d => new Dt_DeliveryOrderDetail
                                 {
                                     Goods_no = d.goods_no,
-                                    Order_qty = LkQty,
+                                    Order_qty = Math.Abs(LkQty), //缁欎笅娓竁CS鐨勬槸瑕佹暣鏁�
                                     Batch_num = d.batch_num,
                                     Exp_date = d.exp_date,
                                     Reservoirarea = WareCodeLK,
@@ -1147,6 +1168,7 @@
                 else
                 {
                     var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
+                    if (deliveryOrder.Out_type == "3") url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk";
                     var requestDate = new
                     {
                         order_no = deliveryOrder.Out_no
@@ -1154,7 +1176,7 @@
                     var result = HttpHelper.Post(url, requestDate.ToJsonString());
                     var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
                     if (response == null) throw new Exception("涓婃姤ERP鍑哄簱鍗曞畬鎴愬け璐ワ紒");
-                    if (response.resultCode != "0") throw new Exception(response.resultMsg);
+                    if (response.resultCode != "0" && response.resultMsg != "鏈壘鍒板悎娉曞崟鎹�") throw new Exception(response.resultMsg);
                     _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(deliveryOrderDetails, OperateTypeEnum.浜哄伐瀹屾垚);
                     BaseDal.DeleteAndMoveIntoHty(deliveryOrders, OperateTypeEnum.浜哄伐瀹屾垚);
                 }

--
Gitblit v1.9.3