127 lines
4.3 KiB
PHP
127 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Didi;
|
|
use App\Models\JTK;
|
|
use App\Models\PlatformCallback;
|
|
use App\Models\Task;
|
|
use App\Models\UserTask;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Http\Request;
|
|
|
|
class TaskController extends Controller
|
|
{
|
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
|
|
|
public function list(Request $request)
|
|
{
|
|
$uid = $request->user()->id;
|
|
$type = (int)$request->input('type', Task::TYPE_XS);
|
|
|
|
if ($type == Task::TYPE_SJ) {
|
|
return $this->listSJ($request);
|
|
}
|
|
|
|
$list = Task::query()
|
|
->where('status', \App\Models\Task::STATUS_OPEN)
|
|
->where('type', $type)
|
|
->get();
|
|
|
|
$userTask = UserTask::query()->where('user_id', $uid)->whereIn('task_id', $list->pluck('id'))
|
|
->whereBetween('created_at', [date('Y-m-d 00:00:00'), date('Y-m-d 23:59:59')])
|
|
->orderByDesc('updated_at')->get()->groupBy('task_id');
|
|
foreach ($list as $value) {
|
|
$value->user_number = isset($userTask[$value->id]) ? $userTask[$value->id]->count() : 0;
|
|
$value->user_task_status = isset($userTask[$value->id]) ? $userTask[$value->id]->first()->status : 0;
|
|
if ($value->user_task_status == UserTask::STATUS_X) {
|
|
$value->user_number = 0;
|
|
}
|
|
}
|
|
|
|
return $this->success($list);
|
|
}
|
|
|
|
private function listSJ(Request $request)
|
|
{
|
|
$uid = $request->user()->id;
|
|
|
|
$list = Task::query()
|
|
->where('status', \App\Models\Task::STATUS_OPEN)
|
|
->where('type', Task::TYPE_SJ)
|
|
->get();
|
|
|
|
$didi = new Didi();
|
|
$jtk = new JTK();
|
|
foreach ($list as $value) {
|
|
$value->platform_data = [];
|
|
$source_id = $value->id . '-' . $uid;
|
|
if ($value->platform == Task::PLATFORM_DIDI && $value->platform_id) {
|
|
$value->platform_data = $didi->generate($source_id, $value->platform_id);
|
|
} elseif ($value->platform == Task::PLATFORM_JTK && $value->platform_id) {
|
|
$value->platform_data = $jtk->generate($source_id, $value->platform_id);
|
|
}
|
|
}
|
|
|
|
$userTask = UserTask::query()->where('user_id', $uid)->whereIn('task_id', $list->pluck('id'))
|
|
->orderByDesc('updated_at')->get()->groupBy('task_id');
|
|
foreach ($list as $value) {
|
|
$value->user_number = isset($userTask[$value->id]) ? $userTask[$value->id]->count() : 0;
|
|
$value->user_task_status = isset($userTask[$value->id]) ? $userTask[$value->id]->first()->status : 0;
|
|
}
|
|
|
|
return $this->success($list);
|
|
}
|
|
|
|
public function save(Request $request)
|
|
{
|
|
$uid = $request->user()->id;
|
|
$task_id = (int)$request->input('id');
|
|
$content = (string)$request->input('content', '');
|
|
if (!$task_id) {
|
|
return $this->error('参数错误');
|
|
}
|
|
$task = Task::query()->find($task_id);
|
|
if (!$task) {
|
|
return $this->error('任务不存在');
|
|
}
|
|
|
|
UserTask::query()->create([
|
|
'user_id' => $uid,
|
|
'task_id' => $task_id,
|
|
'content' => $content,
|
|
]);
|
|
if ($task->type == Task::TYPE_XS) {
|
|
$count = UserTask::query()
|
|
->where(['user_id' => $uid, 'task_id' => $task_id])
|
|
->whereBetween('created_at', [date('Y-m-d 00:00:00'), date('Y-m-d 23:59:59')])
|
|
->count();
|
|
if ($count == $task->number) {
|
|
$user = \App\Models\User::query()->find($uid);
|
|
$user->amount += $task->award_number;
|
|
$user->save();
|
|
}
|
|
} else {
|
|
if ($task->action == Task::ACTION_GG) {
|
|
$user = \App\Models\User::query()->find($uid);
|
|
$user->amount += $task->award_number;
|
|
$user->save();
|
|
}
|
|
}
|
|
|
|
return $this->success();
|
|
}
|
|
|
|
public function callback(Request $request)
|
|
{
|
|
$result = ['code' => 0, 'msg' => 'ok'];
|
|
if ($request->get('platform', 0) == Task::PLATFORM_DIDI) {
|
|
$result = Didi::callback($request->all());
|
|
}
|
|
|
|
return response()->json($result);
|
|
}
|
|
}
|