From 6e380a6002fb7675f8795d8c223801cf6ec67347 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <1247017146@qq.com>
Date: 星期三, 26 三月 2025 09:22:21 +0800
Subject: [PATCH] 修改化成实框与空框去静置逻辑
---
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerJZCrane.cs | 501 ++++++++++++++++++++
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerJZCraneJob.cs | 505 +++++++++++++++++++++
/dev/null | 341 --------------
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.csproj.FileListAbsolute.txt | 11
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 2
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs | 2
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 2
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/WIDESEA_StorageTaskServices.csproj | 3
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user | 2
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs | 25
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user | 4
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 2
12 files changed, 1,048 insertions(+), 352 deletions(-)
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
index 390e0cb..dee45b4 100644
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
@@ -87,6 +87,6 @@
/// </summary>
public const string SetEmptyOutbyInToOutOneAsync = "SetEmptyOutbyInToOutOneAsync";
- public const string GetJZStockInfo = "GetJZStockInfo";
+ public const string QueryStockInfoForRealTrayJZAsync = "QueryStockInfoForRealTrayJZAsync";
}
}
\ No newline at end of file
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerJZCrane.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerJZCrane.cs
new file mode 100644
index 0000000..b5b5595
--- /dev/null
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerJZCrane.cs
@@ -0,0 +1,501 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_QuartzJob
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛氫竴鑸爢鍨涙満瀹炵幇绫伙紝瀹炵幇鍫嗗灈鏈烘帴鍙e眰
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using HslCommunication;
+using Microsoft.AspNetCore.Http;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core.Enums;
+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 CommonStackerJZCrane : 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 DeviceStatus Status => GetStatus();
+
+ /// <summary>
+ /// 涓婁竴娆℃墽琛岀殑浠诲姟鍙�
+ /// </summary>
+ public int LastTaskNum => _lastTaskNum;
+
+ /// <summary>
+ /// 褰撳墠姝e湪鎵ц鐨勪换鍔″彿
+ /// </summary>
+ public int CurrentTaskNum => GetCurrentTaskNum();
+
+ /// <summary>
+ /// 鍫嗗灈鏈虹姸鎬�
+ /// </summary>
+ public StackerCraneStatus StackerCraneStatusValue => GetStackerCraneStatus();
+
+ /// <summary>
+ /// 鍫嗗灈鏈虹姸鎬佷腑鏂囪鏄�
+ /// </summary>
+ public string StackerCraneStatusDes => GetEnumDes(StackerCraneStatusValue);
+
+ /// <summary>
+ /// 鎵嬭嚜鍔ㄧ姸鎬�
+ /// </summary>
+ public StackerCraneAutoStatus StackerCraneAutoStatusValue => GetStackerCraneAutoStatus();
+
+ /// <summary>
+ /// 鎵嬭嚜鍔ㄧ姸鎬佷腑鏂囪鏄�
+ /// </summary>
+ public string StackerCraneAutoStatusDes => GetEnumDes(StackerCraneAutoStatusValue);
+
+ /// <summary>
+ /// 浣滀笟鐘舵��
+ /// </summary>
+ public StackerCraneWorkStatus StackerCraneWorkStatusValue => GetStackerCraneWorkStatus();
+
+ /// <summary>
+ /// 浣滀笟鐘舵�佷腑鏂囪鏄�
+ /// </summary>
+ public string StackerCraneWorkStatusDes => GetEnumDes(StackerCraneWorkStatusValue);
+
+ /// <summary>
+ /// 璁惧缂栧彿
+ /// </summary>
+ public string DeviceCode => _deviceCode;
+
+ /// <summary>
+ /// 璁惧鍚嶇О
+ /// </summary>
+ public string DeviceName => _deviceName;
+
+ /// <summary>
+ /// 鍫嗗灈鏈烘槸鍚︽湁鏁呴殰
+ /// </summary>
+ public bool IsFault => StackerCraneStatusValue == StackerCraneStatus.Fault;
+
+ /// <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;
+ #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 CommonStackerJZCrane(BaseCommunicator communicator, List<DeviceProDTO> deviceProDTOs, List<DeviceProtocolDetailDTO> deviceProtocolDetailDTOs, string deviceCode, string deviceName)
+ {
+ _communicator = communicator;
+ _deviceProDTOs = deviceProDTOs;
+ _deviceProtocolDetailDTOs = deviceProtocolDetailDTOs;
+ _deviceCode = deviceCode;
+ _deviceName = deviceName;
+ CheckConnect();
+ }
+ #endregion
+
+ #region Private Method
+ /// <summary>
+ /// 鏍规嵁鍗忚璇诲彇鍫嗗灈鏈虹姸鎬�
+ /// </summary>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ private DeviceStatus GetStatus()
+ {
+ if (IsFault)
+ {
+ return DeviceStatus.Fault;
+ }
+ else if (!IsConnected)
+ {
+ return DeviceStatus.Offline;
+ }
+ if (StackerCraneStatusValue == StackerCraneStatus.Normal && StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic)
+ {
+ if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+ {
+ return DeviceStatus.Idle;
+ }
+ else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutCompleted)
+ {
+ return DeviceStatus.Working;
+ }
+ }
+ return DeviceStatus.Unkonw;
+ }
+
+ private int GetCurrentTaskNum()
+ {
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CurrentTaskNum));
+ return devicePro == null ? throw new Exception() : (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍫嗗灈鏈鸿澶囩姸鎬�
+ /// </summary>
+ /// <returns></returns>
+ private StackerCraneStatus GetStackerCraneStatus()
+ {
+ return Enum.Parse<StackerCraneStatus>(GetStatus(nameof(StackerCraneStatus)));
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍫嗗灈鏈烘墜鑷姩鐘舵��
+ /// </summary>
+ /// <returns></returns>
+ private StackerCraneAutoStatus GetStackerCraneAutoStatus()
+ {
+ return Enum.Parse<StackerCraneAutoStatus>(GetStatus(nameof(StackerCraneAutoStatus)));
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍫嗗灈鏈哄伐浣滅姸鎬�
+ /// </summary>
+ /// <returns></returns>
+ private StackerCraneWorkStatus GetStackerCraneWorkStatus()
+ {
+ return Enum.Parse<StackerCraneWorkStatus>(GetStatus(nameof(StackerCraneWorkStatus)));
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏋氫妇璇存槑
+ /// </summary>
+ /// <typeparam name="T">鏋氫妇娉涘瀷</typeparam>
+ /// <param name="value"></param>
+ /// <returns></returns>
+ private string GetEnumDes<T>(T value) where T : Enum
+ {
+ FieldInfo? fieldInfo = typeof(T).GetField(value.ToString());
+ if (fieldInfo != null)
+ {
+ DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+ if (descriptionAttribute != null)
+ {
+ return descriptionAttribute.Description;
+ }
+ return "鏈畾涔�";
+ }
+ return "鏈煡";
+ }
+
+ /// <summary>
+ /// 鏍规嵁鍗忚鍙傛暟绫诲瀷鑾峰彇鐘舵��
+ /// </summary>
+ /// <param name="protocolParamType">鍗忚鍙傛暟绫诲瀷</param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ private string GetStatus(string protocolParamType)
+ {
+ if (Communicator.IsConnected)
+ {
+ List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList();
+ if (devicePros.Count == 0)
+ {
+ throw new Exception("鏈幏鍙栧埌鍗忚淇℃伅");
+ }
+ for (int i = 0; i < devicePros.Count; i++)
+ {
+ object readStatus = Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType);
+ //todo 鍗忚鏄庣粏淇℃伅鏈幏鍙栧埌鏃舵姏鍑哄紓甯�
+ DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception();
+ deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString()));
+ if (deviceProtocolDetail != null)
+ {
+ return deviceProtocolDetail.ProtocolDetailType;
+ }
+ return StackerCraneStatus.Unkonw.ToString();
+ }
+ }
+ //todo 閫氳鏈繛鎺ユ椂鎶涘嚭寮傚父
+ return StackerCraneStatus.Unkonw.ToString();
+ }
+
+ /// <summary>
+ /// 姣旇緝涓や釜鍊兼槸鍚︾浉绛夈��
+ /// </summary>
+ /// <param name="value">绗竴涓�笺��</param>
+ /// <param name="paramValue">绗簩涓�笺��</param>
+ /// <returns>杩斿洖姣旇緝缁撴灉銆�</returns>
+ private bool Compare(object value, object paramValue)
+ {
+ return value.Equals(paramValue);
+ }
+
+ private void CheckConnect()
+ {
+ Task.Run(() =>
+ {
+ while (_heartStatr)
+ {
+ try
+ {
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault();
+ if (devicePro == null)
+ _isConnected = false;
+ else
+ Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+ _isConnected = true;
+ }
+ catch (Exception ex)
+ {
+ _isConnected = false;
+ }
+ Thread.Sleep(500);
+ }
+ });
+ }
+ #endregion
+
+ #region Public Method
+ /// <summary>
+ /// 鍙戦�佷换鍔″懡浠�
+ /// </summary>
+ /// <param name="command">浠诲姟鍛戒护</param>
+ /// <returns></returns>
+ public bool SendCommand<T>(T command) where T : IDataTransfer, new()
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+ if (devicePro == null)
+ {
+ return false;
+ }
+ if (Communicator.WriteCustomer(devicePro.DeviceProAddress, command))
+ {
+ StackerCraneTaskCommand = command;
+ CheckStackerCraneTaskCompleted();
+ return true;
+ }
+ return false;
+ }
+
+ /// <summary>
+ /// 鐩戞祴鍫嗗灈鏈轰换鍔℃槸鍚﹀畬鎴�(闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽畾涔夋墜鍔ㄨЕ鍙戝姛鑳�)
+ /// </summary>
+ public void CheckStackerCraneTaskCompleted()
+ {
+ if (_isChecked)
+ return;
+
+ Task.Run(() =>
+ {
+ _isChecked = true;
+ try
+ {
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneWorkStatus));
+ if (devicePro != null)
+ {
+ DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePro.DeviceProParamName && x.ProtocolDetailType == StackerCraneWorkStatus.WorkCompleted.ToString());
+ if (deviceProtocolDetail != null)
+ {
+ OperateResult<TimeSpan> operateResult = new OperateResult<TimeSpan>();
+ TypeCode typeCode = SiemensDBDataType.GetTypeCode(devicePro.DeviceDataType);
+ switch (typeCode)
+ {
+ case TypeCode.Boolean:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToBoolean(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Byte:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToByte(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Int16:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToInt16(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Int32:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToInt32(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.UInt16:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToUInt16(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.UInt32:
+ operateResult = Communicator.Wait(devicePro.DeviceProAddress, ReadTimeout, WaitTimeout, Convert.ToUInt32(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ default:
+ break;
+ }
+ int taskNum = CurrentTaskNum;
+ if (operateResult.IsSuccess /*&& LastTaskNum != taskNum*/)
+ {
+ StackerCraneTaskCompletedEventArgs args = new(taskNum);
+ StackerCraneTaskCompletedEventHandler?.Invoke(this, args);
+ _lastTaskNum = taskNum;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+ finally
+ {
+ _isChecked = false;
+ }
+ });
+ }
+
+ /// <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) where TEnum : Enum
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString());
+ return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+ }
+
+ /// <summary>
+ /// 涓庤澶囩殑蹇冭烦
+ /// </summary>
+ public void Heartbeat()
+ {
+
+ }
+
+ /// <summary>
+ /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
+ /// </summary>
+ /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+ /// <typeparam name="TValue">瑕佸啓鍏ョ殑鏁版嵁绫诲瀷銆�</typeparam>
+ /// <param name="enum">鍙傛暟鍚嶇О銆�</param>
+ /// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
+ /// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
+ /// <exception cref="Exception"></exception>
+ public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value)
+ where TEnum : Enum
+ where TValue : notnull
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString());
+ return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+ }
+
+ public void Dispose()
+ {
+ _heartStatr = false;
+ _communicator.Dispose();
+ GC.SuppressFinalize(this);
+ }
+ #endregion
+ }
+}
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index cd8c5d1..ea18105 100644
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -93,7 +93,7 @@
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
// 鍒ゆ柇浠诲姟鐩爣鍦板潃鍜岃矾寰勬槸鍚︽弧瓒崇壒瀹氭潯浠�
- if ((task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001") && task.Roadway.Contains("JZ"))
+ if ((task.TargetAddress == "002-061-003" || task.TargetAddress == "001-061-003") && task.Roadway.Contains("JZ"))
{
// 璁剧疆浠诲姟鐘舵�佷负鍑哄簱鏂板缓
task.TaskState = (int)TaskOutStatusEnum.OutNew;
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
index b3c67f3..f8e5d93 100644
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -851,6 +851,7 @@
// 瑙f瀽浠诲姟鏁版嵁
taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+ WriteInfo("鍑哄簱", $"銆恵JsonConvert.SerializeObject(taskDTO)}銆�");
#endregion 璋冪敤WMS鑾峰彇鍑哄簱浠诲姟
@@ -865,6 +866,7 @@
public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO)
{
var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+ WriteInfo("鍑哄簱", $"銆恵JsonConvert.SerializeObject(content)}銆�");
if (content.Status)
{
Console.WriteLine($"{taskDTO.TargetAddress}鍛煎彨鎴愬姛");
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
index 8a99dbb..914c7c6 100644
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
@@ -1,6 +1,8 @@
锘縰sing HslCommunication;
using Mapster;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
+using Microsoft.CodeAnalysis;
+using Microsoft.VisualBasic;
using Newtonsoft.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@@ -388,7 +390,6 @@
#endregion
}
-
/// <summary>
/// 鎴愬寲鍏ラ潤缃�
/// </summary>
@@ -419,7 +420,7 @@
ConsoleHelper.WriteSuccessLine($"MOM鏁版嵁寮傚父,閫佽嚦浜屽皝銆恵resultTrayCellsStatus.ProductionLine}銆戝紓甯稿彛銆恵Convert.ToInt32(platform.Capacity)}銆�");
return;
}
- if (resultTrayCellsStatus.SerialNos.Count < 0)
+ if (resultTrayCellsStatus.SerialNos.Count == 0)
{
var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
if (Traycontent.Status)
@@ -433,13 +434,13 @@
{
var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
var wmsbase = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
- var address = configz.Where(x => x.ConfigKey == SysConfigKeyConst.GetJZStockInfo).FirstOrDefault()?.ConfigValue;
+ var address = configz.Where(x => x.ConfigKey == SysConfigKeyConst.QueryStockInfoForRealTrayJZAsync).FirstOrDefault()?.ConfigValue;
if (wmsbase == null || address == null)
{
throw new InvalidOperationException("WMS IP 鏈厤缃�");
}
var wmsIpAddrss = wmsbase + address;
- var result = await HttpHelper.PostAsync(wmsIpAddrss);
+ var result = await HttpHelper.PostAsync(wmsIpAddrss, new { ProductLine = resultTrayCellsStatus.ProductionLine }.ToJsonString());
var StockInfocontent = JsonConvert.DeserializeObject<WebResponseContent>(result);
if (StockInfocontent.Status)
{
@@ -470,12 +471,19 @@
}
else
{
- ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
+ var Task = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
+ if (Task.Status)
+ {
+ ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
+ }
return;
}
}
else
+ {
WriteInfo(conveyorLine.DeviceName, Taskcontent.Message);
+ return;
+ }
}
else
{
@@ -519,6 +527,11 @@
}
else
{
+ var Task = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
+ if (Task.Status)
+ {
+ ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
+ }
ConsoleHelper.WriteWarningLine("浜屽皝缂撳瓨浣嶅凡婊�");
return;
}
@@ -537,7 +550,7 @@
{
conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode);
- var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏),涓嬩竴鐩爣鍦板潃銆恵1000}銆�";
+ var log = $"銆恵conveyorLine._deviceName}銆戜换鍔″彿锛氥�恵task.TaskNum}銆�,鎵樼洏鏉$爜锛氥�恵task.PalletCode}銆戝凡鍒拌揪銆恵childDeviceCode}銆戣姹傛壂鐮佸叆搴�(瀹炵洏or绌虹洏),涓嬩竴鐩爣鍦板潃銆恵1000}銆�";
ConsoleHelper.WriteWarningLine(log);
_noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerJZCraneJob.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerJZCraneJob.cs
new file mode 100644
index 0000000..161de73
--- /dev/null
+++ b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerJZCraneJob.cs
@@ -0,0 +1,505 @@
+锘縰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;
+using WIDESEA_Services;
+
+namespace WIDESEAWCS_Tasks
+{
+ [DisallowConcurrentExecution]
+ public class CommonStackerJZCraneJob : 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 CommonStackerJZCraneJob(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
+ {
+ CommonStackerJZCrane commonStackerCrane = (CommonStackerJZCrane)context.JobDetail.JobDataMap.Get("JobParams");
+ if (commonStackerCrane != null)
+ {
+ //EqptAlive(commonStackerCrane);
+ //Console.Out.WriteLine(commonStackerCrane.DeviceName);
+ if (!commonStackerCrane.IsEventSubscribed)
+ {
+ commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+ }
+
+ if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
+ {
+ commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+
+ if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+ {
+ Dt_Task? task = null;
+ if (StaticVariable.isLineRun)
+ {
+ StaticVariable.isStackerRun = false;
+ task = GetTask(commonStackerCrane);
+ }
+ if (task != null)
+ {
+ StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+ if (stackerCraneTaskCommand != null)
+ {
+ Thread.Sleep(1000);
+ bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
+ if (sendFlag)
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.AppendLine();
+ builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満鐘舵�侊細銆恵commonStackerCrane.StackerCraneStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
+ builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戞墜鑷姩鐘舵�侊細銆恵commonStackerCrane.StackerCraneAutoStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
+ builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戜綔涓氱姸鎬侊細銆恵commonStackerCrane.StackerCraneWorkStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
+ builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戜笅鍙戜换鍔℃垚鍔�,銆恵JsonConvert.SerializeObject(stackerCraneTaskCommand, Formatting.Indented)}銆�");
+ builder.AppendLine($"鏃堕棿锛氥�恵DateTime.Now}銆�");
+ builder.AppendLine();
+ ConsoleHelper.WriteColorLine(builder, ConsoleColor.Blue);
+ commonStackerCrane.LastTaskType = task.TaskType;
+ _taskService.UpdateTaskStatusToNext(task.TaskNum);
+ }
+ }
+ }
+ }
+ }
+
+ #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+ var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
+ if (tokenInfos == null || !tokenInfos.Any())
+ {
+ //throw new Exception(commonStackerCrane.DeviceName + "缂撳瓨涓湭鎵惧埌Token缂撳瓨");
+ return Task.CompletedTask;
+ }
+ var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+ var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+
+ object obj = new
+ {
+ commonStackerCrane.StackerCraneStatusDes,
+ commonStackerCrane.StackerCraneAutoStatusDes,
+ commonStackerCrane.StackerCraneWorkStatusDes,
+ commonStackerCrane.DeviceCode,
+ commonStackerCrane.DeviceName,
+ commonStackerCrane.CurrentTaskNum,
+ commonStackerCrane.LastTaskNum,
+ };
+ _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj });
+
+ #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+ }
+ }
+ catch (Exception ex)
+ {
+ WriteError("CommonStackerStationCraneJob", "test", ex);
+ //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
+ }
+ finally
+ {
+ StaticVariable.isStackerRun = true;
+ }
+ //WriteDebug("CommonStackerStationCraneJob", "test");
+ return Task.CompletedTask;
+ }
+
+ /// <summary>
+ /// 浠诲姟瀹屾垚浜嬩欢璁㈤槄鐨勬柟娉�
+ /// </summary>
+ /// <param name="sender"></param>
+ /// <param name="e"></param>
+ private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
+ {
+ CommonStackerJZCrane? commonStackerCrane = sender as CommonStackerJZCrane;
+ if (commonStackerCrane != null)
+ {
+ if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+ {
+ ConsoleHelper.WriteColorLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵(int)commonStackerCrane.StackerCraneWorkStatusValue}銆戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
+
+ string str = $"銆恵commonStackerCrane.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
+ WriteInfo(commonStackerCrane.DeviceName, str);
+ ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+ var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
+
+ if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+
+ if (commonStackerCrane.DeviceCode.Contains("GW") && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
+
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC);
+ if (device != null)
+ {
+ CommonConveyorLine_GW conveyorLine = (CommonConveyorLine_GW)device;
+ var isResult = conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, task.TargetAddress);
+ if (!isResult)
+ {
+ var result = conveyorLine.GetValue<ConveyorLineDBName_After, string>(ConveyorLineDBName_After.ConveyorLineBarcode, task.TargetAddress);
+ if (result != task.PalletCode)
+ {
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, task.TargetAddress);
+ }
+ }
+ }
+ else
+ return;
+ }
+
+ var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
+ if (commonStackerCrane.DeviceCode.Contains("CH") && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+ {
+ task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
+ Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
+ }
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && (task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001"))
+ {
+ var TASKHTY = task.Adapt<Dt_Task_Hty>();
+ _taskRepository.DeleteData(task);
+ _htyRepository.AddData(TASKHTY);
+ }
+ var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+ str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
+ WriteInfo(commonStackerCrane.DeviceName, str);
+ ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鑾峰彇浠诲姟
+ /// </summary>
+ /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param>
+ /// <returns></returns>
+ private Dt_Task? GetTask(CommonStackerJZCrane commonStackerCrane)
+ {
+ Dt_Task task;
+
+ if (commonStackerCrane.LastTaskType == null)
+ {
+ task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+ }
+ else
+ {
+ if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ if (task == null)
+ {
+ var taskLinInExecuting = _taskService.QueryStackerLineExecutingTask(commonStackerCrane.DeviceCode);
+ if(taskLinInExecuting == null)
+ {
+ task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ }
+ else
+ {
+ task = null;
+ }
+
+ }
+ }
+ else
+ {
+ task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ }
+ }
+
+ if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ // 妫�鏌ュ綋鍓嶅嚭搴撲换鍔$珯鍙版槸鍚﹀厑璁告斁璐�
+ var occupiedStation = OutTaskStationIsOccupied(task);
+ if (occupiedStation == null)
+ {
+ // 濡傛灉褰撳墠鍑哄簱浠诲姟绔欏彴涓嶅厑璁告斁璐э紝鎺掗櫎褰撳墠浠诲姟锛屾煡鎵惧叾浠栧嚭搴撲换鍔�
+ ConsoleHelper.WriteErrorLine($"浠诲姟鍙凤細銆恵task.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵task.NextAddress}銆戜笉鍏佽鏀捐揣");
+ task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task);
+ }
+ else
+ {
+ return task;
+ }
+
+ if (task == null)
+ {
+ task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ }
+ }
+ else if (task == null)
+ {
+ task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ }
+
+ return task;
+ }
+
+ /// <summary>
+ /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
+ /// </summary>
+ /// <param name="task">浠诲姟瀹炰綋</param>
+ /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
+ private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
+ {
+ var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress && x.Roadway == task.Roadway);
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationinfo.stationPLC);
+ if (device != null)
+ {
+ CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)device;
+ if (conveyorLine.IsOccupied(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤
+ {
+ return task;
+ }
+ }
+ else
+ {
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵task.NextAddress}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// 鏌ユ壘鍏朵粬鍑哄簱浠诲姟鐨勮緟鍔╂柟娉曪紙鎺掗櫎涓嶅彲鍑虹殑鍑哄簱鍙d换鍔★級
+ /// </summary>
+ /// <param name="deviceCode">璁惧浠g爜</param>
+ /// <param name="excludedTaskId">瑕佹帓闄ょ殑浠诲姟ID</param>
+ /// <returns></returns>
+ private Dt_Task? FindAnotherOutboundTask(string deviceCode, Dt_Task task)
+ {
+ // 鍏堣幏鍙栨墍鏈夌鍚堟潯浠讹紙鎺掗櫎涓嶅彲鍑虹殑锛夌殑鍑哄簱浠诲姟鍒楄〃
+ var allOutboundTasks = _taskService.QueryAllOutboundTasks(deviceCode);
+ Console.WriteLine(allOutboundTasks.Count);
+ var availableTasks = allOutboundTasks?.Where(t => t.TargetAddress != task.TargetAddress && t.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup).ToList();
+
+ Console.WriteLine("鍏朵粬鍑哄簱鍙d换鍔★細" + availableTasks?.Count);
+
+ if (availableTasks == null || availableTasks.Count == 0)
+ {
+ return null;
+ }
+
+ // 閬嶅巻鍙敤浠诲姟鍒楄〃锛屾鏌ヤ换鍔$珯鍙版槸鍚﹀厑璁告斁璐э紝鎵惧埌绗竴涓厑璁告斁璐х殑浠诲姟灏辫繑鍥�
+ foreach (var candidateTask in availableTasks)
+ {
+ var occupiedStation = OutTaskStationIsOccupied(candidateTask);
+ if (occupiedStation != null)
+ {
+ return candidateTask;
+ }
+ ConsoleHelper.WriteErrorLine($"浠诲姟鍙凤細銆恵candidateTask.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵candidateTask.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.Barcode = task.PalletCode;
+ stackerCraneTaskCommand.TaskNum = task.TaskNum;
+ stackerCraneTaskCommand.WorkType = 1;
+ stackerCraneTaskCommand.TrayType = 0;
+ stackerCraneTaskCommand.StartCommand = 1;
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
+ {
+ var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
+ var valueList = value.Split(',').ToList();
+ if (valueList.Contains(task.SourceAddress) && (task.Roadway.Contains("CH") || task.Roadway.Contains("JZ")))
+ {
+ string[] souredCodes = task.CurrentAddress.Split("-");
+ if (souredCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(souredCodes[0]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(souredCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(souredCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+ string[] targetCodes = task.NextAddress.Split("-");
+ if (targetCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+ return null;
+ }
+ }
+ else
+ {
+ List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
+ if (routers.Count > 0)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
+
+ string[] targetCodes = task.NextAddress.Split("-");
+ if (targetCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = 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)
+ {
+ if (task.Roadway.Contains("GW"))
+ {
+ string[] endCodes = task.NextAddress.Split("-");
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(endCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(endCodes[2]);
+ string[] sourceCodes = task.SourceAddress.Split("-");
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ }
+ else
+ {
+ if ((task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001") && task.Roadway.Contains("JZ"))
+ {
+ string[] endCodes = task.NextAddress.Split("-");
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(endCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(endCodes[2]);
+ string[] sourceCodes = task.SourceAddress.Split("-");
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ }
+ else
+ {
+ List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
+ if (routers.Count > 0)
+ {
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
+
+ string[] sourceCodes = task.CurrentAddress.Split("-");
+ if (sourceCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = 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.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+ return null;
+ }
+ string[] sourceCodes = task.CurrentAddress.Split("-");
+ if (sourceCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ }
+ else
+ {
+ //鏁版嵁閰嶇疆閿欒
+ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+ return null;
+ }
+ }
+ return stackerCraneTaskCommand;
+ }
+ }
+}
\ No newline at end of file
diff --git a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerStationCraneJob.cs b/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerStationCraneJob.cs
deleted file mode 100644
index ca9174b..0000000
--- a/CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerStationCraneJob.cs
+++ /dev/null
@@ -1,341 +0,0 @@
-锘縰sing HslCommunication;
-using Newtonsoft.Json;
-using Quartz;
-using System.Diagnostics.CodeAnalysis;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEAWCS_BasicInfoRepository;
-using WIDESEAWCS_Common.TaskEnum;
-using WIDESEAWCS_Core.Caches;
-using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_Core.HttpContextUser;
-using WIDESEAWCS_DTO.MOM;
-using WIDESEAWCS_IProcessRepository;
-using WIDESEAWCS_ITaskInfoRepository;
-using WIDESEAWCS_ITaskInfoService;
-using WIDESEAWCS_Model;
-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.StackerCraneJob;
-using WIDESEAWCS_Common;
-
-namespace WIDESEAWCS_Tasks
-{
- [DisallowConcurrentExecution]
- public class CommonStackerJZCraneJob : JobBase, IJob
- {
- private readonly ITaskService _taskService;
- private readonly ITaskExecuteDetailService _taskExecuteDetailService;
- private readonly ITaskRepository _taskRepository;
- private readonly IProcessRepository _processRepository;
- private readonly IDt_StationManagerRepository _stationManagerRepository;
- private readonly ICacheService _cacheService;
- private readonly INoticeService _noticeService;
-
- public CommonStackerJZCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService)
- {
- _taskService = taskService;
- _taskExecuteDetailService = taskExecuteDetailService;
- _taskRepository = taskRepository;
- _processRepository = processRepository;
- _stationManagerRepository = stationManagerRepository;
- _cacheService = cacheService;
- _noticeService = noticeService;
- }
-
- public Task Execute(IJobExecutionContext context)
- {
- try
- {
- CommonStackerStationCrane commonStackerCrane = (CommonStackerStationCrane)context.JobDetail.JobDataMap.Get("JobParams");
- if (commonStackerCrane != null)
- {
- //EqptAlive(commonStackerCrane);
- //Console.Out.WriteLine(commonStackerCrane.DeviceName);
- if (!commonStackerCrane.IsEventSubscribed)
- {
- commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
- }
-
- if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
- {
- commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
-
- if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
- {
- Dt_Task? task = null;
- if (StaticVariable.isLineRun)
- {
- StaticVariable.isStackerRun = false;
- task = GetTask(commonStackerCrane);
- }
- if (task != null)
- {
- StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
- if (stackerCraneTaskCommand != null)
- {
- Thread.Sleep(1000);
- bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
- if (sendFlag)
- {
- StringBuilder builder = new StringBuilder();
- builder.AppendLine();
- builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満鐘舵�侊細銆恵commonStackerCrane.StackerCraneStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
- builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戞墜鑷姩鐘舵�侊細銆恵commonStackerCrane.StackerCraneAutoStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
- builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戜綔涓氱姸鎬侊細銆恵commonStackerCrane.StackerCraneWorkStatusDes}銆�,鏃堕棿锛氥�恵DateTime.Now}銆�");
- builder.AppendLine($"銆恵commonStackerCrane.DeviceName}銆戜笅鍙戜换鍔℃垚鍔�,銆恵JsonConvert.SerializeObject(stackerCraneTaskCommand, Formatting.Indented)}銆�");
- builder.AppendLine($"鏃堕棿锛氥�恵DateTime.Now}銆�");
- builder.AppendLine();
- ConsoleHelper.WriteColorLine(builder, ConsoleColor.Blue);
- commonStackerCrane.LastTaskType = task.TaskType;
- _taskService.UpdateTaskStatusToNext(task.TaskNum);
- }
- }
- }
- }
- }
-
- #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
-
- var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
- if (tokenInfos == null || !tokenInfos.Any())
- {
- //throw new Exception(commonStackerCrane.DeviceName + "缂撳瓨涓湭鎵惧埌Token缂撳瓨");
- return Task.CompletedTask;
- }
- var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
- var userIds = tokenInfos?.Select(x => x.UserId).ToList();
-
- object obj = new
- {
- commonStackerCrane.StackerCraneStatusDes,
- commonStackerCrane.StackerCraneAutoStatusDes,
- commonStackerCrane.StackerCraneWorkStatusDes,
- commonStackerCrane.DeviceCode,
- commonStackerCrane.DeviceName,
- commonStackerCrane.CurrentTaskNum,
- commonStackerCrane.LastTaskNum,
- };
- _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj });
-
- #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
- }
- }
- catch (Exception ex)
- {
- WriteError("CommonStackerStationCraneJob", "test", ex);
- //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
- }
- finally
- {
- StaticVariable.isStackerRun = true;
- }
- //WriteDebug("CommonStackerStationCraneJob", "test");
- return Task.CompletedTask;
- }
-
- /// <summary>
- /// 浠诲姟瀹屾垚浜嬩欢璁㈤槄鐨勬柟娉�
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
- {
- CommonStackerStationCrane? commonStackerCrane = sender as CommonStackerStationCrane;
- if (commonStackerCrane != null)
- {
- if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
- {
- ConsoleHelper.WriteColorLine($"銆恵commonStackerCrane.DeviceName}銆戝爢鍨涙満浣滀笟鐘舵�侊細銆恵(int)commonStackerCrane.StackerCraneWorkStatusValue}銆戞椂闂淬�恵DateTime.Now}銆�", ConsoleColor.Magenta);
-
- string str = $"銆恵commonStackerCrane.DeviceName}銆戜换鍔″畬鎴�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
- WriteInfo(commonStackerCrane.DeviceName, str);
- ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
-
- var content = _taskService.StackCraneTaskCompletedByStation(e.TaskNum);
- commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
-
- var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
- str = $"{commonStackerCrane.DeviceName}銆慦MS|WCS浠诲姟瀹屾垚锛氥�恵content.Status}銆�,鍫嗗灈鏈哄畬鎴愪俊鍙峰啓鍏ワ細銆恵isWorkType}銆�,浠诲姟鍙凤細銆恵e.TaskNum}銆戞椂闂淬�恵DateTime.Now}銆�";
- WriteInfo(commonStackerCrane.DeviceName, str);
- ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
- }
- }
- }
-
- /// <summary>
- /// 鑾峰彇浠诲姟
- /// </summary>
- /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param>
- /// <returns></returns>
- private Dt_Task? GetTask(CommonStackerStationCrane commonStackerCrane)
- {
- Dt_Task task;
-
- if (commonStackerCrane.LastTaskType == null)
- {
- task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
- }
- else
- {
- if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- if (task == null)
- {
- var taskLinInExecuting = _taskService.QueryStackerLineExecutingTask(commonStackerCrane.DeviceCode);
- if(taskLinInExecuting == null)
- {
- task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
- }
- else
- {
- task = null;
- }
-
- }
- }
- else
- {
- task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
- }
- }
-
- if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- // 妫�鏌ュ綋鍓嶅嚭搴撲换鍔$珯鍙版槸鍚﹀厑璁告斁璐�
- var occupiedStation = OutTaskStationIsOccupied(task);
- if (occupiedStation == null)
- {
- // 濡傛灉褰撳墠鍑哄簱浠诲姟绔欏彴涓嶅厑璁告斁璐э紝鎺掗櫎褰撳墠浠诲姟锛屾煡鎵惧叾浠栧嚭搴撲换鍔�
- ConsoleHelper.WriteErrorLine($"浠诲姟鍙凤細銆恵task.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵task.NextAddress}銆戜笉鍏佽鏀捐揣");
- task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task);
- }
- else
- {
- return task;
- }
-
- if (task == null)
- {
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- }
- }
- else if (task == null)
- {
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- }
-
- return task;
- }
-
- /// <summary>
- /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
- /// </summary>
- /// <param name="task">浠诲姟瀹炰綋</param>
- /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
- private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
- {
- var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress && x.Roadway == task.Roadway);
- IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationinfo.stationPLC);
- if (device != null)
- {
- CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)device;
- if (conveyorLine.IsOccupied(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤
- {
- return task;
- }
- }
- else
- {
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵task.NextAddress}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
- }
- return null;
- }
-
- /// <summary>
- /// 鏌ユ壘鍏朵粬鍑哄簱浠诲姟鐨勮緟鍔╂柟娉曪紙鎺掗櫎涓嶅彲鍑虹殑鍑哄簱鍙d换鍔★級
- /// </summary>
- /// <param name="deviceCode">璁惧浠g爜</param>
- /// <param name="excludedTaskId">瑕佹帓闄ょ殑浠诲姟ID</param>
- /// <returns></returns>
- private Dt_Task? FindAnotherOutboundTask(string deviceCode, Dt_Task task)
- {
- // 鍏堣幏鍙栨墍鏈夌鍚堟潯浠讹紙鎺掗櫎涓嶅彲鍑虹殑锛夌殑鍑哄簱浠诲姟鍒楄〃
- var allOutboundTasks = _taskService.QueryAllOutboundTasks(deviceCode);
- Console.WriteLine(allOutboundTasks.Count);
- var availableTasks = allOutboundTasks?.Where(t => t.TargetAddress != task.TargetAddress && t.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup).ToList();
-
- Console.WriteLine("鍏朵粬鍑哄簱鍙d换鍔★細" + availableTasks?.Count);
-
- if (availableTasks == null || availableTasks.Count == 0)
- {
- return null;
- }
-
- // 閬嶅巻鍙敤浠诲姟鍒楄〃锛屾鏌ヤ换鍔$珯鍙版槸鍚﹀厑璁告斁璐э紝鎵惧埌绗竴涓厑璁告斁璐х殑浠诲姟灏辫繑鍥�
- foreach (var candidateTask in availableTasks)
- {
- var occupiedStation = OutTaskStationIsOccupied(candidateTask);
- if (occupiedStation != null)
- {
- return candidateTask;
- }
- ConsoleHelper.WriteErrorLine($"浠诲姟鍙凤細銆恵candidateTask.TaskNum}銆戝嚭搴撳湴鍧�锛氥�恵candidateTask.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.Barcode = task.PalletCode;
- stackerCraneTaskCommand.TaskNum = task.TaskNum;
- stackerCraneTaskCommand.WorkType = 1;
- stackerCraneTaskCommand.TrayType = 0;
- stackerCraneTaskCommand.StartCommand = 1;
-
- string[] sourceCodes = task.SourceAddress.Split("-");
- if (sourceCodes.Length == 3)
- {
- stackerCraneTaskCommand.StartRow = (short)(Convert.ToInt16(sourceCodes[0]) % 2 == 0 ? 2 : 1);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
- }
- else
- {
- //鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
- return null;
- }
- string[] targetCodes = task.TargetAddress.Split("-");
- if (targetCodes.Length == 3)
- {
- stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 2 : 1);
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
- }
- else
- {
- //鏁版嵁閰嶇疆閿欒
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
- return null;
- }
-
- return stackerCraneTaskCommand;
- }
- }
-}
\ No newline at end of file
diff --git a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
index 357ff61..f4d878c 100644
--- a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
+++ b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -3,11 +3,13 @@
using SqlSugar;
using System.Text.RegularExpressions;
using WIDESEA_Cache;
+using WIDESEA_Core;
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEA_IStoragIntegrationServices;
+using WIDESEA_Model.Models;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_QuartzJob.Models;
diff --git a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/WIDESEA_StorageTaskServices.csproj b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/WIDESEA_StorageTaskServices.csproj
index 1c51ae2..0e8e507 100644
--- a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/WIDESEA_StorageTaskServices.csproj
+++ b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/WIDESEA_StorageTaskServices.csproj
@@ -17,10 +17,13 @@
<ItemGroup>
<ProjectReference Include="..\LogLibrary\LogLibrary.csproj" />
<ProjectReference Include="..\WIDESEA_Cache\WIDESEA_Cache.csproj" />
+ <ProjectReference Include="..\WIDESEA_Core\WIDESEA_Core.csproj" />
+ <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
<ProjectReference Include="..\WIDESEA_IBusinessServices\WIDESEA_IBusinessServices.csproj" />
<ProjectReference Include="..\WIDESEA_IStorageBasicService\WIDESEA_IStorageBasicServices.csproj" />
<ProjectReference Include="..\WIDESEA_IStorageOutOrderService\WIDESEA_IStorageOutOrderServices.csproj" />
<ProjectReference Include="..\WIDESEA_IStorageTaskService\WIDESEA_IStorageTaskServices.csproj" />
+ <ProjectReference Include="..\WIDESEA_Model\WIDESEA_Model.csproj" />
<ProjectReference Include="..\WIDESEA_StoragIntegrationServices\WIDESEA_StoragIntegrationServices.csproj" />
</ItemGroup>
diff --git a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.csproj.FileListAbsolute.txt b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.csproj.FileListAbsolute.txt
index ed225ec..77803b7 100644
--- a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.csproj.FileListAbsolute.txt
+++ b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.csproj.FileListAbsolute.txt
@@ -9,3 +9,14 @@
E:\GIT\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\refint\WIDESEA_Tasks.dll
E:\GIT\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.pdb
E:\GIT\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\ref\WIDESEA_Tasks.dll
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\bin\Debug\net6.0\WIDESEA_Tasks.deps.json
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\bin\Debug\net6.0\WIDESEA_Tasks.dll
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\bin\Debug\net6.0\WIDESEA_Tasks.pdb
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.GeneratedMSBuildEditorConfig.editorconfig
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.AssemblyInfoInputs.cache
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.AssemblyInfo.cs
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.csproj.CoreCompileInputs.cache
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.dll
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\refint\WIDESEA_Tasks.dll
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\WIDESEA_Tasks.pdb
+E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_Tasks\obj\Debug\net6.0\ref\WIDESEA_Tasks.dll
diff --git a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
index 4acf29a..431186d 100644
--- a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,8 +4,8 @@
-->
<Project>
<PropertyGroup>
- <_PublishTargetUrl>D:\Git\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\bin\Debug\net6.0\publish\</_PublishTargetUrl>
- <History>True|2025-03-24T07:27:15.6778099Z||;True|2025-03-23T18:45:49.3752329+08:00||;True|2025-03-23T18:11:49.6069594+08:00||;True|2025-03-22T16:16:20.5712808+08:00||;True|2025-03-22T15:56:49.6683132+08:00||;True|2025-03-22T15:52:31.0442028+08:00||;True|2025-03-22T14:58:24.6661971+08:00||;True|2025-03-22T14:31:25.6401220+08:00||;True|2025-03-17T22:20:55.9814492+08:00||;True|2025-03-17T20:18:58.8930513+08:00||;True|2025-03-15T14:49:54.7776092+08:00||;True|2025-03-04T14:56:36.8156516+08:00||;True|2025-03-04T14:03:01.4762153+08:00||;True|2025-03-01T13:25:40.8549456+08:00||;True|2025-03-01T12:40:52.0649831+08:00||;True|2025-03-01T11:33:13.7154636+08:00||;True|2025-02-28T16:49:28.9187049+08:00||;True|2025-02-28T16:43:17.5832178+08:00||;True|2025-02-28T16:09:20.8077956+08:00||;True|2025-02-27T13:41:44.5879735+08:00||;True|2025-02-21T10:33:09.7726538+08:00||;True|2025-02-20T23:51:32.1400389+08:00||;True|2025-02-20T23:43:38.4536482+08:00||;True|2025-02-18T15:09:13.0567844+08:00||;True|2025-02-18T10:30:45.6690625+08:00||;True|2025-02-17T00:17:57.1953767+08:00||;True|2025-02-17T00:08:49.8489825+08:00||;True|2025-02-17T00:00:57.5511029+08:00||;True|2025-02-15T14:45:50.0466371+08:00||;True|2025-02-15T14:26:18.9252196+08:00||;True|2025-02-15T14:22:56.6840183+08:00||;True|2025-02-15T13:37:28.7588867+08:00||;True|2025-02-15T13:11:23.1821094+08:00||;True|2025-02-14T14:03:21.8968201+08:00||;True|2025-02-10T16:52:59.9322253+08:00||;</History>
+ <_PublishTargetUrl>E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\bin\Debug\net6.0\publish\</_PublishTargetUrl>
+ <History>True|2025-03-25T06:55:09.5690375Z||;True|2025-03-25T12:26:15.5805042+08:00||;True|2025-03-24T15:27:15.6778099+08:00||;True|2025-03-23T18:45:49.3752329+08:00||;True|2025-03-23T18:11:49.6069594+08:00||;True|2025-03-22T16:16:20.5712808+08:00||;True|2025-03-22T15:56:49.6683132+08:00||;True|2025-03-22T15:52:31.0442028+08:00||;True|2025-03-22T14:58:24.6661971+08:00||;True|2025-03-22T14:31:25.6401220+08:00||;True|2025-03-17T22:20:55.9814492+08:00||;True|2025-03-17T20:18:58.8930513+08:00||;True|2025-03-15T14:49:54.7776092+08:00||;True|2025-03-04T14:56:36.8156516+08:00||;True|2025-03-04T14:03:01.4762153+08:00||;True|2025-03-01T13:25:40.8549456+08:00||;True|2025-03-01T12:40:52.0649831+08:00||;True|2025-03-01T11:33:13.7154636+08:00||;True|2025-02-28T16:49:28.9187049+08:00||;True|2025-02-28T16:43:17.5832178+08:00||;True|2025-02-28T16:09:20.8077956+08:00||;True|2025-02-27T13:41:44.5879735+08:00||;True|2025-02-21T10:33:09.7726538+08:00||;True|2025-02-20T23:51:32.1400389+08:00||;True|2025-02-20T23:43:38.4536482+08:00||;True|2025-02-18T15:09:13.0567844+08:00||;True|2025-02-18T10:30:45.6690625+08:00||;True|2025-02-17T00:17:57.1953767+08:00||;True|2025-02-17T00:08:49.8489825+08:00||;True|2025-02-17T00:00:57.5511029+08:00||;True|2025-02-15T14:45:50.0466371+08:00||;True|2025-02-15T14:26:18.9252196+08:00||;True|2025-02-15T14:22:56.6840183+08:00||;True|2025-02-15T13:37:28.7588867+08:00||;True|2025-02-15T13:11:23.1821094+08:00||;True|2025-02-14T14:03:21.8968201+08:00||;True|2025-02-10T16:52:59.9322253+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>
\ No newline at end of file
diff --git a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user
index 0401cb9..83f331d 100644
--- a/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user
+++ b/CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user
@@ -1,6 +1,6 @@
锘�<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
- <NameOfLastUsedPublishProfile>D:\Git\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
+ <NameOfLastUsedPublishProfile>E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
</PropertyGroup>
</Project>
\ No newline at end of file
--
Gitblit v1.9.3