From 94ad631d316da04c46266ddb1fc6e63e6f8f2fae Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 17 三月 2026 17:34:15 +0800
Subject: [PATCH] feat: 同步协议处理、前端交互与业务联调改动
---
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 129 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 126 insertions(+), 3 deletions(-)
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 459cfb8..967a4e2 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -1,3 +1,4 @@
+using Mapster;
using MapsterMapper;
using Microsoft.Extensions.Configuration;
using SqlSugar;
@@ -11,6 +12,7 @@
using WIDESEA_Core.Core;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.GradingMachine;
+using WIDESEA_DTO.Stock;
using WIDESEA_DTO.Task;
using WIDESEA_IBasicService;
using WIDESEA_IStockService;
@@ -339,7 +341,7 @@
try
{
- var stockInfo = await _stockInfoService.Repository.QueryFirstAsync(x => x.LocationDetails.WarehouseId == taskDto.WarehouseId && x.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode() && x.StockStatus == StockStatusEmun.绌烘墭鐩樺簱瀛�.GetHashCode());
+ var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => x.LocationDetails.WarehouseId == taskDto.WarehouseId && x.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode() && x.StockStatus == StockStatusEmun.绌烘墭鐩樺簱瀛�.GetHashCode());
if (stockInfo == null)
return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑搴撳瓨淇℃伅");
@@ -353,13 +355,15 @@
NextAddress = taskDto.TargetAddress,
TargetAddress = taskDto.TargetAddress,
Roadway = stockInfo.LocationDetails.RoadwayNo,
- TaskType = TaskTypeEnum.OutEmpty.GetHashCode(),
+ TaskType = TaskOutboundTypeEnum.OutEmpty.GetHashCode(),
TaskStatus = TaskStatusEnum.New.GetHashCode(),
Grade = 1,
TaskNum = await BaseDal.GetTaskNo(),
Creater = "system",
};
- var taskDtos = _mapper.Map<List<WMSTaskDTO>>(task);
+ var taskDtos = task.Adapt<WMSTaskDTO>();
+
+ BaseDal.AddData(task);
return WebResponseContent.Instance.OK("鏌ヨ鎴愬姛", taskDtos);
}
catch (Exception ex)
@@ -611,6 +615,125 @@
}
}
+ /// <summary>
+ /// 鍒涘缓鏈烘鎵嬬粍鐩樹换鍔�
+ /// </summary>
+ public async Task<WebResponseContent> CreateRobotGroupPalletTaskAsync(StockDTO stock)
+ {
+ return await CreateRobotPalletTaskAsync(
+ stock,
+ "缁勭洏",
+ RobotTaskTypeEnum.GroupPallet,
+ s => string.IsNullOrWhiteSpace(s.TargetPalletNo) ? s.SourcePalletNo : s.TargetPalletNo,
+ requireStockWithoutLocation: false);
+ }
+
+ /// <summary>
+ /// 鍒涘缓鏈烘鎵嬫崲鐩樹换鍔�
+ /// </summary>
+ public async Task<WebResponseContent> CreateRobotChangePalletTaskAsync(StockDTO stock)
+ {
+ return await CreateRobotPalletTaskAsync(
+ stock,
+ "鎹㈢洏",
+ RobotTaskTypeEnum.ChangePallet,
+ s => s.SourcePalletNo,
+ requireStockWithoutLocation: true,
+ stockPalletCodeSelector: s => s.SourcePalletNo);
+ }
+
+ /// <summary>
+ /// 鍒涘缓鏈烘鎵嬫媶鐩樹换鍔�
+ /// </summary>
+ public async Task<WebResponseContent> CreateRobotSplitPalletTaskAsync(StockDTO stock)
+ {
+ return await CreateRobotPalletTaskAsync(
+ stock,
+ "鎷嗙洏",
+ RobotTaskTypeEnum.SplitPallet,
+ s => s.SourcePalletNo,
+ requireStockWithoutLocation: true,
+ stockPalletCodeSelector: s => s.SourcePalletNo);
+ }
+
+ private async Task<WebResponseContent> CreateRobotPalletTaskAsync(
+ StockDTO stock,
+ string taskName,
+ RobotTaskTypeEnum taskType,
+ Func<StockDTO, string?> palletCodeSelector,
+ bool requireStockWithoutLocation,
+ Func<StockDTO, string?>? stockPalletCodeSelector = null)
+ {
+ try
+ {
+ if (stock == null)
+ return WebResponseContent.Instance.Error("浠诲姟鍙傛暟涓嶈兘涓虹┖");
+
+ var palletCode = palletCodeSelector(stock)?.Trim();
+ if (string.IsNullOrWhiteSpace(palletCode))
+ return WebResponseContent.Instance.Error("鎵樼洏鍙蜂笉鑳戒负绌�");
+
+ var sourceLineNo = stock.SourceLineNo?.Trim();
+ var targetLineNo = stock.TargetLineNo?.Trim();
+ if (string.IsNullOrWhiteSpace(sourceLineNo) || string.IsNullOrWhiteSpace(targetLineNo))
+ return WebResponseContent.Instance.Error("鏉ユ簮绾夸綋缂栧彿鍜岀洰鏍囩嚎浣撶紪鍙蜂笉鑳戒负绌�");
+
+ var existingTask = await BaseDal.QueryFirstAsync(t =>
+ t.PalletCode == palletCode &&
+ (t.TaskStatus == TaskRobotStatusEnum.RobotNew.GetHashCode()
+ || t.TaskStatus == TaskRobotStatusEnum.RobotExecuting.GetHashCode()
+ || t.TaskStatus == TaskRobotStatusEnum.RobotPickFinish.GetHashCode()
+ || t.TaskStatus == TaskRobotStatusEnum.RobotPutFinish.GetHashCode()
+ || t.TaskStatus == TaskRobotStatusEnum.RobotPending.GetHashCode()));
+ if (existingTask != null)
+ return WebResponseContent.Instance.Error($"鎵樼洏[{palletCode}]宸插瓨鍦ㄦ湭瀹屾垚浠诲姟");
+
+ Dt_StockInfo? stockInfo = null;
+ if (requireStockWithoutLocation)
+ {
+ var stockPalletCode = (stockPalletCodeSelector ?? palletCodeSelector).Invoke(stock)?.Trim();
+ if (string.IsNullOrWhiteSpace(stockPalletCode))
+ return WebResponseContent.Instance.Error("婧愭墭鐩樺彿涓嶈兘涓虹┖");
+
+ stockInfo = await _stockInfoService.GetStockInfoAsync(stockPalletCode);
+ if (stockInfo == null)
+ return WebResponseContent.Instance.Error($"鎵樼洏[{stockPalletCode}]搴撳瓨涓嶅瓨鍦�");
+
+ if (stockInfo.LocationId > 0 || !string.IsNullOrWhiteSpace(stockInfo.LocationCode))
+ return WebResponseContent.Instance.Error($"鎵樼洏[{stockPalletCode}]搴撳瓨宸茬粦瀹氳揣浣嶏紝涓嶈兘鍒涘缓鏈烘鎵媨taskName}浠诲姟");
+ }
+
+ var task = new Dt_Task
+ {
+ TaskNum = await BaseDal.GetTaskNo(),
+ PalletCode = palletCode,
+ PalletType = stockInfo?.PalletType ?? 0,
+ Roadway = stockInfo?.LocationDetails?.RoadwayNo ?? "ROBOT",
+ TaskType = taskType.GetHashCode(),
+ TaskStatus = TaskRobotStatusEnum.RobotNew.GetHashCode(),
+ SourceAddress = sourceLineNo,
+ TargetAddress = targetLineNo,
+ CurrentAddress = sourceLineNo,
+ NextAddress = targetLineNo,
+ WarehouseId = stockInfo?.WarehouseId ?? 1,
+ Grade = 1,
+ Remark = $"鏈烘鎵媨taskName}",
+ Creater = "system"
+ };
+
+ var result = await Repository.AddDataAsync(task) > 0;
+ if (!result)
+ return WebResponseContent.Instance.Error($"鏈烘鎵媨taskName}浠诲姟鍒涘缓澶辫触");
+
+ var wmstaskDto = _mapper.Map<WMSTaskDTO>(task);
+ return WebResponseContent.Instance.OK($"鏈烘鎵媨taskName}浠诲姟鍒涘缓鎴愬姛", wmstaskDto);
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error($"鏈烘鎵媨taskName}浠诲姟鍒涘缓澶辫触: {ex.Message}");
+ }
+ }
+
#endregion WCS閫昏緫澶勭悊
#region 鍒嗗鏌滄帴鍙�
--
Gitblit v1.9.3