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
{
///
/// 堆垛机任务完成
///
/// 任务编号
/// 返回处理结果
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 routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
int nextStatus = task.TaskState.GetNextNotCompletedStatus();
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
WMSTaskDTO WMStask = _mapper.Map(task);
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary());
//暂不考虑多个出库口
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
{
//todo
int nextStatus = task.TaskState.GetNextNotCompletedStatus();
task.CurrentAddress = task.NextAddress;
task.NextAddress = string.Empty;
task.TaskState = nextStatus;
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
WMSTaskDTO WMStask = _mapper.Map(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());
#endregion
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)//移库
{
int nextStatus = task.TaskState.GetNextNotCompletedStatus();
task.CurrentAddress = task.NextAddress;
task.NextAddress = string.Empty;
task.TaskState = nextStatus;
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
WMSTaskDTO WMStask = _mapper.Map(task);
if (task.TargetIsPickPlace)
{
task.TaskState = (int)TaskRelocationStatusEnum.RelocationFinish;
WMStask.TaskState = task.TaskState;
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
}
else
BaseDal.UpdateData(task);
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
//todo 调用WMS移库完成
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary());
}
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();
task.TaskState = nextStatus;
BaseDal.UpdateData(task);
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移车完成");
}
else if (task.TaskState == (int)CarChargingTaskEnum.CarChargingSC_CarExecuting)
{
int nextStatus = task.TaskState.GetNextNotCompletedStatus();
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;
}
}
}