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 | 89 +++++++++++++++++++++++++-------------------
1 files changed, 51 insertions(+), 38 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 bb09de9..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"
@@ -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>
/// 鍑哄簱浠诲姟鏁版嵁澶勭悊/鎸囧畾鍑哄簱鍗曞嚭搴�
@@ -235,6 +247,7 @@
stockInfos.AddRange(result.Item1);
outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ outboundOrderDetail.LockQuantity = result.Item1.Count;
outStockLockInfos = result.Item2;
locationInfos = result.Item3;
outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
--
Gitblit v1.9.3