| 项目代码/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs
@@ -70,5 +70,10 @@ /// </summary> [Description("䏿æç§å¢ä¸å")] Phase1PickOrderInfoRequest, /// <summary> /// AGVä»»å¡åæ¶ /// </summary> [Description("AGVä»»å¡åæ¶")] AgvTaskCancel } } ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs
@@ -123,4 +123,32 @@ /// </summary> public List<MissionDataItem> MissionData { get; set; } } public class AgvTaskCancelDTO { /// <summary> /// 请æ±id /// </summary> public string RequestId { get; set; } /// <summary> /// ä»»å¡ç¼å· /// </summary> public string MissionCode { get; set; } /// <summary> /// 容å¨ç¼å· /// </summary> public string ContainerCode { get; set; } /// <summary> /// èç¹ç¼å· /// </summary> public string Position { get; set; } /// <summary> /// åæ¶æ¨¡å¼ /// </summary> public string CancelMode { get; set; } /// <summary> /// åæ¶åå /// </summary> public string Reason { get; set; } } } ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -171,9 +171,12 @@ /// AGVç¶ææ¥è¯¢è°ç¨åWMSæ é䏿¥ /// </summary> void AgvSearchStatus(); WebResponseContent AgvCancelTask(AgvTaskCancelDTO taskModel, APIEnum SendTask = APIEnum.AgvTaskCancel); /// <summary> /// éç½®ææå¼å¸¸ä»»å¡ /// </summary> WebResponseContent ResetAllExceptionTask(int taskNum); WebResponseContent TaskCancel(List<TaskCancel> taskCancels); WebResponseContent TaskCancelCompleted(int taskNum); } } ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -144,6 +144,14 @@ public int Grade { get; set; } /// <summary> /// æ¯å¦åæ¶ /// </summary> [ImporterHeader(Name = "æ¯å¦åæ¶")] [ExporterHeader(DisplayName = "æ¯å¦åæ¶")] [SugarColumn(IsNullable = false, ColumnDescription = "æ¯å¦åæ¶")] public int IsCancel { get; set; } /// <summary> /// WMSä»»å¡ /// </summary> [ImporterHeader(Name = "WMSä»»å¡å·")] ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -65,7 +65,15 @@ break; case nameof(AGVStatusEnum.PICKER_SEND): if (task == null) throw new Exception($"æªæ¾å°æç®±ã{agvUpdateDTO.ContainerCode}ãä»»å¡"); _taskService.TaskCompleted(task.TaskNum); Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x=>x.PickStationCode==task.NextAddress); if (task.IsCancel>0 && stationManger!=null && stationManger.StationCode!= agvUpdateDTO.CurrentPosition) { _taskService.TaskCancelCompleted(task.TaskNum); } else { _taskService.TaskCompleted(task.TaskNum); } break; case nameof(AGVStatusEnum.WAITFEEDBACK): //AGVæ¾è¡ ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -170,7 +170,7 @@ [HttpPost, HttpGet, Route("CancelTask"), AllowAnonymous] public WebResponseContent CancelTask([FromBody] List<TaskCancel> taskCancels) { return WebResponseContent.Instance.Error(); return Service.TaskCancel(taskCancels); ; } /// <summary> ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs
@@ -149,5 +149,30 @@ } } public WebResponseContent AgvCancelTask(AgvTaskCancelDTO taskModel, APIEnum SendTask = APIEnum.AgvTaskCancel) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = _apiInfoRepository.QueryFirst(x => x.ApiCode == SendTask.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) throw new Exception($"æªæ¾å°åéAGV任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string request = JsonConvert.SerializeObject(taskModel, settings); string response = HttpHelper.Post(apiAddress, request); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>() ?? throw new Exception("AGVä»»å¡åéæªè¿åç»æ"); if (agvContent.Success) { content.OK(); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } } } ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -22,6 +22,7 @@ using NPOI.XSSF.UserModel; using RYB_PTL_API; using SqlSugar; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.DirectoryServices.Protocols; using System.Linq; @@ -808,6 +809,117 @@ return content; } /// <summary> /// ä»»å¡åæ¶ /// </summary> /// <returns></returns> public WebResponseContent TaskCancelCompleted(int taskNum) { WebResponseContent content = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//åºåºä»»å¡å®æé»è¾ { Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) { return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); } task.TaskState = TaskStatusEnum.Cancel.ObjToInt(); locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); _unitOfWorkManage.BeginTran(); _locationInfoRepository.UpdateData(locationInfo); BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); _unitOfWorkManage.CommitTran(); _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum); content.OK(); } else { content.Error($"æªæ¾å°åºåºä»»å¡{taskNum}"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// ä»»å¡åæ¶ /// </summary> /// <returns></returns> public WebResponseContent TaskCancel(List<TaskCancel> taskCancels) { WebResponseContent content = new WebResponseContent(); try { if (taskCancels==null || taskCancels.Count<=0) { return content.Error("ä¼ å ¥ä¸è½ä¸ºç©º"); } //è·åæææç®± List<Dt_Task> outTasks = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.Outbound.ObjToInt()); List<Dt_Task> cancelTasks = new List<Dt_Task>(); List<Dt_Task> cancelTasksCompleted = new List<Dt_Task>(); //夿æ¯å¦æä»»å¡åå¨ foreach (var item in taskCancels) { Dt_Task? taskExist = outTasks.FirstOrDefault(x=>x.PalletCode== item.ContainerCode); if (taskExist==null) { content.Message += $"{item.ContainerCode}ä»»å¡ä¸åå¨"; continue; } if (taskExist.TaskState==TaskStatusEnum.AGV_TakeFinish.ObjToInt()) { taskExist.IsCancel = 1; cancelTasks.Add(taskExist); } else if(taskExist.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt()) { cancelTasksCompleted.Add(taskExist); } else { return content.Error($"ä»»å¡åæ¶å¤±è´¥{item.TaskCode}ä»»å¡ç¶æä¸å¯åæ¶ï¼"); } } _unitOfWorkManage.BeginTran(); BaseDal.UpdateData(cancelTasks); foreach (var item in cancelTasksCompleted) { WebResponseContent responseContent = TaskCancelCompleted(item.TaskNum); if (!responseContent.Status) { throw new Exception(responseContent.Message); } } _unitOfWorkManage.CommitTran(); cancelTasks.AddRange(cancelTasksCompleted); foreach (var item in cancelTasks) { AgvTaskCancelDTO agvTaskCancel = new AgvTaskCancelDTO() { RequestId= DateTime.Now.ToString("yyMMddHHmmssfff"), MissionCode=item.GroupId, ContainerCode=item.PalletCode, Position="", CancelMode= "CTU_REDIRECT_START", Reason="" }; AgvCancelTask(agvTaskCancel); } content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// äºææç§å¢åä¼ /// </summary> /// <returns></returns>