WIP: fix(shipping): 使用资产价值快照价格确保发货与分解价格一致 #1

Draft
34310384 wants to merge 1 commits from zuncle into main
Collaborator

修复改价后发货价格与分解价格不一致的问题:

  • 发货时优先使用 user_inventory.value_cents 快照价格
  • 后台发货列表使用 shipping_records.price 存储的快照价格
  • 确保盈亏统计时价格数据准确一致
修复改价后发货价格与分解价格不一致的问题: - 发货时优先使用 user_inventory.value_cents 快照价格 - 后台发货列表使用 shipping_records.price 存储的快照价格 - 确保盈亏统计时价格数据准确一致
34310384 added 1 commit 2026-03-05 18:15:44 +08:00
修复改价后发货价格与分解价格不一致的问题:
- 发货时优先使用 user_inventory.value_cents 快照价格
- 后台发货列表使用 shipping_records.price 存储的快照价格
- 确保盈亏统计时价格数据准确一致
34310384 added 1 commit 2026-03-08 16:04:30 +08:00
问题描述:
用户退单后,翻牌游戏资格会重新出现(被重置),但用户已经抽过奖了。
这导致用户可以通过退款获得额外的翻牌机会。

根本原因:
退款处理逻辑 reclaimLivestreamAssets 只回收了 user_inventory 中的实物奖品,
但没有回收 user_game_tickets 中的翻牌游戏资格。

解决方案:
在 reclaimLivestreamAssets 函数后添加 reclaimFlipCardTicket 函数,
用于检测并回收翻牌游戏资格:

1. 通过 shop_order_id 查询抖店订单获取商品ID
2. 查询 douyin_product_rewards 表检查商品是否配置了翻牌游戏奖励
   - 检查 reward_type = 'game_ticket'
   - 检查 payload.game_code = 'flip_card'
3. 如果配置了翻牌奖励,回收用户的翻牌次数
   - 扣减 user_game_tickets.available
   - 扣减 user_game_tickets.total_earned
4. 在 game_ticket_logs 表中记录回收日志

影响范围:
- 仅影响配置了翻牌游戏奖励的商品订单退款
- 退款时会同步回收翻牌游戏资格
- 已使用过的翻牌次数不会被回收(只回收 available > 0 的记录)

测试建议:
1. 购买配置了翻牌奖励的商品
2. 进行翻牌游戏
3. 申请退款
4. 验证翻牌资格是否被正确回收
34310384 added 1 commit 2026-03-11 14:18:05 +08:00
- SubmitAddressShare 事务内 SELECT FOR UPDATE 锁定资产行,防止并发重复提交
- 检查 UPDATE RowsAffected,静默失败时回滚事务
- 防重检查从 readDB 移入事务内写库,消除主从延迟竞态
- RedeemInventoryToPoints/RedeemInventoriesToPoints 添加转赠来源校验,
  禁止通过转赠获得的资产兑换积分
This pull request is marked as a work in progress.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin zuncle:zuncle
git checkout zuncle
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: zfc/bindbox-game#1
No description provided.