Files
my-mom-system/prd/采购管理-数据模型.md

522 lines
21 KiB
Markdown
Raw Normal View History

2026-03-06 02:02:59 +08:00
# 采购管理模块 - 数据模型
> 本文档定义采购管理模块的数据库表结构、实体关系和视图设计。
---
## 1. 实体关系图 (ER Diagram)
```
┌─────────────────┐ 1:N ┌─────────────────┐
│ po_supplier │◄─────────────►│ po_order │
│ (供应商) │ │ (采购订单) │
└─────────────────┘ └────────┬────────┘
│ 1:N
┌─────────────────┐
│ po_order_line │
│ (采购订单明细) │
└────────┬────────┘
┌───────────────────────────────┼───────────────────────────────┐
│ │ │
▼ 1:N ▼ 1:N ▼ 1:N
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ po_checkin │ │ po_invoice │ │ po_reject │
│ (采购到货) │ │ (采购发票) │ │ (采购退货) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ 1:N │ 1:N │ 1:N
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ po_checkin_line │ │ po_invoice_line │ │ po_reject_line │
│ (到货单明细) │ │ (发票明细) │ │ (退货单明细) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
关联表:
┌─────────────────┐
│ md_item │ ◄──── 采购订单明细、到货明细、退货明细关联
│ (物料档案) │
└─────────────────┘
┌─────────────────┐
│ wm_warehouse │ ◄──── 到货单、入库单关联
│ (仓库) │
└─────────────────┘
```
---
## 2. 供应商档案表 (po_supplier)
> API 路径: `/po/supplier`
### 2.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| supplierId | bigint | - | N | - | 供应商ID (主键) |
| supplierCode | varchar | 32 | N | - | 供应商编码 |
| supplierName | varchar | 100 | N | - | 供应商名称 |
| supplierAlias | varchar | 100 | Y | - | 供应商别名 |
| supplierNick | varchar | 50 | Y | - | 供应商简称 |
| supplierType | varchar | 20 | Y | - | 供应商分类 |
| supplierLevel | varchar | 10 | Y | 'B' | 供应商等级(A/B/C/D) |
| province | varchar | 50 | Y | - | 省份 |
| city | varchar | 50 | Y | - | 城市 |
| address | varchar | 200 | Y | - | 公司地址 |
| zipCode | varchar | 10 | Y | - | 邮编 |
| tel | varchar | 20 | Y | - | 电话 |
| fax | varchar | 20 | Y | - | 传真 |
| email | varchar | 100 | Y | - | 邮箱 |
| website | varchar | 200 | Y | - | 网址 |
| contact1 | varchar | 50 | Y | - | 业务联系人 |
| contact1Tel | varchar | 20 | Y | - | 业务联系人电话 |
| contact2 | varchar | 50 | Y | - | 财务联系人 |
| contact2Tel | varchar | 20 | Y | - | 财务联系人电话 |
| bankName | varchar | 100 | Y | - | 开户银行 |
| bankAccount | varchar | 30 | Y | - | 银行账号 |
| bankAddress | varchar | 200 | Y | - | 开票地址电话 |
| taxNo | varchar | 30 | Y | - | 税号 |
| supplyItems | varchar | 500 | Y | - | 供应料品(逗号分隔) |
| remark | varchar | 500 | Y | - | 备注 |
| enableFlag | char | 1 | N | 'Y' | 启用状态(Y/N) |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 2.2 索引设计
| 索引名 | 索引字段 | 类型 | 说明 |
|--------|----------|------|------|
| pk_supplier | supplierId | 主键 | 主键索引 |
| uk_supplier_code | supplierCode, tenantId | 唯一 | 供应商编码唯一 |
| idx_supplier_name | supplierName | 普通 | 名称查询 |
| idx_supplier_tenant | tenantId | 普通 | 租户筛选 |
---
## 3. 采购订单表 (po_order)
> API 路径: `/po/order`
### 3.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| orderId | bigint | - | N | - | 订单ID (主键) |
| orderCode | varchar | 32 | N | - | 订单编码 |
| orderDate | date | - | N | - | 订单日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| businessStatus | varchar | 20 | Y | 'NORMAL' | 业务状态 |
| businessType | varchar | 20 | N | - | 业务类型 |
| orderType | varchar | 20 | N | - | 单据类型 |
| materialNeed | varchar | 20 | N | - | 用料需求 |
| supplierId | bigint | - | Y | - | 供应商ID |
| supplierName | varchar | 100 | Y | - | 供应商名称 |
| deptId | bigint | - | Y | - | 采购部门ID |
| deptName | varchar | 50 | Y | - | 采购部门名称 |
| userId | bigint | - | Y | - | 采购人员ID |
| userName | varchar | 50 | Y | - | 采购人员名称 |
| deliveryDate | date | - | Y | - | 到货日期 |
| contractNo | varchar | 50 | Y | - | 合同号 |
| contractFile | varchar | 500 | Y | - | 合同附件 |
| totalQuantity | decimal | 18,4 | Y | 0 | 总数量 |
| totalAmount | decimal | 18,2 | Y | 0 | 总金额 |
| arrivedQuantity | decimal | 18,4 | Y | 0 | 已到货数量 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 3.2 明细表结构 (po_order_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| orderId | bigint | - | N | - | 订单ID (外键) |
| orderCode | varchar | 32 | N | - | 订单编码 |
| lineNo | int | - | N | - | 行号 |
| trackCode | varchar | 32 | Y | - | 跟单编号 |
| planCode | varchar | 32 | Y | - | 计划单号 |
| planLineId | bigint | - | Y | - | 计划明细ID |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitId | bigint | - | Y | - | 计量单位ID |
| unitName | varchar | 20 | Y | - | 计量单位 |
| needDate | date | - | Y | - | 需求日期 |
| quantity | decimal | 18,4 | N | 0 | 采购数量 |
| unitPrice | decimal | 18,4 | Y | 0 | 采购单价 |
| amount | decimal | 18,2 | Y | 0 | 金额 |
| arrivedQuantity | decimal | 18,4 | Y | 0 | 已到货数量 |
| remark | varchar | 200 | Y | - | 采购说明 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 3.3 索引设计
| 索引名 | 索引字段 | 类型 | 说明 |
|--------|----------|------|------|
| pk_order | orderId | 主键 | 主键索引 |
| uk_order_code | orderCode, tenantId | 唯一 | 订单编码唯一 |
| idx_order_supplier | supplierId | 普通 | 供应商查询 |
| idx_order_date | orderDate | 普通 | 日期查询 |
| idx_order_status | status | 普通 | 状态查询 |
| pk_order_line | lineId | 主键 | 明细主键 |
| idx_line_order | orderId | 普通 | 订单关联 |
| idx_line_item | itemId | 普通 | 物料查询 |
---
## 4. 采购到货单表 (po_checkin)
> API 路径: `/po/checkin`
### 4.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| checkinId | bigint | - | N | - | 到货单ID (主键) |
| checkinCode | varchar | 32 | N | - | 到货单编码 |
| checkinDate | date | - | N | - | 到货日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| businessType | varchar | 20 | N | - | 业务类型 |
| orderId | bigint | - | Y | - | 采购订单ID |
| orderCode | varchar | 32 | Y | - | 采购订单编码 |
| supplierId | bigint | - | Y | - | 供应商ID |
| supplierName | varchar | 100 | Y | - | 供应商名称 |
| warehouseId | bigint | - | Y | - | 仓库ID |
| warehouseName | varchar | 50 | Y | - | 仓库名称 |
| totalQuantity | decimal | 18,4 | Y | 0 | 总到货数量 |
| stockedQuantity | decimal | 18,4 | Y | 0 | 已入库数量 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 4.2 明细表结构 (po_checkin_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| checkinId | bigint | - | N | - | 到货单ID (外键) |
| checkinCode | varchar | 32 | N | - | 到货单编码 |
| lineNo | int | - | N | - | 行号 |
| orderLineId | bigint | - | Y | - | 采购订单明细ID |
| trackCode | varchar | 32 | Y | - | 跟单编号 |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| orderQuantity | decimal | 18,4 | Y | 0 | 订单数量 |
| quantity | decimal | 18,4 | N | 0 | 到货数量 |
| stockedQuantity | decimal | 18,4 | Y | 0 | 已入库数量 |
| remark | varchar | 200 | Y | - | 备注 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 5. 采购发票表 (po_invoice)
> API 路径: `/po/invoice`
### 5.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| invoiceId | bigint | - | N | - | 发票ID (主键) |
| invoiceCode | varchar | 32 | N | - | 发票单据编码 |
| invoiceDate | date | - | N | - | 单据日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| financeStatus | varchar | 20 | N | 'RECORDED' | 财务状态 |
| businessType | varchar | 20 | N | - | 业务类型 |
| supplierId | bigint | - | N | - | 供应商ID |
| supplierName | varchar | 100 | N | - | 供应商名称 |
| invoiceNo | varchar | 50 | Y | - | 发票号码 |
| invoiceAmount | decimal | 18,2 | N | 0 | 发票金额(不含税) |
| taxRate | decimal | 5,2 | Y | 0 | 税率(%) |
| taxAmount | decimal | 18,2 | Y | 0 | 税额 |
| totalAmount | decimal | 18,2 | Y | 0 | 价税合计 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 5.2 明细表结构 (po_invoice_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| invoiceId | bigint | - | N | - | 发票ID (外键) |
| invoiceCode | varchar | 32 | N | - | 发票单据编码 |
| lineNo | int | - | N | - | 行号 |
| checkinLineId | bigint | - | Y | - | 到货明细ID |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| quantity | decimal | 18,4 | N | 0 | 开票数量 |
| unitPrice | decimal | 18,4 | Y | 0 | 单价 |
| amount | decimal | 18,2 | Y | 0 | 金额 |
| taxAmount | decimal | 18,2 | Y | 0 | 税额 |
| remark | varchar | 200 | Y | - | 备注 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 6. 采购退货单表 (po_reject)
> API 路径: `/po/reject`
### 6.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| rejectId | bigint | - | N | - | 退货单ID (主键) |
| rejectCode | varchar | 32 | N | - | 退货单编码 |
| rejectDate | date | - | N | - | 退货日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| businessType | varchar | 20 | N | - | 业务类型 |
| supplierId | bigint | - | N | - | 供应商ID |
| supplierName | varchar | 100 | N | - | 供应商名称 |
| checkinId | bigint | - | Y | - | 到货单ID |
| checkinCode | varchar | 32 | Y | - | 到货单编码 |
| totalQuantity | decimal | 18,4 | Y | 0 | 退货总数量 |
| outQuantity | decimal | 18,4 | Y | 0 | 已出库数量 |
| returnQuantity | decimal | 18,4 | Y | 0 | 补收数量 |
| reason | varchar | 500 | Y | - | 退货原因 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 6.2 明细表结构 (po_reject_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| rejectId | bigint | - | N | - | 退货单ID (外键) |
| rejectCode | varchar | 32 | N | - | 退货单编码 |
| lineNo | int | - | N | - | 行号 |
| checkinLineId | bigint | - | Y | - | 到货明细ID |
| trackCode | varchar | 32 | Y | - | 跟单编号 |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| quantity | decimal | 18,4 | N | 0 | 退货数量 |
| outQuantity | decimal | 18,4 | Y | 0 | 已出库数量 |
| returnQuantity | decimal | 18,4 | Y | 0 | 补收数量 |
| reason | varchar | 200 | Y | - | 退货原因 |
| remark | varchar | 200 | Y | - | 备注 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 7. 视图设计
### 7.1 采购订单明细视图 (v_po_order_detail)
```sql
CREATE VIEW v_po_order_detail AS
SELECT
l.lineId,
l.orderId,
o.orderCode,
o.orderDate,
o.status,
o.businessType,
o.materialNeed,
o.supplierId,
o.supplierName,
l.trackCode,
l.planCode,
l.itemId,
l.itemCode,
l.itemName,
l.specification,
l.unitName,
l.needDate,
l.quantity AS orderQuantity,
l.unitPrice,
l.amount,
l.arrivedQuantity,
(l.quantity - IFNULL(l.arrivedQuantity, 0)) AS pendingQuantity,
o.tenantId
FROM po_order_line l
INNER JOIN po_order o ON l.orderId = o.orderId
WHERE l.delFlag = '0' AND o.delFlag = '0';
```
### 7.2 采购执行汇总视图 (v_po_order_summary)
```sql
CREATE VIEW v_po_order_summary AS
SELECT
i.itemTypeCode AS itemTypeCode,
i.itemTypeName AS itemTypeName,
l.itemId,
l.itemCode,
l.itemName,
SUM(l.quantity) AS totalOrderQty,
SUM(IFNULL(l.arrivedQuantity, 0)) AS totalArrivedQty,
SUM(l.quantity - IFNULL(l.arrivedQuantity, 0)) AS totalPendingQty,
o.tenantId
FROM po_order_line l
INNER JOIN po_order o ON l.orderId = o.orderId AND o.status = 'APPROVED'
LEFT JOIN md_item i ON l.itemId = i.itemId
WHERE l.delFlag = '0' AND o.delFlag = '0'
GROUP BY i.itemTypeCode, i.itemTypeName, l.itemId, l.itemCode, l.itemName, o.tenantId;
```
### 7.3 采购到货明细视图 (v_po_checkin_detail)
```sql
CREATE VIEW v_po_checkin_detail AS
SELECT
l.lineId,
l.checkinId,
c.checkinCode,
c.checkinDate,
c.status,
c.businessType,
c.orderCode,
c.supplierId,
c.supplierName,
l.trackCode,
l.itemId,
l.itemCode,
l.itemName,
l.specification,
l.unitName,
l.orderQuantity,
l.quantity AS checkinQuantity,
l.stockedQuantity,
c.tenantId
FROM po_checkin_line l
INNER JOIN po_checkin c ON l.checkinId = c.checkinId
WHERE l.delFlag = '0' AND c.delFlag = '0';
```
---
## 8. 状态枚举定义
### 8.1 单据状态 (status)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| DRAFT | 开立 | 草稿,可编辑 |
| APPROVED | 审核 | 已审核,不可编辑 |
| CLOSED | 关闭 | 已关闭 |
| RETURNED | 退回 | 已退回(发票专用) |
### 8.2 财务状态 (financeStatus)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| RECORDED | 录入 | 已录入 |
| ENTERED | 入账 | 已入账 |
### 8.3 业务状态 (businessStatus)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| NORMAL | 正常 | 正常执行 |
| PAUSE | 暂停 | 暂停执行 |
| CANCEL | 取消 | 已取消 |
### 8.4 业务类型 (businessType)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| RAW_MATERIAL | 原材料 | 原材料采购 |
| PARTS | 零部件 | 零部件采购 |
| ASSEMBLY | 装配件 | 装配件采购 |
| FINISHED | 成品 | 成品采购 |
| HARDWARE | 五金件 | 五金件采购 |
| PACKAGING | 包装物 | 包装物采购 |
### 8.5 用料需求 (materialNeed)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| ORDER_USE | 订单用料 | 按订单需求采购 |
| STOCK_USE | 备库用料 | 备库采购 |
---
## 9. API 模块路径对照
| 业务模块 | API前缀 | 说明 |
|----------|---------|------|
| 供应商 | /po/supplier | 供应商档案 |
| 采购订单 | /po/order | 采购订单 |
| 采购到货 | /po/checkin | 采购到货单 |
| 采购发票 | /po/invoice | 采购发票 |
| 采购退货 | /po/reject | 采购退货单 |
| 采购报表 | /po/report | 采购统计报表 |
---
## 10. 数据权限说明
### 10.1 租户隔离
所有表都包含 `tenantId` 字段,用于多租户数据隔离。
### 10.2 数据权限范围
| 权限类型 | 说明 |
|----------|------|
| 全部数据 | 可查看所有数据 |
| 部门数据 | 只能查看本部门数据 |
| 部门及以下数据 | 可查看本部门及下级部门数据 |
| 仅本人数据 | 只能查看自己创建的数据 |