# 采购管理模块 - 数据模型 > 本文档定义采购管理模块的数据库表结构、实体关系和视图设计。 --- ## 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 数据权限范围 | 权限类型 | 说明 | |----------|------| | 全部数据 | 可查看所有数据 | | 部门数据 | 只能查看本部门数据 | | 部门及以下数据 | 可查看本部门及下级部门数据 | | 仅本人数据 | 只能查看自己创建的数据 |