´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/StationMangerService.cs
@@ -24,5 +24,9 @@ { return BaseDal.QueryFirst(x => x.StationCode == fromLocationCode && x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt()); } public Dt_StationManger GetOutStationInfo(string stationCode) { return BaseDal.QueryFirst(x => x.StationCode == stationCode && x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()); } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -41,32 +41,8 @@ /// </summary> [Description("宿")] Finish, /// <summary> /// å¤å½¢æ£æµä¸ /// </summary> [Description("å¤å½¢æ£æµä¸")] CheckShapeing, /// <summary> /// å¤å½¢æ£æµæå /// </summary> [Description("å¤å½¢æ£æµæå")] CheckShapeingOk, /// <summary> /// å¤å½¢æ£æµå¤±è´¥ /// </summary> [Description("å¤å½¢æ£æµå¤±è´¥")] CheckShapeingNG, /// <summary> /// æçå·ç¡®è®¤ä¸ /// </summary> [Description("æçå·ç¡®è®¤ä¸")] CheckPalletCodeing, /// <summary> /// AGVå¾ ç»§ç»æ§è¡ /// </summary> [Description("AGVå¾ ç»§ç»æ§è¡")] AGV_WaitToExecute, #region å¯ä¹å£«AGVå ¶ä»ä»»å¡ç¶æ @@ -120,11 +96,40 @@ #endregion #region 海康AGVå ¶ä»ä»»å¡ç¶æ /// <summary> /// æçå·ç¡®è®¤ä¸ /// </summary> [Description("æçå·ç¡®è®¤ä¸")] CheckPalletCodeing, /// <summary> /// AGVå¾ ç»§ç»æ§è¡ /// </summary> [Description("AGVå¾ ç»§ç»æ§è¡")] AGV_WaitToExecute, #endregion #region ååè½¦å ¶ä»ä»»å¡ç¶æ /// <summary> /// å¤å½¢æ£æµä¸ /// </summary> [Description("å¤å½¢æ£æµä¸")] CheckShapeing, /// <summary> /// å¤å½¢æ£æµæå /// </summary> [Description("å¤å½¢æ£æµæå")] CheckShapeingOk, /// <summary> /// å¤å½¢æ£æµå¤±è´¥ /// </summary> [Description("å¤å½¢æ£æµå¤±è´¥")] CheckShapeingNG, /// <summary> /// å¾ ç§»åºåæ§è¡ /// </summary> [Description("å¾ ç§»åºåæ§è¡")] RGV_WaitMoveToExecute, #endregion } public enum TaskInStatusEnum ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -49,6 +49,12 @@ /// </summary> [Description("è£åªåºåº")] CJOutbound, /// <summary> /// æåç§»åº /// </summary> [Description("æåç§»åº")] CPMoveInventory, } public enum TaskInboundTypeEnum ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IStationMangerService.cs
@@ -18,5 +18,11 @@ /// <param name="fromLocationCode"></param> /// <returns></returns> Dt_StationManger GetInStationInfo(string fromLocationCode); /// <summary> /// è·ååºåºç«å° /// </summary> /// <param name="fromLocationCode"></param> /// <returns></returns> Dt_StationManger GetOutStationInfo(string fromLocationCode); } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -123,7 +123,7 @@ [ImporterHeader(Name = "å¼å¸¸ä¿¡æ¯")] [ExporterHeader(DisplayName = "å¼å¸¸ä¿¡æ¯")] [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "å¼å¸¸ä¿¡æ¯")] public string? ExceptionMessage { get; set; } public string ExceptionMessage { get; set; } /// <summary> /// ä¼å 级 ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs
@@ -67,10 +67,9 @@ { try { Dt_KLSLocationInfo? kLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode); if (kLSLocationInfo == null) throw new Exception($"æªæ¾å°èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãï¼"); Dt_KLSLocationInfo? kLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"æªæ¾å°èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãï¼"); if (kLSLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãå½ååºä½ç¶æä¸å¯åºåºï¼"); Dt_Task dt_Task = new Dt_Task() Dt_Task dt_Task = new() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs
@@ -72,8 +72,30 @@ { try { //Dt_Task dt_Task = BaseDal.QueryFirst(x => x.PalletCode == taskDTO.containerCode); //if (dt_Task != null) throw new Exception($"æçå·ã{taskDTO.containerCode}ãå·²åå¨ä»»å¡"); Dt_RGVLocationInfo rGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"æªæ¾å°èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãï¼"); if (rGVLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãå½ååºä½ç¶æä¸å¯åºåºï¼"); Dt_Task dt_Task = new() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = rGVLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = taskDTO.toLocationCode, TargetAddress = taskDTO.toLocationCode, Creater = "WMS", }; rGVLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _rGVLocationInfoService.Repository.UpdateData(rGVLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs
@@ -50,8 +50,33 @@ 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<FOURBOTReturn>(); 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) @@ -60,6 +85,8 @@ } } #endregion #region ä¸åå¤å½¢æ£æµæåä»»å¡ /// <summary> /// ä¸åå¤å½¢æ£æµæåä»»å¡ /// </summary> @@ -71,6 +98,7 @@ { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("æªæ¾å°åå车任å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); List<Dt_RGVLocationInfo> rGVLocationInfos = new List<Dt_RGVLocationInfo>(); List<Dt_StationManger> stationMangers = new List<Dt_StationManger>(); foreach (var item in tasks) { #region è·åè´§ä½ @@ -100,12 +128,18 @@ 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) @@ -113,5 +147,105 @@ WriteError(nameof(TaskJob), ex.Message, ex); } } #endregion #region ä¸åå¤å½¢æ£æµå¤±è´¥ä»»å¡ public void SendCheckShapeingNGTask(List<Dt_Task> 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<FOURBOTReturn>(); 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<Dt_Task> 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<FOURBOTReturn>(); 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 } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskExtend.cs
@@ -56,8 +56,26 @@ { try { #region ä¸åå¤å½¢æ£æµéè¿çååè½¦ä»»å¡ var Tasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == (int)TaskStatusEnum.CheckShapeingOk).ToList(); SendCheckShapeingOkTask(Tasks); if (Tasks.Count > 0) SendCheckShapeingOkTask(Tasks); #endregion #region ä¸åå¤å½¢æ£æµå¤±è´¥çååè½¦ä»»å¡ Tasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == (int)TaskStatusEnum.CheckShapeingNG).ToList(); if (Tasks.Count > 0) SendCheckShapeingNGTask(Tasks); Tasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == (int)TaskStatusEnum.CheckShapeingOk && x.ExceptionMessage.Contains("æªæ¾å°ç»ç¹åºåº")).ToList(); if (Tasks.Count > 0) SendCheckShapeingNGTask(Tasks); #endregion #region ä¸åå¾ ç§»åºååå车åºåºä»»å¡ Tasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == (int)TaskStatusEnum.RGV_WaitMoveToExecute).ToList(); if (Tasks.Count > 0) SendMoveToExecuteTask(Tasks); #endregion #region ä¸åæçç¡®è®¤çæµ·åº·AGVä»»å¡ #endregion } catch (Exception ex) { ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/TaskJob.cs
@@ -29,11 +29,14 @@ private readonly ITaskService _taskService; private readonly IApiInfoService _apiInfoService; private readonly IRGVLocationInfoService _rGVLocationInfoService; public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService) private readonly IStationMangerService _stationMangerService; public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService, IStationMangerService stationMangerService) { _taskService = taskService;//æ³¨å ¥ _apiInfoService = apiInfoService; _rGVLocationInfoService = rGVLocationInfoService; _stationMangerService = stationMangerService; } public Task Execute(IJobExecutionContext context)