hasMany('LotteryPrize', 'activity_id'); } /** * 关联参与条件 */ public function conditions() { return $this->hasMany('LotteryCondition', 'activity_id'); } /** * 关联抽奖记录 */ public function drawRecords() { return $this->hasMany('LotteryDrawRecord', 'activity_id'); } /** * 关联中奖记录 */ public function winRecords() { return $this->hasMany('LotteryWinRecord', 'activity_id'); } /** * 关联用户机会 */ public function userChances() { return $this->hasMany('LotteryUserChance', 'activity_id'); } /** * 获取状态文本 */ public function getStatusTextAttr($value, $data) { $status = [ self::STATUS_DRAFT => '草稿', self::STATUS_RUNNING => '进行中', self::STATUS_ENDED => '已结束', self::STATUS_PAUSED => '已暂停' ]; return isset($status[$data['status']]) ? $status[$data['status']] : '未知'; } /** * 获取开奖方式文本 */ public function getLotteryTypeTextAttr($value, $data) { $types = [ self::LOTTERY_TYPE_INSTANT => '即抽即中', self::LOTTERY_TYPE_TIME => '按时间开奖', self::LOTTERY_TYPE_PEOPLE => '按人数开奖' ]; return isset($types[$data['lottery_type']]) ? $types[$data['lottery_type']] : '未知'; } /** * 获取用户群体类型文本 */ public function getUserLimitTypeTextAttr($value, $data) { $types = [ self::USER_LIMIT_ALL => '全部会员', self::USER_LIMIT_LEVEL => '会员等级', self::USER_LIMIT_TAG => '会员标签' ]; return isset($types[$data['user_limit_type']]) ? $types[$data['user_limit_type']] : '未知'; } /** * 获取用户限制值(自动解析JSON) */ public function getUserLimitValueAttr($value, $data) { return $value ? json_decode($value, true) : []; } /** * 设置用户限制值(自动转换JSON) */ public function setUserLimitValueAttr($value) { return is_array($value) ? json_encode($value) : $value; } /** * 检查活动是否正在进行 */ public function isRunning() { $now = time(); return $this->status == self::STATUS_RUNNING && $this->start_time <= $now && $this->end_time >= $now; } /** * 检查活动是否已结束 */ public function isEnded() { $now = time(); return $this->status == self::STATUS_ENDED || $this->end_time < $now; } /** * 检查是否在抽奖时间内 */ public function isInDrawTime() { if (!$this->draw_time_enable) { return true; } $currentTime = date('H:i'); return $currentTime >= $this->draw_time_start && $currentTime <= $this->draw_time_end; } /** * 获取正在进行的活动 */ public static function getRunningActivities() { $now = time(); return static::where('status', self::STATUS_RUNNING) ->where('start_time', '<=', $now) ->where('end_time', '>=', $now) ->select(); } }