外观
每日签到 · 技术实现
「玩家设定 →」
1. 代码位置
| 层 | 类 | 职责 |
|---|---|---|
| Controller | controller/DailySignInController(/api/daily/sign-in) | 状态查询/签到 |
| Service | service/DailySignInService | 签到判定(Asia/Shanghai 时区、Redis 缓存去重)、奖励发放 |
| repository | repository/DailySignInRepository | 签到记录持久化 |
| domain | domain/ShopBalanceRules | DAILY_SIGN_IN_REWARD_TICKETS = 1_000(每天 1000 福利点券) |
2. 数据表
| 表 | 关键列 | 说明 |
|---|---|---|
player_daily_sign_in | player_id、sign_date、reward_claimed | 签到记录(V56) |
3. 配置与常量
- 奖励常量:
ShopBalanceRules.DAILY_SIGN_IN_REWARD_TICKETS = 1_000(福利点券 4001) - 缓存键:
emberfall:daily:sign-in:<playerId>(Redis,DailySignInService) - yml 键:无
4. 数据流简述
GET /api/daily/sign-in/status 先查 Redis 缓存再查表判定今日是否已签。POST /api/daily/sign-in(根路径)按 Asia/Shanghai 时区取当日日期,未签则写入 player_daily_sign_in 并发放 1000 福利点券(inventory_item 4001),Redis 置位防重;已签返回错误码。事务提交后通过 TransactionSynchronization 写缓存。
5. 已知差异
无
6. 相关代码
- 商城(
ShopBalanceRules:福利点券 4001 发行体系) - 每日限额(
DailyLimitPool) - Redis 会话(
RedisAuthSessionStore:缓存基础设施)