feat: 打通采购申请与入库的按单入库链路
后端变更: - PurchaseRequest 新增 base_id 硬关联 MaterialBase,StockBuy 新增 request_id 关联采购单 - handle_inbound 支持 request_id 入参,入库后自动反写采购单状态为已完成 - 新增 get_approved_requests 接口,返回已审批未入库采购单列表(含物料信息+历史数据回退匹配) - create_purchase_request 新增 name+spec_model 自动匹配 MaterialBase - 新增 SQL 和 Alembic 数据库迁移脚本 前端变更: - 入库表单新增"从采购单导入"弹窗,支持搜索/选中已审批采购单并一键填充物料和商务信息 - 单价/总价交叉推算,缺项自动补全 - 选中行蓝色高亮+点击整行选中,行级交互优化
This commit is contained in:
93
inventory-backend/migrations_add_purchase_stockbuy_link.sql
Normal file
93
inventory-backend/migrations_add_purchase_stockbuy_link.sql
Normal file
@ -0,0 +1,93 @@
|
||||
-- ============================================================
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user