feat: add dashboard and virtual pay enhancements
This commit is contained in:
30
sql/virtual_pay_order_guard.sql
Normal file
30
sql/virtual_pay_order_guard.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
-- 资源虚拟支付:同一用户、同一规格有效订单防重
|
||||
-- 前置条件:已经执行 sql/virtual_pay_resource_specs.sql。
|
||||
-- 执行前请先备份数据库。
|
||||
|
||||
-- 下面的查询必须返回空结果。
|
||||
-- 如果存在结果,说明上线防重前已经产生重复待支付/已支付订单,
|
||||
-- 需要先结合微信订单状态人工核对,不能直接批量关闭或删除。
|
||||
SELECT user_id,
|
||||
resource_id,
|
||||
COALESCE(resource_list_id, 0) AS resource_list_key,
|
||||
COUNT(*) AS active_order_count,
|
||||
GROUP_CONCAT(order_no ORDER BY id) AS order_nos
|
||||
FROM app_virtual_order
|
||||
WHERE status IN (0, 1)
|
||||
GROUP BY user_id, resource_id, COALESCE(resource_list_id, 0)
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
-- status=0(待支付)和 status=1(已支付)共用一个唯一购买键。
|
||||
-- 退款或关闭后键值自动变为 NULL,允许用户重新购买。
|
||||
ALTER TABLE app_virtual_order
|
||||
ADD COLUMN active_purchase_key VARCHAR(80)
|
||||
GENERATED ALWAYS AS (
|
||||
CASE
|
||||
WHEN status IN (0, 1)
|
||||
THEN CONCAT(user_id, ':', resource_id, ':', COALESCE(resource_list_id, 0))
|
||||
ELSE NULL
|
||||
END
|
||||
) STORED COMMENT '待支付/已支付订单防重键' AFTER last_query_time,
|
||||
ADD UNIQUE KEY uk_virtual_order_active_purchase (active_purchase_key);
|
||||
|
||||
Reference in New Issue
Block a user