iloom-flatten/migrations/20260524_170001_fix_auto_import_function.sql

97 lines
3.3 KiB
PL/PgSQL
Raw Permalink 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.

-- ============================================
-- 修复自动导入函数,让成品归属到采购商公司
-- ============================================
CREATE OR REPLACE FUNCTION auto_import_to_finished_products()
RETURNS TRIGGER LANGUAGE plpgsql SECURITY DEFINER SET search_path = public AS $$
DECLARE
v_washing_plan RECORD;
v_product RECORD;
v_warehouse RECORD;
v_finished_product_id UUID;
v_purchaser_company_id UUID; -- 采购商公司ID计划创建公司
BEGIN
-- 获取水洗计划信息同时获取采购商公司ID
SELECT wp.*, p.product_name, p.color, p.fabric_code, p.color_code, p.weight,
wp.company_id as purchaser_id -- 计划创建公司就是采购商
FROM washing_plans wp
JOIN products p ON wp.product_id = p.id
WHERE wp.id = NEW.washing_plan_id
INTO v_washing_plan;
IF v_washing_plan IS NULL THEN
RAISE EXCEPTION 'Washing plan not found';
END IF;
-- 采购商公司ID
v_purchaser_company_id := v_washing_plan.purchaser_id;
SELECT * FROM warehouses WHERE id = NEW.warehouse_id INTO v_warehouse;
-- 插入成品到采购商的成品仓库使用采购商company_id而非水洗厂
INSERT INTO finished_products (
company_id, washing_plan_id, product_id, product_name, color, fabric_code, color_code, weight,
washed_meters, shrinkage_rate, rolls, stock_meters, stock_rolls, warehouse_id, warehouse_location,
washing_cost, unit_cost, status, notes, created_by
) VALUES (
v_purchaser_company_id, -- 关键修复:归属到采购商公司
NEW.washing_plan_id,
v_washing_plan.product_id,
v_washing_plan.product_name,
v_washing_plan.color,
v_washing_plan.fabric_code,
v_washing_plan.color_code,
v_washing_plan.weight,
NEW.actual_washed_meters,
NEW.actual_shrinkage_rate,
NEW.rolls,
NEW.actual_washed_meters,
NEW.rolls,
NEW.warehouse_id,
NEW.warehouse_location,
NEW.actual_washing_cost,
NEW.unit_cost,
'in_stock',
NEW.notes,
NEW.completed_by
) RETURNING id INTO v_finished_product_id;
-- 插入入库记录(归属到采购商公司)
INSERT INTO finished_product_inventory_records (
company_id, finished_product_id, record_type, rolls, meters, washing_completion_id,
warehouse_id, warehouse_location, notes, batch_no, operator_id
) VALUES (
v_purchaser_company_id, -- 关键修复:归属到采购商公司
v_finished_product_id,
'inbound',
NEW.rolls,
NEW.actual_washed_meters,
NEW.id,
NEW.warehouse_id,
NEW.warehouse_location,
'水洗完成自动入库',
'WASH-' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || SUBSTRING(v_finished_product_id::text, 1, 8),
NEW.completed_by
);
-- 更新水洗计划状态
UPDATE washing_plans SET
actual_washed_meters = NEW.actual_washed_meters,
actual_shrinkage_rate = NEW.actual_shrinkage_rate,
actual_total_cost = NEW.actual_washing_cost,
status = 'completed',
washing_date = NEW.washing_date,
updated_at = NOW()
WHERE id = NEW.washing_plan_id;
-- 设置完成记录的关联信息
NEW.finished_product_id := v_finished_product_id;
NEW.auto_imported := TRUE;
RETURN NEW;
END;
$$;
-- 添加函数注释
COMMENT ON FUNCTION auto_import_to_finished_products() IS '水洗完成时自动导入成品到采购商的成品仓库';