jxg/jinxiangguo-master/app/Http/Controllers/SignController.php

77 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Coin;
use App\Models\SignConfig;
use App\Models\User;
use App\Models\UserSign;
use App\Models\UserSignLog;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
class SignController extends Controller
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function config(Request $request)
{
$list = SignConfig::query()->get()->toArray();
return $this->success($list);
}
public function userSign(Request $request)
{
$user = $request->user()->toArray();
$config = SignConfig::query()->get()->keyBy('day')->toArray();
$info = UserSign::query()->where('user_id', $user['id'])->first();
$info = $info ? $info->toArray() : [];
if ($info && date('Y-m-d', strtotime($info['last_sign'])) == date('Y-m-d')) {
return $this->error('今天已经签到过了');
}
$series_days = $info ? $info['series_days'] + 1 : 1;
$continuity_days = 1;
$sign_reward = $config[$continuity_days]['number'];
// 连续签到
if ($info && date('Y-m-d', strtotime($info['last_sign']) + 86400) == date('Y-m-d')) {
$continuity_days = $info['continuity_days'] + 1;
$sign_reward = $config[$continuity_days]['number'];
}
UserSign::query()->where('user_id', $user['id'])->updateOrCreate(['user_id' => $user['id']], [
'series_days' => $series_days,
'continuity_days' => $continuity_days,
'last_sign' => date('Y-m-d H:i:s'),
]);
UserSignLog::query()->create([
'user_id' => $user['id'],
'sign_reward' => $sign_reward,
'sign_time' => date('Y-m-d H:i:s'),
]);
User::query()->where('id', $user['id'])->increment('amount', $sign_reward);
return $this->success();
}
public function userSignInfo(Request $request)
{
$user = $request->user()->toArray();
$log = UserSign::query()->where('user_id', $user['id'])->first();
if (!$log) {
return $this->success();
}
if (strtotime(date('Y-m-d', strtotime($log->last_sign))) < strtotime(date('Y-m-d', strtotime('-1 days')))) {
$log->continuity_days = 0;
$log->save();
}
$log->is_sign = date('Y-m-d', strtotime($log->last_sign)) == date('Y-m-d');
return $this->success($log->toArray());
}
}