From d4b697babbaa3703e9b27f919c3bb813ca1c814e Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期三, 07 一月 2026 10:20:33 +0800
Subject: [PATCH] 1

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |  143 +++++++++++++++++++++++++++++++----------------
 1 files changed, 93 insertions(+), 50 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 fa4c44d..fabb130 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"
@@ -34,6 +34,8 @@
 using WIDESEA_BasicService.MESOperation;
 using WIDESEA_Core.Util;
 using WIDESEA_DTO.Allocate;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using WIDESEA_IRecordService;
 
 namespace WIDESEA_OutboundService
 {
@@ -70,6 +72,8 @@
         private readonly IFeedbackMesService _feedbackMesService;
         private readonly HttpClientHelper _httpClientHelper;
         private readonly IRepository<Dt_MesReturnRecord> _mesReturnRecord;
+        private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecordService;
+        private readonly IInboundOrderService _inboundOrderService;
 
         private Dictionary<string, string> stations = new Dictionary<string, string>
         {
@@ -88,7 +92,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, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog, IInboundService inboundService, IFeedbackMesService feedbackMesService, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord) : base(BaseDal)
+            IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog, IInboundService inboundService, IFeedbackMesService feedbackMesService, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord,IStockQuantityChangeRecordService stockQuantityChangeRecordService,IInboundOrderService inboundOrderService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _stockInfoService = stockInfoService;
@@ -115,6 +119,8 @@
             _feedbackMesService = feedbackMesService;
             _httpClientHelper = httpClientHelper;
             _mesReturnRecord = mesReturnRecord;
+            _stockQuantityChangeRecordService = stockQuantityChangeRecordService;
+            _inboundOrderService = inboundOrderService;
 
         }
 
@@ -2592,13 +2598,14 @@
 
                 Dictionary<int, Dt_InboundOrder> updateInboundOrders = new Dictionary<int, Dt_InboundOrder>();
 
+                List<Dt_StockQuantityChangeRecord> changeRecords = new List<Dt_StockQuantityChangeRecord>();
                 _unitOfWorkManage.BeginTran();
 
                 List<Dt_InboundOrderDetail> allInboundDetails = _inboundOrderDetailService.Db
-                    .Queryable<Dt_InboundOrderDetail>()
-                    .Where(detail => noStockOutSubmit.BarCodeSubmit.Contains(detail.Barcode)
-                        && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt())
-                    .ToList();
+                .Queryable<Dt_InboundOrderDetail>()
+                .Where(detail => noStockOutSubmit.BarCodeSubmit.Contains(detail.Barcode)
+                    && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt())
+                .ToList();
 
                 var detailGroupByOrderId = allInboundDetails.GroupBy(d => d.OrderId).ToList();
                 foreach (var group in detailGroupByOrderId)
@@ -2607,8 +2614,24 @@
                     List<Dt_InboundOrderDetail> groupDetails = group.ToList();
                     List<string> groupBarCodes = groupDetails.Select(d => d.Barcode).ToList();
 
-
                     orderIdBarCodeDict[orderId] = groupBarCodes;
+
+                    Dt_InboundOrder currentInboundOrder = null;
+                    if (!updateInboundOrders.TryGetValue(orderId, out currentInboundOrder))
+                    {
+                        currentInboundOrder = _inboundOrderRepository.Db
+                            .Queryable<Dt_InboundOrder>()
+                            .Where(x => x.Id == orderId)
+                            .Includes(x => x.Details)
+                            .First();
+
+                        if (currentInboundOrder == null)
+                        {
+                            _unitOfWorkManage.RollbackTran();
+                            return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟ID涓� {orderId} 鐨勫崟鎹�");
+                        }
+                        updateInboundOrders[orderId] = currentInboundOrder;
+                    }
 
                     foreach (var detail in groupDetails)
                     {
@@ -2620,53 +2643,49 @@
                             detail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                         }
                         updateInboundDetails.Add(detail);
-                    }
 
-                    if (!updateInboundOrders.ContainsKey(orderId))
-                    {
-                        Dt_InboundOrder inboundOrder = _inboundOrderRepository.Db
-                            .Queryable<Dt_InboundOrder>()
-                            .Where(x => x.Id == orderId)
-                            .Includes(x => x.Details)
-                            .First();
-
-                        if (inboundOrder == null)
+                        //娣诲姞搴撳瓨鍙樺姩璁板綍
+                        Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord
                         {
-                            _unitOfWorkManage.RollbackTran();
-                            return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟ID涓� {orderId} 鐨勫崟鎹�");
-                        }
-
-                        // 鍒ゆ柇鏁村崟鏄惁鍏ㄩ儴瀹屾垚
-                        int totalDetailCount = inboundOrder.Details.Count();
-                        int beforeDetailCount = inboundOrder.Details.Where(x => x.OrderId == orderId && x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
-                            .Count();
-                        int finishedDetailCount = updateInboundDetails
-                            .Where(x => x.OrderId == orderId && x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
-                            .Count();
-
-                        inboundOrder.OrderStatus = totalDetailCount == finishedDetailCount+beforeDetailCount
-                            ? InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()
-                            : InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
-
-                        updateInboundOrders[orderId] = inboundOrder;
+                            StockDetailId = detail.Id,
+                            PalleCode = DateTime.Now.ToString(),
+                            MaterielCode = detail.MaterielCode,
+                            MaterielName = detail.MaterielName ?? "",
+                            BatchNo = detail.BatchNo ?? "",
+                            OriginalSerilNumber = detail.Barcode,
+                            NewSerilNumber = "",
+                            OrderNo = currentInboundOrder.InboundOrderNo,
+                            TaskNum = 0,
+                            ChangeType = (int)StockChangeTypeEnum.Inbound,
+                            ChangeQuantity = detail.NoStockOutQty,
+                            BeforeQuantity = detail.OverInQuantity - detail.NoStockOutQty,
+                            AfterQuantity = detail.OverInQuantity,
+                            SupplyCode = detail.SupplyCode ?? "",
+                            WarehouseCode = detail.WarehouseCode ?? "",
+                            Remark = $"铏氭嫙鍏ュ簱"
+                        };
+                        changeRecords.Add(changeRecord);
                     }
+
+                    var inboundOrder = updateInboundOrders[orderId];
+                    int totalDetailCount = inboundOrder.Details.Count;
+
+                    int finishedDetailCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                                             + groupDetails.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+
+                    inboundOrder.OrderStatus = totalDetailCount == finishedDetailCount
+                        ? InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()
+                        : InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
                 }
 
-                // 6. 鎵归噺鏇存柊鏄庣粏鍜屼富鍗曪紙鎵归噺鎿嶄綔鎻愬崌鎬ц兘锛�
                 if (updateInboundDetails.Any())
                 {
-                    foreach (var detail in updateInboundDetails) 
-                    { 
-                        _inboundOrderDetailService.UpdateData(detail);
-                    }
-
+                    _inboundOrderDetailService.Db.Updateable(updateInboundDetails).ExecuteCommand();
                 }
                 if (updateInboundOrders.Any())
                 {
-                    foreach (var order in updateInboundOrders.Values)
-                    {
-                        _inboundOrderRepository.UpdateData(order);
-                    }
+                    // 鎵归噺鏇存柊鍏ュ簱涓诲崟
+                    _inboundOrderService.Db.Updateable(updateInboundOrders.Values.ToList()).ExecuteCommand();
                 }
 
                 // 7. 寰幆鍒嗙粍缁撴灉锛岃皟鐢∕ES鍥炰紶鏂规硶锛堟寜鍏ュ簱鍗曞垎缁勫洖浼狅級
@@ -2676,15 +2695,15 @@
                     List<string> barCodeList = kvp.Value;
                     //鍏ュ簱鍥炰紶MES
                     NoStockOutBatchInOrderFeedbackToMes(orderId, barCodeList);
-
                 }
+
 
                 //鍙鍑哄簱鏉$爜鐨勫嚭搴撳崟鏄庣粏杩涜璁$畻鍥炰紶
                 List<Dt_OutboundOrderDetail> outboundOrderDetail = outboundOrder.Details
-    .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO)
-        && noStockOutSubmit.BarCodeSubmit.Any(barcode =>
-            x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0))
-    .ToList();
+                .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO)
+                    && noStockOutSubmit.BarCodeSubmit.Any(barcode =>
+                        x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0))
+                .ToList();
 
                 foreach (var item in outboundOrderDetail)
                 {
@@ -2711,12 +2730,36 @@
                         ContractResolver = new CamelCasePropertyNamesContractResolver()
                     };
                     item.ReturnJsonData = JsonConvert.SerializeObject(barcodesList, settings);
-
+                    //娣诲姞搴撳瓨鍙樺姩璁板綍
+                    Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord
+                    {
+                        StockDetailId = item.Id,
+                        PalleCode = DateTime.Now.ToString(),
+                        MaterielCode = item.MaterielCode,
+                        MaterielName = item.MaterielName ?? "",
+                        BatchNo = item.BatchNo ?? "",
+                        OriginalSerilNumber = item.ReturnJsonData,
+                        NewSerilNumber = "",
+                        OrderNo = outboundOrder.OrderNo,
+                        TaskNum = 0,
+                        ChangeType = (int)StockChangeTypeEnum.Inbound,
+                        ChangeQuantity = -item.NoStockOutQty,
+                        BeforeQuantity = item.OrderQuantity - item.OverOutQuantity-item.MoveQty,
+                        AfterQuantity = item.OrderQuantity - item.OverOutQuantity - item.MoveQty - item.NoStockOutQty,
+                        SupplyCode = item.SupplyCode ?? "",
+                        WarehouseCode = item.WarehouseCode ?? "",
+                        Remark = $"铏氭嫙鍑哄簱"
+                    };
+                    changeRecords.Add(changeRecord);
                     outboundOrderDetails.Add(item);
                 }
 
                 _outboundOrderDetailService.UpdateData(outboundOrderDetails);
-
+                //鎵归噺娣诲姞搴撳瓨鍙樺姩璁板綍
+                if (changeRecords.Any())
+                {
+                    _stockQuantityChangeRecordService.Db.Insertable(changeRecords).ExecuteCommand();
+                }
                 // 妫�鏌ュ嚭搴撳崟鏄惁瀹屾垚
                 if (CheckOutboundOrderCompleted(outboundOrder.OrderNo))
                 {

--
Gitblit v1.9.3