duyongjia
2024-11-27 3d07ccb8342a92b32bc8858ecf56d257d6b500c9
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -54,6 +54,7 @@
        private readonly ILocationInfoRepository _locationInfoRepository;
        private readonly IMapper _mapper;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ITaskRepository _taskRepository;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
@@ -71,7 +72,7 @@
        public List<int> TaskOtherboundTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage, ITaskRepository taskRepository) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -79,6 +80,7 @@
            _mapper = mapper;
            _locationInfoRepository = locationInfoRepository;
            _unitOfWorkManage = unitOfWorkManage;
            _taskRepository = taskRepository;
        }
        /// <summary>
@@ -678,7 +680,7 @@
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
@@ -702,6 +704,75 @@
            BaseDal.UpdateData(task);
        }
        /// <summary>
        /// ä»»åŠ¡å¼ºåˆ¶å®Œæˆ
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        public WebResponseContent ForceCompleteTask(int taskNum)
        {
            return null;
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public WebResponseContent CancelTask(int taskid)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //先查询任务,根据不同的任务类型做任务取消操作
                bool isAllow = false;
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskid);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务id:【{taskid}】");
                //如果是入库分自动和手动两种情况处理
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.WMSId == 0 && task.TaskState == (int)TaskInStatusEnum.InNew)//自动入库,1001-AGV请求是否允计进入,任务状态为“新建入库任务200”之前可以取消
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskInStatusEnum.InCancel;
                    }
                    else if (task.WMSId == 1 && task.TaskState == (int)TaskInStatusEnum.AGV_InExecuting)//手动入库,3001-AGV放货完成,任务状态为“AGV入库执行中210”之前可以取消
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskInStatusEnum.InCancel;
                    }
                }
                else//其他任务,任务状态“新建出库任务”之前,才可以取消
                {
                    if (task.TaskState == (int)TaskOutStatusEnum.OutNew)
                    {
                        isAllow = true;
                        task.TaskState = (int)TaskOutStatusEnum.OutCancel;
                    }
                }
                if (isAllow)//如果允计取消
                {
                    //更新状态为任务取消
                    UpdateTaskStatus(task.TaskId, task.TaskState);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"手动任务取消");
                    content = WebResponseContent.Instance.OK("取消成功!");
                    //同步回传WMS
                }
                else
                {
                    content = WebResponseContent.Instance.OK("该任务目前状态不充许取消!");
                }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯å’Œæ–°çš„ä»»åŠ¡å·ï¼ˆ1001,3001时一样任务号)