赠送套餐逻辑
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s

This commit is contained in:
2026-04-28 17:40:06 +08:00
parent 516a7f5bdf
commit 37b4483183
34 changed files with 1172 additions and 60 deletions

View File

@@ -0,0 +1,18 @@
-- 回滚套餐价格状态、赠送策略及人工复核清单表
DROP TABLE IF EXISTS tb_package_price_review_queue;
ALTER TABLE tb_package_usage
DROP COLUMN IF EXISTS package_is_gift,
DROP COLUMN IF EXISTS package_price_config_status;
ALTER TABLE tb_order_item
DROP COLUMN IF EXISTS package_is_gift,
DROP COLUMN IF EXISTS package_price_config_status;
ALTER TABLE tb_shop_package_allocation
DROP COLUMN IF EXISTS retail_price_config_status;
ALTER TABLE tb_package
DROP COLUMN IF EXISTS is_gift,
DROP COLUMN IF EXISTS price_config_status;

View File

@@ -0,0 +1,108 @@
-- 为套餐价格回退与赠送策略补充价格状态、赠送标记和历史快照字段
-- 同时创建人工复核清单表,承接无法确认语义的历史 0 价数据
ALTER TABLE tb_package
ADD COLUMN IF NOT EXISTS price_config_status INT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS is_gift BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE tb_shop_package_allocation
ADD COLUMN IF NOT EXISTS retail_price_config_status INT NOT NULL DEFAULT 0;
ALTER TABLE tb_order_item
ADD COLUMN IF NOT EXISTS package_price_config_status INT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS package_is_gift BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE tb_package_usage
ADD COLUMN IF NOT EXISTS package_price_config_status INT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS package_is_gift BOOLEAN NOT NULL DEFAULT FALSE;
COMMENT ON COLUMN tb_package.price_config_status IS '价格配置状态 0-未配置 1-赠送0价 2-已配置非0';
COMMENT ON COLUMN tb_package.is_gift IS '是否赠送套餐 true-赠送 false-普通可售';
COMMENT ON COLUMN tb_shop_package_allocation.retail_price_config_status IS '零售价配置状态 0-未配置 1-赠送0价 2-已配置非0';
COMMENT ON COLUMN tb_order_item.package_price_config_status IS '套餐价格配置状态快照 0-未配置 1-赠送0价 2-已配置非0';
COMMENT ON COLUMN tb_order_item.package_is_gift IS '套餐是否赠送快照 true-赠送 false-普通可售';
COMMENT ON COLUMN tb_package_usage.package_price_config_status IS '套餐价格配置状态快照 0-未配置 1-赠送0价 2-已配置非0';
COMMENT ON COLUMN tb_package_usage.package_is_gift IS '套餐是否赠送快照 true-赠送 false-普通可售';
CREATE TABLE IF NOT EXISTS tb_package_price_review_queue (
id BIGSERIAL PRIMARY KEY,
package_id BIGINT NOT NULL,
package_name VARCHAR(255) NOT NULL DEFAULT '',
raw_suggested_retail_price BIGINT NOT NULL DEFAULT 0,
review_reason VARCHAR(255) NOT NULL DEFAULT '',
review_status INT NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE tb_package_price_review_queue IS '套餐价格人工复核清单';
COMMENT ON COLUMN tb_package_price_review_queue.package_id IS '套餐ID';
COMMENT ON COLUMN tb_package_price_review_queue.package_name IS '套餐名称快照';
COMMENT ON COLUMN tb_package_price_review_queue.raw_suggested_retail_price IS '原始建议售价';
COMMENT ON COLUMN tb_package_price_review_queue.review_reason IS '复核原因';
COMMENT ON COLUMN tb_package_price_review_queue.review_status IS '复核状态 0-待处理 1-已处理';
-- 非 0 售价直接视为已配置非 0
UPDATE tb_package
SET price_config_status = 2,
is_gift = FALSE
WHERE suggested_retail_price > 0;
-- 显式识别“后台创建订单且 0 元成交,且未进入代理分配”的赠送套餐
UPDATE tb_package p
SET price_config_status = 1,
is_gift = TRUE
WHERE p.suggested_retail_price = 0
AND EXISTS (
SELECT 1
FROM tb_order_item oi
JOIN tb_order o ON o.id = oi.order_id
WHERE oi.package_id = p.id
AND oi.unit_price = 0
AND o.source = 'admin'
AND o.payment_status = 2
)
AND NOT EXISTS (
SELECT 1
FROM tb_shop_package_allocation spa
WHERE spa.package_id = p.id
AND spa.deleted_at IS NULL
AND spa.allocator_shop_id > 0
);
-- 其余历史 0 价统一回填为“未配置”,并进入人工复核清单
INSERT INTO tb_package_price_review_queue (package_id, package_name, raw_suggested_retail_price, review_reason)
SELECT p.id,
p.package_name,
p.suggested_retail_price,
'历史 0 价无法确认是否为赠送,已回填为未配置'
FROM tb_package p
WHERE p.suggested_retail_price = 0
AND p.price_config_status = 0
AND NOT EXISTS (
SELECT 1
FROM tb_package_price_review_queue q
WHERE q.package_id = p.id
);
-- 分配记录:显式非 0 视为已配置,其余继承套餐层语义
UPDATE tb_shop_package_allocation spa
SET retail_price_config_status = CASE
WHEN spa.retail_price > 0 THEN 2
ELSE p.price_config_status
END
FROM tb_package p
WHERE p.id = spa.package_id;
-- 历史价格快照补齐价格状态和赠送语义
UPDATE tb_order_item oi
SET package_price_config_status = p.price_config_status,
package_is_gift = p.is_gift
FROM tb_package p
WHERE p.id = oi.package_id;
UPDATE tb_package_usage pu
SET package_price_config_status = p.price_config_status,
package_is_gift = p.is_gift
FROM tb_package p
WHERE p.id = pu.package_id;