Files
my-mom-system/prd/销售管理-数据模型.md

489 lines
18 KiB
Markdown
Raw Normal View History

2026-03-06 02:02:59 +08:00
# 销售管理模块 - 数据模型规范
> 本文档定义销售管理模块的数据库表结构和实体关系,供前后端开发参考。
>
> **注意**: 字段命名采用驼峰命名法 (camelCase),与后端 API 返回格式保持一致。
## 1. 实体关系图 (ER Diagram)
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ sl_client │ │ sl_contract │ │ sl_order │
│ (客户档案) │<──────│ (销售合同) │<──────│ (销售订单) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
│ ▼ ▼
│ ┌─────────────────┐ ┌─────────────────┐
│ │sl_contract_salve│ │ sl_order_salve │
│ │ (合同产品明细) │ │ (订单物料明细) │
└───────────────>└─────────────────┘ └─────────────────┘
┌──────────────────────────────────────────────────┘
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ sl_deliver │ │ sl_invoice │ │ sl_saleback │
│ (发货通知单) │ │ (开票结算单) │ │ (退货通知单) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│sl_deliver_salve │ │sl_invoice_salve │ │sl_saleback_salve│
│ (发货明细) │ │ (开票明细) │ │ (退货明细) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
┌─────────────────┐
│ md_item │
│ (物料主数据) │
└─────────────────┘
┌─────────────────┐
│ wm_warehouse │
│ (仓库) │
└─────────────────┘
```
---
## 2. 客户档案 (sl_client)
### 2.1 主表结构 (SlClient)
> API 路径: `/sl/client`
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| clientId | bigint | - | N | - | 客户ID (主键) |
| clientCode | varchar | 32 | N | - | 客户编码 |
| clientName | varchar | 100 | N | - | 客户名称 |
| clientNick | varchar | 50 | Y | - | 客户简称 |
| clientEn | varchar | 100 | Y | - | 英文名称 |
| clientDes | varchar | 500 | Y | - | 客户描述 |
| clientLogo | varchar | 200 | Y | - | 客户Logo |
| clientType | varchar | 20 | Y | - | 客户类型 |
| clientLevel | varchar | 10 | Y | 'B' | 客户级别(A/B/C/D) |
| clientSource | varchar | 50 | Y | - | 客户来源 |
| clientIndustry | varchar | 50 | Y | - | 所属行业 |
| address | varchar | 200 | Y | - | 地址 |
| website | varchar | 200 | Y | - | 网址 |
| email | varchar | 100 | Y | - | 邮箱 |
| tel | varchar | 20 | Y | - | 电话 |
| contact1 | varchar | 50 | Y | - | 联系人1 |
| contact1Tel | varchar | 20 | Y | - | 联系人1电话 |
| contact2 | varchar | 50 | Y | - | 联系人2 |
| contact2Tel | varchar | 20 | Y | - | 联系人2电话 |
| creditCode | varchar | 30 | 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 开票信息 (客户表扩展字段)
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| bankName | varchar | 100 | Y | 开户银行 |
| bankAccount | varchar | 30 | Y | 银行账号 |
| taxNo | varchar | 20 | Y | 税号 |
| invoiceAddress | varchar | 200 | Y | 开票地址电话 |
---
## 3. 销售订单 (sl_order)
### 3.1 主表结构 (SlOrderMaster)
> API 路径: `/sl/order`
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| orderId | bigint | - | N | - | 订单ID (主键) |
| orderCode | varchar | 32 | N | - | 订单编号 |
| orderName | varchar | 100 | Y | - | 订单名称 |
| orderDate | date | - | N | - | 订单日期 |
| orderStatus | varchar | 20 | N | 'DRAFT' | 订单状态 |
| clientId | bigint | - | N | - | 客户ID |
| clientCode | varchar | 32 | Y | - | 客户编码(冗余) |
| clientName | varchar | 100 | Y | - | 客户名称(冗余) |
| deliveryDate | date | - | Y | - | 交货日期 |
| totalAmount | decimal | 18,2 | Y | 0 | 订单总金额 |
| remark | varchar | 500 | 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 |
#### 订单状态枚举 (orderStatus)
| 值 | 说明 |
|----|------|
| DRAFT | 草稿 |
| SUBMITTED | 已提交 |
| APPROVED | 已审批 |
| REJECTED | 已驳回 |
| CLOSED | 已关闭 |
| CANCELLED | 已取消 |
### 3.2 明细表结构 (SlOrderSalve)
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| lineId | bigint | - | N | 行ID (主键) |
| orderId | bigint | - | N | 订单ID (外键) |
| itemId | bigint | - | N | 物料ID |
| itemCode | varchar | 32 | Y | 物料编码 |
| itemName | varchar | 100 | Y | 物料名称 |
| specification | varchar | 100 | Y | 规格型号 |
| unitOfMeasure | varchar | 20 | Y | 计量单位 |
| quantity | decimal | 18,4 | N | 数量 |
| unitPrice | decimal | 18,4 | Y | 单价 |
| amount | decimal | 18,2 | Y | 金额 |
| deliveredQty | decimal | 18,4 | Y | 已发货数量 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
### 3.3 索引设计
```sql
-- 主表索引
CREATE INDEX idx_sl_order_code ON sl_order(orderCode);
CREATE INDEX idx_sl_order_client ON sl_order(clientId);
CREATE INDEX idx_sl_order_date ON sl_order(orderDate);
CREATE INDEX idx_sl_order_status ON sl_order(orderStatus);
CREATE INDEX idx_sl_order_tenant ON sl_order(tenantId);
-- 明细表索引
CREATE INDEX idx_sl_order_salve_order ON sl_order_salve(orderId);
CREATE INDEX idx_sl_order_salve_item ON sl_order_salve(itemId);
```
---
## 4. 发货单 (sl_deliver)
### 4.1 主表结构 (SlDeliverMaster)
> API 路径: `/sl/deliver`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| deliverId | bigint | - | N | 发货单ID (主键) |
| deliverCode | varchar | 32 | N | 发货单编号 |
| deliverName | varchar | 100 | Y | 发货单名称 |
| deliverDate | date | - | N | 发货日期 |
| orderId | bigint | - | Y | 销售订单ID |
| clientId | bigint | - | N | 客户ID |
| clientName | varchar | 100 | Y | 客户名称 |
| warehouseId | bigint | - | N | 发货仓库ID |
| warehouseName | varchar | 50 | Y | 仓库名称 |
| status | varchar | 20 | N | 状态 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
| createBy | varchar | 64 | Y | 创建者 |
| createTime | datetime | - | Y | 创建时间 |
| updateBy | varchar | 64 | Y | 更新者 |
| updateTime | datetime | - | Y | 更新时间 |
| tenantId | varchar | 20 | N | 租户ID |
### 4.2 明细表结构 (SlDeliverSalve)
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| lineId | bigint | - | N | 行ID (主键) |
| deliverId | bigint | - | N | 发货单ID (外键) |
| orderId | bigint | - | Y | 来源订单ID |
| orderLineId | bigint | - | Y | 来源订单明细ID |
| itemId | bigint | - | N | 物料ID |
| itemCode | varchar | 32 | Y | 物料编码 |
| itemName | varchar | 100 | Y | 物料名称 |
| specification | varchar | 100 | Y | 规格型号 |
| unitOfMeasure | varchar | 20 | Y | 计量单位 |
| orderQty | decimal | 18,4 | Y | 订单数量 |
| deliveredQty | decimal | 18,4 | Y | 已发数量 |
| deliverQty | decimal | 18,4 | N | 本次发货数量 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
---
## 5. 销售发票 (sl_invoice)
### 5.1 主表结构 (SlInvoiceMaster)
> API 路径: `/sl/invoice`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| invoiceId | bigint | - | N | 发票ID (主键) |
| invoiceCode | varchar | 32 | N | 发票编号 |
| invoiceName | varchar | 100 | Y | 发票名称 |
| invoiceDate | date | - | N | 发票日期 |
| clientId | bigint | - | N | 客户ID |
| clientName | varchar | 100 | Y | 客户名称 |
| invoiceTitle | varchar | 100 | Y | 开票名称 |
| taxRate | decimal | 5,2 | Y | 税率 |
| invoiceType | varchar | 20 | Y | 发票类型 |
| bankName | varchar | 100 | Y | 开户行 |
| bankAccount | varchar | 30 | Y | 银行账号 |
| taxNo | varchar | 20 | Y | 税号 |
| totalAmount | decimal | 18,2 | Y | 总金额 |
| taxAmount | decimal | 18,2 | Y | 税额 |
| status | varchar | 20 | N | 状态 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
| createBy | varchar | 64 | Y | 创建者 |
| createTime | datetime | - | Y | 创建时间 |
| updateBy | varchar | 64 | Y | 更新者 |
| updateTime | datetime | - | Y | 更新时间 |
| tenantId | varchar | 20 | N | 租户ID |
### 5.2 明细表结构 (SlInvoiceSalve)
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| lineId | bigint | - | N | 行ID (主键) |
| invoiceId | bigint | - | N | 发票ID (外键) |
| deliverId | bigint | - | Y | 来源发货单ID |
| deliverLineId | bigint | - | Y | 来源发货明细ID |
| itemId | bigint | - | N | 物料ID |
| itemCode | varchar | 32 | Y | 物料编码 |
| itemName | varchar | 100 | Y | 物料名称 |
| specification | varchar | 100 | Y | 规格型号 |
| unitOfMeasure | varchar | 20 | Y | 计量单位 |
| quantity | decimal | 18,4 | N | 数量 |
| unitPrice | decimal | 18,4 | Y | 单价 |
| amount | decimal | 18,2 | Y | 金额 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
---
## 6. 退货单 (sl_saleback)
### 6.1 主表结构 (SlSalebackMaster)
> API 路径: `/sl/saleback`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| salebackId | bigint | - | N | 退货单ID (主键) |
| salebackCode | varchar | 32 | N | 退货单编号 |
| salebackDate | date | - | N | 退货日期 |
| orderId | bigint | - | Y | 原销售订单ID |
| clientId | bigint | - | N | 客户ID |
| clientName | varchar | 100 | Y | 客户名称 |
| reason | varchar | 200 | Y | 退货原因 |
| status | varchar | 20 | N | 状态 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
| createBy | varchar | 64 | Y | 创建者 |
| createTime | datetime | - | Y | 创建时间 |
| updateBy | varchar | 64 | Y | 更新者 |
| updateTime | datetime | - | Y | 更新时间 |
| tenantId | varchar | 20 | N | 租户ID |
### 6.2 明细表结构 (SlSalebackSalve)
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| lineId | bigint | - | N | 行ID (主键) |
| salebackId | bigint | - | N | 退货单ID (外键) |
| deliverId | bigint | - | Y | 来源发货单ID |
| deliverLineId | bigint | - | Y | 来源发货明细ID |
| itemId | bigint | - | N | 物料ID |
| itemCode | varchar | 32 | Y | 物料编码 |
| itemName | varchar | 100 | Y | 物料名称 |
| specification | varchar | 100 | Y | 规格型号 |
| unitOfMeasure | varchar | 20 | Y | 计量单位 |
| deliveredQty | decimal | 18,4 | Y | 已发数量 |
| returnQty | decimal | 18,4 | N | 退货数量 |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
---
## 7. 物料主数据 (md_item)
### 7.1 主表结构 (MdItem)
> API 路径: `/md/item`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| itemId | bigint | - | N | 物料ID (主键) |
| itemCode | varchar | 32 | N | 物料编码 |
| itemName | varchar | 100 | N | 物料名称 |
| specification | varchar | 100 | Y | 规格型号 |
| unitOfMeasure | varchar | 20 | Y | 计量单位 |
| itemTypeId | bigint | - | Y | 物料分类ID |
| itemTypeName | varchar | 50 | Y | 物料分类名称 |
| itemOrProduct | varchar | 20 | Y | 物料/产品 (ITEM/PRODUCT) |
| safeStockFlag | char | 1 | Y | 是否启用安全库存(Y/N) |
| minStock | decimal | 18,4 | Y | 最小库存 |
| maxStock | decimal | 18,4 | Y | 最大库存 |
| enableFlag | char | 1 | N | 启用状态(Y/N) |
| remark | varchar | 500 | Y | 备注 |
| delFlag | char | 1 | N | 删除标志 |
| createBy | varchar | 64 | Y | 创建者 |
| createTime | datetime | - | Y | 创建时间 |
| updateBy | varchar | 64 | Y | 更新者 |
| updateTime | datetime | - | Y | 更新时间 |
| tenantId | varchar | 20 | N | 租户ID |
### 7.2 物料分类 (MdItemType)
> API 路径: `/md/itemtype`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| itemTypeId | bigint | - | N | 分类ID (主键) |
| itemTypeCode | varchar | 32 | N | 分类编码 |
| itemTypeName | varchar | 50 | N | 分类名称 |
| parentTypeId | bigint | - | Y | 父分类ID |
| orderNum | int | - | Y | 排序号 |
| enableFlag | char | 1 | N | 启用状态(Y/N) |
---
## 8. 仓库 (wm_warehouse)
### 8.1 仓库主表
> API 路径: `/wm/warehouse`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| warehouseId | bigint | - | N | 仓库ID (主键) |
| warehouseCode | varchar | 32 | N | 仓库编码 |
| warehouseName | varchar | 50 | N | 仓库名称 |
| location | varchar | 100 | Y | 位置 |
| area | decimal | 10,2 | Y | 面积 |
| charge | varchar | 50 | Y | 负责人 |
| enableFlag | char | 1 | N | 启用状态(Y/N) |
### 8.2 库存 (wm_stock)
> API 路径: `/wm/stock`
| 字段名 | 类型 | 长度 | 允许空 | 说明 |
|--------|------|------|--------|------|
| stockId | bigint | - | N | 库存ID (主键) |
| itemId | bigint | - | N | 物料ID |
| itemCode | varchar | 32 | Y | 物料编码 |
| itemName | varchar | 100 | Y | 物料名称 |
| warehouseId | bigint | - | N | 仓库ID |
| warehouseName | varchar | 50 | Y | 仓库名称 |
| quantityOnHand | decimal | 18,4 | Y | 在库数量 |
| quantityLocked | decimal | 18,4 | Y | 锁定数量 |
| quantityAvailable | decimal | 18,4 | Y | 可用数量 |
---
## 9. 视图设计
### 9.1 销售订单明细视图 (v_sl_order_detail)
```sql
CREATE VIEW v_sl_order_detail AS
SELECT
o.orderId,
o.orderCode,
o.orderDate,
o.orderStatus,
o.clientId,
o.clientName,
o.deliveryDate,
o.totalAmount,
s.lineId,
s.itemId,
s.itemCode,
s.itemName,
s.specification,
s.unitOfMeasure,
s.quantity,
s.unitPrice,
s.amount,
s.deliveredQty,
(s.quantity - COALESCE(s.deliveredQty, 0)) AS undeliveredQty
FROM sl_order o
LEFT JOIN sl_order_salve s ON o.orderId = s.orderId AND s.delFlag = '0'
WHERE o.delFlag = '0';
```
### 9.2 7天交货明细视图 (v_sl_7day_delivery)
```sql
CREATE VIEW v_sl_7day_delivery AS
SELECT
o.orderId,
o.orderCode,
o.orderDate,
o.clientId,
o.clientName,
o.deliveryDate,
s.itemId,
s.itemCode,
s.itemName,
s.quantity AS orderQty,
s.deliveredQty,
(s.quantity - COALESCE(s.deliveredQty, 0)) AS undeliveredQty
FROM sl_order o
LEFT JOIN sl_order_salve s ON o.orderId = s.orderId AND s.delFlag = '0'
WHERE o.delFlag = '0'
AND o.orderStatus = 'APPROVED'
AND o.deliveryDate BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
AND (s.quantity - COALESCE(s.deliveredQty, 0)) > 0;
```
---
## 10. 状态枚举定义
### 10.1 单据状态 (status / orderStatus)
| 状态值 | 说明 |
|--------|------|
| DRAFT | 草稿 |
| SUBMITTED | 已提交 |
| APPROVED | 已审批 |
| REJECTED | 已驳回 |
| CLOSED | 已关闭 |
| CANCELLED | 已取消 |
### 10.2 启用状态 (enableFlag)
| 状态值 | 说明 |
|--------|------|
| Y | 启用 |
| N | 停用 |
### 10.3 物料类型 (itemOrProduct)
| 状态值 | 说明 |
|--------|------|
| ITEM | 物料 |
| PRODUCT | 产品 |
---
## 11. API 模块路径对照
| 模块 | API路径前缀 | 说明 |
|------|-------------|------|
| 销售模块 | /sl | Sales |
| 仓库模块 | /wm | Warehouse Management |
| 物料模块 | /md | Master Data |
| 采购模块 | /po | Procurement |
| 生产模块 | /pd | Production |
| 计划模块 | /pl | Planning |
| 研发模块 | /rd | Research & Development |
| 委外模块 | /pu | Outsourcing |
| 财务模块 | /fd | Finance |