1
xiazhengtongxue
3 天以前 0b201eb98881f4381893c9765b530fa5d19e41ea
1
已修改2个文件
51 ■■■■■ 文件已修改
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -714,7 +714,56 @@
                    .ToList()
            };
        }
        /// <summary>
        /// 构建库存回传 DTO
        /// </summary>
        /// <remarks>
        /// 用于拆盘和组盘操作时,向 WMS 回传库存信息。
        /// DTO 包含源货位、目标货位、托盘码以及每个位置的电池条码。
        /// </remarks>
        /// <param name="state">机器人当前状态</param>
        /// <param name="positions">电池位置数组</param>
        /// <returns>构建好的库存 DTO</returns>
        public static StockDTO BuildStockDTO1(RobotSocketState state, int[] positions)
        {
            return new StockDTO
            {
                // 源输送线编号
                SourceLineNo = state.CurrentTask.RobotSourceAddressLineCode,
                // 源托盘号
                SourcePalletNo = state.CurrentTask.RobotSourceAddressPalletCode,
                // 目标托盘号
                TargetPalletNo = state.CurrentTask.RobotTargetAddressPalletCode,
                // 目标输送线编号
                TargetLineNo = state.CurrentTask.RobotTargetAddressLineCode,
                // 巷道编号(机器人名称)
                Roadway = state.CurrentTask.RobotRoadway,
                // 电池位置详情列表
                // 过滤掉位置为 0 或负数的无效数据
                // 按位置编号排序
                // 为每个位置生成对应的库存详情
                Details = positions
                    .Where(x => x > 0)  // 过滤无效位置
                    .OrderBy(x => x)   // 按位置排序
                    .Select((x, idx) => new StockDetailDTO
                    {
                        // 数量:如果已有任务总数,使用任务总数+当前位置数;否则只使用当前位置数
                        Quantity = 1,
                        // 通道/位置编号
                        Channel = x,
                        // 电池条码:取当前批次条码列表的最后 N 个(N = 有效位置数)
                        CellBarcode = !state.CurrentBatchBarcodes.IsNullOrEmpty() ? state.CurrentBatchBarcodes[^(positions.Count(p => p > 0) - idx)].ToString() ?? string.Empty : string.Empty
                    })
                    .ToList()
            };
        }
        /// <summary>
        /// 调用拆盘 API
        /// </summary>
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
@@ -326,7 +326,7 @@
                else
                {
                    // 组盘任务:原有逻辑
                    var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
                    var stockDTO = RobotTaskProcessor.BuildStockDTO1(state, positions);
                    var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.GroupPalletAsync), stockDTO);
                    putSuccess = result.Data.Status && result.IsSuccess;