From 6b6c66cd99a4e73eea9bc68c8d7c63fd08180fb9 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 18 十一月 2025 16:12:46 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 250 ++++++++++++++++++-------------------------------
1 files changed, 91 insertions(+), 159 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 8c52841..ef0c0c2 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"
@@ -17,6 +17,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundService;
@@ -43,7 +44,7 @@
private readonly ISplitPackageService _splitPackageService;
private readonly IRepository<Dt_Task> _taskRepository;
private readonly IESSApiService _eSSApiService;
-
+ private readonly IInvokeMESService _invokeMESService;
private readonly ILogger<OutboundPickingService> _logger;
@@ -61,7 +62,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) : base(BaseDal)
+ 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) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
_stockInfoService = stockInfoService;
@@ -75,6 +76,7 @@
_taskRepository = taskRepository;
_eSSApiService = eSSApiService;
_logger = logger;
+ _invokeMESService = invokeMESService;
}
@@ -177,6 +179,12 @@
if (lockInfo.PalletCode != palletCode)
throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}");
+ var outorderdetail = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().First(x => x.Id == lockInfo.OrderDetailId);
+ if (outorderdetail != null && lockInfo.AssignQuantity > outorderdetail.OrderQuantity)
+ {
+ throw new Exception($"鏉$爜{barcode}鐨勫嚭搴撴暟閲忓ぇ浜庤鍗曠殑鏁伴噺");
+ }
+
var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
.Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId)
.FirstAsync();
@@ -248,10 +256,15 @@
private async Task CheckAndUpdateOrderStatus(string orderNo)
{
+ var orderDetails = _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+ .LeftJoin<Dt_OutboundOrder>((o, item) => o.OrderId == item.Id) // 鍏宠仈鏉′欢锛氱埗琛� Id = 瀛愯〃 OrderId
+ .Where((o, item) => item.OrderNo == orderNo) // 杩囨护鐖惰〃 OrderNo
+ .Select((o, item) => o) // 鍙繑鍥炲瓙琛ㄦ暟鎹�
+ .ToList();
- var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.OrderId == orderNo.ObjToInt())
- .ToListAsync();
+ //var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+ // .Where(x => x.OrderId == orderNo.ObjToInt())
+ // .ToListAsync();
bool allCompleted = true;
foreach (var detail in orderDetails)
@@ -265,10 +278,60 @@
if (allCompleted)
{
- await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
- .SetColumns(x => x.OrderStatus == 2) // 宸插畬鎴�
- .Where(x => x.OrderNo == orderNo)
- .ExecuteCommandAsync();
+ try
+ {
+ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+ .SetColumns(x => x.OrderStatus == 2) // 宸插畬鎴�
+ .Where(x => x.OrderNo == orderNo)
+ .ExecuteCommandAsync();
+
+ var outboundOrder = _stockInfoService.Db.Queryable<Dt_OutboundOrder>().First(x => x.OrderNo == orderNo);
+
+
+ if (outboundOrder != null && outboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+ {
+ var feedmodel = new FeedbackOutboundRequestModel
+ {
+ reqCode = Guid.NewGuid().ToString(),
+ reqTime = DateTime.Now.ToString(),
+ business_type = outboundOrder.BusinessType,
+ factoryArea = outboundOrder.FactoryArea,
+ operationType = 1,
+ Operator = outboundOrder.Operator,
+ orderNo = outboundOrder.UpperOrderNo,
+ status = outboundOrder.OrderStatus,
+ details = new List<FeedbackOutboundDetailsModel>()
+
+ };
+ var lists = _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>().Where(x => x.OrderNo == orderNo).ToList();
+
+ 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,
+ currentDeliveryQty = group.Sum(x => x.OrderQuantity),
+ // warehouseCode= "1072",
+ 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.AssignQuantity
+ }).ToList()
+ }).ToList();
+ feedmodel.details = groupedData;
+
+ _invokeMESService.FeedbackOutbound(feedmodel);
+ }
+ }
+ catch (Exception ex) {
+ _logger.LogError(" OutboundPickingService FeedbackOutbound : " + ex.Message);
+ }
+
}
}
@@ -276,165 +339,18 @@
/// <summary>
/// 鍥炲簱鎿嶄綔
/// </summary>
- //public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason)
- //{
- // try
- // {
- // // 1. 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
- // var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- // .Where(it => it.OrderNo == orderNo && it.Status == 1)
- // .ToListAsync();
-
- // if (!remainingLocks.Any())
- // {
- // return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
- // }
- // var tasks = new List<Dt_Task>();
- // // 鎸夋墭鐩樺垎缁�
- // var palletGroups = remainingLocks.GroupBy(x => x.PalletCode);
- // //鏌ヨ浠诲姟琛�
- // var task = _taskRepository.QueryData(x => x.TaskNum == remainingLocks.First().TaskNum).FirstOrDefault();
- // foreach (var group in palletGroups)
- // {
- // if (group.Key == palletCode)
- // {
- // var totalReturnQty = group.Sum(x => x.AssignQuantity - x.PickedQty);
-
- // if (totalReturnQty <= 0) continue;
-
- // // 鍒嗛厤鏂拌揣浣�
- // var newLocation = _locationInfoService.AssignLocation();
-
- // // 鏇存柊鍑哄簱閿佸畾璁板綍鐘舵��
- // var lockIds = group.Where(x => x.PalletCode == palletCode).Select(x => x.Id).ToList();
- // await _outStockLockInfoService.Db.Updateable<Dt_OutStockLockInfo>()
- // .SetColumns(it => new Dt_OutStockLockInfo { Status = OutLockStockStatusEnum.鍥炲簱涓�.ObjToInt() })
- // .Where(it => lockIds.Contains(it.Id))
- // .ExecuteCommandAsync();
-
- // // 鏇存柊鎷嗗寘鏉$爜璁板綍鐘舵��
- // var splitBarcodes = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
- // .Where(it => lockIds.Contains(it.OutStockLockInfoId))
- // .ToListAsync();
-
- // foreach (var splitBarcode in splitBarcodes)
- // {
- // splitBarcode.Status = 3;
- // await _splitPackageService.Db.Updateable(splitBarcode).ExecuteCommandAsync();
- // }
-
- // foreach (var lockInfo in group)
- // {
- // if (lockInfo.PalletCode == palletCode)
- // {
- // decimal returnQty = lockInfo.AssignQuantity - lockInfo.PickedQty;
-
- // // 妫�鏌ュ簱瀛樿褰曟槸鍚﹀瓨鍦�
- // var existingStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
- // .FirstAsync();
-
- // if (existingStock != null)
- // {
- // // 搴撳瓨璁板綍瀛樺湪锛屾仮澶嶉攣瀹氭暟閲�
- // await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
- // .SetColumns(it => new Dt_StockInfoDetail
- // {
- // OutboundQuantity = it.OutboundQuantity - returnQty
- // })
- // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
- // .ExecuteCommandAsync();
- // }
- // else
- // {
- // // 搴撳瓨璁板綍涓嶅瓨鍦紙鍙兘鏄媶鍖呬骇鐢熺殑鏂版潯鐮侊級锛屽垱寤烘柊鐨勫簱瀛樿褰�
- // var newStockDetail = new Dt_StockInfoDetail
- // {
- // StockId = lockInfo.StockId,
- // MaterielCode = lockInfo.MaterielCode,
- // OrderNo = lockInfo.OrderNo,
- // BatchNo = lockInfo.BatchNo,
- // StockQuantity = returnQty, // 瀹為檯搴撳瓨鏁伴噺
- // OutboundQuantity = 0, // 鍥炲簱鍚庝笉鍐嶉攣瀹�
- // Barcode = lockInfo.CurrentBarcode,
- // InboundOrderRowNo = "0",
- // Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
-
- // };
- // await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
- // }
- // }
- // }
-
-
- // Dt_Task newtask = new()
- // {
- // CurrentAddress = stations[task.TargetAddress],
- // Grade = 0,
- // PalletCode = palletCode,
- // NextAddress = "",
- // OrderNo= task.OrderNo,
- // Roadway = newLocation.RoadwayNo,
- // SourceAddress = stations[task.TargetAddress],
- // TargetAddress = newLocation.LocationCode,
- // TaskStatus = TaskStatusEnum.New.ObjToInt(),
- // TaskType = TaskTypeEnum.InPick.ObjToInt(),
- // // TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
- // PalletType = task.PalletType,
- // WarehouseId = task.WarehouseId,
- // };
- // tasks.Add(newtask);
-
- // }
- // }
- // try
- // {
- // await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync();
- // //鍒犻櫎 鍑哄簱鐨� task
-
-
- // //缁� ess 娴佸姩淇″彿 鍜屽垱寤轰换鍔�
-
-
- // }
- // catch (Exception ex)
- // {
-
- // }
-
-
-
-
- // return WebResponseContent.Instance.OK();
- // }
- // catch (Exception ex)
- // {
- // return WebResponseContent.Instance.Error($"鍥炲簱鎿嶄綔澶辫触: {ex.Message}");
- // }
- //}
public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason)
{
try
{
- // 1. 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
+ // 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
.Where(it => it.OrderNo == orderNo && it.Status == 1)
.ToListAsync();
var stockinfo = _stockInfoService.Db.Queryable<Dt_StockInfo>().First(x => x.PalletCode == palletCode);
- // 2. 妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
- var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(it => it.StockId == stockinfo.Id && it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt())
- .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // 鏈畬鍏ㄥ嚭搴撶殑
- .ToListAsync();
-
- // 3. 濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋級
- if (!remainingLocks.Any() && !palletStockGoods.Any())
- {
- return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
- }
var tasks = new List<Dt_Task>();
@@ -447,6 +363,21 @@
{
return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟淇℃伅");
}
+
+ // 妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
+ var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(it => it.StockId == stockinfo.Id && (it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() || it.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()))
+ .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // 鏈畬鍏ㄥ嚭搴撶殑
+ .ToListAsync();
+
+ // 濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋級
+ if (!remainingLocks.Any() && !palletStockGoods.Any())
+ {
+ //鏄惁鑷姩鍥炲簱锛屾妸涔嬪墠鍑哄簱鐨勪换鍔″垹闄わ紝鐒跺悗缁勪釜绌虹洏鍏ュ簱銆�
+ return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
+ }
+
+
var firstlocation = _locationInfoService.Db.Queryable<Dt_LocationInfo>().First(x => x.LocationCode == task.SourceAddress);
decimal totalReturnQty = 0;
var hasRemainingLocks = remainingLocks.Any(x => x.PalletCode == palletCode);
@@ -687,11 +618,11 @@
var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
.Where(x => x.Barcode == barcode && x.StockId == outStockInfo.StockId)
.FirstAsync();
-
+
stockDetail.StockQuantity += outStockInfo.AssignQuantity;
stockDetail.OutboundQuantity += outStockInfo.AssignQuantity;
await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
-
+
// 杩樺師鍑哄簱鍗曟槑缁�
var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
@@ -699,6 +630,7 @@
.FirstAsync();
orderDetail.OverOutQuantity -= outStockInfo.AssignQuantity;
+ orderDetail.PickedQty = 0;
await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
// 鍒犻櫎鎷i�夊巻鍙�
--
Gitblit v1.9.3