Files
lotteryLaravel/AGENTS.md
kang 395e1c7400 feat: refactor super admin to use is_super_admin flag and enhance site deletion logic
- Changed super admin detection from role-based to `is_super_admin` flag in AdminUser model
- Added `requireDefaultAdminSiteId()` method to throw validation error when no integration site exists
- Enhanced site deletion to migrate platform role bindings to fallback site and auto-delete site-specific admin accounts
- Made agent line code optional with auto-generation fallback using `{site_code}-agent-{counter}` format
2026-06-12 20:47:40 +08:00

4.6 KiB
Raw Blame History

lotterLaravel — Agent 须知

数据库:禁止擅自清空

未经用户明确同意,不得执行:

禁止 说明
php artisan migrate:fresh 删表重建,业务数据全失
php artisan db:wipe 清空所有表
php -r / 脚本中的 migrate:freshdb:wipe 易误连 .env 开发库(如 pgsql / lottery

可以做的: php artisan migrate(增量)、php artisan test(走 phpunit.xml 的 SQLite 内存库)。

用户明确要求 migrate:fresh 时:先说明目标库名与数据将全部丢失,待用户确认后再执行。

详见 .cursor/rules/database-destructive-commands.mdc

后台 RBAC

app/Support/AdminAuthorizationRegistry.php 后,在已有库执行 php artisan lottery:admin-auth-sync --audit(见 docs/admin-rbac.md)。migrate:fresh --seed 会走迁移内的 resync一般不必再手动 sync。

双模式玩家(主站钱包 / 代理信用)

  • players.auth_sourcemain_site_sso(主站 JWTlottery_native(彩票端账号密码)。
  • players.funding_modewallet(主站划转)与 credit(授信下注);禁止仅用整站 credit_line_mode 代替玩家级判断,用 PlayerFundingMode::usesCredit($player)
  • 生产环境配置独立 LOTTERY_NATIVE_JWT_SECRET(勿与主站 SSO 混用)。

信用占成盘(代理账期结算)

  • 业务真理源:docs/信用占成盘代理系统设计说明文档.md;实施路线:docs/信用占成盘代理体系改造计划.md
  • 代理账期代码包:App\Services\AgentSettlement\(勿与彩票开奖 App\Services\Settlement\ / SettlementBatch 混用)。
  • 禁止在生产关账路径使用 DesignDocExample12 硬编码账单;仅单元/Feature 测试可引用。
  • testing 环境关账受 AGENT_SETTLEMENT_ALLOW_PRODUCTION_CLOSE(默认 true)控制;预发可设为 false 门禁。
  • 占成账单聚合必须读注单快照share_snapshot),禁止按当前 agent_profiles 重算历史。

接入站点与超管

  • 超管身份:admin_users.is_super_admin禁止admin_user_site_roles 绑站全库仅一名DB partial unique index
  • 零站点:admin_sites 可为 0defaultAdminSiteId() 无站返回 null超管仍可登录需站点的写操作用 requireDefaultAdminSiteId()no_integration_site
  • 删接入站DELETE API/UI默认站亦可删含最后一个仅删除仅绑 site_admin_{code} 的自动账号,不得删超管。

Learned Workspace Facts

  • 期号 close_time / draw_time 以 UTC 存储与比较;后台展示转浏览器本地时区,创建/编辑表单提交前须转回 UTC。
  • 下注是否开放由 DrawHallSnapshotBuilder::isBettingOpen() / effectiveHallDisplayStatus() 实时判定,不只看 draws.status
  • 后台期号列表展示数据库 status;详情 API 另提供 hall_preview_status 供与大厅预览态对比。
  • 绑定经营代理主账号统一绑平台角色 slug=agent,模板仅含 prd.settlement.agent.view;登录态对 所有绑定代理主账号 自动补足 settlement.agent.manageAgentProfileCapabilityFilter),实际操作仍受直属边 + 收款方校验。
  • 结算中心登记收付/确认/坏账/补差 UI 需 prd.settlement.agent.managecanManage);仅 view 时操作区静默隐藏。另需账单 status ∈ confirmed/partial_paid/overdue 且 unpaid_amount > 0坏账核销 / 补差冲正 另需未绑定代理(站点财务,canFinanceAdjustments),绑定代理仅有收付/确认。
  • 结算账单可见范围(绑定代理):玩家账单仅直属玩家;代理账单owner=本节点counterparty=本节点(不含下级玩家的账单、不含更深层代理链)。账务流水/账期 pipeline 的玩家维度同样仅直属玩家。站点财务/超管仍见全站。
  • 登记收付/确认:绑定代理仅可操作 收款方(玩家账单=直属 counterparty代理账单=按 net_amount 方向的 payee。上级不能代登下级玩家收付下级也不能代登向上级的代理账单。
  • 收付/调账/坏账后端落库 payment_recordssettlement_adjustments;账期详情 收付与调账 Tab 查操作台账,账务流水 仅玩家信用变动;单张账单详情内另有该账单的收付列表。
  • 代理仪表盘/账期列表「输赢」用本级占成(share_profit),不可看 platform_pnl 全站报表。
  • 开/关账期仅未绑定代理的站点财务(canManagePeriods = canOperateBills && boundAgent === null)。