feat(pricing): 开发定价方案
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
SET search_path TO atlas, public;
|
||||
|
||||
-- 固定函数查找路径,业务连接不依赖迁移会话的 search_path。
|
||||
ALTER FUNCTION invalidate_variant_pricing() SET search_path = atlas, public;
|
||||
|
||||
-- 防止数据库绕过接口拼接其他费率卡的运输规则。
|
||||
CREATE FUNCTION check_pricing_transport_card() RETURNS trigger LANGUAGE plpgsql SET search_path = atlas, public AS $$
|
||||
BEGIN
|
||||
IF TG_TABLE_NAME='logistics_rate_rules' THEN
|
||||
IF NOT EXISTS (SELECT 1 FROM logistics_product_types p JOIN logistics_transport_methods t ON t.rate_card_id=p.rate_card_id WHERE p.id=NEW.product_type_id AND t.id=NEW.transport_method_id) THEN
|
||||
RAISE EXCEPTION '物流类型和运输方式必须属于同一费率卡' USING ERRCODE='23514';
|
||||
END IF;
|
||||
ELSIF TG_TABLE_NAME='pricing_policies' THEN
|
||||
IF NEW.default_transport_method_id IS NOT NULL AND NOT EXISTS(SELECT 1 FROM logistics_transport_methods WHERE id=NEW.default_transport_method_id AND rate_card_id=NEW.rate_card_id) THEN
|
||||
RAISE EXCEPTION '方案默认运输方式必须属于费率卡' USING ERRCODE='23514';
|
||||
END IF;
|
||||
ELSE
|
||||
IF NOT EXISTS(SELECT 1 FROM pricing_policies p JOIN logistics_transport_methods t ON t.rate_card_id=p.rate_card_id WHERE p.id=NEW.pricing_policy_id AND p.workspace_id=NEW.workspace_id AND t.id=NEW.transport_method_id) THEN
|
||||
RAISE EXCEPTION '方案比较方式必须属于费率卡' USING ERRCODE='23514';
|
||||
END IF;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END $$;
|
||||
CREATE CONSTRAINT TRIGGER logistics_transport_card AFTER INSERT OR UPDATE ON logistics_rate_rules DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION check_pricing_transport_card();
|
||||
CREATE CONSTRAINT TRIGGER policy_transport_card AFTER INSERT OR UPDATE ON pricing_policies DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION check_pricing_transport_card();
|
||||
CREATE CONSTRAINT TRIGGER policy_comparison_card AFTER INSERT OR UPDATE ON pricing_policy_transport_methods DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION check_pricing_transport_card();
|
||||
Reference in New Issue
Block a user