From 01ba2e2affa33320ef8aca6e033248388bb8f60e Mon Sep 17 00:00:00 2001
From: 肖洋 <cathay_xy@163.com>
Date: 星期二, 10 十二月 2024 11:04:41 +0800
Subject: [PATCH] 高温出库修改

---
 Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs |  714 ++++++++++++-----------------------------------------------
 1 files changed, 148 insertions(+), 566 deletions(-)

diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
index 46bad34..368e323 100644
--- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
@@ -27,10 +27,16 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Reflection;
 using System.Threading.Tasks;
+using WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.HttpContextUser;
 using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -38,7 +44,9 @@
 using WIDESEAWCS_QuartzJob.DeviceBase;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_SignalR;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -50,30 +58,35 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
         private readonly IMapper _mapper;
+        private readonly IDt_StationManagerService _stationManagerService;
+        private readonly ISys_ConfigService _sys_ConfigService;
+        private readonly ICacheService _cacheService;
+        private readonly INoticeService _noticeService;
 
-        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository)
+        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IDt_StationManagerService stationManagerService, ISys_ConfigService sys_ConfigService, ICacheService cacheService, INoticeService noticeService)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _routerService = routerService;
             _mapper = mapper;
             _taskRepository = taskRepository;
+            _stationManagerService = stationManagerService;
+            _sys_ConfigService = sys_ConfigService;
+            _cacheService = cacheService;
+            _noticeService = noticeService;
         }
 
-        public Task Execute(IJobExecutionContext context)
+        public async Task Execute(IJobExecutionContext context)
         {
             try
             {
                 CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams");
                 if (conveyorLine != null)
                 {
-                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
-                    //List<Task> tasks = new List<Task>();
-                    foreach (string childDeviceCode in childDeviceCodes)
+                    List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
+                    foreach (var station in stationManagers)
                     {
-                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
-
-                        if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
+                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationChildCode);
 
                         DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                         if (deviceProtocolDetails != null)
@@ -81,23 +94,65 @@
                             MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                             if (method != null)
                             {
-                                method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
+                                method.Invoke(this, new object[] { conveyorLine, command, station });
                             }
                         }
+                        if (station.stationType == 6 && station.stationArea == "3")
+                        {
+                            await GetEmptyTrayAsync(station);
+                        }
+
+                        #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+                        var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
+                        if (tokenInfos == null || !tokenInfos.Any())
+                        {
+                            //throw new Exception(conveyorLine.DeviceName + "缂撳瓨涓湭鎵惧埌Token缂撳瓨");
+                            continue;
+                        }
+                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+
+                        object obj = new
+                        {
+                            commandAfter = command,
+                        };
+                        _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, data = obj });
+
+                        #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
                     }
-                    //Task.WaitAll(tasks.ToArray());
+
+                    #region 璺敱鏂瑰紡
+                    //List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
+                    //foreach (string childDeviceCode in childDeviceCodes)
+                    //{
+                    //    ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
+
+                    //    if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
+
+                    //    DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
+                    //    if (deviceProtocolDetails != null)
+                    //    {
+                    //        MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
+                    //        if (method != null)
+                    //        {
+                    //            method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
+                    //        }
+                    //    }
+                    //} 
+                    #endregion
                 }
             }
             catch (Exception ex)
             {
-                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
+                Console.Out.WriteLine(nameof(CommonConveyorLine_AfterJob) + ":" + ex.ToString());
             }
             finally
             {
                 //WriteDebug("CommonConveyorLineJob", "test");
                 //Console.Out.WriteLine(DateTime.Now);
             }
-            return Task.CompletedTask;
+            return;
         }
 
         /// <summary>
@@ -106,595 +161,122 @@
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
+        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo)
         {
-            var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
+            ConsoleHelper.WriteSuccessLine($"銆恵conveyorLine.DeviceName}銆�,鎵樼洏鍙凤細銆恵command.ConveyorLineBarcode}銆�,绔欏彴锛氥�恵stationInfo.remark}銆戣姹備换鍔�");
+            var taskNew = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
             if (taskNew == null)
             {
-                string barcode = command.ConveyorLineBarcode.TrimEnd();
-                if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status)
+                if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status)
                 {
-                    Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
+                    Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
                     if (task != null)
                     {
-                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
+                        //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                         //taskCommand.InteractiveSignal = command.InteractiveSignal;
-                        taskCommand.ResponState = 1;
-                        taskCommand.ConveyorLineTaskNum = task.TaskNum;
-                        taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
-                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
+                        //taskCommand.ResponState = 1;
+                        //taskCommand.ConveyorLineTaskNum = task.TaskNum;
+                        //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
+                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, 1, task.NextAddress);
                         //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-                        _taskService.UpdateTaskStatusToNext(task);
                     }
                 }
             }
-
-            var inTask = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
-            if (inTask != null)
-            {
-                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(inTask);
-                //taskCommand.InteractiveSignal = command.InteractiveSignal;
-                taskCommand.ResponState = 1;
-                conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-                _taskService.UpdateTaskStatusToNext(inTask);
-            }
         }
 
         /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍏ュ簱涓嬩竴鍦板潃
+        /// 杈撻�佺嚎璇锋眰绌烘
         /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
+        /// <param name="conveyorLine"></param>
+        /// <param name="command"></param>
+        /// <param name="stationInfo"></param>
+        public void RequestEmptyOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo)
         {
-            //if(command)
-            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
-            if (task != null)
+            if (stationInfo.stationType != 7) return;
+            var taskNew = _taskRepository.QueryFirst(x => x.Roadway == stationInfo.Roadway && x.TaskType == (int)TaskOutboundTypeEnum.OutTray);
+            if (taskNew == null)   //涓嶅瓨鍦ㄧ┖妗嗗嚭搴撲换鍔� 鍒欒姹俉MS鍑虹┖搴�
             {
-                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
-                if (newTask != null)
+                ConsoleHelper.WriteWarningLine("璇锋眰绌烘墭鐩�");
+                if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status)
                 {
-                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
-                    //taskCommand.InteractiveSignal = command.InteractiveSignal;
-                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
+                    Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
+                    if (task != null)
+                    {
+                        //ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
+                        //taskCommand.InteractiveSignal = command.InteractiveSignal;
+                        //taskCommand.ResponState = 1;
+                        //taskCommand.ConveyorLineTaskNum = task.TaskNum;
+                        //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
+                        //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, 1, task.NextAddress);
+                        //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
+                    }
                 }
             }
         }
 
         /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
+        /// 杈撻�佺嚎璇锋眰鍏ュ簱
         /// </summary>
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-        public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
+        //public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
+        //{
+        //    var stationInfo = _stationManagerService.GetStationInfoByChildCode(childDeviceCode);
+        //    if (stationInfo != null)
+        //    {
+        //        //_taskService.r
+        //    }
+        //    var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
+        //    if (taskNew == null)
+        //    {
+        //        string barcode = command.ConveyorLineBarcode.TrimEnd();
+        //        if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status)
+        //        {
+        //            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
+        //            if (task != null)
+        //            {
+        //                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
+        //                //taskCommand.InteractiveSignal = command.InteractiveSignal;
+        //                taskCommand.ResponState = 1;
+        //                taskCommand.ConveyorLineTaskNum = task.TaskNum;
+        //                taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
+        //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
+
+        //                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
+
+        //                _taskService.UpdateTaskStatusToNext(task);
+        //            }
+        //        }
+        //    }
+        //}
+
+        private async Task GetEmptyTrayAsync(Dt_StationManager stationManager)
         {
-            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
-            if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
+            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.GetFROutTrayToCW)?.ConfigValue;
+            if (wmsBase == null || requestTask == null)
             {
-                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-                //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
-                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
-                Console.Out.WriteLine(content.Serialize());
+                throw new InvalidOperationException("WMS IP 鏈厤缃�");
             }
-        }
+            var wmsIpAddrss = wmsBase + requestTask;
 
-        /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍑轰俊鎭�
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-        {
-            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
-            if (task != null)
+            var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = "", EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode }.ToJsonString());
+            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+            if(!content.Status)
             {
-                // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
-                //taskCommand.InteractiveSignal = command.InteractiveSignal;
-                // conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-                _taskService.UpdateTaskStatusToNext(task);
+                //ConsoleHelper.WriteErrorLine($"鍒嗗鍛煎彨绌烘墭鐩樺け璐content.Message}");
+                return;
             }
-        }
+            WMSTaskDTO wMSTaskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
 
-        /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-        {
-            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
-            if (task != null)
-            {
-                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
-                if (newTask != null)
-                {
-                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
-                    //taskCommand.InteractiveSignal = command.InteractiveSignal;
-                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
-                }
-            }
-        }
-
-        /// <summary>
-        /// 杈撻�佺嚎鍑哄簱瀹屾垚
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-        {
-            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
-            if (task != null)
-            {
-                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
-                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
-                Console.Out.WriteLine(content.Serialize());
-            }
-        }
-
-        /// <summary>
-        /// 杈撻�佺嚎浜や簰瀹屾垚
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-        /// <param name="value">鍊�</param>
-        public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value)
-        {
-            DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-            string[] x = devicePro.DeviceProAddress.Split('.');
-            x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
-            string DeviceProAddress = string.Join(".", x);
-            conveyorLine.Communicator.Write(DeviceProAddress, value);
+            ConsoleHelper.WriteSuccessLine(content.Data.ToString());
+            List<WMSTaskDTO> wMSTaskDTOs = new List<WMSTaskDTO>() { wMSTaskDTO };
+            _taskService.ReceiveWMSTask(wMSTaskDTOs);
         }
     }
 }
-#endregion
-
-
-
-#region MyRegion
-//using AutoMapper;
-//using HslCommunication;
-//using Newtonsoft.Json;
-//using Quartz;
-//using SqlSugar;
-//using System.Reflection;
-//using WIDESEAWCS_Common.TaskEnum;
-//using WIDESEAWCS_Core;
-//using WIDESEAWCS_Core.Helper;
-//using WIDESEAWCS_DTO.TaskInfo;
-//using WIDESEAWCS_ITaskInfoRepository;
-//using WIDESEAWCS_ITaskInfoService;
-//using WIDESEAWCS_Model.Models;
-//using WIDESEAWCS_QuartzJob;
-//using WIDESEAWCS_QuartzJob.DeviceBase;
-//using WIDESEAWCS_QuartzJob.DTO;
-//using WIDESEAWCS_QuartzJob.Service;
-//using WIDESEAWCS_Tasks.ConveyorLineJob;
-
-//namespace WIDESEAWCS_Tasks
-//{
-//    [DisallowConcurrentExecution]
-//    public class CommonConveyorLine_AfterJob : JobBase, IJob
-//    {
-//        private readonly List<string> _deviceCodes1 = new List<string>() { "1063", "1061", "1060" };
-//        private readonly List<string> _deviceCodes2 = new List<string>() { "1067", "1069", "1068" };
-//        private readonly string[] HCTrayCode = { "1012", "1013" };
-//        private readonly ITaskService _taskService;
-//        private readonly ITaskRepository _taskRepository;
-//        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
-//        private readonly IRouterService _routerService;
-//        private readonly IMapper _mapper;
-
-//        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository)
-//        {
-//            _taskService = taskService;
-//            _taskExecuteDetailService = taskExecuteDetailService;
-//            _routerService = routerService;
-//            _mapper = mapper;
-//            _taskRepository = taskRepository;
-//        }
-
-//        public Task Execute(IJobExecutionContext context)
-//        {
-//            try
-//            {
-//                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams");
-//                if (conveyorLine != null)
-//                {
-//                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
-//                    List<Task> tasks = new List<Task>();
-//                    foreach (string childDeviceCode in childDeviceCodes)
-//                    {
-//                        //Task task = Task.Run(() =>
-//                        //{
-//                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
-//                        if (command != null)
-//                        {
-//                            var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray();
-
-//                            List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal)).ToList();
-
-//                            if (deviceProtocolDetails != null)
-//                            {
-//                                foreach (var item in deviceProtocolDetails)
-//                                {
-//                                    var outDeviceCodes = _routerService.QueryOutDeviceCodes(conveyorLine.DeviceCode);
-//                                    if (structs[item.ProtocalDetailValue.ObjToInt()] == true)
-//                                    {
-//                                        MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
-//                                        if (method != null)
-//                                        {
-//                                            method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() });
-//                                        }
-//                                    }
-//                                    else
-//                                    {
-//                                        //DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-//                                        //string[] x = devicePro.DeviceProAddress.Split('.');
-//                                        //x[x.Length - 1] = (item.ProtocalDetailValue.ObjToInt() + 1).ToString();
-//                                        //string DeviceProAddress = string.Join(".", x);
-//                                        //var writeRead = conveyorLine.Communicator.Read<bool>(DeviceProAddress);
-//                                        //if (writeRead)
-//                                        //{
-//                                        //    ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false);
-//                                        //}
-//                                    }
-//                                }
-//                            }
-//                        }
-//                        //});
-//                        //tasks.Add(task);
-//                    }
-//                    Task.WaitAll(tasks.ToArray());
-//                }
-//            }
-//            catch (Exception ex)
-//            {
-//                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
-//            }
-//            finally
-//            {
-//                //WriteDebug("CommonConveyorLineJob", "test");
-//                //Console.Out.WriteLine(DateTime.Now);
-//            }
-//            return Task.CompletedTask;
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎璇锋眰鍏ュ簱
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-//        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue)
-//        {
-//            var taskNew = _taskService.QueryCraneConveyorLineTask(command.Barcode.ObjToInt(), childDeviceCode);
-//            var Taskout = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
-//            if (Taskout != null)
-//            {
-//                // 绌烘墭鐩樹换鍔�
-//                if (Taskout.TaskType == (int)TaskOutboundTypeEnum.OutTray)
-//                {
-//                    if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
-//                    {
-//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
-//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                        if (command.Barcode == "")
-//                        {
-//                            taskCommand.TargetAddress = 1092;
-//                        }
-//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-//                        _taskService.UpdateTaskStatusToNext(Taskout);
-//                    }
-//                    else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
-//                    {
-//                        if (command.Barcode == "")
-//                        {
-//                            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
-//                            taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                            taskCommand.TargetAddress = 1092;
-//                            conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-//                            _taskService.UpdateTaskStatusToNext(Taskout);
-//                        }
-//                    }
-//                }
-//                else if (Taskout.TaskType == (int)TaskOutboundTypeEnum.Outbound)
-//                {
-//                    if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
-//                    {
-//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
-//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                        if (command.Barcode == "")
-//                        {
-//                            //todo 娌℃湁鏄庣‘寮傚父鍙o紝閫佸埌鐩爣宸烽亾鐨凬G鍙�
-//                            //taskCommand.TargetAddress = 1092;
-//                        }
-//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-//                        _taskService.UpdateTaskStatusToNext(Taskout);
-//                    }
-//                    else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
-//                    {
-//                        if (command.Barcode == "")
-//                        {
-//                            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout);
-//                            taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                            // todo  閫佸埌鐩爣宸烽亾鐨凬G鍙�
-//                            taskCommand.TargetAddress = 1092;
-//                            conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-//                            _taskService.UpdateTaskStatusToNext(Taskout);
-//                        }
-//                        else
-//                        {
-//                            // todo 璋冪敤WMS浠诲姟瀹屾垚鎺ュ彛
-//                            var x = new { taskNum = Taskout.TaskNum };
-//                            var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result;
-//                            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
-//                            if (content.Status)
-//                            {
-//                                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-//                                _taskService.UpdateTaskStatusToNext(Taskout);
-//                            }
-//                        }
-//                    }
-//                }
-//            }
-//            if (taskNew == null)
-//            {
-//                if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status)
-//                {
-//                    Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
-//                    if (task != null)
-//                    {
-//                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
-//                        taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-//                        _taskService.UpdateTaskStatusToNext(task);
-//                    }
-//                }
-//            }
-//        }
-
-//        //
-//        /// <summary>
-//        /// 绌烘墭鐩樺洖娴�
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        /// <param name="index">璇诲彇鐨勭涓�涓綅缃�</param>
-//        public void EmptyTrayReturn(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index)
-//        {
-//            var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.OutTray);
-//            if (tasks.Count <= index)
-//            {
-//                WMSTaskDTO taskDTO = new WMSTaskDTO()
-//                {
-//                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-//                    Grade = 1,
-//                    PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
-//                    RoadWay = "CHSC01",
-//                    SourceAddress = "001-001-001",
-//                    TargetAddress = childDeviceCode,
-//                    TaskState = (int)TaskOutStatusEnum.OutNew,
-//                    Id = 0,
-//                    TaskType = (int)TaskOutboundTypeEnum.OutTray
-//                };
-
-//                #region 鐪熷疄鏁版嵁
-
-//                // TODO: 璋冪敤鎺ュ彛鑾峰彇涓嬩竴涓湴鍧�
-//                //RequestTaskDto request = new RequestTaskDto()
-//                //{
-//                //    Position = sourceAddress,
-//                //    PalletCode = palletCode,
-//                //};
-
-//                //// 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
-//                //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
-
-//                //// 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
-//                //WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
-
-//                //// 妫�鏌ョ姸鎬佸苟杩斿洖
-//                ////if (!content.Status)
-//                ////    return content;
-
-//                //// 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-//                //WMSTaskDTO task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
-
-//                #endregion
-
-//                var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-//                if (content.Status)
-//                {
-//                    Console.WriteLine("绌烘墭鐩樺懠鍙垚鍔�");
-//                }
-//            }
-//        }
-
-//        ///// <summary>
-//        ///// 闄堝寲鍑哄簱
-//        ///// </summary>
-//        ///// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        ///// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        ///// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        ///// <param name="index">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-//        //public void ChuanhuaOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index)
-//        //{
-//        //    var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.Outbound);
-//        //    if (tasks.Count <= index)
-//        //    {
-//        //        WMSTaskDTO taskDTO = new WMSTaskDTO()
-//        //        {
-//        //            TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-//        //            Grade = 1,
-//        //            PalletCode = DateTime.Now.ToString("MMddHHmmss"),
-//        //            RoadWay = "CHSC01",
-//        //            SourceAddress = "001-001-001",
-//        //            TargetAddress = childDeviceCode,
-//        //            TaskState = (int)TaskOutStatusEnum.OutNew,
-//        //            Id = 0,
-//        //            TaskType = (int)TaskOutboundTypeEnum.Outbound,
-//        //        };
-
-//        //        var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-//        //        if (content.Status)
-//        //        {
-//        //            Console.WriteLine("鍑哄簱鍛煎彨鎴愬姛");
-//        //        }
-//        //    }
-//        //    else
-//        //    {
-//        //        Dt_Task task = tasks[index];
-//        //        if (task != null)
-//        //        {
-//        //            ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
-//        //            taskCommand.InteractiveSignal = command.InteractiveSignal;
-//        //            conveyorLine.SendCommand(taskCommand, childDeviceCode);
-//        //        }
-//        //    }
-//        //}
-
-//        /// <summary>
-//        /// 杈撻�佺嚎璇锋眰鍏ュ簱涓嬩竴鍦板潃
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-//        {
-//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
-//            if (task != null)
-//            {
-//                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
-//                if (newTask != null)
-//                {
-//                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
-//                    taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
-//                }
-//            }
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-//        public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue)
-//        {
-//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
-//            if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
-//            {
-//                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-//                //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
-//                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
-//                Console.Out.WriteLine(content.Serialize());
-//            }
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎璇锋眰鍑轰俊鎭�
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-//        {
-//            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
-//            if (task != null)
-//            {
-//                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
-//                taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-//                _taskService.UpdateTaskStatusToNext(task);
-//            }
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-//        {
-//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
-//            if (task != null)
-//            {
-//                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
-//                if (newTask != null)
-//                {
-//                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
-//                    taskCommand.InteractiveSignal = command.InteractiveSignal;
-//                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
-//                }
-//            }
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎鍑哄簱瀹屾垚
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-//        {
-//            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
-//            if (task != null)
-//            {
-//                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
-//                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
-//                Console.Out.WriteLine(content.Serialize());
-//            }
-//        }
-
-//        /// <summary>
-//        /// 杈撻�佺嚎浜や簰瀹屾垚
-//        /// </summary>
-//        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-//        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-//        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-//        /// <param name="value">鍊�</param>
-//        public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value)
-//        {
-//            DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-//            string[] x = devicePro.DeviceProAddress.Split('.');
-//            x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
-//            string DeviceProAddress = string.Join(".", x);
-//            conveyorLine.Communicator.Write(DeviceProAddress, value);
-//        }
-//    }
-//}
 #endregion
\ No newline at end of file

--
Gitblit v1.9.3