Files
KCGL/inventory-backend/migrations_add_purchase_stockbuy_link.sql
yueli a11b7972c3 feat: 打通采购申请与入库的按单入库链路
后端变更:
- PurchaseRequest 新增 base_id 硬关联 MaterialBase,StockBuy 新增 request_id 关联采购单
- handle_inbound 支持 request_id 入参,入库后自动反写采购单状态为已完成
- 新增 get_approved_requests 接口,返回已审批未入库采购单列表(含物料信息+历史数据回退匹配)
- create_purchase_request 新增 name+spec_model 自动匹配 MaterialBase
- 新增 SQL 和 Alembic 数据库迁移脚本

前端变更:
- 入库表单新增"从采购单导入"弹窗,支持搜索/选中已审批采购单并一键填充物料和商务信息
- 单价/总价交叉推算,缺项自动补全
- 选中行蓝色高亮+点击整行选中,行级交互优化
2026-07-14 15:25:00 +08:00

94 lines
3.1 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================
-- migrations_add_purchase_stockbuy_link.sql
-- 打通「采购申请」与「采购入库」的按单入库链路
--
-- 变更内容:
-- 1. purchase_request 表新增 base_id 列FK → material_base.id
-- 2. stock_buy 表新增 request_id 列FK → purchase_request.id
--
-- 执行方式(任选一种):
-- psql -h <host> -U postgres -d inventory_system -f migrations_add_purchase_stockbuy_link.sql
-- 或在 pgAdmin / Navicat / DBeaver 中打开执行
-- ============================================================
BEGIN;
-- ============================================================
-- 1. purchase_request 新增 base_id
-- 硬关联基础物料表,使采购申请能精确锁定物料
-- ============================================================
ALTER TABLE purchase_request
ADD COLUMN IF NOT EXISTS base_id INTEGER;
-- 添加外键约束(如果列已存在但无约束,会补充)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_purchase_request_base_id'
AND table_name = 'purchase_request'
) THEN
ALTER TABLE purchase_request
ADD CONSTRAINT fk_purchase_request_base_id
FOREIGN KEY (base_id) REFERENCES material_base(id)
ON DELETE SET NULL;
END IF;
END;
$$;
-- 为 base_id 添加索引(支持按物料筛选采购申请)
CREATE INDEX IF NOT EXISTS ix_purchase_request_base_id
ON purchase_request (base_id);
COMMENT ON COLUMN purchase_request.base_id IS '关联基础物料ID';
-- ============================================================
-- 2. stock_buy 新增 request_id
-- 关联采购申请单,使入库记录可追溯到来源采购单
-- ============================================================
ALTER TABLE stock_buy
ADD COLUMN IF NOT EXISTS request_id INTEGER;
-- 添加外键约束
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_stock_buy_request_id'
AND table_name = 'stock_buy'
) THEN
ALTER TABLE stock_buy
ADD CONSTRAINT fk_stock_buy_request_id
FOREIGN KEY (request_id) REFERENCES purchase_request(id)
ON DELETE SET NULL;
END IF;
END;
$$;
-- 为 request_id 添加索引(支持"按单查入库"的追溯查询)
CREATE INDEX IF NOT EXISTS ix_stock_buy_request_id
ON stock_buy (request_id);
COMMENT ON COLUMN stock_buy.request_id IS '关联采购申请单ID';
-- ============================================================
-- 3. 验证结果
-- ============================================================
SELECT
column_name,
data_type,
is_nullable,
pg_catalog.col_description(
(SELECT c.oid FROM pg_catalog.pg_class c
WHERE c.relname = table_name),
ordinal_position
) AS comment
FROM information_schema.columns
WHERE table_name IN ('purchase_request', 'stock_buy')
AND column_name IN ('base_id', 'request_id')
ORDER BY table_name, column_name;
COMMIT;