evoToK3Cloud/docs/plans/生产令号综合看板报表.md
2026-05-18 10:56:56 +08:00

10 KiB
Raw Blame History

name overview todos
生产令号综合看板报表 新增一个以生产令号为顶层索引的聚合接口(及可选导出),串联 SQL Server 订单追溯含采购线与生产线、MySQL 工序计划主从表、以及工序汇报/委外两张快照表;在令号维度汇总生产入库、采购订单入库等指标。工序汇报与委外依赖快照数据时需约定日期过滤策略。
id content status
bo-vo 新增 KingdeeProductionBoardQueryBo / 聚合 VO令号→订单→计划/追溯/快照;令号维度的生产入库汇总 + 采购入库汇总) pending
id content status
service-merge 实现 KingdeeProductionBoardServicetrace → MO 集合 → 计划批量查询 → 快照 Mapper 过滤 → 采购/生产入库汇总 → 内存组装 VO pending
id content status
purchase-inbound-summary 基于 purchaseList 按 purchaseBillNo+可选物料groupBy 聚合 sumPurchaseQty/sumInstockQty并写入令号级 PurchaseInboundSummaryVo pending
id content status
planning-reuse 从 SfcOperationPlanningMainServiceImpl 抽取 DTO 组装逻辑供看板复用(避免重复) pending
id content status
controller 新增 POST /system/kingdee/productionBoard/query + 权限与参数校验 pending
id content status
date-normalize 快照日期过滤:首版文档说明格式差异;可选实现简单规范化(同一 sync 窗口内通常可接受仅按订单号关联) pending

说明Cursor 全局计划文件可能在用户目录下,例如
C:\Users\<用户名>\.cursor\plans\生产令号综合看板报表_f0c1e308.plan.md
本文件为仓库内副本,路径:docs/plans/生产令号综合看板报表.md

生产令号综合看板(大报表)方案

目标与边界

  • 索引:生产令号 sclh(支持多个令号一次查询)。
  • 下钻:每个令号下挂 生产订单列表;每个订单下聚合 工序计划(本地库)生产线追溯行工序汇报汇总(快照)委外转移(快照),以及 生产入库小计
  • 采购侧queryOrderTrace 返回的 purchaseListKingdeePoTraceVo:采购订单号 purchaseBillNopurchaseQtyinstockBillNoinstockQty 等)挂在同一令号下;除明细列表外,增加 采购入库汇总
    • 令号维度:如 totalPurchaseInstockQty = 对该令号下所有采购明细行的 instockQty 求和(空/null 按 0可选 totalPurchaseOrderQty = purchaseQty 之和,便于对比「采购下单 vs 已入库」。
    • 按采购订单汇总(推荐):List<PurchaseInboundSummaryRow>,键为 purchaseBillNo+ 可选物料维度若一行一单多料),聚合 sumPurchaseQtysumInstockQty、行数/入库单列表摘要;数据来源仍为当前追溯 SQL 的扁平行,仅内存 groupBy。
  • 数据来源约定
  • 不在首版默认开启:每次请求实时调用 JdUtil.getSysReportData(除非你后续明确要求 live 参数);避免一次看板触发多次金蝶报表压力。
flowchart TD
  subgraph input [输入]
    sclhList[sclh列表]
    dateOpt[可选快照日期范围]
  end
  subgraph ss [SQLServer]
    trace[queryOrderTrace]
  end
  subgraph mysql [MySQL]
    planMain[sfc_operation_planning_main/detail]
    rptSnap[kingdee_operation_report_sum]
    subSnap[kingdee_subcontract_transfer]
  end
  sclhList --> trace
  trace --> moSet[生产订单号集合]
  moSet --> planMain
  moSet --> rptSnap
  moSet --> subSnap
  trace --> prodInstockAgg[生产入库汇总]
  trace --> poInstockAgg[采购入库汇总]
  planMain --> vo[聚合VO]
  rptSnap --> vo
  subSnap --> vo
  prodInstockAgg --> vo
  poInstockAgg --> vo

聚合数据结构(建议)

新建聚合 VO名称可定为 KingdeeProductionBoardVo),层级示例:

  • sclh
  • purchaseList:来自追溯 purchaseList(与该令号一致)
  • purchaseInboundSummary按采购订单(及按需物料)聚合的入库汇总行(见上文);与明细并存,便于报表只看汇总
  • 采购汇总标量(可选与 summary 冗余):totalPurchaseInstockQtytotalPurchaseOrderQty
  • productionTraceList:该令号下全部 KingdeeMoTraceVo
  • 生产侧汇总字段totalProductionInstockQty(对该令号下生产追溯行 instockQty 求和;原方案中的生产入库总值);可按需 totalMoQtyqty 订单数量之和)
  • ordersList<MoBoardNode>
    • moBillNomaterialNumber/materialName(可从追溯首行或计划主档带出)
    • planning:单个 OperationPlanResultDTO 或与主表 1:1 的列表(若一单多计划则列表)
    • reportRowsList<KingdeeOperationReportSum>(或精简 DTOmo_bill_no 过滤后的快照行;可选再提供按 report_date + op_oper当日汇总(内存 groupBy
    • subcontractRowsList<KingdeeSubcontractTransfer>product_order_codes = moBillNo 过滤
    • moInstockQty:该订单维度 生产入库 instockQty 合计(来自 KingdeeMoTraceVo
    • 说明:采购入库按业务通常挂在 令号 / 采购订单,与生产订单号可能无一一映射字段;首版不强行拆到每个 MoBoardNode,除非后续在金蝶侧补充关联字段后再挂订单下钻。

多令号时返回 List<KingdeeProductionBoardVo> 或外层 { boards: [...] },二选一(建议 列表,与前端遍历一致)。

请求入参(新建 Bo

  • 必填:List<String> sclh(或兼容逗号分隔单参,与追溯 Bo 一致)。
  • 可选:reportSnapshotBegin / reportSnapshotEnd(字符串或 yyyy-MM-dd):用于过滤快照中的 report_datedocument_date
    • 注意:金蝶返回日期格式可能为 2026/4/11,实现上建议:先在 Java 侧将快照中的日期列规范化为可比较形式,或用「同步时写入规范化日期列」的二期优化;首版可采用 宽松策略(仅按订单号关联 + 可选区间子串/解析)并在文档中说明局限。
  • 可选:includePurchase(默认 trueincludeSnapshots(默认 true便于关闭大块数据。

服务层实现要点

  • 新建 IKingdeeProductionBoardService + KingdeeProductionBoardServiceImpl(或挂在现有 MssqlQueryService 旁,保持单一职责)。
  • 步骤:
    1. 构造 KingdeeOrderTraceQueryBo,仅填 sclh,调用 queryOrderTrace
    2. productionList 提取 moBillNo 去重集合;按 sclh 分组。
    3. 工序计划:对每组令号,用 LambdaQueryWrapper in(moNumber, ...)eq(hbytSclh, sclh) 批量查主表 + detailMapper.in(mainId, ...);组装为 OperationPlanResultDTO(可复用 queryCascadePageList 中的组装片段,提取私有方法避免复制粘贴)。
    4. 快照KingdeeOperationReportSumMapper.selectList(mo_bill_no in (...))KingdeeSubcontractTransferMapper.selectList(product_order_codes in (...)),必要时加日期条件。
    5. 采购入库汇总:将 trace.purchaseList 按当前令号分组后,对组内数据 groupBy(purchaseBillNo [, materialNumber]),聚合 purchaseQtyinstockQtyBigDecimal 累加),生成 purchaseInboundSummary 及令号级合计字段。
    6. 内存合并为上述 VO。

Controller

  • 新建 KingdeeProductionBoardController(或与 KingdeeOrderTraceController 同包):POST /system/kingdee/productionBoard/queryPOST 便于传多个 sclh)。
  • 权限:建议与追溯一致 system:mssql:query,或拆新权限 system:kingdee:productionBoard(需菜单 SQL首版可沿用前者减少配置

「给我看大报表」形态

  • 首版:返回 JSON层级清晰前端表格/折叠面板即可)。
  • 可选二期:基于同一 Service 增加 exportEasyExcel 多 Sheet令号总览 / 采购入库汇总 / 生产订单 / 汇报 / 委外 / 入库明细),不阻塞首版。

风险与前置条件

  • 工序汇报、委外 快照未同步 时对应块为空;文档或接口 msg 中提示先调用已有 /system/kingdee/operationReportSum/sync/system/kingdee/subcontractTransfer/sync
  • 追溯 SQL 若条件过宽会导致 mo 集合过大:可对 moBillNo 数量设上限(如 500超出则报错提示缩小令号范围。

主要新增/改动文件

  • 新建:KingdeeProductionBoardQueryBoKingdeeProductionBoardVoMoBoardNodePurchaseInboundSummaryVo(或同类命名)、IKingdeeProductionBoardServiceKingdeeProductionBoardServiceImplKingdeeProductionBoardController
  • 必要时分摊:从 SfcOperationPlanningMainServiceImpl 抽取「主表+明细 → OperationPlanResultDTO」为 package-private 或组件方法,供看板复用。