| | |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Repository; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService |
| | |
| | | public partial class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService |
| | | { |
| | | private readonly IRouterService _routerService; |
| | | private readonly IRouterRepository _routerRepository; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; |
| | | private readonly ITaskHtyService _taskHtyService; |
| | | private readonly IMapper _mapper; |
| | | |
| | | private Dictionary<string, OrderByType> _taskOrderBy = new() |
| | | { |
| | | {nameof(Dt_Task.Grade),OrderByType.Desc }, |
| | | {nameof(Dt_Task.CreateDate),OrderByType.Asc}, |
| | | {nameof(Dt_Task.TaskNum),OrderByType.Asc}, |
| | | }; |
| | | |
| | | public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } } |
| | |
| | | |
| | | public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); |
| | | |
| | | public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) |
| | | public List<int> TaskRelocationTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList(); |
| | | |
| | | public TaskService(ITaskRepository BaseDal, IRouterService routerService, IRouterRepository routerRepository, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, ITaskHtyService taskHtyService, IMapper mapper) : base(BaseDal) |
| | | { |
| | | _routerService = routerService; |
| | | _routerRepository = routerRepository; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | | _taskExecuteDetailRepository = taskExecuteDetailRepository; |
| | | _taskHtyService = taskHtyService; |
| | | _mapper = mapper; |
| | | } |
| | | /// <summary> |
| | |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | foreach (var item in taskDTOs) |
| | | { |
| | | if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null) |
| | | if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum) != null) |
| | | { |
| | | continue; |
| | | throw new Exception($"ä»»å¡å·ã{item.TaskNum}ãå·²åå¨ä»»å¡"); |
| | | } |
| | | if (BaseDal.QueryFirst(x => x.PalletCode == item.PalletCode) != null) |
| | | throw new Exception($"æçå·ã{item.PalletCode}ãå·²åå¨ä»»å¡"); |
| | | Dt_Task task = _mapper.Map<Dt_Task>(item); |
| | | task.Creater = "WMS"; |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | |
| | | //æä¸èèå¤è·¯å¾ |
| | | if (routers.Count > 0) |
| | | { |
| | | task.TaskState = (int)TaskOutStatusEnum.OutNew; |
| | | |
| | | task.TaskState = item.SourceIsPickPlace ? TaskOutStatusEnum.Car_OutFinish.ObjToInt() : TaskOutStatusEnum.OutNew.ObjToInt(); |
| | | task.CurrentAddress = item.SourceAddress; |
| | | task.NextAddress = routers.FirstOrDefault().ChildPosi; |
| | | } |
| | |
| | | //æä¸èèå¤è·¯å¾ |
| | | if (routers.Count > 0) |
| | | { |
| | | task.TaskState = (int)TaskInStatusEnum.InNew; |
| | | if (task.TaskType != TaskInboundTypeEnum.PalletInbound.ObjToInt()) |
| | | task.TaskState = (int)TaskInStatusEnum.InNew; |
| | | task.CurrentAddress = item.SourceAddress; |
| | | task.NextAddress = routers.FirstOrDefault().ChildPosi; |
| | | } |
| | |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// è¾é线å
¥åºå®æåWMSç³è¯·å
¥åº/å åæºç³è¯·å
¥åº |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent StackerCraneRequestInbound(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | ConveyorLineDTO lineDTO = new ConveyorLineDTO() |
| | | { |
| | | stationCode = task.CurrentAddress, |
| | | TaskNum = task.TaskNum, |
| | | Barcode = task.PalletCode |
| | | }; |
| | | var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.StackerCraneRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>()); |
| | | if (ResultData.Result == null) throw new Exception($"åWMS请æ±å
¥åºåé
è´§ä½å¤±è´¥!ä»»å¡å·:{task.TaskNum}"); |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); |
| | | if (content.Status) |
| | | { |
| | | var receiveWMSInfo = JsonConvert.DeserializeObject<ReceiveWMSInfo>(content.Data.ToJson()); |
| | | task.IsPickPlace = receiveWMSInfo.IsPickPlace; |
| | | task.TargetAddress = receiveWMSInfo.TargetAddress; |
| | | task.NextAddress = task.TargetAddress; |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è¾éçº¿æ£æµå£åWMSç³è¯·å
¥åº |
| | | /// </summary> |
| | | /// <param name="palletCode">æçå·</param> |
| | | /// <param name="sourceAddress">èµ·å§å°å</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent RequestWMSTask(ConveyorLineDTO lineDTO) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | #region åWMSç³è¯· |
| | | var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.ConveyorLineRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>()); |
| | | if (ResultData.Result == null) throw new Exception($"åWMS请æ±å
¥åºå¤±è´¥!æçå·:{lineDTO.Barcode}"); |
| | | |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); |
| | | |
| | | #endregion |
| | | |
| | | #region 产线ç³è¯·å
¥åºä»»å¡ |
| | | if (content != null && content.Status)//ä»»å¡è½¬æ¢ |
| | | { |
| | | var task = JsonConvert.DeserializeObject<Dt_Task>(content.Data.ToJson()); |
| | | if (task != null) |
| | | { |
| | | List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.TargetAddress); |
| | | if (routers.Count > 0) |
| | | { |
| | | task.NextAddress = routers.FirstOrDefault().ChildPosi; |
| | | } |
| | | task.WMSId = task.TaskId; |
| | | task.Creater = "WMS"; |
| | | task.Dispatchertime = null; |
| | | task.CreateDate = DateTime.Now; |
| | | BaseDal.AddData(task); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæ¥è¯¢è¾éçº¿æªæ§è¡çä»»å¡ |
| | |
| | | /// <returns></returns> |
| | | public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress, string Barcode) |
| | | { |
| | | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.NextAddress == currentAddress && x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.NextAddress == currentAddress && x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish && x.CurrentAddress == currentAddress), TaskOrderBy); |
| | | } |
| | | /// <summary> |
| | | /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæ¥è¯¢è¾éçº¿æªæ§è¡çä»»å¡ |
| | | /// </summary> |
| | | /// <param name="deviceNo">设å¤ç¼å·</param> |
| | | /// <param name="currentAddress">å½åå°å</param> |
| | | /// <returns></returns> |
| | | public Dt_Task QueryConveyorLineTaskNum(string deviceNo, string currentAddress, int TaskNum) |
| | | { |
| | | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.NextAddress == currentAddress && x.TaskNum == TaskNum && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish && x.CurrentAddress == currentAddress), TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.TaskNum == taskNum && (x.NextAddress == nextAddress && x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish && x.TargetAddress == nextAddress), TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æçå·ãä¸ä¸å°åæ¥è¯¢è¾é线æ§è¡ä¸çä»»å¡ |
| | | /// </summary> |
| | | /// <param name="taskNum">ä»»å¡å·</param> |
| | | /// <param name="nextAddress">ä¸ä¸å°å</param> |
| | | /// <returns></returns> |
| | | public Dt_Task QueryExecutingConveyorLineTask(string Barcode, string nextAddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.PalletCode == Barcode && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="taskNum">ä»»å¡å·</param> |
| | | /// <param name="currentAddress">å½åå°å</param> |
| | | /// <returns></returns> |
| | | public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress) |
| | | public Dt_Task QueryCompletedConveyorLineTask(string Barcode, string currentAddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.PalletCode == Barcode && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); |
| | | } |
| | | |
| | | public Dt_Task QuertOutProductionLineTask(bool NextAddIsNull) |
| | | { |
| | | if (NextAddIsNull) |
| | | return BaseDal.QueryFirst(x => x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish && string.IsNullOrEmpty(x.NextAddress), TaskOrderBy); |
| | | else |
| | | return BaseDal.QueryFirst(x => x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish, TaskOrderBy); |
| | | } |
| | | /// <summary> |
| | | /// æ ¹æ®è®¾å¤ç¼å·ãä»»å¡ç±»ååç»(å¯é)æç
§ä¼å
级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ |
| | | /// </summary> |
| | |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢åºå
ç§»åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="deviceNo"></param> |
| | | /// <param name="currentAddress"></param> |
| | | /// <returns></returns> |
| | | public Dt_Task QueryStackerCraneRelocationTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | Dt_Task task = null; |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()).OrderBy(x => x.TaskNum).ToList(); |
| | | else |
| | | tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()).OrderBy(x => x.TaskNum).ToList(); |
| | | if (tasks != null && tasks.Count > 0) |
| | | { |
| | | task = tasks.First(); |
| | | } |
| | | return task; |
| | | } |
| | | /// <summary> |
| | | /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç
§ä¼å
级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ |
| | | /// </summary> |
| | |
| | | /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> |
| | | public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | Dt_Task? _Task = null; |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); |
| | | { |
| | | _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); |
| | | if (_Task != null && TaskOutboundTypes.Contains(_Task.TaskType)) |
| | | { |
| | | if (_Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null; |
| | | } |
| | | } |
| | | else |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); |
| | | { |
| | | _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); |
| | | if (_Task != null && TaskOutboundTypes.Contains(_Task.TaskType)) |
| | | { |
| | | if (_Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null; |
| | | } |
| | | } |
| | | return _Task; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress), TaskOrderBy); |
| | | else |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | } |
| | | |
| | | public Dt_Task QueryCarOutFinish() |
| | | { |
| | | Dt_Task? _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy); |
| | | return _Task; |
| | | } |
| | | /// <summary> |
| | | /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç
§ä¼å
级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± åºåºç±»åçæ°å¢çä»»å¡ |
| | | /// </summary> |
| | |
| | | /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> |
| | | public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | Dt_Task? _Task = null; |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy); |
| | | _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy); |
| | | else |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | if (_Task != null && _Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null; |
| | | return _Task; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | |
| | | task.TaskState = nextStatus; |
| | | if (task.SourceIsPickPlace && task.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()) |
| | | task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt(); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) |
| | | { |
| | |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.NextAddress = string.Empty;// $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}"; |
| | | task.TargetAddress = task.NextAddress; |
| | | } |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)//åºå
ç§»åº |
| | | { |
| | | if (task.TaskState >= (int)TaskRelocationStatusEnum.RelocationFinish) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); |
| | | if (task.SourceIsPickPlace && task.TaskState == TaskRelocationStatusEnum.RelocationNew.ObjToInt()) |
| | | task.TaskState = TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt(); |
| | | else |
| | | task.TaskState = nextStatus; |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)//åºå
移车 |
| | | { |
| | | if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt()) |
| | | { |
| | | if (task.TaskState >= (int)TaskCarStatusEnum.RelocationCarFinish) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskCarStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | } |
| | | else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()) |
| | | { |
| | | if (task.TaskState >= (int)CarChargingTaskEnum.CarChargingFinish) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<CarChargingTaskEnum>(); |
| | | task.TaskState = nextStatus; |
| | | } |
| | | } |
| | | else |
| | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡å®æ |
| | | /// </summary> |
| | | /// <param name="taskNum">ä»»å¡ç¼å·</param> |
| | | /// <returns>è¿åå¤çç»æ</returns> |
| | | public WebResponseContent StackCraneTaskCompleted(int taskNum) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); |
| | | |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) |
| | | { |
| | | List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); |
| | | if (!routers.Any()) return WebResponseContent.Instance.Error($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); |
| | | |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.NextAddress = routers.FirstOrDefault().ChildPosi; |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | BaseDal.UpdateData(task); |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); |
| | | //todo 忥å°WMS |
| | | |
| | | //æä¸èèå¤ä¸ªåºåºå£ |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) |
| | | { |
| | | //todo |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | |
| | | #region åWMSåé¦å åæºä»»å¡å®æ |
| | | WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task); |
| | | var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>()); |
| | | if (ResultData.Result == null) throw new Exception($"ä»»å¡ç¶æåæ¥å°WMS失败!ä»»å¡å·:{task.TaskNum}"); |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); |
| | | if (content.Status) |
| | | { |
| | | BaseDal.UpdateData(task); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå
¥åºå®æ"); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | |
| | | //WMSTaskDTO taskDTO = new WMSTaskDTO() |
| | | //{ |
| | | // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), |
| | | // Grade = 1, |
| | | // PalletCode = task.PalletCode + "S", |
| | | // RoadWay = "SC01", |
| | | // SourceAddress = task.TargetAddress, |
| | | // TargetAddress = "CLOutAreaA", |
| | | // TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | // Id = 0, |
| | | // TaskType = (int)TaskOutboundTypeEnum.Outbound |
| | | //}; |
| | | |
| | | //content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) |
| | | { |
| | | //todo è°ç¨WMSç§»åºå®æ |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) |
| | | { |
| | | |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã"); |
| | | } |
| | | content = WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WebResponseContent.Instance.Error($"ä»»å¡å®æå¼å¸¸,ä»»å¡å·:ã{taskNum}ã"); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¢å¤æèµ·ä»»å¡ |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public Dt_Task GetTaskInfo(int taskNum) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®ä»»å¡å·åä»»å¡ç¶ææ¥è¯¢ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <returns></returns> |
| | | public Dt_Task GetTaskInfo(int taskNum, int taskState) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.TaskState == taskState); |
| | | } |
| | | /// <summary> |
| | | /// æ ¹æ®ä»»å¡ç¶æãç±»åæ¥è¯¢ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="TaskState"></param> |
| | | /// <param name="TaskType"></param> |
| | | /// <returns></returns> |
| | | public Dt_Task GetTaskState(int TaskState, int TaskType) |
| | | { |
| | | Dt_Task task = null; |
| | |
| | | task = BaseDal.QueryFirst(x => x.TaskType == TaskType); |
| | | return task; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢ç©¿æ¢è½¦åºå
¥åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="deviceNo"></param> |
| | | /// <param name="currentAddress"></param> |
| | | /// <returns></returns> |
| | | 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); |
| | | } |
| | | private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); |
| | | /// <summary> |
| | | /// æ·»å ç§»è½¦ä»»å¡ |
| | | /// </summary> |
| | |
| | | /// <param name="ShuttleCarCode">ç©¿æ¢è½¦å·</param> |
| | | /// <returns></returns> |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | public WebResponseContent AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "") |
| | | public async Task AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "") |
| | | { |
| | | #region å建å åæºç§»è½¦ä»»å¡ |
| | | Dt_Task dt_Task = new Dt_Task() |
| | | await _semaphore.WaitAsync(); |
| | | try |
| | | { |
| | | TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), |
| | | Grade = 2, |
| | | Roadway = "SC01", |
| | | TaskType = (int)TaskOtherTypeEnum.RelocationCar, |
| | | SourceAddress = SourceAddress, |
| | | TargetAddress = TargetAddress, |
| | | CurrentAddress = SourceAddress, |
| | | NextAddress = TargetAddress, |
| | | CreateDate = DateTime.Now, |
| | | Creater = "WCS", |
| | | TaskState = (int)TaskCarStatusEnum.CarNew, |
| | | ShuttleCarCode = ShuttleCarCode, |
| | | WMSId = 0, |
| | | Remark = remark |
| | | }; |
| | | return AddData(dt_Task); |
| | | #endregion |
| | | if (!string.IsNullOrEmpty(SourceAddress) && SourceAddress != "") |
| | | { |
| | | Dt_Task? task = BaseDal.QueryFirst(x => x.SourceAddress == SourceAddress && (x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())); |
| | | if (task != null) return; |
| | | } |
| | | if (!string.IsNullOrEmpty(TargetAddress) && TargetAddress != "") |
| | | { |
| | | Dt_Task? task = BaseDal.QueryFirst(x => x.TargetAddress == TargetAddress && (x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())); |
| | | if (task != null) return; |
| | | } |
| | | #region å建å åæºç§»è½¦ä»»å¡ |
| | | Dt_Task dt_Task = new Dt_Task() |
| | | { |
| | | TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), |
| | | Grade = 2, |
| | | Roadway = "SC01", |
| | | TaskType = string.IsNullOrEmpty(remark) ? (int)TaskOtherTypeEnum.RelocationCar : (int)TaskOtherTypeEnum.RelocationCarCharging, |
| | | SourceAddress = SourceAddress, |
| | | TargetAddress = TargetAddress, |
| | | CurrentAddress = SourceAddress, |
| | | NextAddress = TargetAddress, |
| | | CreateDate = DateTime.Now, |
| | | Creater = "WCS", |
| | | TaskState = string.IsNullOrEmpty(remark) ? (int)TaskCarStatusEnum.CarNew : (int)CarChargingTaskEnum.CarChargingNew, |
| | | ShuttleCarCode = ShuttleCarCode, |
| | | WMSId = 0, |
| | | Remark = remark |
| | | }; |
| | | if (SourceAddress == TargetAddress) dt_Task.TaskState = (int)CarChargingTaskEnum.CarChargingSC_CarFinish; |
| | | AddData(dt_Task); |
| | | #endregion |
| | | } |
| | | catch (Exception) |
| | | { |
| | | |
| | | } |
| | | finally |
| | | { |
| | | _semaphore.Release(); |
| | | } |
| | | } |
| | | } |
| | | } |