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_Core.Helper; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService { public partial class TaskService { /// /// 穿梭车任务完成 /// /// 任务号 /// 完成类型 /// public WebResponseContent ShuttleCarTaskCompleted(int taskNum, short TaskTypeComplete) { WebResponseContent content = new WebResponseContent().OK(); try { var task = GetTaskInfo(taskNum); if (task != null) { switch (TaskTypeComplete) { case 1://入库完成 { if (TaskInboundTypes.Contains(task.TaskType) && task.TaskState == TaskInStatusEnum.Car_InExecuting.ObjToInt()) { task.TaskState = TaskInStatusEnum.InFinish.ObjToInt(); AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车入库完成"); } else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarTarget_Executing.ObjToInt()) { task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt(); AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车移库完成"); } } break; case 2://出库完成 { if (TaskOutboundTypes.Contains(task.TaskType) && task.TaskState == TaskOutStatusEnum.Car_OutExecuting.ObjToInt()) { task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt(); UpdateData(task); } else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarSource_Executing.ObjToInt()) { task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt(); UpdateData(task); } } break; case 10://充电完成 { if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == (int)CarChargingTaskEnum.ShuttleCar_Charging)//移车充电 { task.TaskState = CarChargingTaskEnum.RelocationCarFinish.ObjToInt(); AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车充电完成"); } } break; case 13://A侧回零完成 case 14://B侧回零完成 { if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() && task.TaskState == TaskCarStatusEnum.ShuttleCar_Executing.ObjToInt())//移车任务 { task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt(); UpdateData(task); } else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == CarChargingTaskEnum.ShuttleCar_Executing.ObjToInt())//移车充电 { task.TaskState = CarChargingTaskEnum.ShuttleCar_Finish.ObjToInt(); UpdateData(task); } } break; default: break; } } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 添加历史任务 /// /// /// /// public WebResponseContent AddTask_Hty(Dt_Task task, TaskOperateTypeEnum operateType) { WebResponseContent content = new WebResponseContent(); try { Db.Ado.BeginTran(); content = _taskHtyService.AddTask_Hty(task, operateType);//添加历史任务删除任务 if (!content.Status) throw new Exception(content.Message); content = DeleteData(task); if (!content.Status) throw new Exception(content.Message); Db.Ado.CommitTran(); } catch (Exception ex) { Db.Ado.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 查询穿梭车出入库任务 /// /// 穿梭车编号 /// 当前位置 /// public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); } /// /// 获取移库任务 /// /// /// /// public Dt_Task ShuttleCarRelocationTask(string deviceNo, string currentAddress = "") { List tasks = null; Dt_Task? task = null; if (string.IsNullOrEmpty(currentAddress)) tasks = BaseDal.QueryData(x => x.ShuttleCarCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList(); else tasks = BaseDal.QueryData(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList(); if (tasks != null && tasks.Count > 0) { task = tasks[0]; } return task; } } }