From 3148a5c11b47ccbda05b8cf4b7fc445318eb13f5 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 19 一月 2026 16:32:12 +0800
Subject: [PATCH] 入库分配巷道逻辑更改,码垛程序优化等

---
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/ConveyorLineJob_YL1ndFloor.cs          |   22 +++
 项目代码/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs                       |    9 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs        |   12 +
 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs    |    9 +
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs                      |   22 +++
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs |    7 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC3.cs               |   14 ++
 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs                   |   28 ++++
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPB.cs                 |   30 ++-
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC2.cs               |   14 ++
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs            |   51 +++---
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs              |  114 +++++++++++++++-
 项目资料/通信协议/原料库输送线故障读取.xls                                                         |    0 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/码垛/MDJob_CP.cs                             |   16 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs                        |    5 
 项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs                    |    5 
 项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs                 |    5 
 17 files changed, 313 insertions(+), 50 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
index c155e56..d0a2ab1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
@@ -32,6 +32,11 @@
         StationType_InStartAndOutEnd = 33,
 
         /// <summary>
+        /// 宸烽亾
+        /// </summary>
+        StationType_RoadwayError = 81,
+
+        /// <summary>
         /// 鍙犵洏鍙枡绔欏彴
         /// </summary>
         StationType_StackingPlates = 91,
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
index 55d9cf3..1cce4b3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
@@ -82,4 +82,13 @@
         /// </summary>
         public string WorkCentreCode { get; set; }
     }
+    public class RoadwayError
+    {
+        public static List<ErrorDeviceInfo> Roadways = new List<ErrorDeviceInfo>();
+    }
+    public class ErrorDeviceInfo
+    {
+        public string Code { get; set; }
+        public string Roadway { get; set; }
+    }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index 3051118..025ed12 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -130,7 +130,10 @@
         /// <param name="roadwayNo">宸烽亾鍙�</param>
         /// <returns></returns>
         string? RequestAssignLocation(int taskNum, string roadwayNo);
-
+        /// <summary>
+        /// 鍚慦MS鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
+        /// </summary>
+        WebResponseContent RequestInBoundPalletCode(int taskNum, string barCode);
         /// <summary>
         /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
         /// </summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index 367dc18..002d2f5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -1,4 +1,5 @@
-锘縰sing HslCommunication.WebSocket;
+锘縰sing Autofac.Core;
+using HslCommunication.WebSocket;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
@@ -165,5 +166,14 @@
                 return content.Error(ex.Message);
             }
         }
+        /// <summary>
+        /// 鑾峰彇鏁呴殰宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("ExistRoadwaysError"), AllowAnonymous]
+        public List<string> ExistRoadwaysError()
+        {
+            return RoadwayError.Roadways.Select(x => x.Roadway).Distinct().ToList();
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 3ca6b74..a80095d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -609,6 +609,34 @@
             return "";
         }
         /// <summary>
+        /// 鍚慦MS鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public WebResponseContent RequestInBoundPalletCode(int taskNum,string barCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
+                string responseStr = HttpHelper.Get($"{address}/api/Task/InBoundPalletCode?taskNum={taskNum}&barCode={barCode}");
+                WebResponseContent responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("鏈敹鍒拌繑鍥炲弬鏁�");
+                if (!responseContent.Status)
+                {
+                    return responseContent;
+                }
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+            
+        }
+        /// <summary>
         /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
         /// </summary>
         /// <param name="taskNum">浠诲姟鍙�</param>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
index 8c9dfc2..cd215b5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
@@ -343,6 +343,13 @@
             set { _barcode = value.Replace("\0", "").Replace("\\0", ""); }
         }
     }
+    public class R_ErrorYLDB : DeviceCommand
+    {
+        /// <summary>
+        /// 鏁呴殰
+        /// </summary>
+        public short R_Error { get; set; }
+    }
     public class W_RGVCPInfo : DeviceCommand
     {
         /// <summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
index 3cb75a6..41be831 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
@@ -12,6 +12,7 @@
 using WIDESEAWCS_Communicator;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
@@ -73,6 +74,7 @@
                 foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                 {
                     DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(WR_CLineYLDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                    DeviceProDTO? deviceErrRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ErrorYLDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                     if (deviceProRead != null)
                     {
                         R_ConveyorLineYLInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineYLInfo>(deviceProRead.DeviceProAddress);
@@ -221,6 +223,26 @@
                             }
                         }
                     }
+                    else if (deviceErrRead!=null)
+                    {
+                        R_ErrorYLDB errorYLDB = device.Communicator.ReadCustomer<R_ErrorYLDB>(deviceErrRead.DeviceProAddress);
+                        if (errorYLDB != null && errorYLDB.R_Error==2)
+                        {
+                            ErrorDeviceInfo? errorDeviceInfo = RoadwayError.Roadways.FirstOrDefault(x=>x.Code==item.StationCode);
+                            if (errorDeviceInfo==null)
+                            {
+                                RoadwayError.Roadways.Add(new ErrorDeviceInfo() { Code = item.StationCode, Roadway = item.StackerCraneCode });
+                            }
+                        }
+                        else if(errorYLDB != null && errorYLDB.R_Error == 1)
+                        {
+                            ErrorDeviceInfo? deviceInfo = RoadwayError.Roadways.FirstOrDefault(x => x.Code == item.StationCode);
+                            if (deviceInfo != null)
+                            {
+                                RoadwayError.Roadways.Remove(deviceInfo);
+                            }
+                        }
+                    }
                     else
                     {
                         WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
index 4926ef0..94c1ebe 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
@@ -25,6 +25,7 @@
 using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.StackerCrane;
+using WIDESEAWCS_DTO.TaskInfo;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -90,6 +91,19 @@
                                     }
                                 }
                             }
+                            ErrorDeviceInfo? deviceInfo = RoadwayError.Roadways.FirstOrDefault(x => x.Code == commonStackerCrane.DeviceCode);
+                            if (deviceInfo != null)
+                            {
+                                RoadwayError.Roadways.Remove(deviceInfo);
+                            }
+                        }
+                        else
+                        {
+                            ErrorDeviceInfo? deviceInfo = RoadwayError.Roadways.FirstOrDefault(x => x.Code == commonStackerCrane.DeviceCode);
+                            if (deviceInfo==null)
+                            {
+                                RoadwayError.Roadways.Add(new ErrorDeviceInfo() { Code = commonStackerCrane.DeviceCode, Roadway = commonStackerCrane.DeviceCode });
+                            }
                         }
                     }
                 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
index ff16b81..3614307 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC3.cs"
@@ -26,6 +26,7 @@
 using HslCommunication.WebSocket;
 using WIDESEAWCS_DTO.Equipment;
 using WIDESEAWCS_QuartzJob.StackerCrane;
+using WIDESEAWCS_DTO.TaskInfo;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -95,6 +96,19 @@
                                     }
                                 }
                             }
+                            ErrorDeviceInfo? deviceInfo = RoadwayError.Roadways.FirstOrDefault(x => x.Code == commonStackerCrane.DeviceCode);
+                            if (deviceInfo != null)
+                            {
+                                RoadwayError.Roadways.Remove(deviceInfo);
+                            }
+                        }
+                        else
+                        {
+                            ErrorDeviceInfo? deviceInfo = RoadwayError.Roadways.FirstOrDefault(x => x.Code == commonStackerCrane.DeviceCode);
+                            if (deviceInfo == null)
+                            {
+                                RoadwayError.Roadways.Add(new ErrorDeviceInfo() { Code = commonStackerCrane.DeviceCode, Roadway = commonStackerCrane.DeviceCode });
+                            }
                         }
                     }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
index 38bcce7..026554b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
@@ -101,16 +101,24 @@
                                             WriteError(item.StationName, $"璺敱淇℃伅閰嶇疆閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
                                             continue;
                                         }
-                                        device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode);
-                                        device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode);
-                                        device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
-                                        task.CurrentAddress = item.StationCode;
-                                        task.NextAddress = router.NextPosi;
-                                        task.PalletCode = conveyorLineInfoRead.PalletCode;
-                                        task.Roadway = roadWay;
-                                        task.DeviceCode = router.ChildPosiDeviceCode;
-                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
-                                        WriteInfo(item.StationName, $"浠诲姟鍙穥conveyorLineInfoRead.TaskNo}涓嬩竴姝�");
+                                        WebResponseContent responseContent = _taskService.RequestInBoundPalletCode(task.TaskNum, conveyorLineInfoRead.PalletCode.Trim());
+                                        if (responseContent.Status)
+                                        {
+                                            device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode);
+                                            device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode);
+                                            device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
+                                            task.CurrentAddress = item.StationCode;
+                                            task.NextAddress = router.NextPosi;
+                                            task.PalletCode = conveyorLineInfoRead.PalletCode.Trim();
+                                            task.Roadway = roadWay;
+                                            task.DeviceCode = router.ChildPosiDeviceCode;
+                                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
+                                            WriteInfo(item.StationName, $"浠诲姟鍙穥task.TaskNum}涓嬩竴姝ュ埌杈緖router.NextPosi}鍏ュ簱绔欏彴");
+                                        }
+                                        else
+                                        {
+                                            WriteError(item.StationName, $"浠诲姟鍙穥task.TaskNum}鎵爜璇锋眰閿欒{responseContent.Message}");
+                                        }
                                     }
                                     else
                                     {
@@ -212,7 +220,7 @@
                                 }
                             }
                         }
-                        else if (item.StationType == StationTypeEnum.StationType_StackingPlates.ObjToInt() && deviceProRead != null && deviceProWrite != null)
+                        else if (item.StationType == StationTypeEnum.StationType_StackingPlates.ObjToInt() && item.IsOccupied==StationOccupiedEnum.None.ObjToInt() && deviceProRead != null && deviceProWrite != null)
                         {//鍙犵洏鏈哄伐浣嶅彨鏂�
                             R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
index 6209a7d..9882eeb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
@@ -74,7 +74,7 @@
                 if (flag && value != null)
                 {
                     OtherDevice device = (OtherDevice)value;
-                    List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StackerCraneCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && x.IsOccupied == 0);
+                    List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StackerCraneCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt());
                     //鑾峰彇鍗忚
                     DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                     DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
@@ -93,6 +93,7 @@
                             #endregion
                             //鐮佸灈鐘舵��
                             short PackState = device.GetValue<R_MDDB, short>(GetPackStateEnum(item.StackerCraneStationCode), item.StackerCraneCode);
+                            short PackSendState = device.GetValue<W_MDDB, short>(GetPackSendEnum(item.StackerCraneStationCode), item.StackerCraneCode);
                             //鐮佸灈鏁伴噺
                             short PackNum = device.GetValue<R_MDDB, short>(GetPackNumEnum(item.StackerCraneStationCode), item.StackerCraneCode);
                             if ((R_MDStatus1 == 1 || R_MDStatus2 == 1 || R_MDStatus3 == 1 || R_MDStatus4 == 1) && Allow == 4)
@@ -105,11 +106,18 @@
                                 }
                                 continue;
                             }
-                            if (PackState == 2)
+                            if (PackState == 2 && PackSendState == 2)
                             {
                                 Thread.Sleep(200);
-                                device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 0);
-                                WriteInfo(item.StationName, $"{item.StationName}娓呴櫎宸ヤ綅缁撴墭淇″彿");
+                                device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 4);
+                                WriteInfo(item.StationName, $"{item.StationName}鍐欏叆娓呮墭淇″彿");
+                                continue;
+                            }
+                            if (PackState == 4 && PackSendState == 4)
+                            {
+                                Thread.Sleep(200);
+                                device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 0);
+                                WriteInfo(item.StationName, $"{item.StationName}娓呮墭淇″彿澶嶄綅");
                                 continue;
                             }
                             //鑾峰彇褰撳墠宸ヤ綅鐮佸灈鎵ц涓暟鎹�
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
index 1a0fbeb..4d11768 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -276,5 +276,10 @@
         /// <returns></returns>
         WebResponseContent DisableStatus(int[] keys);
         WebResponseContent BoxingInBound(string stationCode, List<string> barCodes);
+        /// <summary>
+        /// 鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent InBoundPalletCode(int taskNum, string barCode);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
index 517040a..3955caa 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
@@ -136,6 +136,28 @@
             }
         }
         /// <summary>
+        /// 浠诲姟淇℃伅鎺ㄩ�佽嚦WCS
+        /// </summary>
+        /// <returns></returns>
+        public List<string> ExistRoadwaysError()
+        {
+            try
+            {
+                string url = AppSettings.Get("WCS");
+                if (string.IsNullOrEmpty(url))
+                {
+                    return null;
+                }
+                string response = HttpHelper.Get($"{url}/api/Task/ExistRoadwaysError");
+
+                return JsonConvert.DeserializeObject<List<string>>(response) ?? throw new Exception("杩斿洖閿欒");
+            }
+            catch (Exception ex)
+            {
+                return null;
+            }
+        }
+        /// <summary>
         /// 鏀捐揣瀹屾垚
         /// </summary>
         /// <param name="code"></param>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
index a134326..4e1cebf 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
@@ -108,6 +108,14 @@
                     wmsTask.Dispatchertime = task.Dispatchertime;
                     wmsTask.TaskType = task.TaskType;
                     wmsTask.TargetAddress = task.TargetAddress;
+                    ////鎴愬搧鍏ュ簱鏇存柊鎵樼洏鏉$爜
+                    //if (wmsTask.TaskType == TaskTypeEnum.InProduct.ObjToInt() && oldPalletCode != task.PalletCode)
+                    //{
+                    //    Dt_ProStockInfo stockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == oldPalletCode);
+                    //    //鍒ゆ柇閲嶅鎵樼洏
+                    //    stockInfo.PalletCode = task.PalletCode;
+                    //    _stockRepository.ProStockInfoRepository.UpdateData(stockInfo);
+                    //}
                     BaseDal.UpdateData(wmsTask);
                     //鎺ㄩ�丮ES鎺ラ┏鎴愬姛鎺ュ彛
                     if (wmsTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && !wmsTask.WorkCentreCode.IsNullOrEmpty() && wmsTask.TaskStatus == TaskStatusEnum.AGV_TakeFinish.ObjToInt())
@@ -134,31 +142,24 @@
                         };
                     }
                     //鎺ㄩ�丒RP鍗婃垚鍝佸叆搴�
-                    if (wmsTask.TaskType>=TaskTypeEnum.WFBYLInbound.ObjToInt() && wmsTask.TaskType <= TaskTypeEnum.PrintYLInbound.ObjToInt() && wmsTask.TaskStatus==TaskStatusEnum.AGV_TakeFinish.ObjToInt())
-                    {
-                        Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x=>x.PalletCode== wmsTask.PalletCode);
-                        string request = _invokeERPService.ERPSemiProInUp(
-                            new ERPProInUpModel()
-                            {
-                                PB_INV_PRODUCT_IN = new List<PB_INV_PRODUCT_INItem>()
-                                {
-                                    new PB_INV_PRODUCT_INItem()
-                                    {
-                                        WP_ID = 0,
-                                        INV_BARCODE = wmsTask.PalletCode,
-                                        REMARK = "鍗婃垚鍝佸叆搴�",
-                                        QTY=(int)stockInfo.StockLength
-                                    }
-                                }
-                            }) ?? throw new Exception("鍗婃垚鍝佸叆搴撴帴鍙h姹傚け璐�");
-                    }
-                    //鎴愬搧鍏ュ簱鏇存柊鎵樼洏鏉$爜
-                    if (wmsTask.TaskType == TaskTypeEnum.InProduct.ObjToInt() && oldPalletCode!=task.PalletCode)
-                    {
-                        Dt_ProStockInfo stockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == oldPalletCode);
-                        stockInfo.PalletCode = task.PalletCode;
-                        _stockRepository.ProStockInfoRepository.UpdateData(stockInfo);
-                    }
+                    //if (wmsTask.TaskType>=TaskTypeEnum.WFBYLInbound.ObjToInt() && wmsTask.TaskType <= TaskTypeEnum.PrintYLInbound.ObjToInt() && wmsTask.TaskStatus==TaskStatusEnum.AGV_TakeFinish.ObjToInt())
+                    //{
+                    //    Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x=>x.PalletCode== wmsTask.PalletCode);
+                    //    string request = _invokeERPService.ERPSemiProInUp(
+                    //        new ERPProInUpModel()
+                    //        {
+                    //            PB_INV_PRODUCT_IN = new List<PB_INV_PRODUCT_INItem>()
+                    //            {
+                    //                new PB_INV_PRODUCT_INItem()
+                    //                {
+                    //                    WP_ID = 0,
+                    //                    INV_BARCODE = wmsTask.PalletCode,
+                    //                    REMARK = "鍗婃垚鍝佸叆搴�",
+                    //                    QTY=(int)stockInfo.StockLength
+                    //                }
+                    //            }
+                    //        }) ?? throw new Exception("鍗婃垚鍝佸叆搴撴帴鍙h姹傚け璐�");
+                    //}
                 }
                 return WebResponseContent.Instance.OK();
             }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index ff193fb..c95cf6f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -826,6 +826,12 @@
         {
             try
             {
+                List<string> roadways = ExistRoadwaysError();
+                bool ErrorRoadway = false;
+                if (roadways!=null && roadways.Count>0)
+                {
+                    ErrorRoadway = true;
+                }
                 Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
                 if (stockInfo==null)
                 {
@@ -861,8 +867,7 @@
                         {
                             locationCounts = locationCounts.Where(x => x.RoadwayNo != "SC03_YLDual").ToList();
                         }
-                        
-                        roadwayNo = HandleRoadway(locationCounts, warehouse);
+                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                     }
                 }
                 else
@@ -872,6 +877,7 @@
                     {
                         bool LayerLimit = stockInfo.CheckThickness > 1300;
                         bool RoadwayLimit = stockInfo.MaterielWide > 2200;
+                        bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt();
                         var query = Db.Queryable<Dt_LocationInfo>()
                             .Where(x => x.WarehouseId == warehouse.WarehouseId
                                 && x.LocationStatus == (int)LocationStatusEnum.Free
@@ -897,15 +903,46 @@
                             })
                             .OrderBy(x => x.RoadwayNo)
                             .ToList();
-
-                        roadwayNo = HandleRoadway(locationCounts, warehouse);
+                        if (RoadwayType)
+                        {
+                            foreach (var item in locationCounts)
+                            {
+                                if (item.RoadwayNo.Contains("YLDual"))
+                                {
+                                    int count = Db.Queryable<Dt_LocationInfo>()
+                                    .Where(x => x.WarehouseId == warehouse.WarehouseId
+                                        && x.LocationStatus == (int)LocationStatusEnum.Free
+                                        && x.EnableStatus == (int)EnableStatusEnum.Normal
+                                        && x.LocationType==LocationTypeEnum.MediumPallet.ObjToInt()
+                                        && x.RoadwayNo == item.RoadwayNo).Count();
+                                    item.Count = count;
+                                }
+                            }
+                        }
+                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                     }
                     else if (stockInfo.CheckThickness >= 400 && stockInfo.CheckThickness < 800 && stockInfo.MaterielWide >= 700 && stockInfo.MaterielWide <= 2500)
                     {
+                        bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt();
                         //鑾峰彇鍒嗛厤
                         List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.RoadwayNo.Contains("YLDual") && (stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt() ? x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() : x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt())).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).OrderBy(x => x.RoadwayNo).ToList();
-
-                        roadwayNo = HandleRoadway(locationCounts, warehouse);
+                        if (RoadwayType)
+                        {
+                            foreach (var item in locationCounts)
+                            {
+                                if (item.RoadwayNo.Contains("YLDual"))
+                                {
+                                    int count = Db.Queryable<Dt_LocationInfo>()
+                                    .Where(x => x.WarehouseId == warehouse.WarehouseId
+                                        && x.LocationStatus == (int)LocationStatusEnum.Free
+                                        && x.EnableStatus == (int)EnableStatusEnum.Normal
+                                        && x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt()
+                                        && x.RoadwayNo == item.RoadwayNo).Count();
+                                    item.Count = count;
+                                }
+                            }
+                        }
+                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                     }
                 }
 
@@ -923,12 +960,17 @@
             }
         }
         //澶勭悊鍒嗛厤宸烽亾 浠诲姟鏁伴噺
-        public string HandleRoadway(List<LocationCount> locationCounts, Dt_Warehouse warehouse)
+        public string HandleRoadway(List<LocationCount> locationCounts, Dt_Warehouse warehouse,List<string> roadways=null)
         {
+            if (roadways != null)
+            {
+                locationCounts = locationCounts.Where(x => !roadways.Contains(x.RoadwayNo)).ToList();
+            }
             //宸烽亾浠诲姟鍒嗛厤鏁伴噺
             List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId
             && locationCounts.Select(j => j.RoadwayNo).Distinct().Contains(x.Roadway)
             && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
+            
             foreach (var item in locationCounts)
             {
                 LocationCount? count = useLocationCounts.FirstOrDefault(x => x.RoadwayNo == item.RoadwayNo);
@@ -1847,8 +1889,26 @@
                 List<Dt_Task> tasks = new List<Dt_Task>();
                 _unitOfWorkManage.BeginTran();
                 _inboundRepository.MESProInOrderInfoRepository.AddData(AddMESProInOrders);
-                if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).Count() > 0)
+                List<Dt_MESProInOrderInfo> mESProInOrderInfos = AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList();
+                if (mESProInOrderInfos.Count > 0)
                 {
+                    List<PB_INV_PRODUCT_INItem> pRODUCT_INItems = new List<PB_INV_PRODUCT_INItem>();
+                    foreach (var item in mESProInOrderInfos)
+                    {
+                        PB_INV_PRODUCT_INItem pB_INV_PRODUCT_INItem = new PB_INV_PRODUCT_INItem()
+                        {
+                            WP_ID = item.ProcessNum,
+                            INV_BARCODE=item.BarCode,
+                            REMARK = "鍗婃垚鍝佸叆搴�",
+                            QTY=(int)item.ProQuantity
+                        };
+                        pRODUCT_INItems.Add(pB_INV_PRODUCT_INItem);
+                    }
+                    string request = _invokeERPService.ERPSemiProInUp(
+                            new ERPProInUpModel()
+                            {
+                                PB_INV_PRODUCT_IN= pRODUCT_INItems
+                            }) ?? throw new Exception("鍗婃垚鍝佸叆搴撴帴鍙h姹傚け璐�");
                     //鐢熸垚鍗婃垚鍝佸叆搴�
                     WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList());
                     if (!webResponse.Status)
@@ -2087,5 +2147,43 @@
             }
             return content;
         }
+        /// <summary>
+        /// 鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent InBoundPalletCode(int taskNum, string barCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇褰撳墠浠诲姟
+                Dt_Task? taskExist = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (taskExist==null)
+                {
+                    return content.Error($"鏈壘鍒颁换鍔taskNum}");
+                }
+                //鍒ゆ柇搴撳瓨涓槸鍚﹀瓨鍦ㄩ噸澶嶆墭鐩樻潯鐮�
+                Dt_ProStockInfo? proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x=>x.PalletCode==barCode);
+                if (proStockInfo!=null)
+                {
+                    return content.Error($"搴撳瓨鏉$爜{proStockInfo.PalletCode}宸插瓨鍦�");
+                }
+                Dt_ProStockInfo proStockInfoExist = _stockRepository.ProStockInfoRepository.QueryFirst(x=>x.PalletCode== taskExist.PalletCode);
+                //鏇存柊
+                proStockInfoExist.PalletCode = barCode;
+                taskExist.PalletCode = barCode;
+                _unitOfWorkManage.BeginTran();
+                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfoExist);
+                BaseDal.UpdateData(taskExist);
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index ef7c6a1..cafc5b2 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -334,5 +334,14 @@
         {
             return Service.BoxingInBound(stationCode, barCodes);
         }
+        /// <summary>
+        /// 鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鎵樼洏鏉$爜
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("InBoundPalletCode"), AllowAnonymous]
+        public WebResponseContent InBoundPalletCode(int taskNum, string barCode)
+        {
+            return Service.InBoundPalletCode(taskNum, barCode);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\346\225\205\351\232\234\350\257\273\345\217\226.xls" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\346\225\205\351\232\234\350\257\273\345\217\226.xls"
new file mode 100644
index 0000000..96703fb
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\346\225\205\351\232\234\350\257\273\345\217\226.xls"
Binary files differ

--
Gitblit v1.9.3