# 09 每日666（for AI Agents）

> 关联代码：internal/service/daily666/（含 scheduler.go）、internal/model/daily666.go、internal/response/lottery_codes.go（2170 段）
> 小程序页面：pages/daily666/index/index；无独立管理页面（全部 KV 配置驱动）

====================================================================
1. 功能概述
====================================================================

每日666（Daily666）：平台级每日定时开奖活动——每天 20:00（KV 可调）开奖一次：666 元大奖 1 名 + 随机小额红包若干（默认 0.1~2 元 ×3000 份），用户每日免费参与一次。目的是每日回访钩子。中奖红包走钱包余额累积制（不直接提现单笔，累积后统一提现）。

====================================================================
2. 底层逻辑
====================================================================

2.1 模型
- Daily666Event：当日活动实例。
- Daily666Participant：参与记录（每日一次，2170 已参与）。
- Daily666Winner：中奖记录；红包入账带 Credited 幂等标记（余额累积制：开奖后统一入账 UserWallet，见 10）。

2.2 定时开奖
- Scheduler 每 30 秒轮询；开奖时点 KV：daily666.draw_hour（默认 20）/ daily666.draw_minute（默认 0）。
- 参与截止与活动开关：daily666.enabled；关闭后小程序入口隐藏/接口拒绝（2172/2173 段：参与已截止/活动未开启；2174 风控拦截）。

2.3 KV 配置全表（model.Config，无后台专属页面，经配置服务修改或直改 KV）
- daily666.enabled：开关
- daily666.draw_hour / daily666.draw_minute：开奖时点
- daily666.jackpot_fen：大奖金额（默认 66600 分）
- daily666.random_count：随机红包份数（默认 3000）
- daily666.random_min_fen / random_max_fen：随机红包区间（默认 10~200 分）
- daily666.daily_budget_fen：当日预算护栏

2.4 订阅提醒
- 开奖结果订阅消息（wechat.subscribe_msg.daily666_result 模板）；模板未配置时小程序隐藏订阅按钮。

====================================================================
3. 后台操作
====================================================================

无专属管理页面。运营动作：
- 调整玩法参数/开关：改 KV 配置（无页面入口时由开发/DBA 直改 Config 表对应键，或经通用配置接口；改完即时生效）。
- 观察参与/中奖数据：运营驾驶舱（见 17）看 DAU/开奖后活跃；明细查 Daily666* 三表。

3.1 后台操作逻辑备注（隐藏约束，UI 不直接体现）
- KV 改完不重启，Scheduler 下次轮询（≤30s）即读取新值生效。
- 开奖为单向操作：一旦执行不可回滚/重开；当日已开奖后改 draw_hour/draw_minute 只影响次日。
- daily_budget_fen 为硬护栏：累计红包金额触及预算后剩余份数跳过不补发，不会二次开奖。
- Credited 幂等标记保证同一中奖记录重复处理不会重复入 UserWallet 余额。
- enabled 关闭后：小程序入口隐藏 + join 接口返回 2173；已参与的记录与开奖不受影响。
- 随机红包金额在 [random_min_fen, random_max_fen] 区间均匀随机，非加权；调整区间立即影响下一次开奖。

====================================================================
4. 小程序端操作
====================================================================

pages/daily666/index/index（首页「每日666」入口）：
- 展示当日状态、开奖倒计时、我的参与态、「昨日结果」。
- 「参与」→ POST /api/mp/daily666/join（已参与返回 2170）。
- 订阅提醒按钮（模板配置可用时展示）。
- 开奖后：GET /api/mp/daily666/result 查看结果；红包入账后去钱包（见 10）提现。

====================================================================
5. API 速查
====================================================================

GET  /api/mp/daily666/status             当日活动状态/我的参与态
POST /api/mp/daily666/join               参与当日活动
GET  /api/mp/daily666/result             当日/昨日开奖结果

====================================================================
6. 注意事项
====================================================================

- 红包为「余额累积制」：中奖金额入 UserWallet 余额（Credited 幂等），不是即时的商家转账；用户感知路径 = 钱包余额变化。
- 首页/天天666 相关的「满1元可提现」静态文案在提现门槛（wallet.min_withdraw_fen）调整后可能不准确（已知边缘，属文案问题不是逻辑问题）。
- 开奖时点调整只影响下一次轮询判定，当日已开奖不重开。
- 已核实的错误码：2170 已参与、2172 参与已截止、2173 活动未开启、2174 风控拦截；2170-2179 整段保留给每日666（sentinel 在 service/daily666 包）。
