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