From 24b2d518f0231adef779c1ede5f9ca2baee804f5 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期三, 26 十一月 2025 08:38:32 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs |  136 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 131 insertions(+), 5 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_BasicService/InvokeMESService.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_BasicService/InvokeMESService.cs"
index b17ee97..34e8220 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_BasicService/InvokeMESService.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_BasicService/InvokeMESService.cs"
@@ -304,24 +304,150 @@
                     {
                         await HandleOutboundOrderToMESCompletion(outboundOrder, orderNo);
                     }
-                    else if (outboundOrder != null && outboundOrder.IsBatch ==1)
+                    else if (outboundOrder != null && outboundOrder.IsBatch == 1)
                     {
-
+                        await HandleOutboundOrderBatchToMESCompletion(outboundOrder, orderNo);
                     }
-
-
                 }
 
             }
             return WebResponseContent.Instance.OK();
         }
+        private async Task HandleOutboundOrderBatchToMESCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
+        {
+
+            try
+            {
+                if (outboundOrder.ReturnToMESStatus == 1)
+                {
+                    return;
+                }
+                var orderDetails = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+                    .LeftJoin<Dt_OutboundOrder>((o, item) => o.OrderId == item.Id)
+                    .Where((o, item) => item.OrderNo == orderNo && item.ReturnToMESStatus != 1)
+                    .Select((o, item) => o)
+                    .ToListAsync();
+
+                var detailids = new List<int>();
+                var allCompleted = true;
+                foreach (var detail in orderDetails.Where(x => x.ReturnToMESStatus == 0).ToList())
+                {
+                    if (detail.OverOutQuantity >= detail.NeedOutQuantity)
+                    {
+                        detailids.Add(detail.Id);
+                    }
+                    else
+                    {
+                        allCompleted = false;
+                    }
+                }
+                if (orderDetails.Any(x => x.ReturnToMESStatus == 2))
+                {
+                    allCompleted = false;
+                }
+
+                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();
+
+                }
+                var documentno = UniqueValueGenerator.Generate();
+                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 = outboundOrder.Operator,
+                    orderNo = outboundOrder.UpperOrderNo,
+                    documentsNO = documentno,
+                    status = outboundOrder.OrderStatus,
+                    details = new List<FeedbackOutboundDetailsModel>()
+                };
+
+
+                foreach (var detail in orderDetails.Where(x => detailids.Contains(x.Id)).ToList())
+                {
+                    // 鑾峰彇璇ユ槑缁嗗搴旂殑鏉$爜淇℃伅锛堜粠閿佸畾璁板綍锛�
+                    var detailLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                        .Where(x => x.OrderNo == orderNo && detailids.Contains(x.OrderDetailId) &&
+                                   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 FeedbackOutbound(feedmodel);
+                if (result != null && result.code == 200)
+                {
+
+                    await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                           .SetColumns(it => new Dt_OutboundOrderDetail
+                           {
+                               ReturnToMESStatus = 1,
+                               documentsNO = documentno,
+                           })
+                        .Where(x => detailids.Contains(x.Id))
+                        .ExecuteCommandAsync();
+
+                    if (allCompleted && newStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+                    {
+                        await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+                          .SetColumns(x => x.ReturnToMESStatus == 1)
+                          .Where(x => x.OrderNo == orderNo)
+                          .ExecuteCommandAsync();
+                    }
+                }
+                else
+                {
+                    await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                         .SetColumns(it => new Dt_OutboundOrderDetail
+                         {
+                             ReturnToMESStatus = 2,
+                             documentsNO = documentno,
+                         })
+                      .Where(x => detailids.Contains(x.Id))
+                      .ExecuteCommandAsync();
+                }
+
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError($"CheckAndUpdateOrderStatus澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
+            }
+        }
+
 
         private async Task HandleOutboundOrderToMESCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
         {
 
             try
             {
-                if (outboundOrder.ReturnToMESStatus == 1 || outboundOrder.IsBatch == 1)
+                if (outboundOrder.ReturnToMESStatus == 1)
                 {
                     return;
                 }

--
Gitblit v1.9.3