一、采购域的核心职责与业务边界
1. 业务定位
采购域作为采购业务处理中心,负责管理供应商、采购计划、采购订单、进货验收等核心采购流程,确保商品供应及时、成本可控,同时为财务域提供应付账款数据。
2. 核心职责
- 
供应商管理:供应商准入、评估、分级管理
 - 
采购计划管理:自动补货计划、采购需求计划
 - 
采购订单管理:订单创建、审批、状态跟踪
 - 
进货验收管理:到货验收、质量检验、入库确认
 - 
预付款管理:预付款申请、核销、跟踪
 - 
供应商对账:月度对账、差异处理、付款计划
 - 
采购分析:供应商绩效、采购成本分析
 
二、采购域表结构ER设计
核心表关系图
-- 核心表清单(简化字段说明)
CREATE TABLE suppliers (供应商主表);
CREATE TABLE supplier_products (供应商商品关系表);
CREATE TABLE purchase_plans (采购计划表);
CREATE TABLE purchase_plan_items (采购计划明细表);
CREATE TABLE purchase_orders (采购订单表);
CREATE TABLE purchase_order_items (采购订单明细表);
CREATE TABLE purchase_prepayments (采购预付款表);
CREATE TABLE prepayment_writeoff_records (预付款核销记录表);
CREATE TABLE purchase_acceptances (采购验收单表);
CREATE TABLE purchase_acceptance_items (采购验收明细表);
CREATE TABLE supplier_statements (供应商对账单表);
CREATE TABLE supplier_statement_items (对账明细表);
CREATE TABLE purchase_returns (采购退货单表);
CREATE TABLE purchase_return_items (采购退货明细表);
采购域数据库建表语句 sql -- 创建采购域数据库 CREATE DATABASE purchase_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE purchase_db; -- 1. 供应商表 CREATE TABLE suppliers ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_code VARCHAR(50) NOT NULL UNIQUE COMMENT '供应商编码', supplier_name VARCHAR(200) NOT NULL COMMENT '供应商名称', supplier_type ENUM('生产商', '代理商', '批发商', '个体户') DEFAULT '生产商', -- 联系信息 contact_person VARCHAR(100) COMMENT '联系人', contact_phone VARCHAR(20) COMMENT '联系电话', contact_email VARCHAR(100) COMMENT '联系邮箱', address VARCHAR(500) COMMENT '地址', -- 财务信息 bank_account VARCHAR(100) COMMENT '银行账户', bank_name VARCHAR(100) COMMENT '开户行', tax_number VARCHAR(100) COMMENT '税号', settlement_method ENUM('货到付款', '月结', '预付') DEFAULT '月结', settlement_days INT DEFAULT 30 COMMENT '结算周期(天)', credit_limit DECIMAL(15,2) COMMENT '信用额度', -- 业务信息 lead_time INT COMMENT '交货周期(天)', min_order_amount DECIMAL(15,2) COMMENT '最小订单金额', quality_rating DECIMAL(3,2) COMMENT '质量评分', delivery_rating DECIMAL(3,2) COMMENT '交货评分', service_rating DECIMAL(3,2) COMMENT '服务评分', -- 状态控制 status ENUM('草稿', '已审核', '已停用') DEFAULT '草稿', approval_status ENUM('待审核', '审核通过', '审核驳回') DEFAULT '待审核', blacklist_reason VARCHAR(500) COMMENT '黑名单原因', -- 审计字段 created_by VARCHAR(50) NOT NULL, updated_by VARCHAR(50), approved_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_supplier_code (supplier_code), INDEX idx_supplier_name (supplier_name), INDEX idx_status (status) ) COMMENT '供应商主表'; -- 2. 供应商商品表 CREATE TABLE supplier_products ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 供应商商品信息 supplier_product_code VARCHAR(100) COMMENT '供应商商品编码', supplier_product_name VARCHAR(200) COMMENT '供应商商品名称', supplier_spec VARCHAR(200) COMMENT '供应商规格', supplier_unit VARCHAR(20) COMMENT '供应商单位', -- 采购信息 purchase_price DECIMAL(10,4) NOT NULL COMMENT '采购单价', min_order_quantity DECIMAL(10,2) COMMENT '最小起订量', pack_quantity DECIMAL(10,2) COMMENT '包装数量', delivery_days INT COMMENT '交货天数', -- 状态控制 is_primary BOOLEAN DEFAULT FALSE COMMENT '是否主供应商', is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE CASCADE, UNIQUE KEY uk_supplier_product (supplier_id, product_id), INDEX idx_product (product_id), INDEX idx_supplier (supplier_id) ) COMMENT '供应商商品关系表'; -- 3. 采购计划表 CREATE TABLE purchase_plans ( id BIGINT PRIMARY KEY AUTO_INCREMENT, plan_no VARCHAR(50) NOT NULL UNIQUE COMMENT '计划编号', plan_name VARCHAR(200) NOT NULL COMMENT '计划名称', plan_type ENUM('自动补货', '需求计划', '紧急采购') DEFAULT '自动补货', -- 计划信息 plan_date DATE NOT NULL COMMENT '计划日期', plan_period ENUM('日', '周', '月', '季度') DEFAULT '月', warehouse_id BIGINT NOT NULL COMMENT '到货仓库', -- 状态控制 plan_status ENUM('草稿', '已审核', '执行中', '已完成', '已取消') DEFAULT '草稿', approval_status ENUM('待审核', '审核通过', '审核驳回') DEFAULT '待审核', -- 金额统计 total_amount DECIMAL(15,2) DEFAULT 0 COMMENT '计划总金额', executed_amount DECIMAL(15,2) DEFAULT 0 COMMENT '已执行金额', -- 审计字段 created_by VARCHAR(50) NOT NULL, approved_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_plan_no (plan_no), INDEX idx_plan_date (plan_date), INDEX idx_status (plan_status) ) COMMENT '采购计划表'; -- 4. 采购计划明细表 CREATE TABLE purchase_plan_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, plan_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 计划信息 planned_quantity DECIMAL(10,2) NOT NULL COMMENT '计划数量', suggested_supplier_id BIGINT COMMENT '建议供应商', estimated_price DECIMAL(10,4) COMMENT '预估单价', estimated_amount DECIMAL(15,2) COMMENT '预估金额', -- 执行信息 executed_quantity DECIMAL(10,2) DEFAULT 0 COMMENT '已执行数量', pending_quantity DECIMAL(10,2) NOT NULL COMMENT '待执行数量', -- 需求信息 safety_stock_quantity DECIMAL(10,2) COMMENT '安全库存', current_stock_quantity DECIMAL(10,2) COMMENT '当前库存', average_daily_sales DECIMAL(10,2) COMMENT '日均销量', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (plan_id) REFERENCES purchase_plans(id) ON DELETE CASCADE, INDEX idx_plan_product (plan_id, product_id) ) COMMENT '采购计划明细表'; -- 5. 采购订单表 CREATE TABLE purchase_orders ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(50) NOT NULL UNIQUE COMMENT '订单编号', supplier_id BIGINT NOT NULL, warehouse_id BIGINT NOT NULL COMMENT '到货仓库', -- 订单信息 order_type ENUM('计划采购', '紧急采购', '补货采购') DEFAULT '计划采购', order_date DATE NOT NULL COMMENT '订单日期', expected_delivery_date DATE COMMENT '预计交货日期', -- 金额信息 total_amount DECIMAL(15,2) NOT NULL COMMENT '订单总金额', tax_amount DECIMAL(15,2) DEFAULT 0 COMMENT '税费', discount_amount DECIMAL(15,2) DEFAULT 0 COMMENT '折扣金额', actual_amount DECIMAL(15,2) NOT NULL COMMENT '实际金额', -- 状态控制 order_status ENUM('草稿', '待审核', '已审核', '已发货', '部分到货', '已完成', '已取消') DEFAULT '草稿', approval_status ENUM('待审核', '审核通过', '审核驳回') DEFAULT '待审核', payment_status ENUM('未付款', '部分付款', '已付款') DEFAULT '未付款', -- 物流信息 shipping_method VARCHAR(100) COMMENT '运输方式', tracking_number VARCHAR(100) COMMENT '物流单号', freight_amount DECIMAL(10,2) DEFAULT 0 COMMENT '运费', -- 验收信息 total_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '总数量', received_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '已收货数量', accepted_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '合格数量', rejected_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '不合格数量', -- 审计字段 created_by VARCHAR(50) NOT NULL, approved_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id), INDEX idx_order_no (order_no), INDEX idx_supplier (supplier_id), INDEX idx_status (order_status), INDEX idx_delivery_date (expected_delivery_date) ) COMMENT '采购订单表'; -- 6. 采购订单明细表 CREATE TABLE purchase_order_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 商品信息 sku VARCHAR(100) NOT NULL COMMENT '商品SKU', product_name VARCHAR(200) NOT NULL COMMENT '商品名称', unit VARCHAR(20) NOT NULL COMMENT '单位', spec VARCHAR(200) COMMENT '规格', -- 采购信息 order_quantity DECIMAL(10,2) NOT NULL COMMENT '订购数量', purchase_price DECIMAL(10,4) NOT NULL COMMENT '采购单价', tax_rate DECIMAL(5,4) DEFAULT 0.13 COMMENT '税率', -- 金额信息 subtotal_amount DECIMAL(15,2) NOT NULL COMMENT '小计金额', tax_subtotal DECIMAL(15,2) COMMENT '税费小计', -- 收货信息 received_quantity DECIMAL(10,2) DEFAULT 0 COMMENT '已收货数量', accepted_quantity DECIMAL(10,2) DEFAULT 0 COMMENT '合格数量', rejected_quantity DECIMAL(10,2) DEFAULT 0 COMMENT '不合格数量', pending_quantity DECIMAL(10,2) NOT NULL COMMENT '待收货数量', -- 计划关联 plan_item_id BIGINT COMMENT '关联计划明细ID', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (order_id) REFERENCES purchase_orders(id) ON DELETE CASCADE, INDEX idx_order_product (order_id, product_id), INDEX idx_product (product_id) ) COMMENT '采购订单明细表'; -- 7. 采购预付款表 CREATE TABLE purchase_prepayments ( id BIGINT PRIMARY KEY AUTO_INCREMENT, prepayment_no VARCHAR(50) NOT NULL UNIQUE COMMENT '预付款编号', supplier_id BIGINT NOT NULL, purchase_order_id BIGINT COMMENT '关联采购订单', -- 付款信息 prepayment_amount DECIMAL(15,2) NOT NULL COMMENT '预付款金额', paid_amount DECIMAL(15,2) DEFAULT 0 COMMENT '已付金额', prepayment_reason VARCHAR(500) NOT NULL COMMENT '预付款原因', -- 状态控制 prepayment_status ENUM('待支付', '部分支付', '已支付', '已核销', '已取消') DEFAULT '待支付', payment_status ENUM('待支付', '支付中', '支付成功', '支付失败') DEFAULT '待支付', -- 支付信息 payment_method ENUM('银行转账', '现金', '支票') DEFAULT '银行转账', bank_account VARCHAR(100) COMMENT '收款账户', payment_time DATETIME COMMENT '支付时间', transaction_no VARCHAR(100) COMMENT '交易流水号', -- 核销信息 written_off_amount DECIMAL(15,2) DEFAULT 0 COMMENT '已核销金额', pending_writeoff_amount DECIMAL(15,2) NOT NULL COMMENT '待核销金额', -- 审计字段 created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id), FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id), INDEX idx_prepayment_no (prepayment_no), INDEX idx_supplier (supplier_id), INDEX idx_status (prepayment_status) ) COMMENT '采购预付款表'; -- 8. 预付款核销记录表 CREATE TABLE prepayment_writeoff_records ( id BIGINT PRIMARY KEY AUTO_INCREMENT, prepayment_id BIGINT NOT NULL, purchase_order_id BIGINT NOT NULL, -- 核销信息 writeoff_amount DECIMAL(15,2) NOT NULL COMMENT '核销金额', writeoff_time DATETIME NOT NULL COMMENT '核销时间', writeoff_remark VARCHAR(500) COMMENT '核销备注', created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (prepayment_id) REFERENCES purchase_prepayments(id), FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id), INDEX idx_prepayment (prepayment_id), INDEX idx_order (purchase_order_id) ) COMMENT '预付款核销记录表'; -- 9. 采购验收单表 CREATE TABLE purchase_acceptances ( id BIGINT PRIMARY KEY AUTO_INCREMENT, acceptance_no VARCHAR(50) NOT NULL UNIQUE COMMENT '验收单号', purchase_order_id BIGINT NOT NULL, warehouse_id BIGINT NOT NULL, -- 验收信息 acceptance_date DATE NOT NULL COMMENT '验收日期', acceptance_type ENUM('正常验收', '退货验收', '换货验收') DEFAULT '正常验收', acceptance_status ENUM('待验收', '验收中', '部分验收', '已完成', '已取消') DEFAULT '待验收', -- 数量统计 total_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '总数量', accepted_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '合格数量', rejected_quantity DECIMAL(12,2) DEFAULT 0 COMMENT '不合格数量', -- 金额统计 total_amount DECIMAL(15,2) DEFAULT 0 COMMENT '总金额', accepted_amount DECIMAL(15,2) DEFAULT 0 COMMENT '合格金额', -- 质量信息 quality_inspector VARCHAR(50) COMMENT '质检员', inspection_result ENUM('合格', '不合格', '部分合格') DEFAULT '合格', inspection_remark VARCHAR(500) COMMENT '质检备注', -- 审计字段 created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id), INDEX idx_acceptance_no (acceptance_no), INDEX idx_order (purchase_order_id), INDEX idx_status (acceptance_status) ) COMMENT '采购验收单表'; -- 10. 采购验收明细表 CREATE TABLE purchase_acceptance_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, acceptance_id BIGINT NOT NULL, order_item_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 验收信息 acceptance_quantity DECIMAL(10,2) NOT NULL COMMENT '验收数量', accepted_quantity DECIMAL(10,2) NOT NULL COMMENT '合格数量', rejected_quantity DECIMAL(10,2) DEFAULT 0 COMMENT '不合格数量', rejection_reason ENUM('质量问题', '数量不符', '规格不符', '包装破损', '其他') COMMENT '不合格原因', -- 价格信息 purchase_price DECIMAL(10,4) NOT NULL COMMENT '采购单价', accepted_amount DECIMAL(15,2) NOT NULL COMMENT '合格金额', -- 批次信息 batch_no VARCHAR(100) COMMENT '批次号', production_date DATE COMMENT '生产日期', expiry_date DATE COMMENT '有效期至', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (acceptance_id) REFERENCES purchase_acceptances(id) ON DELETE CASCADE, FOREIGN KEY (order_item_id) REFERENCES purchase_order_items(id), INDEX idx_acceptance_product (acceptance_id, product_id) ) COMMENT '采购验收明细表'; -- 11. 供应商对账单表 CREATE TABLE supplier_statements ( id BIGINT PRIMARY KEY AUTO_INCREMENT, statement_no VARCHAR(50) NOT NULL UNIQUE COMMENT '对账单号', supplier_id BIGINT NOT NULL, -- 对账信息 statement_date DATE NOT NULL COMMENT '对账日期', statement_period_start DATE NOT NULL COMMENT '对账期间开始', statement_period_end DATE NOT NULL COMMENT '对账期间结束', statement_status ENUM('待确认', '已确认', '有差异', '已完成') DEFAULT '待确认', -- 金额信息 total_purchase_amount DECIMAL(15,2) DEFAULT 0 COMMENT '采购总金额', total_paid_amount DECIMAL(15,2) DEFAULT 0 COMMENT '已付总金额', total_prepayment_amount DECIMAL(15,2) DEFAULT 0 COMMENT '预付款金额', total_pending_amount DECIMAL(15,2) DEFAULT 0 COMMENT '待付总金额', -- 差异处理 discrepancy_amount DECIMAL(15,2) DEFAULT 0 COMMENT '差异金额', discrepancy_reason VARCHAR(500) COMMENT '差异原因', resolution_status ENUM('未处理', '处理中', '已解决') DEFAULT '未处理', -- 确认信息 confirmed_by VARCHAR(50) COMMENT '确认人', confirmed_time DATETIME COMMENT '确认时间', supplier_confirmed BOOLEAN DEFAULT FALSE COMMENT '供应商是否确认', created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id), INDEX idx_statement_no (statement_no), INDEX idx_supplier_period (supplier_id, statement_period_start, statement_period_end) ) COMMENT '供应商对账单表'; -- 12. 对账明细表 CREATE TABLE supplier_statement_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, statement_id BIGINT NOT NULL, purchase_order_id BIGINT NOT NULL, acceptance_id BIGINT NOT NULL, -- 明细信息 purchase_amount DECIMAL(15,2) NOT NULL COMMENT '采购金额', paid_amount DECIMAL(15,2) DEFAULT 0 COMMENT '已付金额', pending_amount DECIMAL(15,2) NOT NULL COMMENT '待付金额', -- 状态 reconciliation_status ENUM('已对账', '有差异', '待核实') DEFAULT '已对账', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (statement_id) REFERENCES supplier_statements(id) ON DELETE CASCADE, FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id), FOREIGN KEY (acceptance_id) REFERENCES purchase_acceptances(id), INDEX idx_statement_order (statement_id, purchase_order_id) ) COMMENT '对账明细表'; -- 13. 采购退货单表 CREATE TABLE purchase_returns ( id BIGINT PRIMARY KEY AUTO_INCREMENT, return_no VARCHAR(50) NOT NULL UNIQUE COMMENT '退货单号', purchase_order_id BIGINT NOT NULL, acceptance_id BIGINT NOT NULL, supplier_id BIGINT NOT NULL, -- 退货信息 return_date DATE NOT NULL COMMENT '退货日期', return_reason ENUM('质量问题', '数量超收', '规格不符', '其他') NOT NULL, return_status ENUM('待审核', '已审核', '已出库', '已完成', '已取消') DEFAULT '待审核', -- 金额信息 total_return_amount DECIMAL(15,2) NOT NULL COMMENT '退货总金额', total_return_quantity DECIMAL(12,2) NOT NULL COMMENT '退货总数量', -- 物流信息 return_shipping_method VARCHAR(100) COMMENT '退货运输方式', return_tracking_number VARCHAR(100) COMMENT '退货物流单号', -- 审计字段 created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id), FOREIGN KEY (acceptance_id) REFERENCES purchase_acceptances(id), FOREIGN KEY (supplier_id) REFERENCES suppliers(id), INDEX idx_return_no (return_no), INDEX idx_supplier (supplier_id) ) COMMENT '采购退货单表'; -- 14. 采购退货明细表 CREATE TABLE purchase_return_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, return_id BIGINT NOT NULL, acceptance_item_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 退货信息 return_quantity DECIMAL(10,2) NOT NULL COMMENT '退货数量', return_price DECIMAL(10,4) NOT NULL COMMENT '退货单价', return_amount DECIMAL(15,2) NOT NULL COMMENT '退货金额', return_reason_detail VARCHAR(500) COMMENT '退货原因详情', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (return_id) REFERENCES purchase_returns(id) ON DELETE CASCADE, FOREIGN KEY (acceptance_item_id) REFERENCES purchase_acceptance_items(id), INDEX idx_return_product (return_id, product_id) ) COMMENT '采购退货明细表'; -- 15. 供应商评估记录表 CREATE TABLE supplier_evaluations ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_id BIGINT NOT NULL, evaluation_date DATE NOT NULL COMMENT '评估日期', evaluation_period_start DATE NOT NULL COMMENT '评估期间开始', evaluation_period_end DATE NOT NULL COMMENT '评估期间结束', -- 评分信息 quality_score DECIMAL(3,2) COMMENT '质量评分', delivery_score DECIMAL(3,2) COMMENT '交货评分', service_score DECIMAL(3,2) COMMENT '服务评分', price_score DECIMAL(3,2) COMMENT '价格评分', overall_score DECIMAL(3,2) COMMENT '综合评分', -- 统计信息 total_orders INT DEFAULT 0 COMMENT '总订单数', on_time_delivery_rate DECIMAL(5,4) COMMENT '准时交货率', quality_pass_rate DECIMAL(5,4) COMMENT '质量合格率', total_purchase_amount DECIMAL(15,2) DEFAULT 0 COMMENT '采购总额', -- 评价信息 evaluation_comment TEXT COMMENT '评价意见', improvement_suggestions TEXT COMMENT '改进建议', evaluator VARCHAR(50) NOT NULL COMMENT '评估人', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id), INDEX idx_supplier_evaluation (supplier_id, evaluation_date) ) COMMENT '供应商评估记录表'; -- 16. 采购价格历史表 CREATE TABLE purchase_price_history ( id BIGINT PRIMARY KEY AUTO_INCREMENT, supplier_id BIGINT NOT NULL, product_id BIGINT NOT NULL, -- 价格信息 old_price DECIMAL(10,4) COMMENT '原价格', new_price DECIMAL(10,4) NOT NULL COMMENT '新价格', effective_date DATE NOT NULL COMMENT '生效日期', -- 变更信息 change_reason ENUM('调价', '促销', '成本变动', '新供应商') DEFAULT '调价', change_remark VARCHAR(500) COMMENT '变更备注', created_by VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (supplier_id) REFERENCES suppliers(id), INDEX idx_supplier_product (supplier_id, product_id), INDEX idx_effective_date (effective_date) ) COMMENT '采购价格历史表'; 表关系说明 核心业务表关系 供应商管理:suppliers ← supplier_products ← purchase_price_history 采购计划:purchase_plans ← purchase_plan_items 采购执行:purchase_orders ← purchase_order_items 验收管理:purchase_acceptances ← purchase_acceptance_items 预付款管理:purchase_prepayments ← prepayment_writeoff_records 退货管理:purchase_returns ← purchase_return_items 对账管理:supplier_statements ← supplier_statement_items 关键外键关系 supplier_products.supplier_id → suppliers.id purchase_orders.supplier_id → suppliers.id purchase_order_items.order_id → purchase_orders.id purchase_acceptances.purchase_order_id → purchase_orders.id purchase_acceptance_items.acceptance_id → purchase_acceptances.id purchase_prepayments.supplier_id → suppliers.id supplier_statements.supplier_id → suppliers.id 索引优化策略 业务编号字段建立唯一索引 状态字段建立普通索引 日期字段建立索引支持范围查询 供应商+商品组合字段建立联合索引 外键字段建立索引提升关联查询性能 这套表结构设计支持采购域完整的业务流程,包括供应商管理、采购计划、订单执行、验收管理、预付款处理、退货管理和供应商对账等核心功能。
三、采购域事件设计与发布
1. 采购域事件定义
- 
PurchaseOrderCreatedEvent:采购订单创建事件
 - 
PurchaseAcceptanceCompletedEvent:采购验收完成事件
 - 
PurchasePrepaymentPaidEvent:预付款支付事件
 - 
PurchaseReturnCompletedEvent:采购退货完成事件
 
2. 事件发布核心算法
采购订单创建事件发布算法:
输入:采购订单数据 输出:PurchaseOrderCreatedEvent 1. 构建订单商品列表 2. 计算订单总金额 3. 生成唯一事件ID 4. 封装事件对象(订单号、供应商、仓库、商品明细、金额) 5. 发送至Kafka采购订单主题
采购验收完成事件发布算法:
输入:验收单数据 输出:PurchaseAcceptanceCompletedEvent 1. 构建验收商品列表(含批次信息) 2. 计算验收总金额 3. 生成唯一事件ID 4. 封装事件对象(验收单号、采购订单、仓库、验收明细、金额) 5. 发送至Kafka采购验收主题
四、采购域核心业务服务
1. 采购订单服务核心算法
创建采购订单算法:
输入:采购订单请求、创建人 输出:采购订单 1. 验证供应商状态(必须为已审核状态) 2. 生成唯一订单号(PO+日期+序列) 3. 验证商品信息(调用商品域接口) 4. 验证供应商商品关系(供应商必须提供该商品) 5. 计算订单金额: - 小计金额 = ∑(采购单价 × 数量) - 税费 = ∑(小计金额 × 税率) - 实际金额 = 小计金额 + 税费 - 折扣 6. 创建采购订单主记录 7. 保存订单明细记录 8. 发布采购订单创建事件
审核采购订单算法:
输入:订单ID、审核结果、审核备注、审核人 输出:更新后的采购订单 1. 验证订单状态(必须为待审核) 2. 更新审核状态和订单状态 3. 记录审核人和审核时间 4. 如果审核驳回,更新订单状态为已取消
2. 采购验收服务核心算法
创建验收单算法:
输入:验收请求、创建人 输出:采购验收单 1. 验证采购订单状态(必须为已发货) 2. 生成唯一验收单号 3. 验证验收商品: - 商品必须在采购订单中存在 - 验收数量 ≤ 订单未收货数量 4. 创建验收单主记录 5. 保存验收明细记录 6. 更新采购订单收货数量 7. 更新订单明细收货状态
完成验收算法:
输入:验收单ID、质检员、备注 输出:更新后的验收单 1. 验证验收单状态(必须为验收中) 2. 计算验收统计: - 总数量 = ∑验收数量 - 合格数量 = ∑合格数量 - 不合格数量 = ∑不合格数量 - 合格金额 = ∑(合格数量 × 采购单价) 3. 判断验收结果: - 全部合格 → 合格 - 全部不合格 → 不合格 - 部分合格 → 部分合格 4. 更新验收单状态为已完成 5. 发布采购验收完成事件 6. 检查采购订单是否全部完成
3. 预付款服务核心算法
创建预付款算法:
输入:预付款请求、创建人 输出:采购预付款 1. 验证供应商有效性 2. 验证采购订单(如果关联) 3. 生成唯一预付款编号 4. 创建预付款记录 5. 初始化核销金额为0,待核销金额等于预付款金额
预付款核销算法:
输入:预付款ID、采购订单ID、核销金额、核销人 输出:核销记录 1. 验证预付款状态(必须为已支付) 2. 验证核销金额 ≤ 预付款待核销金额 3. 创建核销记录 4. 更新预付款: - 已核销金额 += 核销金额 - 待核销金额 -= 核销金额 5. 如果待核销金额=0,更新预付款状态为已核销
4. 供应商对账核心算法
生成对账单算法:
输入:供应商ID、对账期间 输出:供应商对账单 1. 查询对账期间内的采购验收单 2. 查询对账期间内的采购退货单 3. 查询对账期间内的预付款记录 4. 计算: - 采购总金额 = ∑验收金额 - 退货总金额 = ∑退货金额 - 净采购金额 = 采购总金额 - 退货总金额 - 已付金额 = ∑已付款金额 - 待付金额 = 净采购金额 - 已付金额 5. 生成对账单和明细记录
对账差异处理算法:
输入:对账单ID、差异金额、差异原因 输出:更新后的对账单 1. 记录差异金额和原因 2. 更新对账单状态为有差异 3. 生成差异处理任务 4. 通知相关人员处理
五、采购计划与补货算法
1. 自动补货计划生成算法
输入:商品ID、仓库ID
输出:建议采购数量
1. 获取商品安全库存、当前库存、日均销量
2. 计算库存覆盖天数 = 当前库存 / 日均销量
3. 获取供应商交货周期
4. 计算建议采购数量:
   IF 库存覆盖天数 < 安全库存天数 THEN
       采购数量 = (安全库存天数 × 日均销量) - 当前库存 + 缓冲库存
   ELSE
       采购数量 = 0
   END IF
5. 考虑最小起订量和包装数量约束
2. 供应商选择算法
输入:商品ID、采购数量 输出:推荐供应商 1. 获取可供应该商品的所有供应商 2. 对供应商进行评分: 综合评分 = 质量评分 × 权重 + 交货评分 × 权重 + 价格评分 × 权重 3. 考虑因素: - 采购价格 - 交货周期 - 历史质量表现 - 供应商等级 - 当前合作关系 4. 选择综合评分最高的供应商
六、采购域与其他域的交互
1. 事件订阅处理
- 
商品信息变更事件:更新供应商商品价格信息
 - 
库存变更事件:更新库存数据用于采购计划
 - 
组织架构变更事件:更新仓库、部门信息
 
2. 外部域服务调用
商品信息查询算法:
输入:商品ID列表 输出:商品信息映射 1. 检查本地缓存 2. 缓存未命中时调用商品域批量查询接口 3. 验证商品状态(是否下架) 4. 返回商品基础信息
库存信息查询算法:
输入:商品ID、仓库ID 输出:可用库存数量 1. 检查本地缓存(短时间有效期) 2. 缓存未命中时调用仓储域库存查询接口 3. 返回实时库存数量
七、采购域业务规则
1. 状态流转规则
采购订单状态流转:
草稿 → 待审核 → 已审核 → 已发货 → 部分到货 → 已完成
        ↓
       已取消
验收单状态流转:
待验收 → 验收中 → 已完成
2. 金额计算规则
订单金额计算: 小计金额 = ∑(采购单价 × 数量) 税费 = ∑(小计金额 × 税率) 实际金额 = 小计金额 + 税费 - 折扣 验收金额计算: 合格金额 = ∑(合格数量 × 采购单价)
3. 业务验证规则
创建采购订单验证: - 供应商状态必须为已审核 - 商品必须由该供应商提供 - 采购数量必须 ≥ 最小起订量 创建验收单验证: - 采购订单必须为已发货状态 - 验收数量必须 ≤ 订单未收货数量 - 同一商品不能重复验收
八、采购域配置管理
1. 业务参数配置
purchase:
  order:
    auto-approve: false           # 是否自动审核
    max-approval-amount: 100000   # 最大审批金额
  acceptance:
    quality-threshold: 0.95       # 质量合格阈值
    auto-complete: true           # 是否自动完成验收
  prepayment:
    require-approval: true        # 预付款是否需要审批
    max-prepayment-rate: 0.3      # 最大预付比例
  supplier:
    evaluation-period: 30         # 供应商评估周期
    blacklist-days: 90            # 黑名单期限
2. 缓存策略
- 
供应商信息:缓存1小时
 - 
商品信息:缓存30分钟
 - 
库存信息:缓存5分钟
 - 
采购价格:缓存2小时
 
总结
采购域通过完整的供应商管理、采购计划、订单管理、验收管理、预付款管理和对账管理,实现了采购业务的全面数字化管理。核心算法围绕状态流转、金额计算、业务验证和智能决策,确保采购流程的规范性和效率。通过事件驱动架构与其他域解耦协作,为整个进销存系统提供稳定可靠的商品供应保障。
                    
                
 posted on 
                
            
        
浙公网安备 33010602011771号