Files
my-mom-system/prd/mom系统单据编码规则文档.md

310 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-03-06 02:02:59 +08:00
# 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 位 |