refactor(logging): 重构日志记录模块,统一使用Serilog和QuartzLogHelper
重构日志记录模块,删除重复的QuartzLogHelper文件,将其移动到Core项目。修改所有相关文件使用新的日志记录方式,增加WMS接口调用的详细日志记录。调整日志级别配置,优化日志输出格式。
更新appsettings.json中的日志级别配置,增加Quartz的调试日志输出。修改RobotJob、ConveyorLineNewJob等模块的日志记录方式,统一使用QuartzLogHelper进行日志记录。增加WMS接口调用的耗时和参数记录,便于问题排查。
| | |
| | | { |
| | | "tool_name": "Bash", |
| | | "tool_input_preview": "{\"command\":\"cd \\\"D:/Git/ShanMeiXinNengYuan/Code\\\" && dotnet build WMS/WIDESEA_WMSServer/WIDESEA_WMSServer.sln 2>&1\",\"timeout\":120000,\"description\":\"Build WMS solution to verify changes\"}", |
| | | "error": "Exit code 1\n æ£å¨ç¡®å®è¦è¿åç项ç®â¦\r\n ææé¡¹ç®åæ¯ææ°çï¼æ æ³è¿åã\r\nD:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\AOP\\LogAOP.cs(169,123): warning CS8625: æ æ³å° null åé¢é转æ¢ä¸ºé null çå¼ç¨ç±»åã [D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\WIDESEA_Core.csproj]\r\nD:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Authorization\\AuthorizationResponse.cs(21,30): warning CS8625: æ æ³å° null åé¢é转æ¢ä¸ºé null çå¼ç¨ç±»åã [D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\WIDES...", |
| | | "timestamp": "2026-04-20T16:56:32.862Z", |
| | | "tool_input_preview": "{\"command\":\"cd \\\"D:/Git/ShanMeiXinNengYuan/Code\\\" && dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln 2>&1\",\"timeout\":120000,\"description\":\"Build WCS solution to verify compilation\"}", |
| | | "error": "Exit code 1\n æ£å¨ç¡®å®è¦è¿åç项ç®â¦\r\n ææé¡¹ç®åæ¯ææ°çï¼æ æ³è¿åã\r\n WIDESEAWCS_Common -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\bin\\Debug\\net8.0\\WIDESEAWCS_Common.dll\r\n WIDESEAWCS_Communicator -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\bin\\Debug\\net8.0\\WIDESEAWCS_Communicator.dll\r\n WIDESEAWCS_Core -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\bin\\Debug\\net8.0\\WIDESEAWCS_Core.dll\r\n WIDESEAWCS_Model -> D:\\Git\\ShanMeiXinN...", |
| | | "timestamp": "2026-04-21T09:39:52.122Z", |
| | | "retry_count": 1 |
| | | } |
| | |
| | | { |
| | | "updatedAt": "2026-04-20T17:02:18.624Z", |
| | | "updatedAt": "2026-04-21T11:39:09.598Z", |
| | | "missions": [ |
| | | { |
| | | "id": "session:9007b9ea-1eb6-4d24-8fe7-2c3a949eac88:none", |
| | |
| | | "sourceKey": "session-stop:a82856d42f4ef095b" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "id": "session:4b203ec2-4358-4df5-9d57-f3bf8801fd43:none", |
| | | "source": "session", |
| | | "name": "none", |
| | | "objective": "Session mission", |
| | | "createdAt": "2026-04-21T08:05:57.739Z", |
| | | "updatedAt": "2026-04-21T11:39:09.598Z", |
| | | "status": "done", |
| | | "workerCount": 9, |
| | | "taskCounts": { |
| | | "total": 9, |
| | | "pending": 0, |
| | | "blocked": 0, |
| | | "inProgress": 0, |
| | | "completed": 9, |
| | | "failed": 0 |
| | | }, |
| | | "agents": [ |
| | | { |
| | | "name": "general-purpose:adfd244", |
| | | "role": "general-purpose", |
| | | "ownership": "adfd244986e678c43", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T11:39:09.598Z" |
| | | }, |
| | | { |
| | | "name": "general-purpose:afe58ad", |
| | | "role": "general-purpose", |
| | | "ownership": "afe58add5c15b5456", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T08:10:25.852Z" |
| | | }, |
| | | { |
| | | "name": "code-reviewer:a5f227d", |
| | | "role": "code-reviewer", |
| | | "ownership": "a5f227d0165c2b9d7", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T08:15:02.522Z" |
| | | }, |
| | | { |
| | | "name": "general-purpose:a9be028", |
| | | "role": "general-purpose", |
| | | "ownership": "a9be028ac5ebd371e", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T08:16:40.974Z" |
| | | }, |
| | | { |
| | | "name": "general-purpose:a1284f6", |
| | | "role": "general-purpose", |
| | | "ownership": "a1284f6498da348c8", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T08:17:29.877Z" |
| | | }, |
| | | { |
| | | "name": "code-reviewer:a4003ef", |
| | | "role": "code-reviewer", |
| | | "ownership": "a4003ef7b99171bad", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T08:20:36.471Z" |
| | | }, |
| | | { |
| | | "name": "general-purpose:a05860c", |
| | | "role": "general-purpose", |
| | | "ownership": "a05860ca07c208160", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T09:36:30.257Z" |
| | | }, |
| | | { |
| | | "name": "general-purpose:afb9663", |
| | | "role": "general-purpose", |
| | | "ownership": "afb9663c306b7ffb2", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T09:37:29.377Z" |
| | | }, |
| | | { |
| | | "name": "code-reviewer:a5387bf", |
| | | "role": "code-reviewer", |
| | | "ownership": "a5387bf0397247d5c", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-21T09:39:25.226Z" |
| | | } |
| | | ], |
| | | "timeline": [ |
| | | { |
| | | "id": "session-start:afb9663c306b7ffb2:2026-04-21T09:36:45.991Z", |
| | | "at": "2026-04-21T09:36:45.991Z", |
| | | "kind": "update", |
| | | "agent": "general-purpose:afb9663", |
| | | "detail": "started general-purpose:afb9663", |
| | | "sourceKey": "session-start:afb9663c306b7ffb2" |
| | | }, |
| | | { |
| | | "id": "session-stop:afb9663c306b7ffb2:2026-04-21T09:37:29.377Z", |
| | | "at": "2026-04-21T09:37:29.377Z", |
| | | "kind": "completion", |
| | | "agent": "general-purpose:afb9663", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:afb9663c306b7ffb2" |
| | | }, |
| | | { |
| | | "id": "session-start:a5387bf0397247d5c:2026-04-21T09:37:41.613Z", |
| | | "at": "2026-04-21T09:37:41.613Z", |
| | | "kind": "update", |
| | | "agent": "code-reviewer:a5387bf", |
| | | "detail": "started code-reviewer:a5387bf", |
| | | "sourceKey": "session-start:a5387bf0397247d5c" |
| | | }, |
| | | { |
| | | "id": "session-stop:a5387bf0397247d5c:2026-04-21T09:39:25.226Z", |
| | | "at": "2026-04-21T09:39:25.226Z", |
| | | "kind": "completion", |
| | | "agent": "code-reviewer:a5387bf", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:a5387bf0397247d5c" |
| | | }, |
| | | { |
| | | "id": "session-stop:a93c9aa6de8251ecb:2026-04-21T09:43:18.886Z", |
| | | "at": "2026-04-21T09:43:18.886Z", |
| | | "kind": "completion", |
| | | "agent": "general-purpose:adfd244", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:a93c9aa6de8251ecb" |
| | | }, |
| | | { |
| | | "id": "session-stop:a34767c74aa84d9d8:2026-04-21T11:30:52.701Z", |
| | | "at": "2026-04-21T11:30:52.701Z", |
| | | "kind": "completion", |
| | | "agent": "general-purpose:adfd244", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:a34767c74aa84d9d8" |
| | | }, |
| | | { |
| | | "id": "session-stop:aecf873500f38d936:2026-04-21T11:39:09.598Z", |
| | | "at": "2026-04-21T11:39:09.598Z", |
| | | "kind": "completion", |
| | | "agent": "general-purpose:adfd244", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:aecf873500f38d936" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | |
| | | "status": "completed", |
| | | "completed_at": "2026-04-20T16:32:32.484Z", |
| | | "duration_ms": 67195 |
| | | }, |
| | | { |
| | | "agent_id": "adfd244986e678c43", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T08:05:57.739Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:08:07.653Z", |
| | | "duration_ms": 129914 |
| | | }, |
| | | { |
| | | "agent_id": "afe58add5c15b5456", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T08:08:38.524Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:10:25.851Z", |
| | | "duration_ms": 107327 |
| | | }, |
| | | { |
| | | "agent_id": "a5f227d0165c2b9d7", |
| | | "agent_type": "oh-my-claudecode:code-reviewer", |
| | | "started_at": "2026-04-21T08:11:16.482Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:15:02.520Z", |
| | | "duration_ms": 226038 |
| | | }, |
| | | { |
| | | "agent_id": "a9be028ac5ebd371e", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T08:15:35.687Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:16:40.972Z", |
| | | "duration_ms": 65285 |
| | | }, |
| | | { |
| | | "agent_id": "a1284f6498da348c8", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T08:16:53.264Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:17:29.876Z", |
| | | "duration_ms": 36612 |
| | | }, |
| | | { |
| | | "agent_id": "a4003ef7b99171bad", |
| | | "agent_type": "oh-my-claudecode:code-reviewer", |
| | | "started_at": "2026-04-21T08:17:42.837Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T08:20:36.470Z", |
| | | "duration_ms": 173633 |
| | | }, |
| | | { |
| | | "agent_id": "a05860ca07c208160", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T09:35:41.894Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T09:36:30.255Z", |
| | | "duration_ms": 48361 |
| | | }, |
| | | { |
| | | "agent_id": "afb9663c306b7ffb2", |
| | | "agent_type": "general-purpose", |
| | | "started_at": "2026-04-21T09:36:45.991Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T09:37:29.375Z", |
| | | "duration_ms": 43384 |
| | | }, |
| | | { |
| | | "agent_id": "a5387bf0397247d5c", |
| | | "agent_type": "oh-my-claudecode:code-reviewer", |
| | | "started_at": "2026-04-21T09:37:41.613Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-21T09:39:25.224Z", |
| | | "duration_ms": 103611 |
| | | } |
| | | ], |
| | | "total_spawned": 135, |
| | | "total_completed": 157, |
| | | "total_spawned": 144, |
| | | "total_completed": 166, |
| | | "total_failed": 0, |
| | | "last_updated": "2026-04-21T06:46:41.255Z" |
| | | "last_updated": "2026-04-21T11:39:09.704Z" |
| | | } |
| ÎļþÃû´Ó Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs ÐÞ¸Ä |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½é误æ¥å¿ï¼ä¸å¸¦å¼å¸¸å¯¹è±¡ï¼ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | public static void LogError(ILogger logger, string loggerMessage, string deviceCode) |
| | | { |
| | | logger.Error(loggerMessage); |
| | | QuartzLogger.Error(loggerMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½ä¿¡æ¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½è¦åæ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | public static void LogWarn(ILogger logger, string loggerMessage,string deviceCode) |
| | | { |
| | | logger.Warning(loggerMessage); |
| | | QuartzLogger.Warn(loggerMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½è°è¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
| | | using Quartz; |
| | | using SqlSugar; |
| | | using System; |
| | | using SqlSugar; |
| | | using System.Collections.Concurrent; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Drawing; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DeviceEnum; |
| | | |
| | | namespace WIDESEAWCS_QuartzJob |
| | | { |
| | |
| | | return Pro_Devices.Where(x => deviceCodes.Contains(x.DeviceCode)).ToList(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | "Default": "Information", |
| | | "Override": { |
| | | "Microsoft": "Information", |
| | | "Microsoft.AspNetCore": "Warning", |
| | | "Microsoft.AspNetCore.Routing": "Warning", |
| | | "Microsoft.AspNetCore.Mvc": "Warning", |
| | | "Microsoft.AspNetCore.Mvc.Infrastructure": "Warning", |
| | | "Microsoft.AspNetCore.Mvc.Filters": "Warning", |
| | | "Microsoft.AspNetCore.Mvc.ModelBinding": "Warning", |
| | | "Microsoft.EntityFrameworkCore": "Warning" |
| | | "Microsoft.AspNetCore": "Information", |
| | | "Microsoft.AspNetCore.Routing": "Information", |
| | | "Microsoft.AspNetCore.Mvc": "Information", |
| | | "Microsoft.AspNetCore.Mvc.Infrastructure": "Information", |
| | | "Microsoft.AspNetCore.Mvc.Filters": "Information", |
| | | "Microsoft.AspNetCore.Mvc.ModelBinding": "Information", |
| | | "Microsoft.EntityFrameworkCore": "Information", |
| | | "Quartz": "Debug" |
| | | } |
| | | } |
| | | }, |
| | | "Logging": { |
| | | "LogLevel": { |
| | | "Default": "Information", |
| | | "Default": "Debug", |
| | | "Microsoft.AspNetCore": "Warning", |
| | | "Quartz": "Debug" |
| | | } |
| | |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_Tasks; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService.Flows |
| | | { |
| | |
| | | { |
| | | private readonly IRouterService _routerService; |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// åå§åå
¥åºä»»å¡æµç¨æå¡ã |
| | | /// </summary> |
| | | /// <param name="routerService">è·¯ç±æå¡ã</param> |
| | | /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> |
| | | public InboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper) |
| | | public InboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, ILogger logger) |
| | | { |
| | | _routerService = routerService; |
| | | _httpClientHelper = httpClientHelper; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ãInboundFinishTaskAsyncã,请æ±åæ°:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã", "InboundTaskFlowService"); |
| | | return content.Error($"éç¥WMSç³»ç»å åæºå
¥åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ãInboundFinishTaskAsyncã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:0ms", "InboundTaskFlowService"); |
| | | return content.OK($"éç¥WMSç³»ç»å åæºå
¥åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); |
| | | } |
| | | |
| | |
| | | /// <returns>è°ç¨ç»æã</returns> |
| | | private WebResponseContent GetWMSInboundLocation(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.GetTasksLocation); |
| | | string requestParam = new CreateTaskDto { PalletCode = task.PalletCode }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.GetTasksLocation), |
| | | new CreateTaskDto { PalletCode = task.PalletCode }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "InboundTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£è·åä»»å¡ç®æ å°å失败,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "InboundTaskFlowService"); |
| | | |
| | | string? nextAddress = result.Data.Data?.ToString(); |
| | | if (string.IsNullOrEmpty(nextAddress)) |
| | |
| | | /// <returns>åæ¥ç»æã</returns> |
| | | private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.UpdateTaskByStatus); |
| | | string requestParam = new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.UpdateTaskByStatus), |
| | | new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "InboundTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "InboundTaskFlowService"); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | |
| | | using Autofac; |
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_Tasks; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService.Flows |
| | | { |
| | |
| | | private readonly IRobotTaskService _robotTaskService; |
| | | private readonly IComponentContext _componentContext; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// åå§ååºåºä»»å¡æµç¨æå¡ã |
| | |
| | | /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> |
| | | /// <param name="robotTaskService">æºæ¢°æä»»å¡æå¡ã</param> |
| | | /// <param name="componentContext">Autofacç»ä»¶ä¸ä¸æï¼ç¨äºå»¶è¿è§£æITaskService以é¿å
循ç¯ä¾èµï¼ã</param> |
| | | public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService, IComponentContext componentContext, IUnitOfWorkManage unitOfWorkManage) |
| | | public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService, IComponentContext componentContext, IUnitOfWorkManage unitOfWorkManage, ILogger logger) |
| | | { |
| | | _routerService = routerService; |
| | | _httpClientHelper = httpClientHelper; |
| | | _robotTaskService = robotTaskService; |
| | | _componentContext = componentContext; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | string configKey = nameof(ConfigKey.OutboundFinishTaskAsync); |
| | | string requestParam = new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | // éç¥WMSåºåºå®æå¹¶è·åè¿åç»æ |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskAsync), |
| | | new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "OutboundTaskFlowService"); |
| | | return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "OutboundTaskFlowService"); |
| | | // å¤çWMSè¿åçå
¥åºä»»å¡ï¼å¦ææï¼ |
| | | if (result.Data?.Data != null) |
| | | { |
| | |
| | | { |
| | | int warehouseId = _robotTaskService.MapWarehouseIdConfigKey(task.TargetAddress); |
| | | string sourceLineNo = _robotTaskService.ResolveRobotRuleValue(task.TargetAddress, "AddressSourceLineNoMap", task.TargetAddress); |
| | | string configKey = nameof(ConfigKey.GetOutBoundTrayTaskAsync); |
| | | string requestParam = new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.GetOutBoundTrayTaskAsync), |
| | | new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "OutboundTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è·åWMSç³»ç»ç©ºæçåºåºä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "OutboundTaskFlowService"); |
| | | |
| | | WMSTaskDTO? wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty); |
| | | if (wMSTask == null) |
| | |
| | | /// <returns>åæ¥ç»æã</returns> |
| | | private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.UpdateTaskByStatus); |
| | | string requestParam = new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.UpdateTaskByStatus), |
| | | new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "OutboundTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "OutboundTaskFlowService"); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | |
| | | /// <returns>åæ¥ç»æã</returns> |
| | | private WebResponseContent OutboundFinishTaskTray(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.OutboundFinishTaskTray); |
| | | string requestParam = new CreateTaskDto { PalletCode = task.PalletCode, SourceAddress = task.SourceAddress }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskTray), |
| | | new CreateTaskDto { PalletCode = task.PalletCode, SourceAddress = task.SourceAddress }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "OutboundTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "OutboundTaskFlowService"); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService.Flows |
| | | { |
| | |
| | | public class RelocationTaskFlowService : IRelocationTaskFlowService |
| | | { |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// åå§åç§»åºä»»å¡æµç¨æå¡ã |
| | | /// </summary> |
| | | /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> |
| | | public RelocationTaskFlowService(HttpClientHelper httpClientHelper) |
| | | public RelocationTaskFlowService(HttpClientHelper httpClientHelper, ILogger logger) |
| | | { |
| | | _httpClientHelper = httpClientHelper; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>åæ¥ç»æã</returns> |
| | | private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.UpdateTaskByStatus); |
| | | string requestParam = new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.UpdateTaskByStatus), |
| | | new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RelocationTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RelocationTaskFlowService"); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | |
| | | /// <returns>éç¥ç»æã</returns> |
| | | private WebResponseContent NotifyWMSRelocationFinish(Dt_Task task) |
| | | { |
| | | string configKey = nameof(ConfigKey.RelocationFinishTask); |
| | | string requestParam = new CreateTaskDto |
| | | { |
| | | PalletCode = task.PalletCode, |
| | | SourceAddress = task.CurrentAddress, |
| | | TargetAddress = task.TargetAddress, |
| | | Roadway = task.Roadway, |
| | | TaskType = task.TaskType |
| | | }.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.RelocationFinishTask), |
| | | new CreateTaskDto |
| | | { |
| | | PalletCode = task.PalletCode, |
| | | SourceAddress = task.CurrentAddress, |
| | | TargetAddress = task.TargetAddress, |
| | | Roadway = task.Roadway, |
| | | TaskType = task.TaskType |
| | | }.ToJson()); |
| | | configKey, |
| | | requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RelocationTaskFlowService"); |
| | | return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»ç§»åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RelocationTaskFlowService"); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | |
| | | using MapsterMapper; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using SqlSugar; |
| | | using System.Diagnostics; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_Tasks; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService |
| | | { |
| | |
| | | private readonly IMapper _mapper; |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly ILogger _logger; |
| | | |
| | | private Dictionary<string, OrderByType> _taskOrderBy = new() |
| | | { |
| | |
| | | |
| | | public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList(); |
| | | |
| | | public RobotTaskService(IRobotTaskRepository BaseDal, IMapper mapper, HttpClientHelper httpClientHelper, ITaskExecuteDetailService taskExecuteDetailService) : base(BaseDal) |
| | | public RobotTaskService(IRobotTaskRepository BaseDal, IMapper mapper, HttpClientHelper httpClientHelper, ITaskExecuteDetailService taskExecuteDetailService, ILogger logger) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _httpClientHelper = httpClientHelper; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | | _logger = logger; |
| | | } |
| | | |
| | | public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO, StockDTO stockDTO) |
| | |
| | | Dt_RobotTask task = new Dt_RobotTask |
| | | { |
| | | RobotTaskNum = taskDTO.TaskNum, |
| | | RobotSourceAddressLineCode = stockDTO.SourceLineNo, |
| | | RobotTargetAddressLineCode = stockDTO.TargetLineNo, |
| | | RobotRoadway = stockDTO.Roadway, |
| | | RobotSourceAddressLineCode = stockDTO?.SourceLineNo ?? string.Empty, |
| | | RobotTargetAddressLineCode = stockDTO?.TargetLineNo ?? string.Empty, |
| | | RobotRoadway = stockDTO?.Roadway ?? string.Empty, |
| | | RobotSourceAddress = taskDTO.SourceAddress, |
| | | RobotTargetAddress = taskDTO.TargetAddress, |
| | | RobotSourceAddressPalletCode = stockDTO.SourcePalletNo, |
| | | RobotTargetAddressPalletCode = stockDTO.TargetPalletNo, |
| | | RobotSourceAddressPalletCode = stockDTO?.SourcePalletNo ?? string.Empty, |
| | | RobotTargetAddressPalletCode = stockDTO?.TargetPalletNo ?? string.Empty, |
| | | RobotTaskType = taskDTO.TaskType, |
| | | RobotTaskState = taskDTO.TaskStatus, |
| | | RobotGrade = taskDTO.Grade, |
| | |
| | | { |
| | | string configKey = ResolveRobotTaskConfigKey(task.TargetAddress); |
| | | StockDTO stock = BuildRobotTaskStock(task, configKey); |
| | | string requestParam = stock.ToJson(); |
| | | var stopwatch = Stopwatch.StartNew(); |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, stock.ToJson()); |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | stopwatch.Stop(); |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RobotTaskService"); |
| | | return WebResponseContent.Instance.Error($"è·åWMSç³»ç»æºæ¢°æä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,ç®æ å°å:ã{task.TargetAddress}ã,æ¥å£:ã{configKey}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty); |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{stopwatch.ElapsedMilliseconds}ms", "RobotTaskService"); |
| | | |
| | | var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result?.Data?.Data?.ToString() ?? string.Empty); |
| | | if (wMSTask == null) |
| | | return WebResponseContent.Instance.Error($"è·åWMSç³»ç»æºæ¢°æä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ãWMSæªè¿åææä»»å¡æ°æ®ã"); |
| | | |
| | |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_DTO; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService; |
| | | |
| | |
| | | |
| | | string oldCurrentPos = task.CurrentAddress; |
| | | string oldNextPos = task.NextAddress; |
| | | |
| | | |
| | | Dt_Router routers = _routerService.QueryNextRoute(oldNextPos, task.TargetAddress); |
| | | if (routers == null) throw new Exception($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); |
| | |
| | | { |
| | | // 没æä»»å¡ï¼å WMS 请æ±åºåºæçä»»å¡ |
| | | var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode); |
| | | //QuartzLogHelper.LogInfo(_logger, "Executeï¼æ£æ¥æçä½ç½® {ChildDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", $"æ£æ¥æçä½ç½® {childDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", conveyorLine.DeviceCode, childDeviceCode); |
| | | |
| | | var responseResult = _httpClientHelper.Post<WebResponseContent>("GetOutBoundTrayTaskAsync", new CreateTaskDto() |
| | | string configKey = "GetOutBoundTrayTaskAsync"; |
| | | string requestParam = new CreateTaskDto() |
| | | { |
| | | WarehouseId = position.WarehouseId, |
| | | TargetAddress = childDeviceCode |
| | | }.Serialize()); |
| | | }.Serialize(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var responseResult = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | _lastPalletCheckTime[childDeviceCode] = DateTime.Now; |
| | | |
| | | // å¦æè¯·æ±æåï¼æ¥æ¶ WMS è¿åçä»»å¡ |
| | | if (responseResult.IsSuccess && responseResult.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,ååºæ°æ®:ã{responseResult.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", conveyorLine.DeviceCode); |
| | | var wmsTask = JsonConvert.DeserializeObject<WMSTaskDTO>(responseResult.Data.Data.ToString()); |
| | | List<WMSTaskDTO> taskDTOs = new List<WMSTaskDTO> { wmsTask }; |
| | | if (wmsTask != null) |
| | | _taskService.ReceiveWMSTask(taskDTOs); |
| | | } |
| | | else |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{responseResult.Data?.Message}ã", conveyorLine.DeviceCode); |
| | | } |
| | | } |
| | | } |
| | |
| | | var task = _taskService.QueryManualInboundTask(childDeviceCode); |
| | | if (task != null) |
| | | { |
| | | var handler = new ManualInboundTaskHandler(_taskService); |
| | | var handler = new ManualInboundTaskHandler(_taskService, _logger); |
| | | handler.WriteTaskToPlc(conveyorLine, childDeviceCode, task); |
| | | } |
| | | } |
| | |
| | | using Serilog; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | private readonly ITaskService _taskService; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | | /// <param name="taskService">任塿å¡</param> |
| | | public ManualInboundTaskHandler(ITaskService taskService) |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | public ManualInboundTaskHandler(ITaskService taskService, ILogger logger) |
| | | { |
| | | _taskService = taskService; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | if (conveyorLine == null || string.IsNullOrEmpty(childDeviceCode) || task == null) |
| | | { |
| | | QuartzLogger.Error("ManualInboundTaskHandler.WriteTaskToPlc: åæ°ä¸ºç©º", "ManualInbound"); |
| | | QuartzLogHelper.LogError(_logger, "ManualInboundTaskHandler.WriteTaskToPlc: åæ°ä¸ºç©º", "ManualInbound"); |
| | | return; |
| | | } |
| | | |
| | |
| | | var updateResult = _taskService.UpdateTaskStatusToNext(task); |
| | | if (!updateResult.Status) |
| | | { |
| | | QuartzLogger.Error($"ManualInboundTaskHandler: æ´æ°ä»»å¡ç¶æå¤±è´¥ï¼ä»»å¡å·ã{task.TaskNum}ãï¼é误信æ¯:{updateResult.Message}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogError(_logger, $"ManualInboundTaskHandler: æ´æ°ä»»å¡ç¶æå¤±è´¥ï¼ä»»å¡å·ã{task.TaskNum}ãï¼é误信æ¯:{updateResult.Message}", conveyorLine.DeviceCode); |
| | | return; |
| | | } |
| | | |
| | | // åå
¥ACKæ å¿ |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | QuartzLogger.Info($"ManualInboundTaskHandler: æå¨ä»»å¡åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ãï¼æºå°åã{task.SourceAddress}ã", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, $"ManualInboundTaskHandler: æå¨ä»»å¡åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ãï¼æºå°åã{task.SourceAddress}ã", conveyorLine.DeviceCode); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | QuartzLogger.Error($"ManualInboundTaskHandler: åå
¥è¾é线任å¡å¼å¸¸ï¼é误信æ¯:{ex.Message}", "ManualInbound"); |
| | | QuartzLogHelper.LogError(_logger, ex, $"ManualInboundTaskHandler: åå
¥è¾é线任å¡å¼å¸¸", $"ManualInboundTaskHandler: åå
¥è¾é线任å¡å¼å¸¸ï¼é误信æ¯:{ex.Message}", "ManualInbound"); |
| | | } |
| | | } |
| | | } |
| | |
| | | using Serilog; |
| | | using System.Collections.Concurrent; |
| | | using System.Net.Sockets; |
| | | using Microsoft.Extensions.Logging; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | |
| | | // æ¸
ç该客æ·ç«¯ç HandleClientAsync å¯å¨æ å¿ |
| | | // ä»¥ä¾¿ä¸æ¬¡éè¿æ¶å¯ä»¥éæ°å¯å¨å¤ç |
| | | _handleClientStarted.TryRemove(ipAddress, out _); |
| | | _logger.LogDebug("客æ·ç«¯æªè¿æ¥ï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Debug($"客æ·ç«¯æªè¿æ¥ï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | QuartzLogHelper.LogDebug(_logger, $"客æ·ç«¯æªè¿æ¥ï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // ç»å®å®¢æ·ç«¯æå¼è¿æ¥çäºä»¶å¤ç |
| | | _tcpSocket.RobotReceived += OnRobotReceived; |
| | | // è®°å½æ¥å¿ï¼äºä»¶è®¢é
æå |
| | | _logger.LogInformation("æºæ¢°æTCPæ¶æ¯äºä»¶å·²è®¢é
ï¼è®¾å¤: {DeviceName}", robotCrane.DeviceName); |
| | | QuartzLogger.Info($"æºæ¢°æTCPæ¶æ¯äºä»¶å·²è®¢é
", robotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"æºæ¢°æTCPæ¶æ¯äºä»¶å·²è®¢é
", robotCrane.DeviceName); |
| | | } |
| | | |
| | | // ä» TCP æå¡å¨ç客æ·ç«¯åå
¸ä¸è·å TcpClient 对象 |
| | |
| | | { |
| | | // ç§»é¤å¯å¨æ å¿ï¼è¿å false 表示客æ·ç«¯ä¸å¯ç¨ |
| | | _handleClientStarted.TryRemove(ipAddress, out _); |
| | | _logger.LogWarning("è·åTcpClient失败ï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Warn($"è·åTcpClient失败ï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | QuartzLogHelper.LogWarn(_logger, $"è·åTcpClient失败ï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | return false; |
| | | } |
| | | |
| | |
| | | if (!alreadyStarted) |
| | | { |
| | | // è®°å½æ¥å¿ï¼å¯å¨æ¶æ¯å¤ç |
| | | _logger.LogInformation("å¯å¨å®¢æ·ç«¯æ¶æ¯å¤çï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Info($"å¯å¨å®¢æ·ç«¯æ¶æ¯å¤ç", robotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"å¯å¨å®¢æ·ç«¯æ¶æ¯å¤çï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | |
| | | // è·åææ°çç¶æå¯¹è±¡ |
| | | var latestStateForSubscribe = _stateManager.GetState(ipAddress); |
| | |
| | | if (t.IsFaulted) |
| | | { |
| | | // è®°å½é误æ¥å¿ |
| | | _logger.LogError(t.Exception, "çå¬å®¢æ·ç«¯æ¶æ¯äºä»¶å¼å¸¸ï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Error($"çå¬å®¢æ·ç«¯æ¶æ¯äºä»¶å¼å¸¸", robotCrane.DeviceName, t.Exception); |
| | | QuartzLogHelper.LogError(_logger, t.Exception, $"çå¬å®¢æ·ç«¯æ¶æ¯äºä»¶å¼å¸¸ï¼IP: {ipAddress}", $"çå¬å®¢æ·ç«¯æ¶æ¯äºä»¶å¼å¸¸ï¼IP: {ipAddress}", robotCrane.DeviceName); |
| | | // åçé误æ¶ï¼ç§»é¤å¯å¨æ å¿ï¼å
è®¸ä¸æ¬¡éè¯ |
| | | _handleClientStarted.TryRemove(ipAddress, out _); |
| | | } |
| | |
| | | _handleClientStarted.TryRemove(clientId, out _); |
| | | |
| | | // è®°å½æ¥å¿ï¼å®¢æ·ç«¯æå¼è¿æ¥ |
| | | _logger.LogInformation("客æ·ç«¯æå¼è¿æ¥ï¼IP: {ClientId}", clientId); |
| | | QuartzLogger.Info($"客æ·ç«¯æå¼è¿æ¥", clientId); |
| | | QuartzLogHelper.LogInfo(_logger, $"客æ·ç«¯æå¼è¿æ¥ï¼IP: {clientId}", clientId); |
| | | |
| | | // é置该客æ·ç«¯çç¶æä¿¡æ¯ |
| | | _stateManager.TryUpdateStateSafely(clientId, state => |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Quartz; |
| | | using Serilog; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Core.Caches; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.SocketServer; |
| | | using WIDESEAWCS_Tasks.Workflow; |
| | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger<RobotJob> _logger; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | |
| | | ITaskService taskService, |
| | | IRobotStateRepository robotStateRepository, |
| | | HttpClientHelper httpClientHelper, |
| | | ILogger<RobotJob> logger, |
| | | ILogger logger, |
| | | IFakeBatteryPositionService fakeBatteryPositionService) |
| | | { |
| | | // åå§åç¶æç®¡çå¨ï¼ä¼ å
¥ä»å¨æå¡ |
| | |
| | | |
| | | // åå§åå½ä»¤å¤çå¨ |
| | | // ç®åå½ä»¤å¤çå¨ï¼å¤çç¶ææ´æ°çç®åå½ä»¤ |
| | | var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor, socketGateway); |
| | | var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor, socketGateway, _logger); |
| | | // åç¼å½ä»¤å¤çå¨ï¼å¤ç pickfinishedãputfinished ç另忰çå½ä»¤ |
| | | var prefixCommandHandler = new RobotPrefixCommandHandler(robotTaskService, _taskProcessor, _stateManager, socketGateway, fakeBatteryPositionService); |
| | | var prefixCommandHandler = new RobotPrefixCommandHandler(robotTaskService, _taskProcessor, _stateManager, socketGateway, fakeBatteryPositionService, _logger); |
| | | |
| | | // åå§åæ¶æ¯è·¯ç±å¨ |
| | | _messageRouter = new RobotMessageHandler(socketGateway, _stateManager, simpleCommandHandler, prefixCommandHandler, logger); |
| | |
| | | { |
| | | // å°æ¶æ¯è·¯ç±å¨çå¤çæ¹æ³ç»å®å° TCP æå¡å¨çæ¶æ¯æ¥æ¶äºä»¶ |
| | | tcpSocket.MessageReceived += _messageRouter.HandleMessageReceivedAsync; |
| | | _logger.LogError("æºå¨æTCPæ¶æ¯äºä»¶å·²è®¢é
"); |
| | | QuartzLogger.Error($"æºå¨æTCPæ¶æ¯äºä»¶å·²è®¢é
"); |
| | | QuartzLogHelper.LogError(_logger, $"æºå¨æTCPæ¶æ¯äºä»¶å·²è®¢é
", "Unknown"); |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="state">æå¼è¿æ¥çæºæ¢°æç¶æ</param> |
| | | private void OnClientDisconnected(object? sender, RobotSocketState state) |
| | | { |
| | | _logger.LogError("客æ·ç«¯å·²æå¼è¿æ¥"); |
| | | QuartzLogger.Error($"客æ·ç«¯å·²æå¼è¿æ¥", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"客æ·ç«¯å·²æå¼è¿æ¥", state.RobotCrane.DeviceName); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | // å¼å¸¸å¤çå·²å¨ç»ä»¶å
é¨è¿è¡ï¼Job å±ä¿æå
åºè¯ä¹ |
| | | // è®°å½å¼å¸¸è䏿¯éé»åæï¼ä¾¿äºææ¥é®é¢ |
| | | _logger?.LogError(ex, "RobotJobæ§è¡å¼å¸¸ï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Error($"RobotJobæ§è¡å¼å¸¸ï¼IP: {ipAddress}", state.RobotCrane.DeviceName, ex); |
| | | QuartzLogHelper.LogError(_logger, ex, $"RobotJobæ§è¡å¼å¸¸ï¼IP: {ipAddress}", $"RobotJobæ§è¡å¼å¸¸ï¼IP: {ipAddress}", state.RobotCrane.DeviceName); |
| | | } |
| | | } |
| | | } |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Serilog; |
| | | using System.Net.Sockets; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger<RobotJob> _logger; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | |
| | | RobotStateManager stateManager, |
| | | IRobotSimpleCommandHandler simpleCommandHandler, |
| | | IRobotPrefixCommandHandler prefixCommandHandler, |
| | | ILogger<RobotJob> logger) |
| | | ILogger logger) |
| | | { |
| | | _socketClientGateway = socketClientGateway; |
| | | _stateManager = stateManager; |
| | |
| | | public async Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client) |
| | | { |
| | | var state = _stateManager.GetState(client.Client.RemoteEndPoint.ToString()); |
| | | if(state.OperStatus == message) |
| | | if (state.OperStatus == message) |
| | | { |
| | | // å¤çæååï¼å°åæ¶æ¯ååå°å®¢æ·ç«¯ï¼ä¿æåæè¡ä¸ºï¼ |
| | | await _socketClientGateway.SendMessageAsync(client, message); |
| | | } |
| | | // è®°å½æ¥æ¶å°çæ¶æ¯æ¥å¿ |
| | | _logger.LogInformation($"æ¥æ¶å°å®¢æ·ç«¯ã{state.RobotCrane?.DeviceName}ãåéæ¶æ¯ã{message}ã"); |
| | | QuartzLogger.Info($"æ¥æ¶å°å®¢æ·ç«¯æ¶æ¯ã{message}ã", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"æ¥æ¶å°å®¢æ·ç«¯ã{state.RobotCrane?.DeviceName}ãåéæ¶æ¯ã{message}ã", state.RobotCrane?.DeviceName); |
| | | |
| | | // æ£æ¥ä»»å¡æ»æ°æ¯å¦æªè¾¾å°ä¸é |
| | | if (state.RobotTaskTotalNum > RobotConst.MaxTaskTotalNum) |
| | | { |
| | | _logger.LogInformation($"æ¥æ¶å°å®¢æ·ç«¯ã{state.RobotCrane?.DeviceName}ãåéæ¶æ¯ã{message}ã"); |
| | | QuartzLogger.Info($"æ¥æ¶å°å®¢æ·ç«¯æ¶æ¯ã{message}ã", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"æ¥æ¶å°å®¢æ·ç«¯ã{state.RobotCrane?.DeviceName}ãåéæ¶æ¯ã{message}ã", state.RobotCrane?.DeviceName); |
| | | await _socketClientGateway.SendMessageAsync(client, message); |
| | | return null; |
| | | } |
| | |
| | | // ç®åå½ä»¤å
æ¬ï¼homingãhomedãrunningãpausingãrunmodeãcontrolmode ç |
| | | if (await _simpleCommandHandler.HandleAsync(messageLower, state)) |
| | | { |
| | | if(messageLower != "batteryarrived") |
| | | if (messageLower != "batteryarrived") |
| | | { |
| | | // å¤çæååï¼å°åæ¶æ¯ååå°å®¢æ·ç«¯ï¼ä¿æåæè¡ä¸ºï¼ |
| | | await _socketClientGateway.SendMessageAsync(client, message); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ã{message}ã", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ã{message}ã", state.RobotCrane?.DeviceName); |
| | | } |
| | | |
| | | // å®å
¨æ´æ°ç¶æå°æ°æ®åº |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using Serilog; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | |
| | | if (currentEntity == null) |
| | | { |
| | | _repository.GetOrCreate(newState.IPAddress, newState.RobotCrane ?? new RobotCraneDevice()); |
| | | _logger.LogDebug("TryUpdateStateSafelyï¼å建æ°ç¶æï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Debug($"å建æ°ç¶æï¼IP: {ipAddress}", ipAddress); |
| | | QuartzLogHelper.LogDebug(_logger, $"å建æ°ç¶æï¼IP: {ipAddress}", ipAddress); |
| | | return true; |
| | | } |
| | | |
| | |
| | | |
| | | if (!success) |
| | | { |
| | | _logger.LogWarning("TryUpdateStateSafelyï¼çæ¬å²çªï¼æ´æ°å¤±è´¥ï¼IP: {IpAddress}ï¼ææçæ¬: {ExpectedVersion}", ipAddress, expectedVersion); |
| | | QuartzLogger.Warn($"çæ¬å²çªï¼æ´æ°å¤±è´¥ï¼IP: {ipAddress}", ipAddress); |
| | | QuartzLogHelper.LogWarn(_logger, $"TryUpdateStateSafelyï¼çæ¬å²çªï¼æ´æ°å¤±è´¥ï¼IP: {ipAddress}ï¼ææçæ¬: {expectedVersion}", ipAddress); |
| | | } |
| | | |
| | | return success; |
| | |
| | | return _repository.ToSocketState(entity); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | |
| | | if (result) |
| | | { |
| | | // åéæåï¼è®°å½ Info æ¥å¿ |
| | | _logger.LogInformation("ä¸ååè´§æä»¤æåï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"ä¸ååè´§æä»¤æåï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"ä¸ååè´§æä»¤æåï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æä¸º"æºå¨äººæ§è¡ä¸" |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | |
| | | else |
| | | { |
| | | // åé失败ï¼è®°å½ Error æ¥å¿ |
| | | _logger.LogError("ä¸ååè´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"ä¸ååè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"ä¸ååè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (positions == null || positions.Count == 0) |
| | | { |
| | | _logger.LogWarning("SendSocketRobotFakeBatteryPickAsyncï¼å¹³é¢ç¹ä½å表为空ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogHelper.LogWarn(_logger, $"SendSocketRobotFakeBatteryPickAsyncï¼å¹³é¢ç¹ä½å表为空ï¼ä»»å¡å·: {task.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("ä¸ååçµè¯åè´§æä»¤æåï¼æä»¤: {TaskString}ï¼ç¹ä½: {Positions}ï¼è®¾å¤: {DeviceName}", |
| | | taskString, string.Join(",", positions), state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"ä¸ååçµè¯åè´§æä»¤æåï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"ä¸ååçµè¯åè´§æä»¤æåï¼æä»¤: {taskString}ï¼ç¹ä½: {string.Join(",", positions)}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æä¸º"æºå¨äººæ§è¡ä¸" |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("ä¸ååçµè¯åè´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"ä¸ååçµè¯åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"ä¸ååçµè¯åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("ä¸åæ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {TaskString}ï¼æ¹æ¬¡: {Range}ï¼è®¾å¤: {DeviceName}", |
| | | taskString, range, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"ä¸åæ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"ä¸åæ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | | state.CurrentTask = task; |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("ä¸åæ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"ä¸åæ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"ä¸åæ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {TaskString}ï¼æ¹æ¬¡: {Range}ï¼è®¾å¤: {DeviceName}", |
| | | taskString, range, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | | state.CurrentTask = task; |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"ä¸ååçµè¯æ¹æ¬¡åè´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("ä¸åæ¾è´§æä»¤æåï¼æä»¤: {TaskString}ï¼æ¹æ¬¡: {Range}ï¼è®¾å¤: {DeviceName}", |
| | | taskString, range, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Info($"ä¸åæ¾è´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"ä¸åæ¾è´§æä»¤æåï¼æä»¤: {taskString}ï¼æ¹æ¬¡: {range}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | | state.CurrentTask = task; |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼è®¾å¤: {DeviceName}", |
| | | taskString, state.RobotCrane?.DeviceName); |
| | | QuartzLogger.Error($"ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", state.RobotCrane?.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼è®¾å¤: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName); |
| | | } |
| | | } |
| | | |
| | |
| | | var currentTask = state.CurrentTask; |
| | | if (currentTask == null) |
| | | { |
| | | _logger.LogDebug("HandleInboundTaskAsyncï¼å½åä»»å¡ä¸ºç©º"); |
| | | QuartzLogger.Debug($"HandleInboundTaskAsyncï¼å½åä»»å¡ä¸ºç©º", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogDebug(_logger, $"HandleInboundTaskAsyncï¼å½åä»»å¡ä¸ºç©º", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | }; |
| | | |
| | | // è®°å½æ¥å¿ï¼å¼å§è°ç¨ WMS å建å
¥åºä»»å¡ |
| | | _logger.LogInformation("HandleInboundTaskAsyncï¼è°ç¨WMSå建å
¥åºä»»å¡ï¼æçç : {PalletCode}ï¼ä»»å¡ç±»å: {TaskType}", PalletCode, taskType); |
| | | QuartzLogger.Info($"è°ç¨WMSå建å
¥åºä»»å¡ï¼æçç : {PalletCode}ï¼ä»»å¡ç±»å: {taskType}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandleInboundTaskAsyncï¼è°ç¨WMSå建å
¥åºä»»å¡ï¼æçç : {PalletCode}ï¼ä»»å¡ç±»å: {taskType}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | |
| | | // è°ç¨ WMS æ¥å£å建å
¥åºä»»å¡ |
| | | var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.CreateTaskInboundAsync), taskDto.ToJson()); |
| | | string configKey = nameof(ConfigKey.CreateTaskInboundAsync); |
| | | string requestParam = taskDto.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | |
| | | // 妿è°ç¨å¤±è´¥æè¿åéè¯¯ç¶æ |
| | | if (!result.Data.Status && result.IsSuccess) |
| | | { |
| | | _logger.LogError("HandleInboundTaskAsyncï¼WMSè¿åéè¯¯ç¶æï¼Status: {Status}", result.Data.Status); |
| | | QuartzLogger.Error($"HandleInboundTaskAsyncï¼WMSè¿åéè¯¯ç¶æ", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"HandleInboundTaskAsyncï¼WMSè¿åéè¯¯ç¶æï¼Status: {result.Data.Status}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); |
| | | if (!content.Status) |
| | | { |
| | | _logger.LogError("HandleInboundTaskAsyncï¼æ¥æ¶WMSä»»å¡å¤±è´¥"); |
| | | QuartzLogger.Error($"HandleInboundTaskAsyncï¼æ¥æ¶WMSä»»å¡å¤±è´¥", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"HandleInboundTaskAsyncï¼æ¥æ¶WMSä»»å¡å¤±è´¥", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | /// <returns>HTTP ååºç»æ</returns> |
| | | public HttpResponseResult<WebResponseContent> PostSplitPalletAsync(StockDTO stockDTO) |
| | | { |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletAsync), stockDTO.ToJson()); |
| | | string configKey = nameof(ConfigKey.SplitPalletAsync); |
| | | string requestParam = stockDTO.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RobotTaskProcessor"); |
| | | else |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RobotTaskProcessor"); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>HTTP ååºç»æ</returns> |
| | | public HttpResponseResult<WebResponseContent> PostGroupPalletAsync(string configKey, StockDTO stockDTO) |
| | | { |
| | | return _httpClientHelper.Post<WebResponseContent>(configKey, stockDTO.ToJson()); |
| | | string requestParam = stockDTO.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RobotTaskProcessor"); |
| | | else |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RobotTaskProcessor"); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>HTTP ååºç»æ</returns> |
| | | public HttpResponseResult<WebResponseContent> PostSplitPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | string configKey = nameof(ConfigKey.SplitPalletConfirm); |
| | | var request = new { PalletCode = palletCode, DeviceName = deviceName }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletConfirm), request.ToJson()); |
| | | string requestParam = request.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RobotTaskProcessor"); |
| | | else |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RobotTaskProcessor"); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>HTTP ååºç»æ</returns> |
| | | public HttpResponseResult<WebResponseContent> PostGroupPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | string configKey = nameof(ConfigKey.GroupPalletConfirm); |
| | | var request = new { PalletCode = palletCode, DeviceName = deviceName }; |
| | | return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GroupPalletConfirm), request.ToJson()); |
| | | string requestParam = request.ToJson(); |
| | | DateTime startTime = DateTime.Now; |
| | | |
| | | var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | QuartzLogHelper.LogError(_logger, $"è°ç¨WMSæ¥å£å¤±è´¥,æ¥å£:ã{configKey}ã,请æ±åæ°:ã{requestParam}ã,é误信æ¯:ã{result.Data?.Message}ã", "RobotTaskProcessor"); |
| | | else |
| | | QuartzLogHelper.LogInfo(_logger, $"è°ç¨WMSæ¥å£æå,æ¥å£:ã{configKey}ã,ååºæ°æ®:ã{result.Data?.Data}ã,èæ¶:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RobotTaskProcessor"); |
| | | |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | |
| | | using System.Net.Sockets; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | |
| | | private readonly IFakeBatteryPositionService _fakeBatteryPositionService; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | | /// <param name="robotTaskService">任塿å¡</param> |
| | |
| | | /// <param name="stateManager">ç¶æç®¡çå¨</param> |
| | | /// <param name="socketClientGateway">Socket ç½å
³</param> |
| | | /// <param name="fakeBatteryPositionService">åçµè¯ä½ç½®æå¡</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | public RobotPrefixCommandHandler( |
| | | IRobotTaskService robotTaskService, |
| | | RobotTaskProcessor taskProcessor, |
| | | RobotStateManager stateManager, |
| | | ISocketClientGateway socketClientGateway, |
| | | IFakeBatteryPositionService fakeBatteryPositionService) |
| | | IFakeBatteryPositionService fakeBatteryPositionService, |
| | | ILogger logger) |
| | | { |
| | | _robotTaskService = robotTaskService; |
| | | _taskProcessor = taskProcessor; |
| | | _stateManager = stateManager; |
| | | _socketClientGateway = socketClientGateway; |
| | | _fakeBatteryPositionService = fakeBatteryPositionService; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"RobotJob HandleAsync Warning: Current task not found for RobotTaskId {state.CurrentTask.RobotTaskId}"); |
| | | QuartzLogHelper.LogWarn(_logger, $"RobotJob HandleAsync Warning: Current task not found for RobotTaskId {state.CurrentTask.RobotTaskId}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // æè·å¹¶è®°å½å¼å¸¸ï¼é²æ¢å¼å¸¸åä¸ä¼ æå¯¼è´æ¶æ¯å¤ç䏿 |
| | | Console.WriteLine($"RobotJob MessageReceived Error: {ex.Message}"); |
| | | QuartzLogHelper.LogError(_logger, ex, $"RobotJob MessageReceived Error: {ex.Message}", $"RobotJob MessageReceived Error: {ex.Message}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | } |
| | | } |
| | | |
| | |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | private readonly ISocketClientGateway _socketClientGateway; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | | /// <param name="taskProcessor">ä»»å¡å¤çå¨å®ä¾</param> |
| | | public RobotSimpleCommandHandler(RobotTaskProcessor taskProcessor, ISocketClientGateway socketClientGateway) |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | public RobotSimpleCommandHandler(RobotTaskProcessor taskProcessor, ISocketClientGateway socketClientGateway, ILogger logger) |
| | | { |
| | | _taskProcessor = taskProcessor; |
| | | _socketClientGateway = socketClientGateway; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | var confirmResult = _taskProcessor.PostSplitPalletConfirmAsync(sourcePallet, state.RobotCrane?.DeviceName); |
| | | if (!confirmResult.IsSuccess) |
| | | { |
| | | QuartzLogger.Error($"æ¹éæç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"æ¹éæç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | |
| | | state.CurrentTask = null; |
| | | state.RobotTaskTotalNum = 0; |
| | |
| | | |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | |
| | | state.ChangePalletPhase = 0; |
| | | state.CurrentBatchIndex = 1; |
| | |
| | | var confirmResult = _taskProcessor.PostSplitPalletConfirmAsync(sourcePallet, state.RobotCrane?.DeviceName); |
| | | if (!confirmResult.IsSuccess) |
| | | { |
| | | QuartzLogger.Error($"æ¹éæç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"æ¹éæç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // å
¥åºæåï¼å é¤ä»»å¡è®°å½ |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allpickfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | return true; |
| | | } |
| | | return false; |
| | |
| | | var confirmResult = _taskProcessor.PostGroupPalletConfirmAsync(targetPallet, state.RobotCrane?.DeviceName); |
| | | if (!confirmResult.IsSuccess) |
| | | { |
| | | QuartzLogger.Error($"æ¹éç»ç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"æ¹éç»ç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | state.CellBarcode = new List<string>(); |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | |
| | | state.ChangePalletPhase = 0; |
| | | state.CurrentBatchIndex = 1; |
| | |
| | | |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | state.CellBarcode = new List<string>(); |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãSwap,diskFinishedã", state.RobotCrane.DeviceName); |
| | | |
| | | state.ChangePalletPhase = 0; |
| | | state.CurrentBatchIndex = 1; |
| | |
| | | var confirmResult = _taskProcessor.PostGroupPalletConfirmAsync(targetPallet, state.RobotCrane?.DeviceName); |
| | | if (!confirmResult.IsSuccess) |
| | | { |
| | | QuartzLogger.Error($"æ¹éç»ç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"æ¹éç»ç确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // å
¥åºæåï¼å é¤ä»»å¡è®°å½ |
| | | if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true) |
| | | { |
| | | QuartzLogger.Error($"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | QuartzLogHelper.LogError(_logger, $"allputfinishedï¼å é¤ä»»å¡è®°å½å¤±è´¥ï¼ä»»å¡å·: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | state.CellBarcode = new List<string>(); // æ¸
空æ¡ç å表 |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ãGroup,diskFinishedã", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"åéæ¶æ¯ï¼ãGroup,diskFinishedã", state.RobotCrane.DeviceName); |
| | | return true; |
| | | } |
| | | return false; |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using WIDESEA_Core; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.SocketServer; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | | |
| | | namespace WIDESEAWCS_Tasks.Workflow |
| | |
| | | && (latestState.RobotArmObject.IsNullOrEmpty() || latestState.RobotArmObject == 1) |
| | | && task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode()) |
| | | { |
| | | _logger.LogInformation("ExecuteAsyncï¼æ»¡è¶³æ¾è´§æ¡ä»¶ï¼å¼å§ä¸åæ¾è´§ä»»å¡ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogger.Info($"ExecuteAsyncï¼æ»¡è¶³æ¾è´§æ¡ä»¶ï¼å¼å§ä¸åæ¾è´§ä»»å¡", latestState.RobotCrane?.DeviceName ?? ipAddress); |
| | | QuartzLogHelper.LogInfo(_logger, $"ExecuteAsyncï¼æ»¡è¶³æ¾è´§æ¡ä»¶ï¼å¼å§ä¸åæ¾è´§ä»»å¡,ä»»å¡å·: {task.RobotTaskNum}", latestState.RobotCrane?.DeviceName ?? ipAddress); |
| | | // åéæ¾è´§æä»¤ |
| | | await HandlePickFinishedStateAsync(task, ipAddress); |
| | | } |
| | |
| | | // - ä»»å¡ç¶æä¸º RobotPutFinish æä¸æ¯ RobotExecuting |
| | | else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished" || latestState.CurrentAction.IsNullOrEmpty()) |
| | | && (latestState.RobotArmObject.IsNullOrEmpty() || latestState.RobotArmObject == 0) |
| | | && (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode() || task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()) |
| | | && latestState.BatteryArrived) |
| | | && (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode() || task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode())) |
| | | { |
| | | _logger.LogInformation("ExecuteAsyncï¼æ»¡è¶³åè´§æ¡ä»¶ï¼å¼å§ä¸ååè´§ä»»å¡ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogger.Info($"ExecuteAsyncï¼æ»¡è¶³åè´§æ¡ä»¶ï¼å¼å§ä¸ååè´§ä»»å¡", latestState.RobotCrane?.DeviceName ?? ipAddress); |
| | | QuartzLogHelper.LogInfo(_logger, $"ExecuteAsyncï¼æ»¡è¶³åè´§æ¡ä»¶ï¼å¼å§ä¸ååè´§ä»»å¡ï¼ä»»å¡å·: {task.RobotTaskNum}", latestState.RobotCrane?.DeviceName ?? ipAddress); |
| | | // åéåè´§æä»¤ |
| | | await HandlePutFinishedStateAsync(task, ipAddress); |
| | | } |
| | |
| | | var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(Math.Min(4, remainingFake)); |
| | | if (positions.Count == 0) |
| | | { |
| | | _logger.LogError("HandlePickFinishedStateAsyncï¼æ å¯ç¨åçµè¯ç¹ä½ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePickFinishedStateAsyncï¼æ å¯ç¨åçµè¯ç¹ä½ï¼ä»»å¡å·: {task.RobotTaskNum}", state?.RobotCrane?.DeviceName ?? ipAddress); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | if (result) |
| | | { |
| | | _logger.LogInformation("HandlePickFinishedStateAsyncï¼ä¸åæ¾è´§æä»¤æåï¼æä»¤: {TaskString}ï¼ä»»å¡å·: {TaskNum}", taskString, task.RobotTaskNum); |
| | | QuartzLogger.Info($"ä¸åæ¾è´§æä»¤æåï¼æä»¤: {taskString}", task.RobotRoadway); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePickFinishedStateAsyncï¼ä¸åæ¾è´§æä»¤æåï¼æä»¤: {taskString}ï¼ä»»å¡å·: {task.RobotTaskNum}", state?.RobotCrane?.DeviceName ?? ipAddress); |
| | | |
| | | task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode(); |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("HandlePickFinishedStateAsyncï¼ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {TaskString}ï¼ä»»å¡å·: {TaskNum}", taskString, task.RobotTaskNum); |
| | | QuartzLogger.Error($"ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}", task.RobotRoadway); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePickFinishedStateAsyncï¼ä¸åæ¾è´§æä»¤å¤±è´¥ï¼æä»¤: {taskString}ï¼ä»»å¡å·: {task.RobotTaskNum}", state?.RobotCrane?.DeviceName ?? ipAddress); |
| | | } |
| | | } |
| | | |
| | |
| | | RobotSocketState? stateForUpdate = _stateManager.GetState(ipAddress); |
| | | if (stateForUpdate == null) |
| | | { |
| | | _logger.LogWarning("HandlePutFinishedStateAsyncï¼è·åç¶æå¤±è´¥ï¼IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Warn($"HandlePutFinishedStateAsyncï¼è·åç¶æå¤±è´¥ï¼IP: {ipAddress}", ipAddress); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼è·åç¶æå¤±è´¥ï¼IP: {ipAddress}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | return; |
| | | } |
| | | |
| | |
| | | { |
| | | if (stateForUpdate.CellBarcode.Contains(trayBarcode1) || stateForUpdate.CellBarcode.Contains(trayBarcode2)) |
| | | { |
| | | _logger.LogError("HandlePutFinishedStateAsyncï¼è¯»åçæçæ¡ç å·²åå¨ï¼å¯è½åå¨éå¤ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogger.Error($"读åçæçæ¡ç å·²åå¨ï¼å¯è½åå¨éå¤", stateForUpdate.RobotCrane.DeviceName); |
| | | |
| | | // æ¡ç éå¤ï¼è®°å½é误æ¥å¿å¹¶åæ¢åç»æä½(åç»æ¾è´§æ¶ä¼ç¨å°è¿äºæ¡ç ä¿¡æ¯ï¼ä¾åç»æ¾è´§æ¶ä½¿ç¨ï¼è°è¯åå¯è½ä¼åæ¶æ¤é»è¾) |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼è¯»åçæçæ¡ç å·²åå¨ï¼å¯è½åå¨éå¤ï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | |
| | | // åéåè´§æä»¤ æ è®°æ«ç NGï¼æ¾è´§æ¶ä¸ä½¿ç¨è¿äºæ¡ç ï¼å¹¶æ¾å
¥NGå£ |
| | | //await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | |
| | | } |
| | | else |
| | | { |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼è¯»åçæçæ¡ç å¯ä¸ï¼ç»§ç»æ§è¡ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogger.Info($"读åçæçæ¡ç å¯ä¸ï¼ç»§ç»æ§è¡", stateForUpdate.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼è¯»åçæçæ¡ç å¯ä¸ï¼ç»§ç»æ§è¡ï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | |
| | | // å°æ¡ç æ·»å å°ç¶æä¸ï¼ä¾åç»æ¾è´§æ¶ä½¿ç¨ |
| | | stateForUpdate.CellBarcode = new List<string>() |
| | |
| | | } |
| | | |
| | | // è®°å½æ¥å¿ï¼è¯»åæçæ¡ç æå |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç æå: {Barcode1}+{Barcode2}ï¼ä»»å¡å·: {TaskNum}", trayBarcode1, trayBarcode2, task.RobotTaskNum); |
| | | QuartzLogger.Info($"读åæçæ¡ç æå: {trayBarcode1}+{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç æå: ã{trayBarcode1}ã-----ã{trayBarcode2}ãï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | |
| | | // åéåè´§æä»¤ |
| | | await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate); |
| | |
| | | else |
| | | { |
| | | // æ¡ç 读å失败ï¼è®°å½é误æ¥å¿ |
| | | _logger.LogError("HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç 失败ï¼ä»»å¡å·: {TaskNum}ï¼ä¸å·ä½: {trayBarcode1}ï¼äºå·ä½: {trayBarcode2}", task.RobotTaskNum,trayBarcode1,trayBarcode2); |
| | | QuartzLogger.Error($"读åæçæ¡ç 失败,ä¸å·ä½ï¼{trayBarcode1},äºå·ä½ï¼{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç 失败ï¼ã{trayBarcode1}ã-----ã{trayBarcode2}ãï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | |
| | | // åéåè´§æä»¤ æ è®°æ«ç NGï¼æ¾è´§æ¶ä¸ä½¿ç¨è¿äºæ¡ç ï¼å¹¶æ¾å
¥NGå£ |
| | | //await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | |
| | | { |
| | | stateForUpdate.ChangePalletPhase = 1; |
| | | stateForUpdate.CurrentBatchIndex = 1; |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼æ¢çä»»å¡è¿å
¥æ¹æ¬¡æ¨¡å¼ï¼ä»»å¡å·: {TaskNum}ï¼æµå: {Flow}", |
| | | task.RobotTaskNum, isFlowA ? "A" : "B"); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼æ¢çä»»å¡è¿å
¥æ¹æ¬¡æ¨¡å¼ï¼ä»»å¡å·: {{TaskNum}}ï¼æµå: {(isFlowA ? "A" : "B")}ï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate); |
| | | } |
| | | |
| | |
| | | // æ£å¸¸çµè¯åå®ï¼åæ¢å° Phase 3 ååçµè¯ |
| | | stateForUpdate.ChangePalletPhase = 3; |
| | | stateForUpdate.CurrentBatchIndex = 1; // åçµè¯æ¹æ¬¡ä»å¤´å¼å§ |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼æ£å¸¸çµè¯åå®ï¼åæ¢å°Phase 3ååçµè¯ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼æ£å¸¸çµè¯åå®ï¼åæ¢å°Phase 3ååçµè¯ï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate); |
| | | return; |
| | | } |
| | |
| | | { |
| | | // åçµè¯å
¨é¨å¤çå®ï¼åæ¢å° Phase 5 çå¾
å
¥åº |
| | | stateForUpdate.ChangePalletPhase = 5; |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼åçµè¯å¤ç宿¯ï¼åæ¢å°Phase 5çå¾
å
¥åºï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼åçµè¯å¤ç宿¯ï¼åæ¢å°Phase 5çå¾
å
¥åºï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate); |
| | | return; |
| | | } |
| | |
| | | var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(Math.Min(4, remainingFake)); |
| | | if (positions.Count == 0) |
| | | { |
| | | _logger.LogError("HandlePutFinishedStateAsyncï¼æ å¯ç¨åçµè¯ç¹ä½ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"HandlePutFinishedStateAsyncï¼æ å¯ç¨åçµè¯ç¹ä½ï¼ä»»å¡å·: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress); |
| | | return; |
| | | } |
| | | await _taskProcessor.SendSocketRobotFakeBatteryPickAsync(task, stateForUpdate, positions); |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); |
| | | if (!flag || value is not CommonStackerCrane commonStackerCrane) |
| | | { |
| | | _logger.Information("Executeï¼åæ°æ æï¼æªæ¾å° JobParams æç±»åä¸å¹é
"); |
| | | // åæ°æ æï¼ç´æ¥è¿å |
| | | QuartzLogHelper.LogWarn(_logger, "Executeï¼åæ°æ æ", "Executeï¼åæ°æ æ", "CommonStackerCraneJob"); |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼åæ°æ æ", "CommonStackerCraneJob"); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | if (stackerCraneTaskCommand == null) |
| | | { |
| | | // å½ä»¤æå»ºå¤±è´¥ |
| | | QuartzLogHelper.LogWarn(_logger, "Executeï¼å½ä»¤æå»ºå¤±è´¥ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤æå»ºå¤±è´¥ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"Executeï¼å½ä»¤æå»ºå¤±è´¥ï¼è®¾å¤: {_deviceCode}ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | commonStackerCrane.LastTaskType = task.TaskType; |
| | | _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼å½ä»¤åéæåï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤åéæåï¼ä»»å¡å·: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"Executeï¼å½ä»¤åéæåï¼è®¾å¤: {_deviceCode}ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | } |
| | | else |
| | | { |
| | | QuartzLogHelper.LogError(_logger, "Executeï¼å½ä»¤åé失败ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤åé失败", _deviceCode, _deviceCode, task.TaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"Executeï¼å½ä»¤åé失败ï¼è®¾å¤: {_deviceCode}ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½å¼å¸¸ |
| | | QuartzLogHelper.LogError(_logger, ex, "Executeï¼æ§è¡å¼å¸¸ï¼è®¾å¤: {DeviceCode}", $"æ§è¡å¼å¸¸: {ex.Message}", _deviceCode, _deviceCode); |
| | | QuartzLogHelper.LogError(_logger, ex, $"Executeï¼æ§è¡å¼å¸¸ï¼è®¾å¤: {_deviceCode}", $"æ§è¡å¼å¸¸: {ex.Message}", _deviceCode, _deviceCode); |
| | | } |
| | | finally |
| | | { |
| | |
| | | if (stackerCrane != null) |
| | | { |
| | | // è®°å½æ¥å¿ |
| | | QuartzLogHelper.LogInfo(_logger, "CommonStackerCrane_StackerCraneTaskCompletedEventHandlerï¼ä»»å¡å®æï¼ä»»å¡å·: {TaskNum}", $"ä»»å¡å®æï¼ä»»å¡å·: {e.TaskNum}", stackerCrane.DeviceCode, e.TaskNum); |
| | | QuartzLogHelper.LogInfo(_logger, $"CommonStackerCrane_StackerCraneTaskCompletedEventHandlerï¼ä»»å¡å®æï¼ä»»å¡å·: {e.TaskNum}", stackerCrane.DeviceCode); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æä¸ºå®æ |
| | | if (_taskService.StackCraneTaskCompleted(e.TaskNum).Status) |