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

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |  179 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 124 insertions(+), 55 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
index 81def2c..a0497ba 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
@@ -20,9 +20,11 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Allocate;
 using WIDESEA_DTO.Basic;
 using WIDESEA_DTO.Inbound;
 using WIDESEA_DTO.Outbound;
+using WIDESEA_IAllocateService;
 using WIDESEA_IBasicService;
 using WIDESEA_IOutboundService;
 using WIDESEA_IStockService;
@@ -50,6 +52,7 @@
         private readonly IESSApiService _eSSApiService;
         private readonly IInvokeMESService _invokeMESService;
         private readonly IDailySequenceService _dailySequenceService;
+        private readonly IAllocateService _allocateService;
 
         private readonly ILogger<OutboundPickingService> _logger;
 
@@ -70,7 +73,7 @@
         public OutboundPickingService(IRepository<Dt_PickingRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, IStockService stockService,
             IOutStockLockInfoService outStockLockInfoService, IStockInfoDetailService stockInfoDetailService, ILocationInfoService locationInfoService,
             IOutboundOrderDetailService outboundOrderDetailService, ISplitPackageService splitPackageService, IOutboundOrderService outboundOrderService,
-            IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService) : base(BaseDal)
+            IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _stockInfoService = stockInfoService;
@@ -86,6 +89,7 @@
             _logger = logger;
             _invokeMESService = invokeMESService;
             _dailySequenceService = dailySequenceService;
+            _allocateService = allocateService;
         }
 
 
@@ -225,14 +229,14 @@
                 }
                 _unitOfWorkManage.BeginTran();
 
-                // 1. 鍓嶇疆楠岃瘉
+                // 鍓嶇疆楠岃瘉
                 var validationResult = await ValidateCancelRequest(orderNo, palletCode, barcode);
                 if (!validationResult.IsValid)
                     return WebResponseContent.Instance.Error(validationResult.ErrorMessage);
 
                 var (pickingRecord, lockInfo, orderDetail) = validationResult.Data;
 
-                // 2. 鎵ц鍙栨秷閫昏緫
+                //鎵ц鍙栨秷閫昏緫
                 await ExecuteCancelLogic(lockInfo, pickingRecord, orderDetail, orderNo);
 
                 _unitOfWorkManage.CommitTran();
@@ -742,7 +746,7 @@
         {
             try
             {
-                // 1. 楠岃瘉璁㈠崟鏄庣粏鏁版嵁
+                //  楠岃瘉璁㈠崟鏄庣粏鏁版嵁
                 var currentOrderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
                     .FirstAsync(x => x.Id == context.OrderDetail.Id);
 
@@ -752,14 +756,14 @@
                 if (currentOrderDetail.PickedQty < context.PickingRecord.PickQuantity)
                     return ValidationResult<bool>.Error($"璁㈠崟鏄庣粏宸叉嫞閫夋暟閲�({currentOrderDetail.PickedQty})灏忎簬鍙栨秷鏁伴噺({context.PickingRecord.PickQuantity})");
 
-                // 2. 楠岃瘉閿佸畾淇℃伅鏁版嵁
+                //  楠岃瘉閿佸畾淇℃伅鏁版嵁
                 var currentLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
                     .FirstAsync(x => x.Id == context.LockInfo.Id);
 
                 if (currentLockInfo.PickedQty < context.PickingRecord.PickQuantity)
                     return ValidationResult<bool>.Error($"閿佸畾淇℃伅宸叉嫞閫夋暟閲�({currentLockInfo.PickedQty})灏忎簬鍙栨秷鏁伴噺({context.PickingRecord.PickQuantity})");
 
-                // 3. 楠岃瘉搴撳瓨鏁版嵁
+                // 楠岃瘉搴撳瓨鏁版嵁
                 var currentStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
                     .FirstAsync(x => x.Barcode == context.PickingRecord.Barcode && x.StockId == context.PickingRecord.StockId);
 
@@ -770,7 +774,7 @@
                     currentStockDetail.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
                     return ValidationResult<bool>.Error($"鏉$爜{context.PickingRecord.Barcode}宸茬粡鍥炲簱锛屾棤娉曞彇娑堝垎鎷�");
 
-                // 4. 楠岃瘉鐘舵�佹祦杞殑鍚堟硶鎬�
+                // 楠岃瘉鐘舵�佹祦杞殑鍚堟硶鎬�
                 if (!await CanCancelPicking(currentLockInfo, currentStockDetail))
                     return ValidationResult<bool>.Error($"褰撳墠鐘舵�佷笉鍏佽鍙栨秷鍒嗘嫞");
 
@@ -916,7 +920,7 @@
         {
             decimal cancelQty = pickingRecord.PickQuantity;
 
-            // 1. 鏁版嵁涓�鑷存�ч獙璇�
+            // 鏁版嵁涓�鑷存�ч獙璇�
             var context = new CancelPickingContext
             {
                 LockInfo = lockInfo,
@@ -930,7 +934,7 @@
             if (!validationResult.IsValid)
                 throw new Exception(validationResult.ErrorMessage);
 
-            // 2. 澶勭悊涓嶅悓绫诲瀷鐨勫彇娑�
+            // 澶勭悊涓嶅悓绫诲瀷鐨勫彇娑�
             if (lockInfo.IsSplitted == 1 && lockInfo.ParentLockId.HasValue)
             {
                 await HandleSplitBarcodeCancel(lockInfo, pickingRecord, cancelQty);
@@ -1654,78 +1658,141 @@
         private async Task HandleOrderCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
         {
             // 璋冩嫧鍑哄簱鍜岄噸妫�鍑哄簱涓嶉渶瑕佸弽棣圡ES
-            if (outboundOrder.OrderType == OutOrderTypeEnum.Allocate.ObjToInt() ||
-                outboundOrder.OrderType == OutOrderTypeEnum.ReCheck.ObjToInt())
+            if (outboundOrder.OrderType == OutOrderTypeEnum.Allocate.ObjToInt())
             {
-                return;
-            }
-
-            try
-            {
-                var feedmodel = new FeedbackOutboundRequestModel
+                var allocate = _allocateService.Repository.QueryData(x => x.UpperOrderNo == outboundOrder.UpperOrderNo).First();
+                var feedmodel = new AllocateDto
                 {
-                    reqCode = Guid.NewGuid().ToString(),
-                    reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    business_type = outboundOrder.BusinessType,
-                    factoryArea = outboundOrder.FactoryArea,
-                    operationType = 1,
+                    ReqCode = Guid.NewGuid().ToString(),
+                    ReqTime = DateTime.Now.ToString(),
+                    BusinessType = "3",
+                  
+                    FactoryArea = outboundOrder.FactoryArea,
+                    OperationType = 1,
                     Operator = App.User.UserName,
-                    orderNo = outboundOrder.UpperOrderNo,
-                    documentsNO = outboundOrder.OrderNo,
-                    status = outboundOrder.OrderStatus,
-                    details = new List<FeedbackOutboundDetailsModel>()
-                };
+                    OrderNo = outboundOrder.UpperOrderNo,
+                   // documentsNO = outboundOrder.OrderNo,
+                   // status = outboundOrder.OrderStatus,
+                    fromWarehouse = allocate?.FromWarehouse ?? "",
+                    toWarehouse = allocate?.ToWarehouse ?? "",
+                    Details = new List<AllocateDtoDetail>()
 
+                };
                 // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
                 var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
                     .Where(x => x.OrderNo == orderNo && x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
                     .ToListAsync();
 
                 var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.Unit, item.WarehouseCode })
-                   .Select(group => new FeedbackOutboundDetailsModel
+                   .Select(group => new AllocateDtoDetail
                    {
-                       materialCode = group.Key.MaterielCode,
-                       lineNo = group.Key.lineNo,
-                       warehouseCode = group.Key.WarehouseCode,
-                       qty = group.Sum(x => x.PickedQty),
-                       currentDeliveryQty = group.Sum(x => x.PickedQty),
-                       unit = group.Key.Unit,
-                       barcodes = group.Select(row => new WIDESEA_DTO.Outbound.BarcodesModel
+                       MaterialCode = group.Key.MaterielCode,
+                       LineNo = group.Key.lineNo,
+                       WarehouseCode = group.Key.WarehouseCode,
+                       Qty = group.Sum(x => x.PickedQty),
+                      
+                       Unit = group.Key.Unit,
+                       Barcodes = group.Select(row => new BarcodeInfo
                        {
-                           barcode = row.CurrentBarcode,
-                           supplyCode = row.SupplyCode,
-                           batchNo = row.BatchNo,
-                           unit = row.Unit,
-                           qty = row.PickedQty
+                           Barcode = row.CurrentBarcode,
+                           SupplyCode = row.SupplyCode,
+                           BatchNo = row.BatchNo,
+                           Unit = row.Unit,
+                           Qty = row.PickedQty
                        }).ToList()
+
+                  
                    }).ToList();
+                feedmodel.Details = groupedData;
 
-                feedmodel.details = groupedData;
-
-                var result = await _invokeMESService.FeedbackOutbound(feedmodel);
+                var result = await _invokeMESService.FeedbackAllocate(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();
+                           .SetColumns(x => x.ReturnToMESStatus == 1)
+                           .Where(x => x.OrderId == outboundOrder.Id).ExecuteCommandAsync();
 
                     await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
                           .SetColumns(x => new Dt_OutboundOrder
                           {
                               ReturnToMESStatus = 1,
                               Operator = App.User.UserName,
-                          })
-
-                        .Where(x => x.OrderNo == orderNo)
-                        .ExecuteCommandAsync();
+                          }).Where(x => x.OrderNo == orderNo).ExecuteCommandAsync();
                 }
-
-                _logger.LogError($"FeedbackOutbound鎴愬姛 - OrderNo: {orderNo}, {JsonSerializer.Serialize(result)}");
             }
-            catch (Exception ex)
+            else if (outboundOrder.OrderType == OutOrderTypeEnum.ReCheck.ObjToInt())
             {
-                _logger.LogError($"FeedbackOutbound澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
+
+            }
+            else
+            {
+                try
+                {
+                    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>()
+                    };
+
+                    // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
+                    var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                        .Where(x => x.OrderNo == orderNo && x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
+                        .ToListAsync();
+
+                    var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.Unit, item.WarehouseCode })
+                       .Select(group => new FeedbackOutboundDetailsModel
+                       {
+                           materialCode = group.Key.MaterielCode,
+                           lineNo = group.Key.lineNo,
+                           warehouseCode = group.Key.WarehouseCode,
+                           qty = group.Sum(x => x.PickedQty),
+                           currentDeliveryQty = group.Sum(x => x.PickedQty),
+                           unit = group.Key.Unit,
+                           barcodes = group.Select(row => new WIDESEA_DTO.Outbound.BarcodesModel
+                           {
+                               barcode = row.CurrentBarcode,
+                               supplyCode = row.SupplyCode,
+                               batchNo = row.BatchNo,
+                               unit = row.Unit,
+                               qty = row.PickedQty
+                           }).ToList()
+                       }).ToList();
+
+                    feedmodel.details = groupedData;
+
+                    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 => new Dt_OutboundOrder
+                              {
+                                  ReturnToMESStatus = 1,
+                                  Operator = App.User.UserName,
+                              })
+
+                            .Where(x => x.OrderNo == orderNo)
+                            .ExecuteCommandAsync();
+                    }
+
+                    _logger.LogError($"FeedbackOutbound鎴愬姛 - OrderNo: {orderNo}, {JsonSerializer.Serialize(result)}");
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogError($"FeedbackOutbound澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
+                }
             }
         }
 
@@ -2101,6 +2168,8 @@
                 FactoryArea = originalLock.FactoryArea,
                 lineNo = originalLock.lineNo,
                 WarehouseCode = originalLock.WarehouseCode,
+                BarcodeQty=originalLock.BarcodeQty,
+                BarcodeUnit=originalLock.BarcodeUnit,
 
             };
 

--
Gitblit v1.9.3