| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 在本地直接创建机械手任务,不调用WMS接口。 |
| | | /// 根据目标地址解析任务类型,构建任务数据并写入数据库。 |
| | | /// </summary> |
| | | /// <param name="task">出库任务实体</param> |
| | | /// <returns>操作结果</returns> |
| | | public WebResponseContent CreateLocalRobotTask(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new(); |
| | | try |
| | | { |
| | | // 根据目标地址解析任务类型配置键 |
| | | string configKey = ResolveRobotTaskConfigKey(task.TargetAddress); |
| | | |
| | | // 构建Stock数据 |
| | | StockDTO stock = BuildRobotTaskStock(task, configKey); |
| | | |
| | | // 获取抓取和放置地址的线体配置(如果有) |
| | | var section = App.Configuration.GetSection("RobotTaskAddressRules").GetSection(stock?.TargetLineNo ?? string.Empty).GetChildren().Select(c => c.Value).ToArray(); |
| | | if (section.Length < 2) |
| | | return WebResponseContent.Instance.Error($"未找到线体[{stock?.TargetLineNo}]的地址配置"); |
| | | |
| | | // 创建本地机器人任务 |
| | | Dt_RobotTask robotTask = new() |
| | | { |
| | | RobotTaskNum = Random.Shared.Next(), |
| | | RobotSourceAddress = section[0]!, |
| | | RobotTargetAddress = section[1]!, |
| | | RobotSourceAddressLineCode = stock?.SourceLineNo ?? string.Empty, |
| | | RobotTargetAddressLineCode = stock?.TargetLineNo ?? string.Empty, |
| | | RobotRoadway = stock?.Roadway ?? string.Empty, |
| | | RobotSourceAddressPalletCode = stock?.SourcePalletNo ?? string.Empty, |
| | | RobotTargetAddressPalletCode = stock?.TargetPalletNo ?? string.Empty, |
| | | RobotTaskType = MapConfigKeyToRobotTaskType(configKey), |
| | | RobotTaskState = (int)TaskRobotStatusEnum.RobotNew, |
| | | RobotGrade = task.Grade, |
| | | Creater = "WCS_Local", |
| | | RobotTaskTotalNum = 1, |
| | | CreateDate = DateTime.Now |
| | | }; |
| | | |
| | | BaseDal.AddData(robotTask); |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int> { robotTask.RobotTaskNum }, "本地创建机器人任务"); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"本地创建机器人任务成功,任务号:【{robotTask.RobotTaskNum}】,源地址:【{robotTask.RobotSourceAddress}】,目标地址:【{robotTask.RobotTargetAddress}】,任务类型:【{configKey}】", "RobotTaskService"); |
| | | |
| | | content = WebResponseContent.Instance.OK("本地创建机器人任务成功", robotTask); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"本地创建机器人任务失败,任务号:【{task.TaskNum}】,错误信息:{ex.Message}", "RobotTaskService"); |
| | | content = WebResponseContent.Instance.Error($"本地创建机器人任务失败,错误信息:{ex.Message}"); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 将配置键映射到机械手任务类型枚举值。 |
| | | /// </summary> |
| | | /// <param name="configKey">配置键名称</param> |
| | | /// <returns>任务类型枚举值</returns> |
| | | public int MapConfigKeyToRobotTaskType(string? configKey) |
| | | { |
| | | return configKey switch |
| | | { |
| | | nameof(ConfigKey.CreateRobotGroupPalletTask) => (int)RobotTaskTypeEnum.GroupPallet, |
| | | nameof(ConfigKey.CreateRobotSplitPalletTask) => (int)RobotTaskTypeEnum.SplitPallet, |
| | | _ => (int)RobotTaskTypeEnum.ChangePallet |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据输送线目标地址解析机械手任务接口。 |
| | | /// 规则: |
| | | /// 1. 从配置读取精确地址映射(AddressMap) |