evoToK3Cloud/.trae/documents/导出Excel:BOM与工艺分离实现方案.md
2025-12-30 21:00:03 +08:00

3.0 KiB
Raw Permalink Blame History

目标

  • 在同一个 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(保序):
    • 构建 kingdeeBomRowsList<Map<String,Object>>
    • 构建 excelDTOList(工艺 ProcessRouteExcelDTO 列表)
  2. 动态映射:
    • DynamicDataMapping.createOneDataList("KingdeeBomData", kingdeeBomRows)
    • DynamicDataMapping.createOneDataList("ProcessRouteExcelDTO", evoRouteDataList)
  3. 模板在同一Sheet中放置两个表格块分别绑定以上占位名

排序与顺序

  • 物料:沿用 routeList 的顺序
  • 工艺:processNo 升序,null 置后

边界情况

  • 无工艺B区为空但A区仍输出该物料的BOM
  • 无BOMA区不输出该物料B区正常输出工艺
  • 版本查询失败A区跳过该物料或显示“未查询到”标记

验证

  • 用两种物料进行导出测试:一个多工序、一个单工序;核对两区行数与内容
  • 对比你提供的示例Excel确认列头、顺序与格式

请你确认/提供

  • 同一Sheet模板文件或示意图两块区域位置与占位名是否采用 KingdeeBomDataProcessRouteExcelDTO
  • BOM“一条数据”的取值方式直接取第一条还是需要汇总若后续会出现多子项
  • 是否需要在两区之间加入分隔行/标题行的样式要求

确认后我将按该方案更新导出逻辑并给你可下载的Excel。