From e46aa927d231af83724683c7286d9db503e24cf7 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期二, 10 六月 2025 11:46:20 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs |  182 ++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 153 insertions(+), 29 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs"
index 9fe9210..560b8f8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs"
@@ -22,47 +22,74 @@
 using System.Linq;
 using System.Text;
 using System.Text.RegularExpressions;
+using System.Threading.Tasks;
 using WIDESEA_Common.Log;
+using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_DTO.BasicInfo;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_Model.Models.System;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 
 namespace WIDESEAWCS_Tasks
 {
+    /// <summary>
+    /// 杈撻�佺嚎鍑烘枡浣滀笟绫伙紝璐熻矗澶勭悊杈撻�佺嚎鍑烘枡绔欑殑PLC璇锋眰鍜學CS鍝嶅簲閫昏緫
+    /// </summary>
+    /// <remarks>
+    /// 1. 閫氳繃鎵弿鏉$爜鑾峰彇璁㈠崟淇℃伅 <br/>
+    /// 2. 鏍规嵁璁㈠崟灏哄鍒ゆ柇鏄惁鍦ㄥ厑璁歌寖鍥村唴 <br/>
+    /// 3. 鐢熸垚浠诲姟骞惰缃甈LC绔欑偣鐨勭洰鏍囦綅缃拰浠诲姟缂栧彿 <br/>
+    /// 4. 澶勭悊寮傚父鎯呭喌骞惰褰曢敊璇棩蹇� <br/>
+    /// 5. 浣跨敤[DisallowConcurrentExecution]鐗规�х‘淇濅綔涓氫笉浼氬苟鍙戞墽琛�
+    /// </remarks>
     [DisallowConcurrentExecution]
     public class CommonConveyorLineOutJob : JobBase, IJob
     {
         private readonly ITaskService _taskService;
-        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
-        private readonly IRouterService _routerService;
-        private readonly IOrderDetailsService _OrderDetailsService;
         private readonly IMapper _mapper;
 
-        public CommonConveyorLineOutJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IOrderDetailsService orderDetails, IMapper mapper)
+        private readonly IOrderDetailsService _orderDetailsService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IContainerRepository _containerRepository;
+
+        private static Dt_Container DischargeContainer;
+
+        private static int dischargeStation = 8;
+
+        public CommonConveyorLineOutJob(ITaskService taskService, IMapper mapper, IOrderDetailsService orderDetailsService, ITaskRepository taskRepository, IContainerRepository containerRepository)
         {
             _taskService = taskService;
-            _taskExecuteDetailService = taskExecuteDetailService;
-            _routerService = routerService;
-            _OrderDetailsService = orderDetails;
             _mapper = mapper;
+            _orderDetailsService = orderDetailsService;
+            _taskRepository = taskRepository;
+            _containerRepository = containerRepository;
         }
-
-        static string barcode = string.Empty; //鏉$爜
 
         public Task Execute(IJobExecutionContext context)
         {
-            try
+            if (DischargeContainer == null)
             {
-                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
-                if (flag && value != null && value is OtherDevice)
+                DischargeContainer = _containerRepository.QueryFirst(x => x.ContainerEnable && x.ContainerType == ContainerTypeEnum.DischargeContainer.ObjToInt());
+                if (DischargeContainer != null)
                 {
-                    OtherDevice otherDevice = (OtherDevice)value;
+                    dischargeStation = DischargeContainer.ContainerNo;
+                }
+            }
 
+            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+            if (flag && value != null && value is OtherDevice otherDevice)
+            {
+                try
+                {
                     bool request = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationRequest);   //鐢宠
                     bool response = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationResponse);    //搴旂瓟
 
@@ -70,33 +97,130 @@
 
                     if (request && !response && !wcsResponse)
                     {
+                        DeviceProDTO? devicePro = otherDevice.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == ConveyorLineStationDBName.PLCStationBarcode.ToString());
+                        if (devicePro != null)
+                        {
+                            string barcode = otherDevice.GetValue<ConveyorLineStationDBName, string>(ConveyorLineStationDBName.PLCStationBarcode);
+
+                            if (!string.IsNullOrEmpty(barcode))
+                            {
+                                OrderInfo orderInfo = _orderDetailsService.GetOrderInfoByBarcode(barcode);
+
+                                Task.Run(() =>
+                                {
+                                    _orderDetailsService.ToMes(barcode, 3);
+                                });
+
+                                if (orderInfo.Width >= AppSettings.Get("MinWidth").ObjToInt() && orderInfo.Width <= AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Length >= AppSettings.Get("MinLength").ObjToInt() && orderInfo.Length <= AppSettings.Get("MaxLength").ObjToInt() || orderInfo.Length >= AppSettings.Get("MinWidth").ObjToInt() && orderInfo.Length <= AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Width >= AppSettings.Get("MinLength").ObjToInt() && orderInfo.Width <= AppSettings.Get("MaxLength").ObjToInt())
+                                {
+                                    Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == barcode);
+                                    if (task == null)
+                                    {
+                                        try
+                                        {
+                                            var (taskFlag, gTask, message) = _taskService.GenerateTask(orderInfo);
+                                            if (taskFlag && gTask != null)
+                                            {
+                                                task = gTask;
+                                                if (!string.IsNullOrEmpty(task.ItemInfo))
+                                                {
+                                                    string[] itemInfos = task.ItemInfo.Split("*");
+                                                    if (itemInfos.Length == 3)
+                                                    {
+                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[0]));
+                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[1]));
+                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[2]));
+                                                    }
+                                                }
+
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(task.TargetAddress));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, task.TaskNum);
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+                                            }
+                                            else
+                                            {
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 998);
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+
+                                                WriteError(nameof(CommonConveyorLineOutJob), message);
+
+                                                WriteError("鏉垮瓙鎺掑嚭閿欒鍘熷洜璁板綍鏃ュ織", message);
+                                            }
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
+                                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+                                            WriteError("鏀炬澘閫昏緫杩愮畻閿欒璁板綍鏃ュ織", ex.Message, ex);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (!string.IsNullOrEmpty(task.ItemInfo))
+                                        {
+                                            string[] itemInfos = task.ItemInfo.Split("*");
+                                            if (itemInfos.Length == 3)
+                                            {
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[0]));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[1]));
+                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[2]));
+                                            }
+                                        }
+
+                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(task.TargetAddress));
+                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, task.TaskNum);
+                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+                                    }
+                                }
+                                else
+                                {
+                                    //todo 瓒呭澶勭悊
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
+                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+                                }
+                            }
+                            else
+                            {
+                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
+                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 997);
+                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+                            }
+                        }
 
                     }
                     else
                     {
-                        if (wcsResponse)
+                        if (wcsResponse && !request)
                             otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, false);  //娓呴櫎鍝嶅簲
                     }
+
+                }
+                catch (Exception ex)
+                {
+                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
+                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 996);
+                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
+
+                    WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
                 }
             }
-            catch (Exception ex)
+            else
             {
-                WriteError(nameof(CommonConveyorLineJob), ex.ToString(), ex);
+                WriteError(nameof(CommonConveyorLineOutJob), "鍙傛暟閿欒,鏈紶閫掕澶囧弬鏁版垨璁惧绫诲瀷閿欒");
             }
             return Task.CompletedTask;
-        }
-
-        public int[] GetIndexArray<T>(T[] values, T value)
-        {
-            List<int> result = new List<int>();
-            for (int i = 0; i < values.Length; i++)
-            {
-                if (value.Equals(values[i]))
-                {
-                    result.Add(i);
-                }
-            }
-            return result.ToArray();
         }
     }
 }

--
Gitblit v1.9.3