using System.Diagnostics.CodeAnalysis;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Enums;
|
using WIDESEAWCS_DTO;
|
using WIDESEAWCS_DTO.TaskInfo;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.Models;
|
using WIDESEAWCS_QuartzJob.Service;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Enums;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.Models;
|
using WIDESEAWCS_QuartzJob.Service;
|
|
namespace WIDESEAWCS_TaskInfoService;
|
|
/// <summary>
|
/// TaskService 任务状态更新相关方法
|
/// </summary>
|
public partial class TaskService
|
{
|
/// <summary>
|
/// 更新任务异常信息显示
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <param name="message">异常信息</param>
|
public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (string.IsNullOrEmpty(message))
|
throw new ArgumentNullException(nameof(message), "异常信息不能为空");
|
|
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.OutPending;
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
task.TaskStatus = (int)TaskInStatusEnum.InPending;
|
}
|
task.ExceptionMessage = message;
|
task.ModifyDate = DateTime.Now;
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
|
|
content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 更新任务状态信息,并同步至WMS
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <param name="status">任务状态</param>
|
public void UpdateTaskStatus(int taskNum, int status)
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
|
if (task == null) return;
|
task.TaskStatus = status;
|
task.ModifyDate = DateTime.Now;
|
BaseDal.UpdateData(task);
|
}
|
|
/// <summary>
|
/// 将任务状态修改为下一个状态
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
public WebResponseContent UpdateTaskStatusToNext(int taskNum)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
|
if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
|
return UpdateTaskStatusToNext(task);
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 将任务状态修改为下一个状态
|
/// </summary>
|
/// <param name="task">任务实体对象</param>
|
/// <returns></returns>
|
public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task)
|
{
|
int oldState = task.TaskStatus;
|
|
var result = task.TaskType.GetTaskTypeGroup() switch
|
{
|
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)
|
{
|
WebResponseContent content = ReceiveWMSTask(wmsTasks);
|
if (!content.Status)
|
return content;
|
}
|
|
// 更新任务数据
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish)
|
{
|
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
|
}
|
else
|
{
|
BaseDal.UpdateData(task);
|
}
|
|
// 记录任务执行详情
|
string logMessage = App.User.UserId > 0
|
? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskStatus}】"
|
: $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskStatus}】";
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage);
|
|
return WebResponseContent.Instance.OK();
|
}
|
|
/// <summary>
|
/// 根据任务号、当前地址更新任务位置信息
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <param name="currentAddress">当前地址</param>
|
/// <returns></returns>
|
public Dt_Task? UpdatePosition(int taskNum, string currentAddress)
|
{
|
try
|
{
|
if (string.IsNullOrEmpty(currentAddress))
|
throw new ArgumentNullException(nameof(currentAddress), "当前地址不能为空");
|
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
|
if (task == null) throw new Exception($"未找到该任务信息,任务号:【{taskNum}】");
|
|
string oldCurrentPos = task.CurrentAddress;
|
string oldNextPos = task.NextAddress;
|
|
|
Dt_Router routers = _routerService.QueryNextRoute(oldNextPos, task.TargetAddress);
|
if (routers == null) throw new Exception($"未找到设备路由信息");
|
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = routers.ChildPosi;
|
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"系统自动流程,更新当前位置【{oldCurrentPos} ----> {task.CurrentAddress}】和下一位置【{oldNextPos} ----> {task.NextAddress}】");
|
return task;
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine($"UpdatePosition 更新任务位置失败,任务号:【{taskNum}】,错误信息:【{ex.Message}】");
|
}
|
return null;
|
}
|
}
|