'require|checkActivity|checkUser', ]; protected $message = [ 'id.require' => '参数缺失', ]; public function sceneLottery() { return $this->only(['id']); } public function sceneRecord() { return $this->only(['id']) ->remove('id', 'checkActivity|checkUser'); } public function sceneActivity() { return $this->only(['id']) ->remove('id', 'checkActivity|checkUser'); } public function sceneWinningList() { return $this->only(['id']) ->remove('id', 'checkActivity|checkUser'); } /** * @notes 校验活动 * @param $id * @return bool|string * @author Tab * @date 2021/11/24 17:18 */ public function checkActivity($value, $rule, $data) { $activity = LuckyDraw::findOrEmpty($data['id']); if ($activity->isEmpty()) { return '活动不存在'; } if ($activity->status != LuckyDrawEnum::ING) { return '活动未开始或已结束'; } if ($activity->start_time > time()) { return '活动未开始'; } if ($activity->end_time <= time()) { return '活动已结束'; } return true; } /** * @notes 校验用户 * @author Tab * @date 2021/11/24 17:22 */ public function checkUser($value, $rule, $data) { $activity = LuckyDraw::findOrEmpty($data['id'])->toArray(); $user = User::findOrEmpty($data['user_id']); if ($user->isEmpty()) { return '用户不存在'; } $user = $user->toArray(); // 校验参与次数 if ($activity['frequency_type'] == 1 && (int)$activity['frequency'] <= $this->joinCount($data)) { return '今天抽奖次数已用完'; } if ((int)$user['user_integral'] < $activity['need_integral']) { return '积分不足'; } return true; } /** * @notes 当天参与次数 * @param $userId * @author Tab * @date 2021/11/24 17:36 */ public function joinCount($data) { return LuckyDrawRecord::whereDay('create_time') ->where('user_id', $data['user_id']) ->where('activity_id', $data['id']) ->count(); } }