feat: 更新机器人任务处理逻辑和接口配置
fix(机器人任务): 修复PLC字符串解析异常处理
feat(任务处理): 添加手动创建机器人任务功能
refactor(任务模型): 优化字段描述和命名
fix(HTTP配置): 修正开发和生产环境API地址
perf(任务流程): 优化组盘和拆盘任务处理逻辑
style(代码): 清理无用注释和代码
docs(接口文档): 添加MES系统对接接口文档
| | |
| | | { |
| | | "tool_name": "Read", |
| | | "tool_input_preview": "{\"file_path\":\"D:\\\\Git\\\\ShanMeiXinNengYuan\\\\Code\\\\WMS\\\\WIDESEA_WMSServer\\\\WIDESEA_TaskInfoService\\\\WCS\\\\TaskService.cs\"}", |
| | | "error": "File does not exist. Note: your current working directory is D:\\Git\\ShanMeiXinNengYuan\\Code.", |
| | | "timestamp": "2026-04-18T07:45:29.125Z", |
| | | "tool_name": "Bash", |
| | | "tool_input_preview": "{\"command\":\"cd D:\\\\Git\\\\ShanMeiXinNengYuan\\\\Code\\\\WCS\\\\WIDESEAWCS_Client && npm run build 2>&1 | head -30\",\"timeout\":120000}", |
| | | "error": "Exit code 1\n/usr/bin/bash: line 1: cd: D:GitShanMeiXinNengYuanCodeWCSWIDESEAWCS_Client: No such file or directory", |
| | | "timestamp": "2026-04-19T07:15:17.022Z", |
| | | "retry_count": 1 |
| | | } |
| | |
| | | "total_spawned": 83, |
| | | "total_completed": 83, |
| | | "total_failed": 0, |
| | | "last_updated": "2026-04-18T14:04:59.113Z" |
| | | "last_updated": "2026-04-18T14:41:25.052Z" |
| | | } |
| | |
| | | ] |
| | | } |
| | | }, |
| | | "hotPaths": [], |
| | | "hotPaths": [ |
| | | { |
| | | "path": "src\\views\\system\\Sys_User.vue", |
| | | "accessCount": 1, |
| | | "lastAccessed": 1776583114779, |
| | | "type": "file" |
| | | }, |
| | | { |
| | | "path": "src\\views\\taskinfo\\robotTask.vue", |
| | | "accessCount": 1, |
| | | "lastAccessed": 1776583136953, |
| | | "type": "file" |
| | | } |
| | | ], |
| | | "userDirectives": [] |
| | | } |
| | |
| | | axios.defaults.baseURL = 'http://127.0.0.1:9292/'; |
| | | } |
| | | else if (process.env.NODE_ENV == 'debug') { |
| | | axios.defaults.baseURL = 'http://127.0.0.1:8098/'; |
| | | axios.defaults.baseURL = 'http://127.0.0.1:9292/'; |
| | | } |
| | | |
| | | else if (process.env.NODE_ENV == 'production') { |
| | | axios.defaults.baseURL = 'http://115.159.85.185:9292/'; |
| | | axios.defaults.baseURL = 'http://192.168.60.30:9292/'; |
| | | } |
| | | if (!axios.defaults.baseURL.endsWith('/')) { |
| | | axios.defaults.baseURL+="/"; |
| | |
| | | sortName: "createDate", // é»è®¤æåºå段 |
| | | }); |
| | | |
| | | // ç¼è¾è¡¨ååæ®µï¼åå§ä¸ºç©ºï¼æ ¹æ®å®é
ç¼è¾éæ±é
ç½®ï¼ |
| | | const editFormFields = ref({}); |
| | | const editFormOptions = ref([]); |
| | | // ç¼è¾è¡¨ååæ®µ |
| | | const editFormFields = ref({ |
| | | robotTaskNum: "", |
| | | robotRoadway: "", |
| | | robotTaskType: "", |
| | | robotTaskState: "", |
| | | robotTaskTotalNum: "", |
| | | robotSourceAddress: "", |
| | | robotTargetAddress: "", |
| | | robotSourceAddressLineCode: "", |
| | | robotTargetAddressLineCode: "", |
| | | robotSourceAddressPalletCode: "", |
| | | robotTargetAddressPalletCode: "", |
| | | robotGrade: 2, |
| | | }); |
| | | |
| | | // ç¼è¾è¡¨åé
ç½® |
| | | const editFormOptions = ref([ |
| | | [ |
| | | { title: "ä»»å¡ç¼å·", field: "robotTaskNum", type: "int", required: true }, |
| | | { title: "å··é", field: "robotRoadway", type: "string", required: true }, |
| | | { title: "任塿»æ°", field: "robotTaskTotalNum", type: "int", required: true }, |
| | | { |
| | | title: "ä¼å
级", |
| | | field: "robotGrade", |
| | | type: "select", |
| | | data: [ |
| | | { key: 1, value: "ä½" }, |
| | | { key: 2, value: "æ®é" }, |
| | | { key: 3, value: "é«" }, |
| | | { key: 4, value: "ç´§æ¥" }, |
| | | ], |
| | | }, |
| | | ], |
| | | [ |
| | | { |
| | | title: "ä»»å¡ç±»å", |
| | | field: "robotTaskType", |
| | | type: "select", |
| | | dataKey: "taskType", |
| | | data: [], |
| | | required: true, |
| | | }, |
| | | { |
| | | title: "ä»»å¡ç¶æ", |
| | | field: "robotTaskState", |
| | | type: "select", |
| | | dataKey: "taskState", |
| | | data: [], |
| | | required: true, |
| | | }, |
| | | { title: "æ¥æºå°å", field: "robotSourceAddress", type: "string", required: true }, |
| | | { title: "ç®æ å°å", field: "robotTargetAddress", type: "string", required: true }, |
| | | ], |
| | | [ |
| | | { title: "æ¥æºçº¿ä»£ç ", field: "robotSourceAddressLineCode", type: "string" }, |
| | | { title: "ç®æ 线代ç ", field: "robotTargetAddressLineCode", type: "string" }, |
| | | { title: "æ¥æºæç代ç ", field: "robotSourceAddressPalletCode", type: "string" }, |
| | | { title: "ç®æ æç代ç ", field: "robotTargetAddressPalletCode", type: "string" }, |
| | | ], |
| | | ]); |
| | | |
| | | // æç´¢è¡¨ååæ®µ |
| | | const searchFormFields = ref({ |
| | |
| | | public string RobotTargetAddress { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººæ¥æºå°å线代ç |
| | | /// æºå¨äººæ¥æºå°åè¾é线ç¼å· |
| | | /// </summary> |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººæ¥æºå°å线代ç ")] |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººæ¥æºå°åè¾é线ç¼å·")] |
| | | public string RobotSourceAddressLineCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººç®æ å°å线代ç |
| | | /// æºå¨äººç®æ å°åè¾é线ç¼å· |
| | | /// </summary> |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººç®æ å°å线代ç ")] |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººç®æ å°åè¾é线ç¼å·")] |
| | | public string RobotTargetAddressLineCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººæ¥æºå°å线æç代ç |
| | | /// æºå¨äººæ¥æºå°åè¾é线æçå· |
| | | /// </summary> |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººæ¥æºå°å线æç代ç ")] |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººæ¥æºå°åè¾é线æçå·")] |
| | | public string RobotSourceAddressPalletCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººç®æ å°å线æç代ç |
| | | /// æºå¨äººç®æ å°å线æçå· |
| | | /// </summary> |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººç®æ å°å线æç代ç ")] |
| | | [SugarColumn(Length = 20, ColumnDescription = "æºå¨äººç®æ å°å线æçå·")] |
| | | public string RobotTargetAddressPalletCode { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | //throw new Exception($"读åPLCå符串å®ä¹é¿åº¦ã{Content[index]}ãä¸å¯¹è±¡ã{GetType().Name}ã屿§ã{propertyInfo.Name}ãç¹æ§å®ä¹å符串é¿åº¦ã{dataLength}ãä¸ä¸è´"); |
| | | //QuartzLogger.Debug($"读åPLCå符串å®ä¹é¿åº¦ã{Content[index]}ãä¸å¯¹è±¡ã{GetType().Name}ã屿§ã{propertyInfo.Name}ãç¹æ§å®ä¹å符串é¿åº¦ã{dataLength}ãä¸ä¸è´"); |
| | | |
| | | try |
| | | { |
| | | propertyInfo.SetValue(this, Encoding.Default.GetString(Content, index + 2, Content[index + 1] > 0 ? Content[index + 1] : dataLength - 2).Trim().Replace("\0", "").Replace("\\u000", "").Trim()); |
| | | } |
| | | catch |
| | | { |
| | | propertyInfo.SetValue(this, Encoding.Default.GetString(Content, index, dataLength).Trim().Replace("\0", "").Replace("\\u000","").Trim()); |
| | | } |
| | | index += dataLength; |
| | | break; |
| | | } |
| | |
| | | |
| | | public Task StartAsync(CancellationToken cancellationToken) |
| | | { |
| | | const string cacheKey = $"{RedisPrefix.Code}"; |
| | | //const string cacheKey = $"{RedisPrefix.Code}"; |
| | | |
| | | _cache.RemoveByPrefix($"{cacheKey}"); |
| | | //_cache.RemoveByPrefix($"{cacheKey}"); |
| | | |
| | | |
| | | |
| | |
| | | --> |
| | | <Project> |
| | | <PropertyGroup> |
| | | <DeleteExistingFiles>false</DeleteExistingFiles> |
| | | <DeleteExistingFiles>true</DeleteExistingFiles> |
| | | <ExcludeApp_Data>false</ExcludeApp_Data> |
| | | <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish> |
| | | <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> |
| | | <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration> |
| | | <LastUsedPlatform>Any CPU</LastUsedPlatform> |
| | | <PublishProvider>FileSystem</PublishProvider> |
| | | <PublishUrl>bin\Release\net6.0\publish\</PublishUrl> |
| | | <PublishUrl>bin\Debug\net6.0\publish\</PublishUrl> |
| | | <WebPublishMethod>FileSystem</WebPublishMethod> |
| | | <_TargetId>Folder</_TargetId> |
| | | <SiteUrlToLaunchAfterPublish /> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ProjectGuid>487fa45b-ea1a-4aca-bb5b-0f6708f462c0</ProjectGuid> |
| | | <SelfContained>false</SelfContained> |
| | | </PropertyGroup> |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "version": 1, |
| | | "isRoot": true, |
| | | "tools": {} |
| | | } |
| | |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.Utilities; |
| | | using WIDESEAWCS_DTO.Stock; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | |
| | | return stock; |
| | | } |
| | | |
| | | public override WebResponseContent AddData(SaveModel saveModel) |
| | | { |
| | | try |
| | | { |
| | | if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error("ä¼ åé误,åæ°ä¸è½ä¸ºç©º"); |
| | | } |
| | | |
| | | string validResult = typeof(Dt_RobotTask).ValidateDicInEntity(saveModel.MainData, true, TProperties); |
| | | if (!string.IsNullOrEmpty(validResult)) |
| | | { |
| | | return WebResponseContent.Instance.Error(validResult); |
| | | } |
| | | |
| | | object? taskNumObj = saveModel.MainData[nameof(Dt_RobotTask.RobotTaskNum)]; |
| | | if (taskNumObj != null) |
| | | { |
| | | int taskNum = Convert.ToInt32(taskNumObj); |
| | | if (BaseDal.QueryFirst(x => x.RobotTaskNum == taskNum) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ä»»å¡ç¼å· {taskNum} å·²åå¨"); |
| | | } |
| | | } |
| | | |
| | | Dt_RobotTask entity = saveModel.MainData.DicToModel<Dt_RobotTask>(); |
| | | entity.Creater = "æå¨å建"; |
| | | entity.CreateDate = DateTime.Now; |
| | | |
| | | if (saveModel.DetailData == null || saveModel.DetailData.Count == 0) |
| | | { |
| | | BaseDal.AddData(entity); |
| | | return WebResponseContent.Instance.OK("æ°å¢æå", entity); |
| | | } |
| | | |
| | | return base.AddData(saveModel); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ°å¢å¤±è´¥,é误信æ¯:{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®ç®æ å°åæã精确 > åéå¼ãè§£æè§åå¼ã |
| | | /// </summary> |
| | |
| | | using MapsterMapper; |
| | | using Masuit.Tools; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | |
| | | /// ä»»å¡æå¡ |
| | | /// </summary> |
| | | private readonly ITaskService _taskService; |
| | | |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººä»»å¡æå¡ |
| | | /// </summary> |
| | | private readonly IRobotTaskService _robotTaskService; |
| | | |
| | | /// <summary> |
| | | /// 任塿§è¡æç»æå¡ |
| | |
| | | /// <param name="mapper">对象æ å°å¨</param> |
| | | /// <param name="httpClientHelper">HTTP 客æ·ç«¯å¸®å©ç±»</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper, ILogger<CommonConveyorLineNewJob> logger) |
| | | public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper, ILogger<CommonConveyorLineNewJob> logger, IRobotTaskService robotTaskService) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | |
| | | _mapper = mapper; |
| | | _httpClientHelper = httpClientHelper; |
| | | _logger = logger; |
| | | _robotTaskService = robotTaskService; |
| | | |
| | | // åå§åè°åº¦å¤çå¨ |
| | | _conveyorLineDispatch = new ConveyorLineDispatchHandler(_taskService, _taskExecuteDetailService, _routerService, _mapper, _logger); |
| | |
| | | ProcessTaskState(conveyorLine, command, task, childDeviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | else if (command.TaskNo == 1 && !command.Barcode.IsNullOrEmpty() && childDeviceCode == "11068") |
| | | { |
| | | if (_robotTaskService.Db.Queryable<Dt_RobotTask>().Any(x => x.RobotTargetAddressPalletCode == command.Barcode)) |
| | | { |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | Random rnd = new Random(); |
| | | int num = rnd.StrictNext();//产ççéæºæ° |
| | | // 没æä»»å¡å·ä½ææ¡ç å¹¶ä¸å¨11068ä½ç½®ï¼ç´æ¥æ·»å æºæ¢°æç»çä»»å¡ |
| | | Dt_RobotTask robotTask = new Dt_RobotTask |
| | | { |
| | | RobotTargetAddressPalletCode = command.Barcode, |
| | | RobotSourceAddress = "1", |
| | | RobotTargetAddress = "2", // æºæ¢°æç®æ å°å |
| | | RobotTaskType = (int)RobotTaskTypeEnum.GroupPallet, // ç»çä»»å¡ |
| | | RobotTaskState = (int)TaskRobotStatusEnum.RobotNew, // å¾
æ§è¡ |
| | | RobotTaskTotalNum = 48, |
| | | RobotGrade = 1, |
| | | RobotRoadway = "注液ç»çæºæ¢°æ", |
| | | RobotTargetAddressLineCode = childDeviceCode, |
| | | RobotTaskNum = num, // çæä»»å¡å· |
| | | RobotDispatchertime = DateTime.Now, |
| | | |
| | | }; |
| | | if (_robotTaskService.AddData(robotTask).Status) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception innerEx) |
| | |
| | | // 妿ç¼åä¸ä¸åå¨æç¶æä¸º nullï¼å¿½ç¥æ¤æ¶æ¯ |
| | | if (!_cache.TryGetValue(cacheKey, out RobotSocketState? cachedState) || cachedState == null) |
| | | { |
| | | _logger.LogInformation($"ç¼åä¸ä¸åå¨æç¶æä¸º nullï¼å¿½ç¥æ¤æ¶æ¯"); |
| | | return null; |
| | | } |
| | | |
| | |
| | | { |
| | | // å¤çæååï¼å°åæ¶æ¯ååå°å®¢æ·ç«¯ï¼ä¿æåæè¡ä¸ºï¼ |
| | | await _socketClientGateway.SendMessageAsync(client, message); |
| | | _logger.LogInformation($"åéæ¶æ¯ã{message}ã"); |
| | | QuartzLogger.Info($"åéæ¶æ¯ï¼ã{message}ã", state.RobotCrane.DeviceName); |
| | | |
| | | // å®å
¨æ´æ°ç¶æå° Redis |
| | |
| | | /// <param name="state">æºå¨äººå½åç¶æ</param> |
| | | /// <param name="useSourceAddress">æ¯å¦ä½¿ç¨æºå°åï¼true 表示æç/æ¢çåºæ¯ï¼false 表示ç»ç/æ¢çåºæ¯ï¼</param> |
| | | /// <returns>å¤çæ¯å¦æå</returns> |
| | | public async Task<bool> HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress) |
| | | public async Task<bool> HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress, string isRoadway = null) |
| | | { |
| | | // è·åå½åå
³èçä»»å¡ |
| | | var currentTask = state.CurrentTask; |
| | |
| | | } |
| | | |
| | | // è·åå··é代ç |
| | | string roadway = currentTask.RobotSourceAddressLineCode; |
| | | string roadway = string.Empty; |
| | | |
| | | // æ ¹æ®å··éåç§°å¤æä»åº ID |
| | | // ZYRB1 -> 1, HPRB001 -> 2, å
¶ä» -> 3 |
| | | int warehouseId = currentTask.RobotRoadway == "注液ç»çæºæ¢°æ" ? 1 : currentTask.RobotRoadway == "HPRB001" ? 2 : 3; |
| | | |
| | | // ä»»å¡ç±»åï¼0 表示æªå®ä¹ï¼ç¨åæ ¹æ®ä»»å¡ç±»åè®¾ç½®ï¼ |
| | | int taskType = 0; |
| | | int warehouseId = 0; |
| | | |
| | | // æºå°ååç®æ å°åï¼åå§åï¼ |
| | | string SourceAddress = currentTask.RobotTargetAddressLineCode; |
| | | string TargetAddress = currentTask.RobotSourceAddressLineCode; |
| | | |
| | | // ä»»å¡ç±»åï¼0 表示æªå®ä¹ï¼ç¨åæ ¹æ®ä»»å¡ç±»åè®¾ç½®ï¼ |
| | | int taskType = 0; |
| | | |
| | | // æç代ç ï¼åå§åä¸ºç©ºï¼ |
| | | string PalletCode = string.Empty; |
| | |
| | | switch (robotTaskType) |
| | | { |
| | | case RobotTaskTypeEnum.GroupPallet: |
| | | // ç»çä»»å¡ä¸ä½¿ç¨æºå°åï¼ç´æ¥è¿å false |
| | | _logger.LogDebug("HandleInboundTaskAsyncï¼ç»çä»»å¡ä¸ä½¿ç¨æºå°å"); |
| | | QuartzLogger.Debug($"HandleInboundTaskAsyncï¼ç»çä»»å¡ä¸ä½¿ç¨æºå°å", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | break; |
| | | |
| | | case RobotTaskTypeEnum.ChangePallet: |
| | | // æ¢ç/æçåºæ¯ï¼æçéè¦å
¥åº |
| | | taskType = TaskTypeEnum.InEmpty.GetHashCode(); // 空æçå
¥åº |
| | | PalletCode = currentTask.RobotSourceAddressPalletCode; // ä½¿ç¨æºå°åçæçç |
| | | if (isRoadway == "HWSC1") |
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | } |
| | | |
| | | break; |
| | | case RobotTaskTypeEnum.SplitPallet: |
| | | // æ¢ç/æçåºæ¯ï¼æçéè¦å
¥åº |
| | | taskType = TaskTypeEnum.InEmpty.GetHashCode(); // 空æçå
¥åº |
| | | PalletCode = currentTask.RobotSourceAddressPalletCode; // ä½¿ç¨æºå°åçæçç |
| | | |
| | | warehouseId = 3; |
| | | roadway = "CWSC1"; |
| | | break; |
| | | } |
| | | } |
| | |
| | | switch (robotTaskType) |
| | | { |
| | | case RobotTaskTypeEnum.ChangePallet: |
| | | // æ¢ç/ç»çåºæ¯ï¼è´§ç©éè¦å
¥åº |
| | | taskType = TaskTypeEnum.Inbound.GetHashCode(); // æåå
¥åº |
| | | PalletCode = currentTask.RobotTargetAddressPalletCode; // 使ç¨ç®æ å°åçæçç |
| | | |
| | | if (isRoadway == "HWSC1") |
| | | { |
| | | warehouseId = 2; |
| | | roadway = "HWSC1"; |
| | | } |
| | | else if (isRoadway == "GWSC1") |
| | | { |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | } |
| | | |
| | | break; |
| | | case RobotTaskTypeEnum.GroupPallet: |
| | | // æ¢ç/ç»çåºæ¯ï¼è´§ç©éè¦å
¥åº |
| | | taskType = TaskTypeEnum.Inbound.GetHashCode(); // æåå
¥åº |
| | | PalletCode = currentTask.RobotTargetAddressPalletCode; // 使ç¨ç®æ å°åçæçç |
| | | |
| | | warehouseId = 1; |
| | | roadway = "GWSC1"; |
| | | break; |
| | | |
| | | case RobotTaskTypeEnum.SplitPallet: |
| | | // æçä»»å¡ä¸ä½¿ç¨ç®æ å°å |
| | | _logger.LogDebug("HandleInboundTaskAsyncï¼æçä»»å¡ä¸ä½¿ç¨ç®æ å°å"); |
| | | QuartzLogger.Debug($"HandleInboundTaskAsyncï¼æçä»»å¡ä¸ä½¿ç¨ç®æ å°å", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return true; |
| | | |
| | | break; |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | PalletCode = PalletCode, // æçæ¡ç |
| | | SourceAddress = SourceAddress ?? string.Empty, // æºå°å |
| | | TargetAddress = TargetAddress ?? string.Empty, // ç®æ å°å |
| | | Roadway = roadway, // å··é |
| | | TargetAddress = roadway ?? string.Empty, // ç®æ å°å |
| | | Roadway = roadway ?? string.Empty, // å··é |
| | | WarehouseId = warehouseId, // ä»åº ID |
| | | PalletType = 1, // æçç±»åï¼é»è®¤ä¸º1ï¼ |
| | | TaskType = taskType // ä»»å¡ç±»åï¼å
¥åº/空æçå
¥åºï¼ |
| | |
| | | using System.Net.Sockets; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | |
| | | if (state.ChangePalletPhase == 5) |
| | | { |
| | | // FlowB æç»é¶æ®µï¼åçµè¯åå®ï¼æºç©ºæçååº HCSC1 |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true, isRoadway: "HCSC1")) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | { |
| | | // FlowA ä¸é´é¶æ®µï¼æ£å¸¸çµè¯åå®ï¼æºç©ºæçååº GWSC1 |
| | | // ä¸å é¤ä»»å¡ï¼ä¸éç½®ç¶æï¼ç»§ç» Phase 3-4 åçµè¯æµç¨ |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true, isRoadway: "GWSC1")) |
| | | { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | List<string> str = new List<string>() { "11001", "11010" }; |
| | | // Phase == 0: éæ¹æ¬¡æ¨¡å¼ï¼ç®æ æ»æ°==48ï¼ |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true, isRoadway: str.Contains(currentTask.RobotSourceAddressLineCode) ? "GWSC1" : "HCSC1")) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | if (state.ChangePalletPhase == 5) |
| | | { |
| | | // FlowA æç»é¶æ®µï¼åçµè¯æ¾å®ï¼ç®æ æç满48å
¥åº HCSC1 |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false, isRoadway: "HCSC1")) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | { |
| | | // FlowB ä¸é´é¶æ®µï¼æ£å¸¸çµè¯æ¾å®ï¼æè´§æçç»çå
¥åº GWSC1 |
| | | // ä¸å é¤ä»»å¡ï¼ä¸éç½®ç¶æï¼ç»§ç» Phase 3-4 åçµè¯æµç¨ |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false, isRoadway: "GWSC1")) |
| | | { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | List<string> str = new List<string>() { "11001", "11010" }; |
| | | // Phase == 0: éæ¹æ¬¡æ¨¡å¼ï¼ç®æ æ»æ°==48ï¼ |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false)) |
| | | if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false, str.Contains(currentTask.RobotTargetAddressLineCode) ? "GWSC1" : "HCSC1")) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | // æ¡ç éå¤ï¼è®°å½é误æ¥å¿å¹¶åæ¢åç»æä½(åç»æ¾è´§æ¶ä¼ç¨å°è¿äºæ¡ç ä¿¡æ¯ï¼ä¾åç»æ¾è´§æ¶ä½¿ç¨ï¼è°è¯åå¯è½ä¼åæ¶æ¤é»è¾) |
| | | |
| | | // åéåè´§æä»¤ æ è®°æ«ç NGï¼æ¾è´§æ¶ä¸ä½¿ç¨è¿äºæ¡ç ï¼å¹¶æ¾å
¥NGå£ |
| | | await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | | //await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | | return; |
| | | } |
| | | else |
| | |
| | | }; |
| | | } |
| | | |
| | | |
| | | // è®°å½æ¥å¿ï¼è¯»åæçæ¡ç æå |
| | | _logger.LogInformation("HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç æå: {Barcode1}+{Barcode2}ï¼ä»»å¡å·: {TaskNum}", trayBarcode1, trayBarcode2, task.RobotTaskNum); |
| | | QuartzLogger.Info($"读åæçæ¡ç æå: {trayBarcode1}+{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName); |
| | |
| | | else |
| | | { |
| | | // æ¡ç 读å失败ï¼è®°å½é误æ¥å¿ |
| | | _logger.LogError("HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç 失败ï¼ä»»å¡å·: {TaskNum}", task.RobotTaskNum); |
| | | QuartzLogger.Error($"读åæçæ¡ç 失败", stateForUpdate.RobotCrane.DeviceName); |
| | | _logger.LogError("HandlePutFinishedStateAsyncï¼è¯»åæçæ¡ç 失败ï¼ä»»å¡å·: {TaskNum}ï¼ä¸å·ä½: {trayBarcode1}ï¼äºå·ä½: {trayBarcode2}", task.RobotTaskNum,trayBarcode1,trayBarcode2); |
| | | QuartzLogger.Error($"读åæçæ¡ç 失败,ä¸å·ä½ï¼{trayBarcode1},äºå·ä½ï¼{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName); |
| | | |
| | | |
| | | // åéåè´§æä»¤ æ è®°æ«ç NGï¼æ¾è´§æ¶ä¸ä½¿ç¨è¿äºæ¡ç ï¼å¹¶æ¾å
¥NGå£ |
| | | await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | | //await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true); |
| | | return; |
| | | } |
| | | } |
| | |
| | | <WebPublishMethod>FileSystem</WebPublishMethod> |
| | | <_TargetId>Folder</_TargetId> |
| | | <SiteUrlToLaunchAfterPublish /> |
| | | <TargetFramework>net6.0</TargetFramework> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ProjectGuid>d81a65b5-47d1-40c1-8fde-7d24ff003f51</ProjectGuid> |
| | | <SelfContained>false</SelfContained> |
| | | </PropertyGroup> |