160 lines
5.2 KiB
PHP
160 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\Miniprogram;
|
|
|
|
use App\Models\User;
|
|
use App\Models\Guess;
|
|
use App\Models\UserGuess;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\GuessResource;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use App\Http\Resources\UserGuessResource;
|
|
|
|
class GuessController extends Controller
|
|
{
|
|
//
|
|
public function index() {
|
|
|
|
}
|
|
|
|
public function guessContent(Request $request) {
|
|
$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 == 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')]);
|
|
}
|
|
}
|