From 0864509e1eb593c3dedb66196ec19fe51437922b Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期一, 26 五月 2025 10:25:42 +0800
Subject: [PATCH] 新增货位管理,PDA扫码生成任务烘烤出料,烘烤回炉,空托回流

---
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs |  235 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 186 insertions(+), 49 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index f82ab1f..227329f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -1,4 +1,5 @@
 锘�#region << 鐗� 鏈� 娉� 閲� >>
+
 /*----------------------------------------------------------------
  * 鍛藉悕绌洪棿锛歐IDESEAWCS_Tasks.ConveyorLineJob
  * 鍒涘缓鑰咃細鑳$搴�
@@ -11,25 +12,21 @@
  * 淇敼鏃堕棿锛�
  * 鐗堟湰锛歏1.0.1
  * 淇敼璇存槑锛�
- * 
+ *
  *----------------------------------------------------------------*/
+
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
-using AutoMapper;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
-using Quartz;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
 using System.Threading.Tasks;
+using AutoMapper;
+using Quartz;
+using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
-using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 
@@ -39,72 +36,212 @@
     public class CommonConveyorLineJob : JobBase, IJob, IDisposable
     {
         private readonly ITaskService _taskService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly ITaskCZRepository _taskCZRepository;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
         private readonly IMapper _mapper;
+        private readonly ITaskCZDetailsRepository _detailsRepository;
 
-        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
+        public CommonConveyorLineJob(ITaskService taskService, ITaskCZDetailsRepository detailsRepository, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _routerService = routerService;
             _mapper = mapper;
+            _taskRepository = taskRepository;
+            _taskCZRepository = taskCZRepository;
+            _detailsRepository = detailsRepository;
         }
 
         public Task Execute(IJobExecutionContext context)
         {
-            //Console.Out.WriteLine(DateTime.Now);
             try
             {
+                // 浠庝笂涓嬫枃涓幏鍙� JobParams 骞惰浆鎹负 CommonConveyorLine 绫诲瀷
                 CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
-                if (conveyorLine != null)
+                if (conveyorLine == null)
                 {
-                    short[] values = conveyorLine.Communicator.Read<short>("DB2.0", 20);
-
-                    //bool result = conveyorLine.Communicator.Write("DB1.0", "AAABBB");
-                    //string testVal = conveyorLine.Communicator.Read<string>("DB1.0");
-
-                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
-                    List<Task> tasks = new List<Task>();
-                    foreach (string childDeviceCode in childDeviceCodes)
-                    {
-                        //Task task = Task.Run(() =>
-                        //{
-                        ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
-                        if (command != null)
-                        {
-                            DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.InteractiveSignal.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal));
-                            if (deviceProtocolDetail != null)
-                            {
-                                MethodInfo? method = GetType().GetMethod(deviceProtocolDetail.ProtocolDetailType);
-                                if (method != null)
-                                {
-                                    method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
-                                }
-                                else
-                                {
-                                    //todo 鏈壘鍒版柟娉曟椂
-                                }
-                            }
-                        }
-                        //});
-                        //tasks.Add(task);
-                    }
-
-                    Task.WaitAll(tasks.ToArray());
+                    throw new Exception("JobParams 涓嶅寘鍚� CommonConveyorLine 绫诲瀷鍙傛暟");
                 }
 
+                // 瀹氫箟绾夸綋瀹炵洏鍏ュ簱璇锋眰鐨勫湴鍧�鍜屼换鍔$被鍨�
+                var requests = new Dictionary<string, string>
+                {
+                    { "DB1002.1493.0", "ZJXL-WLX002" },
+                    { "DB1002.1093.0", "FJXL-WLX002" }
+                };
+
+                // 瀹氫箟绾夸綋绌虹洏鍥炴祦璇锋眰鐨勫湴鍧�鍜屼换鍔$被鍨�
+                var requestsKP = new Dictionary<string, string>
+                {
+                    { "DB1002.1893.0", "ZJXL-KPHLX001" },
+                    { "DB1002.2293.0", "FJXL-KPHLX001" }
+                };
+
+                // 澶勭悊瀹炵洏鍏ュ簱璇锋眰
+                //ProcessRequests(conveyorLine, requests, "涓嬬嚎璇锋眰鍏ュ簱");
+
+                // 澶勭悊绌虹洏鍥炴祦璇锋眰
+                ProcessKpRequests(conveyorLine, requestsKP);
             }
             catch (Exception ex)
             {
-                //Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
+                // 璁板綍寮傚父淇℃伅
+                // Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
+                ConsoleHelper.WriteErrorLine($"{nameof(CommonConveyorLineJob)}: 鍙戠敓寮傚父 - {ex.Message}");
             }
             finally
             {
+                // 鍐欒皟璇曚俊鎭�
                 WriteDebug("CommonConveyorLineJob", "test");
-                //Console.Out.WriteLine(DateTime.Now);
+                // Console.Out.WriteLine(DateTime.Now);
             }
+
             return Task.CompletedTask;
+        }
+
+        private void ProcessRequests(CommonConveyorLine conveyorLine, Dictionary<string, string> requests, string requestType)
+        {
+            foreach (var request in requests)
+            {
+                var isDownRequest = conveyorLine.Communicator.Read<bool>(request.Key);
+                if (!isDownRequest)
+                {
+                    continue;
+                }
+
+                string fromAdd = request.Value;
+                string taskType = request.Value.Contains("ZJXL") ? "姝f瀬" : "璐熸瀬";
+
+                // 鏌ヨ鏄惁瀛樺湪宸茬敓鎴愮殑鏂颁换鍔�
+                var task = _taskRepository.QueryFirst(x => x.SourceAddress == fromAdd);//&& x.TaskState == (int)TaskInStatusEnum.InNew
+                if (task != null)
+                {
+                    ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},浠诲姟宸茬敓鎴愬瓨鍦紝绋嶅悗閲嶈瘯......");
+                    continue;
+                }
+
+                // 鏌ヨ浠诲姟绫诲瀷瀵瑰簲鐨刢zTask
+                DtCZTask czTask = _taskCZRepository.QueryFirst(x => x.TaskType == taskType && (x.TaskStatus == TaskInStatusEnum.InFinish.ToString() || x.TaskStatus == TaskInStatusEnum.Line_InExecuting.ToString()));
+                if (czTask == null)
+                {
+                    ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},{taskType}浠诲姟涓嶅瓨鍦紝绋嶅悗閲嶈瘯......");
+                    continue;
+                }
+
+                // 鍒涘缓骞舵坊鍔犳柊浠诲姟鍒颁换鍔′粨搴�
+                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType, czTask.Id);
+                _taskRepository.AddData(task);
+                ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},浠诲姟宸茬敓鎴愶紝绛夊緟鎵ц......");
+            }
+        }
+
+        private void ProcessKpRequests(CommonConveyorLine conveyorLine, Dictionary<string, string> requestsKP)
+        {
+            foreach (var request in requestsKP)
+            {
+                var isDownRequest = conveyorLine.Communicator.Read<bool>(request.Key);
+                if (!isDownRequest)
+                {
+                    continue;
+                }
+
+                string fromAdd = request.Value;
+                string taskType = "璐熸瀬"; //request.Value.Contains("ZJXL") ? "姝f瀬" :
+
+                // 鏍规嵁浠诲姟绫诲瀷纭畾璇锋眰鍦板潃
+                (string upRequest, string gmRequest, string gmState) = GetRequestAddresses(taskType);
+
+                var isUpRequest = conveyorLine.Communicator.Read<bool>(upRequest);
+                var isGMRequest = conveyorLine.Communicator.Read<bool>(gmRequest);
+                var isGMState = conveyorLine.Communicator.Read<int>(gmState);
+
+                // 鏍规嵁鏉′欢鍒涘缓浠诲姟瀵硅薄
+                Dt_Task task = null;
+                if (isUpRequest)
+                {
+                    List<Dt_Task> dt_Task = _taskRepository.QueryData(x => x.SourceAddress == fromAdd && x.TaskState == (int)TaskInStatusEnum.InPending);
+                    if (dt_Task.Count < 0) { continue; }
+                    var tasks = dt_Task.Where(x => x.SourceAddress == fromAdd).OrderBy(t => t.CreateDate).First();
+                    tasks.TaskState = (int)TaskInStatusEnum.InNew;
+                    _taskService.UpdateData(tasks);
+                }
+                //else if (isGMRequest && isGMState == 1)
+                //{
+                //    task = CreateTask(fromAdd, "WaitBind", "姝f瀬鐗╂祦绾�002鐨勪笂鏂欒姹�", "闅旇啘绌烘墭鐩�", taskType);
+                //}
+
+                //// 娣诲姞浠诲姟鍒颁换鍔¤〃
+                //if (task != null)
+                //{
+                //    _taskRepository.AddData(task);
+                //}
+            }
+        }
+
+        private (string upRequest, string gmRequest, string gmState) GetRequestAddresses(string taskType)
+        {
+            if (taskType == "姝f瀬")
+            {
+                // 鐗╂祦绾�002鐨勪笂鏂欒姹�
+                return ("DB1002.93.0", "DB1002.2493.0", "DB1002.2424.0");
+            }
+            else
+            {
+                // 鐗╂祦绾�002鐨勪笂鏂欒姹�
+                return ("DB1002.1293.0", "DB1002.2893.0", "DB1002.2824.0");
+            }
+        }
+
+        // 杈呭姪鏂规硶锛氬垱寤轰换鍔″璞�
+        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType, int czTaskID = 0)
+        {
+            if (targetAddress != "WaitBind")
+            {
+                var details = _detailsRepository.QueryData(x => x.TaskEndAddress == targetAddress).ToList();
+                foreach (var item in details)
+                {
+                    var taskCZ = _taskCZRepository.QueryFirst(x => x.TaskTaskID == item.TaskTaskID);
+                    if (taskCZ.TaskType.Contains("姝f瀬"))
+                    {
+                        taskCZ.TaskZJFinishNumber += 1;
+                    }
+                    else
+                    {
+                        taskCZ.TaskFJFinishNumber += 1;
+                    }
+                    if (taskCZ.TaskZJFinishNumber == taskCZ.TaskNumber || taskCZ.TaskFJFinishNumber == taskCZ.TaskNumber)
+                    {
+                        _taskCZRepository.DeleteData(taskCZ);
+                    }
+
+                    var isTrue = _taskCZRepository.UpdateData(taskCZ);
+                }
+            }
+            Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == currentAddress);
+            if (dt_Task != null)
+            {
+                return null;
+            }
+            return new Dt_Task
+            {
+                TaskNum = _taskService.GetTaskNum(),
+                CreateDate = DateTime.Now,
+                Creater = "system",
+                CurrentAddress = currentAddress,
+                SourceAddress = currentAddress,
+                TaskState = targetAddress != "WaitBind" ? (int)TaskInStatusEnum.InNew : (int)TaskInStatusEnum.InPending,
+                TaskType = (int)TaskOutboundTypeEnum.Outbound,
+                Grade = 1,
+                PalletCode = palletCode,
+                TargetAddress = targetAddress,
+                NextAddress = targetAddress,
+                Barcode = "",
+                Roadway = $"{taskType}AGV",
+                WMSId = czTaskID > 0 ? czTaskID : 0,
+                Remark = remark
+            };
         }
 
         /// <summary>
@@ -229,4 +366,4 @@
             GC.SuppressFinalize(this);
         }
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3