MES 计划范围文档:Excel 绿色区块解析核心

计划范围文档「导入」的关键,不是行式 CRUD 读表,而是用 Apache POI 把排产 Excel 里的装置绿色合并区拆成扁平记录 FlatRecord。实现类:ExcelGreenRegionExtractormes-plan)。

数据模型

每条记录对应「某装置下的一行进料或产品」:

字段 含义
processName 装置名(合并区文字,去换行)
load 负荷(合并区上方单元格,常格式化为 xx%
capacity 加工量(合并区下方单元格)
type 进料产品
itemName 物料 / 产品侧线名
amount 加工量或产量
yield 收率(仅产品)
rowNum / colNum 合并区左上角,用于排序与分组

入口:parseExcel(byte[] / File / InputStream)XSSFWorkbook → 取第一个 Sheet → 返回按行列排序后的列表。

解析步骤

1. 以合并区为装置锚点

遍历 sheet.getMergedRegions()。合并区首格文本作为装置名;去掉 \n 后长度 < 2 或空则跳过(过滤装饰块)。当前实现里 isGreenCell 判断被注释掉,实际以「合并区 + 有意义的装置名」为准。

2. 块内相对列布局

对每个合并区调用 extractBlockData,以合并区左列为 centerCol

1
2
[进料名][进料量][装置合并区][产品名][收率][产量]
-2 -1 centerCol +1 +2 +3
  • 上方一行同列:负荷;数值则 ×100 后加 %
  • 下方一行同列:年加工量 / 备注
  • 左侧两列:进料名 + 量;过滤表头「进料」及含「合计」的行
  • 右侧三列:产品名 + 收率 + 产量;过滤「产品/侧线」及「合计」

数量、收率尽量用 BigDecimal 保留两位小数。

3. 排序

全部 FlatRecord 先按 rowNum,再按 colNum 升序,保证后续按装置分组时顺序稳定(与画布从左到右、从上到下一致)。

设计要点

  1. 结构约定优于颜色:模板用绿色合并区标装置,代码侧更依赖合并区几何与相对列偏移;颜色过滤可按需打开。
  2. 扁平化:一个装置多行进料/产品 → 多条 FlatRecord,同一 processName + 相同 load/capacity。
  3. 上游用法JhfwDocServiceImpl.importDataPlanFiles 二进制调用本解析器,再按 processName 分组写入主从表;解析器本身不落库。

小结

绿色区块解析 = 合并区定装置 + 固定列偏移读进料/产品 + 上下格读负荷/加工量。改模板列布局时,优先改 extractBlockData 中的相对偏移,而不是改导入接口。