10 KiB
10 KiB
| name | overview | todos | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 生产令号综合看板报表 | 新增一个以生产令号为顶层索引的聚合接口(及可选导出),串联 SQL Server 订单追溯(含采购线与生产线)、MySQL 工序计划主从表、以及工序汇报/委外两张快照表;在令号维度汇总生产入库、采购订单入库等指标。工序汇报与委外依赖快照数据时需约定日期过滤策略。 |
|
说明:Cursor 全局计划文件可能在用户目录下,例如
C:\Users\<用户名>\.cursor\plans\生产令号综合看板报表_f0c1e308.plan.md
本文件为仓库内副本,路径:docs/plans/生产令号综合看板报表.md。
生产令号综合看板(大报表)方案
目标与边界
- 索引:生产令号
sclh(支持多个令号一次查询)。 - 下钻:每个令号下挂 生产订单列表;每个订单下聚合 工序计划(本地库)、生产线追溯行、工序汇报汇总(快照)、委外转移(快照),以及 生产入库小计。
- 采购侧:
queryOrderTrace返回的purchaseList(KingdeePoTraceVo:采购订单号purchaseBillNo、purchaseQty、instockBillNo、instockQty等)挂在同一令号下;除明细列表外,增加 采购入库汇总:- 令号维度:如
totalPurchaseInstockQty= 对该令号下所有采购明细行的instockQty求和(空/null 按 0);可选totalPurchaseOrderQty=purchaseQty之和,便于对比「采购下单 vs 已入库」。 - 按采购订单汇总(推荐):
List<PurchaseInboundSummaryRow>,键为purchaseBillNo(+ 可选物料维度若一行一单多料),聚合sumPurchaseQty、sumInstockQty、行数/入库单列表摘要;数据来源仍为当前追溯 SQL 的扁平行,仅内存 groupBy。
- 令号维度:如
- 数据来源约定:
- 追溯:沿用
MssqlQueryService.queryOrderTrace(@DS("sqlserver")),与KingdeeOrderTraceController一致。 - 工序计划:MySQL
sfc_operation_planning_main/sfc_operation_planning_detail,过滤条件与buildQueryWrapper对齐:hbytSclh精确匹配(或与项目号 OR 逻辑按需收窄为「仅令号」以免扩 scope)。 - 工序汇报 / 委外:优先使用已入库快照
kingdee_operation_report_sum、kingdee_subcontract_transfer,按 生产订单号mo_bill_no/product_order_codes与追溯得到的moBillNo集合关联。
- 追溯:沿用
- 不在首版默认开启:每次请求实时调用
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),层级示例:
sclhpurchaseList:来自追溯purchaseList(与该令号一致)purchaseInboundSummary:按采购订单(及按需物料)聚合的入库汇总行(见上文);与明细并存,便于报表只看汇总- 采购汇总标量(可选与 summary 冗余):
totalPurchaseInstockQty、totalPurchaseOrderQty productionTraceList:该令号下全部KingdeeMoTraceVo行- 生产侧汇总字段:
totalProductionInstockQty(对该令号下生产追溯行instockQty求和;原方案中的生产入库总值);可按需totalMoQty(qty订单数量之和) orders:List<MoBoardNode>moBillNo、materialNumber/materialName(可从追溯首行或计划主档带出)planning:单个OperationPlanResultDTO或与主表 1:1 的列表(若一单多计划则列表)reportRows:List<KingdeeOperationReportSum>(或精简 DTO)按mo_bill_no过滤后的快照行;可选再提供按report_date + op_oper的 当日汇总(内存 groupBy)subcontractRows:List<KingdeeSubcontractTransfer>按product_order_codes = moBillNo过滤moInstockQty:该订单维度 生产入库instockQty合计(来自KingdeeMoTraceVo)- 说明:采购入库按业务通常挂在 令号 / 采购订单,与生产订单号可能无一一映射字段;首版不强行拆到每个
MoBoardNode,除非后续在金蝶侧补充关联字段后再挂订单下钻。
多令号时返回 List<KingdeeProductionBoardVo> 或外层 { boards: [...] },二选一(建议 列表,与前端遍历一致)。
请求入参(新建 Bo)
- 必填:
List<String> sclh(或兼容逗号分隔单参,与追溯 Bo 一致)。 - 可选:
reportSnapshotBegin/reportSnapshotEnd(字符串或yyyy-MM-dd):用于过滤快照中的report_date、document_date。- 注意:金蝶返回日期格式可能为
2026/4/11,实现上建议:先在 Java 侧将快照中的日期列规范化为可比较形式,或用「同步时写入规范化日期列」的二期优化;首版可采用 宽松策略(仅按订单号关联 + 可选区间子串/解析)并在文档中说明局限。
- 注意:金蝶返回日期格式可能为
- 可选:
includePurchase(默认 true)、includeSnapshots(默认 true):便于关闭大块数据。
服务层实现要点
- 新建
IKingdeeProductionBoardService+KingdeeProductionBoardServiceImpl(或挂在现有MssqlQueryService旁,保持单一职责)。 - 步骤:
- 构造
KingdeeOrderTraceQueryBo,仅填sclh,调用queryOrderTrace。 - 从
productionList提取moBillNo去重集合;按sclh分组。 - 工序计划:对每组令号,用
LambdaQueryWrapperin(moNumber, ...)且eq(hbytSclh, sclh)批量查主表 +detailMapper.in(mainId, ...);组装为OperationPlanResultDTO(可复用queryCascadePageList中的组装片段,提取私有方法避免复制粘贴)。 - 快照:
KingdeeOperationReportSumMapper.selectList(mo_bill_no in (...));KingdeeSubcontractTransferMapper.selectList(product_order_codes in (...)),必要时加日期条件。 - 采购入库汇总:将 trace.
purchaseList按当前令号分组后,对组内数据groupBy(purchaseBillNo [, materialNumber]),聚合purchaseQty、instockQty(BigDecimal 累加),生成purchaseInboundSummary及令号级合计字段。 - 内存合并为上述 VO。
- 构造
Controller
- 新建
KingdeeProductionBoardController(或与KingdeeOrderTraceController同包):POST /system/kingdee/productionBoard/query(POST 便于传多个sclh)。 - 权限:建议与追溯一致
system:mssql:query,或拆新权限system:kingdee:productionBoard(需菜单 SQL,首版可沿用前者减少配置)。
「给我看大报表」形态
- 首版:返回 JSON(层级清晰,前端表格/折叠面板即可)。
- 可选二期:基于同一 Service 增加
export(EasyExcel 多 Sheet:令号总览 / 采购入库汇总 / 生产订单 / 汇报 / 委外 / 入库明细),不阻塞首版。
风险与前置条件
- 工序汇报、委外 快照未同步 时对应块为空;文档或接口
msg中提示先调用已有/system/kingdee/operationReportSum/sync与/system/kingdee/subcontractTransfer/sync。 - 追溯 SQL 若条件过宽会导致
mo集合过大:可对moBillNo数量设上限(如 500)超出则报错提示缩小令号范围。
主要新增/改动文件
- 新建:
KingdeeProductionBoardQueryBo、KingdeeProductionBoardVo、MoBoardNode、PurchaseInboundSummaryVo(或同类命名)、IKingdeeProductionBoardService、KingdeeProductionBoardServiceImpl、KingdeeProductionBoardController。 - 必要时分摊:从
SfcOperationPlanningMainServiceImpl抽取「主表+明细 → OperationPlanResultDTO」为 package-private 或组件方法,供看板复用。