feat: 08 订单与权益落地(金币解锁 / 权益判定生效 / 补发回收 / 对账)
为什么: 1) 第一阶段要能真正收到钱,而收钱方式是金币解锁分集。本提交把钱包、金币流水、 权益、订单四样打通,客户端可以解锁并立刻播放,不再只是展示。 2) 权益判定此前只是端口占位(一律视为未解锁)。交易模块用 @Primary 提供实现后, 播放入口与下载入口的付费判定同时生效 —— 两条链路一行没改。 3) 钱的事必须可追溯、可幂等:所有金币变动都带幂等键并写 coin_ledger, 余额与流水同事务;订单每次状态流转都写 order_event(月分区),支付争议可回溯。 4) 后台要能兜住线上问题:补发(重复提交幂等)、退款(回收权益 + 扣回金币, 余额不足时留人工跟进备注)、人工补币(先校验用户存在,避免给不存在的用户建钱包)、 手动对账(默认每天 04:20 自动跑前一天)。 5) 09 商店支付按约束只做端口预留:StoreVerifier 未接入时明确报"尚未配置", 宁可不收钱也不产生假订单。
This commit is contained in:
1 parent
af1dc48494
commit
7e730fbbca
37 files changed
+1467
-5
No files matched your search
+12
-1
@@ -46,6 +46,15 @@ INSERT INTO sys_permission (code, name, group_name, type, sort) VALUES
|
||||
('sensitive-word:update','维护敏感词', '内容治理', 'BUTTON', 116)
|
||||
ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
INSERT INTO sys_permission (code, name, group_name, type, sort) VALUES
|
||||
('order:list', '查看订单', '订单与权益', 'BUTTON', 121),
|
||||
('order:update', '补发/退款', '订单与权益', 'BUTTON', 122),
|
||||
('entitlement:list', '查看权益', '订单与权益', 'BUTTON', 123),
|
||||
('entitlement:update', '补发/回收权益', '订单与权益', 'BUTTON', 124),
|
||||
('wallet:update', '人工补币', '订单与权益', 'BUTTON', 125),
|
||||
('reconcile:run', '手动对账', '订单与权益', 'BUTTON', 126)
|
||||
ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
-- 超管默认拥有全部权限点
|
||||
INSERT INTO sys_role_permission (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
@@ -54,7 +63,9 @@ CROSS JOIN sys_permission p
|
||||
WHERE r.code = 'super_admin'
|
||||
AND p.code IN ('app-user:list', 'app-user:update', 'download:list', 'download:revoke',
|
||||
'comment:list', 'comment:audit', 'report:list', 'report:handle',
|
||||
'sensitive-word:list', 'sensitive-word:update')
|
||||
'sensitive-word:list', 'sensitive-word:update',
|
||||
'order:list', 'order:update', 'entitlement:list', 'entitlement:update',
|
||||
'wallet:update', 'reconcile:run')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- 第一阶段新增的白名单数据(当前阶段都是免费内容,先把演示商品占位好)
|
||||
|
||||
Reference in new issue
Block a user