From f40ba2a9fb9d3c2ece08e9a7cd987d4744dccab2 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 17 六月 2025 15:22:05 +0800
Subject: [PATCH] 优化库内移库,堆垛机和穿梭车交互逻辑
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs | 159 +++++++++++++++++++++++++++++++++++++----------------
1 files changed, 111 insertions(+), 48 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs"
index c01c72a..a940808 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs"
@@ -67,7 +67,7 @@
/// <exception cref="Exception"></exception>
public (List<Dt_Task>?, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, List<Dt_LocationInfo>?, Dt_OutboundOrder?) OutboundTaskDataHandle(int[] keys)
{
- List<Dt_Task> tasks = new List<Dt_Task>();
+ List<Dt_Task>? tasks = new List<Dt_Task>();
List<Dt_OutboundOrderDetail> outboundOrderDetails = _outboundService.OutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
@@ -119,7 +119,7 @@
foreach (var item in stockInfos.GroupBy(x => x.LocationCode))
{
Dt_LocationInfo locationInfo = locationInfos.First(x => x.LocationCode == item.Key);
- (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) result = GetRelocationTask(locationInfo);
+ (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) result = GetRelocationTask(stockInfos);
tasks.AddRange(result.Item1);//绉诲簱浠诲姟
locations.AddRange(result.Item2);//绉诲簱璐т綅
stocks.AddRange(result.Item3);//绉诲簱搴撳瓨
@@ -133,7 +133,7 @@
Grade = 0,
PalletCode = stockInfo.PalletCode,
TargetIsPickPlace = false,
- SourceIsPickPlace = locationInfo.Row == 1 ? false : stockInfo.SerialNumber == locationInfo.MaxQty,
+ SourceIsPickPlace = stockInfo.SerialNumber == locationInfo.MaxQty,
NextAddress = "1008",
Roadway = locationInfo.RoadwayNo,
SourceAddress = stockInfo.LocationCode,
@@ -154,50 +154,62 @@
/// <param name="locationInfo"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
- public (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) GetRelocationTask(Dt_LocationInfo locationInfo)
+ public (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) GetRelocationTask(List<Dt_StockInfo> stockInfos)
{
List<Dt_Task> dt_Tasks = new List<Dt_Task>();
List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
- List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
- if (locationInfo.Row == 1)
+ List<Dt_StockInfo> stockInfos1 = new List<Dt_StockInfo>();
+ foreach (var item in stockInfos.GroupBy(x => x.LocationCode))
{
- var locationInfo1 = _basicService.LocationInfoService.Repository.QueryFirst(x => x.Row == 2 && x.Column == locationInfo.Column && x.Layer == locationInfo.Layer);
- stockInfos = _stockService.StockInfoService.Repository.QueryData(x => locationInfo1.LocationCode == x.LocationCode).OrderByDescending(x => x.SerialNumber).ToList();
- if (stockInfos == null || stockInfos.Count < 1)
+ var locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == item.Key);
+ if (locationInfo.Row == 1)
{
- return (dt_Tasks, locationInfos, stockInfos);
- }
- Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation();
- if (locationInfo2 == null) throw new Exception("鏃犲彲绉诲簱璐т綅");
- locationInfo1.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
- locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
- locationInfos.Add(locationInfo1);
- locationInfos.Add(locationInfo2);
- int i = 1;
- foreach (var item in stockInfos)
- {
- Dt_Task task = new()
+ var StockInfos = _stockService.StockInfoService.Repository.QueryData(x => x.LocationCode == locationInfo.LocationCode && !stockInfos.Select(x => x.PalletCode).Contains(x.PalletCode)).ToList();
+ foreach (var StockInfo in StockInfos)
{
- CurrentAddress = item.LocationCode,
- SourceIsPickPlace = item.SerialNumber == 12,
- TargetIsPickPlace = i == 12 ? locationInfo2.Row != 1 : false,
- Grade = 0,
- PalletCode = item.PalletCode,
- NextAddress = locationInfo2.LocationCode,
- Roadway = locationInfo.RoadwayNo,
- SourceAddress = item.LocationCode,
- TargetAddress = locationInfo2.LocationCode,
- TaskState = WIDESEA_Common.TaskEnum.TaskRelocationStatusEnum.RelocationNew.ObjToInt(),
- TaskType = TaskRelocationTypeEnum.Relocation.ObjToInt(),
- TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
- };
- if (locationInfo2.Row == 1) task.TargetIsPickPlace = false;
- dt_Tasks.Add(task);
- i++;
- item.StockStatus = StockStatusEmun.绉诲簱涓�.ObjToInt();
+ foreach (var item1 in item)
+ {
+ if (StockInfo.SerialNumber > item1.SerialNumber)
+ {
+ stockInfos1.Add(StockInfo);
+ break;
+ }
+ }
+ }
}
}
- return (dt_Tasks, locationInfos, stockInfos);
+ if (stockInfos1.Count > 0)
+ {
+ Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation();
+ if (locationInfo2 == null) throw new Exception("鏃犲彲绉诲簱璐т綅");
+ locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
+ locationInfos.Add(locationInfo2);
+ foreach (var item in stockInfos1.GroupBy(x => x.LocationCode))
+ {
+ foreach (var item1 in item.OrderByDescending(x => x.SerialNumber))
+ {
+ Dt_Task task = new()
+ {
+ CurrentAddress = item1.LocationCode,
+ SourceIsPickPlace = item1.SerialNumber == 24,
+ TargetIsPickPlace = locationInfo2.MaxQty == locationInfo2.CurrentQty,
+ Grade = 0,
+ PalletCode = item1.PalletCode,
+ NextAddress = locationInfo2.LocationCode,
+ Roadway = locationInfo2.RoadwayNo,
+ SourceAddress = item1.LocationCode,
+ TargetAddress = locationInfo2.LocationCode,
+ TaskState = WIDESEA_Common.TaskEnum.TaskRelocationStatusEnum.RelocationNew.ObjToInt(),
+ TaskType = TaskRelocationTypeEnum.Relocation.ObjToInt(),
+ TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
+ };
+ dt_Tasks.Add(task);
+ item1.StockStatus = StockStatusEmun.绉诲簱涓�.ObjToInt();
+ //locationInfo2.CurrentQty++;
+ }
+ }
+ }
+ return (dt_Tasks, locationInfos, stockInfos1);
}
/// <summary>
/// 鍑哄簱浠诲姟鏁版嵁澶勭悊/鎸囧畾鍑哄簱鍗曞嚭搴�
@@ -206,9 +218,10 @@
/// <param name="stockSelectViews"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
- public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) OutboundTaskDataHandle(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+ public (List<Dt_Task>?, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, List<Dt_LocationInfo>?, Dt_OutboundOrder?) OutboundTaskDataHandle(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
{
- List<Dt_Task> tasks = new List<Dt_Task>();
+ List<Dt_Task>? tasks = new List<Dt_Task>();
+ if (stockSelectViews == null || stockSelectViews.Count < 1) throw new Exception("鏈幏鍙栧埌鎸囧畾搴撳瓨淇℃伅");
Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
if (outboundOrderDetail == null) throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
@@ -218,23 +231,33 @@
Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
outboundOrder.Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail };
- List<Dt_StockInfo>? stockInfos = null;
- Dt_OutboundOrderDetail? orderDetail = null;
+ List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
List<Dt_OutStockLockInfo>? outStockLockInfos = null;
List<Dt_LocationInfo>? locationInfos = null;
List<Dt_LocationInfo>? locationInfos1 = null;
- (List<Dt_StockInfo>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrder, stockSelectViews);
+ (List<Dt_StockInfo>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrder, stockSelectViews);
+
if (result.Item1 != null && result.Item1.Count > 0)
{
-
+ (List<Dt_Task>?, List<Dt_LocationInfo>?, List<Dt_StockInfo>?) result1 = GetTasks(result.Item1, TaskTypeEnum.Outbound, result.Item3);
+ tasks = result1.Item1;
+ locationInfos1 = result1.Item2;
+ stockInfos.AddRange(result1.Item3);
+
+ stockInfos.AddRange(result.Item1);
+ outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ outboundOrderDetail.LockQuantity = result.Item1.Count;
+ outStockLockInfos = result.Item2;
+ locationInfos = result.Item3;
+ outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
}
else
{
throw new Exception("鏃犲簱瀛�");
}
- return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_OutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
+ return (tasks, stockInfos, new List<Dt_OutboundOrderDetail> { outboundOrderDetail }, outStockLockInfos, locationInfos, locationInfos1, outboundOrder);
}
/// <summary>
@@ -247,9 +270,48 @@
{
try
{
- (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(orderDetailId, stockSelectViews);
+ List<Dt_Task> tasks = new List<Dt_Task>();
+ List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
+ List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
+ List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+ List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+ List<Dt_LocationInfo> locationInfos1 = new List<Dt_LocationInfo>();
+ Dt_OutboundOrder order = new Dt_OutboundOrder();
- WebResponseContent content = GenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
+ #region 鍑哄簱浠诲姟鏁版嵁澶勭悊
+ (List<Dt_Task>?, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, List<Dt_LocationInfo>?, Dt_OutboundOrder?) result = OutboundTaskDataHandle(orderDetailId, stockSelectViews);
+ if (result.Item1 != null && result.Item1.Count > 0)
+ {
+ tasks.AddRange(result.Item1);
+ }
+ if (result.Item2 != null && result.Item2.Count > 0)
+ {
+ stockInfos.AddRange(result.Item2);
+ }
+ if (result.Item3 != null && result.Item3.Count > 0)
+ {
+ outboundOrderDetails.AddRange(result.Item3);
+ }
+ if (result.Item4 != null && result.Item4.Count > 0)
+ {
+ outStockLockInfos.AddRange(result.Item4);
+ }
+ if (result.Item5 != null && result.Item5.Count > 0)
+ {
+ locationInfos.AddRange(result.Item5);
+ }
+ if (result.Item6 != null && result.Item6.Count > 0)
+ {
+ locationInfos1.AddRange(result.Item6);
+ }
+ if (result.Item7 != null)
+ {
+ order = result.Item7;
+ }
+ #endregion
+
+ //WebResponseContent content = GenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
+ WebResponseContent content = GenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, locationInfos1, order);
return content;
}
@@ -258,6 +320,7 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
+
public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_OutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null, List<Dt_LocationInfo>? locationInfos1 = null, Dt_OutboundOrder? order = null)
{
try
--
Gitblit v1.9.3