using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_DTO.TaskInfo;
|
using WIDESEAWCS_DTO.WMSInfo;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob.Models;
|
|
namespace WIDESEAWCS_TaskInfoService
|
{
|
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}】");
|
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
|
{
|
List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
|
if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
|
|
int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
|
task.TaskState = nextStatus;
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = routers.FirstOrDefault().ChildPosi;
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
|
//todo 同步到WMS
|
|
//暂不考虑多个出库口
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
|
{
|
//todo
|
int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = string.Empty;
|
task.TaskState = nextStatus;
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
|
if (task.TargetIsPickPlace)
|
{
|
task.TaskState = (int)TaskInStatusEnum.InFinish;
|
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
|
}
|
else
|
BaseDal.UpdateData(task);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
|
|
#region 向WMS反馈堆垛机任务完成
|
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
|
#endregion
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)//移库
|
{
|
int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = string.Empty;
|
task.TaskState = nextStatus;
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
|
if (task.TargetIsPickPlace)
|
{
|
task.TaskState = (int)TaskRelocationStatusEnum.RelocationFinish;
|
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
|
}
|
else
|
BaseDal.UpdateData(task);
|
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
|
//todo 调用WMS移库完成
|
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)//移车/移车充电
|
{
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = string.Empty;
|
if (task.TaskState == (int)TaskCarStatusEnum.SC_CarExecuting)
|
{
|
int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskCarStatusEnum>();
|
task.TaskState = nextStatus;
|
BaseDal.UpdateData(task);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移车完成");
|
}
|
else if (task.TaskState == (int)CarChargingTaskEnum.SC_CarExecuting)
|
{
|
int nextStatus = task.TaskState.GetNextNotCompletedStatus<CarChargingTaskEnum>();
|
task.TaskState = nextStatus;
|
BaseDal.UpdateData(task);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移车完成");
|
}
|
}
|
else
|
{
|
throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
|
}
|
|
content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
|
}
|
return content;
|
}
|
}
|
}
|