From b6837f097e9cdb2645368aed4ddb03f580c331e4 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期一, 05 五月 2025 17:29:07 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs |  135 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 100 insertions(+), 35 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
index 30a28cd..7dfb4a9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
@@ -8,10 +8,12 @@
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -25,12 +27,14 @@
         private readonly ITaskService _taskService;
         private readonly IContainerItemRepository _containerItemRepository;
         private readonly WebSocketServer _webSocketServer;
-        public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer)
+        private readonly IOrderDetailsService _orderDetailsService;
+        public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer, IOrderDetailsService orderDetailsService)
         {
             _taskRepository = taskRepository;
             _taskService = taskService;
             _containerItemRepository = containerItemRepository;
             _webSocketServer = webSocketServer;
+            _orderDetailsService = orderDetailsService;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -57,38 +61,40 @@
                             string[] takePositions = task.CurrentAddress.Split("*");
                             if (takePositions.Length != 5)
                             {
-                                //WriteError
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣浣嶇疆閿欒");
                                 return Task.CompletedTask;
                             }
 
                             string[] putPositions = task.NextAddress.Split("*");
                             if (putPositions.Length != 5)
                             {
-                                //WriteError
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏀捐揣浣嶇疆閿欒");
                                 return Task.CompletedTask;
                             }
 
                             Dt_ContainerItem containerItem = _containerItemRepository.QueryFirst(x => x.ItemCode == task.PalletCode);
                             if (containerItem == null)
                             {
-                                //WriteError
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏉挎潗灏哄鑾峰彇閿欒");
                                 return Task.CompletedTask;
                             }
-                            if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic))
-                            {
-                                if (lightStatusDic != LightStatusEnum.LightWorking)
-                                {
-                                    LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking;
-                                }
-                            }
 
-                            otherDevice.SetValue(GantryDBName.TwoHand, true);
-                            otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum);
+                            if (!LightStatusStorage.StationStautsDic.TryGetValue(putPositions[0],out bool stationStatus))
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞湁鏃犲灚鏉挎暟鎹敊璇�,{LightStatusStorage.StationStautsDic.Serialize()}");
+                                return Task.CompletedTask;
+                            }
+                            if (!stationStatus)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞棤鍨澘,{LightStatusStorage.StationStautsDic.Serialize()}");
+                                return Task.CompletedTask;
+                            }
+                            
                             int takePoX = Convert.ToInt32(takePositions[1]);
                             int takePoY = Convert.ToInt32(takePositions[2]);
                             int takePoZ = OPositions.HPositions[takePositions[0]].PositionZ + 30 * 1000 - Convert.ToInt32(takePositions[3]) * 1000;
 
-                            if(OPositions.HPositions[takePositions[0]].PositionZ == 0)
+                            if (OPositions.HPositions[takePositions[0]].PositionZ == 0)
                             {
                                 WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣Z鍧愭爣璇诲彇涓�0");
                                 return Task.CompletedTask;
@@ -107,45 +113,87 @@
                             }
                             int putPoR = 0;
 
-                            if (Convert.ToInt32(takePositions[4]) == 1)
+                            int temp = 1000;
+                            if(otherDevice.DeviceCode == "GT02")
                             {
-                                takePoX = takePoX * 1000 + OPositions.HPositions[takePositions[0]].PositionX;
-                                takePoY = takePoY * 1000 + OPositions.HPositions[takePositions[0]].PositionY;
-                                putPoX = putPoX * 1000 + OPositions.HPositions[putPositions[0]].PositionX;
-                                putPoY = putPoY * 1000 + OPositions.HPositions[putPositions[0]].PositionY;
+                                temp = -1000;
+                            }
+
+                            if (Convert.ToInt32(takePositions[4]) == 1 || Convert.ToInt32(takePositions[4]) == 2)
+                            {
+                                takePoX = takePoX * temp + OPositions.HPositions[takePositions[0]].PositionX;
+                                takePoY = takePoY * temp + OPositions.HPositions[takePositions[0]].PositionY;
+                                putPoX = putPoX * temp + OPositions.HPositions[putPositions[0]].PositionX;
+                                putPoY = putPoY * temp + OPositions.HPositions[putPositions[0]].PositionY;
                                 takePoR = OPositions.HPositions[takePositions[0]].PositionR;
-                                putPoR = OPositions.HPositions[putPositions[0]].PositionR;
+
+                                if (Convert.ToInt32(takePositions[4]) == 1)
+                                    putPoR = OPositions.HPositions[putPositions[0]].PositionR;
+                                else
+                                {
+                                    if (otherDevice.DeviceCode == "GT03")
+                                        putPoR = otherDevice.Communicator.Read<int>("DB10.840");
+                                    else if (otherDevice.DeviceCode == "GT02")
+                                        putPoR = otherDevice.Communicator.Read<int>("DB10.836");
+                                    else if (otherDevice.DeviceCode == "GT01")
+                                        putPoR = otherDevice.Communicator.Read<int>("DB10.832");
+                                    else
+                                    {
+                                        WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "R鍧愭爣閿欒");
+                                        return Task.CompletedTask;
+                                    }
+                                }
 
                                 WriteDebug($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"鍙栬揣浣嶏細{takePositions[0]},鏀捐揣浣嶏細{putPositions[0]}{Environment.NewLine}鍙栬揣鍧愭爣锛歑:{takePoX} Y:{takePoY} Z:{takePoZ} R:{takePoR}{Environment.NewLine}鏀捐揣鍧愭爣锛歑:{putPoX} Y:{putPoY} Z:{putPoZ} R:{putPoR}{Environment.NewLine}璇诲彇PLC鍙栬揣鍧愭爣锛歑:{OPositions.HPositions[takePositions[0]].PositionX} Y:{OPositions.HPositions[takePositions[0]].PositionY} Z:{OPositions.HPositions[takePositions[0]].PositionZ} R:{OPositions.HPositions[takePositions[0]].PositionR}{Environment.NewLine}璇诲彇PLC鏀捐揣鍧愭爣锛歑:{OPositions.HPositions[putPositions[0]].PositionX} Y:{OPositions.HPositions[putPositions[0]].PositionY} Z:{OPositions.HPositions[putPositions[0]].PositionZ} R:{OPositions.HPositions[putPositions[0]].PositionR}");
                             }
                             else
                             {
-                                takePoX = takePoX * 1000 + OPositions.ZPositions[takePositions[0]].PositionX;
-                                takePoY = takePoY * 1000 + OPositions.ZPositions[takePositions[0]].PositionY;
-                                putPoX = putPoX * 1000 + OPositions.ZPositions[putPositions[0]].PositionX;
-                                putPoY = putPoY * 1000 + OPositions.ZPositions[putPositions[0]].PositionY;
+                                takePoX = takePoX * temp + OPositions.ZPositions[takePositions[0]].PositionX;
+                                takePoY = takePoY * temp + OPositions.ZPositions[takePositions[0]].PositionY;
+                                putPoX = putPoX * temp + OPositions.ZPositions[putPositions[0]].PositionX;
+                                putPoY = putPoY * temp + OPositions.ZPositions[putPositions[0]].PositionY;
                                 takePoR = OPositions.ZPositions[takePositions[0]].PositionR;
                                 putPoR = OPositions.ZPositions[putPositions[0]].PositionR;
 
                                 WriteDebug($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"鍙栬揣浣嶏細{takePositions[0]},鏀捐揣浣嶏細{putPositions[0]}{Environment.NewLine}鍙栬揣鍧愭爣锛歑:{takePoX} Y:{takePoY} Z:{takePoZ} R:{takePoR}{Environment.NewLine}鏀捐揣鍧愭爣锛歑:{putPoX} Y:{putPoY} Z:{putPoZ} R:{putPoR}{Environment.NewLine}璇诲彇PLC鍙栬揣鍧愭爣锛歑:{OPositions.ZPositions[takePositions[0]].PositionX} Y:{OPositions.ZPositions[takePositions[0]].PositionY} Z:{OPositions.ZPositions[takePositions[0]].PositionZ} R:{OPositions.ZPositions[takePositions[0]].PositionR}{Environment.NewLine}璇诲彇PLC鏀捐揣鍧愭爣锛歑:{OPositions.ZPositions[putPositions[0]].PositionX} Y:{OPositions.ZPositions[putPositions[0]].PositionY} Z:{OPositions.ZPositions[putPositions[0]].PositionZ} R:{OPositions.ZPositions[putPositions[0]].PositionR}");
                             }
+                            #region
+                            List<DeviceProDTO> devicePros = otherDevice.DeviceProDTOs.Where(x => x.DeviceProParamType == "MaxPosition").ToList();
 
-                            int maxX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxX);
-                            int minX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinX);
-                            int maxY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxY);
-                            int minY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinY);
-                            int maxZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxZ);
-                            int minZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinZ);
-                            int maxR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxR);
-                            int minR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinR);
+                            DeviceProDTO? devicePro = devicePros.OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                            if(devicePro == null)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "璁惧鍗忚鍙傛暟閿欒锛屾湭鎵惧埌鏈�澶ф渶灏忓潗鏍囧湴鍧�");
+                                return Task.CompletedTask;
+                            }
+                            int[] data = otherDevice.Communicator.Read<int>(devicePro.DeviceProAddress, (ushort)(devicePros.Count));
 
-                            if(takePoX < minX || takePoX > maxX)
+                            int maxX = data[0];
+                            int minX = data[1];
+                            int maxY = data[2];
+                            int minY = data[3];
+                            int maxZ = data[4];
+                            int minZ = data[5];
+                            int maxR = data[6];
+                            int minR = data[7];
+
+                            //int maxX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxX);
+                            //int minX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinX);
+                            //int maxY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxY);
+                            //int minY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinY);
+                            //int maxZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxZ);
+                            //int minZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinZ);
+                            //int maxR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxR);
+                            //int minR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinR);
+
+                            
+                            if (takePoX < minX || takePoX > maxX)
                             {
                                 WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}");
                                 return Task.CompletedTask;
                             }
 
-                            if(putPoX < minX || putPoX > maxX)
+                            if (putPoX < minX || putPoX > maxX)
                             {
                                 WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}");
                                 return Task.CompletedTask;
@@ -186,7 +234,10 @@
                                 WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}");
                                 return Task.CompletedTask;
                             }
+                            #endregion
 
+                            otherDevice.SetValue(GantryDBName.TwoHand, true);
+                            otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum);
                             otherDevice.SetValue(GantryDBName.TakePositionX, takePoX);
                             otherDevice.SetValue(GantryDBName.TakePositionY, takePoY);
                             otherDevice.SetValue(GantryDBName.TakePositionZ, takePoZ);
@@ -203,11 +254,19 @@
 
                             task.TaskState = TaskStatusEnum.Gantry_Executing.ObjToInt();
                             _taskRepository.UpdateData(task);
+
+                            if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic))
+                            {
+                                if (lightStatusDic != LightStatusEnum.LightWorking)
+                                {
+                                    LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking;
+                                }
+                            }
                         }
                     }
                     else if (gantryWorkStatus == 5)
                     {
-                        int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.CurrentTaskNum);
+                        int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.TaskNum);
                         if (currentTaskNum > 0)
                         {
                             Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == currentTaskNum);
@@ -215,6 +274,12 @@
                             {
                                 _taskService.TaskComplete(task);
 
+                                Task.Run(() =>
+                                {
+                                    _orderDetailsService.ToMes(task.PalletCode, 4);
+                                });
+                                
+
                                 string[] putPositions = task.NextAddress.Split("*");
                                 if (putPositions.Length != 5)
                                 {

--
Gitblit v1.9.3