From a040e5ae0239808e51fb78678f9e60922d11b930 Mon Sep 17 00:00:00 2001
From: 刘磊 <1161824510@qq.com>
Date: 星期二, 17 十二月 2024 20:01:42 +0800
Subject: [PATCH] 同步
---
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/Dt_needBarcodeRepository.cs | 29 ++
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_BZ/CommonConveyorLine_BZJob.cs | 239 +++++++++++++++++
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_needBarcodeService.cs | 15 +
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/Task_HtyController.cs | 25 +
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine_BZ.cs | 342 ++++++++++++++++++++++++
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/dt_needBarcode.cs | 72 +++++
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IDt_needBarcodeService.cs | 29 ++
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/IDt_needBarcodeRepository.cs | 32 ++
8 files changed, 783 insertions(+), 0 deletions(-)
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/Dt_needBarcodeRepository.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/Dt_needBarcodeRepository.cs
new file mode 100644
index 0000000..e262ac4
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/Dt_needBarcodeRepository.cs
@@ -0,0 +1,29 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_TaskInfoRepository
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_BasicInfoRepository
+{
+ public class Dt_needBarcodeRepository : RepositoryBase<dt_needBarcode>, IDt_needBarcodeRepository
+ {
+ public Dt_needBarcodeRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+ {
+ }
+ }
+}
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_needBarcodeService.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_needBarcodeService.cs
new file mode 100644
index 0000000..5b0e895
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_needBarcodeService.cs
@@ -0,0 +1,15 @@
+锘縰sing WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_ISystemServices;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_BasicInfoService
+{
+ public partial class dt_needBarcodeService : ServiceBase<dt_needBarcode, IDt_needBarcodeRepository>, Idt_needBarcodeService
+ {
+ public dt_needBarcodeService(IDt_needBarcodeRepository BaseDal) : base(BaseDal)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/IDt_needBarcodeRepository.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/IDt_needBarcodeRepository.cs
new file mode 100644
index 0000000..0d6c0af
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/IDt_needBarcodeRepository.cs
@@ -0,0 +1,32 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_ITaskInfoRepository
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_BasicInfoRepository
+{
+ public interface IDt_needBarcodeRepository : IRepository<dt_needBarcode>
+ {
+
+ }
+}
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IDt_needBarcodeService.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IDt_needBarcodeService.cs
new file mode 100644
index 0000000..e4c1cac
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IDt_needBarcodeService.cs
@@ -0,0 +1,29 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_ITaskInfoService
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_BasicInfoService
+{
+ public interface Idt_needBarcodeService : IService<dt_needBarcode>
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/dt_needBarcode.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/dt_needBarcode.cs
new file mode 100644
index 0000000..6de828c
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/dt_needBarcode.cs
@@ -0,0 +1,72 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Text;
+using WIDESEAWCS_Core.DB.Models;
+
+namespace WIDESEAWCS_Model.Models
+{
+ public class dt_needBarcode : BaseEntity
+ {
+ [Key]
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+ public int id { get; set; }
+
+ /// <summary>
+ /// 鐩爣搴撳尯
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鐩爣搴撳尯")]
+ public string toArea { get; set; }
+
+ /// <summary>
+ /// 鏉ユ簮搴撳尯
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "鏉ユ簮搴撳尯")]
+ public string fromArea { get; set; }
+
+ /// <summary>
+ /// 鎵樼洏绫诲瀷
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "鎵樼洏绫诲瀷")]
+ public string barcodeType { get; set; }
+
+ /// <summary>
+ /// 浜х嚎
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "鎵�灞炰骇绾�")]
+ public string productLine { get; set; }
+
+ /// <summary>
+ /// 鍦ㄩ�旀暟閲�
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "鍦ㄩ�旀暟閲�")]
+ public int inLineNum { get; set; }
+
+ /// <summary>
+ /// 鐩爣缂撳瓨鏁伴噺
+ /// </summary>
+ [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "鍙紦瀛樻暟閲�")]
+ public int cacheNum { get; set; } = 0;
+
+
+ /// <summary>
+ /// 宸插垱寤哄嚭搴撲换鍔℃暟閲�
+ /// </summary>
+ [NotMapped]
+ public int haveOutNum { get; set; } = 0;
+
+ /// <summary>
+ /// 鍙叆鏁伴噺
+ /// </summary>
+ [NotMapped]
+ public int canInNum { get; set; } = 0;
+
+ /// <summary>
+ /// 宸插垱寤哄嚭搴撲换鍔�
+ /// </summary>
+ [NotMapped]
+ public List<Dt_Task> haveOutList { get; set; }
+ }
+}
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine_BZ.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine_BZ.cs
new file mode 100644
index 0000000..57e35bf
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine_BZ.cs
@@ -0,0 +1,342 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_QuartzJob
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛氫竴鑸緭閫佺嚎瀹炵幇绫�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using HslCommunication;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_QuartzJob.ConveyorLine.Enum;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+
+namespace WIDESEAWCS_QuartzJob
+{
+ [Description("杈撻�佺嚎")]
+ public class CommonConveyorLine_BZ : IConveyorLine
+ {
+ #region Private Member
+
+ /// <summary>
+ /// 鍫嗗灈鏈洪�氳瀵硅薄
+ /// </summary>
+ private readonly 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;
+
+ private bool _heartStatr = true;
+
+ private bool _isConnected = true;
+
+ #endregion
+
+ #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 string DeviceCode => _deviceCode;
+
+ /// <summary>
+ /// 璁惧鍚嶇О
+ /// </summary>
+ public string DeviceName => _deviceName;
+
+ /// <summary>
+ /// 鏄惁鏈夋晠闅�
+ /// </summary>
+ public bool IsFault => false;
+
+ /// <summary>
+ /// 閫氳鏄惁宸茶繛鎺�
+ /// </summary>
+ public bool IsConnected => Communicator.IsConnected && _isConnected;
+
+ /// <summary>
+ /// 璁惧鐘舵��
+ /// </summary>
+ public DeviceStatus Status => DeviceStatus.Offline;
+
+ #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 CommonConveyorLine_BZ(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
+
+ 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>
+ /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
+ /// </summary>
+ /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
+ /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+ /// <param name="value">鏋氫妇鍊�</param>
+ /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
+ /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
+ public TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode);
+ return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+ }
+
+ /// <summary>
+ /// 涓庤澶囩殑蹇冭烦
+ /// </summary>
+ public void Heartbeat()
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="command"></param>
+ /// <param name="deviceChildCode"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new()
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+ if (devicePro == null)
+ {
+ return false;
+ }
+ if (Communicator.WriteCustomer(devicePro.DeviceProAddress, 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 == "DeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+
+ if (devicePro == null)
+ {
+ throw new Exception($"銆恵_deviceCode}銆�--鏈壘鍒般�恵deviceChildCode}銆戝崗璁俊鎭�");
+ }
+ else
+ {
+ return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress);
+ }
+ }
+
+ /// <summary>
+ /// 璇诲彇PLC鏁版嵁锛岃繑鍥炶嚜瀹氫箟瀵硅薄
+ /// </summary>
+ /// <typeparam name="T">娉涘瀷</typeparam>
+ /// <param name="deviceChildCode">瀛愯澶囩紪鍙�</param>
+ /// <param name="deviceProParamType">鍙傛暟绫诲瀷</param>
+ /// <returns>杩斿洖鑷畾涔夊璞℃垨鎶涘嚭寮傚父</returns>
+ /// <exception cref="Exception"></exception>
+ public T ReadCustomer<T>(string deviceChildCode, string deviceProParamType) where T : IDataTransfer, new()
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == deviceProParamType && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+
+ if (devicePro == null)
+ {
+ throw new Exception($"鏈壘鍒般�恵deviceChildCode}銆戝崗璁俊鎭�");
+ }
+ 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() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+ }
+
+ /// <summary>
+ /// 鏍规嵁鍙傛暟鍚嶇О銆佽澶囧瓙缂栧彿璇诲彇瀵瑰簲鐨勬暟鎹��
+ /// </summary>
+ /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
+ /// <param name="enum">鍙傛暟鍚嶇О銆�</param>
+ /// <param name="deviceChildCode">璁惧瀛愮紪鍙峰啓</param>
+ /// <returns>杩斿洖鍐欏叆鎴愬姛鎴栧け璐�</returns>
+ public object ReadValue<TEnum>(TEnum @enum, string deviceChildCode)
+ where TEnum : Enum
+ {
+ if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+ DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode);
+ return devicePro == null ? throw new Exception() : Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+ }
+
+ //public bool IsOccupied(string deviceChildCode)
+ //{
+ // if (Communicator.IsConnected)
+ // {
+
+ // }
+ //}
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="deviceChildCode"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public bool IsOccupied(string deviceChildCode)
+ {
+ if (Communicator.IsConnected)
+ {
+ List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceChildCode == deviceChildCode && x.DeviceProParamName == "InteractiveSignal").ToList();
+ if (devicePros.Count == 0)
+ {
+ //todo 鍗忚淇℃伅鏈幏鍙栧埌鏃舵姏鍑哄紓甯�
+ 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 == "InteractiveSignal" && x.ProtocalDetailValue.Equals(readStatus.ToString()));
+ if (deviceProtocolDetail != null)
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+ //todo 閫氳鏈繛鎺ユ椂鎶涘嚭寮傚父
+ return false;
+ }
+
+ public void Dispose()
+ {
+ _heartStatr = false;
+ _communicator.Dispose();
+ GC.SuppressFinalize(this);
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/Task_HtyController.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/Task_HtyController.cs
new file mode 100644
index 0000000..28a2ea2
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/Task_HtyController.cs
@@ -0,0 +1,25 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfo_HtyService;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_WCSServer.Controllers.Task
+{
+ [Route("api/Task_Hty")]
+ [ApiController]
+ public class Task_HtyController : ApiBaseController<ITask_HtyService, Dt_Task_Hty>
+ {
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ public Task_HtyController(ITask_HtyService service, IHttpContextAccessor httpContextAccessor) : base(service)
+ {
+ _httpContextAccessor = httpContextAccessor;
+ }
+
+
+ }
+}
diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_BZ/CommonConveyorLine_BZJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_BZ/CommonConveyorLine_BZJob.cs
new file mode 100644
index 0000000..5a08e4b
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_BZ/CommonConveyorLine_BZJob.cs
@@ -0,0 +1,239 @@
+锘�#region MyRegion
+#region << 鐗� 鏈� 娉� 閲� >>
+
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_Tasks.ConveyorLineJob
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using AutoMapper;
+using HslCommunication;
+using Microsoft.AspNetCore.Server.HttpSys;
+using Newtonsoft.Json;
+using Quartz;
+using SqlSugar;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+using System.Reflection;
+using System.Threading.Tasks;
+using WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_DTO.MOM;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_IProcessRepository;
+using WIDESEAWCS_ISystemRepository;
+using WIDESEAWCS_ISystemServices;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
+
+namespace WIDESEAWCS_Tasks
+{
+ [DisallowConcurrentExecution]
+ public partial class CommonConveyorLine_BZJob : JobBase, IJob
+ {
+ public readonly ITaskService _taskService;
+ private readonly ITaskRepository _taskRepository;
+ private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+ private readonly IRouterService _routerService;
+ private readonly IPlatFormRepository _platFormRepository;
+ private readonly ISys_ConfigService _sys_ConfigService;
+ private readonly IMapper _mapper;
+ private readonly IDt_StationManagerService _stationManagerService;
+ private readonly IDt_StationManagerRepository _stationManagerRepository;
+ private readonly ICacheService _cacheService;
+ private readonly INoticeService _noticeService;
+ private readonly IDt_needBarcodeRepository _needBarcodeRepository;
+
+ public CommonConveyorLine_BZJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerService stationManagerService, IDt_needBarcodeRepository needBarcodeRepository)
+ {
+ _taskService = taskService;
+ _taskExecuteDetailService = taskExecuteDetailService;
+ _routerService = routerService;
+ _mapper = mapper;
+ _taskRepository = taskRepository;
+ _platFormRepository = platFormRepository;
+ _sys_ConfigService = sys_ConfigService;
+ _stationManagerRepository = stationManagerRepository;
+ _cacheService = cacheService;
+ _noticeService = noticeService;
+ _stationManagerService = stationManagerService;
+ _needBarcodeRepository = needBarcodeRepository;
+ }
+
+ public Task Execute(IJobExecutionContext context)
+ {
+ try
+ {
+ CommonConveyorLine_BZ conveyorLine = (CommonConveyorLine_BZ)context.JobDetail.JobDataMap.Get("JobParams");
+ if (conveyorLine != null)
+ {
+ #region 绔欏彴鏂瑰紡
+ List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
+
+ foreach (var station in stationManagers)
+ {
+ ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationChildCode);
+
+ DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
+ 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");
+ if (tokenInfos == null || !tokenInfos.Any())
+ {
+ //throw new Exception(conveyorLine.DeviceName + "缂撳瓨涓湭鎵惧埌Token缂撳瓨");
+ continue;
+ }
+ var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+ var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+
+ object obj = new
+ {
+ station.stationChildCode,
+ commandAfter = command,
+ };
+ _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, data = obj });
+
+ #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+ }
+ #endregion
+
+ #region 璺敱鏂瑰紡
+ //List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
+ //foreach (string childDeviceCode in childDeviceCodes)
+ //{
+ // ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
+
+ // if (command == null) continue;
+ // if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
+
+ // DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
+ // if (deviceProtocolDetails != null)
+ // {
+ // MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
+ // if (method != null)
+ // {
+ // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
+ // }
+ // }
+
+ // if (childDeviceCode == "1670")
+ // {
+ // Platform platform = _platFormRepository.QueryFirst(x => x.PLCCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active");
+ // if (platform != null)
+ // {
+ // if (command.HasPallet != 1)
+ // {
+ // MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod);
+ // if (method != null)
+ // {
+ // int count = string.IsNullOrEmpty(platform.Location) ? 0 + 1 : platform.Location.Split(',').Count() + 1;
+ // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform });
+ // }
+ // }
+ // }
+ // }
+ //}
+ #endregion
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.Out.WriteLine(nameof(CommonConveyorLine_BZJob) + ":" + ex.ToString());
+ }
+ finally
+ {
+ //WriteDebug("CommonConveyorLineJob", "test");
+ //Console.Out.WriteLine(DateTime.Now);
+ }
+ return Task.CompletedTask;
+ }
+
+ /// <summary>
+ /// 杈撻�佺嚎璇锋眰鍑轰俊鎭�
+ /// </summary>
+ /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
+ /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
+ /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
+ /// <param name="station">绾夸綋褰撳墠bool璇诲彇鍋忕Щ鍦板潃</param>
+ public void RequestOutbound(CommonConveyorLine_BZ conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager station)
+ {
+ //鏌ヨ瀵瑰簲浜х嚎鐨勫湪閫旀暟鎹�
+ dt_needBarcode needBarcode = _needBarcodeRepository.QueryFirst(x => x.productLine == station.stationRemark);
+
+ //needBarcode.haveOutNum
+
+ //鑻ュ湪閫旀暟閲忓皬浜庣洰鏍囦綅缃殑缂撳瓨鏁伴噺 鍒欏鎵惧搴斿父娓╁簱瀛樹腑甯告俯3宸ュ簭鐨勫彲鍑哄簱鏁版嵁 骞跺缓绔嬪嚭搴撲换鍔�
+ if (needBarcode.inLineNum <= needBarcode.cacheNum)
+ {
+ if (_taskService.RequestOutTaskToBZAsync(station).Result.Status)
+ {
+ needBarcode.inLineNum++;
+ _needBarcodeRepository.UpdateData(needBarcode);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鍒拌揪鐩爣浣嶇疆鍚� 灏嗗搴斾换鍔℃竻闄� 骞舵洿鏂板湪閫旀暟鎹�
+ /// </summary>
+ /// <param name="conveyorLine"></param>
+ /// <param name="command"></param>
+ /// <param name="station"></param>
+ public void RecivcePalletBarcode(CommonConveyorLine_BZ conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager station)
+ {
+ Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == command.ConveyorLineBarcode && x.CurrentAddress == station.stationChildCode);
+
+ dt_needBarcode needBarcode = _needBarcodeRepository.QueryFirst(x => x.toArea == station.stationChildCode);
+ if (needBarcode == null) throw new Exception($"鏈厤缃浉鍏硔station.stationChildCode}鐨勪骇绾垮湪閫旀暟鎹�");
+
+ if (task != null)
+ {
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, station.stationChildCode);
+ _taskRepository.DeleteData(task);
+ }
+ else
+ {
+ conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, station.stationNGChildCode, station.stationChildCode);
+ }
+
+ needBarcode.inLineNum--;
+ _needBarcodeRepository.UpdateData(needBarcode);
+ }
+ }
+}
+#endregion
\ No newline at end of file
--
Gitblit v1.9.3