huangxiaoqiang
6 天以前 0e674f770d785bfd24b5034456c2502dcc6671d2
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -75,6 +75,7 @@
        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public List<int> AGVTaskTypes => typeof(AGVTaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService) : base(BaseDal)
        {
@@ -90,13 +91,19 @@
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveWMSTask(Dt_Task taskDTOs)
        public WebResponseContent ReceiveWMSTask([NotNull] List<Dt_Task> taskDTOs)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                BaseDal.AddData(taskDTOs);
            {// åˆ›å»ºä¸€ä¸ªDt_Task类型的列表用于存储转换后的任务数据
                List<Dt_Task> tasks = new List<Dt_Task>();
                // éåŽ†ä¼ å…¥çš„WMSTaskDTO列表
                foreach (var item in taskDTOs)
                {
                    tasks.Add(item);
                }
                BaseDal.AddData(tasks);
                _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
@@ -116,9 +123,24 @@
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public List<string> QueryConveyorLineTaskSourceAddress()
        public List<string> QueryConveyorLineTask()
        {
            return BaseDal.QueryData().Select(task => task.SourceAddress).ToList();
            var query = BaseDal.QueryData();
            return query.SelectMany(x =>
                new[] { x.SourceAddress, x.TargetAddress }
                .Where(address => !string.IsNullOrEmpty(address)))
                .ToList();
        }
        /// <summary>
        /// æŸ¥æ‰¾è¯¥ç«™å°æ˜¯å¦æœ‰ä»»åŠ¡
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string stationName)
        {
            return BaseDal.QueryFirst(x => x.SourceAddress == stationName||x.TargetAddress==stationName);
        }
        /// <summary>
@@ -150,22 +172,9 @@
            return content;
        }
        /// <summary>
        /// æŸ¥æ‰¾æ˜¯å¦æœ‰ä»»åŠ¡å¯ä»¥æ”¾åœ¨è¯¥ä½ç½®
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTaskRoadway(int agvarea)
        public bool QueryConveyorLinetaeersuadd(string stationName)
        {
            return BaseDal.QueryFirst(x => x.Roadway == agvarea.ToString() && x.MaterialType == (int)AgvStationEnum.BoardUnload && x.TargetAddress =="");
        }
        public bool QueryConveyorLinetaeersuadd(string taeersuadd)
        {
            Dt_Task dt_= BaseDal.QueryFirst(x => x.SourceAddress == taeersuadd || x.TargetAddress == taeersuadd);
            Dt_Task dt_= BaseDal.QueryFirst(x => x.SourceAddress == stationName || x.TargetAddress == stationName);
            if(dt_==null) return true;
            else return false;
@@ -211,11 +220,11 @@
        /// <returns></returns>
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if(taskTypeGroup == null)
            if (taskTypeGroup == null)
                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.OutNew), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
            if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
            if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            return null;
        }
@@ -228,7 +237,7 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        {
            return BaseDal.QueryFirst(x => x.TaskState == (int)TaskOutStatusEnum.OutNew && (deviceNo == "AGV01" ? x.Roadway == AgvareaEnum.AreaOne.ToString() : x.Roadway != AgvareaEnum.AreaOne.ToString()),TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskState == (int)AGVTaskStatusEnum.AGVNew && x.AGVName == deviceNo, TaskOrderBy);
        }
@@ -382,55 +391,23 @@
            try
            {
                int oldState = task.TaskState;
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                if (task.TaskType == (int)AGVTaskTypeEnum.AGVCarry)
                {
                    if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
                    if (task.TaskState >= (int)AGVTaskStatusEnum.AGVFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<AGVTaskStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                    if (task.TaskState == (int)AGVTaskStatusEnum.AGV_Executing)
                    {
                        task.Dispatchertime = DateTime.Now;
                    }
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    if (task.TaskState == (int)AGVTaskStatusEnum.AGVFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                    {
                        task.Dispatchertime = DateTime.Now;
                    }
                    if (task.TaskState == (int)TaskRelocationTypeEnum.Relocation)
                    {
                        Random random = new Random();
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = $"{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 == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.TaskState <= (int)TaskRelocationStatusEnum.SC_RelocationFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = (int)TaskRelocationStatusEnum.SC_RelocationExecuting;
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
                    {
                        task.Dispatchertime = DateTime.Now;
                        content = StackCraneTaskCompleted(task.TaskNum);
                        return content;
                    }
                }
                else
@@ -443,7 +420,7 @@
                    return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                }
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                BaseDal.UpdateData(task);
@@ -503,31 +480,13 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                if ( task.TaskState == (int)AGVTaskStatusEnum.AGV_Executing)
                {
                    /*List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");*/
                    task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                    task.TaskState = (int)AGVTaskStatusEnum.AGVFinish;
                    task.ModifyDate = DateTime.Now;
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //暂不考虑多个出库口
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    //todo
                    //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = (int)TaskInStatusEnum.InFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库完成");
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV搬运完成完成");
                }
                else
                {