using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_DTO.WMSInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_TaskInfoService; namespace WIDESEAWCS_TaskInfoService { public partial class TaskService { /// /// 更新AGV任务状态 /// /// /// public WebResponseContent AGVUpdateTaskState(AGVUpdateTaskDTO saveModel) { WebResponseContent content = new WebResponseContent(); try { if (saveModel == null) throw new Exception("更新任务信息为空"); Dt_Task dt_Task = GetTaskInfo(Convert.ToInt32(saveModel.outID)); if (dt_Task == null) throw new Exception($"未找到任务号为【{saveModel.outID}】的任务"); if (dt_Task.TaskState >= (int)TaskInStatusEnum.AGV_InFinish) { return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{dt_Task.TaskNum}】,任务状态:【{GetEnumDescription(Enum.Parse(Enum.GetName(typeof(TaskInStatusEnum), dt_Task.TaskState)))}】"); } switch (saveModel.status) { case "02": dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting; break; case "08": { dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InFinish; dt_Task.CurrentAddress = dt_Task.NextAddress; List routers = _routerService.QueryNextRoutes(dt_Task.CurrentAddress, dt_Task.TargetAddress); if (routers.Count > 0) { dt_Task.NextAddress = routers.FirstOrDefault().ChildPosi; } } break; default: throw new Exception($"未定义任务状态【{saveModel.status}】"); } //dt_Task.TaskState = saveModel.status switch //{ // "02" => (int)TaskInStatusEnum.AGV_InExecuting, // "08" => (int)TaskInStatusEnum.AGV_InFinish, // _ => throw new Exception($"未定义任务状态【{saveModel.status}】"), //}; content = UpdateData(dt_Task); } catch (Exception ex) { content.Error(ex.Message); } return content; //return new AGVReturnInfo() //{ // code = content.Status ? "20000" : "90000", // message = content.Message, //}; } /// /// 出库任务完成 /// /// /// public WebResponseContent OutTaskFinish(string Address) { try { Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TargetAddress == Address); if (dt_Task != null && dt_Task.TaskState != TaskOutStatusEnum.AGV_OutFinish.ObjToInt()) throw new Exception($"地址【{Address}】存在未完成AGV任务"); Dt_Router _Router = _routerRepository.QueryFirst(x => x.NextPosi == Address); if (_Router == null) throw new Exception($"地址【{Address}】未配置路由"); _Router.Remark = "未占用"; Db.Ado.BeginTran(); _routerRepository.UpdateData(_Router); if (dt_Task != null) { dt_Task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt(); WMSTaskDTO WMStask = _mapper.Map(dt_Task); AddTask_Hty(dt_Task, TaskOperateTypeEnum.AutoComplete); HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary()); } Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } public static string GetEnumDescription(T value) where T : Enum { FieldInfo fieldInfo = typeof(T).GetField(value.ToString()); DescriptionAttribute attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute)); return attribute?.Description ?? value.ToString(); } } }