From 40f71192f067a48fff730a52fa8f47a1b69ba59d Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期一, 13 十月 2025 17:28:00 +0800
Subject: [PATCH] 支持跨楼层与AGV搬运任务,优化货位管理新增跨楼层与AGV搬运任务相关页面、API及服务逻辑,支持任务状态更新与多任务类型处理。  更新货位管理功能,支持批量创建货位及批量记录货位状态变动。  重构任务状态更新逻辑,增强事务处理能力,优化代码结构。 调整页面配置与文档布局,新增常量与枚举以支持新功能。 修复部分任务状态处理中的潜在问题。

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |  246 +++++++++++++++++++++++++++++++++++-------------
 1 files changed, 179 insertions(+), 67 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 0df6834..9e2d51d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -341,7 +341,7 @@
         /// <returns></returns>
         public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task)
         {
-            WebResponseContent content = new WebResponseContent();
+            WebResponseContent? content = new WebResponseContent();
             try
             {
                 int oldState = task.TaskState;
@@ -353,6 +353,8 @@
 
                     if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish)
                     {
+                        CompletedTask(task.TaskNum);
+
                         task.ModifyDate = DateTime.Now;
                         task.Modifier = "System";
 
@@ -374,56 +376,51 @@
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                     task.TaskState = nextStatus;
 
-                    //if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
-                    //{
-                    //    #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
+                    {
+                        #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
 
-                    //    // TODO: 璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
-                    //    // 鍒涘缓璇锋眰瀵硅薄
-                    //    var taskDto = new RequestTaskDto()
-                    //    {
-                    //        Position = task.NextAddress,
-                    //        PalletCode = task.PalletCode,
-                    //    };
+                        var taskDto = new RequestTaskDto()
+                        {
+                            Position = task.NextAddress,
+                            PalletCode = task.PalletCode,
+                        };
 
-                    //    // 鑾峰彇WMSip鍦板潃
-                    //    var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
-                    //    var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
-                    //    var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
-                    //    if (wmsBasez == null || requestLocation == null)
-                    //    {
-                    //        throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                    //    }
-                    //    var wmsIpAddrss = wmsBasez + requestLocation;
+                        // 鑾峰彇WMSip鍦板潃
+                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
+                        if (wmsBasez == null || requestLocation == null)
+                        {
+                            throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                        }
+                        var wmsIpAddrss = wmsBasez + requestLocation;
 
-                    //    // 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
-                    //    var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
-                    //    if (abc == null)
-                    //        return content.Error();
-                    //    // 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
-                    //    content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
+                        // 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
+                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+                        if (abc == null)
+                            return content.Error();
+                        // 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
+                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
 
+                        LogFactory.WriteError($"Info_鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆憑Environment.NewLine}{Environment.NewLine}");
 
-                    //    QuartzLogger.WriteLogToFile($"Info_鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆憑Environment.NewLine}{Environment.NewLine}");
+                        // 妫�鏌ョ姸鎬佸苟杩斿洖
+                        if (!content.Status)
+                        {
+                            return content;
+                        }
 
+                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+                        var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
 
-                    //    // 妫�鏌ョ姸鎬佸苟杩斿洖
-                    //    if (!content.Status)
-                    //    {
-                    //        return content;
-                    //    }
+                        task.CurrentAddress = task.NextAddress;
+                        task.NextAddress = taskResult.TargetAddress;
+                        task.TargetAddress = task.NextAddress;
 
-                    //    // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-                    //    var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
-
-                    //    task.CurrentAddress = task.NextAddress;
-                    //    task.NextAddress = taskResult.TargetAddress;
-                    //    task.TargetAddress = task.NextAddress;
-
-                    //    #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
-                    //}
-                    //else 
-                    if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
+                        #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                    }
+                    else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                     {
                         if (App.User.UserId > 0)
                         {
@@ -440,7 +437,8 @@
                         BaseDal.DeleteData(task);
                         _taskHtyRepository.AddData(task_Hty);
                     }
-                }else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup)
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup)
                 {
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskAGVCarryStatusEnum>();
 
@@ -448,6 +446,114 @@
 
                     if (task.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                     {
+                        task.ModifyDate = DateTime.Now;
+                        task.Modifier = "System";
+
+                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                        task_Hty.TaskId = 0;
+
+                        BaseDal.DeleteData(task);
+                        _taskHtyRepository.AddData(task_Hty);
+                    }
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.AcrossFloorGroup)
+                {
+                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskAcrossFloorStatusEnum>();
+
+                    task.TaskState = nextStatus;
+
+                    if (task.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarryFinish)
+                    {
+                        CompletedTask(task.TaskNum);
+
+                        task.TaskState = (int)TaskAcrossFloorStatusEnum.SecondCarryFinish;
+                        task.ModifyDate = DateTime.Now;
+                        task.Modifier = "System";
+
+                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                        task_Hty.TaskId = 0;
+
+                        BaseDal.DeleteData(task);
+                        _taskHtyRepository.AddData(task_Hty);
+                    }
+
+                    if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarryFinish)
+                    {
+                        Dt_StationManager stationManager = new Dt_StationManager();
+                        string TaskTemplate = string.Empty;
+                        if (task.Floor == "1F")
+                        {
+                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "2F");
+                            TaskTemplate = "BBB";
+                        }
+                        else
+                        {
+                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F");
+                            TaskTemplate = "CCC";
+                        }
+                       
+                        var taskDto = new RequestAcrossFloorTaskDto()
+                        {
+                            NextAddress = task.NextAddress,
+                            PalletCode = task.PalletCode,
+                            TaskNum = task.TaskNum
+                        };
+
+                        // 鑾峰彇WMSip鍦板潃
+                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.AcrossFloorTask).FirstOrDefault()?.ConfigValue;
+                        if (wmsBasez == null || requestLocation == null)
+                        {
+                            throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                        }
+                        var wmsIpAddrss = wmsBasez + requestLocation;
+
+                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+                        if (abc == null)
+                            return content.Error();
+                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
+
+                        if (!content.Status)
+                        {
+                            return content;
+                        }
+
+                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+                        var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+
+                        Dt_Task taskNew = _mapper.Map<Dt_Task>(taskDTO);
+                        task.Creater = "WMS";
+
+                        taskNew.CurrentAddress = stationManager.stationChildCode;
+
+                        taskNew.NextAddress = task.TargetAddress;
+
+                        taskNew.Floor = stationManager.stationFloor;
+
+                        taskNew.AGVSign = "";
+
+                        task.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarryFinish;
+                        task.ModifyDate = DateTime.Now;
+                        task.Modifier = "System";
+
+                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                        task_Hty.TaskId = 0;
+
+                        BaseDal.DeleteData(task);
+                        _taskHtyRepository.AddData(task_Hty);
+
+                        BaseDal.AddData(taskNew);
+
+                        SendAgvTask(TaskTemplate, taskNew.TaskNum);
+                        return content.OK();
+                    }
+
+                    if (task.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
+                    {
+
+                        CompletedTask(task.TaskNum);
+
                         task.ModifyDate = DateTime.Now;
                         task.Modifier = "System";
 
@@ -479,7 +585,7 @@
                 // 鑾峰彇WMSip鍦板潃
                 var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                 var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
-                var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTask)?.ConfigValue;
+                var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTaskStatus)?.ConfigValue;
                 if (wmsBase == null || updateTask == null)
                 {
                     throw new InvalidOperationException("WMS IP 鏈厤缃�");
@@ -500,6 +606,29 @@
             return content;
         }
 
+        public void CompletedTask(int taskNum)
+        {
+            #region WMS鍚屾浠诲姟瀹屾垚
+
+            var keys = new Dictionary<string, object>()
+            {
+                {"taskNum", taskNum}
+            };
+            // 鑾峰彇WMSip鍦板潃
+            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
+            var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
+            if (wmsBase == null || completeTask == null)
+            {
+                throw new InvalidOperationException("WMS IP 鏈厤缃�");
+            }
+            var wmsIpAddress = wmsBase + completeTask;
+
+            var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
+
+            #endregion WMS鍚屾浠诲姟瀹屾垚
+        }
+
         /// <summary>
         /// 浠诲姟瀹屾垚
         /// </summary>
@@ -513,29 +642,9 @@
                 var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
 
-                #region WMS鍚屾浠诲姟瀹屾垚
-
-                //var keys = new Dictionary<string, object>()
-                //{
-                //    {"taskNum", taskNum}
-                //};
-                //// 鑾峰彇WMSip鍦板潃
-                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
-                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
-                //var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
-                //if (wmsBase == null || completeTask == null)
-                //{
-                //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                //}
-                //var wmsIpAddress = wmsBase + completeTask;
-
-                //var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
-
-                #endregion WMS鍚屾浠诲姟瀹屾垚
 
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                 {
-                    var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                     task.TaskState = nextStatus;
 
@@ -549,7 +658,8 @@
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                 {
-                    //todo 鍚屾鍒癢MS
+                    CompletedTask(task.TaskNum);
+
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                     task.TaskState = nextStatus;
                     task.ModifyDate = DateTime.Now;
@@ -562,8 +672,10 @@
                     _taskHtyRepository.AddData(task_Hty);
                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
                 }
-                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
                 {
+                    CompletedTask(task.TaskNum);
+
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
                     task.TaskState = nextStatus;
                     task.ModifyDate = DateTime.Now;

--
Gitblit v1.9.3