# 销售管理模块 - 数据模型规范 > 本文档定义销售管理模块的数据库表结构和实体关系,供前后端开发参考。 > > **注意**: 字段命名采用驼峰命名法 (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 |