## 目标 - 在同一个 Sheet 中导出两块数据: - 区域A:材料BOM(每物料1条) - 区域B:工艺路线(每工序1条,完整展示所有步骤) - 保持原始物料顺序;工艺按 `processNo` 升序。 ## 布局设计(同一Sheet) - 区域A(上方):占位名 `KingdeeBomData` - 列建议: - 生产令号 `routeDescription` - 物料编码 `materialCode` - 名称 `materialName` - 材质 `material` - 单重KG `discWeight` - 材料BOM物料编码 `rawMaterialCode` - 材料BOM物料名称 `rawMaterialName` - BOM材质 `bomMaterial` - 材料单重KG `bomDanZhong` - 用量 `discUsage` - 单位 `bomUnit` - 区域B(下方,留若干空行与A区分):占位名 `ProcessRouteExcelDTO` - 列建议: - 生产令号 `routeDescription` - 物料编码 `materialCode` - 名称 `materialName` - 材质 `material` - 单重KG `discWeight` - 工序号 `processNo` - 工作中心 `workCenter` - 工序名称 `processName` - 工序说明 `processDescription` - 工序控制 `processControl` - 活动时长 `activityDuration` - 活动单位 `activityUnit` - 单台数量 `unitQuantity` - 本批数量 `batchQuantity` ## 数据生成逻辑 - BOM区(每物料1条): - 取最新版本:`readGetTheLatestVersion(materialCode)` - 取 `getMaterialUseXByVer(version)` 的第一条(或按你后续指定规则汇总)作为该物料的BOM条目 - 工艺区(每工序1条): - 取 `getRouteGuDing(materialCode)` 全量,按 `processNo` 升序展开;不写入任何BOM字段 - 两区均附带物料基础字段(生产令号、编码、名称、材质、单重、数量等) ## 控制器改造要点(exportRoute2) 1. 遍历 `routeList`(保序): - 构建 `kingdeeBomRows`(List>) - 构建 `excelDTOList`(工艺 ProcessRouteExcelDTO 列表) 2. 动态映射: - `DynamicDataMapping.createOneDataList("KingdeeBomData", kingdeeBomRows)` - `DynamicDataMapping.createOneDataList("ProcessRouteExcelDTO", evoRouteDataList)` 3. 模板:在同一Sheet中放置两个表格块,分别绑定以上占位名 ## 排序与顺序 - 物料:沿用 `routeList` 的顺序 - 工艺:`processNo` 升序,`null` 置后 ## 边界情况 - 无工艺:B区为空,但A区仍输出该物料的BOM - 无BOM:A区不输出该物料;B区正常输出工艺 - 版本查询失败:A区跳过该物料或显示“未查询到”标记 ## 验证 - 用两种物料进行导出测试:一个多工序、一个单工序;核对两区行数与内容 - 对比你提供的示例Excel,确认列头、顺序与格式 ## 请你确认/提供 - 同一Sheet模板文件或示意图:两块区域位置与占位名是否采用 `KingdeeBomData` 和 `ProcessRouteExcelDTO` - BOM“一条数据”的取值方式:直接取第一条还是需要汇总(若后续会出现多子项) - 是否需要在两区之间加入分隔行/标题行的样式要求 确认后我将按该方案更新导出逻辑并给你可下载的Excel。