Files
my-mom-system/prd/mom系统单据编码规则文档.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

310 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 位 |