From 266e4bf654c55ce2f7e9271048e4625f1b8b49f6 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期一, 29 十二月 2025 14:36:08 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs | 88 ++++++++++++++++++++++++++++----------------
1 files changed, 56 insertions(+), 32 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/OutboundService.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/OutboundService.cs"
index c779ed3..4d53ab6 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/OutboundService.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/OutboundService.cs"
@@ -110,6 +110,7 @@
PickingOutboundResponseDTO response = new PickingOutboundResponseDTO();
try
{
+ _unitOfWorkManage.BeginTran();
// 1. 璁$畻鍑哄簱鏁伴噺閫昏緫
OutboundCalculationDTO calculationResult = CalcOutboundQuantity(request);
@@ -170,7 +171,8 @@
pickedDetails.AddRange(materielPickedDetails.PickedDetails);
- decimal allallocatedQuantity = materielCalc.UnallocatedQuantity;
+ decimal allallocatedQuantity = Math.Min(materielCalc.UnallocatedQuantity, materielPickedDetails.PickedDetails.Sum(x => x.OutboundQuantity));
+ materielCalc.UnallocatedQuantity = allallocatedQuantity;
// 鏇存柊鍑哄簱鍗曟槑缁嗭紙澧炲姞閿佸畾鏁伴噺锛屼笉澧炲姞宸插嚭鏁伴噺锛�
foreach (var detail in materielCalc.Details)
{
@@ -248,14 +250,23 @@
}
result.FactoryArea = outboundOrder.FactoryArea;
+ List<Dt_OutboundOrderDetail> selectedDetails = new List<Dt_OutboundOrderDetail>();
- // 鑾峰彇閫夋嫨鐨勫嚭搴撴槑缁�
- List<Dt_OutboundOrderDetail> selectedDetails = _detailRepository.QueryData(x => x.OrderId == outboundOrder.Id && request.DetailIds.Contains(x.Id));
-
- if (outboundOrder.IsBatch == 1)
+ if (request.DetailIds == null || !request.DetailIds.Any())
{
- selectedDetails = _detailRepository.QueryData(x => x.OrderId == selectedDetails.First().OrderId && x.WarehouseCode == selectedDetails.First().WarehouseCode && x.MaterielCode == selectedDetails.First().MaterielCode && x.BatchNo == selectedDetails.First().BatchNo && x.SupplyCode == selectedDetails.First().SupplyCode);
+ selectedDetails = _detailRepository.QueryData(x => x.OrderId == outboundOrder.Id);
}
+ else
+ {
+ // 鑾峰彇閫夋嫨鐨勫嚭搴撴槑缁�
+ selectedDetails = _detailRepository.QueryData(x => x.OrderId == outboundOrder.Id && request.DetailIds.Contains(x.Id));
+ }
+
+
+ //if (outboundOrder.IsBatch == 1 && request.DetailIds.Count == 1)
+ //{
+ // selectedDetails = _detailRepository.QueryData(x => x.OrderId == selectedDetails.First().OrderId && x.WarehouseCode == selectedDetails.First().WarehouseCode && x.MaterielCode == selectedDetails.First().MaterielCode && x.BatchNo == selectedDetails.First().BatchNo && x.SupplyCode == selectedDetails.First().SupplyCode);
+ //}
if (!selectedDetails.Any())
@@ -276,7 +287,7 @@
result.OutboundOrder = outboundOrder;
result.SelectedDetails = selectedDetails;
- if (outboundOrder.IsBatch == 0)
+ if (outboundOrder.IsBatch == 0 || request.DetailIds.Count != 1)
{
// 澶氭槑缁嗗嚭搴擄細鎸夌墿鏂欏垎缁勫鐞�
result.MaterielCalculations = CalcMaterielOutboundQuantities(outboundOrder, selectedDetails.ToList());
@@ -363,7 +374,6 @@
.GroupBy(x => new
{
x.MaterielCode,
- x.MaterielName,
x.BatchNo,
x.SupplyCode,
x.WarehouseCode
@@ -371,7 +381,6 @@
.Select(g => new MaterielOutboundCalculationDTO
{
MaterielCode = g.Key.MaterielCode,
- MaterielName = g.Key.MaterielName,
BatchNo = g.Key.BatchNo,
SupplyCode = g.Key.SupplyCode,
WarehouseCode = g.Key.WarehouseCode,
@@ -423,13 +432,15 @@
Dictionary<int, List<Dt_OutStockLockInfo>> lockStockMap = data.LockStockMap;
// 楠岃瘉鎬诲彲鐢ㄥ簱瀛樻槸鍚︽弧瓒冲嚭搴撻渶姹�
- if (totalAvailableStock < materielCalc.UnallocatedQuantity)
- {
- throw new Exception($"鐗╂枡 {materielCalc.MaterielCode} 鍙敤搴撳瓨 {totalAvailableStock} 涓嶈冻鍑哄簱鏁伴噺 {materielCalc.UnallocatedQuantity}");
- }
+ //if (totalAvailableStock < materielCalc.UnallocatedQuantity)
+ //{
+ // throw new Exception($"鐗╂枡 {materielCalc.MaterielCode} 鍙敤搴撳瓨 {totalAvailableStock} 涓嶈冻鍑哄簱鏁伴噺 {materielCalc.UnallocatedQuantity}");
+ //}
+ // 闇�鍒嗛厤鏁伴噺
+ decimal remainingQuantity = Math.Min(totalAvailableStock, materielCalc.UnallocatedQuantity);
// 闇�鍒嗛厤鏁伴噺
- decimal remainingQuantity = materielCalc.UnallocatedQuantity;
+ //decimal remainingQuantity = materielCalc.UnallocatedQuantity;
// 宸插垎閰嶇殑鎵樼洏鍒楄〃
List<string> allocatedPallets = new List<string>();
@@ -538,7 +549,7 @@
private List<Dt_StockInfo> BuildStockQueryWithInfo(MaterielOutboundCalculationDTO materielCalc, string factoryArea)
{
// 鍩虹鏌ヨ鏉′欢锛氱墿鏂欑紪鍙枫�佹壒娆″彿锛堝鏋滄彁渚涳級銆佸簱瀛樻暟閲�>0
- ISugarQueryable<Dt_StockInfoDetail> stockDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.MaterielCode == materielCalc.MaterielCode && x.StockQuantity > 0);
+ ISugarQueryable<Dt_StockInfoDetail> stockDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.MaterielCode == materielCalc.MaterielCode && x.StockQuantity > 0 && (x.Status == (int)StockStatusEmun.鍏ュ簱瀹屾垚 || x.Status == (int)StockStatusEmun.鎵嬪姩瑙i攣));
// 鏍规嵁鏉′欢娣诲姞渚涘簲鍟嗙紪鍙峰尮閰嶏紙涓嶄负绌烘椂鎵嶉渶瑕佸尮閰嶏級
if (!string.IsNullOrEmpty(materielCalc.SupplyCode))
@@ -959,7 +970,6 @@
if (outboundOrder.OrderType != 0)
{
-
Dt_AllocateOrder allocateOrder = _allocateOrderRepository.QueryFirst(x => x.OrderNo == outboundOrder.OrderNo);
if (allocateOrder != null)
{
@@ -1005,34 +1015,41 @@
//}
List<Barcodes> barcodesList = new List<Barcodes>();
List<Dt_StockInfoDetail> stockInfoDetails = stockInfo.Details.Where((x => x.StockQuantity > x.OutboundQuantity)).ToList();
+
+ decimal itemQuantity = item.LockQuantity - item.OverOutQuantity;
+
foreach (var stockDetail in stockInfoDetails)
{
- if (item.LockQuantity - item.OverOutQuantity >= stockDetail.StockQuantity - stockInfoDetail.OutboundQuantity)
+ if (itemQuantity >= stockDetail.StockQuantity - stockDetail.OutboundQuantity)
{
Barcodes barcodes = new Barcodes
{
Barcode = stockDetail.Barcode,
- Qty = stockDetail.StockQuantity - stockInfoDetail.OutboundQuantity,
+ Qty = stockDetail.StockQuantity - stockDetail.OutboundQuantity,
SupplyCode = stockDetail?.SupplyCode ?? "",
BatchNo = stockDetail?.BatchNo ?? "",
Unit = stockDetail?.Unit ?? ""
};
- stockDetail.StockQuantity = stockInfoDetail.OutboundQuantity;
+ itemQuantity -= (stockDetail.StockQuantity - stockDetail.OutboundQuantity);
+ stockDetail.OutboundQuantity = stockDetail.StockQuantity;
barcodesList.Add(barcodes);
+
+ if (itemQuantity <= 0) break;
}
else
{
Barcodes barcodes = new Barcodes
{
Barcode = stockDetail.Barcode,
- Qty = item.LockQuantity - item.OverOutQuantity,
+ Qty = itemQuantity,
SupplyCode = stockDetail?.SupplyCode ?? "",
BatchNo = stockDetail?.BatchNo ?? "",
Unit = stockDetail?.Unit ?? ""
};
- stockInfoDetail.OutboundQuantity += item.LockQuantity - item.OverOutQuantity;
+ stockDetail.OutboundQuantity += itemQuantity;
barcodesList.Add(barcodes);
+ break;
}
}
@@ -1097,8 +1114,11 @@
{
UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
+ if (outboundOrder.OrderType != OutOrderTypeEnum.InternalAllocat.ObjToInt())
+ {
+ _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
+ }
- //todo: 鍥炰紶MES
}
}
catch (Exception ex)
@@ -1163,6 +1183,8 @@
FactoryArea = item.FactoryArea,
WarehouseCode = item.WarehouseCode,
Barcode = item.Barcode,
+ CreateDate = item.CreateDate,
+ Creater = item.Creater,
Remark = $"鏁寸鍑哄簱瀹屾垚鍒犻櫎锛屾潯鐮侊細{request.PalletCode}锛屽師鏁伴噺锛歿item.StockQuantity}锛屽嚭搴撴暟閲忥細{item.StockQuantity}锛屾搷浣滆�咃細{request.Operator}"
};
historyRecords.Add(historyRecord);
@@ -1413,7 +1435,7 @@
List<Barcodes> barcodesList = new List<Barcodes>();
Barcodes barcodes = new Barcodes
{
- Barcode = request.Barcode,
+ Barcode = isUnpacked ? newBarcode : stockDetail?.Barcode,
Qty = barcodeQuantity,
SupplyCode = stockDetail?.SupplyCode ?? "",
BatchNo = stockDetail?.BatchNo ?? "",
@@ -1484,8 +1506,10 @@
{
UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
-
- //todo: 鍥炰紶MES
+ if (outboundOrder.OrderType != OutOrderTypeEnum.InternalAllocat.ObjToInt())
+ {
+ _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
+ }
}
}
catch (Exception ex)
@@ -1896,13 +1920,13 @@
var newTask = new Dt_Task()
{
- CurrentAddress = stations[station],
+ CurrentAddress = stations.GetValueOrDefault(station) ?? "",
Grade = 0,
PalletCode = palletCode,
NextAddress = "",
OrderNo = OrderNo,
Roadway = newLocation.RoadwayNo,
- SourceAddress = stations[station],
+ SourceAddress = stations.GetValueOrDefault(station) ?? "",
TargetAddress = newLocation.LocationCode,
TaskStatus = (int)TaskStatusEnum.New,
TaskType = stock.Details.Count > 0 ? (int)TaskTypeEnum.InPick : (int)TaskTypeEnum.InEmpty,
@@ -1912,11 +1936,11 @@
_stockInfoRepository.UpdateData(stock);
_taskRepository.AddData(newTask);
- //var moveResult = await _eSSApiService.MoveContainerAsync(new MoveContainerRequest
- //{
- // slotCode = movestations[station],
- // containerCode = palletCode
- //});
+ var moveResult = await _eSSApiService.MoveContainerAsync(new MoveContainerRequest
+ {
+ slotCode = movestations[station],
+ containerCode = palletCode
+ });
return content.OK();
}
--
Gitblit v1.9.3