where('start_time', '<' ,$date_time) ->where('end_time', '>=', $date_time) ->where([ 'status' => Guess::STATUS_ABLE, 'prize_state' => Guess::PRIZE_UNEXIST ])->with(['options'])->first(); if ($info == null) { return $this->error('暂时没有开始的竞猜活动'); } return GuessResource::make($info); } public function guessNewContent(Request $request) { $date_time = date('Y-m-d H:i:s'); $info = Guess::query() ->where([ 'status' => Guess::STATUS_ABLE, ])->with(['options'])->first(); if ($info == null) { return $this->error('暂时没有开始的竞猜活动'); } return GuessResource::make($info); } /** * 用户竞猜结果 * * @param Request $request * @return void */ public function guessResult(Request $request) { $user = auth('api')->user(); $list = UserGuess::query()->where('user_id', $user->id) ->with(['guess.options', 'options'])->orderByDesc('id')->get(); return UserGuessResource::collection($list)->additional(['code' => Response::HTTP_OK, 'message' => '']); } /** * 竞猜 * */ public function userGuess(Request $request) { $request->validate([ 'guess_id' => 'required', 'options_id' => 'required|array' ]); $user = auth('api')->user(); if (!$user->phone || $user->phone == "") { return $this->error("未绑定用户手机号码"); } $date_time = date('Y-m-d H:i:s'); $info = Guess::query() ->where('start_time', '<' ,$date_time) ->where('end_time', '>=', $date_time) ->where([ 'status' => Guess::STATUS_ABLE, 'prize_state' => Guess::PRIZE_UNEXIST ])->with(['options'])->first(); if (!$info) { return $this->error('暂时没有开始的竞猜活动'); } if ($info->id != $request->guess_id) { return $this->error("该活动已经结束或者关闭"); } if ($info->prize_state == Guess::PRIZE_EXIST) { return $this->error("竞猜结果已经公布"); } if (sizeof($request->options_id) != $info->num) { return $this->error("此次竞猜只能选择{$info->num}个选项"); } if (UserGuess::query()->where(['guess_id' => $info->id , 'user_id'=> $user->id])->exists()) { return $this->error('每轮竞猜,只能进行一次'); } $data = []; $user_guess_id = 0; foreach ($request->options_id as $key => $value) { # code... if (!$info->options->firstWhere('id', $value)) { return $this->error('请选择竞猜内的选项'); } $data[] = ['user_guess_id'=> &$user_guess_id, 'guess_option_id' => $value]; } try { DB::beginTransaction(); //code... $user_guess_info = UserGuess::query()->create([ 'guess_id' => $info->id, 'user_id' => $user->id, 'correct_state' => UserGuess::UN_SET, 'prize_state' => UserGuess::PRIZE_UN_SET, 'prize' => null ]); $user_guess_id = $user_guess_info->id; DB::table('user_guess_option')->insert($data); DB::commit(); } catch (\Throwable $th) { //throw $th; DB::rollBack(); logger('+++抽奖失败+++', [$th]); return $this->error("抽奖失败"); } return $this->success("抽奖成功"); } public function shareCode (Request $request) { $request->validate([ 'path' => 'required', // 'width' => '' ]); $path = 'miniProgram/app_code/guess'; if (Storage::disk()->exists($path.'/'. md5($request->path).'.png')) { return $this->success(['path' => Storage::url($path.'/'. md5($request->path).'.png')]); } $miniProgram = \EasyWeChat::miniProgram(); $response = $miniProgram->app_code->get($request->path, [ 'width' => $request->input('width',430) ]); if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) { // $filename = $response->saveAs('../storage/app/public/miniProgram/app_code/guess', 'appcode.png'); Storage::put($path.'/'. md5($request->path).'.png', $response->getBody()->getContents()); } return $this->success(['path' => Storage::url($path.'/'. md5($request->path).'.png')]); } }