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"; } } CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerJZCrane.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,501 @@ #region << ç æ¬ 注 é >> /*---------------------------------------------------------------- * å½å空é´ï¼WIDESEAWCS_QuartzJob * å建è ï¼è¡ç«¥åº * å建æ¶é´ï¼2024/8/2 16:13:36 * çæ¬ï¼V1.0.0 * æè¿°ï¼ä¸è¬å åæºå®ç°ç±»ï¼å®ç°å åæºæ¥å£å± * * ---------------------------------------------------------------- * ä¿®æ¹äººï¼ * ä¿®æ¹æ¶é´ï¼ * çæ¬ï¼V1.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> /// ä¸è¬å åæºå®ç°ç±»ï¼å®ç°å åæºæ¥å£å± /// </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> /// å½åæ£å¨æ§è¡çä»»å¡å· /// </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 } } 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; CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -851,6 +851,7 @@ // è§£æä»»å¡æ°æ® 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}å¼å«æå"); CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
@@ -1,6 +1,8 @@ using 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 { 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" }); CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerJZCraneJob.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,505 @@ using 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}ãWMS|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> /// æ¥æ¾å ¶ä»åºåºä»»å¡çè¾ å©æ¹æ³ï¼æé¤ä¸å¯åºçåºåºå£ä»»å¡ï¼ /// </summary> /// <param name="deviceCode">设å¤ä»£ç </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("å ¶ä»åºåºå£ä»»å¡ï¼" + 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> /// ä»»å¡å®ä½è½¬æ¢æå½ä»¤Model /// </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; } } } CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerJZJob/CommonStackerStationCraneJob.cs
ÎļþÒÑɾ³ý 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; 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> 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 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> 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>