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_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs |  243 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 232 insertions(+), 11 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index d2ce91c..8aacd38 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -17,12 +17,19 @@
 
 using AutoMapper;
 using HslCommunication;
+using Newtonsoft.Json;
 using Quartz;
 using System.Reflection;
+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.Enum;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.BasicInfo;
@@ -33,24 +40,30 @@
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_SignalR;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
 
 namespace WIDESEAWCS_Tasks
 {
     [DisallowConcurrentExecution]
-    public class CommonConveyorLineJob : JobBase, IJob
+    public partial class CommonConveyorLineJob : JobBase, IJob
     {
         private readonly ITaskService _taskService;
+        private readonly IRGVTaskService _rgvtaskService;
+        private readonly IRGVTask_HtyService _rgvtask_HtyService;
         private readonly ITaskRepository _taskRepository;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
+        private readonly ISys_ConfigService _sys_ConfigService;
         private readonly IDt_StationManagerService _stationManagerService;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
         private readonly IMapper _mapper;
         private readonly ICacheService _cacheService;
         private readonly INoticeService _noticeService;
         private static List<string>? userTokenIds;
         private static List<int>? userIds;
 
-        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository)
+        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IRGVTaskService rgvtaskService, IRGVTask_HtyService rgvtask_HtyService,
+        IDt_StationManagerRepository stationManagerRepository)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -60,6 +73,9 @@
             _cacheService = cacheService;
             _noticeService = noticeService;
             _taskRepository = taskRepository;
+            _rgvtaskService = rgvtaskService;
+            _rgvtask_HtyService = rgvtask_HtyService;
+            _stationManagerRepository = stationManagerRepository;
         }
 
         public async Task Execute(IJobExecutionContext context)
@@ -90,6 +106,7 @@
             try
             {
                 ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode);
+                //var Barcode = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.ConveyorLineBarcode, station.stationChildCode);
                 if (command != null)
                 {
                     #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
@@ -105,7 +122,7 @@
                     #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
 
                     // 灏嗕氦浜掍俊鍙疯浆鎹负甯冨皵鏁扮粍
-                    var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray();
+                    var structs = BitConverter.GetBytes(command.InteractiveSignal).ToArray().ToBoolArray();
                     // 鑾峰彇璁惧鍗忚璇︽儏
                     List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList();
 
@@ -116,12 +133,10 @@
                             int itemValue = Convert.ToInt32(item.ProtocalDetailValue);
                             if (structs[itemValue] == true)
                             {
-                                // 鑾峰彇澶勭悊鏂规硶
-
                                 MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
                                 if (method != null)
                                 {
-                                    method.Invoke(this, new object[] { conveyorLine, station });
+                                    method.Invoke(this, new object[] { command, conveyorLine, station });
                                 }
                             }
                         }
@@ -140,7 +155,7 @@
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>Request outbound
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public async Task RequestInbound(CommonConveyorLine conveyorLine, Dt_StationManager station)
+        public async Task RequestTask(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station)
         {
             try
             {
@@ -148,6 +163,15 @@
                 var log = $"銆恵conveyorLine._deviceName}銆戠珯鍙般�恵station.stationChildCode}銆戣姹傚彇璐�";
                 await LogAndWarn(conveyorLine.DeviceName, log);
 
+                var task = _taskService.QueryConveyorLineTask(station.stationChildCode);
+                //if (task != null)
+                //{
+                //    RequestInOrOutbound(command, conveyorLine, station, task);
+                //}
+                //else
+                //{
+                    await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, task);
+                //}
             }
             catch (Exception ex)
             {
@@ -155,26 +179,190 @@
             }
         }
 
+
         /// <summary>
-        /// RGV鎼繍瀹屾垚
+        /// 杈撻�佺嚎鍑哄簱瀹屾垚
+        /// </summary>
+        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+        public async Task ConveyorLineFinish(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station)
+        {
+            try
+            {
+                // 杈撳嚭淇℃伅锛岃〃绀虹珯鍙拌姹傚彇璐�
+                var log = $"銆恵conveyorLine._deviceName}銆戠珯鍙般�恵station.stationChildCode}銆�,浠诲姟鍙�:銆恵command.TaskNum}銆戝畬鎴�";
+                await LogAndWarn(conveyorLine.DeviceName, log);
+
+                var task = _taskService.QueryConveyorLineFinishTask(station.stationChildCode);
+                //鏀规煡璇㈡柟娉�
+
+                HandleFinishTaskAsync(conveyorLine, command, station.stationChildCode, task);
+
+            }
+            catch (Exception ex)
+            {
+                WriteInfo(conveyorLine.DeviceName, ex.Message);
+            }
+        }
+        /// <summary>
+        /// 杈撻�佺嚎璇锋眰鍑轰俊鎭�
         /// </summary>
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
         /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
-        public void RGVFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
+        public void RequestInOrOutbound(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station,Dt_Task task)
         {
+            try
+            {
+                // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮佸拰瀛愯澶囦唬鐮侊紝浠ュ強浠诲姟淇℃伅
+                var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎,task{task.ToJsonString()}";
+                ConsoleHelper.WriteSuccessLine(logs);
 
+                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
+                WriteInfo(conveyorLine.DeviceName, logs);
+
+                // 濡傛灉浠诲姟涓嶄负绌猴紝鍒欐墽琛屼互涓嬫搷浣�
+                if (task != null)
+                {
+                    ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite()
+                    {
+                        TaskNum = Convert.ToInt16(task.TaskNum),
+                        TargetAddress = Convert.ToInt16(task.NextAddress),
+                        WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1)
+                    };
+
+                    // 杈撳嚭鎴愬姛淇℃伅锛屽寘鎷緭閫佺嚎鍚嶇О銆佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜鍜屼笅涓�鐩爣鍦板潃
+                    var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎璇锋眰鍑哄簱,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                    ConsoleHelper.WriteSuccessLine(log);
+
+                    _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                    WriteInfo(conveyorLine.DeviceName, log);
+
+                    var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode);
+                    if (result)
+                    {
+                        _taskService.UpdateTaskStatusToNext(task);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+            }
         }
+
         /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
+        /// 杈撻�佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃
         /// </summary>
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void ConveyorLineFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
+        public void ConveyorLineInOrOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station, Dt_Task task)
         {
+            // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮佷互鍙婅姹傚嚭搴撲笅涓�鍦板潃鐨勫瓙璁惧浠g爜
+            var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎璇锋眰鍑哄簱瀹屾垚";
+            ConsoleHelper.WriteSuccessLine(log);
 
+            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+            WriteInfo(conveyorLine.DeviceName, log);
+
+            // 濡傛灉浠诲姟瀛樺湪
+            if (task != null)
+            {
+                _taskService.UpdateTaskStatusToNext(task);
+
+            }
+        }
+
+
+
+        /// <summary>
+        /// 杈撻�佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃
+        /// </summary>
+        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+        public void RequestNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station, Dt_Task task)
+        {
+            // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮佷互鍙婅姹傚嚭搴撲笅涓�鍦板潃鐨勫瓙璁惧浠g爜
+            var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃";
+            ConsoleHelper.WriteSuccessLine(log);
+
+            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+            WriteInfo(conveyorLine.DeviceName, log);
+
+            // 濡傛灉浠诲姟瀛樺湪
+            if (task != null)
+            {
+                ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite()
+                {
+                    TaskNum = Convert.ToInt16(task.TaskNum),
+                    TargetAddress = Convert.ToInt16(task.NextAddress),
+                    WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1)
+                };
+
+                // 鎵撳嵃鎴愬姛鏃ュ織锛屾樉绀哄綋鍓嶈澶囧悕绉般�佷换鍔″彿銆佹墭鐩樻潯鐮併�佸瓙璁惧浠g爜浠ュ強涓嬩竴鐩爣鍦板潃
+                var logs = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎璇锋眰鍑哄簱涓嬩竴鍦板潃,涓嬩竴鐩爣鍦板潃銆恵taskCommand.TargetAddress}銆�";
+                ConsoleHelper.WriteSuccessLine(logs);
+
+                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
+                WriteInfo(conveyorLine.DeviceName, logs);
+
+
+                var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode);
+                if (result)
+                {
+                    _taskService.UpdateTaskStatusToNext(task);
+                }
+            }
+
+        }
+
+
+        /// <summary>
+        /// 杈撻�佺嚎鍑哄簱瀹屾垚
+        /// </summary>
+        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+        public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station,Dt_Task task)
+        {
+            try
+            {
+                // 鎵撳嵃鎴愬姛淇℃伅锛岃〃绀烘墭鐩樺凡鍒拌揪鎸囧畾杈撻�佺嚎骞跺畬鎴愬嚭搴�
+                var logs = $"銆恵conveyorLine.DeviceName}銆戜换鍔″彿锛氥�恵command.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵command.Barcode}銆戝凡鍒拌揪銆恵station.stationChildCode}銆戣緭閫佺嚎鍑哄簱瀹屾垚";
+                ConsoleHelper.WriteSuccessLine(logs);
+
+                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
+                WriteInfo(conveyorLine.DeviceName, logs);
+                ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite()
+                {
+                    TaskNum = 100,
+                    TargetAddress = Convert.ToInt16(station.stationNextChildCode),
+                    WriteInteractiveSignal = (byte)Convert.ToSByte(3)
+                };
+                var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode);
+
+            }
+            catch (Exception ex)
+            {
+            }
+        }
+        /// <summary>
+        /// 杈撻�佺嚎鎶ヨ
+        /// </summary>
+        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+        /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
+        public void ConveyorLineAlarm(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station)
+        {
+            var task = _taskRepository.QueryFirst(x => x.TaskNum == command.TaskNum);
+
+
+            conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal,Convert.ToSByte(3), station.stationChildCode);
         }
 
         public async Task LogAndWarn(string deviceName, string log, string color = "red")
@@ -183,5 +371,38 @@
             await _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color });
             WriteInfo(deviceName, log);
         }
+
+        public bool SendCommand(ConveyorLineTaskCommandWrite taskCommand, CommonConveyorLine conveyorLine, string childDeviceCode)
+        {
+            conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode);
+            Thread.Sleep(100);
+            conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, Convert.ToInt16(taskCommand.TaskNum), childDeviceCode);
+            Thread.Sleep(100);
+            conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(taskCommand.WriteInteractiveSignal), childDeviceCode);
+            for (int i = 0; i < 6; i++)
+            {
+                ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
+                if (command != null)
+                {
+                    if (command.TaskNum == taskCommand.TaskNum && command.TargetAddress == taskCommand.TargetAddress)
+                    {
+                        WriteInfo(conveyorLine.DeviceName, $"鍐欏叆浠诲姟鎴愬姛鍐欏叆娆℃暟{i}鍐欏叆浠诲姟銆恵JsonConvert.SerializeObject(taskCommand)}銆�");
+                        return true;
+                    }
+                    if (command.TargetAddress != taskCommand.TargetAddress)
+                    {
+                        conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode);
+                        Thread.Sleep(100);
+                    }
+                    if (command.TaskNum != taskCommand.TaskNum)
+                    {
+                        conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, taskCommand.TaskNum, childDeviceCode); Thread.Sleep(100);
+                    }
+
+                }
+            }
+            WriteInfo(conveyorLine.DeviceName, $"鍐欏叆浠诲姟澶辫触浠诲姟鍙枫�恵taskCommand.TaskNum}銆戞墭鐩樺彿銆恵taskCommand.Barcode}銆戠洰鏍囧湴鍧�銆恵taskCommand.TargetAddress}銆戝綋鍓嶈妭鐐广�恵childDeviceCode}銆�");
+            return false;
+        }
     }
 }

--
Gitblit v1.9.3