using Magicodes.IE.Core; using NetTaste; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Metadata; using System.Text; using System.Text.Json; using System.Threading.Tasks; using WIDESEAWCS_Common; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService { public partial class TaskService { #region 更新任务状态 /// /// 更新任务状态 /// /// /// /// /// public WebResponseContent UpdateTaskStatus(object TaskDTO, DeviceTypeEnum deviceTypeEnum) { WebResponseContent content = new WebResponseContent(); GALAXISUpdateTaskStatus gALAXIS = new(); try { if (deviceTypeEnum == DeviceTypeEnum.GALAXIS) { //GALAXISUpdateTaskStatus? gALAXIS = TaskDTO.Serialize().DeserializeObject(); if (gALAXIS == null) throw new Exception("参数转换失败!"); var task = BaseDal.QueryFirst(x => x.WMSTaskNum == gALAXIS.taskId); if (task == null) throw new Exception($"未找到任务,任务编号【{gALAXIS.taskId}】"); switch (gALAXIS.taskStatus) { case 0: TaskCompleted(task, deviceTypeEnum); break; case 4: TaskFromCompleted(task, deviceTypeEnum); break; default: task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum); BaseDal.UpdateData(task); break; } } else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT) { } else { } return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } finally { _trackloginfoService.AddTrackLog(gALAXIS, content, "下发凯乐士AGV任务", "", ""); } } #endregion #region 任务状态转换 public int ReturnTaskStatus(object status, DeviceTypeEnum deviceTypeEnum) { try { if (deviceTypeEnum == DeviceTypeEnum.GALAXIS) { TaskStatusEnum taskStatus = status switch { 1 => TaskStatusEnum.FromOutOfStock, 2 => TaskStatusEnum.ToaddInStock, 3 => TaskStatusEnum.TaskNumRepetition, 5 => TaskStatusEnum.RCSDataError, 6 => TaskStatusEnum.TaskTypeError, 7 => TaskStatusEnum.ParameterError, 8 => TaskStatusEnum.RCSError, 10 => TaskStatusEnum.Takeing, 13 => TaskStatusEnum.Cancel, _ => throw new ArgumentOutOfRangeException( nameof(status), status, $"未知的任务状态码: {status}" ) }; return (int)taskStatus; } else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT) { return 0; } else { return 0; } } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion #region 任务起点完成 /// /// 任务起点完成 /// /// /// /// public WebResponseContent TaskFromCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum) { try { dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt(); Db.Ado.BeginTran(); UpdateLocationStatus(dt_Task.SourceAddress, deviceTypeEnum, LocationStatusEnum.Free); BaseDal.UpdateData(dt_Task); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } #endregion #region 任务完成 /// /// 任务完成 /// /// /// /// public WebResponseContent TaskCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum) { try { dt_Task.TaskState = TaskStatusEnum.Finish.ObjToInt(); Db.Ado.BeginTran(); UpdateLocationStatus(dt_Task.TargetAddress, deviceTypeEnum, LocationStatusEnum.InStock); BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } #endregion #region 更新货位状态 /// /// 更新货位状态 /// /// /// /// /// public WebResponseContent UpdateLocationStatus(string LocationCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum) { try { if (deviceTypeEnum == DeviceTypeEnum.GALAXIS) { Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); if (dt_KLSLocationInfo != null) { dt_KLSLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _kLSLocationInfoService.Repository.UpdateData(dt_KLSLocationInfo); } } else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT) { Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); if (dt_HKLocationInfo != null) { dt_HKLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _hKLocationInfoService.Repository.UpdateData(dt_HKLocationInfo); } } else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe) { Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); if (dt_RGVLocationInfo != null) { dt_RGVLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _rGVLocationInfoService.Repository.UpdateData(dt_RGVLocationInfo); } } else//库外站台 { } return WebResponseContent.Instance.OK(); } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion } }