# MOM 系统单据编码规则文档 > 本文档梳理 MOM 系统中所有业务单据的自动编码规则,包括编码前缀、生成格式、命名规律及后端实现机制。 > 数据来源:系统「单据编码」配置页面 + 后端源码实现。 --- ## 1. 编码规则总览 系统共配置 15 条单据编码规则,按业务模块分为 **销售**、**生产**、**采购** 三大类。 ### 1.1 销售模块(排序 1 - 5) | 排序 | 业务名称 | 业务类型 | 编码前缀 | 说明 | |:----:|----------|----------|:--------:|------| | 1 | 销售订单 | 销售订单 | **XSDD** | 常规销售订单 | | 2 | 销售订单 | 备货订单 | **XSBH** | 备货类型销售订单 | | 3 | 销售订单 | 零部件订单 | **LJBK** | 零部件备库订单 | | 4 | 发货通知单 | — | **XSFH** | 销售发货通知 | | 4 | 退货通知单 | — | **XSTH** | 销售退货通知 | | 5 | 开票通知单 | — | **XSKP** | 销售开票结算 | ### 1.2 生产模块(排序 10 - 11) | 排序 | 业务名称 | 业务类型 | 编码前缀 | 说明 | |:----:|----------|----------|:--------:|------| | 10 | 生产计划单 | — | **SCJH** | 生产排程计划 | | 11 | 物料清单 | — | **MBOM** | 制造 BOM | ### 1.3 采购模块(排序 12 - 23) | 排序 | 业务名称 | 业务类型 | 编码前缀 | 说明 | |:----:|----------|----------|:--------:|------| | 12 | 采购计划单 | 原材料 | **CGJH** | 原材料采购计划 | | 13 | 采购计划单 | 零部件 | **FLJH** | 零部件(附料)采购计划 | | 14 | 采购计划单 | 五金 | **BCJH** | 五金(辅材)采购计划 | | 20 | 采购订单 | — | **CGDD** | 采购订单 | | 21 | 采购到货单 | — | **CGDH** | 采购到货登记 | | 22 | 采购退货单 | — | **CGTH** | 采购退货处理 | | 23 | 采购发票单 | — | **CGFP** | 采购发票登记 | --- ## 2. 编码生成格式 系统中单据编码的生成格式分为两种: ### 2.1 格式 A:前缀 + 6 位流水号 适用于大多数业务单据,编码长度固定为 **10 位**(4 位前缀 + 6 位数字)。 | 项目 | 说明 | |------|------| | **规则** | `{4位前缀} + {6位流水号,不足补零}` | | **总长度** | 10 位 | | **流水号范围** | 000001 ~ 999999 | | **递增方式** | 查询数据库当前最大编号,+1 递增 | **示例:** ``` CGJH000001 -- 第 1 张原材料采购计划单 CGJH000002 -- 第 2 张原材料采购计划单 CGDD000041 -- 第 41 张采购订单 XSDD000085 -- 第 85 张销售订单 ``` **已确认使用此格式的单据:** | 编码前缀 | 单据类型 | 后端实现 | |:--------:|----------|----------| | CGJH | 采购计划单(原材料) | `MpPurchaseServiceImpl.java` 第 33 行 | | CGDD | 采购订单 | `PoOrderServiceImpl.java` 第 156 行 | | XSDD | 销售订单 | 从业务数据推断(如 `XSDD000085`) | > **推断**:XSBH、LJBK、XSFH、XSTH、XSKP、FLJH、BCJH、CGDH、CGTH、CGFP 也采用此格式(前缀 + 6 位流水号),与系统通用编码规范一致。 ### 2.2 格式 B:前缀 + 日期 + 3 位序号 适用于需要按日期归类的单据,编码长度固定为 **15 位**(4 位前缀 + 8 位日期 + 3 位序号)。 | 项目 | 说明 | |------|------| | **规则** | `{4位前缀} + {yyyyMMdd} + {3位序号,不足补零}` | | **总长度** | 15 位 | | **日期部分** | 当天日期,格式 yyyyMMdd | | **序号范围** | 001 ~ 999(按日重置) | | **递增方式** | 查询当天最大序号,+1 递增;跨日重新从 001 开始 | **示例:** ``` SCJH20260126001 -- 2026年1月26日 第 1 张生产计划单 SCJH20260126002 -- 2026年1月26日 第 2 张生产计划单 SCJH20260127001 -- 2026年1月27日 第 1 张生产计划单(跨日重置) ``` **已确认使用此格式的单据:** | 编码前缀 | 单据类型 | 后端实现 | |:--------:|----------|----------| | SCJH | 生产计划单 | `MpPlanServiceImpl.java` 第 109-128 行 | > **补充**:系统中销售合同(前缀 `XSHT`)也使用格式 B,虽未在单据编码配置页面中列出,但实现逻辑一致(见 `SlContractServiceImpl.java` 第 186-192 行)。 ### 2.3 格式 C:前缀 + 时间戳(特殊) 物料清单 MBOM 采用特殊的时间戳生成方式。 | 项目 | 说明 | |------|------| | **规则** | `MBOM + {毫秒时间戳} + {计数}` | | **后端实现** | `MpPlanServiceImpl.java` 第 318 行 | **示例:** ``` MBOM17063291400001 -- 基于时间戳生成 ``` --- ## 3. 编码前缀命名规律 ### 3.1 前缀构成规则 编码前缀通常由 **模块缩写 + 业务动作缩写** 组成,均为大写字母,长度 4 位。 | 缩写 | 含义 | 所属 | |:----:|------|------| | XS | 销售(Xiao Shou) | 模块前缀 | | CG | 采购(Cai Gou) | 模块前缀 | | SC | 生产(Sheng Chan) | 模块前缀 | | DD | 订单(Ding Dan) | 业务动作 | | JH | 计划(Ji Hua) | 业务动作 | | FH | 发货(Fa Huo) | 业务动作 | | TH | 退货(Tui Huo) | 业务动作 | | KP | 开票(Kai Piao) | 业务动作 | | DH | 到货(Dao Huo) | 业务动作 | | FP | 发票(Fa Piao) | 业务动作 | ### 3.2 常规组合 | 编码前缀 | 拼音全称 | 中文含义 | |:--------:|----------|----------| | XSDD | Xiao Shou Ding Dan | 销售订单 | | XSBH | Xiao Shou Bei Huo | 销售备货 | | XSFH | Xiao Shou Fa Huo | 销售发货 | | XSTH | Xiao Shou Tui Huo | 销售退货 | | XSKP | Xiao Shou Kai Piao | 销售开票 | | CGDD | Cai Gou Ding Dan | 采购订单 | | CGJH | Cai Gou Ji Hua | 采购计划 | | CGDH | Cai Gou Dao Huo | 采购到货 | | CGTH | Cai Gou Tui Huo | 采购退货 | | CGFP | Cai Gou Fa Piao | 采购发票 | | SCJH | Sheng Chan Ji Hua | 生产计划 | ### 3.3 特殊前缀 | 编码前缀 | 拼音全称 | 中文含义 | 备注 | |:--------:|----------|----------|------| | LJBK | Ling Jian Bei Ku | 零件备库 | 零部件销售订单 | | FLJH | Fu Liao Ji Hua | 附料计划 | 零部件采购计划 | | BCJH | Bu Cai Ji Hua | 辅材计划 | 五金采购计划 | | MBOM | Manufacturing BOM | 制造物料清单 | 英文缩写 | --- ## 4. 后端自动编码机制 ### 4.1 硬编码方式(当前主要采用) 各业务模块在 ServiceImpl 层直接定义编码前缀,通过查询数据库最大编号后递增生成。 **核心逻辑伪代码:** ```java // 格式 A:前缀 + 6位流水号 String prefix = "CGDD"; String maxCode = mapper.selectMaxCode(prefix); // 查询最大编码 int nextSeq = parseSeq(maxCode) + 1; // 解析序号 +1 return prefix + String.format("%06d", nextSeq); // 补零拼接 // 输出: CGDD000042 // 格式 B:前缀 + 日期 + 3位序号 String prefix = "SCJH"; String dateStr = new SimpleDateFormat("yyyyMMdd").format(new Date()); String pattern = prefix + dateStr; // SCJH20260126 String maxCode = mapper.selectMaxCode(pattern); // 查询当天最大编码 int maxSeq = parseSeq(maxCode) + 1; // 解析序号 +1 return String.format("%s%03d", pattern, maxSeq); // 补零拼接 // 输出: SCJH20260126003 ``` **已实现的编码生成接口:** | API 路径 | 编码前缀 | 实现类 | |----------|:--------:|--------| | `GET /erp/mp/purchase/genCode` | CGJH | `MpPurchaseServiceImpl` | | `GET /erp/po/order/genCode` | CGDD | `PoOrderServiceImpl` | | 内部调用(新增时自动生成) | SCJH | `MpPlanServiceImpl` | | 内部调用(新增时自动生成) | MBOM | `MpPlanServiceImpl` | ### 4.2 通用编码引擎(可配置方式) 系统内置了一套基于数据库配置的通用编码生成引擎,支持灵活组合编码规则。 **数据库表结构:** | 表名 | 用途 | |------|------| | `sys_auto_code_rule` | 编码规则主表,定义规则标识、名称、最大长度、填充方式等 | | `sys_auto_code_part` | 编码规则组成表,定义各段(固定字符/日期/流水号/输入字符) | | `sys_auto_code_result` | 编码生成记录表,记录最后生成的编号和流水号 | **编码段类型(part_type):** | 类型 | 说明 | 示例 | |------|------|------| | FIXCHAR | 固定字符 | `CGDD`、`WM` | | NOWDATE | 当前日期 | `20260126`、`2026` | | SERIALNO | 流水号 | `001`、`000001` | | INPUTCHAR | 输入字符 | 由调用方传入的自定义段 | **通用生成接口:** ``` GET /system/autocode/get/{ruleCode} GET /system/autocode/get/{ruleCode}/{inputCharacter} ``` **管理页面:** 已在 `mom-backend-ui` 中实现(`/views/system/autocode/`),可通过界面配置编码规则。 > **注意**:当前核心业务单据(销售、采购、生产)主要使用硬编码方式,通用编码引擎用于仓库、质检等辅助模块。 --- ## 5. 补充编码列表(仓库 / 质检 / 其他模块) 以下为系统中通过通用编码引擎管理的其他业务单据编码规则标识(定义于 `UserConstants.java`): | 规则标识 | 中文名称 | 说明 | |----------|----------|------| | VENDOR_CODE | 供应商编码 | 供应商主数据 | | CLIENT_CODE | 客户编码 | 客户主数据 | | ITEM_TYPE_CODE | 物料分类编码 | 物料分类 | | ITEM_CODE | 物料编码 | 物料主数据 | | MACHINERY_TYPE_CODE | 设备类型编码 | 设备分类 | | TASK_CODE | 生产任务编码 | 生产任务 | | DEFECT_CODE | 缺陷编码 | 质量缺陷记录 | | SN_CODE | 序列号编码 | 产品序列号 | | TRANS_ORDER_CODE | 调拨单编码 | 库存调拨 | | ARRIVALNOTICE_CODE | 到货通知单编码 | 到货通知 | | ITEMRECPT_CODE | 物料入库编码 | 物料采购入库 | | WM_RTVENDOR_CODE | 退回供应商编码 | 退回供应商出库 | | ISSUE_CODE | 生产领料编码 | 生产领料出库 | | RTISSUE_CODE | 生产退料编码 | 生产退料入库 | | WM_SALES_NOTICE_CODE | 产品入库/发货通知编码 | 产品入库、发货通知 | | PRODUCTSALSE_CODE | 销售出库编码 | 销售出库 | | WM_RTSALSE_CODE | 销售退货入库编码 | 销售退货入库 | | TRANSFER_CODE | 移库编码 | 库存移库 | | WM_STOCK_TAKING_CODE | 盘点任务编码 | 库存盘点 | | WM_OUTSOURCE_ISSUE_CODE | 外协领料编码 | 外协领料出库 | | WM_OUTSOURCE_RECPT_CODE | 外协入库编码 | 外协入库 | | FEEDBACK_CODE | 报工单编码 | 生产报工 | | CARD_CODE | 流转卡编码 | 生产流转卡 | | QC_IQC_CODE | 来料检验单编码 | IQC 来料检验 | | QC_PQC_CODE | 过程检验单编码 | PQC 过程检验 | | QC_OQC_CODE | 出货检验单编码 | OQC 出货检验 | | QC_RESULT_CODE | 检验结果编码 | 样品检验结果编号 | | BATCH_CODE | 批次编码 | 物料批次号 | | DV_REPAIR_CODE | 维修单编码 | 设备维修单 | --- ## 6. 编码规则配置页面 系统提供了单据编码的可视化管理页面(如参考截图所示),支持以下操作: - **查看**:以列表形式展示所有编码规则,包含排序、业务名称、业务类型、编码前缀 - **搜索**:支持按业务名称下拉筛选 + 搜索 - **新增**:添加新的编码规则配置 - **重置**:清空搜索条件 **页面路径(后台管理):** `mom-backend-ui` -> 系统管理 -> 单据编码 **页面路径(前端 ERP):** 对应前端页面路径待确认 --- ## 附录:编码前缀速查表 | 编码前缀 | 单据类型 | 所属模块 | 编码格式 | 编码长度 | |:--------:|----------|:--------:|:--------:|:--------:| | XSDD | 销售订单(销售订单) | 销售 | 前缀 + 6位流水号 | 10 位 | | XSBH | 销售订单(备货订单) | 销售 | 前缀 + 6位流水号 | 10 位 | | LJBK | 销售订单(零部件订单) | 销售 | 前缀 + 6位流水号 | 10 位 | | XSFH | 发货通知单 | 销售 | 前缀 + 6位流水号 | 10 位 | | XSTH | 退货通知单 | 销售 | 前缀 + 6位流水号 | 10 位 | | XSKP | 开票通知单 | 销售 | 前缀 + 6位流水号 | 10 位 | | SCJH | 生产计划单 | 生产 | 前缀 + 日期 + 3位序号 | 15 位 | | MBOM | 物料清单 | 生产 | 前缀 + 时间戳 + 计数 | 不固定 | | CGJH | 采购计划单(原材料) | 采购 | 前缀 + 6位流水号 | 10 位 | | FLJH | 采购计划单(零部件) | 采购 | 前缀 + 6位流水号 | 10 位 | | BCJH | 采购计划单(五金) | 采购 | 前缀 + 6位流水号 | 10 位 | | CGDD | 采购订单 | 采购 | 前缀 + 6位流水号 | 10 位 | | CGDH | 采购到货单 | 采购 | 前缀 + 6位流水号 | 10 位 | | CGTH | 采购退货单 | 采购 | 前缀 + 6位流水号 | 10 位 | | CGFP | 采购发票单 | 采购 | 前缀 + 6位流水号 | 10 位 |