211 Commits

Author SHA1 Message Date
win
8d8f660e34 Merge remote-tracking branch 'origin/zuncle' 2026-03-17 18:36:24 +08:00
c7cd3c21e5 feat(shipping): 发货订单超过48小时不允许撤销
- 在cancel_shipping.go中添加48小时限制检查
- 在shipping_groups.go中返回created_at字段供前端判断
- 超过48小时的订单撤销时提示'需要撤销发货请联系客服'
2026-03-17 18:11:00 +08:00
win
a450a92673 Merge origin/zuncle into main 2026-03-17 16:00:23 +08:00
win
c0267c7a33 feat(channel): GMV支付方式拆分(现金/优惠券/积分)
后端:
- GMVBreakdown 结构体拆分 total/cash/coupon/points 四个维度
- calcGMVByTotalAmount 返回值改为 GMVBreakdown,SELECT 增加 actual_amount/discount_amount/points_amount
- StatsOverview/StatsDailyItem 新增 cash_cents/coupon_cents/points_cents 字段
- 测试数据增加优惠券场景,新增拆分断言

前端:
- API 接口类型同步增加 3 个拆分字段
- 概览区新增支付构成行:现金/优惠券/积分 各带金额和占比
2026-03-16 23:33:48 +08:00
win
8d1eef2f7f fix(channel): 修复渠道统计GMV重复计数和商城直购误计入
1. 排除商城直购(source_type=1):GMV和成本过滤条件从IN(1,2,3,4)改为IN(2,3,4)
2. 排除次卡免费使用订单(actual_amount=0):避免购买次卡和使用次卡双重计入GMV
   - source_type=4 一番赏使用次卡:1578单 44032元重复
   - source_type=3 对对碰使用次卡:422单 7042元重复
   - 合计去除51074元虚增GMV(29.1%)
3. 成本过滤条件同步修正:source_type IN(2,3,4),total_amount>0

修正后:GMV从175600降至124527元,毛利率从37.4%回到真实的11.8%
2026-03-16 21:41:39 +08:00
fac825245b fix: 修复赠送流程地址归属错误,强制登录后才能填写收货地址
接收者未登录时提交地址会错误保存到赠送者名下,现改为:
- API层:登录态从可选改为必选,未登录返回401
- Service层:始终用提交者ID作为地址归属人
2026-03-15 13:23:09 +08:00
win
98694b4e69 revert: 移除转赠资产禁止兑换积分的限制
经数据核实,转赠后兑换积分属于合法行为(资产转赠后归接收方所有)。
并发漏洞虽然产生了重复转赠/发货记录,但实际经济损失为 0 元:
- 18 个重复发货资产中,没有任何一个真正被两方都发了货
- 没有任何资产被重复兑换积分

保留前两个并发修复(SELECT FOR UPDATE + RowsAffected 检查),
回退第三个业务限制(禁止转赠资产兑换积分)。
2026-03-15 13:23:09 +08:00
win
9cf9f798bb fix(security): 修复赠送资产薅积分三大漏洞
1. SELECT FOR UPDATE 锁定资产行,防止并发转赠竞态条件
2. 检查 RowsAffected 防止 GORM 静默失败导致空壳发货记录
3. 兑换积分时校验转赠来源,禁止转赠资产兑换积分
4. 转赠来源校验改用写库查询,避免主从延迟绕过
5. 转赠来源查询错误不再静默忽略,失败时返回错误

基于 zuncle 分支修复,额外修正了两个安全隐患:
- RedeemInventoryToPoints/RedeemInventoriesToPoints 中
  转赠记录查询从 readDB 改为 writeDB
- Count()/Find() 返回的 error 不再丢弃
2026-03-15 13:23:09 +08:00
win
749464c03e revert: 移除转赠资产禁止兑换积分的限制
经数据核实,转赠后兑换积分属于合法行为(资产转赠后归接收方所有)。
并发漏洞虽然产生了重复转赠/发货记录,但实际经济损失为 0 元:
- 18 个重复发货资产中,没有任何一个真正被两方都发了货
- 没有任何资产被重复兑换积分

保留前两个并发修复(SELECT FOR UPDATE + RowsAffected 检查),
回退第三个业务限制(禁止转赠资产兑换积分)。
2026-03-11 16:51:27 +08:00
win
8229b41382 fix(security): 修复赠送资产薅积分三大漏洞
1. SELECT FOR UPDATE 锁定资产行,防止并发转赠竞态条件
2. 检查 RowsAffected 防止 GORM 静默失败导致空壳发货记录
3. 兑换积分时校验转赠来源,禁止转赠资产兑换积分
4. 转赠来源校验改用写库查询,避免主从延迟绕过
5. 转赠来源查询错误不再静默忽略,失败时返回错误

基于 zuncle 分支修复,额外修正了两个安全隐患:
- RedeemInventoryToPoints/RedeemInventoriesToPoints 中
  转赠记录查询从 readDB 改为 writeDB
- Count()/Find() 返回的 error 不再丢弃
2026-03-11 16:25:11 +08:00
bd91c0fad1 fix(transfer): 修复赠送资产并发漏洞及转赠积分薅取问题
- SubmitAddressShare 事务内 SELECT FOR UPDATE 锁定资产行,防止并发重复提交
- 检查 UPDATE RowsAffected,静默失败时回滚事务
- 防重检查从 readDB 移入事务内写库,消除主从延迟竞态
- RedeemInventoryToPoints/RedeemInventoriesToPoints 添加转赠来源校验,
  禁止通过转赠获得的资产兑换积分
2026-03-11 14:14:34 +08:00
win
91dd42ca1c feat(channel): 渠道统计新增盈亏计算并修复成本口径
后端:
- StatsOverview/StatsDailyItem 新增 cost/profit 字段
- 新增 calcPaidByPriceDraw 三路收入分类(抽奖/对对碰/一番赏)
- 新增 calcCostByInventory 成本计算(含道具卡倍数)
- 修复成本统计未过滤 source_type 导致直播间免费发奖资产被错误计入
- remark.go 新增 PkgID 解析支持一番赏订单

前端:
- 渠道统计弹窗新增"总成本"和"盈亏"卡片
- 趋势图新增"盈亏分析"Tab

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 02:29:19 +08:00
d45096d13f fix(refund): 修复退款后翻牌游戏资格未回收的问题
问题描述:
用户退单后,翻牌游戏资格会重新出现(被重置),但用户已经抽过奖了。
这导致用户可以通过退款获得额外的翻牌机会。

根本原因:
退款处理逻辑 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. 验证翻牌资格是否被正确回收
2026-03-08 16:01:39 +08:00
2aa7cdbd61 fix(shipping): 使用资产价值快照价格确保发货与分解价格一致
修复改价后发货价格与分解价格不一致的问题:
- 发货时优先使用 user_inventory.value_cents 快照价格
- 后台发货列表使用 shipping_records.price 存储的快照价格
- 确保盈亏统计时价格数据准确一致
2026-03-05 17:54:58 +08:00
win
a29669ccf6 chore: update web/admin revision 2026-03-05 12:53:29 +08:00
win
b3b63dcba2 admin 2026-03-05 12:50:06 +08:00
win
994a7ba0df 邀请关系 2026-02-27 17:51:38 +08:00
win
e0db8751f3 任务中心的问题 2026-02-27 16:07:12 +08:00
win
46a7253239 fix:订单同步 2026-02-27 00:08:02 +08:00
win
9972427cea fix: treat livestream pass orders as ticket price 2026-02-24 10:02:11 +08:00
win
8b7af03400 feat(prize): freeze value snapshots across grant redeem refund and reports 2026-02-21 22:16:20 +08:00
win
70e45b09ab feat(prize): add reward/inventory value snapshot schema 2026-02-21 22:16:10 +08:00
win
7e8a2ebb52 feat: Add user spending dashboard, update database schema, and refine various API endpoints and service logic. 2026-02-21 21:33:19 +08:00
ec035ffb53 任务大厅,限量显示 2026-02-19 19:55:25 +08:00
af1c16c7c5 优惠券bug 2026-02-18 23:23:34 +08:00
58baa11a98 fix:优惠券购买次卡bug 2026-02-10 01:17:15 +08:00
e124f8d4ff 优化钱 2026-02-08 17:19:27 +08:00
fbdaf77eda x 2026-02-06 16:49:27 +08:00
029ed489bc x 2026-02-06 15:18:16 +08:00
571cb2f4db add: 仪表盘 2026-02-04 12:44:37 +08:00
9eea272d69 统计更新 2026-02-03 17:44:02 +08:00
9214501756 x 2026-02-02 23:56:35 +08:00
25c44c2064 x 2026-02-02 23:56:01 +08:00
55e22086e8 201 2026-02-01 00:27:38 +08:00
1a8f94d7b8 fix 2026-01-29 19:25:16 +08:00
f8624cca49 delete 2026-01-28 21:41:47 +08:00
ff404e21f0 x 2026-01-28 21:38:44 +08:00
021ab34c75 add:opencode 2026-01-28 21:36:36 +08:00
6d33cc7fd0 fix:盈亏计算 2026-01-27 01:33:32 +08:00
5ad2f4ace3 feat: 保存当前开发进度 - 直播抽奖验证功能 2026-01-18 01:55:54 +08:00
b21e2db8ef feat: 添加抖音商品奖励功能,并增强后台用户列表统计数据、邀请人数及道具数量展示。 2026-01-08 10:13:29 +08:00
e3a96e68d8 fix: 修复退款时清理一番赏格位、积分兑换商品库存校验及抖音登录自邀问题。 2026-01-06 01:46:25 +08:00
359ca9121f chore: 添加定时开奖和抖店同步的调试与信息日志 2026-01-04 22:58:38 +08:00
fb6dc1e434 feat: 新增抖音登录功能、管理端次数卡及套餐管理接口,并引入配置迁移工具。 2026-01-04 01:40:11 +08:00
e8bfff8261 feat: 新增抖音订单、游戏通行证、快照回滚、短信登录及管理后台功能,并优化支付、活动与用户服务模块,同时清理旧文档 2026-01-02 12:38:03 +08:00
4a582997d1 feat: 引入活动抽奖策略槽位选择功能,新增用户库存发货单号字段,并优化支付与活动服务集成。 2025-12-26 18:15:15 +08:00
8eb28465a2 feat: 新增用户地址更新功能并优化抽奖结果展示,支持显示订单所有抽奖记录 2025-12-26 12:44:29 +08:00
2838ccb4c7 feat: 商店商品展示新增所需积分,抽奖策略强制使用活动承诺种子,并新增用户过期任务和游戏令牌服务 2025-12-26 12:22:32 +08:00
5710b977e0 feat: minesweeper dynamic config and granular rewards 2025-12-24 17:33:13 +08:00
6435226f6d refactor: 优化订单时间字段处理及数据库模型结构调整
- 将订单的PaidAt和CancelledAt从指针类型改为值类型
- 统一时间字段的判空逻辑,使用IsZero()替代nil检查
- 调整多个数据库模型结构,添加新字段并优化字段顺序
- 为活动奖励设置、用户邀请等表添加新字段
- 更新对应的DAO层代码以匹配模型变更
2025-12-23 23:37:59 +08:00