using MapsterMapper;
|
using SqlSugar;
|
using System.Diagnostics.CodeAnalysis;
|
using WIDESEA_Core;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_Core.Enums;
|
using WIDESEAWCS_DTO;
|
using WIDESEAWCS_DTO.TaskInfo;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob.Models;
|
using WIDESEAWCS_QuartzJob.Service;
|
|
namespace WIDESEAWCS_TaskInfoService;
|
|
/// <summary>
|
/// TaskService 任务完成与恢复相关方法
|
/// </summary>
|
public partial class TaskService
|
{
|
/// <summary>
|
/// 任务完成
|
/// </summary>
|
/// <param name="taskNum">任务编号</param>
|
/// <returns>返回处理结果</returns>
|
public WebResponseContent StackCraneTaskCompleted(int taskNum)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
|
if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
|
TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
|
content = taskTypeGroup switch
|
{
|
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)
|
{
|
return content;
|
}
|
|
if (taskTypeGroup == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish)
|
{
|
BaseDal.UpdateData(task);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "堆垛机出库完成");
|
return content;
|
}
|
|
if (taskTypeGroup == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InFinish)
|
{
|
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "堆垛机入库完成");
|
return content;
|
}
|
|
if (taskTypeGroup == TaskTypeGroup.RelocationGroup && task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish)
|
{
|
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "堆垛机移库完成");
|
return content;
|
}
|
|
content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 恢复挂起任务
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <returns>返回处理结果</returns>
|
public WebResponseContent TaskStatusRecovery(int taskNum)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
|
if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
|
if (task.TaskStatus != (int)TaskInStatusEnum.InPending && task.TaskStatus != (int)TaskOutStatusEnum.OutPending)
|
{
|
return content = WebResponseContent.Instance.Error($"该任务状态不可恢复,任务号:【{taskNum}】,任务状态:【{task.TaskStatus}】");
|
}
|
|
Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
|
if (taskExecuteDetail != null)
|
{
|
task.TaskStatus = taskExecuteDetail.TaskState;
|
}
|
else
|
{
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
|
{
|
task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
task.TaskStatus = (int)TaskInStatusEnum.InNew;
|
}
|
//todo
|
}
|
|
task.ExceptionMessage = string.Empty;
|
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工恢复挂起任务,恢复挂起时任务状态【{task.TaskStatus}】");
|
|
content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 回滚任务状态
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <returns>返回处理结果</returns>
|
public WebResponseContent RollbackTaskStatusToLast(int taskNum)
|
{
|
WebResponseContent content = new();
|
try
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
|
if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
|
|
int oldState = task.TaskStatus;
|
Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskStatus && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
|
if (taskExecuteDetail != null)
|
{
|
task.TaskStatus = taskExecuteDetail.TaskState;
|
task.CurrentAddress = taskExecuteDetail.CurrentAddress;
|
task.NextAddress = taskExecuteDetail.NextAddress;
|
}
|
else
|
{
|
return content = WebResponseContent.Instance.Error($"未找到任务明细信息,该任务状态不可回滚到上一步,任务号:【{taskNum}】,任务状态:【{task.TaskStatus}】");
|
}
|
|
task.ExceptionMessage = string.Empty;
|
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工将任务状态从【{oldState}】回滚到【{task.TaskStatus}】");
|
|
content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
return content;
|
}
|
|
public override WebResponseContent DeleteData(object[] keys)
|
{
|
List<int> taskKeys = new List<int>();
|
for (int i = 0; i < keys.Length; i++)
|
{
|
taskKeys.Add(Convert.ToInt32(keys[i]));
|
}
|
List<Dt_Task> tasks = BaseDal.QueryData(x => taskKeys.Contains(x.TaskId));
|
BaseDal.DeleteAndMoveIntoHty(tasks, OperateTypeEnum.人工删除);
|
return WebResponseContent.Instance.OK($"成功删除{tasks.Count}条数据");
|
}
|
}
|