From bf2aa9dd56432a74940ca1bb08fb4d7eaee37045 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 27 三月 2026 11:03:37 +0800
Subject: [PATCH] feat(WCS): 完善 WIDESEAWCS_Tasks 模块日志系统
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs | 61 ++++++-
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs | 8
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs | 39 ++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs | 26 ++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs | 38 ++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs | 23 ++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs | 30 +++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs | 41 ++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs | 44 ++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 52 +++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs | 55 ++++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs | 43 ++++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tests/StackerCraneTaskSelectorTests.cs | 9
13 files changed, 411 insertions(+), 58 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
index 2177cbb..cad24d5 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
@@ -1,5 +1,6 @@
using MapsterMapper;
using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
using Quartz;
using SqlSugar;
using System.Text.Json;
@@ -7,6 +8,7 @@
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
@@ -70,6 +72,11 @@
private readonly HttpClientHelper _httpClientHelper;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger<CommonConveyorLineNewJob> _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="taskService">浠诲姟鏈嶅姟</param>
@@ -77,16 +84,18 @@
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="mapper">瀵硅薄鏄犲皠鍣�</param>
/// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
- public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper, ILogger<CommonConveyorLineNewJob> logger)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
_routerService = routerService;
_mapper = mapper;
_httpClientHelper = httpClientHelper;
+ _logger = logger;
// 鍒濆鍖栬皟搴﹀鐞嗗櫒
- _conveyorLineDispatch = new ConveyorLineDispatchHandler(_taskService, _taskExecuteDetailService, _routerService, _mapper);
+ _conveyorLineDispatch = new ConveyorLineDispatchHandler(_taskService, _taskExecuteDetailService, _routerService, _mapper, _logger);
}
/// <summary>
@@ -116,7 +125,8 @@
if (childDeviceCodes == null || childDeviceCodes.Count == 0)
{
// 娌℃湁瀛愯澶囷紝鐩存帴杩斿洖
- Console.WriteLine($"杈撻�佺嚎 {conveyorLine.DeviceCode} 娌℃湁瀛愯澶�");
+ _logger.LogInformation("杈撻�佺嚎 {DeviceCode} 娌℃湁瀛愯澶�", conveyorLine.DeviceCode);
+ QuartzLogger.Info($"杈撻�佺嚎 {conveyorLine.DeviceCode} 娌℃湁瀛愯澶�", conveyorLine.DeviceCode);
return Task.CompletedTask;
}
@@ -126,6 +136,9 @@
// 闄愬埗骞跺彂鏁帮細瀛愯澶囨暟閲忓拰 CPU 鏍稿績鏁�*2 鐨勮緝灏忓��
MaxDegreeOfParallelism = Math.Min(childDeviceCodes.Count, Environment.ProcessorCount * 2),
};
+
+ _logger.LogDebug("Execute锛氬紑濮嬪苟琛屽鐞嗚緭閫佺嚎 {DeviceCode}锛屽瓙璁惧鏁伴噺: {Count}", conveyorLine.DeviceCode, childDeviceCodes.Count);
+ QuartzLogger.Debug($"寮�濮嬪苟琛屽鐞嗚緭閫佺嚎锛屽瓙璁惧鏁伴噺: {childDeviceCodes.Count}", conveyorLine.DeviceCode);
// 骞惰澶勭悊姣忎釜瀛愯澶�
Parallel.For(0, childDeviceCodes.Count, parallelOptions, i =>
@@ -140,6 +153,8 @@
// 濡傛灉鍛戒护涓虹┖锛岃烦杩�
if (command == null)
{
+ _logger.LogDebug("Execute锛氬瓙璁惧 {ChildDeviceCode} 鍛戒护涓虹┖锛岃烦杩�", childDeviceCode);
+ QuartzLogger.Debug($"瀛愯澶� {childDeviceCode} 鍛戒护涓虹┖锛岃烦杩�", conveyorLine.DeviceCode);
return;
}
@@ -164,6 +179,9 @@
{
// 娌℃湁浠诲姟锛屽悜 WMS 璇锋眰鍑哄簱鎵樼洏浠诲姟
var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode);
+ _logger.LogInformation("Execute锛氭鏌ユ墭鐩樹綅缃� {ChildDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", childDeviceCode);
+ QuartzLogger.Info($"妫�鏌ユ墭鐩樹綅缃� {childDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", conveyorLine.DeviceCode);
+
var responseResult = _httpClientHelper.Post<WebResponseContent>("GetOutBoundTrayTaskAsync", new CreateTaskDto()
{
WarehouseId = position.WarehouseId,
@@ -183,12 +201,19 @@
// ========== 妫�鏌� PLC_STB 鏍囧織 ==========
// 鍙湁褰� PLC_STB 涓� 1 鏃舵墠澶勭悊浠诲姟
- if (command.PLC_STB != 1) return;
+ if (command.PLC_STB != 1)
+ {
+ _logger.LogDebug("Execute锛氬瓙璁惧 {ChildDeviceCode} PLC_STB 涓嶄负1锛岃烦杩�", childDeviceCode);
+ QuartzLogger.Debug($"瀛愯澶� {childDeviceCode} PLC_STB 涓嶄负1锛岃烦杩�", conveyorLine.DeviceCode);
+ return;
+ }
// ========== 澶勭悊鏃犳墭鐩樻潯鐮佺殑鎯呭喌 ==========
// 鏃犳墭鐩樻潯鐮佹椂锛岃姹傚嚭搴撲换鍔�
if (command.Barcode.IsNullOrEmpty() || command.Barcode.Replace("\0", "") == "")
{
+ _logger.LogDebug("Execute锛氬瓙璁惧 {ChildDeviceCode} 鏃犳墭鐩樻潯鐮侊紝璇锋眰鍑哄簱浠诲姟", childDeviceCode);
+ QuartzLogger.Debug($"瀛愯澶� {childDeviceCode} 鏃犳墭鐩樻潯鐮侊紝璇锋眰鍑哄簱浠诲姟", conveyorLine.DeviceCode);
_conveyorLineDispatch.RequestOutbound(conveyorLine, command, childDeviceCode);
return;
}
@@ -200,6 +225,8 @@
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNo, childDeviceCode);
if (!task.IsNullOrEmpty())
{
+ _logger.LogInformation("Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊浠诲姟 {TaskNum}锛岀姸鎬�: {Status}", childDeviceCode, task.TaskNum, task.TaskStatus);
+ QuartzLogger.Info($"澶勭悊浠诲姟 {task.TaskNum}锛岀姸鎬�: {task.TaskStatus}", conveyorLine.DeviceCode);
// 澶勭悊浠诲姟鐘舵�侊紙鏍规嵁鐘舵�佸垎鍙戝埌涓嶅悓鏂规硶锛�
ProcessTaskState(conveyorLine, command, task, childDeviceCode);
return;
@@ -209,7 +236,8 @@
catch (Exception innerEx)
{
// 璁板綍寮傚父锛屼絾涓嶅奖鍝嶅叾浠栧瓙璁惧鐨勫鐞�
- Console.Error.WriteLine($"{DateTime.UtcNow:O} [{childDeviceCode}] CorrelationId={correlationId} {innerEx}");
+ _logger.LogError(innerEx, "Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊寮傚父锛孋orrelationId: {CorrelationId}", childDeviceCode, correlationId);
+ QuartzLogger.Error($"瀛愯澶囧鐞嗗紓甯�: {innerEx.Message}", conveyorLine.DeviceCode, innerEx);
}
});
}
@@ -217,7 +245,8 @@
catch (Exception ex)
{
// 璁板綍鏁翠綋寮傚父
- Console.Error.WriteLine(ex);
+ _logger.LogError(ex, "Execute锛氳緭閫佺嚎 {DeviceCode} 鎵ц寮傚父", ex.Message);
+ QuartzLogger.Error($"杈撻�佺嚎鎵ц寮傚父: {ex.Message}", "CommonConveyorLineNewJob", ex);
}
return Task.CompletedTask;
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
index 24700ff..5072e29 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
@@ -1,7 +1,9 @@
using MapsterMapper;
+using Microsoft.Extensions.Logging;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -47,6 +49,11 @@
private readonly IMapper _mapper;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 杈撻�佺嚎浠诲姟杩囨护鍣�
/// </summary>
/// <remarks>
@@ -69,16 +76,18 @@
/// <param name="taskExecuteDetailService">浠诲姟鎵ц鏄庣粏鏈嶅姟</param>
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="mapper">瀵硅薄鏄犲皠鍣�</param>
- public ConveyorLineDispatchHandler(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public ConveyorLineDispatchHandler(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ILogger logger)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
_routerService = routerService;
_mapper = mapper;
+ _logger = logger;
// 鍒濆鍖栦换鍔¤繃婊ゅ櫒鍜岀洰鏍囧湴鍧�閫夋嫨鍣�
- _taskFilter = new ConveyorLineTaskFilter(taskService);
- _targetAddressSelector = new ConveyorLineTargetAddressSelector();
+ _taskFilter = new ConveyorLineTaskFilter(taskService, _logger);
+ _targetAddressSelector = new ConveyorLineTargetAddressSelector(_logger);
}
/// <summary>
@@ -96,6 +105,8 @@
{
// 娓呴櫎浠诲姟鍙凤紝琛ㄧず褰撳墠绌洪棽
conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, 0, childDeviceCode);
+ _logger.LogDebug("HeartBeat锛氬瓙璁惧 {ChildDeviceCode} 蹇冭烦", childDeviceCode);
+ QuartzLogger.Debug($"HeartBeat锛氬瓙璁惧 {childDeviceCode} 蹇冭烦", conveyorLine.DeviceCode);
}
/// <summary>
@@ -114,6 +125,9 @@
/// <param name="childDeviceCode">瀛愯澶囩紪鐮�</param>
public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandNew command, string childDeviceCode)
{
+ _logger.LogInformation("RequestInbound锛氬瓙璁惧 {ChildDeviceCode} 璇锋眰鍏ュ簱", childDeviceCode);
+ QuartzLogger.Info($"璇锋眰鍏ュ簱锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
+
// 鍚� WMS 璇锋眰鏂颁换鍔★紙鍩轰簬鏉$爜锛�
if (_taskFilter.RequestWmsTask(command.Barcode, childDeviceCode))
{
@@ -132,6 +146,9 @@
// 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
_taskService.UpdateTaskStatusToNext(task);
+
+ _logger.LogInformation("RequestInbound锛氬叆搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"鍏ュ簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
}
}
}
@@ -152,8 +169,13 @@
Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode);
if (task == null)
{
+ _logger.LogDebug("RequestInNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", command.TaskNo);
+ QuartzLogger.Debug($"RequestInNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode);
return;
}
+
+ _logger.LogInformation("RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
// 濡傛灉涓嶆槸绌烘墭鐩樹换鍔★紝澶勭悊鐩爣鍦板潃锛堜笌鎷樻潫鏈�/鎻掓嫈閽夋満浜や簰锛�
if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty)
@@ -189,7 +211,9 @@
// 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵锛堥�氬父鏄畬鎴愶級
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
- Console.Out.WriteLine(content.Serialize());
+
+ _logger.LogInformation("ConveyorLineInFinish锛氬叆搴撳畬鎴愶紝浠诲姟鍙�: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"鍏ュ簱瀹屾垚锛屼换鍔″彿: {task.TaskNum}", conveyorLine.DeviceCode);
}
}
@@ -226,6 +250,9 @@
// 鏇存柊浠诲姟鐘舵��
_taskService.UpdateTaskStatusToNext(task);
+
+ _logger.LogInformation("RequestOutbound锛氬嚭搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"鍑哄簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}", conveyorLine.DeviceCode);
}
}
@@ -245,8 +272,13 @@
Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode);
if (task == null)
{
+ _logger.LogDebug("RequestOutNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", command.TaskNo);
+ QuartzLogger.Debug($"RequestOutNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode);
return;
}
+
+ _logger.LogInformation("RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
// 濡傛灉涓嶆槸绌烘墭鐩樹换鍔★紝澶勭悊鐩爣鍦板潃
if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty)
@@ -282,7 +314,9 @@
// 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵锛堥�氬父鏄畬鎴愶級
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
- Console.Out.WriteLine(content.Serialize());
+
+ _logger.LogInformation("ConveyorLineOutFinish锛氬嚭搴撳畬鎴愶紝浠诲姟鍙�: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
+ QuartzLogger.Info($"鍑哄簱瀹屾垚锛屼换鍔″彿: {task.TaskNum}", conveyorLine.DeviceCode);
}
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
index 46e6167..062265a 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
@@ -1,3 +1,5 @@
+using Microsoft.Extensions.Logging;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_Tasks
@@ -44,6 +46,20 @@
private static readonly List<string> PinMachineCodes = new List<string> { "10190", "20100" };
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
+ /// 鏋勯�犲嚱鏁�
+ /// </summary>
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public ConveyorLineTargetAddressSelector(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ /// <summary>
/// 澶勭悊鍏ュ簱鍦烘櫙鐨勪笅涓�鍦板潃璇锋眰
/// </summary>
/// <remarks>
@@ -55,6 +71,8 @@
/// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
public void HandleInboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
{
+ _logger.LogDebug("HandleInboundNextAddress锛氬叆搴撲笅涓�鍦板潃锛屽瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", childDeviceCode, nextAddress);
+ QuartzLogger.Debug($"HandleInboundNextAddress锛氬叆搴撲笅涓�鍦板潃锛屽瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode);
// 璋冪敤閫氱敤澶勭悊鏂规硶锛宨sUpper = true 琛ㄧず澶勭悊涓婂眰
HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, isUpper: true);
}
@@ -71,6 +89,8 @@
/// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
public void HandleOutboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
{
+ _logger.LogDebug("HandleOutboundNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屽瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", childDeviceCode, nextAddress);
+ QuartzLogger.Debug($"HandleOutboundNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屽瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode);
// 璋冪敤閫氱敤澶勭悊鏂规硶锛宨sUpper = false 琛ㄧず澶勭悊涓嬪眰
HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, isUpper: false);
}
@@ -99,6 +119,8 @@
ConstraintMachine? constraint = devices.OfType<ConstraintMachine>().FirstOrDefault(d => d.DeviceName == ConstraintMachineName);
if (constraint == null)
{
+ _logger.LogDebug("HandleDeviceRequest锛氭湭鎵惧埌鎷樻潫鏈鸿澶�");
+ QuartzLogger.Debug("HandleDeviceRequest锛氭湭鎵惧埌鎷樻潫鏈鸿澶�", conveyorLine.DeviceCode);
// 鏈壘鍒版嫎鏉熸満璁惧锛岀洿鎺ヨ繑鍥�
return;
}
@@ -126,7 +148,8 @@
{
constraint.SetValue(ConstraintMachineDBName.ConstraintTrayOutputReadyLower, outputReq ? 1 : 0);
}
- });
+ },
+ "鎷樻潫鏈�");
}
else if (PinMachineCodes.Contains(nextAddress))
{
@@ -135,6 +158,8 @@
PinMachine? pinMachine = devices.OfType<PinMachine>().FirstOrDefault(d => d.DeviceName == PinMachineName);
if (pinMachine == null)
{
+ _logger.LogDebug("HandleDeviceRequest锛氭湭鎵惧埌鎻掓嫈閽夋満璁惧");
+ QuartzLogger.Debug("HandleDeviceRequest锛氭湭鎵惧埌鎻掓嫈閽夋満璁惧", conveyorLine.DeviceCode);
return;
}
@@ -161,7 +186,8 @@
{
pinMachine.SetValue(PinMachineDBName.PlugPinTrayOutputReadyLower, outputReq ? 1 : 0);
}
- });
+ },
+ "鎻掓嫈閽夋満");
}
}
@@ -178,18 +204,24 @@
/// <param name="getMaterialRequest">鑾峰彇鐗╂枡璇锋眰鐘舵�佺殑濮旀墭</param>
/// <param name="getOutputRequest">鑾峰彇鍑烘枡璇锋眰鐘舵�佺殑濮旀墭</param>
/// <param name="setOutputReady">璁剧疆杈撳嚭灏辩华鏍囧織鐨勫鎵�</param>
- private static void ProcessDeviceRequest(
+ /// <param name="deviceType">璁惧绫诲瀷鎻忚堪</param>
+ private void ProcessDeviceRequest(
CommonConveyorLine conveyorLine,
string childDeviceCode,
Func<bool> getMaterialRequest,
Func<bool> getOutputRequest,
- Action<bool> setOutputReady)
+ Action<bool> setOutputReady,
+ string deviceType)
{
// 鑾峰彇鐗╂枡璇锋眰鐘舵��
bool materialReq = getMaterialRequest();
// 鑾峰彇鍑烘枡璇锋眰鐘舵��
bool outputReq = getOutputRequest();
+
+ _logger.LogDebug("ProcessDeviceRequest锛歿DeviceType}锛屽瓙璁惧: {ChildDeviceCode}锛岀墿鏂欒姹�: {MaterialReq}锛屽嚭鏂欒姹�: {OutputReq}",
+ deviceType, childDeviceCode, materialReq, outputReq);
+ QuartzLogger.Debug($"ProcessDeviceRequest锛歿deviceType}锛屽瓙璁惧: {childDeviceCode}锛岀墿鏂欒姹�: {materialReq}锛屽嚭鏂欒姹�: {outputReq}", conveyorLine.DeviceCode);
// 濡傛灉璁惧闇�瑕佺墿鏂�
if (materialReq)
@@ -199,6 +231,9 @@
// 鍥炲 ACK 纭淇″彿
conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode);
+
+ _logger.LogInformation("ProcessDeviceRequest锛歿DeviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", deviceType);
+ QuartzLogger.Info($"ProcessDeviceRequest锛歿deviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", conveyorLine.DeviceCode);
}
else
{
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
index 297fbd0..429b7a9 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
@@ -1,3 +1,5 @@
+using Microsoft.Extensions.Logging;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
@@ -26,12 +28,19 @@
private readonly ITaskService _taskService;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="taskService">浠诲姟鏈嶅姟瀹炰緥</param>
- public ConveyorLineTaskFilter(ITaskService taskService)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public ConveyorLineTaskFilter(ITaskService taskService, ILogger logger)
{
_taskService = taskService;
+ _logger = logger;
}
/// <summary>
@@ -46,7 +55,10 @@
/// <returns>寰呭鐞嗙殑浠诲姟瀵硅薄锛屽鏋滄病鏈夊垯杩斿洖 null</returns>
public Dt_Task? QueryPendingTask(string deviceCode, string childDeviceCode)
{
- return _taskService.QueryConveyorLineTask(deviceCode, childDeviceCode);
+ var task = _taskService.QueryConveyorLineTask(deviceCode, childDeviceCode);
+ _logger.LogDebug("QueryPendingTask锛氳澶� {DeviceCode}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {TaskNum}", deviceCode, childDeviceCode, task?.TaskNum);
+ QuartzLogger.Debug($"QueryPendingTask锛氳澶� {deviceCode}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {task?.TaskNum}", deviceCode);
+ return task;
}
/// <summary>
@@ -61,7 +73,10 @@
/// <returns>鎵ц涓殑浠诲姟瀵硅薄锛屽鏋滄病鏈夊垯杩斿洖 null</returns>
public Dt_Task? QueryExecutingTask(int taskNo, string childDeviceCode)
{
- return _taskService.QueryExecutingConveyorLineTask(taskNo, childDeviceCode);
+ var task = _taskService.QueryExecutingConveyorLineTask(taskNo, childDeviceCode);
+ _logger.LogDebug("QueryExecutingTask锛氫换鍔″彿 {TaskNo}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {Found}", taskNo, childDeviceCode, task != null);
+ QuartzLogger.Debug($"QueryExecutingTask锛氫换鍔″彿 {taskNo}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {(task != null)}", childDeviceCode);
+ return task;
}
/// <summary>
@@ -76,7 +91,10 @@
/// <returns>璇锋眰鏄惁鎴愬姛</returns>
public bool RequestWmsTask(string barcode, string childDeviceCode)
{
- return _taskService.RequestWMSTask(barcode, childDeviceCode).Status;
+ _logger.LogInformation("RequestWmsTask锛氬悜WMS璇锋眰浠诲姟锛屾潯鐮�: {Barcode}锛屽瓙璁惧: {ChildDeviceCode}", barcode, childDeviceCode);
+ QuartzLogger.Info($"鍚慦MS璇锋眰浠诲姟锛屾潯鐮�: {barcode}", childDeviceCode);
+ var result = _taskService.RequestWMSTask(barcode, childDeviceCode);
+ return result.Status;
}
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs
index 5c95316..942a8d3 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs
@@ -1,5 +1,6 @@
using System.Collections.Concurrent;
using System.Net.Sockets;
+using Microsoft.Extensions.Logging;
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks.SocketServer;
@@ -27,6 +28,11 @@
/// 鏈烘鎵嬬姸鎬佺鐞嗗櫒锛岀敤浜庤鍐欒澶囩姸鎬�
/// </summary>
private readonly RobotStateManager _stateManager;
+
+ /// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
/// <summary>
/// 璺熻釜宸插惎鍔ㄦ秷鎭鐞嗙殑瀹㈡埛绔紝閬垮厤閲嶅鍚姩
@@ -59,10 +65,12 @@
/// </summary>
/// <param name="tcpSocket">TCP Socket 鏈嶅姟鍣ㄥ疄渚�</param>
/// <param name="stateManager">鐘舵�佺鐞嗗櫒瀹炰緥</param>
- public RobotClientManager(TcpSocketServer tcpSocket, RobotStateManager stateManager)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public RobotClientManager(TcpSocketServer tcpSocket, RobotStateManager stateManager, ILogger logger)
{
_tcpSocket = tcpSocket;
_stateManager = stateManager;
+ _logger = logger;
}
/// <summary>
@@ -92,6 +100,8 @@
// 娓呯悊璇ュ鎴风鐨� HandleClientAsync 鍚姩鏍囧織
// 浠ヤ究涓嬫閲嶈繛鏃跺彲浠ラ噸鏂板惎鍔ㄥ鐞�
_handleClientStarted.TryRemove(ipAddress, out _);
+ _logger.LogDebug("瀹㈡埛绔湭杩炴帴锛孖P: {IpAddress}", ipAddress);
+ QuartzLogger.Debug($"瀹㈡埛绔湭杩炴帴锛孖P: {ipAddress}", robotCrane.DeviceName);
return false;
}
@@ -101,8 +111,9 @@
{
// 缁戝畾瀹㈡埛绔柇寮�杩炴帴鐨勪簨浠跺鐞�
_tcpSocket.RobotReceived += OnRobotReceived;
- // 璁板綍鏃ュ織锛堟敞鎰忥細鏃ュ織鍐呭涓�"瀹㈡埛绔凡鏂紑杩炴帴"锛屽彲鑳芥槸閬楃暀鐨勫崰浣嶆枃鏈級
- QuartzLogger.Warn($"瀹㈡埛绔凡鏂紑杩炴帴", robotCrane.DeviceName);
+ // 璁板綍鏃ュ織锛氫簨浠惰闃呮垚鍔�
+ _logger.LogInformation("鏈烘鎵婽CP娑堟伅浜嬩欢宸茶闃咃紝璁惧: {DeviceName}", robotCrane.DeviceName);
+ QuartzLogger.Info($"鏈烘鎵婽CP娑堟伅浜嬩欢宸茶闃�", robotCrane.DeviceName);
}
// 浠� TCP 鏈嶅姟鍣ㄧ殑瀹㈡埛绔瓧鍏镐腑鑾峰彇 TcpClient 瀵硅薄
@@ -114,6 +125,8 @@
{
// 绉婚櫎鍚姩鏍囧織锛岃繑鍥� false 琛ㄧず瀹㈡埛绔笉鍙敤
_handleClientStarted.TryRemove(ipAddress, out _);
+ _logger.LogWarning("鑾峰彇TcpClient澶辫触锛孖P: {IpAddress}", ipAddress);
+ QuartzLogger.Warn($"鑾峰彇TcpClient澶辫触锛孖P: {ipAddress}", robotCrane.DeviceName);
return false;
}
@@ -123,7 +136,8 @@
// 濡傛灉灏氭湭鍚姩锛屽垯鍚姩娑堟伅澶勭悊寰幆
if (!alreadyStarted)
{
- // 璁板綍鏃ュ織
+ // 璁板綍鏃ュ織锛氬惎鍔ㄦ秷鎭鐞�
+ _logger.LogInformation("鍚姩瀹㈡埛绔秷鎭鐞嗭紝IP: {IpAddress}", ipAddress);
QuartzLogger.Info($"鍚姩瀹㈡埛绔秷鎭鐞�", robotCrane.DeviceName);
// 鑾峰彇鏈�鏂扮殑鐘舵�佸璞�
@@ -142,8 +156,8 @@
if (t.IsFaulted)
{
// 璁板綍閿欒鏃ュ織
- QuartzLogger.Info($"鐩戝惉瀹㈡埛绔秷鎭簨浠跺紓甯�", robotCrane.DeviceName);
- Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] HandleClientAsync error: {t.Exception?.GetBaseException().Message}");
+ _logger.LogError(t.Exception, "鐩戝惉瀹㈡埛绔秷鎭簨浠跺紓甯革紝IP: {IpAddress}", ipAddress);
+ QuartzLogger.Error($"鐩戝惉瀹㈡埛绔秷鎭簨浠跺紓甯�", robotCrane.DeviceName, t.Exception);
// 鍙戠敓閿欒鏃讹紝绉婚櫎鍚姩鏍囧織锛屽厑璁镐笅娆¢噸璇�
_handleClientStarted.TryRemove(ipAddress, out _);
}
@@ -179,6 +193,10 @@
// 绉婚櫎璇ュ鎴风鐨� HandleClientAsync 鍚姩鏍囧織
_handleClientStarted.TryRemove(clientId, out _);
+ // 璁板綍鏃ュ織锛氬鎴风鏂紑杩炴帴
+ _logger.LogInformation("瀹㈡埛绔柇寮�杩炴帴锛孖P: {ClientId}", clientId);
+ QuartzLogger.Info($"瀹㈡埛绔柇寮�杩炴帴", clientId);
+
// 閲嶇疆璇ュ鎴风鐨勭姸鎬佷俊鎭�
_stateManager.TryUpdateStateSafely(clientId, state =>
{
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index 8a55144..08ffb97 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -116,7 +116,7 @@
ILogger<RobotJob> logger)
{
// 鍒濆鍖栫姸鎬佺鐞嗗櫒锛屼紶鍏ョ紦瀛樻湇鍔�
- _stateManager = new RobotStateManager(cache);
+ _stateManager = new RobotStateManager(cache, _logger);
_logger = logger;
// 鍒涘缓 Socket 缃戝叧锛屽皝瑁� TcpSocketServer 鐨勮闂�
@@ -124,10 +124,10 @@
ISocketClientGateway socketGateway = new SocketClientGateway(tcpSocket);
// 鍒濆鍖栦换鍔″鐞嗗櫒
- _taskProcessor = new RobotTaskProcessor(socketGateway, _stateManager, robotTaskService, taskService, httpClientHelper);
+ _taskProcessor = new RobotTaskProcessor(socketGateway, _stateManager, robotTaskService, taskService, httpClientHelper, _logger);
// 鍒濆鍖栧鎴风绠$悊鍣�
- _clientManager = new RobotClientManager(tcpSocket, _stateManager);
+ _clientManager = new RobotClientManager(tcpSocket, _stateManager, _logger);
// 鍒濆鍖栧懡浠ゅ鐞嗗櫒
// 绠�鍗曞懡浠ゅ鐞嗗櫒锛氬鐞嗙姸鎬佹洿鏂扮瓑绠�鍗曞懡浠�
@@ -139,7 +139,7 @@
_messageRouter = new RobotMessageHandler(socketGateway, _stateManager, cache, simpleCommandHandler, prefixCommandHandler, logger);
// 鍒濆鍖栧伐浣滄祦缂栨帓鍣�
- _workflowOrchestrator = new RobotWorkflowOrchestrator(_stateManager, _clientManager, _taskProcessor, robotTaskService);
+ _workflowOrchestrator = new RobotWorkflowOrchestrator(_stateManager, _clientManager, _taskProcessor, robotTaskService, _logger);
// 璁㈤槄瀹㈡埛绔柇寮�杩炴帴浜嬩欢
_clientManager.OnClientDisconnected += OnClientDisconnected;
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs
index 3bafe10..89f0910 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs
@@ -1,6 +1,8 @@
+using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_Tasks
@@ -20,12 +22,19 @@
private readonly ICacheService _cache;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="cache">缂撳瓨鏈嶅姟瀹炰緥锛堥�氬父涓� HybridCacheService锛�</param>
- public RobotStateManager(ICacheService cache)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public RobotStateManager(ICacheService cache, ILogger logger)
{
_cache = cache;
+ _logger = logger;
}
/// <summary>
@@ -100,6 +109,8 @@
newState.Version = DateTime.UtcNow.Ticks;
// 鐩存帴娣诲姞鍒扮紦瀛�
_cache.AddObject(cacheKey, newState);
+ _logger.LogDebug("TryUpdateStateSafely锛氬垱寤烘柊鐘舵�侊紝IP: {IpAddress}", ipAddress);
+ QuartzLogger.Debug($"鍒涘缓鏂扮姸鎬侊紝IP: {ipAddress}", ipAddress);
return true;
}
@@ -110,12 +121,20 @@
newState.Version = DateTime.UtcNow.Ticks;
// 灏濊瘯瀹夊叏鏇存柊锛屽鏋滅増鏈啿绐佸垯杩斿洖 false
- return _cache.TrySafeUpdate(
+ bool success = _cache.TrySafeUpdate(
cacheKey,
newState,
expectedVersion,
s => s.Version
);
+
+ if (!success)
+ {
+ _logger.LogWarning("TryUpdateStateSafely锛氱増鏈啿绐侊紝鏇存柊澶辫触锛孖P: {IpAddress}锛屾湡鏈涚増鏈�: {ExpectedVersion}", ipAddress, expectedVersion);
+ QuartzLogger.Warn($"鐗堟湰鍐茬獊锛屾洿鏂板け璐ワ紝IP: {ipAddress}", ipAddress);
+ }
+
+ return success;
}
/// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index 1b0f476..79f8073 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -1,3 +1,4 @@
+using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using WIDESEA_Core;
using WIDESEAWCS_Common;
@@ -68,6 +69,11 @@
private readonly HttpClientHelper _httpClientHelper;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="socketClientGateway">Socket 缃戝叧</param>
@@ -75,18 +81,21 @@
/// <param name="robotTaskService">鏈哄櫒浜轰换鍔℃湇鍔�</param>
/// <param name="taskService">閫氱敤浠诲姟鏈嶅姟</param>
/// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
public RobotTaskProcessor(
ISocketClientGateway socketClientGateway,
RobotStateManager stateManager,
IRobotTaskService robotTaskService,
ITaskService taskService,
- HttpClientHelper httpClientHelper)
+ HttpClientHelper httpClientHelper,
+ ILogger logger)
{
_socketClientGateway = socketClientGateway;
_stateManager = stateManager;
_robotTaskService = robotTaskService;
_taskService = taskService;
_httpClientHelper = httpClientHelper;
+ _logger = logger;
}
/// <summary>
@@ -141,8 +150,9 @@
if (result)
{
- // 鍙戦�佹垚鍔燂紝璁板綍鏃ュ織
- QuartzLogger.Error($"涓嬪彂鍙栬揣鎸囦护锛屾寚浠�: {taskString}", state.RobotCrane.DeviceName);
+ // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
+ _logger.LogInformation("涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {TaskString}锛岃澶�: {DeviceName}", taskString, state.RobotCrane?.DeviceName);
+ QuartzLogger.Info($"涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}", state.RobotCrane?.DeviceName);
// 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
@@ -156,6 +166,12 @@
{
await _robotTaskService.UpdateRobotTaskAsync(task);
}
+ }
+ else
+ {
+ // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
+ _logger.LogError("涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {TaskString}锛岃澶�: {DeviceName}", taskString, state.RobotCrane?.DeviceName);
+ QuartzLogger.Error($"涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}", state.RobotCrane?.DeviceName);
}
}
@@ -182,6 +198,8 @@
var currentTask = state.CurrentTask;
if (currentTask == null)
{
+ _logger.LogDebug("HandleInboundTaskAsync锛氬綋鍓嶄换鍔′负绌�");
+ QuartzLogger.Debug($"HandleInboundTaskAsync锛氬綋鍓嶄换鍔′负绌�", state.RobotCrane?.DeviceName ?? "Unknown");
return false;
}
@@ -213,6 +231,8 @@
{
case RobotTaskTypeEnum.GroupPallet:
// 缁勭洏浠诲姟涓嶄娇鐢ㄦ簮鍦板潃锛岀洿鎺ヨ繑鍥� false
+ _logger.LogDebug("HandleInboundTaskAsync锛氱粍鐩樹换鍔′笉浣跨敤婧愬湴鍧�");
+ QuartzLogger.Debug($"HandleInboundTaskAsync锛氱粍鐩樹换鍔′笉浣跨敤婧愬湴鍧�", state.RobotCrane?.DeviceName ?? "Unknown");
return false;
case RobotTaskTypeEnum.ChangePallet:
@@ -237,6 +257,8 @@
case RobotTaskTypeEnum.SplitPallet:
// 鎷嗙洏浠诲姟涓嶄娇鐢ㄧ洰鏍囧湴鍧�
+ _logger.LogDebug("HandleInboundTaskAsync锛氭媶鐩樹换鍔′笉浣跨敤鐩爣鍦板潃");
+ QuartzLogger.Debug($"HandleInboundTaskAsync锛氭媶鐩樹换鍔′笉浣跨敤鐩爣鍦板潃", state.RobotCrane?.DeviceName ?? "Unknown");
return true;
}
}
@@ -253,12 +275,18 @@
TaskType = taskType // 浠诲姟绫诲瀷锛堝叆搴�/绌烘墭鐩樺叆搴擄級
};
+ // 璁板綍鏃ュ織锛氬紑濮嬭皟鐢� WMS 鍒涘缓鍏ュ簱浠诲姟
+ _logger.LogInformation("HandleInboundTaskAsync锛氳皟鐢╓MS鍒涘缓鍏ュ簱浠诲姟锛屾墭鐩樼爜: {PalletCode}锛屼换鍔$被鍨�: {TaskType}", PalletCode, taskType);
+ QuartzLogger.Info($"璋冪敤WMS鍒涘缓鍏ュ簱浠诲姟锛屾墭鐩樼爜: {PalletCode}锛屼换鍔$被鍨�: {taskType}", state.RobotCrane?.DeviceName ?? "Unknown");
+
// 璋冪敤 WMS 鎺ュ彛鍒涘缓鍏ュ簱浠诲姟
var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.CreateTaskInboundAsync), taskDto.ToJson());
// 濡傛灉璋冪敤澶辫触鎴栬繑鍥為敊璇姸鎬�
if (!result.Data.Status && result.IsSuccess)
{
+ _logger.LogError("HandleInboundTaskAsync锛歐MS杩斿洖閿欒鐘舵�侊紝Status: {Status}", result.Data.Status);
+ QuartzLogger.Error($"HandleInboundTaskAsync锛歐MS杩斿洖閿欒鐘舵��", state.RobotCrane?.DeviceName ?? "Unknown");
return false;
}
@@ -269,6 +297,8 @@
var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
if (!content.Status)
{
+ _logger.LogError("HandleInboundTaskAsync锛氭帴鏀禬MS浠诲姟澶辫触");
+ QuartzLogger.Error($"HandleInboundTaskAsync锛氭帴鏀禬MS浠诲姟澶辫触", state.RobotCrane?.DeviceName ?? "Unknown");
return false;
}
@@ -298,6 +328,8 @@
// 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
if (_taskService.UpdateTaskStatusToNext(taskInfo).Status)
{
+ _logger.LogInformation("HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {TaskNum}", taskInfo.TaskNum);
+ QuartzLogger.Info($"HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown");
return true;
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
index f696a30..3d09639 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -1,3 +1,4 @@
+using Microsoft.Extensions.Logging;
using WIDESEA_Core;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.LogHelper;
@@ -58,22 +59,30 @@
private readonly IRobotTaskService _robotTaskService;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="stateManager">鐘舵�佺鐞嗗櫒</param>
/// <param name="clientManager">瀹㈡埛绔鐞嗗櫒</param>
/// <param name="taskProcessor">浠诲姟澶勭悊鍣�</param>
/// <param name="robotTaskService">浠诲姟鏈嶅姟</param>
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
public RobotWorkflowOrchestrator(
RobotStateManager stateManager,
RobotClientManager clientManager,
RobotTaskProcessor taskProcessor,
- IRobotTaskService robotTaskService)
+ IRobotTaskService robotTaskService,
+ ILogger logger)
{
_stateManager = stateManager;
_clientManager = clientManager;
_taskProcessor = taskProcessor;
_robotTaskService = robotTaskService;
+ _logger = logger;
}
/// <summary>
@@ -112,6 +121,8 @@
&& latestState.RobotArmObject == 1
&& task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
{
+ _logger.LogInformation("ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬪鐞嗗彇璐у畬鎴愶紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬪鐞嗗彇璐у畬鎴�", latestState.RobotCrane?.DeviceName ?? ipAddress);
// 鍙戦�佹斁璐ф寚浠�
await HandlePickFinishedStateAsync(task, ipAddress);
}
@@ -127,6 +138,8 @@
&& (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode()
|| task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()))
{
+ _logger.LogInformation("ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬪鐞嗘斁璐у畬鎴愶紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬪鐞嗘斁璐у畬鎴�", latestState.RobotCrane?.DeviceName ?? ipAddress);
// 鍙戦�佸彇璐ф寚浠�
await HandlePutFinishedStateAsync(task, ipAddress);
}
@@ -155,8 +168,9 @@
if (result)
{
- // 鍙戦�佹垚鍔燂紝璁板綍鏃ュ織
- QuartzLogger.Info($"涓嬪彂鏀捐揣鎸囦护锛屾寚锟�?: {taskString}", task.RobotRoadway);
+ // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
+ _logger.LogInformation("HandlePickFinishedStateAsync锛氫笅鍙戞斁璐ф寚浠ゆ垚鍔燂紝鎸囦护: {TaskString}锛屼换鍔″彿: {TaskNum}", taskString, task.RobotTaskNum);
+ QuartzLogger.Info($"涓嬪彂鏀捐揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}", task.RobotRoadway);
// 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
@@ -174,6 +188,12 @@
await _robotTaskService.UpdateRobotTaskAsync(task);
}
}
+ }
+ else
+ {
+ // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
+ _logger.LogError("HandlePickFinishedStateAsync锛氫笅鍙戞斁璐ф寚浠ゅけ璐ワ紝鎸囦护: {TaskString}锛屼换鍔″彿: {TaskNum}", taskString, task.RobotTaskNum);
+ QuartzLogger.Error($"涓嬪彂鏀捐揣鎸囦护澶辫触锛屾寚浠�: {taskString}", task.RobotRoadway);
}
}
@@ -202,6 +222,8 @@
var stateForUpdate = _stateManager.GetState(ipAddress);
if (stateForUpdate == null)
{
+ _logger.LogWarning("HandlePutFinishedStateAsync锛氳幏鍙栫姸鎬佸け璐ワ紝IP: {IpAddress}", ipAddress);
+ QuartzLogger.Warn($"HandlePutFinishedStateAsync锛氳幏鍙栫姸鎬佸け璐ワ紝IP: {ipAddress}", ipAddress);
return;
}
@@ -231,12 +253,19 @@
stateForUpdate.CellBarcode.Add(trayBarcode1);
stateForUpdate.CellBarcode.Add(trayBarcode2);
- // 璁板綍鏃ュ織
- QuartzLogger.Info($"取锟斤拷锟斤拷锟斤拷锟叫撅拷牛锟斤拷锟叫�: {trayBarcode1}+{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName);
+ // 璁板綍鏃ュ織锛氱敓鎴愭墭鐩樻潯鐮佹垚鍔�
+ _logger.LogInformation("HandlePutFinishedStateAsync锛氱敓鎴愭墭鐩樻潯鐮佹垚鍔�: {Barcode1}+{Barcode2}锛屼换鍔″彿: {TaskNum}", trayBarcode1, trayBarcode2, task.RobotTaskNum);
+ QuartzLogger.Info($"鐢熸垚鎵樼洏鏉$爜鎴愬姛: {trayBarcode1}+{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName);
// 鍙戦�佸彇璐ф寚浠�
await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
}
+ else
+ {
+ // 鏉$爜鐢熸垚澶辫触锛岃褰曢敊璇棩蹇�
+ _logger.LogError("HandlePutFinishedStateAsync锛氱敓鎴愭墭鐩樻潯鐮佸け璐ワ紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Error($"鐢熸垚鎵樼洏鏉$爜澶辫触", stateForUpdate.RobotCrane.DeviceName);
+ }
}
else
{
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index 5ee565e..4908aae 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,3 +1,4 @@
+using Microsoft.Extensions.Logging;
using Quartz;
using System;
using System.Diagnostics.CodeAnalysis;
@@ -11,6 +12,7 @@
using WIDESEAWCS_QuartzJob.StackerCrane;
using WIDESEAWCS_Tasks.StackerCraneJob;
using WIDESEA_Core;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Tasks
@@ -79,6 +81,16 @@
private readonly StackerCraneCommandBuilder _commandBuilder;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger<CommonStackerCraneJob> _logger;
+
+ /// <summary>
+ /// 鍫嗗灈鏈鸿澶囩紪鐮�
+ /// </summary>
+ private string _deviceCode = string.Empty;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="taskService">浠诲姟鏈嶅姟</param>
@@ -86,25 +98,28 @@
/// <param name="taskRepository">浠诲姟浠撳偍</param>
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
public CommonStackerCraneJob(
ITaskService taskService,
ITaskExecuteDetailService taskExecuteDetailService,
ITaskRepository taskRepository,
IRouterService routerService,
- HttpClientHelper httpClientHelper)
+ HttpClientHelper httpClientHelper,
+ ILogger<CommonStackerCraneJob> logger)
{
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
_taskRepository = taskRepository;
+ _logger = logger;
// 鍔犺浇閰嶇疆鏂囦欢
_config = LoadConfig();
// 鍒濆鍖栦换鍔¢�夋嫨鍣�
- _taskSelector = new StackerCraneTaskSelector(taskService, routerService, httpClientHelper);
+ _taskSelector = new StackerCraneTaskSelector(taskService, routerService, httpClientHelper, _logger);
// 鍒濆鍖栧懡浠ゆ瀯寤哄櫒
- _commandBuilder = new StackerCraneCommandBuilder(taskService, routerService, _config);
+ _commandBuilder = new StackerCraneCommandBuilder(taskService, routerService, _config, _logger);
}
/// <summary>
@@ -161,23 +176,33 @@
if (!flag || value is not IStackerCrane commonStackerCrane)
{
// 鍙傛暟鏃犳晥锛岀洿鎺ヨ繑鍥�
+ _logger.LogWarning("Execute锛氬弬鏁版棤鏁�");
+ QuartzLogger.Warn("Execute锛氬弬鏁版棤鏁�", "CommonStackerCraneJob");
return Task.CompletedTask;
}
+
+ _deviceCode = commonStackerCrane.DeviceCode;
// ========== 璁㈤槄浠诲姟瀹屾垚浜嬩欢锛堝叏灞�鍙闃呬竴娆★級 ==========
if (!commonStackerCrane.IsEventSubscribed)
{
// 缁戝畾浠诲姟瀹屾垚浜嬩欢澶勭悊鏂规硶
commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
+ _logger.LogInformation("Execute锛氳闃呬换鍔″畬鎴愪簨浠讹紝璁惧: {DeviceCode}", _deviceCode);
+ QuartzLogger.Info($"璁㈤槄浠诲姟瀹屾垚浜嬩欢", _deviceCode);
}
// ========== 妫�鏌ュ爢鍨涙満浠诲姟瀹屾垚鐘舵�� ==========
commonStackerCrane.CheckStackerCraneTaskCompleted();
+ _logger.LogDebug("Execute锛氭鏌ヤ换鍔″畬鎴愮姸鎬侊紝璁惧: {DeviceCode}", _deviceCode);
+ QuartzLogger.Debug($"妫�鏌ヤ换鍔″畬鎴愮姸鎬侊紝璁惧: {_deviceCode}", _deviceCode);
// ========== 妫�鏌ユ槸鍚﹀彲浠ュ彂閫佹柊浠诲姟 ==========
if (!commonStackerCrane.IsCanSendTask(commonStackerCrane.Communicator, commonStackerCrane.DeviceProDTOs, commonStackerCrane.DeviceProtocolDetailDTOs))
{
// 鍫嗗灈鏈轰笉鍙敤锛堝姝e湪鎵ц涓婁竴浠诲姟锛夛紝鐩存帴杩斿洖
+ _logger.LogDebug("Execute锛氬爢鍨涙満涓嶅彲鐢紝璁惧: {DeviceCode}", _deviceCode);
+ QuartzLogger.Debug($"鍫嗗灈鏈轰笉鍙敤锛岃澶�: {_deviceCode}", _deviceCode);
return Task.CompletedTask;
}
@@ -187,8 +212,13 @@
if (task == null)
{
// 娌℃湁鍙敤浠诲姟
+ _logger.LogDebug("Execute锛氭病鏈夊彲鐢ㄤ换鍔★紝璁惧: {DeviceCode}", _deviceCode);
+ QuartzLogger.Debug($"娌℃湁鍙敤浠诲姟锛岃澶�: {_deviceCode}", _deviceCode);
return Task.CompletedTask;
}
+
+ _logger.LogInformation("Execute锛氶�夋嫨浠诲姟锛岃澶�: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
+ QuartzLogger.Info($"閫夋嫨浠诲姟锛屼换鍔″彿: {task.TaskNum}", _deviceCode);
// ========== 鏋勫缓鍛戒护 ==========
// 鍛戒护鏋勫缓涓嬫矇鍒颁笓鐢ㄦ瀯寤哄櫒
@@ -196,6 +226,8 @@
if (stackerCraneTaskCommand == null)
{
// 鍛戒护鏋勫缓澶辫触
+ _logger.LogWarning("Execute锛氬懡浠ゆ瀯寤哄け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
+ QuartzLogger.Warn($"鍛戒护鏋勫缓澶辫触锛屼换鍔″彿: {task.TaskNum}", _deviceCode);
return Task.CompletedTask;
}
@@ -206,12 +238,21 @@
// 鍙戦�佹垚鍔燂紝鏇存柊鐘舵��
commonStackerCrane.LastTaskType = task.TaskType;
_taskService.UpdateTaskStatusToNext(task.TaskNum);
+
+ _logger.LogInformation("Execute锛氬懡浠ゅ彂閫佹垚鍔燂紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
+ QuartzLogger.Info($"鍛戒护鍙戦�佹垚鍔燂紝浠诲姟鍙�: {task.TaskNum}", _deviceCode);
+ }
+ else
+ {
+ _logger.LogError("Execute锛氬懡浠ゅ彂閫佸け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
+ QuartzLogger.Error($"鍛戒护鍙戦�佸け璐�", _deviceCode);
}
}
catch (Exception ex)
{
// 璁板綍寮傚父
- Console.WriteLine($"CommonStackerCraneJob Error: {ex.Message}");
+ _logger.LogError(ex, "Execute锛氭墽琛屽紓甯革紝璁惧: {DeviceCode}", _deviceCode);
+ QuartzLogger.Error($"鎵ц寮傚父: {ex.Message}", _deviceCode, ex);
}
return Task.CompletedTask;
@@ -235,7 +276,8 @@
if (stackerCrane != null)
{
// 璁板綍鏃ュ織
- Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+ _logger.LogInformation("CommonStackerCrane_StackerCraneTaskCompletedEventHandler锛氫换鍔″畬鎴愶紝浠诲姟鍙�: {TaskNum}", e.TaskNum);
+ QuartzLogger.Info($"浠诲姟瀹屾垚锛屼换鍔″彿: {e.TaskNum}", stackerCrane.DeviceCode);
// 鏇存柊浠诲姟鐘舵�佷负瀹屾垚
_taskService.StackCraneTaskCompleted(e.TaskNum);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
index d7b8602..aa463f3 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
@@ -1,6 +1,8 @@
+using Microsoft.Extensions.Logging;
using System;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
@@ -39,19 +41,27 @@
private readonly StackerCraneCommandConfig _config;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="taskService">浠诲姟鏈嶅姟</param>
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="config">鍛戒护閰嶇疆</param>
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
public StackerCraneCommandBuilder(
ITaskService taskService,
IRouterService routerService,
- StackerCraneCommandConfig config)
+ StackerCraneCommandConfig config,
+ ILogger logger)
{
_taskService = taskService;
_routerService = routerService;
_config = config;
+ _logger = logger;
}
/// <summary>
@@ -66,6 +76,9 @@
{
// 鏍规嵁宸烽亾鑾峰彇鍛戒护绫诲瀷
string commandType = GetCommandType(task.Roadway);
+
+ _logger.LogInformation("ConvertToStackerCraneTaskCommand锛氭瀯寤哄懡浠わ紝浠诲姟鍙�: {TaskNum}锛屽贩閬�: {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", task.TaskNum, task.Roadway, commandType);
+ QuartzLogger.Info($"鏋勫缓鍛戒护锛屼换鍔″彿: {task.TaskNum}锛屽贩閬�: {task.Roadway}锛屽懡浠ょ被鍨�: {commandType}", task.Roadway);
// 鏍规嵁鍛戒护绫诲瀷璋冪敤鐩稿簲鐨勬瀯寤烘柟娉�
return commandType switch
@@ -90,10 +103,14 @@
{
if (roadway.Contains(mapping.Key))
{
+ _logger.LogDebug("GetCommandType锛氬尮閰嶅贩閬� {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", roadway, mapping.Value);
+ QuartzLogger.Debug($"GetCommandType锛氬尮閰嶅贩閬� {roadway}锛屽懡浠ょ被鍨�: {mapping.Value}", roadway);
return mapping.Value;
}
}
+ _logger.LogDebug("GetCommandType锛氬贩閬� {Roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {DefaultType}", roadway, _config.DefaultCommandType);
+ QuartzLogger.Debug($"GetCommandType锛氬贩閬� {roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {_config.DefaultCommandType}", roadway);
return _config.DefaultCommandType;
}
@@ -153,6 +170,9 @@
// 鑾峰彇浠诲姟绫诲瀷鍒嗙粍
TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
+ _logger.LogDebug("BuildCommand锛氫换鍔″彿: {TaskNum}锛屼换鍔$被鍨嬪垎缁�: {TaskTypeGroup}", task.TaskNum, taskTypeGroup);
+ QuartzLogger.Debug($"BuildCommand锛氫换鍔″彿: {task.TaskNum}锛屼换鍔$被鍨嬪垎缁�: {taskTypeGroup}", task.Roadway);
+
// 鏍规嵁浠诲姟绫诲瀷鍒嗗彂鏋勫缓
return taskTypeGroup switch
{
@@ -178,6 +198,9 @@
/// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
private T? BuildInboundCommand<T>(Dt_Task task, T command) where T : class
{
+ _logger.LogInformation("BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
+ QuartzLogger.Info($"BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+
// 纭畾浠诲姟绫诲瀷锛堢┖鎵樼洏鐢ㄧ壒娈婄被鍨� 100锛�
int taskType = 0;
if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
@@ -192,6 +215,8 @@
if (router == null)
{
// 鏈壘鍒扮珯鍙帮紝鏇存柊寮傚父淇℃伅
+ _logger.LogError("BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵CurrentAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.CurrentAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.CurrentAddress}銆戜俊鎭�", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.CurrentAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
return null;
}
@@ -204,6 +229,8 @@
// 瑙f瀽鐩爣鍦板潃锛堝簱浣嶅湴鍧�锛�
if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
{
+ _logger.LogError("BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
return null;
}
@@ -212,6 +239,10 @@
SetCommandProperty(command, "EndRow", endRow);
SetCommandProperty(command, "EndColumn", endColumn);
SetCommandProperty(command, "EndLayer", endLayer);
+
+ _logger.LogInformation("BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
+ router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum);
+ QuartzLogger.Info($"BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
return command;
}
@@ -231,6 +262,9 @@
/// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
private T? BuildOutboundCommand<T>(Dt_Task task, T command) where T : class
{
+ _logger.LogInformation("BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
+ QuartzLogger.Info($"BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+
// 纭畾浠诲姟绫诲瀷
int taskType = 0;
if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
@@ -244,6 +278,8 @@
Dt_Router? router = _routerService.QueryNextRoute(task.Roadway, task.TargetAddress, taskType);
if (router == null)
{
+ _logger.LogError("BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵TargetAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.TargetAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.TargetAddress}銆戜俊鎭�", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.TargetAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
return null;
}
@@ -256,6 +292,8 @@
// 瑙f瀽璧峰鍦板潃锛堝簱浣嶅湴鍧�锛�
if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
{
+ _logger.LogError("BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
return null;
}
@@ -264,6 +302,10 @@
SetCommandProperty(command, "StartRow", startRow);
SetCommandProperty(command, "StartColumn", startColumn);
SetCommandProperty(command, "StartLayer", startLayer);
+
+ _logger.LogInformation("BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
+ startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum);
+ QuartzLogger.Info($"BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway);
return command;
}
@@ -283,9 +325,14 @@
/// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
private T? BuildRelocationCommand<T>(Dt_Task task, T command) where T : class
{
+ _logger.LogInformation("BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
+ QuartzLogger.Info($"BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+
// 瑙f瀽鐩爣鍦板潃
if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
{
+ _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
return null;
}
@@ -298,6 +345,8 @@
// 瑙f瀽璧峰鍦板潃
if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
{
+ _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
+ QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
return null;
}
@@ -307,6 +356,10 @@
SetCommandProperty(command, "StartColumn", startColumn);
SetCommandProperty(command, "StartLayer", startLayer);
+ _logger.LogInformation("BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
+ startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum);
+ QuartzLogger.Info($"BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
+
return command;
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index caa4de8..d5fb6c4 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -1,9 +1,11 @@
+using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Diagnostics.CodeAnalysis;
using WIDESEA_Core;
using WIDESEAWCS_Common.HttpEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -40,6 +42,11 @@
private readonly IRouterService _routerService;
/// <summary>
+ /// 鏃ュ織璁板綍鍣�
+ /// </summary>
+ private readonly ILogger _logger;
+
+ /// <summary>
/// 绉诲簱妫�鏌ュ鎵樺嚱鏁�
/// </summary>
/// <remarks>
@@ -53,8 +60,9 @@
/// <param name="taskService">浠诲姟鏈嶅姟</param>
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
- public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, HttpClientHelper httpClientHelper)
- : this(taskService, routerService, taskNum => QueryTransferTask(httpClientHelper, taskNum))
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, HttpClientHelper httpClientHelper, ILogger logger)
+ : this(taskService, routerService, taskNum => QueryTransferTask(httpClientHelper, taskNum), logger)
{
}
@@ -64,11 +72,13 @@
/// <param name="taskService">浠诲姟鏈嶅姟</param>
/// <param name="routerService">璺敱鏈嶅姟</param>
/// <param name="transferCheck">绉诲簱妫�鏌ュ嚱鏁�</param>
- public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, Func<int, Dt_Task?> transferCheck)
+ /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+ public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, Func<int, Dt_Task?> transferCheck, ILogger logger)
{
_taskService = taskService;
_routerService = routerService;
_transferCheck = transferCheck;
+ _logger = logger;
}
/// <summary>
@@ -88,35 +98,49 @@
public Dt_Task? SelectTask(IStackerCrane commonStackerCrane)
{
Dt_Task? candidateTask;
+ var deviceCode = commonStackerCrane.DeviceCode;
+
+ _logger.LogInformation("SelectTask锛氬紑濮嬮�夋嫨浠诲姟锛岃澶�: {DeviceCode}锛屼笂涓�浠诲姟绫诲瀷: {LastTaskType}", deviceCode, commonStackerCrane.LastTaskType);
+ QuartzLogger.Info($"寮�濮嬮�夋嫨浠诲姟锛岃澶�: {deviceCode}锛屼笂涓�浠诲姟绫诲瀷: {commonStackerCrane.LastTaskType}", deviceCode);
// 鏍规嵁涓婁竴浠诲姟绫诲瀷鍐冲畾鏌ヨ绛栫暐
if (commonStackerCrane.LastTaskType == null)
{
// 娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
- candidateTask = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneTask(deviceCode);
+ _logger.LogDebug("SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
+ QuartzLogger.Debug($"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
}
else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
// 涓婁竴浠诲姟鏄嚭搴擄紝浼樺厛鏌ュ叆搴撲换鍔�
- candidateTask = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneInTask(deviceCode);
// 濡傛灉娌℃湁鍏ュ簱浠诲姟锛屽啀鏌ヤ竴涓嬪嚭搴撲换鍔�
- candidateTask ??= _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode);
+ _logger.LogDebug("SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
+ QuartzLogger.Debug($"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
}
else
{
// 涓婁竴浠诲姟鏄叆搴擄紙闈炲嚭搴擄級锛屼紭鍏堟煡鍑哄簱浠诲姟
- candidateTask = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode);
+ _logger.LogDebug("SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
+ QuartzLogger.Debug($"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
}
// 濡傛灉娌℃湁鍊欓�変换鍔★紝杩斿洖 null
if (candidateTask == null)
{
+ _logger.LogDebug("SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", deviceCode);
+ QuartzLogger.Debug($"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode);
return null;
}
// 濡傛灉涓嶆槸鍑哄簱浠诲姟锛岀洿鎺ヨ繑鍥�
if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup)
{
+ _logger.LogInformation("SelectTask锛氶�変腑闈炲嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}锛屼换鍔$被鍨�: {TaskType}", deviceCode, candidateTask.TaskNum, candidateTask.TaskType);
+ QuartzLogger.Info($"閫変腑闈炲嚭搴撲换鍔★紝浠诲姟鍙�: {candidateTask.TaskNum}锛屼换鍔$被鍨�: {candidateTask.TaskType}", deviceCode);
return candidateTask;
}
@@ -124,28 +148,35 @@
Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask);
if (selectedTask != null)
{
+ _logger.LogInformation("SelectTask锛氶�変腑鍑哄簱浠诲姟锛岃澶�: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, selectedTask.TaskNum);
+ QuartzLogger.Info($"閫変腑鍑哄簱浠诲姟锛屼换鍔″彿: {selectedTask.TaskNum}", deviceCode);
return selectedTask;
}
// 鏌ユ壘鍏朵粬鍙敤鐨勫嚭搴撶珯鍙�
var otherOutStationCodes = _routerService
- .QueryNextRoutes(commonStackerCrane.DeviceCode, candidateTask.NextAddress, candidateTask.TaskType)
+ .QueryNextRoutes(deviceCode, candidateTask.NextAddress, candidateTask.TaskType)
.Select(x => x.ChildPosi)
.ToList();
// 鏌ヨ鍏朵粬绔欏彴鐨勫嚭搴撲换鍔�
- var tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStationCodes);
+ var tasks = _taskService.QueryStackerCraneOutTasks(deviceCode, otherOutStationCodes);
foreach (var alternativeTask in tasks)
{
selectedTask = TrySelectOutboundTask(alternativeTask);
if (selectedTask != null)
{
+ _logger.LogInformation("SelectTask锛氶�変腑澶囬�夊嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, selectedTask.TaskNum);
+ QuartzLogger.Info($"閫変腑澶囬�夊嚭搴撲换鍔★紝浠诲姟鍙�: {selectedTask.TaskNum}", deviceCode);
return selectedTask;
}
}
// 娌℃湁鍙敤鍑哄簱浠诲姟锛屽皾璇曡繑鍥炲叆搴撲换鍔�
- return _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ var inboundTask = _taskService.QueryStackerCraneInTask(deviceCode);
+ _logger.LogInformation("SelectTask锛氳繑鍥炲叆搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, inboundTask?.TaskNum);
+ QuartzLogger.Info($"杩斿洖鍏ュ簱浠诲姟锛屼换鍔″彿: {inboundTask?.TaskNum}", deviceCode);
+ return inboundTask;
}
/// <summary>
@@ -267,6 +298,8 @@
if (router == null)
{
// 鏈壘鍒扮珯鍙拌矾鐢变俊鎭�
+ _logger.LogWarning("IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
+ QuartzLogger.Warn($"IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {task.NextAddress}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
return false;
}
@@ -276,6 +309,8 @@
if (device == null)
{
// 鏈壘鍒拌澶�
+ _logger.LogWarning("IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {ChildPosiDeviceCode}锛屼换鍔″彿: {TaskNum}", router.ChildPosiDeviceCode, task.TaskNum);
+ QuartzLogger.Warn($"IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {router.ChildPosiDeviceCode}", task.Roadway);
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
return false;
}
@@ -284,7 +319,11 @@
CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
// 妫�鏌ョ珯鍙版槸鍚﹁鍗犵敤
- return conveyorLine.IsOccupied(router.ChildPosi);
+ bool isOccupied = conveyorLine.IsOccupied(router.ChildPosi);
+ _logger.LogInformation("IsOutTaskStationAvailable锛氱珯鍙� {ChildPosi}锛屾槸鍚﹁鍗犵敤: {IsOccupied}锛屼换鍔″彿: {TaskNum}", router.ChildPosi, isOccupied, task.TaskNum);
+ QuartzLogger.Info($"IsOutTaskStationAvailable锛氱珯鍙� {router.ChildPosi}锛屾槸鍚﹁鍗犵敤: {isOccupied}", task.Roadway);
+
+ return !isOccupied;
}
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tests/StackerCraneTaskSelectorTests.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tests/StackerCraneTaskSelectorTests.cs
index 1a9cc28..50d6408 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tests/StackerCraneTaskSelectorTests.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tests/StackerCraneTaskSelectorTests.cs
@@ -1,3 +1,4 @@
+using Microsoft.Extensions.Logging;
using Moq;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
@@ -44,6 +45,7 @@
taskService.Setup(x => x.AddData(It.IsAny<Dt_Task>())).Returns(WebResponseContent.Instance.OK());
var transferCheckCalledCount = 0;
+ var mockLogger = new Mock<ILogger>();
var selector = new StackerCraneTaskSelector(
taskService.Object,
routerService.Object,
@@ -52,7 +54,8 @@
transferCheckCalledCount++;
Assert.Equal(1001, taskNum);
return relocationTask;
- });
+ },
+ mockLogger.Object);
var selectedTask = selector.SelectTask(stackerCrane.Object);
@@ -104,10 +107,12 @@
.Setup(x => x.QueryNextRoutes("SC01", "OUT-01", (int)TaskOutboundTypeEnum.Outbound))
.Returns(new List<WIDESEAWCS_QuartzJob.Models.Dt_Router>());
+ var mockLogger = new Mock<ILogger>();
var selector = new StackerCraneTaskSelector(
taskService.Object,
routerService.Object,
- _ => newOutboundTask);
+ _ => newOutboundTask,
+ mockLogger.Object);
_ = selector.SelectTask(stackerCrane.Object);
--
Gitblit v1.9.3