feat(pricing): 开发定价方案

This commit is contained in:
R524809
2026-09-28 17:34:33 +08:00
parent a29dd92676
commit 84b230e69a
54 changed files with 6264 additions and 236 deletions
@@ -0,0 +1,37 @@
SET search_path TO atlas, public;
-- 审核通过的规则只能由新版本替代;应用角色不能直接修改已经用于报价的运价。
CREATE FUNCTION guard_reviewed_logistics_mutation() RETURNS trigger LANGUAGE plpgsql SET search_path = atlas, public AS $$
DECLARE
card_id UUID;
BEGIN
IF TG_TABLE_NAME='logistics_rate_cards' THEN
card_id := OLD.id;
ELSIF TG_TABLE_NAME IN ('logistics_product_types','logistics_transport_methods') THEN
IF TG_OP='DELETE' THEN card_id := OLD.rate_card_id;
ELSE card_id := NEW.rate_card_id; END IF;
ELSE
IF TG_OP='DELETE' THEN
SELECT rate_card_id INTO card_id FROM logistics_product_types WHERE id=OLD.product_type_id;
ELSE
SELECT rate_card_id INTO card_id FROM logistics_product_types WHERE id=NEW.product_type_id;
END IF;
END IF;
IF card_id IS NOT NULL THEN
PERFORM 1 FROM logistics_rate_cards WHERE id=card_id FOR SHARE;
IF EXISTS (SELECT 1 FROM logistics_rate_card_reviews WHERE rate_card_id=card_id) THEN
RAISE EXCEPTION '已审核的物流费率不可改写,请建立新版本' USING ERRCODE='23514';
END IF;
END IF;
IF TG_OP='DELETE' THEN RETURN OLD; END IF;
RETURN NEW;
END $$;
CREATE TRIGGER reviewed_card_immutable BEFORE UPDATE OR DELETE ON logistics_rate_cards
FOR EACH ROW EXECUTE FUNCTION guard_reviewed_logistics_mutation();
CREATE TRIGGER reviewed_type_immutable BEFORE INSERT OR UPDATE OR DELETE ON logistics_product_types
FOR EACH ROW EXECUTE FUNCTION guard_reviewed_logistics_mutation();
CREATE TRIGGER reviewed_method_immutable BEFORE INSERT OR UPDATE OR DELETE ON logistics_transport_methods
FOR EACH ROW EXECUTE FUNCTION guard_reviewed_logistics_mutation();
CREATE TRIGGER reviewed_rule_immutable BEFORE INSERT OR UPDATE OR DELETE ON logistics_rate_rules
FOR EACH ROW EXECUTE FUNCTION guard_reviewed_logistics_mutation();