From 26f88473f470ab34f46d95642035a4e5f6b69847 Mon Sep 17 00:00:00 2001
From: 刘磊 <1161824510@qq.com>
Date: 星期四, 15 一月 2026 13:53:10 +0800
Subject: [PATCH] 同步

---
 项目代码/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs                    |   11 
 项目代码/WMS/WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs                                 |    4 
 项目代码/WMS/WMSClient/src/router/tables.js                                                 |   10 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/MES/MESController.cs                   |   17 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs           |   14 
 项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs          |   83 +-
 项目代码/WMS/WMSServer/WIDESEA_Core/Const/ConfigConst.cs                                    |    7 
 项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs            |  195 ++----
 项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration_detail.cs         |   62 ++
 项目代码/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_BDCConfiguration.vue              |   86 +++
 项目代码/WMS/WMSServer/WIDESEA_Common/MES/Request/CarCharacteristicInfo.cs                  |    0 
 项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration.cs                |   34 
 项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs               |   71 +
 项目代码/WMS/WMSServer/WIDESEA_Common/MES/GetCarCharacteristicInfo.cs                       |   45 +
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/preBind.cs             |    4 
 项目代码/WCS/WCSServer/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs              |    2 
 项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/BDCManager/BDCManager.cs                 |    7 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs       |    6 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushOrderInfo.cs       |    7 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushWorkOrderInfo.cs   |   38 +
 项目代码/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/Common/STK.cs                      |  293 ++++++++++
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/getCharacteristic.cs   |   73 ++
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_BDCConfigurationService.cs |    4 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs     |   16 
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs                  |    4 
 项目代码/WMS/WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs                  |    2 
 项目代码/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs                   |   36 
 项目代码/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/MES/IMESService.cs                |   36 +
 项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs                                         |  364 +++++++++++++
 项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs           |    7 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs                      |   12 
 项目代码/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_BDCConfiguration.js           |   67 ++
 项目代码/WMS/WMSServer/WIDESEA_Common/MES/Request/pushWorkOrderInfo.cs                      |    8 
 项目代码/WMS/WMSServer/WIDESEA_Common/MES/Request/IssuedCharacterInfo.cs                    |    7 
 项目代码/WMS/WMSClient/src/views/widesea_wms/OrderInfo/Dt_AssemblyOrderInfo.vue             |    2 
 35 files changed, 1,352 insertions(+), 282 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs"
index 2cf97b5..1ffbf17 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs"
@@ -220,7 +220,7 @@
         public T ReadCustomer<T>(string deviceChildCode) where T : IDataTransfer, new()
         {
             if (!IsConnected) throw new Exception($"{deviceChildCode}閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
-            DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == "DeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+            DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == "ReadDeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
 
             if (devicePro == null)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/Common/STK.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/Common/STK.cs"
new file mode 100644
index 0000000..adca8bd
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/Common/STK.cs"
@@ -0,0 +1,293 @@
+锘縰sing HslCommunication;
+using System.ComponentModel;
+using System.Reflection;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.StackerCrane;
+using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+
+namespace WIDESEAWCS_QuartzJob
+{
+    /// <summary>
+    /// 涓�鑸爢鍨涙満瀹炵幇绫伙紝瀹炵幇鍫嗗灈鏈烘帴鍙e眰
+    /// </summary>
+    [Description("鍫嗗灈鏈�")]
+    public class STK : IStackerCrane
+    {
+        #region Private Member
+
+        /// <summary>
+        /// 瀹屾垚淇″彿绛夊緟鏃堕棿
+        /// </summary>
+        private const int WaitTimeout = 20 * 6000;
+
+        /// <summary>
+        /// 瀹屾垚淇″彿璇诲彇棰戠巼
+        /// </summary>
+        private const int ReadTimeout = 100;
+
+        /// <summary>
+        /// 鍫嗗灈鏈洪�氳瀵硅薄
+        /// </summary>
+        private BaseCommunicator _communicator;
+        /// <summary>
+        /// 鍫嗗灈鏈哄崗璁俊鎭�
+        /// </summary>
+        private readonly List<DeviceProDTO> _deviceProDTOs;
+        /// <summary>
+        /// 鍫嗗灈鏈哄崗璁槑缁嗕俊鎭�
+        /// </summary>
+        private readonly List<DeviceProtocolDetailDTO> _deviceProtocolDetailDTOs;
+        /// <summary>
+        /// 璁惧缂栧彿
+        /// </summary>
+        public readonly string _deviceCode;
+        /// <summary>
+        /// 璁惧鍚嶇О
+        /// </summary>
+        public readonly string _deviceName;
+        /// <summary>
+        /// 涓婁竴娆′换鍔″彿
+        /// </summary>
+        private int _lastTaskNum;
+
+        private bool _isChecked = false;
+
+        private bool _heartStatr = true;
+
+        private bool _isConnected = true;
+        #endregion Private Member
+
+        #region Public Member
+        /// <summary>
+        /// 鍫嗗灈鏈洪�氳瀵硅薄
+        /// </summary>
+        public BaseCommunicator Communicator => _communicator;
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄崗璁俊鎭�
+        /// </summary>
+        public List<DeviceProDTO> DeviceProDTOs => _deviceProDTOs;
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄崗璁槑缁嗕俊鎭�
+        /// </summary>
+        public List<DeviceProtocolDetailDTO> DeviceProtocolDetailDTOs => _deviceProtocolDetailDTOs;
+
+        /// <summary>
+        /// 涓婁竴娆℃墽琛岀殑浠诲姟鍙�
+        /// </summary>
+        public int LastTaskNum => _lastTaskNum;
+
+        /// <summary>
+        /// 璁惧缂栧彿
+        /// </summary>
+        public string DeviceCode => _deviceCode;
+
+        /// <summary>
+        /// 璁惧鍚嶇О
+        /// </summary>
+        public string DeviceName => _deviceName;
+
+        /// <summary>
+        /// 閫氳鏄惁宸茶繛鎺�
+        /// </summary>
+        public bool IsConnected => Communicator.IsConnected && _isConnected;
+
+        /// <summary>
+        /// 鍫嗗灈鏈轰换鍔″畬鎴愪簨浠�
+        /// </summary>
+        public event EventHandler<StackerCraneTaskCompletedEventArgs> StackerCraneTaskCompletedEventHandler;
+
+        /// <summary>
+        /// 鍫嗗灈鏈轰换鍔″懡浠ゅ璞�
+        /// </summary>
+        public object StackerCraneTaskCommand { get; set; }
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄畬鎴愪簨浠舵槸鍚﹀凡璁㈤槄
+        /// </summary>
+        public bool IsEventSubscribed => StackerCraneTaskCompletedEventHandler != null;
+
+        /// <summary>
+        /// 鍫嗗灈鏈轰笌MOM杩炴帴鐘舵��
+        /// </summary>
+        public bool StackerOnline { get; set; } = false;
+
+        public int? LastTaskType { get; set; } = null;
+
+        public int CurrentTaskNum => throw new NotImplementedException();
+
+        public bool IsFault => throw new NotImplementedException();
+
+        public DeviceStatus Status => throw new NotImplementedException();
+        #endregion
+
+        #region Constructor Function
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="communicator">鍫嗗灈鏈洪�氳瀵硅薄</param>
+        /// <param name="deviceProDTOs">鍫嗗灈鏈哄崗璁俊鎭�</param>
+        /// <param name="deviceProtocolDetailDTOs">鍫嗗灈鏈哄崗璁槑缁嗕俊鎭�</param>
+        /// <param name="deviceCode">璁惧缂栧彿</param>
+        /// <param name="deviceName">璁惧鍚嶇О</param>
+        public STK(BaseCommunicator communicator, List<DeviceProDTO> deviceProDTOs, List<DeviceProtocolDetailDTO> deviceProtocolDetailDTOs, string deviceCode, string deviceName)
+        {
+            _communicator = communicator;
+            _deviceProDTOs = deviceProDTOs;
+            _deviceProtocolDetailDTOs = deviceProtocolDetailDTOs;
+            _deviceCode = deviceCode;
+            _deviceName = deviceName;
+        }
+        #endregion
+
+        #region Private Method
+        private void AnalysisData()
+        {
+
+        }
+        #endregion
+
+        #region Public Method
+        /// <summary>
+        /// 鍙戦�佷换鍔″懡浠�
+        /// </summary>
+        /// <param name="command">浠诲姟鍛戒护</param>
+        /// <returns></returns>
+        public bool SendCommand<T>(T command, string childCode) where T : IDataTransfer, new()
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+            if (devicePro == null)
+            {
+                return false;
+            }
+            if (Communicator.WriteCustomer(devicePro.DeviceProAddress, command))
+            {
+                StackerCraneTaskCommand = command;
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 璇诲彇PLC鏁版嵁锛岃繑鍥炶嚜瀹氫箟瀵硅薄
+        /// </summary>
+        /// <typeparam name="T">娉涘瀷</typeparam>
+        /// <param name="deviceChildCode">瀛愯澶囩紪鍙�</param>
+        /// <returns>杩斿洖鑷畾涔夊璞℃垨鎶涘嚭寮傚父</returns>
+        /// <exception cref="Exception"></exception>
+        public T ReadCustomer<T>(string deviceChildCode) where T : IDataTransfer, new()
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == "ReadDeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+
+            if (devicePro == null)
+            {
+                throw new Exception("鏈壘鍒板崗璁俊鎭�");
+            }
+            else
+            {
+                return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress);
+            }
+        }
+
+        /// <summary>
+        /// 璇诲彇PLC鏁版嵁锛岃繑鍥炶嚜瀹氫箟瀵硅薄
+        /// </summary>
+        /// <typeparam name="T">娉涘瀷</typeparam>
+        /// <param name="deviceChildCode">瀛愯澶囩紪鍙�</param>
+        /// <param name="typeName">鍙傛暟绫诲瀷</param>
+        /// <returns>杩斿洖鑷畾涔夊璞℃垨鎶涘嚭寮傚父</returns>
+        /// <exception cref="Exception"></exception>
+        public T ReadCustomer<T>(string deviceChildCode, string typeName) where T : IDataTransfer, new()
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == typeName && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+
+            if (devicePro == null)
+            {
+                throw new Exception("鏈壘鍒板崗璁俊鎭�");
+            }
+            else
+            {
+                return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress);
+            }
+        }
+
+        /// <summary>
+        /// 鏍规嵁鍙傛暟鍚嶇О銆佽澶囧瓙缂栧彿鍐欏叆瀵瑰簲鐨勬暟鎹��
+        /// </summary>
+        /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+        /// <typeparam name="TValue">瑕佸啓鍏ョ殑鏁版嵁绫诲瀷銆�</typeparam>
+        /// <param name="enum">鍙傛暟鍚嶇О銆�</param>
+        /// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
+        /// <param name="deviceChildCode">璁惧瀛愮紪鍙峰啓</param>
+        /// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
+        public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value, string deviceChildCode)
+            where TEnum : Enum
+            where TValue : notnull
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+        }
+
+
+        /// <summary>
+        /// 鏍规嵁鍙傛暟鍚嶇О銆佽澶囧瓙缂栧彿鍐欏叆瀵瑰簲鐨勬暟鎹��
+        /// </summary>
+        /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+        /// <typeparam name="TValue">瑕佸啓鍏ョ殑鏁版嵁绫诲瀷銆�</typeparam>
+        /// <param name="enum">鍙傛暟鍚嶇О銆�</param>
+        /// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
+        /// <param name="deviceChildCode">璁惧瀛愮紪鍙峰啓</param>
+        /// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
+        public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value, string deviceChildCode, string typeName)
+            where TEnum : Enum
+            where TValue : notnull
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamType == typeName && x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+        }
+
+        /// <summary>
+        /// 鏍规嵁鍙傛暟鍚嶇О璇诲彇鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
+        /// </summary>
+        /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+        /// <typeparam name="TRsult">璇诲彇缁撴灉鐨勮繑鍥炲�肩被鍨嬨��</typeparam>
+        /// <param name="value">鍙傛暟鍚嶇О銆�</param>
+        /// <returns>杩斿洖璇诲彇鍒扮殑鏁版嵁銆�</returns>
+        /// <exception cref="Exception"></exception>
+        public TRsult GetValue<TEnum, TRsult>(TEnum value, string childCode) where TEnum : Enum
+        {
+            if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == childCode);
+            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+        }
+
+        /// <summary>
+        /// 涓庤澶囩殑蹇冭烦
+        /// </summary>
+        public void Heartbeat()
+        {
+
+        }
+
+        public void Dispose()
+        {
+            _heartStatr = false;
+            _communicator.Dispose();
+            GC.SuppressFinalize(this);
+        }
+
+        public bool SendCommand<T>(T command) where T : IDataTransfer, new()
+        {
+            throw new NotImplementedException();
+        }
+        #endregion
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs"
index 2a805f8..2689101 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs"
@@ -81,24 +81,24 @@
         /// </summary>
         event EventHandler<StackerCraneTaskCompletedEventArgs> StackerCraneTaskCompletedEventHandler;
 
-        /// <summary>
-        /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
-        /// </summary>
-        /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
-        /// <param name="value">鏋氫妇鍊�</param>
-        /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum;
+        ///// <summary>
+        ///// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
+        ///// </summary>
+        ///// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
+        ///// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        ///// <param name="value">鏋氫妇鍊�</param>
+        ///// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
+        //TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum;
 
-        /// <summary>
-        /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
-        /// </summary>
-        /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
-        /// <typeparam name="TValue">瑕佸啓鍏ョ殑鏁版嵁绫诲瀷銆�</typeparam>
-        /// <param name="enum">鍙傛暟鍚嶇О銆�</param>
-        /// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
-        /// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
-        /// <exception cref="Exception"></exception>
-        bool SetValue<TEnum, TValue>(TEnum @enum, TValue value) where TEnum : Enum where TValue : notnull;
+        ///// <summary>
+        ///// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
+        ///// </summary>
+        ///// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+        ///// <typeparam name="TValue">瑕佸啓鍏ョ殑鏁版嵁绫诲瀷銆�</typeparam>
+        ///// <param name="enum">鍙傛暟鍚嶇О銆�</param>
+        ///// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
+        ///// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
+        ///// <exception cref="Exception"></exception>
+        //bool SetValue<TEnum, TValue>(TEnum @enum, TValue value) where TEnum : Enum where TValue : notnull;
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs"
index eae964d..7c556b0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs"
@@ -387,6 +387,17 @@
             return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
+        /// <summary>
+        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns></returns>
+        public Dt_Task QueryConveyorLineTask(int palletCode, string currentAddress)
+        {
+            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
+        }
+
         /// 浠诲姟瀹屾垚
         /// </summary>
         /// <param name="taskNum">浠诲姟缂栧彿</param>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index 0d98309..b4e8964 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -43,6 +43,7 @@
 using WIDESEAWCS_SignalR;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
 using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
 namespace WIDESEAWCS_Tasks
@@ -88,19 +89,37 @@
 
                     foreach (var station in stationManagers)
                     {
-                        ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode);
+                        var request = conveyorLine.GetValue<ConveyorLineDBName, byte>(ConveyorLineDBName.EntApply, station.stationChildCode);
 
-                        DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == command.RequestTask.ToString());
-
-                        //x.DeviceProParamName == nameof(ConveyorLineTaskCommand.ConveyorLineSingal)
+                        DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == request.ToString());
+                       
                         if (deviceProtocolDetails != null)
                         {
                             MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                             if (method != null)
                             {
-                                method.Invoke(this, new object[] { conveyorLine, command, station });
+                                method.Invoke(this, new object[] { conveyorLine, conveyorLine, station });
                             }
                         }
+
+                        //ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode);
+                        //command.PVI.Replace("/0", "").Replace("\"\\u0010\\u000f", "");
+                        //command.CarColor.Replace("/0", "");
+                        //command.CarType.Replace("/0", "");
+                        //command.CarCate.Replace("/0", "");
+                        //command.CatSkyWindow.Replace("/0", "");
+
+                        //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == command.Request.ToString());
+
+                        ////x.DeviceProParamName == nameof(ConveyorLineTaskCommand.ConveyorLineSingal)
+                        //if (deviceProtocolDetails != null)
+                        //{
+                        //    MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
+                        //    if (method != null)
+                        //    {
+                        //        method.Invoke(this, new object[] { conveyorLine, command, station });
+                        //    }
+                        //}
                         #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
 
                         //var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
@@ -136,32 +155,32 @@
         }
 
         /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍒嗛厤璺緞
+        /// 杈撻�佺嚎璇锋眰鍏ュ簱
         /// </summary>
         /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
         /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        public void RequestInboundFlow(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo)
+        public void RequestReceviceCar(CommonConveyorLine conveyorLine, CommonConveyorLine conveyorLine2, Dt_StationManager stationInfo)
         {
-            var log = $"銆恵conveyorLine.DeviceName}銆�,鎵樼洏鍙凤細銆恵stationInfo.stationChildCode}銆�,绔欏彴锛氥�恵stationInfo.remark}銆戣姹傛祦鍚�";
+            var log = $"銆恵conveyorLine.DeviceName}銆�,鎵樼洏鍙凤細銆恵stationInfo.stationChildCode}銆�,绔欏彴锛氥�恵stationInfo.remark}銆戣姹備换鍔�";
             ConsoleHelper.WriteSuccessLine(log);
 
             //_noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
             WriteInfo(conveyorLine.DeviceName, log);
             //if()
-
-            var taskNew = _taskService.QueryConveyorLineTask(command.Barcode, stationInfo.stationChildCode);
+            var palletcode = conveyorLine2.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.SkidNo, stationInfo.stationChildCode);
+            var taskNew = _taskService.QueryConveyorLineTask(palletcode, stationInfo.stationChildCode);
             if (taskNew == null)
             {
-                if (_taskService.RequestTask(command.Barcode, stationInfo).Result.Status)
+                if (_taskService.RequestTask(palletcode, stationInfo).Result.Status)
                 {
-                    Dt_Task task = _taskService.QueryConveyorLineTask(command.Barcode, stationInfo.stationChildCode);
+                    Dt_Task task = _taskService.QueryConveyorLineTask(palletcode, stationInfo.stationChildCode);
                     if (task != null)
                     {
-                        conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
 
                         //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
-                        conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
 
                         _taskService.UpdateTaskStatusToNext(task);
                     }
@@ -169,18 +188,8 @@
                 else
                 {
                     //濡傛灉浠诲姟璇锋眰澶辫触
-                    conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
+                    //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
                 }
-            }
-            else
-            {
-                conveyorLine.SetValue(ConveyorLineDBName.Barcode, taskNew.PalletCode, stationInfo.stationChildCode);
-
-                conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taskNew.NextAddress, stationInfo.stationChildCode);
-                //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taskNew.NextAddress, stationInfo.stationChildCode);
-                conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
-
-                _taskService.UpdateTaskStatusToNext(taskNew);
             }
         }
 
@@ -199,18 +208,18 @@
             WriteInfo(conveyorLine.DeviceName, log);
             //if()
 
-            var taskNew = _taskService.QueryConveyorLineTask(command.Barcode, stationInfo.stationChildCode);
+            var taskNew = _taskService.QueryConveyorLineTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode);
             if (taskNew == null)
             {
-                if (_taskService.RequestTask(command.Barcode, stationInfo).Result.Status)
+                if (_taskService.RequestTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo).Result.Status)
                 {
-                    Dt_Task task = _taskService.QueryConveyorLineTask(command.Barcode, stationInfo.stationChildCode);
+                    Dt_Task task = _taskService.QueryConveyorLineTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode);
                     if (task != null)
                     {
-                        conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
 
                         //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode);
-                        conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
+                        //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
 
                         _taskService.UpdateTaskStatusToNext(task);
                     }
@@ -218,25 +227,8 @@
                 else
                 {
                     //濡傛灉浠诲姟璇锋眰澶辫触
-                    conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
+                    //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
                 }
-            }
-            else
-            {
-                conveyorLine.SetValue(ConveyorLineDBName.Barcode, taskNew.PalletCode, stationInfo.stationChildCode);
-
-                if ((taskNew.TargetAddress == "2042" || taskNew.TargetAddress == "2032") && taskNew.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
-                {
-                    conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taskNew.TargetAddress, stationInfo.stationChildCode);
-                }
-                else
-                {
-                    conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taskNew.NextAddress, stationInfo.stationChildCode);
-                }
-                //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taskNew.NextAddress, stationInfo.stationChildCode);
-                conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
-
-                _taskService.UpdateTaskStatusToNext(taskNew);
             }
         }
 
@@ -249,7 +241,7 @@
         public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo)
         {
             //string clinfo = conveyorLine.ReadValue(ConveyorLineDBName.Barcode, stationInfo.stationChildCode).ToString();
-            var task = _taskService.QueryExecutingTaskByBarcode(command.Barcode, stationInfo.stationChildCode);
+            var task = _taskService.QueryExecutingTaskByBarcode(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode);
             if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
             {
                 //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
@@ -258,11 +250,11 @@
                 ConsoleHelper.WriteErrorLine($"{stationInfo.stationChildCode}绔欏彴璇锋眰鍝嶅簲淇℃伅:{content.ToJsonString()}");
                 if (content.Status)
                 {
-                    conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
+                    //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
                 }
                 else
                 {
-                    conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
+                    //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
                 }
             }
         }
@@ -279,17 +271,12 @@
             var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceName, stationInfo.stationChildCode);
             if (task != null)
             {
-                conveyorLine.SetValue(ConveyorLineDBName.Barcode, task.PalletCode, stationInfo.stationChildCode);
-                conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.TargetAddress, stationInfo.stationChildCode);
-                conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
+                conveyorLine.SetValue(ConveyorLineDBName.SkidNo, task.PalletCode, stationInfo.stationChildCode);
+                //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.TargetAddress, stationInfo.stationChildCode);
+                //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
 
                 //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                 _taskService.UpdateTaskStatusToNext(task);
-
-                if (task.TargetAddress == "2009" && task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
-                {
-                    _taskService.UpdateTaskStatusToNext(task);
-                }
             }
         }
 
@@ -303,89 +290,27 @@
         /// <param name="ProtocalDetailValue">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
         public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo)
         {
-            var task = _taskService.QueryExecutingTaskByBarcode(command.Barcode, stationInfo.stationChildCode);
+            var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceName, stationInfo.stationChildCode);
             if (task != null)
             {
-                if (task.TargetAddress == "2032" || task.TargetAddress == "2042")
-                {
-                    bool k2 = conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.TargetAddress, stationInfo.stationChildCode);
-                    bool k3 = conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
-                    WebResponseContent k4 = _taskService.UpdateTaskStatusToNext(task);
-                }
-                else
-                {
-                    WebResponseContent content = _taskService.RequestWheelsFlow(task.PalletCode).Result;
-                    if (content.Status)
-                    {
-                        string taraddress = content.Data.ToString(); // "2032";SourceAddress
-
-                        bool k2 = conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.TargetAddress, stationInfo.stationChildCode);
-                        bool k3 = conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
-                        WebResponseContent k4 = _taskService.UpdateTaskStatusToNext(task);
-                    }
-                    else
-                    {
-                        conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
-
-                        Console.Out.WriteLine($"璇诲彇鍒拌緭閫佺嚎鐢宠,鐢宠鏉$爜锛歿command.Barcode}锛屽悜WMS鐢宠鍘诲悜澶辫触锛屽師鍥狅細{content.Message},鍐欏叆鐢宠瘔淇℃晠闅滐細2");
-                    }
-                }
-
-            }
-            else
-            {
-
-                string taraddresspos = _taskService.RequestWheletHty(command.Barcode);
-                if (taraddresspos != null)
+                var canTask = _taskRepository.QueryData(x => true).OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).FirstOrDefault();
+                if (null != canTask && task.PalletCode == canTask.PalletCode)
                 {
 
-                    bool k2 = conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, taraddresspos, stationInfo.stationChildCode);
-                    bool k3 = conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode);
+                    //WebResponseContent k4 = _taskService.UpdateTaskStatusToNext(task);
 
-                }
-                else
-                {
-                    conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode);
-                    Console.Out.WriteLine($"璇诲彇鍒拌緭閫佺嚎鐢宠,鐢宠鏉$爜锛歿command.Barcode}锛屾湭鎵惧埌浠诲姟锛岀敵璇蜂笅涓�鍦板潃涓猴細{stationInfo.stationChildCode},鍐欏叆鐢宠瘔淇℃晠闅滐細2");
+                    //command.PalletCode = (Int32)20;
+                    //command.PVI = "ABCD0123456789";
+                    //command.CarCate = "SUV";
+                    //command.CarColor = "AB01";
+
+                    conveyorLine.SetValue(ConveyorLineDBName.SkidNo, 20, stationInfo.stationChildCode);
+
+                    conveyorLine.SetValue(ConveyorLineDBName.PVI, "ABCD", stationInfo.stationChildCode);
+
+                    //conveyorLine.SendCommand<ConveyorLineTaskCommand>(command, stationInfo.stationChildCode);
                 }
             }
         }
-
-        /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍏ュ簱
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
-        //public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
-        //{
-        //    var stationInfo = _stationManagerService.GetStationInfoByChildCode(childDeviceCode);
-        //    if (stationInfo != null)
-        //    {
-        //        //_taskService.r
-        //    }
-        //    var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode);
-        //    if (taskNew == null)
-        //    {
-        //        string barcode = command.ConveyorLineBarcode.TrimEnd();
-        //        if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status)
-        //        {
-        //            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
-        //            if (task != null)
-        //            {
-        //                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
-        //                //taskCommand.InteractiveSignal = command.InteractiveSignal;
-        //                taskCommand.ResponState = 1;
-        //                taskCommand.ConveyorLineTaskNum = task.TaskNum;
-        //                taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress);
-        //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
-
-        //                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
-
-        //                _taskService.UpdateTaskStatusToNext(task);
-        //            }
-        //        }
-        //    }
-        //}
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs"
index 66ea6c4..6591a38 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs"
@@ -30,45 +30,84 @@
         #region ReadDevice
 
         /// <summary>
-        /// 浠诲姟鍙�
+        /// 鎵�/鑷姩
         /// </summary>
-        TaskNum,
+        Auto,
 
         /// <summary>
-        /// 鐩爣鍦板潃
+        /// 杩愯
         /// </summary>
-        TargetAddress,
+        Running,
 
         /// <summary>
-        /// 璇锋眰
+        /// 鍏ュ簱璇锋眰
         /// </summary>
-        RequestTask,
+        EntApply,
 
         /// <summary>
-        /// 璇锋眰鍝嶅簲
+        /// 鍑哄簱璇锋眰
         /// </summary>
-        ResponState,
+        OutApply,
 
         /// <summary>
-        /// 璇锋眰鏀炬枡
+        /// 鍏佽鏀炬枡
         /// </summary>
-        RequestPut,
+        AllowPut,
 
         /// <summary>
-        /// 鏀炬枡瀹屾垚
+        /// 婊氬簥鍗犱綅
         /// </summary>
-        PutFinish,
+        Occupy,
 
         /// <summary>
-        /// 鐩爣鍦板潃
+        /// 鏄惁鎶ヨ
         /// </summary>
-        Barcode,
+        IsAlarm,
 
         /// <summary>
-        /// 澶囩敤
+        /// 澶囩敤1
         /// </summary>
-        Spare,
+        Spare1,
 
+        /// <summary>
+        /// 澶囩敤2
+        /// </summary>
+        Spare2,
+
+        /// <summary>
+        /// 澶囩敤3
+        /// </summary>
+        Spare3,
+
+        /// <summary>
+        /// 婊戞﹪鍙�
+        /// </summary>
+        SkidNo,
+
+        /// <summary>
+        /// PVI
+        /// </summary>
+        PVI,
+
+        /// <summary>
+        /// PVI鍐欏叆
+        /// </summary>
+        PVI_W,
+
+        /// <summary>
+        ///  婊戞﹪鍙�
+        /// </summary>
+        Spare4,
+
+        /// <summary>
+        ///  =1 绌烘挰 =2鎾粍 =3杞﹁韩 =4鐢垫睜澹� =5绌烘枡鏋�
+        /// </summary>
+        Spare5,
+
+        /// <summary>
+        /// 澶囩敤6
+        /// </summary>
+        Spare6,
         #endregion
 
         #region WriteDevice
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
index 083b757..cfad607 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
@@ -36,24 +36,15 @@
     //    public short ConveyorLineAlarm { get; set; }
 
 
-    //}
+    //} 
 
     public class ConveyorLineTaskCommand : DeviceCommand
     {
-        /// <summary>
-        /// 浠诲姟鍙�
-        /// </summary>
-        public short TaskNum { get; set; }
 
         /// <summary>
-        /// 鐩爣鍦板潃
+        /// 璇锋眰
         /// </summary>
-        public short TargetAddress { get; set; }
-
-        /// <summary>
-        /// 璇锋眰浠诲姟
-        /// </summary>
-        public short RequestTask { get; set; }
+        public byte Request { get; set; }
 
         /// <summary>
         /// 璇锋眰鍝嶅簲
@@ -61,49 +52,59 @@
         public short ResponState { get; set; }
 
         /// <summary>
-        /// 璇锋眰鏀炬枡
+        /// 婊戞﹪鍙�
         /// </summary>
-        public short RequestPut { get; set; }
+        public int PalletCode { get; set; } //=> 
 
         /// <summary>
-        /// 鏀炬枡瀹屾垚
+        /// PVI鐮�
         /// </summary>
-        public short PutFinish { get; set; }
+        [DataLength(13)]
+        public string PVI { get; set; }
 
         /// <summary>
-        /// 鏉$爜
+        /// 澶囩敤1
         /// </summary>
-        [DataLength(10)]
-        public string Barcode { get; set; }
+        [DataLength(3)]
+        public string Spare1 { get; set; }
 
         /// <summary>
-        /// 澶囩敤
+        /// 杞︾郴
         /// </summary>
-        public short Spare { get; set; }
+        [DataLength(4)]
+        public string CarType { get; set; }
 
-        //public short SourceAddress { get; set; }
-        //public short TargetAddress { get; set; }
+        /// <summary>
+        /// 杞﹀瀷
+        /// </summary>
+        [DataLength(4)]
+        public string CarCate { get; set; }
+
+        /// <summary>
+        /// 鏂瑰悜鐩樹綅缃�
+        /// </summary>
+        [DataLength(4)]
+        public string CarPosition { get; set; }
+
+        /// <summary>
+        /// 澶╃獥
+        /// </summary>
+        [DataLength(4)]
+        public string CatSkyWindow { get; set; }
+
+        /// <summary>
+        /// 杞﹁韩棰滆壊
+        /// </summary>
+        [DataLength(2)]
+        public string CarColor { get; set; }
+
+        /// <summary>
+        /// 澶囩敤2
+        /// </summary>
+        public short Spare2 { get; set; }
 
     }
 
-    public class ConveyorLineTaskCommand_CZ : DeviceCommand
-    {
-        /// <summary>
-        /// 杞﹁酱鏉$爜
-        /// </summary>
-        [DataLength(40)]
-        public string Number { get; set; }
-
-        /// <summary>
-        /// 璇锋眰淇″彿
-        /// </summary>
-        public short ConveyorLineSingal { get; set; }
-
-        /// <summary>
-        /// 璇锋眰鍙嶉
-        /// </summary>
-        public short ResponState { get; set; }
-    }
 
     //public class ConveyorLineTaskCommandWrite : DeviceCommand
     //{
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs"
new file mode 100644
index 0000000..a90b5b0
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs"
@@ -0,0 +1,364 @@
+锘縰sing Mapster;
+using Newtonsoft.Json;
+using Quartz;
+using System.Diagnostics.CodeAnalysis;
+using System.Text;
+using WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_IProcessRepository;
+using WIDESEAWCS_ISystemServices;
+using WIDESEAWCS_ITaskInfo_HtyRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.StackerCraneJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class SCJob : JobBase, IJob
+    {
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IRouterService _routerService;
+        private readonly IProcessRepository _processRepository;
+        private readonly ICacheService _cacheService;
+        private readonly INoticeService _noticeService;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
+        private readonly ITask_HtyRepository _htyRepository;
+        private readonly ISys_ConfigService _sys_ConfigService;
+        private static List<string>? userTokenIds;
+        private static List<int>? userIds;
+
+        public SCJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository htyRepository, ISys_ConfigService sys_ConfigService)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _routerService = routerService;
+            _processRepository = processRepository;
+            _cacheService = cacheService;
+            _noticeService = noticeService;
+            _stationManagerRepository = stationManagerRepository;
+            _htyRepository = htyRepository;
+            _sys_ConfigService = sys_ConfigService;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+                if (flag && value != null && value is STK commonStackerCrane)
+                {
+                    List<string> childCodes = commonStackerCrane.DeviceProDTOs.GroupBy(d => d.DeviceChildCode).Select(g => g.Key).ToList();
+                    Parallel.For(0, childCodes.Count, (i, state) =>
+                    {
+
+                        ConsoleHelper.WriteColorLine($"銆恵childCodes[i]}銆戞椂闂淬�恵DateTime.Now}銆戙�戙�恵Thread.CurrentThread.ManagedThreadId}銆�", ConsoleColor.Magenta);
+
+                        if (commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.TaskState, childCodes[i]) == 2)
+                        {
+                            int taskNum = commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum, childCodes[i]);
+                            byte workStatus = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.TaskState, childCodes[i]);
+
+                            ConsoleHelper.WriteColorLine($"銆恵childCodes[i]}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵workStatus}銆戞椂闂淬�恵DateTime.Now}", ConsoleColor.Magenta);
+
+                            string str = $"銆恵childCodes[i]}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵taskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
+                            WriteInfo(childCodes[i], str);
+                            ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+                            var task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
+
+                            if (task == null)
+                            {
+                                commonStackerCrane.SetValue(StackerCraneDBName.CMD, 2, childCodes[i]);
+                            }
+                            else
+                            {
+                                var content = _taskService.StackCraneTaskCompleted(taskNum);
+
+                                var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 2, childCodes[i]);
+                                str = $"銆恵childCodes[i]}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵taskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
+                                WriteInfo(childCodes[i], str);
+                                ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+                            }
+                        }
+
+                        if (commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Online, childCodes[i])        //鍦ㄧ嚎
+                               && commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Free, childCodes[i])     //绌洪棽
+                               && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Alarm, childCodes[i])     //鏃犳姤璀�
+                               && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Goods, childCodes[i])    //杞借揣鍙版棤璐�
+                               && commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Flag, childCodes[i])      //璐у弶鍚敤
+                            )
+                        {
+                            Dt_Task? task = GetTask(commonStackerCrane, childCodes[i]);
+                            if (task != null)
+                            {
+                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                                if (stackerCraneTaskCommand != null)
+                                {
+                                    var taskNum = commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum, childCodes[i]);
+                                    //var taskBarCode = commonStackerCrane.GetValue<StackerCraneDBName, string>(StackerCraneDBName.Barcode);
+                                    ConsoleHelper.WriteColorLine($"銆恵childCodes[i]}銆戝爢鍨涙満浠诲姟鍙凤細銆恵taskNum}銆戜换鍔′换鍔″彿锛氥�恵task.TaskNum}銆�", ConsoleColor.DarkBlue);
+                                    if (taskNum == 0)
+                                    {
+                                        ConsoleHelper.WriteColorLine($"銆恵childCodes[i]}銆戜换鍔″彿涓恒�恵0}銆�,浠诲姟鍙蜂笉涓�鑷村彲浠ヤ笅鍙戜换鍔�", ConsoleColor.DarkBlue);
+
+                                        Thread.Sleep(500);
+                                        bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand, childCodes[i]);
+
+                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                    }
+                                }
+                            }
+                        }
+                    });
+                }
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+            return Task.CompletedTask;
+        }
+
+        /// <summary>
+        /// 鑾峰彇浠诲姟
+        /// </summary>
+        /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param>
+        /// <returns></returns>
+        private Dt_Task? GetTask(STK commonStackerCrane, string childCode)
+        {
+            Dt_Task task;
+
+            task = _taskService.QueryExcutingTask(childCode);
+            if (task != null)
+            {
+                ConsoleHelper.WriteErrorLine($"鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鐨勪换鍔�,璇锋鏌�");
+                return null;
+            }
+
+            task = _taskService.QueryRelocationTask(childCode);
+            if (task != null)
+            {
+                return task;
+            }
+
+            if (commonStackerCrane.LastTaskType == null)
+            {
+                task = _taskService.QueryStackerCraneTask(childCode);
+            }
+            else
+            {
+                var lastTaskTypeGroup = commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup();
+                if (lastTaskTypeGroup == TaskTypeGroup.OutbondGroup)
+                {
+                    task = _taskService.QueryStackerCraneInTask(childCode);
+                    if (task == null)
+                    {
+                        task = _taskService.QueryStackerCraneOutTask(childCode);
+                    }
+                }
+                else
+                {
+                    task = _taskService.QueryStackerCraneOutTask(childCode);
+                }
+            }
+
+            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+                //var relocation = _taskService.OutBeforeCheck(task.TaskNum);
+
+                //if (relocation != null)
+                //{
+                //    return relocation;
+                //}
+
+                // 妫�鏌ュ綋鍓嶅嚭搴撲换鍔$珯鍙版槸鍚﹀厑璁告斁璐�
+                var occupiedStation = OutTaskStationIsOccupied(task);
+                if (occupiedStation == null)
+                {
+                    // 濡傛灉褰撳墠鍑哄簱浠诲姟绔欏彴涓嶅厑璁告斁璐э紝鎺掗櫎褰撳墠浠诲姟锛屾煡鎵惧叾浠栧嚭搴撲换鍔�
+
+                    var log = $"浠诲姟鍙凤細銆恵task.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵task.NextAddress}銆戜笉鍏佽鏀捐揣";
+                    ConsoleHelper.WriteErrorLine(log);
+
+                    _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
+                    WriteInfo(commonStackerCrane.DeviceName, log);
+
+                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                }
+                else
+                {
+                    return task;
+                }
+            }
+            else if (task == null)
+            {
+                task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+            }
+
+            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
+            {
+                var relocation = _taskService.InBeforeCheck(task.TaskNum);
+
+                if (relocation != null)
+                {
+                    return relocation;
+                }
+            }
+            return task;
+        }
+
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
+        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
+        {
+            Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
+
+            //Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
+            if (router != null)
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
+                if (device != null)
+                {
+                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                    if (conveyorLine.IsOccupied(router.ChildPosi))//鍑哄簱绔欏彴鏈鍗犵敤
+                    {
+                        return task;
+                    }
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+                }
+            }
+            else
+            {
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
+        {
+            StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
+
+            stackerCraneTaskCommand.TrayCode = "";
+            stackerCraneTaskCommand.TaskNo = task.TaskNum;
+            stackerCraneTaskCommand.TaskType = 1;
+            stackerCraneTaskCommand.Goods_Type = 0;
+            stackerCraneTaskCommand.CMD = 1;
+            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
+            {
+                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
+                if (routers.Count > 0)
+                {
+                    stackerCraneTaskCommand.S_Row = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
+                    stackerCraneTaskCommand.S_Bay = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
+                    stackerCraneTaskCommand.S_level = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
+
+                    string[] targetCodes = task.NextAddress.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.E_Row = Convert.ToInt16(targetCodes[0]) /*% 2 != 0 ? (short)1 : (short)2*/;
+                        stackerCraneTaskCommand.E_Bay = Convert.ToInt16(targetCodes[1]);
+                        stackerCraneTaskCommand.E_level = Convert.ToInt16(targetCodes[2]);
+                    }
+                    else
+                    {
+                        //鏁版嵁閰嶇疆閿欒
+                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+                        return null;
+                    }
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
+                if (routers.Count > 0)
+                {
+                    stackerCraneTaskCommand.E_Row = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
+                    stackerCraneTaskCommand.E_Bay = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
+                    stackerCraneTaskCommand.E_level = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
+
+                    string[] sourceCodes = task.CurrentAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.S_Row = Convert.ToInt16(sourceCodes[0]) /*% 2 != 0 ? (short)1 : (short)2*/;
+                        stackerCraneTaskCommand.S_Bay = Convert.ToInt16(sourceCodes[1]);
+                        stackerCraneTaskCommand.S_level = Convert.ToInt16(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        //鏁版嵁閰嶇疆閿欒
+                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                        return null;
+                    }
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            {
+                string[] targetCodes = task.NextAddress.Split("-");
+                if (targetCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.E_Row = Convert.ToInt16(targetCodes[0]) /*% 2 != 0 ? (short)1 : (short)2*/;
+                    stackerCraneTaskCommand.E_Bay = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.E_level = Convert.ToInt16(targetCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+                    return null;
+                }
+                string[] sourceCodes = task.CurrentAddress.Split("-");
+                if (sourceCodes.Length == 3)
+                {
+                    stackerCraneTaskCommand.S_Row = Convert.ToInt16(sourceCodes[0])/* % 2 != 0 ? (short)1 : (short)2*/;
+                    stackerCraneTaskCommand.S_Bay = Convert.ToInt16(sourceCodes[1]);
+                    stackerCraneTaskCommand.S_level = Convert.ToInt16(sourceCodes[2]);
+                }
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
+            }
+            return stackerCraneTaskCommand;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_BDCConfiguration.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_BDCConfiguration.js"
new file mode 100644
index 0000000..0595aa0
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_BDCConfiguration.js"
@@ -0,0 +1,67 @@
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
index 65c029c..90e849b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
@@ -306,6 +306,14 @@
     // meta: {
     //   keepAlive: true
     // }
-  }
+  },
+  {
+    path: '/Dt_BDCConfiguration',
+    name: 'Dt_BDCConfiguration',
+    component: () => import('@/views/widesea_wms/basicinfo/Dt_BDCConfiguration.vue'),
+    meta: {
+      keepAlive: false
+    }
+  },
 ]
 export default tables
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/OrderInfo/Dt_AssemblyOrderInfo.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/OrderInfo/Dt_AssemblyOrderInfo.vue"
index 1584219..ef0eea8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/OrderInfo/Dt_AssemblyOrderInfo.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/OrderInfo/Dt_AssemblyOrderInfo.vue"
@@ -18,7 +18,7 @@
         const table = ref({
             key: 'id',
             footer: "Foots",
-            cnName: '娑傝宸ュ崟',
+            cnName: '鎬昏宸ュ崟',
             name: 'Orderinfo/Dt_AssemblyOrderInfo',
             url: "/Dt_AssemblyOrderInfo/",
             sortName: "Id"
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_BDCConfiguration.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_BDCConfiguration.vue"
new file mode 100644
index 0000000..8536626
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_BDCConfiguration.vue"
@@ -0,0 +1,86 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wms/basicinfo/Dt_AreaInfo.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+        :table="table" :extend="extend">
+    </view-grid>
+</template>
+<script>
+import extend from "@/extension/widesea_wms/basicinfo/Dt_BDCConfiguration.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'Id',
+            footer: "Foots",
+            cnName: '閰嶇疆淇℃伅',
+            name: 'basicinfo/Dt_BDCConfiguration',
+            url: "/Dt_BDCConfiguration/",
+            sortName: "Id"
+        });
+        const editFormFields = ref({
+            "Name": "",
+            "IsActive": "",
+            "MaxWhiteBodyCache": "",
+            "MaxPaintedBodyCache": "",
+            "MaxEmptySledCache": ""
+        });
+        const editFormOptions = ref([
+            [
+                { "title": "閰嶇疆鍚嶇О", "field": "Name", type: "text" },
+                { "title": "鏄惁鍚敤", "field": "IsActive", type: "int" },
+
+            ],
+            [
+                { "title": "鏈�澶х櫧杞﹁韩缂撳瓨", "field": "MaxWhiteBodyCache", type: "text" },
+                { "title": "鏈�澶у僵杞﹁韩缂撳瓨", "field": "MaxPaintedBodyCache", type: "text" },
+                { "title": "鏈�澶х┖婊戞﹪缂撳瓨", "field": "MaxEmptySledCache", type: "text" },
+            ]
+        ]);
+        const searchFormFields = ref({
+            "Name": "",
+            "IsActive": "",
+        });
+        const searchFormOptions = ref([
+            [
+                { "title": "閰嶇疆鍚嶇О", "field": "Name", type: "text" },
+                { "title": "鏄惁鍚敤", "field": "IsActive", type: "int" }
+            ],
+        ]);
+        const columns = ref([{ field: 'Id', title: 'ID', type: 'int', sort: true, hidden: true, width: 110, readonly: true, require: true, align: 'left' },
+        { field: 'name', title: '閰嶇疆鍚嶇О', type: 'string', width: 110, align: 'left' },
+        { field: 'isActive', title: '鐘舵��', type: 'int', width: 110, align: 'left', bind: { key: "status", data: [] } },
+        { field: 'maxWhiteBodyCache', title: '鏈�澶х櫧杞﹁韩缂撳瓨', type: 'int', width: 120, align: 'left' },
+        { field: 'maxWhiteBodyCache', title: '鏈�澶у僵杞﹁韩缂撳瓨', type: 'int', width: 120, align: 'left' },
+        { field: 'maxWhiteBodyCache', title: '鏈�澶х┖婊戞﹪缂撳瓨', type: 'int', width: 120, align: 'left' },
+        { field: 'creater', title: '鍒涘缓浜�', type: 'string', width: 75, align: 'left' },
+        { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 120, align: 'left', sort: true },
+        { field: 'modifier', title: '淇敼浜�', type: 'string', sort: true, width: 75, align: 'left' },
+        { field: 'modifyDate', title: '淇敼鏃堕棿', type: 'datetime', sort: true, width: 120, align: 'left', sort: true },
+
+        ]);
+        const detail = ref({
+            cnName: "#detailCnName",
+            table: "#detailTable",
+            columns: [],
+            sortName: "",
+            key: ""
+        });
+        return {
+            table,
+            extend,
+            editFormFields,
+            editFormOptions,
+            searchFormFields,
+            searchFormOptions,
+            columns,
+            detail,
+        };
+    },
+});
+</script>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/GetCarCharacteristicInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/GetCarCharacteristicInfo.cs"
new file mode 100644
index 0000000..4270985
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/GetCarCharacteristicInfo.cs"
@@ -0,0 +1,45 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common
+{
+    /// <summary>
+    /// AVI/BDC鍚慚ES璇锋眰杞﹁締鐗瑰緛淇℃伅
+    /// rfidPrint : pvi鍙�+鐧借溅韬墿鏂欏彿鍚�4浣�
+    /// vin : vin鍙�
+    /// AB00 : 杞﹀瀷
+    /// SE00 : 杞﹁韩棰滆壊
+    /// AD00 : 澶╃獥
+    /// </summary>
+    public class GetCarCharacteristicInfo
+    {
+        /// <summary>
+        /// 鍞竴鏍囪瘑
+        /// </summary>
+        public string unionKey { get; set; }
+
+        /// <summary>
+        /// 宸ュ巶缂栫爜 
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        ///  pvi鍙�+鐧借溅韬墿鏂欏彿鍚�4浣�
+        /// </summary>
+        public string rfid { get; set; }
+
+        /// <summary> 
+        /// VIN鍙�
+        /// </summary>
+        public bool success { get; set; }
+
+        /// <summary>
+        /// 鍚屾鏃堕棿
+        /// </summary>
+        public DateTime? messageTime { get; set; }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/CarCharacteristicInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/CarCharacteristicInfo.cs"
similarity index 100%
rename from "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/CarCharacteristicInfo.cs"
rename to "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/CarCharacteristicInfo.cs"
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/IssuedCharacterInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/IssuedCharacterInfo.cs"
index 4f3f56b..8593971 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/IssuedCharacterInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/IssuedCharacterInfo.cs"
@@ -6,12 +6,17 @@
 
 namespace WIDESEA_Common.MES.Request
 {
+    /// <summary>
+    /// BDC璇锋眰鐒婅鐗瑰緛涓嬪彂
+    /// 杞﹁韩杩涘叆BDC鏃讹紝BDC璇诲彇杞﹁韩涓婄殑涓�缁存潯鐮佸悜MES璇锋眰鐒婅鐗瑰緛淇℃伅 
+    /// 璇锋眰鍙傛暟
+    /// </summary>
     public class IssuedCharacterInfo
     {
         /// <summary>
         /// 宸ュ巶缂栧彿
         /// </summary>
-        public string plantCode { get; set; } = "1022";
+        public string plantCode { get; set; } = "1052";
 
         /// <summary>
         /// pvi鍙�+鐧借溅韬墿鏂欏彿鍚�4浣�  (鎵弿杞﹁韩鐧借溅韬墿鏂欑爜)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/pushWorkOrderInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/pushWorkOrderInfo.cs"
index a87f235..69a62b2 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/pushWorkOrderInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/MES/Request/pushWorkOrderInfo.cs"
@@ -6,10 +6,16 @@
 
 namespace WIDESEA_Common
 {
+
+    public class pushWorkOrderInfo
+    {
+        public List<pushWorkOrderInfoDet> list { get; set; }
+    }
+    
     /// <summary>
     /// 娑傝宸ュ崟淇℃伅
     /// </summary>
-    public class pushWorkOrderInfo
+    public class pushWorkOrderInfoDet
     {
         /// <summary>
         /// 宸ュ巶
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Const/ConfigConst.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Const/ConfigConst.cs"
index bc93dc4..9b238de 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Const/ConfigConst.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Const/ConfigConst.cs"
@@ -100,7 +100,7 @@
         /// <summary>
         /// 杞﹁韩杩囩偣
         /// </summary>
-        public const string PassPoint = "PassPoint";
+        public const string AVIPASS = "AVIPASS";
 
         /// <summary>
         /// WCS鎺ユ敹浠诲姟
@@ -116,5 +116,10 @@
         /// 杞﹁韩鐗瑰緛淇℃伅
         /// </summary>
         public const string IssuedCharacter = "IssuedCharacter";
+
+        /// <summary>
+        /// BDC鍚慚ES璇锋眰杞﹁締鐗瑰緛淇℃伅
+        /// </summary>
+        public const string getCharacteristic = "getCharacteristic";
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs"
index 826b722..ec3625b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs"
@@ -79,7 +79,7 @@
         [ImporterHeader(Name = "淇敼浜�")]
         [ExporterHeader(DisplayName = "淇敼浜�")]
         [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼浜�")]
-        public string Modifier { get; set; }
+        public string Modifier { get; set; } = "System";
 
         /// <summary>
         /// 淇敼鏃ユ湡
@@ -87,7 +87,7 @@
         [ImporterHeader(Name = "淇敼鏃ユ湡")]
         [ExporterHeader(DisplayName = "淇敼鏃ユ湡")]
         [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼鏃ユ湡")]
-        public DateTime? ModifyDate { get; set; } //= DateTime.Now;
+        public DateTime? ModifyDate { get; set; } = DateTime.Now;
 
         /// <summary>
         /// 鏁版嵁鐗堟湰
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs"
index 1064dbc..80b23ea 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs"
@@ -49,7 +49,7 @@
                 {
                     // 浣跨敤 myScopedService 鎵ц浠诲姟
 
-                    await DBSeed.SeedAsync(_dbContext, _webRootPath);
+                    //await DBSeed.SeedAsync(_dbContext, _webRootPath);
 
                     //澶氱鎴� 鍚屾
                     //await DBSeed.TenantSeedAsync(_dbContext);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/MES/IMESService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/MES/IMESService.cs"
index 508a16e..185193c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/MES/IMESService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/MES/IMESService.cs"
@@ -10,14 +10,48 @@
 {
     public interface IMESService : IDependency
     {
+        /// <summary>
+        /// 娑傝宸ュ崟淇℃伅
+        /// </summary>
+        /// <param name="json"></param>
+        /// <returns></returns>
         WebResponseContent pushWorkOrderInfo(object json);
 
+        /// <summary>
+        /// 棰勭粦瀹氬伐鍗�
+        /// </summary>
         WebResponseContent prebind(object json);
 
-        WebResponseContent PassPoint(string stationCode);
+        /// <summary>
+        /// 杞﹁韩杩囩偣璇锋眰
+        /// </summary>
+        WebResponseContent PassPoint(string stationCode, string rfid);
 
+        /// <summary>
+        /// 鎬昏宸ュ崟淇℃伅
+        /// </summary>
         WebResponseContent pushOrderInfo(object json);
 
+        /// <summary>
+        ///  BDC璇锋眰鐒婅鐗瑰緛淇℃伅
+        /// </summary>
+        /// <param name="rfidPrint">RFID</param>
+        /// <param name="vin">VIN鍙�</param>
+        /// <param name="stationNo">绔欏彴璇锋眰鐐逛綅</param>
+        /// <returns></returns>
         WebResponseContent issuedCharacter(string rfidPrint, string vin, string stationNo);
+
+        /// <summary>
+        /// 杞﹁韩缁戝畾宸ュ崟(鐒婅鐩撮�氭秱瑁�)
+        /// </summary>
+        WebResponseContent bindWorkOrder(string stationNo, string rfid);
+
+        /// <summary>
+        /// BDC璇锋眰杞﹁締鐗瑰緛淇℃伅
+        /// </summary>
+        /// <param name="rfidPrint">RFID</param>
+        /// <param name="stationNo">绔欏彴璇锋眰鐐逛綅</param>
+        /// <returns></returns>
+        WebResponseContent getCharacteristic(string rfidPrint, string stationNo);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration.cs"
index 0d1e8e1..e8b2e12 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration.cs"
@@ -5,63 +5,61 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
 
 namespace WIDESEA_Model.Models
 {
     /// <summary>
-    /// BDC缂撳瓨閰嶇疆锛屽瓨鍌ㄥ悇绫荤墿鏂欑殑鏈�澶х紦瀛樻暟閲忛檺鍒�
+    /// BDC缂撳瓨閰嶇疆
     /// </summary>
-    [SugarTable(nameof(Dt_BDCConfiguration), "BDC缂撳瓨閰嶇疆")]
-    public class Dt_BDCConfiguration
+    [SugarTable(nameof(Dt_BDCConfiguration_detail), "BDC閰嶇疆")]
+    public class Dt_BDCConfiguration_detail : BaseEntity
     {
-        [Key]
+        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
         public int Id { get; set; }
+
+        [SugarColumn(ColumnName = "Name")]
+        public int Con_Id { get; set; }
 
         /// <summary>
         /// 閰嶇疆鍚嶇О
         /// </summary>
-        [Required]
-        [MaxLength(100)]
-        public string Name { get; set; } = "Default Configuration";
+        [SugarColumn(ColumnName = "Name")]
+        public string Name { get; set; } = "榛樿閰嶇疆";
 
         /// <summary>
         /// 鐧借溅韬渶澶х紦瀛樻暟
         /// </summary>
+        [SugarColumn(ColumnName = "MaxWhiteBodyCache")]
         [Range(0, int.MaxValue)]
+
         public int MaxWhiteBodyCache { get; set; } = 100;
 
         /// <summary>
         /// 褰╄溅韬渶澶х紦瀛樻暟
         /// </summary>
+        [SugarColumn(ColumnName = "MaxPaintedBodyCache")]
         [Range(0, int.MaxValue)]
         public int MaxPaintedBodyCache { get; set; } = 100;
 
         /// <summary>
         /// 鐢垫睜澹虫渶澶х紦瀛樻暟
         /// </summary>
+        [SugarColumn(ColumnName = "MaxBatteryCaseCache")]
         [Range(0, int.MaxValue)]
         public int MaxBatteryCaseCache { get; set; } = 50;
 
         /// <summary>
         /// 绌烘粦姗囨渶澶х紦瀛樻暟
         /// </summary>
+        [SugarColumn(ColumnName = "MaxEmptySledCache")]
         [Range(0, int.MaxValue)]
         public int MaxEmptySledCache { get; set; } = 30;
 
         /// <summary>
-        /// 鏈�鍚庢洿鏂版椂闂�
-        /// </summary>
-        public DateTime LastUpdatedTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 鏇存柊浜�
-        /// </summary>
-        [MaxLength(50)]
-        public string UpdatedBy { get; set; } = "System";
-
-        /// <summary>
         /// 鏄惁鍚敤
         /// </summary>
+        [SugarColumn(ColumnName = "IsActive")]
         public int IsActive { get; set; } = 1;
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration_detail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration_detail.cs"
new file mode 100644
index 0000000..7004ee2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_BDCConfiguration_detail.cs"
@@ -0,0 +1,62 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// BDC缂撳瓨閰嶇疆锛屽瓨鍌ㄥ悇绫荤墿鏂欑殑鏈�澶х紦瀛樻暟閲忛檺鍒�
+    /// </summary>
+    [SugarTable(nameof(Dt_BDCConfiguration), "BDC閰嶇疆璇︽儏")]
+    public class Dt_BDCConfiguration: BaseEntity
+    {
+        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 閰嶇疆鍚嶇О
+        /// </summary>
+        [SugarColumn(ColumnName = "Name")]
+        public string Name { get; set; } = "榛樿閰嶇疆";
+
+        /// <summary>
+        /// 鐧借溅韬渶澶х紦瀛樻暟
+        /// </summary>
+        [SugarColumn(ColumnName = "MaxWhiteBodyCache")]
+        [Range(0, int.MaxValue)]
+
+        public int MaxWhiteBodyCache { get; set; } = 100;
+
+        /// <summary>
+        /// 褰╄溅韬渶澶х紦瀛樻暟
+        /// </summary>
+        [SugarColumn(ColumnName = "MaxPaintedBodyCache")]
+        [Range(0, int.MaxValue)]
+        public int MaxPaintedBodyCache { get; set; } = 100;
+
+        /// <summary>
+        /// 鐢垫睜澹虫渶澶х紦瀛樻暟
+        /// </summary>
+        [SugarColumn(ColumnName = "MaxBatteryCaseCache")]
+        [Range(0, int.MaxValue)]
+        public int MaxBatteryCaseCache { get; set; } = 50;
+
+        /// <summary>
+        /// 绌烘粦姗囨渶澶х紦瀛樻暟
+        /// </summary>
+        [SugarColumn(ColumnName = "MaxEmptySledCache")]
+        [Range(0, int.MaxValue)]
+        public int MaxEmptySledCache { get; set; } = 30;
+
+        /// <summary>
+        /// 鏄惁鍚敤
+        /// </summary>
+        [SugarColumn(ColumnName = "IsActive")]
+        public int IsActive { get; set; } = 1;
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
index 66a5dbb..85973fa 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
@@ -31,8 +31,9 @@
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IDt_CarBodyRepository _carBodyRepository;
         private readonly IDt_AssemblyOrderInfoRepository _assemblyOrderInfoRepository;
+       private readonly IDt_PaintingOrderInfoRepository _paintingOrderInfoRepository;
 
-        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository)
+        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository, IDt_PaintingOrderInfoRepository paintingOrderInfoRepository)
         {
             _locationRepository = locationRepository;
             _taskRepository = taskRepository;
@@ -45,6 +46,7 @@
             _unitOfWorkManage = unitOfWorkManage;
             _carBodyRepository = carBodyRepository;
             _assemblyOrderInfoRepository = assemblyOrderInfoRepository;
+            _paintingOrderInfoRepository = paintingOrderInfoRepository;
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
index 98d7133..5e820ad 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
@@ -6,19 +6,16 @@
 
 namespace WIDESEA_StoragIntegrationServices
 {
-    /// <summary>
-    /// 杞﹁韩杩囩偣璇锋眰
-    /// </summary>
     public partial class MESService
     {
-        public WebResponseContent PassPoint(string stationCode)
+        public WebResponseContent PassPoint(string stationCode, string rfid)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
                 var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_MESIPAddress);
                 var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.MESIPAddress)?.ConfigValue;
-                var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.PassPoint)?.ConfigValue;
+                var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.AVIPASS)?.ConfigValue;
                 if (wmsBase == null || ipAddress == null)
                 {
                     throw new InvalidOperationException("WMS IP 鏈厤缃�");
@@ -32,8 +29,8 @@
                     union_key = Guid.NewGuid().ToString(),
                     line_code = stationInfo.stationChildCode,
                     message_time = DateTime.Now,
-                    plant_code = "",
-                    pvi = "",
+                    plant_code = "1052",
+                    pvi = rfid,
                     station_code = stationInfo.stationChildCode,
                     vin = "",
                     pass_time = DateTime.Now
@@ -47,6 +44,9 @@
                     throw new Exception($"杞﹁韩杩囩偣寮傚父锛歿responseContent.Message}");
                 }
 
+                LogFactory.GetLog("杞﹁韩杩囩偣").Info(true, $"\r\r--------------------------------------");
+                LogFactory.GetLog("杞﹁韩杩囩偣").Info(true, $"宸ヤ綅鍙�:{stationCode},RFID:{rfid}");
+
                 return content;
             }
             catch (Exception ex)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs"
index 8533927..a883af1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs"
@@ -19,7 +19,7 @@
     /// </summary>
     public partial class MESService
     {
-        public WebResponseContent bindWorkOrder(string stationCode)
+        public WebResponseContent bindWorkOrder(string stationNo, string rfid)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -33,7 +33,7 @@
                 }
                 var wmsIpAddress = wmsBase + ipAddress;
 
-                var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == stationCode);
+                var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == stationNo);
 
                 BindWorkOrder passPoint = new BindWorkOrder()
                 {
@@ -41,7 +41,7 @@
                     stationCode = stationInfo.stationChildCode,
                     messageTime = DateTime.Now.ToString(),
                     plantCode = "1022",
-                    pvi = "",
+                    pvi = rfid,
                     workOrderNo = "",
                     workOrderType = "",
                     workshopCode = ""
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/getCharacteristic.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/getCharacteristic.cs"
new file mode 100644
index 0000000..4bb12f5
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/getCharacteristic.cs"
@@ -0,0 +1,73 @@
+锘縰sing Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Common.MES;
+using WIDESEA_Common.MES.Request;
+using WIDESEA_Core;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StoragIntegrationServices
+{
+    /// <summary>
+    /// BDC鍚慚ES璇锋眰杞﹁締鐗瑰緛淇℃伅
+    /// 鎺ュ彛鎻忚堪: BDC鍦≒BS01鍓嶄竴涓伐浣嶉�氳繃锛圥VI+鐧借溅韬悗4浣嶏級鍚慚ES璇锋眰VIN+杞﹁締鐗瑰緛淇℃伅鍐欏叆tag
+    /// </summary>
+    public partial class MESService
+    {
+        /// <summary>
+        ///  BDC璇锋眰杞﹁締鐗瑰緛淇℃伅
+        /// </summary>
+        /// <param name="rfidPrint">RFID</param>
+        /// <param name="stationNo">绔欏彴璇锋眰鐐逛綅</param>
+        /// <returns></returns>
+        public WebResponseContent getCharacteristic(string rfidPrint, string stationNo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                CarCharacteristicInfo characterInfo = new CarCharacteristicInfo()
+                {
+                    plantCode = "1052",
+                    rfidPrint = rfidPrint,
+                    vin = vin,
+                    messageTime = DateTime.Now.ToString(),
+                    unionKey = Guid.NewGuid().ToString(),
+                };
+
+                var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_MESIPAddress);
+                var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.MESIPAddress)?.ConfigValue;
+                var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.getCharacteristic)?.ConfigValue;
+                if (wmsBase == null || ipAddress == null)
+                {
+                    throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                }
+                var wmsIpAddress = wmsBase + ipAddress;
+
+                var MESrespon = HttpHelper.Post(wmsIpAddress, characterInfo.ToJson());
+
+                GetCarCharacteristicInfo characterRespon = JsonConvert.DeserializeObject<GetCarCharacteristicInfo>(MESrespon);
+                if (!characterRespon.success)
+                {
+                    throw new Exception($"{characterRespon}");
+                }
+
+                LogFactory.GetLog("BDC璇锋眰杞﹁締鐗瑰緛淇℃伅").Info(true, $"\r\r--------------------------------------");
+                LogFactory.GetLog("BDC璇锋眰杞﹁締鐗瑰緛淇℃伅").Info(true, $"宸ヤ綅鍙�:{stationNo},RFID:{rfidPrint}");
+
+                return content;
+            }
+            catch (Exception ex)
+            {
+                return content.Error($"BDC璇锋眰杞﹁締鐗瑰緛淇℃伅锛�:{ex.Message}");
+            }
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs"
index 6f43342..ded569a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs"
@@ -21,13 +21,7 @@
     /// </summary>
     public partial class MESService
     {
-        /// <summary>
-        ///  BDC璇锋眰鐒婅鐗瑰緛淇℃伅
-        /// </summary>
-        /// <param name="rfidPrint">RFID</param>
-        /// <param name="vin">VIN鍙�</param>
-        /// <param name="stationNo">绔欏彴璇锋眰鐐逛綅</param>
-        /// <returns></returns>
+       
         public WebResponseContent issuedCharacter(string rfidPrint, string vin, string stationNo)
         {
             WebResponseContent content = new WebResponseContent();
@@ -35,7 +29,7 @@
             {
                 IssuedCharacterInfo characterInfo = new IssuedCharacterInfo()
                 {
-                    plantCode = "1022",
+                    plantCode = "1052",
                     rfidPrint = rfidPrint,
                     vin = vin,
                     messageTime = DateTime.Now
@@ -70,10 +64,16 @@
                 };
 
                 _carBodyRepository.AddData(CarBody);
+
+                LogFactory.GetLog("璇锋眰鐒婅鐗瑰緛淇℃伅").Info(true, $"\r\r--------------------------------------");
+                LogFactory.GetLog("璇锋眰鐒婅鐗瑰緛淇℃伅").Info(true, $"宸ヤ綅鍙�:{stationNo},RFID:{rfidPrint}");
+
+
                 return content;
             }
             catch (Exception ex)
             {
+                LogFactory.GetLog("璇锋眰鐒婅鐗瑰緛淇℃伅").Info(true, $"璇锋眰鐒婅鐗瑰緛淇℃伅寮傚父锛�:{ex.Message}");
                 return content.Error($"璇锋眰鐒婅鐗瑰緛淇℃伅寮傚父锛�:{ex.Message}");
             }
         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/preBind.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/preBind.cs"
index 1bea05a..62586aa 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/preBind.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/preBind.cs"
@@ -15,9 +15,7 @@
 
 namespace WIDESEA_StoragIntegrationServices
 {
-    /// <summary>
-    /// 棰勭粦瀹�
-    /// </summary>
+  
     public partial class MESService
     {
         public WebResponseContent prebind(object json)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushOrderInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushOrderInfo.cs"
index 0c06a9d..199cf98 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushOrderInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushOrderInfo.cs"
@@ -18,9 +18,7 @@
 
 namespace WIDESEA_StoragIntegrationServices
 {
-    /// <summary>
-    /// 鎬昏宸ュ崟淇℃伅
-    /// </summary>
+   
     public partial class MESService
     {
         public WebResponseContent pushOrderInfo(object json)
@@ -132,6 +130,9 @@
                 _unitOfWorkManage.CommitTran();
 
                 responseContent.OK();
+
+                LogFactory.GetLog("鎬昏宸ュ崟淇℃伅").Info(true, $"\r\r--------------------------------------");
+                LogFactory.GetLog("鎬昏宸ュ崟淇℃伅").Info(true, json.ToJsonString());
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushWorkOrderInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushWorkOrderInfo.cs"
index 87cd9a1..d2f2daf 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushWorkOrderInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pushWorkOrderInfo.cs"
@@ -16,16 +16,13 @@
 using WIDESEA_DTO.WMS;
 using WIDESEA_Model.Models;
 using WIDESEA_StorageBasicRepository;
+using WIDESEA_StorageOutOrderRepository;
 
 namespace WIDESEA_StoragIntegrationServices
 {
     public partial class MESService
     {
-        /// <summary>
-        /// 娑傝宸ュ崟淇℃伅
-        /// </summary>
-        /// <param name="json"></param>
-        /// <returns></returns>
+        
         public WebResponseContent pushWorkOrderInfo(object json)
         {
             WebResponseContent content = new WebResponseContent();
@@ -35,11 +32,34 @@
 
                 var result = JsonConvert.DeserializeObject<pushWorkOrderInfo>(json.ToString());
 
-                var palletStockInfos = _palletStockInfoRepository.QueryData(x => x.OrderID == result.workOrderNo);
+                var paintingOrderInfos = new List<Dt_PaintingOrderInfo>();
+                foreach (var item in result.list)
+                {
+                    Dt_PaintingOrderInfo paintingOrderInfo = new Dt_PaintingOrderInfo()
+                    {
+                        biwMaterial = item.biwMaterial,
+                        carBodyCharacteristic = item.carBodyCharacteristic,
+                        config1 = item.config1,
+                        config3 = item.config3,
+                        CreateDate = DateTime.Now,
+                        Creater = "System",
+                        pbMaterial = item.pbMaterial,
+                        plantCode = item.plantCode,
+                        pvi = item.pvi,
+                        sequenceNo = item.sequenceNo,
+                        skylightCharacteristic = item.skylightCharacteristic,
+                        twoToneCharacteristic = item.twoToneCharacteristic,
+                        vehicleCharacteristic = item.vehicleCharacteristic,
+                        workOrderNo = item.workOrderNo,
+                        workOrderSendStatus = item.workOrderSendStatus,
+                        splitStrategy = item.splitStrategy,
+                        workOrderType = item.workOrderType,
+                        workshopCode = item.workshopCode,
+                    };
 
-
-
-
+                    paintingOrderInfos.Add(paintingOrderInfo);
+                }
+                _paintingOrderInfoRepository.AddData(paintingOrderInfos);
 
                 LogFactory.GetLog("娑傝宸ュ崟淇℃伅").Info(true, $"\r\r--------------------------------------");
                 LogFactory.GetLog("娑傝宸ュ崟淇℃伅").Info(true, result.ToJsonString());
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_BDCConfigurationService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_BDCConfigurationService.cs"
index dd3f952..f3d45a4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_BDCConfigurationService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_BDCConfigurationService.cs"
@@ -50,8 +50,8 @@
                 MaxPaintedBodyCache = maxPaintedBody,
                 MaxBatteryCaseCache = maxBatteryCase,
                 MaxEmptySledCache = maxEmptySled,
-                LastUpdatedTime = DateTime.Now,
-                UpdatedBy = App.User.UserName,
+                CreateDate = DateTime.Now,
+                Creater = App.User.UserName,
                 IsActive = 1
             };
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/BDCManager/BDCManager.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/BDCManager/BDCManager.cs"
index 21003a2..8f902cf 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/BDCManager/BDCManager.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/BDCManager/BDCManager.cs"
@@ -4,6 +4,7 @@
 using System.Security.Cryptography.X509Certificates;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_IStoragIntegrationServices;
 using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_BasicInfoService;
 
@@ -17,14 +18,16 @@
         private readonly ILocationInfoRepository _locationRepository;
         private readonly IDt_RoadWayInfoRepository _roadWayInfoRepository;
         private readonly IDt_RoadWayRepository _roadWayRepository;
-
+        private readonly IMESService _mesService;
+ 
 
         // 鏇存柊鏋勯�犲嚱鏁�
-        public BDCManager(IDt_BDCConfigurationService BDCConfigurationService, ILocationInfoRepository locationInfoRepository, IDt_RoadWayInfoRepository roadWayInfoRepository )
+        public BDCManager(IDt_BDCConfigurationService BDCConfigurationService, ILocationInfoRepository locationInfoRepository, IDt_RoadWayInfoRepository roadWayInfoRepository, IMESService mesService)
         {
             _BDCConfigurationService = BDCConfigurationService;
             _locationRepository = locationInfoRepository;
             _roadWayInfoRepository = roadWayInfoRepository;
+            _mesService = mesService;
         }
 
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs"
index 9cc2883..1af1811 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs"
@@ -45,9 +45,9 @@
 
             var carBody = _carBodyRepository.QueryFirst(x => x.PalletCode == input.PalletCode);
 
-            BDCManager bDCManager = new BDCManager(_bdcConfigurationService, _locationRepository, _roadWayInfoRepository);
+            //BDCManager bDCManager = new BDCManager(_bdcConfigurationService, _locationRepository, _roadWayInfoRepository);
 
-            await bDCManager.AddToBDC(carBody);
+            //await bDCManager.AddToBDC(carBody);
 
             // 鑾峰彇搴撲綅
             var location = RequestLocation(stationInfo.Roadway);
@@ -96,10 +96,11 @@
     #endregion 璇锋眰浠诲姟鍏ュ簱
 
     #region 搴撲綅鍒嗛厤
+
     #region 鑾峰彇璐т綅
     object objLOCK = new object();
     /// <summary>
-    /// 鍙屽崌搴撲綅鍒嗛厤
+    /// 搴撲綅鍒嗛厤
     /// </summary>
     /// <param name="requestTask"></param>
     /// <param name="locationInfos"></param>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/MES/MESController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/MES/MESController.cs"
index 079f645..b860861 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/MES/MESController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/MES/MESController.cs"
@@ -7,7 +7,7 @@
 
 namespace WIDESEA_WMSServer.Controllers;
 
-[Route("api/[controller]")]
+[Route("api/BDC")]
 [ApiController]
 public class MESController : Controller
 {
@@ -26,9 +26,9 @@
     /// <param name="stationCode"></param>
     /// <returns></returns>
     [HttpPost, Route("PassPoint"), AllowAnonymous]
-    public WebResponseContent PassPoint(string stationCode)
+    public WebResponseContent PassPoint(string stationCode,string rfid)
     {
-        return _MESService.PassPoint(stationCode);
+        return _MESService.PassPoint(stationCode, rfid);
     }
 
     /// <summary>
@@ -63,4 +63,15 @@
     {
         return _MESService.issuedCharacter(carCode, vin, station);
     }
+
+    /// <summary>
+    /// 杞﹁韩杩囩偣
+    /// </summary>
+    /// <param name="stationCode"></param>
+    /// <returns></returns>
+    [HttpPost, Route("PassPoint"), AllowAnonymous]
+    public WebResponseContent PassPoint(string stationCode, string rfid)
+    {
+        return _MESService.(stationCode, rfid);
+    }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs"
index 8f30d8d..518ce68 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs"
@@ -88,4 +88,16 @@
     {
         return Service.CreateAndSendOutboundTask(saveModel);
     }
+
+    /// <summary>
+    /// 浠诲姟鐘舵�佷慨鏀�
+    /// </summary>
+    /// <param name="input">璇锋眰鏁版嵁</param>
+    /// <returns></returns>
+    //[HttpPost, AllowAnonymous, Route("UpdateTaskStatus")]
+    ////[TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
+    //public async Task<WebResponseContent> UpdateTaskStatus([FromBody] UpdateStatusDto input)
+    //{
+    //    return await Service.UpdateTaskStatus(input.TaskNum, input.TaskState);
+    //}
 }
\ No newline at end of file

--
Gitblit v1.9.3