From 850105e8cdf0d048ef843d87520513ac77a64200 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 23 七月 2025 21:21:53 +0800
Subject: [PATCH] 代码提交

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |  496 ++++++++++++++++++++++++++++++++----------------------
 1 files changed, 291 insertions(+), 205 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 2bb462c..fdf9e8d 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"
@@ -16,46 +16,33 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using AutoMapper;
-using Magicodes.ExporterAndImporter.Core;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using NetTaste;
+using Mapster;
 using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Reflection;
-using System.Reflection.Metadata;
-using System.Security.Policy;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
 using WIDESEA_Comm.Http;
 using WIDESEA_Common.Log;
+using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.Utilities;
 using WIDESEAWCS_DTO.Enum;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.BasicInfo;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_TaskInfoRepository;
-using static Microsoft.IO.RecyclableMemoryStreamManager;
 
 namespace WIDESEAWCS_TaskInfoService
 {
@@ -66,6 +53,7 @@
         private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
         private readonly ITask_HtyService _taskHtyService;
         private readonly ITask_HtyRepository _taskHtyRepository;
+        private readonly ISys_ConfigService _sys_ConfigService;
         private readonly IMapper _mapper;
         private readonly IDt_StationManagerRepository _stationManagerRepository;
 
@@ -83,7 +71,7 @@
         public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
         public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList();
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService taskHtyService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository taskHtyRepository) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService taskHtyService, ISys_ConfigService sys_ConfigService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository taskHtyRepository) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -92,6 +80,8 @@
             _mapper = mapper;
             _stationManagerRepository = stationManagerRepository;
             _taskHtyRepository = taskHtyRepository;
+            _mapper = mapper;
+            _sys_ConfigService = sys_ConfigService;
         }
 
         /// <summary>
@@ -108,73 +98,83 @@
                 // 閬嶅巻浼犲叆鐨刉MSTaskDTO鍒楄〃
                 foreach (var item in taskDTOs)
                 {
-                    // 鏌ヨ鏁版嵁搴撲腑鏄惁瀛樺湪鐩稿悓浠诲姟缂栧彿鎴栨墭鐩樼爜鐨勪换鍔★紝濡傛灉瀛樺湪鍒欒烦杩囧綋鍓嶅惊鐜�
-                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskId || x.PalletCode == item.TPbarcode) != null)
+
+                    var task = BaseDal.QueryFirst(x => x.WMSTaskNum == item.TaskId || x.PalletCode == item.TPbarcode);
+                    if (task != null)
                     {
-                        continue;
+                        task.Creater = "WMS";
+                        task.Grade = 1;
+                        task.PalletCode = item.TPbarcode;
                     }
-                    // 灏哤MSTaskDTO瀵硅薄鏄犲皠涓篋t_Task瀵硅薄
-                    Dt_Task task = _mapper.Map<Dt_Task>(item);
-                    // 璁剧疆浠诲姟鐨勫垱寤鸿�呬负"WMS"
-                    task.Creater = "WMS";
-                    task.Grade = 1; // 璁剧疆榛樿浼樺厛绾т负1
+
                     // 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄嚭搴撲换鍔�
                     if (item.TaskType == "2")
                     {
-                        task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
-                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.WhCode, item.EndPoint);
-                        if (routers.Count > 0)
+                        string[] targetCodes = item.BeginPoint.Split("-");
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == GetScCode(Convert.ToInt32(targetCodes[0])) && x.stationType == 2);
+                        Dt_Task taskOut = new Dt_Task()
                         {
-                            // 璁剧疆浠诲姟鐘舵�佷负鍑哄簱鏂板缓
-                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
-                            // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃
-                            task.CurrentAddress = item.BeginPoint;
-                            // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆
-                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
-                        }
-                        else
-                        {
-                            // 鏌ヨ浠庢簮鍦板潃鍒扮洰鏍囧湴鍧�鐨勮矾鐢�
-                            routers = _routerService.QueryNextRoutes(item.BeginPoint, item.EndPoint);
-                            if (routers.Count > 0)
-                            {
-                                // 璁剧疆浠诲姟鐘舵�佷负鍑哄簱瀹屾垚
-                                task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
-                                // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃
-                                task.CurrentAddress = item.BeginPoint;
-                                // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆
-                                task.NextAddress = routers.FirstOrDefault().ChildPosi;
-                            }
-                        }
-                    }// 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄叆搴撲换鍔�
+                            TaskNum = BaseDal.GetTaskNo().Result,
+                            Creater = "WMS",
+                            WMSTaskNum=item.TaskId,
+                            Grade = 1,
+                            PalletCode = item.TPbarcode,
+                            TaskType = (int)TaskOutboundTypeEnum.Outbound,
+                            TaskState = (int)TaskOutStatusEnum.OutNew,
+                            SourceAddress = item.BeginPoint,
+                            CurrentAddress = item.BeginPoint,
+                            Roadway = GetScCode(Convert.ToInt32(targetCodes[0])),
+                            NextAddress = stationManager.stationChildCode,
+                            TargetAddress = item.EndPoint,
+                            RGVName = "RGV01"
+                        };
+                        BaseDal.AddData(taskOut);
+                    }
+                    // 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄叆搴撲换鍔�
                     else if (item.TaskType == "1")
                     {
                         task.TaskType = (int)TaskInboundTypeEnum.Inbound;
-                        // 鏌ヨ浠庢簮鍦板潃鍒扮洰鏍囧湴鍧�鐨勮矾鐢�
-                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.BeginPoint, item.EndPoint);
-                        if (routers.Count > 0)
-                        {
-                            // 璁剧疆浠诲姟鐘舵�佷负鍏ュ簱鏂板缓
-                            task.TaskState = (int)TaskInStatusEnum.InNew;
-                            // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃
-                            task.CurrentAddress = item.BeginPoint;
-                            // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆
-                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
-                        }
+
+                        task.TaskState = (int)TaskInStatusEnum.RGV_IndispatchFinish;
+
+                        task.CurrentAddress = item.BeginPoint;
+
+                        task.WMSTaskNum = item.TaskId;
+
+                        task.TargetAddress = item.EndPoint;
+
+                        string[] targetCodes = item.EndPoint.Split("-");
+
+                        task.Roadway = GetScCode(Convert.ToInt32(targetCodes[0]));
+
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 3);
+
+                        task.NextAddress = stationManager.stationChildCode;
+                        BaseDal.UpdateData(task);
                     }
                     else if (item.TaskType == "3")
                     {
                         task.TaskType = (int)TaskRelocationTypeEnum.Relocation;
-                        // 璁剧疆浠诲姟鐘舵�佷负鏂板缓
+
                         task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
-                        task.Grade = 3; // 璁剧疆榛樿浼樺厛绾т负1
+
+                        task.SourceAddress = item.BeginPoint;
+
+                        task.CurrentAddress = item.BeginPoint;
+
+                        task.NextAddress = item.EndPoint;
+
+                        task.TargetAddress = item.EndPoint;
+
+                        task.Grade = 3;
+
+                        BaseDal.AddData(tasks);
                     }
                     else
                     {
                         return content.Error($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵item.TaskId}銆�,浠诲姟绫诲瀷:銆恵item.TaskType}銆�");
                     }
                 }
-                BaseDal.AddData(tasks);
                 _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskId).ToList(), "鎺ユ敹WMS浠诲姟");
                 content = WebResponseContent.Instance.OK("鎴愬姛");
             }
@@ -189,18 +189,45 @@
             return content;
         }
 
+        public string GetScCode(int number)
+        {
+            if (number >= 1 && number <= 4)
+            {
+                return "SC01";
+            }
+            else if (number >= 5 && number <= 8)
+            {
+                return "SC02";
+            }
+            else if (number >= 9 && number <= 12)
+            {
+                return "SC03";
+            }
+            else if (number >= 13 && number <= 16)
+            {
+                return "SC04";
+            }
+            else
+            {
+                // 澶勭悊涓嶅湪1-16鑼冨洿鍐呯殑鎯呭喌锛堝彲閫夛級
+                throw new ArgumentOutOfRangeException(nameof(number), "杈撳叆鐨勬暟瀛楀繀椤诲湪1-16鑼冨洿鍐�");
+                // 鎴栬�呰繑鍥炰竴涓粯璁ゅ�硷細return "SC00";
+            }
+        }
+
+
         public WebResponseContent GetTask(WMSTaskDTO taskDTO)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
-                Dt_Task_Hty taskHty = _taskHtyRepository.QueryFirst(x => x.TaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
+                Dt_Task task = BaseDal.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
+                Dt_Task_Hty taskHty = _taskHtyRepository.QueryFirst(x => x.WMSTaskNum == taskDTO.TaskId || x.Roadway == taskDTO.WhCode);
                 if (task != null)
                 {
                     return content.OK(data: new WMSTaskDTO()
                     {
-                        TaskId = task.TaskNum,
+                        TaskId = task.WMSTaskNum,
                         TPbarcode = task.PalletCode,
                         WhCode = task.Roadway,
                         BeginPoint = task.SourceAddress,
@@ -212,7 +239,7 @@
                 {
                     return content.OK(data: new WMSTaskDTO()
                     {
-                        TaskId = taskHty.TaskNum,
+                        TaskId = taskHty.WMSTaskNum,
                         TPbarcode = taskHty.PalletCode,
                         WhCode = taskHty.Roadway,
                         BeginPoint = taskHty.SourceAddress,
@@ -290,10 +317,32 @@
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns></returns>
-        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
+        public Dt_Task QueryConveyorLineTask(string currentAddress)
         {
-            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
+            Dt_Task task= BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.RGV_InExecutingFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+            if (task == null)
+            {
+                task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+            }
+            return task;
         }
+
+        /// <summary>
+        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns></returns>
+        public Dt_Task QueryConveyorLineFinishTask(string currentAddress)
+        {
+            Dt_Task task = BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InExecuting && x.NextAddress == currentAddress, TaskOrderBy);
+            if (task == null)
+            {
+                task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && x.NextAddress == currentAddress, TaskOrderBy);
+            }
+            return task;
+        }
+
 
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨRGV鏈墽琛岀殑浠诲姟
@@ -301,9 +350,9 @@
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns></returns>
-        public Dt_Task QueryRGVTask(string deviceNo, string currentAddress)
+        public Dt_Task QueryRGVExecutingTask(string deviceNo)
         {
-            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
+            return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish);
         }
 
         /// <summary>
@@ -331,44 +380,6 @@
                 return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
-        /// <summary>
-        /// 鏍规嵁浠诲姟鍙枫�佷笅涓�鍦板潃鏌ヨ杈撻�佺嚎鎵ц涓殑浠诲姟
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="nextAddress">涓嬩竴鍦板潃</param>
-        /// <returns></returns>
-        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
-        {
-            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
-        }
-
-        /// <summary>
-        /// 鏍规嵁浠诲姟鍙枫�佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎瀹屾垚鐨勪换鍔�
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="currentAddress">褰撳墠鍦板潃</param>
-        /// <returns></returns>
-        public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
-        {
-            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
-        }
-
-        /// <summary>
-        /// 鏍规嵁璁惧缂栧彿銆佷换鍔$被鍨嬪垎缁�(鍙��)鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
-        /// </summary>
-        /// <param name="deviceNo">璁惧缂栧彿</param>
-        /// <param name="taskTypeGroup">浠诲姟绫诲瀷鍒嗙粍(鍙��)</param>
-        /// <returns></returns>
-        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? 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)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
-            if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
-            return null;
-        }
 
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
@@ -381,7 +392,18 @@
             if (string.IsNullOrEmpty(currentAddress))
                 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);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); return BaseDal.QueryFirst(x => x.TaskState == (int)AGVTaskStatusEnum.AGVNew && x.Roadway == deviceNo, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy);
+        }
+
+        /// <summary>
+        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+        public Dt_Task QueryRGVTask(string deviceNo)
+        {
+            return BaseDal.QueryFirst(x => x.RGVName == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)), TaskOrderBy);
         }
 
         /// <summary>
@@ -396,6 +418,17 @@
                 return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
             else
                 return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+        }
+
+        /// <summary>
+        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+        public Dt_Task QueryRGVInTask(string deviceNo)
+        {
+            return BaseDal.QueryFirst(x => x.RGVName == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
         }
 
         /// <summary>
@@ -417,22 +450,12 @@
         /// </summary>
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
-        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄闆嗗悎锛屽彲鑳戒负null</returns>
-        public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
+        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+        public Dt_Task QueryRGVOutTask(string deviceNo)
         {
-            return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
+            return BaseDal.QueryFirst(x => x.RGVName == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish, TaskOrderBy);
         }
 
-        /// <summary>
-        /// 鏍规嵁鍑哄簱璐т綅鏌ヨ鏄惁鏈夊綋鍓嶆祬璐т綅浠诲姟
-        /// </summary>
-        /// <param name="deviceNo">璁惧缂栧彿</param>
-        /// <param name="currentAddress">褰撳墠鍦板潃</param>
-        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄闆嗗悎锛屽彲鑳戒负null</returns>
-        public List<Dt_Task> QueryStationIsOccupiedOutTasks(string deviceNo, string SourceAddress)
-        {
-            return BaseDal.QueryData(x => x.Roadway == deviceNo && SourceAddress.Contains(x.SourceAddress), TaskOrderBy);
-        }
 
         /// <summary>
         /// 鏇存柊浠诲姟寮傚父淇℃伅鏄剧ず
@@ -467,20 +490,6 @@
                 content = WebResponseContent.Instance.Error(ex.Message);
             }
             return content;
-        }
-
-        /// <summary>
-        /// 鏇存柊浠诲姟鐘舵�佷俊鎭紝骞跺悓姝ヨ嚦WMS
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="status">浠诲姟鐘舵��</param>
-        public void UpdateTaskStatus(int taskNum, int status)
-        {
-            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
-            if (task == null) return;
-            task.TaskState = status;
-            task.ModifyDate = DateTime.Now;
-            BaseDal.UpdateData(task);
         }
 
         /// <summary>
@@ -520,7 +529,7 @@
 
                     task.TaskState = nextStatus;
 
-                    if (task.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)
+                    if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutFinish)
                     {
                         task.ModifyDate = DateTime.Now;
                         task.Modifier = "System";
@@ -542,23 +551,16 @@
                 {
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                     task.TaskState = nextStatus;
-
-                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
+                    if (task.TaskState == (int)TaskInStatusEnum.Line_InExecuting)
                     {
-                        #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
-
-                        // 妫�鏌ョ姸鎬佸苟杩斿洖
-                        if (!content.Status)
-                            return content;
-
-                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-                        var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
-
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationChildCode== task.NextAddress);
                         task.CurrentAddress = task.NextAddress;
-                        task.NextAddress = taskResult.EndPoint;
-                        task.TargetAddress = task.NextAddress;
-
-                        #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                        task.NextAddress = stationManager.stationNextChildCode;
+                    }
+                    else if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
+                    {
+                        task.CurrentAddress = task.NextAddress;
+                        task.NextAddress = task.TargetAddress;
                     }
                     else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                     {
@@ -594,23 +596,6 @@
 
                 _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskState}銆�" : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�");
 
-                #region 鏇存柊浠诲姟鐘舵��
-
-                // 鑾峰彇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;
-                //if (wmsBase == null || updateTask == null)
-                //{
-                //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                //}
-                //var wmsIpAddress = wmsBase + updateTask;
-
-                //var result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result;
-                //content = JsonConvert.DeserializeObject<WebResponseContent>(result);
-
-                #endregion 鏇存柊浠诲姟鐘舵��
-
                 content = WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
@@ -620,42 +605,87 @@
             return content;
         }
 
-        /// <summary>
-        /// 鏍规嵁浠诲姟鍙枫�佸綋鍓嶅湴鍧�鏇存柊浠诲姟浣嶇疆淇℃伅
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="currentAddress">褰撳墠鍦板潃</param>
-        /// <returns></returns>
-        public Dt_Task? UpdatePosition(int taskNum, string currentAddress)
+
+        public WebResponseContent RGVTaskCompleted(int taskNum, string Barcode = "")
         {
+            WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
-                if (task == null) throw new Exception($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
 
-                string oldCurrentPos = task.CurrentAddress;
-                string oldNextPos = task.NextAddress;
+                if (task.TaskState == (int)TaskInStatusEnum.RGV_Indispatch)
+                {
+                    //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                    //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
+                    //var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue;
+                    //var keys = new Dictionary<string, object>()
+                    //{
+                    //    {"TPbarcode", Barcode},
+                    //    {"WhCode", "1001"},
+                    //    {"BeginPoint", task.SourceAddress}
+                    //};
+                    //if (wmsBase == null || requestTask == null)
+                    //{
+                    //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                    //}
+                    //var wmsIpAddress = wmsBase + requestTask;
+                    //var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, keys.ToString()).Result;
 
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
-                if (!routers.Any()) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+                    //if (result != null)
+                    //{
+                        task.TaskState = (int)TaskInStatusEnum.RGV_InAwaitWMS;
+                        task.PalletCode = Barcode;
+                        task.ModifyDate = DateTime.Now;
+                        BaseDal.UpdateData(task);
+                    //}
 
-                task.CurrentAddress = task.NextAddress;
-                task.NextAddress = routers.FirstOrDefault().ChildPosi;
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV璋冨害瀹屾垚绛夊緟WMS浠诲姟");
+                }
+                else if (task.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    task.TaskState = (int)TaskInStatusEnum.RGV_InExecutingFinish;
+                    task.NextAddress = stationManager.stationNextChildCode;
+                    task.CurrentAddress = task.NextAddress;
+                    task.ModifyDate = DateTime.Now;
+                    BaseDal.UpdateData(task);
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV鍏ュ簱瀹屾垚");
+                }
+                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch)
+                {
+                    task.TaskState = (int)TaskOutStatusEnum.RGV_OutdispatchFinish;
+                    task.ModifyDate = DateTime.Now;
+                    BaseDal.UpdateData(task);
 
-                task.ModifyDate = DateTime.Now;
-                task.Modifier = "System";
-                BaseDal.UpdateData(task);
+                }
+                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting)
+                {
+                    task.TaskState = (int)TaskOutStatusEnum.RGV_OutFinish;
+                    task.ModifyDate = DateTime.Now;
+                    task.Modifier = "System";
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绯荤粺鑷姩娴佺▼锛屾洿鏂板綋鍓嶄綅缃�恵oldCurrentPos} ----> {task.CurrentAddress}銆戝拰涓嬩竴浣嶇疆銆恵oldNextPos} ----> {task.NextAddress}銆�");
-                return task;
+                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                    task_Hty.TaskId = 0;
+
+                    BaseDal.DeleteData(task);
+                    _taskHtyRepository.AddData(task_Hty);
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"RGV鍑哄簱瀹屾垚");
+                }
+                else
+                {
+                    throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
+                }
+                content = WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
             {
+                content = WebResponseContent.Instance.Error($"浠诲姟瀹屾垚寮傚父,浠诲姟鍙�:銆恵taskNum}銆�");
             }
-            return null;
+            return content;
         }
 
-        
+
         public WebResponseContent StackCraneTaskCompleted(int taskNum)
         {
             WebResponseContent content = new WebResponseContent();
@@ -664,18 +694,75 @@
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
 
-                if ( task.TaskState == (int)AGVTaskStatusEnum.AGV_Executing)
+                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
+                //var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
+                //var keys = new Dictionary<string, object>()
+                //    {
+                //        {"TaskId", task.WMSTaskNum},
+                //        {"TPbarcode", task.PalletCode},
+                //        {"WhCode", "1001"},
+                //        {"BeginPoint", task.SourceAddress},
+                //        {"EndPoint", task.TargetAddress},
+                //        {"Results", 1},
+                //    };
+                //if (wmsBase == null || requestTask == null)
+                //{
+                //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                //}
+                //var wmsIpAddress = wmsBase + requestTask;
+                //var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, keys.ToString()).Result;
+
+                //if (result != null)
+                //{
+                //    task.ExceptionMessage += "   " + content.Message;
+                //}
+
+                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                 {
-                    task.TaskState = (int)AGVTaskStatusEnum.AGVFinish;
+                    task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
+
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.Roadway == task.Roadway && x.stationType == 2);
+
+                    task.CurrentAddress = task.NextAddress;
+
+                    task.NextAddress = stationManager.stationNextChildCode;
+
+                    BaseDal.UpdateData(task);
+
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
+                {
+                    //todo 鍚屾鍒癢MS
+                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
+                    task.TaskState = nextStatus;
                     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);
-                    //_taskHtyService.AddTaskHty(task, (int)OperateTypeEnum.鑷姩瀹屾垚);
+                    _taskHtyRepository.AddData(task_Hty);
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+                {
+                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
+                    task.TaskState = nextStatus;
+                    task.ModifyDate = DateTime.Now;
+                    task.Modifier = "System";
 
-                    Dt_Task_Hty taskHty = _mapper.Map<Dt_Task_Hty>(task);
-                    taskHty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
-                    _taskHtyRepository.AddData(taskHty);
+                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                    task_Hty.TaskId = 0;
 
-                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV鎼繍瀹屾垚瀹屾垚");
+                    BaseDal.DeleteData(task);
+                    _taskHtyRepository.AddData(task_Hty);
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈虹Щ搴撳畬鎴�");
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
+                {
                 }
                 else
                 {
@@ -695,7 +782,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                List<Dt_Task> tasks = BaseDal.QueryData(x => (x.TaskState == (int)TaskInStatusEnum.InNew || x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew) && x.TaskNum == taskDTO.TaskId && x.PalletCode == taskDTO.TPbarcode && x.Roadway == taskDTO.WhCode);
+                List<Dt_Task> tasks = BaseDal.QueryData(x => (x.TaskState == (int)TaskInStatusEnum.InNew || x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew) && x.WMSTaskNum == taskDTO.TaskId && x.PalletCode == taskDTO.TPbarcode && x.Roadway == taskDTO.WhCode);
                 if (tasks.Count == 0) return content.Error("娌℃湁闇�瑕佸彇娑堢殑浠诲姟");
                 foreach (Dt_Task task in tasks)
                 {
@@ -705,7 +792,6 @@
                     BaseDal.DeleteData(task);
 
                     Dt_Task_Hty taskHty = _mapper.Map<Dt_Task_Hty>(task);
-                    //_taskHtyService.AddTaskHty(task, (int)OperateTypeEnum.WMS鍙栨秷);
                     taskHty.OperateType = (int)OperateTypeEnum.WMS鍙栨秷;
                     _taskHtyRepository.AddData(taskHty);
                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "浜哄伐鍙栨秷浠诲姟");

--
Gitblit v1.9.3