📦 数据库 - lottery_issues(期次表) - lottery_tickets(购票记录表) - lottery_pool_logs(奖池流水表,透明展示) 🔩 核心组件 - LotteryIssue / LotteryTicket / LotteryPoolLog 完整 Model - LotteryService:购票/机选/开奖/奖池派发/滚存/超级期预热/公屏广播 - LotteryController:current/buy/quickPick/history/my 五个接口 - DrawLotteryJob(每日定时开奖)/ OpenLotteryIssueJob(初始化首期) 💰 货币日志 - CurrencySource 新增 LOTTERY_BUY / LOTTERY_WIN - 所有金币变动均通过 UserCurrencyService::change() 记录流水 🗓️ 调度器 - 每分钟检查停售/开奖时机 - 每日 18:00 超级期预热广播 🔧 配置 - GameConfigSeeder 追加 lottery 默认配置(默认关闭) - /games/enabled 接口追加 lottery 开关状态 - 新增 /lottery/* 路由组(auth 保护)
84 lines
2.0 KiB
PHP
84 lines
2.0 KiB
PHP
<?php
|
||
|
||
/**
|
||
* 文件功能:双色球购票记录 Model
|
||
*
|
||
* 每条记录对应一注彩票(一组选号),包含开奖后的中奖等级与派奖金额。
|
||
*
|
||
* @author ChatRoom Laravel
|
||
*
|
||
* @version 1.0.0
|
||
*/
|
||
|
||
namespace App\Models;
|
||
|
||
use Illuminate\Database\Eloquent\Model;
|
||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||
|
||
class LotteryTicket extends Model
|
||
{
|
||
protected $fillable = [
|
||
'issue_id',
|
||
'user_id',
|
||
'red1', 'red2', 'red3', 'blue',
|
||
'amount',
|
||
'is_quick_pick',
|
||
'prize_level',
|
||
'payout',
|
||
];
|
||
|
||
/**
|
||
* 字段类型转换。
|
||
*/
|
||
protected function casts(): array
|
||
{
|
||
return [
|
||
'is_quick_pick' => 'boolean',
|
||
'prize_level' => 'integer',
|
||
'payout' => 'integer',
|
||
'amount' => 'integer',
|
||
];
|
||
}
|
||
|
||
// ─── 关联 ──────────────────────────────────────────────────────────
|
||
|
||
/**
|
||
* 关联的期次。
|
||
*/
|
||
public function issue(): BelongsTo
|
||
{
|
||
return $this->belongsTo(LotteryIssue::class, 'issue_id');
|
||
}
|
||
|
||
/**
|
||
* 关联的购票用户。
|
||
*/
|
||
public function user(): BelongsTo
|
||
{
|
||
return $this->belongsTo(User::class);
|
||
}
|
||
|
||
// ─── 业务方法 ──────────────────────────────────────────────────────
|
||
|
||
/**
|
||
* 返回本注选号的格式化字符串(用于备注和展示)。
|
||
*
|
||
* @return string 如:红03 08 12 蓝4
|
||
*/
|
||
public function numbersLabel(): string
|
||
{
|
||
return sprintf(
|
||
'红%02d %02d %02d 蓝%d',
|
||
$this->red1, $this->red2, $this->red3, $this->blue
|
||
);
|
||
}
|
||
|
||
/**
|
||
* 是否已中奖。
|
||
*/
|
||
public function isWon(): bool
|
||
{
|
||
return $this->prize_level > 0;
|
||
}
|
||
}
|