using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_DTO.WMS; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_Tasks { public partial class TaskJob { #region 下发四向车任务 public void SendRGVTask(List tasks) { FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new(); try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置"); #region 入库 var intasks = tasks.Where(x => x.TaskType == (int)TaskTypeEnum.CPInbound).ToList(); foreach (var item in intasks) { fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.destination = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 0//是否放下容器,0否1是 }; fOURBOTnewMovePodTask.desType = 2; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn.returnCode == 0) { item.RGVTaskId = fOURBOTReturn.data.taskID; item.TaskState = (int)TaskStatusEnum.Execut; } } _taskService.UpdateData(intasks); #endregion #region 出库 var outtasks = tasks.Where(x => x.TaskType == (int)TaskTypeEnum.CPOutbound).ToList(); foreach (var item in outtasks) { ///判断是否需要移库,出库站台是否空闲 if (IsNoMoveTask(item) && StationIsFree(item.TargetAddress)) { #region 下发出库任务 fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.destination = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 1//是否放下容器,0否1是 }; fOURBOTnewMovePodTask.desType = 2; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn.returnCode == 0) { item.RGVTaskId = fOURBOTReturn.data.taskID; item.TaskState = (int)TaskStatusEnum.Execut; } #endregion } else { item.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute; } } _taskService.UpdateData(outtasks); #endregion } catch (Exception ex) { WriteError(nameof(TaskJob), ex.Message, ex); } } #endregion #region 下发外形检测成功任务 /// /// 下发外形检测成功任务 /// /// public void SendCheckShapeingOkTask(List tasks) { FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new(); try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置"); List rGVLocationInfos = new List(); List stationMangers = new List(); foreach (var item in tasks) { #region 获取货位 var rGVLocationInfo = _rGVLocationInfoService.GetFreeLocationInfo(item.Roadway); if (rGVLocationInfo == null) { item.ExceptionMessage = $"未找到终点库区【{item.Roadway}】可用空货位!"; } #endregion else { item.CurrentAddress = item.NextAddress; item.NextAddress = rGVLocationInfo.LocationCode; fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.destination = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 1//是否放下容器,0否1是 }; fOURBOTnewMovePodTask.desType = 2; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn.returnCode == 0) { item.RGVTaskId = fOURBOTReturn.data.taskID; item.TaskState = (int)TaskStatusEnum.Puting; rGVLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt(); rGVLocationInfos.Add(rGVLocationInfo); #region 释放入库站台 Dt_StationManger stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress); stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt(); stationMangers.Add(stationManger); #endregion } } } _taskService.Db.Ado.BeginTran(); _taskService.UpdateData(tasks); _rGVLocationInfoService.UpdateData(rGVLocationInfos); _stationMangerService.UpdateData(stationMangers); _taskService.Db.Ado.CommitTran(); } catch (Exception ex) { WriteError(nameof(TaskJob), ex.Message, ex); } } #endregion #region 下发外形检测失败任务 public void SendCheckShapeingNGTask(List tasks) { FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new(); try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置"); foreach (var item in tasks) { Dt_StationManger stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress); item.CurrentAddress = item.NextAddress; item.NextAddress = stationManger.RGVStationCode; fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.destination = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 1//是否放下容器,0否1是 }; fOURBOTnewMovePodTask.desType = 2; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn.returnCode == 0) { item.RGVTaskId = fOURBOTReturn.data.taskID; item.TaskState = (int)TaskStatusEnum.Puting; } } _taskService.UpdateData(tasks); } catch (Exception ex) { WriteError(nameof(TaskJob), ex.Message, ex); } } #endregion #region 判断是否需要移库 public static bool IsNoMoveTask(Dt_Task task) { var isNoMove = true; try { } catch (Exception ex) { throw new Exception(ex.Message); } return isNoMove; } #endregion #region 判断出库口是否空闲 public bool StationIsFree(string StationCode) { Dt_StationManger stationManger = _stationMangerService.GetOutStationInfo(StationCode); return stationManger.IsOccupied == LocationStatusEnum.Free.ObjToInt(); } #endregion #region 移库后下发出库任务 public void SendMoveToExecuteTask(List tasks) { try { FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new(); Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置"); foreach (var item in tasks) { if (_taskService.Repository.QueryData(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory).Any()) continue; if (!StationIsFree(item.TargetAddress)) continue; #region 下发出库任务 fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.destination = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 0//是否放下容器,0否1是 }; fOURBOTnewMovePodTask.desType = 2; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn.returnCode == 0) { item.RGVTaskId = fOURBOTReturn.data.taskID; item.TaskState = (int)TaskStatusEnum.Execut; } #endregion } _taskService.UpdateData(tasks); } catch (Exception ex) { WriteError(nameof(TaskJob), ex.Message, ex); } } #endregion } }