From c5241e141f70fe910c3f3d525a9ea2d7ff143445 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 25 十一月 2025 08:49:21 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  144 +++++++++++++++++++++++++++++-------------------
 1 files changed, 87 insertions(+), 57 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 6a804a7..e8b0bd9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -572,71 +572,101 @@
 
         private async Task HandleOutboundOrderToMESCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
         {
-            // 鑾峰彇璁㈠崟鏄庣粏鏁版嵁
-            var orderDetails = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
-                .LeftJoin<Dt_OutboundOrder>((d, o) => d.OrderId == o.Id)
-                .Where((d, o) => o.OrderNo == orderNo)
-                .Select((d, o) => d)
-                .ToListAsync();
 
-            var feedmodel = new FeedbackOutboundRequestModel
+            try
             {
-                reqCode = Guid.NewGuid().ToString(),
-                reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                business_type = outboundOrder.BusinessType,
-                factoryArea = outboundOrder.FactoryArea,
-                operationType = 1,
-                Operator = App.User.UserName,
-                orderNo = outboundOrder.UpperOrderNo,
-                documentsNO = outboundOrder.OrderNo,
-                status = outboundOrder.OrderStatus,
-                details = new List<FeedbackOutboundDetailsModel>()
-            };
+                var orderDetails = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+                    .LeftJoin<Dt_OutboundOrder>((o, item) => o.OrderId == item.Id)
+                    .Where((o, item) => item.OrderNo == orderNo)
+                    .Select((o, item) => o)
+                    .ToListAsync(); 
 
-            // 浣跨敤璁㈠崟鏄庣粏鐨凮verOutQuantity浣滀负鍥炰紶鏁伴噺
-            foreach (var detail in orderDetails)
-            {
-                // 鑾峰彇璇ユ槑缁嗗搴旂殑鏉$爜淇℃伅锛堜粠閿佸畾璁板綍锛�
-                var detailLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(x => x.OrderNo == orderNo &&
-                               x.OrderDetailId == detail.Id &&
-                               x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
-                    .ToListAsync();
-
-                var detailModel = new FeedbackOutboundDetailsModel
+                bool allCompleted = true;
+                foreach (var detail in orderDetails)
                 {
-                    materialCode = detail.MaterielCode,
-                    lineNo = detail.lineNo, // 娉ㄦ剰锛氳繖閲屽彲鑳介渶瑕佽皟鏁村瓧娈靛悕
-                    warehouseCode = detail.WarehouseCode,
-                    qty = detail.OverOutQuantity, // 浣跨敤璁㈠崟鏄庣粏鐨勫凡鍑哄簱鏁伴噺
-                    currentDeliveryQty = detail.OverOutQuantity,
-                    unit = detail.Unit,
-                    barcodes = detailLocks.Select(lockInfo => new WIDESEA_DTO.Outbound.BarcodesModel
+                    if (detail.OverOutQuantity < detail.NeedOutQuantity)
                     {
-                        barcode = lockInfo.CurrentBarcode,
-                        supplyCode = lockInfo.SupplyCode,
-                        batchNo = lockInfo.BatchNo,
-                        unit = lockInfo.Unit,
-                        qty = lockInfo.PickedQty // 鏉$爜绾у埆鐨勬暟閲忎粛鐢ㄩ攣瀹氳褰�
-                    }).ToList()
-                };
+                        allCompleted = false;
+                        break;
+                    }
+                }                          
 
-                feedmodel.details.Add(detailModel);
+                int newStatus = allCompleted ? (int)OutOrderStatusEnum.鍑哄簱瀹屾垚 : (int)OutOrderStatusEnum.鍑哄簱涓�;
+
+                if (outboundOrder.OrderStatus != newStatus)
+                {
+                    await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+                        .SetColumns(x => x.OrderStatus == newStatus)
+                        .Where(x => x.OrderNo == orderNo)
+                        .ExecuteCommandAsync();
+                    //鍙湁姝e父鍒嗘嫞瀹屾垚鏃舵墠鍚慚ES鍙嶉
+                    if (allCompleted && newStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+                    {
+                        var feedmodel = new FeedbackOutboundRequestModel
+                        {
+                            reqCode = Guid.NewGuid().ToString(),
+                            reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                            business_type = outboundOrder.BusinessType,
+                            factoryArea = outboundOrder.FactoryArea,
+                            operationType = 1,
+                            Operator = App.User.UserName,
+                            orderNo = outboundOrder.UpperOrderNo,
+                            documentsNO = outboundOrder.OrderNo,
+                            status = outboundOrder.OrderStatus,
+                            details = new List<FeedbackOutboundDetailsModel>()
+                        };
+
+                        // 浣跨敤璁㈠崟鏄庣粏鐨凮verOutQuantity浣滀负鍥炰紶鏁伴噺
+                        foreach (var detail in orderDetails)
+                        {
+                            // 鑾峰彇璇ユ槑缁嗗搴旂殑鏉$爜淇℃伅锛堜粠閿佸畾璁板綍锛�
+                            var detailLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                                .Where(x => x.OrderNo == orderNo &&
+                                           x.OrderDetailId == detail.Id &&
+                                           x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
+                                .ToListAsync();
+
+                            var detailModel = new FeedbackOutboundDetailsModel
+                            {
+                                materialCode = detail.MaterielCode,
+                                lineNo = detail.lineNo, // 娉ㄦ剰锛氳繖閲屽彲鑳介渶瑕佽皟鏁村瓧娈靛悕
+                                warehouseCode = detail.WarehouseCode,
+                                qty = detail.OverOutQuantity, // 浣跨敤璁㈠崟鏄庣粏鐨勫凡鍑哄簱鏁伴噺
+                                currentDeliveryQty = detail.OverOutQuantity,
+                                unit = detail.Unit,
+                                barcodes = detailLocks.Select(lockInfo => new WIDESEA_DTO.Outbound.BarcodesModel
+                                {
+                                    barcode = lockInfo.CurrentBarcode,
+                                    supplyCode = lockInfo.SupplyCode,
+                                    batchNo = lockInfo.BatchNo,
+                                    unit = lockInfo.Unit,
+                                    qty = lockInfo.PickedQty // 鏉$爜绾у埆鐨勬暟閲忎粛鐢ㄩ攣瀹氳褰�
+                                }).ToList()
+                            };
+
+                            feedmodel.details.Add(detailModel);
+                        }
+
+                        var result = await _invokeMESService.FeedbackOutbound(feedmodel);
+                        if (result != null && result.code == 200)
+                        {
+                            await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                                .SetColumns(x => x.ReturnToMESStatus == 1)
+                                .Where(x => x.OrderId == outboundOrder.Id)
+                                .ExecuteCommandAsync();
+
+                            await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+                                .SetColumns(x => x.ReturnToMESStatus == 1)
+                                .Where(x => x.OrderNo == orderNo)
+                                .ExecuteCommandAsync();
+                        } 
+                    }
+                }
             }
-
-            var result = await _invokeMESService.FeedbackOutbound(feedmodel);
-            if (result != null && result.code == 200)
+            catch (Exception ex)
             {
-                await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
-                    .SetColumns(x => x.ReturnToMESStatus == 1)
-                    .Where(x => x.OrderId == outboundOrder.Id)
-                    .ExecuteCommandAsync();
-
-                await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
-                    .SetColumns(x => x.ReturnToMESStatus == 1)
-                    .Where(x => x.OrderNo == orderNo)
-                    .ExecuteCommandAsync();
-            }
+                _logger.LogError($"CheckAndUpdateOrderStatus澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
+            }          
 
         }
 

--
Gitblit v1.9.3