wanshenmean
21 小时以前 84caf6b9b5fc521b90c88fd0662df9bd8a62d69b
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
@@ -157,6 +157,78 @@
        }
        /// <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)