From 51af2794f47d5b68496edbc09d0ccb168347f02b Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期六, 22 十一月 2025 10:19:05 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs |  174 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 120 insertions(+), 54 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 426ae4d..c87ba04 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"
@@ -1,6 +1,9 @@
-锘縰sing Microsoft.AspNetCore.Routing;
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Routing;
 using Quartz;
 using SqlSugar;
+using System.Threading.Tasks;
+using WIDESEA_Comm.Http;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.Helper;
 using WIDESEAWCS_Common.TaskEnum;
@@ -15,6 +18,7 @@
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_TaskInfoService;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
@@ -30,6 +34,7 @@
         private readonly IRouterService _routerService;
         private readonly IRepository<Dt_Task> _taskRepository;
         private readonly IRepository<Dt_StationManger> _stationMangerRepository;
+
 
         public CommonConveyorLineJob(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository, IRouterRepository routerRepository, IRouterService routerService)
         {
@@ -47,45 +52,54 @@
             bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
             if (flag && value != null)
             {
-                OtherDevice device = (OtherDevice)value;
-                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
-                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
+                OtherDevice  device = (OtherDevice)value;
+                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();//鑾峰彇璁惧涓嬬殑绔欏彴
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); //鑾峰彇璁惧涓嬬殑绔欏彴
                 try
                 {
-                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
+                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode))) //寰幆璁惧涓嬬殑绔欏彴
                     {
-                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //杈撻�佺嚎璇诲彇鐨勫叏閮ㄥ崗璁�
 
-                        DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                        DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //杈撻�佺嚎鍐欏叆鐨勫叏閮ㄥ崗璁�
 
-                        if (deviceProRead != null && deviceProWrite != null)
+                        if (deviceProRead != null && deviceProWrite != null) //璇诲彇鍐欏叆鐨勫崗璁垽鏂槸鍚︿负null
                         {
-                            R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
+                            R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress); //璇诲彇鍗忚
 
-                            W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress);
+                            W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress); //鍐欏叆鍗忚
                             if (conveyorLineInfoRead == null || conveyorLineInfoWrite == null)
                             {
                                 continue;
                             }
 
-                            R_ConveyorLineStatus conveyorLineStatus = conveyorLineInfoRead.Status.ByteToBoolObject<R_ConveyorLineStatus>();
+                            R_ConveyorLineStatus conveyorLineStatus = conveyorLineInfoRead.Status.ByteToBoolObject<R_ConveyorLineStatus>(); //鑾峰彇璁惧鐘舵��
 
-                            ConveyorLineSignal conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>();
-                            bool ACK = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.ACK, item.StationCode);
+                            ConveyorLineSignal conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>(); //鑾峰彇璁惧淇″彿
+                            bool ACK = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.ACK, item.StationCode); //鑾峰彇ACK纭淇℃伅
 
-                            bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode);
+                            bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode); //鑾峰彇STB璇锋眰淇℃伅
                             //ConveyorLineSignal conveyorLineSignalWrite = conveyorLineInfoWrite.Signal.ByteToBoolObject<ConveyorLineSignal>();
                             //鍑哄簱绔欏彴
-                            if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
+                            if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())  //2007浜や簰鍙h繘鍏�
                             {
                                 // 鍑哄簱
-                                if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍑哄簱
+                                if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//2妤煎嚭搴�
                                 {
-                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//閲囪喘鍏ュ簱
+                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))
                                     {
-                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.EndPos, 2011, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.TaskNo, 1111, item.StationCode);
+
+                                        Dt_Task dt_Ta = _taskService.GetOutTaskInfo2(conveyorLineInfoRead.Barcode);
+                                        if (dt_Ta != null)
+                                        {
+                                            device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
+                                            bool endpos = device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.OutboundPlatform, item.StationCode);
+                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+
+
+                                            //鍒犻櫎浠诲姟
+                                            _taskRepository.DeleteData(dt_Ta);
+                                        }
                                     }
                                 }
                                 else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && ACK)
@@ -94,34 +108,28 @@
                                 }
                             }
                             //鍑哄叆搴撶珯鍙�
-                            if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt())
+                            else if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt())
                             {
-                                //鍏ュ簱鐢熸垚鍫嗗灈鏈哄叆搴撲换鍔�
+                                //杈撻�佺嚎瀹屾垚淇敼鎴愯緭閫佺嚎瀹屾垚鐘舵�佸緟鍫嗗灈鏈烘墽琛屼换鍔�
                                 if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
                                 {
-                                    if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//閲囪喘鍏ュ簱
+                                    Dt_Task dt_Task = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode);
+                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode)&& dt_Task !=null)
                                     {
-                                        WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.Barcode, item.StationCode);
-                                        if (content.Status)
+                                        bool ack = device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+                                        bool taskno = device.SetValue(W_ConveyorLineDB.TaskNo,1, item.StationCode);
+                                        WebResponseContent contentweb = _taskService.UpdateTaskIninfo(conveyorLineInfoRead.Barcode,item.StationCode); //鏍规嵁鏉$爜璺熻澶囩紪鍙峰幓鏌ヨ骞朵慨鏀逛换鍔�
+                                        if (contentweb.Status)
                                         {
-                                            Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == conveyorLineInfoRead.Barcode && x.CurrentAddress == item.StationCode && x.DeviceCode == device.DeviceCode && x.TaskState == TaskStatusEnum.New.ObjToInt());
-                                            if (task != null)
-                                            {
-                                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: item.StackerCraneCode, sourceAddress: item.StackerCraneStationCode);
-                                                device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
-                                                device.SetValue(W_ConveyorLineDB.TaskNo, 1111, item.StationCode);
-                                                //_taskService.UpdateTask(task, TaskStatusEnum.RGV_NEW);
-                                            }
 
                                         }
                                     }
-
                                 }
                                 else if (!conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && ACK)
                                 {
                                     device.SetValue(W_ConveyorLineDB.ACK, false, item.StationCode);
                                 }
-                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Free && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK && conveyorLineInfoRead.TaskNo == 0)//鍑哄簱
+                                /*else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Free && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK && conveyorLineInfoRead.TaskNo == 0)//鍑哄簱
                                 {
                                     Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode == item.StationDeviceCode && _taskService.TaskOutboundTypes.Contains(x.TaskType));
                                     if (task != null )
@@ -151,18 +159,37 @@
                                             }
                                         }
                                     }
-                                }
-                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK && conveyorLineInfoRead.TaskNo == 0)//鍑哄簱
+                                }*/
+                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍏朵粬妤煎眰鍑哄簱
                                 {
-                                    Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt());
-                                    if (task != null)
-                                    {
-                                        //鍫嗗灈鏈轰换鍔″畬鎴愪笅涓�鍦板潃鏀规垚杈撻�佺嚎涓嬩竴鍦板潃锛岃澶囩紪鍙锋敼鎴愯緭閫佺嚎
-                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
+                                    
+                                    Dt_Task dt_Ta = _taskService.GetOutTaskInfo(item.StationCode);  //鑾峰彇鍑哄簱浠诲姟
 
-                                        device.SetValue(W_ConveyorLineDB.TaskNo, task.TaskNum, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
+
+                                    if (dt_Ta != null)
+                                    {
+                                        bool taskno = device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
+                                        bool endpos = device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.OutboundPlatform, item.StationCode);
+                                        bool stb = device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
+
+                                            if (taskno && endpos && stb)
+                                            {
+                                            //鍫嗗灈鏈轰换鍔″畬鎴愪笅涓�鍦板潃鏀规垚杈撻�佺嚎涓嬩竴鍦板潃锛岃澶囩紪鍙锋敼鎴愯緭閫佺嚎
+                                            WebResponseContent webResponse = _taskService.UpdateTaskStatusToNext(dt_Ta.TaskNum);
+                                            if (webResponse.Status)
+                                            {
+                                                if (dt_Ta.TargetAddress != "2021" && dt_Ta.TargetAddress != "2020")
+                                                {
+                                                    //鍒犻櫎浠诲姟
+                                                    bool res = _taskRepository.DeleteData(dt_Ta);
+                                                    if (res)
+                                                    {
+                                                        TaskService.AddTaskHistory(dt_Ta);
+                                                    }
+                                                }
+                                            }
+                                        }
+                                        
                                     }
 
                                 }
@@ -170,19 +197,38 @@
                                 else if (!conveyorLineSignalRead.STB && conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && STB && !ACK)
                                 {
                                     device.SetValue(W_ConveyorLineDB.STB, false, item.StationCode);
-                                }
+                                }//娓呮纭淇″彿
 
                             }
                             //鍏ュ簱绔欏彴
-                            if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
+                            else if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt()) //2014浜や簰鍙�
                             {
                                 if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
                                 {
-                                    if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//閲囪喘鍏ュ簱
+                                    Dt_Task dt_Task = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode);
+
+                                    if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode)&& dt_Task != null)//閲囪喘鍏ュ簱
                                     {
-                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.EndPos, 2020, item.StationCode);
-                                        device.SetValue(W_ConveyorLineDB.TaskNo, 1111, item.StationCode);
+                                        Dt_Task dt_Ta = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode); //閫氳繃鏉$爜鍘绘煡璇换鍔�
+                                        //if (dt_Ta.SourceAddress == "2021" || dt_Ta.SourceAddress == "2020")
+                                        //{
+                                        //    bool IsOccupied2008 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2008");
+                                        //    bool IsOccupied2009 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2009");
+                                        //    bool IsOccupied2015 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2015");
+                                        //    bool IsOccupied2016 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2016");
+                                        //    //鍒ゆ柇鏄惁鎴愮珛
+                                        //    if (IsOccupied2008 || IsOccupied2009 || IsOccupied2015 || IsOccupied2016)
+                                        //    {
+                                        //        return null;
+                                        //    }
+                                        //}
+                                        if (dt_Ta != null)
+                                        {
+                                            bool endpos = device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.SourceAddress, item.StationCode);
+                                            bool taskno = device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
+                                            bool ack = device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+                                        }
+                                       
                                     }
 
 
@@ -194,10 +240,9 @@
                             }
                             }
                         }
-
                     }
-                }
-                catch (Exception)
+
+                catch (Exception ex)
                 {
                 }
 
@@ -206,5 +251,26 @@
             }
             return Task.CompletedTask;
         }
+
+        //鑾峰彇鎷i�夌姸鎬佹湁鏃犺揣鐘舵��
+        public static bool GetPick()
+        {
+            //bool IsOccupied2008 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2008");
+            //bool IsOccupied2009 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2009");
+            //bool IsOccupied2015 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2015");
+            //bool IsOccupied2016 = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2016");
+
+            ////鍒ゆ柇鏄惁鎴愮珛
+            //if (IsOccupied2008&&IsOccupied2009&&IsOccupied2015&&IsOccupied2016)
+            //{
+            //    return false;
+            //}
+            //else
+            //{
+            //    return true;
+            //}
+
+            return true;
+        }
     }
 }

--
Gitblit v1.9.3