From c54e0666bdd34fbe133fe521bf9d46dd6c0fe53e Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 12 六月 2025 10:33:28 +0800
Subject: [PATCH] 代码提交

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  160 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 124 insertions(+), 36 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 0f28fa5..1de6610 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -1,20 +1,17 @@
-锘縰sing Autofac.Core;
-using Microsoft.AspNetCore.Components.Routing;
-using Microsoft.AspNetCore.Hosting;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
 using Quartz;
-using System;
+using SqlSugar;
+using SqlSugar.Extensions;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
-using System.Diagnostics.Eventing.Reader;
-using System.Linq;
-using System.Reflection.Metadata;
-using System.Text;
 using System.Threading.Tasks;
-using WIDESEA_Common.Log;
-using WIDESEAWCS_Common.TaskEnum;
-using WIDESEAWCS_Core;
-using WIDESEAWCS_Core.Enums;
+using WIDESEA_Core.Enums;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ISystemRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -23,8 +20,11 @@
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_QuartzJob.StackerCrane;
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_SignalR;
 using WIDESEAWCS_Tasks.StackerCraneJob;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -34,14 +34,18 @@
         private readonly ITaskService _taskService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskRepository _taskRepository;
-        private readonly IRouterService _routerService;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
+        private readonly ICacheService _cacheService;
+        private readonly INoticeService _noticeService;
 
-        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository,IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskRepository = taskRepository;
-            _routerService = routerService;
+            _stationManagerRepository = stationManagerRepository;
+            _cacheService = cacheService;
+            _noticeService = noticeService;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -49,16 +53,50 @@
             try
             {
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
+
                 if (commonStackerCrane != null)
                 {
-                    //娣诲姞鍒ゆ柇agv鐘舵�佹槸鍚﹀彲涓嬪彂
-                    if (ReadAGVstatus(commonStackerCrane) == 1 && ReadAGVworkingmode(commonStackerCrane) == 1)
+                    if (!commonStackerCrane.IsEventSubscribed)
                     {
-                        GetTask(commonStackerCrane);
+                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
                     }
 
-                    //澶勭悊agv鏄惁瀹屾垚浠诲姟
-                        
+                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                    {
+                        commonStackerCrane.CheckStackerCraneTaskCompleted();//妫�娴嬪爢鍨涙満浠诲姟瀹屾垚浜嬩欢
+
+                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Idle)
+                        {
+                            GetTask(commonStackerCrane);
+                        }
+                    }
+
+                    #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+                    var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
+                    if (tokenInfos != null && tokenInfos.Any())
+                    {
+                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+                        object obj = new
+                        {
+                            commonStackerCrane.StackerCraneStatusDes,
+                            commonStackerCrane.StackerCraneAutoStatusDes,
+                            commonStackerCrane.StackerCraneWorkStatusDes,
+                            commonStackerCrane.DeviceCode,
+                            commonStackerCrane.DeviceName,
+                            commonStackerCrane.CurrentTaskNum,
+                            commonStackerCrane.LastTaskNum,
+                            SourceAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.SourceAddress),
+                            TargetAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TargetAddress),
+                            Command = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Command),
+                            Electricity = commonStackerCrane.GetValue<StackerCraneDBName, float>(StackerCraneDBName.Electricity),
+                        };
+                    
+                        _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj });
+                    }
+
+                    #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
                 }
             }
             catch (Exception ex)
@@ -73,17 +111,16 @@
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
-        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
+        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
         {
-            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
+           CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
             if (commonStackerCrane != null)
             {
-                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
-                {
-                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
-                    _taskService.StackCraneTaskCompleted(e.TaskNum);
-                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
-                }
+
+                Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                _taskService.StackCraneTaskCompleted(e.TaskNum);
+                commonStackerCrane.SetValue(StackerCraneDBName.TaskCompleted, 1);
+
             }
         }
 
@@ -102,8 +139,10 @@
                 if (stackerCraneTaskCommand != null)
                 {
                     bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
-                    if (sendFlag)
+                    Thread.Sleep(1000);
+                    if (ReadReceived(commonStackerCrane) == 1)
                     {
+                        WriteConfirm(commonStackerCrane);
                         _taskService.UpdateTaskStatusToNext(task.TaskNum);
                     }
                 }
@@ -131,7 +170,50 @@
             return deviceProDTO != null ? commonStackerCrane.Communicator.Read<int>(deviceProDTO.DeviceProAddress) : 99;
         }
 
+        /// <summary>
+        /// 璇诲彇AGV鏀跺埌浣滀笟淇″彿
+        /// </summary>
+        /// <param name="commonStackerCrane"></param>
+        /// <returns></returns>
+        public int ReadReceived(CommonStackerCrane commonStackerCrane)
+        {
+            return commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Received);
+        }
+        public void WriteConfirm(CommonStackerCrane commonStackerCrane)
+        {
+            commonStackerCrane.SetValue(StackerCraneDBName.WriteConfirm, 1);
+        }
 
+        /// <summary>
+        /// 璋冨害AGV鍘诲皝杈瑰尯鍩�
+        /// </summary>
+        /// <param name="commonStackerCrane"></param>
+        /// <param name="value"></param>
+        public void AGVToEdgeBanding(CommonStackerCrane commonStackerCrane)
+        {
+            commonStackerCrane.SetValue(StackerCraneDBName.AreaWrite, true);
+        }
+
+        /// <summary>
+        /// 璋冨害AGV鍘荤爞杈瑰尯鍩�
+        /// </summary>
+        /// <param name="commonStackerCrane"></param>
+        /// <param name="value"></param>
+        public void AGVToSandyEdge(CommonStackerCrane commonStackerCrane)
+        {
+            DeviceProDTO? devicePro = commonStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == "AreaWrite" && x.DeviceChildCode == commonStackerCrane.DeviceCode && x.DeviceProParamName == "AreaWrite").OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+
+            if(devicePro == null)
+            {
+                ConsoleHelper.WriteColorLine($"銆愭湭鎵惧埌閰嶇疆璋冨害AGV鍖哄煙鍗忚銆�", ConsoleColor.Magenta);
+                return;
+            }
+            var writeBool = commonStackerCrane.Communicator.Read<bool>(devicePro.DeviceProAddress+0.1);
+            if (!writeBool)
+            {
+                commonStackerCrane.Communicator.Write(devicePro.DeviceProAddress + 0.1, true);
+            }
+        }
         /// <summary>
         /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
         /// </summary>
@@ -140,17 +222,23 @@
         /// <exception cref="Exception"></exception>
         public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
         {
+            var SourceAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.SourceAddress);
+            var TargetAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress);
+
+            if(SourceAddress == null || TargetAddress == null)
+            {
+                ConsoleHelper.WriteColorLine($"銆愪换鍔JsonConvert.SerializeObject(task)}鏈壘鍒扮珯鍙伴厤缃��", ConsoleColor.Magenta);
+                return null;
+            }
             StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
 
             stackerCraneTaskCommand.TaskNum = task.TaskNum;
             stackerCraneTaskCommand.WorkType = 1;
-            stackerCraneTaskCommand.TrayType = 0;
-            stackerCraneTaskCommand.StartAdder = Convert.ToInt16(task.SourceAddress);
-            stackerCraneTaskCommand.EndAdder = Convert.ToInt16(task.TargetAddress);
+            stackerCraneTaskCommand.TaskType = 0;
+            stackerCraneTaskCommand.StartAddress = Convert.ToInt16(SourceAddress.stationCode);
+            stackerCraneTaskCommand.EndAddress = Convert.ToInt16(TargetAddress.stationCode);
 
-            return stackerCraneTaskCommand;
-
-            
+            return stackerCraneTaskCommand;            
         }
     }
 }

--
Gitblit v1.9.3