From 64a2aa2301946f777659239247233e47ad1e3076 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期日, 12 四月 2026 11:54:15 +0800
Subject: [PATCH] feat(事务管理): 添加异步事务处理方法
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 467 ++++++++++++++++------------------------------------------
1 files changed, 130 insertions(+), 337 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index adc48a7..c6c5522 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -18,14 +18,10 @@
#endregion << 鐗� 鏈� 娉� 閲� >>
using MapsterMapper;
-using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
-using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using WIDESEA_Core;
-using WIDESEAWCS_Common.HttpEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
@@ -51,8 +47,10 @@
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
private readonly IMapper _mapper;
- private readonly HttpClientHelper _httpClientHelper;
- private readonly IRobotTaskService _robotTaskService;
+ private readonly IOutboundTaskFlowService _outboundTaskFlowService;
+ private readonly IInboundTaskFlowService _inboundTaskFlowService;
+ private readonly IRelocationTaskFlowService _relocationTaskFlowService;
+ private readonly IRobotTaskFlowService _robotTaskFlowService;
private Dictionary<string, OrderByType> _taskOrderBy = new()
{
@@ -71,14 +69,25 @@
public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
- public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService) : base(BaseDal)
+ public TaskService(
+ ITaskRepository BaseDal,
+ IRouterService routerService,
+ ITaskExecuteDetailService taskExecuteDetailService,
+ ITaskExecuteDetailRepository taskExecuteDetailRepository,
+ IMapper mapper,
+ IOutboundTaskFlowService outboundTaskFlowService,
+ IInboundTaskFlowService inboundTaskFlowService,
+ IRelocationTaskFlowService relocationTaskFlowService,
+ IRobotTaskFlowService robotTaskFlowService) : base(BaseDal)
{
_routerService = routerService;
_taskExecuteDetailService = taskExecuteDetailService;
_taskExecuteDetailRepository = taskExecuteDetailRepository;
_mapper = mapper;
- _httpClientHelper = httpClientHelper;
- _robotTaskService = robotTaskService;
+ _outboundTaskFlowService = outboundTaskFlowService;
+ _inboundTaskFlowService = inboundTaskFlowService;
+ _relocationTaskFlowService = relocationTaskFlowService;
+ _robotTaskFlowService = robotTaskFlowService;
}
/// <summary>
@@ -92,50 +101,29 @@
try
{
List<Dt_Task> tasks = new List<Dt_Task>();
+ List<Dt_Task> duplicates = new List<Dt_Task>();
foreach (var item in taskDTOs)
{
- if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
+ Dt_Task existingTask = BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode);
+ if (existingTask != null)
{
+ duplicates.Add(existingTask);
continue;
}
Dt_Task task = _mapper.Map<Dt_Task>(item);
task.Creater = "WMS";
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- int taskType = 0;
- if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
- {
- taskType = 100;
- }
- else
- taskType = task.TaskType;
- Dt_Router router = _routerService.QueryNextRoute(item.Roadway, item.TargetAddress, taskType);
- //鏆備笉鑰冭檻澶氳矾寰�
- if (router != null)
- {
- task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
- task.CurrentAddress = item.SourceAddress;
- task.NextAddress = router.ChildPosi;
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
- {
- Dt_Router routers = _routerService.QueryNextRoute(item.SourceAddress);
- //鏆備笉鑰冭檻澶氳矾寰�
- if (!routers.IsNullOrEmpty())
- {
- task.TaskStatus = (int)TaskInStatusEnum.InNew;
- task.CurrentAddress = item.SourceAddress;
- task.NextAddress = routers.ChildPosi;
- }
- }
+ InitializeTaskOnReceive(task, item);
tasks.Add(task);
}
+ // TOOD: 杩欓噷娉ㄦ剰娣诲姞閿欒瑕佽繑鍥為敊璇�
BaseDal.AddData(tasks);
_taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
- content = WebResponseContent.Instance.OK("鎴愬姛", tasks);
+ // 灏嗛噸澶嶄换鍔′俊鎭篃涓�骞惰繑鍥�
+ tasks.AddRange(duplicates);
+ var result = tasks;
+ content = WebResponseContent.Instance.OK("鎴愬姛", result);
}
catch (Exception ex)
{
@@ -163,7 +151,7 @@
Roadway = "SC01",
SourceAddress = sourceAddress,
TargetAddress = "SC01",
- TaskState = (int)TaskInStatusEnum.InNew,
+ TaskStatus = (int)TaskInStatusEnum.InNew,
Id = 0,
TaskType = (int)TaskInboundTypeEnum.Inbound
};
@@ -175,6 +163,32 @@
content = WebResponseContent.Instance.Error(ex.Message);
}
return content;
+ }
+
+ /// <summary>
+ /// 鎸変换鍔″垎缁勫垵濮嬪寲浠诲姟鎺ユ敹淇℃伅銆�
+ /// </summary>
+ /// <param name="task">浠诲姟瀹炰綋銆�</param>
+ /// <param name="source">WMS鍘熷浠诲姟瀵硅薄銆�</param>
+ private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
+ {
+ switch (task.TaskType.GetTaskTypeGroup())
+ {
+ case TaskTypeGroup.OutbondGroup:
+ _outboundTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.InboundGroup:
+ _inboundTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.RelocationGroup:
+ _relocationTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.OtherGroup:
+ _robotTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ default:
+ break;
+ }
}
/// <summary>
@@ -369,22 +383,30 @@
var result = task.TaskType.GetTaskTypeGroup() switch
{
- TaskTypeGroup.OutbondGroup => ProcessOutboundTaskStatus(task),
- TaskTypeGroup.InboundGroup => ProcessInboundTaskStatus(task),
- TaskTypeGroup.RelocationGroup => ProcessRelocationTaskStatus(task),
- TaskTypeGroup.OtherGroup => ProcessRobotTaskStatus(task),
+ TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.InboundGroup => _inboundTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.OtherGroup => _robotTaskFlowService.MoveToNextStatus(task),
_ => WebResponseContent.Instance.Error($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�")
};
if (!result.Status)
return result;
+ // 鍑哄簱瀹屾垚绾夸綋鑺傜偣鏃讹紝鍙兘闇�瑕佹帴鏀跺叆搴撴柊浠诲姟銆�
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup
+ && result.Data is List<WMSTaskDTO> wmsTasks
+ && wmsTasks.Count > 0)
+ {
+ return ReceiveWMSTask(wmsTasks);
+ }
+
// 鏇存柊浠诲姟鏁版嵁
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish)
{
- BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩鍒犻櫎);
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
}
else
{
@@ -396,209 +418,6 @@
? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskStatus}銆�"
: $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskStatus}銆�";
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage);
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 澶勭悊鍑哄簱浠诲姟鐘舵�佽浆鎹�
- /// </summary>
- private WebResponseContent ProcessOutboundTaskStatus(Dt_Task task)
- {
- if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
-
- if (task.TaskStatus <= 0)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- // 鏍规嵁鐘舵�佽皟鐢ㄤ笉鍚岀殑WMS鎺ュ彛
- if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
- {
- return GetWMSOutboundTrayTask(task);
- }
- else if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
- {
- return _robotTaskService.GetWMSRobotTask(task);
- }
- else
- {
- if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting)
- return WebResponseContent.Instance.OK();
- else
- return UpdateWMSTaskStatus(task);
- }
- }
-
- /// <summary>
- /// 澶勭悊鍏ュ簱浠诲姟鐘舵�佽浆鎹�
- /// </summary>
- private WebResponseContent ProcessInboundTaskStatus(Dt_Task task)
- {
- if (task.TaskStatus >= (int)TaskInStatusEnum.InFinish)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>();
-
- if (task.TaskStatus <= 0)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- // 鏍规嵁鐘舵�佽皟鐢ㄤ笉鍚岀殑WMS鎺ュ彛
- if (task.TaskStatus == (int)TaskInStatusEnum.Line_InFinish)
- {
- return GetWMSInboundLocation(task);
- }
- else
- {
- return UpdateWMSTaskStatus(task);
- }
- }
-
- /// <summary>
- /// 澶勭悊鏈烘鎵嬩换鍔$姸鎬佽浆鎹�
- /// </summary>
- private WebResponseContent ProcessRobotTaskStatus(Dt_Task task)
- {
- if (task.TaskStatus >= (int)TaskRobotStatusEnum.RobotFinish)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRobotStatusEnum>();
-
- if (task.TaskStatus <= 0)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 澶勭悊绉诲簱浠诲姟鐘舵�佽浆鎹�
- /// </summary>
- private WebResponseContent ProcessRelocationTaskStatus(Dt_Task task)
- {
- if (task.TaskStatus >= (int)TaskRelocationStatusEnum.RelocationFinish)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
-
- if (task.TaskStatus <= 0)
- return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
-
- // 绉诲簱浠诲姟寮�濮嬫椂锛屽悓姝MS浠诲姟鐘舵��
- if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
- {
- return UpdateWMSTaskStatus(task);
- }
-
- // 绉诲簱浠诲姟瀹屾垚鏃讹紝璋冪敤WMS绉诲簱瀹屾垚鎺ュ彛
- if (task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish)
- {
- return NotifyWMSRelocationFinish(task);
- }
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 閫氱煡WMS绯荤粺鍑哄簱瀹屾垚
- /// </summary>
- private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task)
- {
- var result = _httpClientHelper.Post<WebResponseContent>(
- nameof(ConfigKey.OutboundFinishTaskAsync),
- new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson());
-
- if (!result.IsSuccess || !result.Data.Status)
- return WebResponseContent.Instance.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 鑾峰彇绌烘墭鍑哄簱浠诲姟
- /// </summary>
- private WebResponseContent GetWMSOutboundTrayTask(Dt_Task task)
- {
- var targetAddress = task.TargetAddress;
- var warehouseId = _robotTaskService.MapWarehouseIdConfigKey(task.TargetAddress);
- string sourceLineNo = _robotTaskService.ResolveRobotRuleValue(targetAddress, "AddressSourceLineNoMap", task.TargetAddress);
-
- var result = _httpClientHelper.Post<WebResponseContent>(
- nameof(ConfigKey.GetOutBoundTrayTaskAsync),
- new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson());
-
- if (!result.IsSuccess || !result.Data.Status)
- return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-
- var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty);
-
- var tasks = new List<WMSTaskDTO>
- {
- wMSTask
- };
-
- return ReceiveWMSTask(tasks);
- }
-
-
-
- /// <summary>
- /// 浠嶹MS绯荤粺鑾峰彇鍏ュ簱鐩爣鍦板潃
- /// </summary>
- private WebResponseContent GetWMSInboundLocation(Dt_Task task)
- {
- var result = _httpClientHelper.Post<WebResponseContent>(
- nameof(ConfigKey.GetTasksLocation),
- new CreateTaskDto { PalletCode = task.PalletCode }.ToJson());
-
- if (!result.IsSuccess || !result.Data.Status)
- return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-
- var nextAddress = result.Data.Data?.ToString();
- if (string.IsNullOrEmpty(nextAddress))
- return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆愭湭鑾峰彇鍒版湁鏁堢殑鐩爣鍦板潃銆�");
-
- task.CurrentAddress = task.NextAddress;
-
- task.NextAddress = nextAddress;
- task.TargetAddress = nextAddress;
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 鏇存柊WMS绯荤粺浠诲姟鐘舵��
- /// </summary>
- private WebResponseContent UpdateWMSTaskStatus(Dt_Task task)
- {
- var result = _httpClientHelper.Post<WebResponseContent>(
- nameof(ConfigKey.UpdateTaskByStatus),
- new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson());
-
- if (!result.IsSuccess || !result.Data.Status)
- return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鏇存柊浠诲姟鐘舵�佸け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-
- return WebResponseContent.Instance.OK();
- }
-
- /// <summary>
- /// 閫氱煡WMS绯荤粺绉诲簱浠诲姟瀹屾垚
- /// </summary>
- private WebResponseContent NotifyWMSRelocationFinish(Dt_Task task)
- {
- var result = _httpClientHelper.Post<WebResponseContent>(
- nameof(ConfigKey.RelocationFinishTask),
- new CreateTaskDto
- {
- PalletCode = task.PalletCode,
- SourceAddress = task.CurrentAddress,
- TargetAddress = task.TargetAddress,
- Roadway = task.Roadway,
- TaskType = task.TaskType
- }.ToJson());
-
- if (!result.IsSuccess || !result.Data.Status)
- return WebResponseContent.Instance.Error($"閫氱煡WMS绯荤粺绉诲簱瀹屾垚澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
return WebResponseContent.Instance.OK();
}
@@ -655,101 +474,41 @@
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
-
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutExecuting)
+ TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
+ content = taskTypeGroup switch
{
- int taskType = 0;
- if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
- {
- taskType = 100;
- }
- else
- taskType = task.TaskType;
- Dt_Router router = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress, taskType);
- if (router == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
-
- int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
- task.TaskStatus = nextStatus;
- task.CurrentAddress = task.NextAddress;
- task.NextAddress = router.ChildPosi;
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
-
- content = NotifyWMSOutboundFinish(task);
- if (content.Status)
- {
- BaseDal.UpdateData(task);
-
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
- }
-
- //var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
- //if (result.IsSuccess && result.Data.Status)
- //{
- // BaseDal.UpdateData(task);
-
- // _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
- // return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
-
- //}
- //else
- //{
- // return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
- //}
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InExecuting)
+ TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.InboundGroup => _inboundTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.OtherGroup => _robotTaskFlowService.CompleteStackerTask(task),
+ _ => throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�")
+ };
+ if (!content.Status)
{
- int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>();
- task.TaskStatus = nextStatus;
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
+ return content;
+ }
- var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto()
- {
- PalletCode = task.PalletCode,
- }).ToJson());
+ if (taskTypeGroup == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish)
+ {
+ BaseDal.UpdateData(task);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈哄嚭搴撳畬鎴�");
+ return content;
+ }
- if (result.IsSuccess && result.Data.Status)
- {
- BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
- }
- else
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+ if (taskTypeGroup == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InFinish)
{
- if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
- {
- int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
- task.TaskStatus = nextStatus;
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈哄叆搴撳畬鎴�");
+ return content;
+ }
- WebResponseContent result = NotifyWMSRelocationFinish(task);
- if (result.Status)
- {
- BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈虹Щ搴撳畬鎴�");
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
- }
- else
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Message}銆�");
- }
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
+ if (taskTypeGroup == TaskTypeGroup.RelocationGroup && task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish)
{
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈虹Щ搴撳畬鎴�");
+ return content;
}
- else
- {
- throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
- }
+
content = WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -885,6 +644,40 @@
{
return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
}
+
+ /// <summary>
+ /// 鎺ユ敹WMS鎵嬪姩鍒涘缓鐨勪换鍔★紝鍒涘缓WCS浠诲姟
+ /// </summary>
+ /// <param name="taskDTOs">WMS浠诲姟瀵硅薄闆嗗悎</param>
+ /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+ public WebResponseContent ReceiveManualTask([NotNull] List<WMSTaskDTO> taskDTOs)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ // 璋冪敤 ReceiveWMSTask 鍒涘缓 WCS 浠诲姟
+ content = ReceiveWMSTask(taskDTOs);
+ return content;
+ }
+ catch (Exception ex)
+ {
+ content = WebResponseContent.Instance.Error($"鎵嬪姩浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}");
+ return content;
+ }
+ }
+
+ /// <summary>
+ /// 鏌ヨ鎸囧畾璧风偣鍦板潃鐨勬柊寤烘墜鍔ㄥ叆搴撲换鍔�
+ /// </summary>
+ /// <param name="sourceAddress">璧风偣鍦板潃</param>
+ /// <returns>浠诲姟瀹炰綋</returns>
+ public Dt_Task QueryManualInboundTask(string sourceAddress)
+ {
+ return BaseDal.QueryFirst(x =>
+ x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
+ x.TaskStatus == (int)TaskInStatusEnum.InNew &&
+ x.SourceAddress == sourceAddress);
+ }
}
public enum ConveyorLineDBNameNew
@@ -974,4 +767,4 @@
[DataLength(22)]
public string Barcode { get; set; }
}
-}
+}
\ No newline at end of file
--
Gitblit v1.9.3