From 97073e9e6d03114221436ee0aa1e143d6e2c4a09 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期一, 04 八月 2025 13:07:39 +0800
Subject: [PATCH] 出入库代码逻辑优化

---
 WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/ConveyorLineJob_BC.cs |  248 +++++++++++++++++++++++++------------------------
 1 files changed, 128 insertions(+), 120 deletions(-)

diff --git "a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs" "b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs"
index 66a01a9..7c15d14 100644
--- "a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs"
+++ "b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs"
@@ -80,170 +80,178 @@
                 }
                 List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                 List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
-                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
+                try
                 {
-                    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();
-
-                    if (deviceProRead != null && deviceProWrite != null)
+                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                     {
-                        R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
+                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
 
-                        W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress);
-                        if (conveyorLineInfoRead == null || conveyorLineInfoWrite == null)
+                        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)
                         {
-                            continue;
-                        }
+                            R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
 
-                        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);
-
-                        bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode);
-                        //ConveyorLineSignal conveyorLineSignalWrite = conveyorLineInfoWrite.Signal.ByteToBoolObject<ConveyorLineSignal>();
-
-
-                        if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
-                        {
-
-                            if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
+                            W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress);
+                            if (conveyorLineInfoRead == null || conveyorLineInfoWrite == null)
                             {
-                                if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//閲囪喘鍏ュ簱
-                                {
-                                    #region 鍏堟壘鍏佽鍏ュ簱鐨勮緭閫佺嚎鍏ュ彛
-                                    List<Dt_Router> routers = _routerRepository.QueryData(x => x.StartPosi == item.StationCode).ToList();
-                                    foreach (var rout in routers)
-                                    {
-                                        deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == rout.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-                                        if (deviceProRead != null)
-                                        {
-                                            R_ConveyorLineInfo conveyorLineInfoRead1 = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
-                                            R_ConveyorLineStatus conveyorLineStatus1 = conveyorLineInfoRead1.Status.ByteToBoolObject<R_ConveyorLineStatus>();
-                                            if (conveyorLineInfoRead1.Status == 6 && conveyorLineStatus1.Free && conveyorLineStatus1.Online && !conveyorLineStatus1.Goods)
-                                            {
+                                continue;
+                            }
 
-                                                #region 璇锋眰WMS鐢熸垚浠诲姟鍚庣粰杈撻�佺嚎鍚姩淇″彿
-                                                WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.Barcode, rout.NextPosi, conveyorLineInfoRead.Spare2);
-                                                if (content.Status)
+                            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);
+
+                            bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode);
+                            //ConveyorLineSignal conveyorLineSignalWrite = conveyorLineInfoWrite.Signal.ByteToBoolObject<ConveyorLineSignal>();
+
+
+                            if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
+                            {
+
+                                if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
+                                {
+                                    if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//閲囪喘鍏ュ簱
+                                    {
+                                        #region 鍏堟壘鍏佽鍏ュ簱鐨勮緭閫佺嚎鍏ュ彛
+                                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.StartPosi == item.StationCode).ToList();
+                                        foreach (var rout in routers)
+                                        {
+                                            deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == rout.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                                            if (deviceProRead != null)
+                                            {
+                                                R_ConveyorLineInfo conveyorLineInfoRead1 = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
+                                                R_ConveyorLineStatus conveyorLineStatus1 = conveyorLineInfoRead1.Status.ByteToBoolObject<R_ConveyorLineStatus>();
+                                                if (conveyorLineInfoRead1.Status == 6 && conveyorLineStatus1.Free && conveyorLineStatus1.Online && !conveyorLineStatus1.Goods)
                                                 {
-                                                    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)
+
+                                                    #region 璇锋眰WMS鐢熸垚浠诲姟鍚庣粰杈撻�佺嚎鍚姩淇″彿
+                                                    WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.Barcode, rout.NextPosi, conveyorLineInfoRead.Spare2);
+                                                    if (content.Status)
                                                     {
-                                                        _taskService.UpdateTask(task, TaskStatusEnum.RGV_NEW, sourceAddress: rout.StartPosi);
-                                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+                                                        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.RGV_NEW, sourceAddress: rout.StartPosi);
+                                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+                                                        }
+
                                                     }
-
+                                                    #endregion
                                                 }
-
-
-
-                                                #endregion
                                             }
                                         }
+                                        #endregion
                                     }
-                                    #endregion
-                                }
-                                else
-                                {
-                                    Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.RGV_Finish.ObjToInt());
-                                    if (task != null)
+                                    else
                                     {
-                                        _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.Roadway, sourceAddress: item.StackerCraneStationCode);
-
-                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
-
-                                    }
-
-                                }
-
-                            }
-                            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.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍑哄簱
-                            {
-                                Dt_Router routers = _routerRepository.QueryFirst(x => x.StartPosi == item.StationCode);
-                                if (routers != null)
-                                {
-
-                                    deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == routers.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-                                    if (deviceProRead != null)
-                                    {
-                                        conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
-
-                                        conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>();
-
-                                        if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Free && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍒ゆ柇鍑哄簱鍙f槸鍚︾┖闂�
+                                        Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.RGV_Finish.ObjToInt());
+                                        if (task != null)
                                         {
-                                            Dt_Task task = _taskRepository.QueryFirst(x => x.NextAddress == item.StationCode && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.New.ObjToInt());
-
-                                            if (task != null)
-                                            {
-                                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.Roadway, nextAddress: item.StackerCraneStationCode);
-                                            }
-                                        }
-
-                                        if (conveyorLineSignalRead.STB)
-                                        {
+                                            _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.Roadway, sourceAddress: item.StackerCraneStationCode);
                                             device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                         }
+
                                     }
 
+                                    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.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)
+                            else
                             {
-                                Dt_Router routers = _routerRepository.QueryFirst(x => x.StartPosi == item.StationCode);
-                                if (routers != null)
+                                if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍑哄簱
                                 {
-                                    deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == routers.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-                                    if (deviceProRead != null)
+                                    Dt_Router routers = _routerRepository.QueryFirst(x => x.StartPosi == item.StationCode);
+                                    if (routers != null)
                                     {
-                                        conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
 
-                                        conveyorLineStatus = conveyorLineInfoRead.Status.ByteToBoolObject<R_ConveyorLineStatus>();
-
-                                        conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>();
-
-                                        if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Free && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍒ゆ柇鍑哄簱鍙f槸鍚︾┖闂�
+                                        deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == routers.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                                        if (deviceProRead != null)
                                         {
-                                            Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && x.DeviceCode == device.DeviceCode && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt());
-                                            if (task != null)
+                                            R_ConveyorLineInfo conveyorLineInfoRead2 = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
+
+                                            ConveyorLineSignal conveyorLineSignalRead2 = conveyorLineInfoRead2.Signal.ByteToBoolObject<ConveyorLineSignal>();
+
+                                            if (!conveyorLineSignalRead2.STB && !conveyorLineSignalRead2.ACK && conveyorLineStatus.Online && conveyorLineStatus.Free && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//鍒ゆ柇鍑哄簱鍙f槸鍚︾┖闂�
                                             {
-                                                _taskService.UpdateTask(task, TaskStatusEnum.RGV_Execute, sourceAddress: item.StationCode, targetAddress: routers.NextPosi, nextAddress: routers.NextPosi);
+                                                Dt_Task task = _taskRepository.QueryFirst(x => x.NextAddress == item.StationCode && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.New.ObjToInt());
+
+                                                if (task != null)
+                                                {
+                                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.Roadway, nextAddress: item.StackerCraneStationCode);
+                                                }
+                                            }
+
+                                            if (conveyorLineSignalRead.STB)
+                                            {
                                                 device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                             }
                                         }
+
+                                    }
+                                }
+                                else if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)
+                                {
+                                    Dt_Router routers = _routerRepository.QueryFirst(x => x.StartPosi == item.StationCode);
+                                    if (routers != null)
+                                    {
+                                        deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == routers.NextPosi && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                                        if (deviceProRead != null)
+                                        {
+                                            R_ConveyorLineInfo conveyorLineInfoRead3 = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
+
+                                            R_ConveyorLineStatus conveyorLineStatus3 = conveyorLineInfoRead3.Status.ByteToBoolObject<R_ConveyorLineStatus>();
+
+                                            ConveyorLineSignal conveyorLineSignalRead3 = conveyorLineInfoRead3.Signal.ByteToBoolObject<ConveyorLineSignal>();
+
+                                            if (!conveyorLineSignalRead3.STB && !conveyorLineSignalRead3.ACK && conveyorLineStatus3.Online && conveyorLineStatus3.Free && !conveyorLineStatus3.Goods && !conveyorLineStatus3.Alarm && !STB && !ACK)//鍒ゆ柇鍑哄簱鍙f槸鍚︾┖闂�
+                                            {
+                                                Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && x.DeviceCode == device.DeviceCode && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt());
+                                                if (task != null)
+                                                {
+                                                    _taskService.UpdateTask(task, TaskStatusEnum.RGV_Execute, sourceAddress: item.StationCode, targetAddress: routers.NextPosi, nextAddress: routers.NextPosi);
+                                                    Thread.Sleep(100);
+                                                    device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
+                                                }
+                                            }
+                                        }
+
                                     }
 
                                 }
 
+
+                            }
+                            if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB)
+                            {
+                                device.SetValue(W_ConveyorLineDB.ACK, false, item.StationCode);
                             }
                             if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB)
                             {
                                 device.SetValue(W_ConveyorLineDB.ACK, false, item.StationCode);
                             }
+                            if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && ACK)
+                            {
+                                device.SetValue(W_ConveyorLineDB.ACK, false, item.StationCode);
+                            }
 
+                            //else
+                            //{
+                            //    WriteError(device.DeviceName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
+                            //}
                         }
-                        if (!conveyorLineSignalRead.STB && conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && STB && !ACK)
-                        {
-                            device.SetValue(W_ConveyorLineDB.STB, false, item.StationCode);
-                        }
-                        else
-                        {
-                            WriteError(device.DeviceName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
-                        }
+
                     }
-
                 }
+                catch (Exception)
+                {
+                }
+
 
 
             }

--
Gitblit v1.9.3