using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_TaskInfoService { public partial class TaskService { public WebResponseContent ManualTask(int TaskId, int TaskType) { WebResponseContent content = new WebResponseContent(); try { var Task = BaseDal.QueryFirst(x => x.TaskId == TaskId); if (Task == null) throw new Exception("未找到任务信息"); switch ((ManualTaskEnum)TaskType) { case ManualTaskEnum.SCTaskSend: content = SCTaskSend(Task); break; case ManualTaskEnum.SCTaskCompleted: content = SCTaskCompleted(Task); break; case ManualTaskEnum.Completed: content = Completed(Task); break; case ManualTaskEnum.Cancel: content = Cancel(Task); break; default: break; } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 重新下发堆垛机任务 /// /// /// public WebResponseContent SCTaskSend(Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { if (TaskInboundTypes.Contains(task.TaskType)) { if (task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机入库执行中,不可重新下发"); task.TaskState = TaskInStatusEnum.Line_InFinish.ObjToInt(); content = UpdateData(task); } else if (TaskOutboundTypes.Contains(task.TaskType)) { if (task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机出库执行中,不可重新下发"); task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt(); content = UpdateData(task); } else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt()) { if (task.TaskState != TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移库执行中,不可重新下发"); task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt(); content = UpdateData(task); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt()) { if (task.TaskState != TaskCarStatusEnum.SC_CarExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移车执行中,不可重新下发"); task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt(); content = UpdateData(task); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()) { if (task.TaskState != CarChargingTaskEnum.CarChargingSC_CarExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移车执行中,不可重新下发"); task.TaskState = CarChargingTaskEnum.CarCharging_Finish.ObjToInt(); content = UpdateData(task); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 完成堆垛机任务 /// /// /// public WebResponseContent SCTaskCompleted(Dt_Task task) { try { if (TaskInboundTypes.Contains(task.TaskType)) { if (task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机入库执行中"); } else if (TaskOutboundTypes.Contains(task.TaskType)) { if (task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机出库执行中"); } else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt()) { if (task.TaskState != TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移库执行中"); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt()) { if (task.TaskState != TaskCarStatusEnum.SC_CarExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移车执行中"); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()) { if (task.TaskState != CarChargingTaskEnum.CarChargingSC_CarExecuting.ObjToInt()) throw new Exception("任务状态不等于堆垛机移车执行中"); } return StackCraneTaskCompleted(task.TaskNum); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 完成任务 /// /// /// public WebResponseContent Completed(Dt_Task task) { try { if (TaskInboundTypes.Contains(task.TaskType)) { if (task.TaskState < TaskInStatusEnum.SC_InFinish.ObjToInt()) { task.TaskState = TaskInStatusEnum.SC_InExecuting.ObjToInt(); UpdateData(task); StackCraneTaskCompleted(task.TaskNum); } AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion); } else if (TaskOutboundTypes.Contains(task.TaskType)) { if (task.TaskState < TaskOutStatusEnum.SC_OutFinish.ObjToInt()) { task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt(); UpdateData(task); StackCraneTaskCompleted(task.TaskNum); } AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion); } else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt()) { if (task.TaskState < TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt()) { task.TaskState = TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt(); UpdateData(task); StackCraneTaskCompleted(task.TaskNum); } AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt()) { task.TaskState = TaskCarStatusEnum.SC_CarFinish.ObjToInt(); UpdateData(task); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()) { task.TaskState = CarChargingTaskEnum.CarChargingSC_CarFinish.ObjToInt(); UpdateData(task); } return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 取消任务 /// /// /// public WebResponseContent Cancel(Dt_Task task) { try { if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()) AddTask_Hty(task, TaskOperateTypeEnum.ManualDeletion); if (!TaskInboundTypes.Contains(task.TaskType)) throw new Exception("无权限"); if (task.TaskState > TaskInStatusEnum.Line_InExecuting.ObjToInt() && !string.IsNullOrEmpty(task.TargetAddress)) throw new Exception("已分配目标地址,不可取消"); task.TaskState = TaskInStatusEnum.InCancel.ObjToInt(); BaseDal.UpdateData(task); return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 人工操作任务 /// 1:完成;2:取消 /// /// /// public WebResponseContent ManualTask(SaveModel saveModel) { WebResponseContent webResponseContent = new WebResponseContent(); try { var Tasks = BaseDal.QueryData(x => saveModel.DelKeys.Contains(x.TaskId)); if (Tasks.Where(x => !TaskInboundTypes.Contains(x.TaskType)).Any()) throw new Exception("只可取消入库任务"); if (Tasks.Where(x => x.TaskState > TaskInStatusEnum.AGV_InFinish.ObjToInt()).Any()) throw new Exception("暂不可取消已上输送线任务"); //var UserName = App.User?.UserName; Tasks.ForEach(x => { x.TaskState = TaskInStatusEnum.InCancel.ObjToInt(); //x.Modifier = UserName; //x.ModifyDate = DateTime.Now; }); BaseDal.UpdateData(Tasks); webResponseContent.OK(); } catch (Exception ex) { webResponseContent.Error(ex.Message); } return webResponseContent; } public WebResponseContent ModifyBarcode(WMSTaskDTO wMSTask) { WebResponseContent content = new WebResponseContent(); try { Dt_Task? dt_Task = BaseDal.QueryFirst(x => x.TaskNum == wMSTask.TaskNum); if (dt_Task == null) throw new Exception($"WCS未找到任务,任务号:【{wMSTask.TaskNum}】"); dt_Task.PalletCode = wMSTask.PalletCode; BaseDal.UpdateData(dt_Task); content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } } }