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; } } }