first
This commit is contained in:
54
modules/Task/Http/Controllers/Admin/CategoryController.php
Normal file
54
modules/Task/Http/Controllers/Admin/CategoryController.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Admin;
|
||||
|
||||
use App\Admin\Traits\WithUploads;
|
||||
use Encore\Admin\Controllers\AdminController;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Grid;
|
||||
use Modules\Linker\Traits\WithLinker;
|
||||
use Modules\Task\Models\Category;
|
||||
|
||||
class CategoryController extends AdminController
|
||||
{
|
||||
|
||||
use WithUploads, WithLinker;
|
||||
|
||||
protected $title = '分类管理';
|
||||
|
||||
public function grid(): Grid
|
||||
{
|
||||
$grid = new Grid(new Category());
|
||||
$grid->column('id', '#ID#');
|
||||
$grid->column('cover', '分类图片')->image('', 50, 100);
|
||||
$grid->column('title', '分类名称');
|
||||
$grid->column('remark', '描述');
|
||||
$grid->column('status', '状态')->switch([
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
||||
]);
|
||||
$grid->column('created_at', '创建时间');
|
||||
$grid->column('updated_at', '更新时间');
|
||||
|
||||
return $grid;
|
||||
}
|
||||
|
||||
public function form(): Form
|
||||
{
|
||||
$form = new Form(new Category());
|
||||
$form->text('title', '分类名称')->required();
|
||||
$form->text('remark', '描述')->required();
|
||||
|
||||
$this->cover($form);
|
||||
|
||||
$this->withUrl($form);
|
||||
|
||||
$form->switch('status', '是否开启')->default(1)->states([
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
||||
]);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
}
|
||||
139
modules/Task/Http/Controllers/Admin/TaskController.php
Normal file
139
modules/Task/Http/Controllers/Admin/TaskController.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Admin;
|
||||
|
||||
use App\Admin\Traits\WithUploads;
|
||||
use Encore\Admin\Controllers\AdminController;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Grid;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Modules\Linker\Traits\WithLinker;
|
||||
use Modules\Task\Models\Category;
|
||||
use Modules\Task\Models\Task;
|
||||
use Modules\User\Models\AccountRule;
|
||||
use Modules\User\Models\Identity;
|
||||
use Modules\User\Models\IdentityMiddle;
|
||||
|
||||
class TaskController extends AdminController
|
||||
{
|
||||
|
||||
use WithUploads, WithLinker;
|
||||
|
||||
protected $title = '任务管理';
|
||||
|
||||
public function grid(): Grid
|
||||
{
|
||||
$grid = new Grid(new Task());
|
||||
$grid->filter(function (Grid\Filter $filter) {
|
||||
$filter->column(1 / 3, function (Grid\Filter $filter) {
|
||||
$filter->like('title', '任务名称');
|
||||
});
|
||||
$filter->column(1 / 3, function (Grid\Filter $filter) {
|
||||
$filter->equal('category_id', '分类')->select(Category::shown()->pluck('title', 'id'));
|
||||
});
|
||||
$filter->column(1 / 3, function (Grid\Filter $filter) {
|
||||
$filter->equal('status', '状态')->select((new Task())->status_map);
|
||||
});
|
||||
});
|
||||
|
||||
$grid->column('id', '#ID#');
|
||||
$grid->column('ico', '任务图标')->image('', 40, 40);
|
||||
$grid->column('cover', '图片')->image('', 40, 40);
|
||||
$grid->column('title', '任务名称');
|
||||
$grid->column('key', '任务关键字');
|
||||
$grid->column('category.title', '所属分类');
|
||||
$grid->column('rule.title', '账变名称');
|
||||
$grid->column('remark', '任务描述');
|
||||
$grid->column('tips', '任务奖励提示');
|
||||
$grid->column('type', '任务计量类型')->using(Task::TYPES);
|
||||
$grid->column('cycle', '任务计量周期')->using(Task::CYCLES);
|
||||
// $grid->column('company_certify', '企业认证')
|
||||
// ->using(Task::COMPANY_CERTIFICATIONS)
|
||||
// ->label(Task::COMPANY_CERTIFICATION_LABEL);
|
||||
|
||||
$status = [
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
||||
];
|
||||
|
||||
// $grid->column('展示位置')
|
||||
// ->display(function () {
|
||||
// $data = [];
|
||||
// foreach ($this->position as $position) {
|
||||
// $data[] = $this->position_map[$position];
|
||||
// }
|
||||
//
|
||||
// return $data;
|
||||
// })
|
||||
// ->label();
|
||||
|
||||
$grid->column('身份')
|
||||
->display(function () {
|
||||
return $this->getIdentities();
|
||||
})->label();
|
||||
$grid->column('status', '状态')->switch($status);
|
||||
|
||||
$grid->column('created_at', '创建时间');
|
||||
$grid->column('updated_at', '更新时间');
|
||||
|
||||
return $grid;
|
||||
}
|
||||
|
||||
public function form(): Form
|
||||
{
|
||||
$form = new Form(new Task());
|
||||
|
||||
|
||||
$form->text('title', '任务标题')->required();
|
||||
// $form->text('sub_title', '副标题');
|
||||
// $form->text('remark', '任务描述');
|
||||
$form->text('tips', '任务奖励提示')->required();
|
||||
$form->text('key', '任务关键字')->required();
|
||||
$form->select('category_id', '所属分类')
|
||||
->options(Category::query()->shown()->pluck('title', 'id'))
|
||||
->required();
|
||||
$this->cover($form, 'ico', 'ICO图标');
|
||||
$this->cover($form, 'cover', '图片');
|
||||
// $form->multipleSelect('position', '展示位置')
|
||||
// ->options($form->model()->position_map);
|
||||
$form->multipleSelect('identity', '可用身份')
|
||||
->options(Identity::pluck('name', 'id'));
|
||||
|
||||
$form->select('rule_id', '对应账变规则')
|
||||
->options(function () {
|
||||
return AccountRule::where('type', 'score')->pluck('title', 'id');
|
||||
})
|
||||
->required();
|
||||
$form->currency('rule_number', '账变数值')
|
||||
->default(0)
|
||||
->help('0为获取账变设置的数值')
|
||||
->required();
|
||||
|
||||
$this->withUrl($form);
|
||||
|
||||
// $form->radio('company_certify', '企业认证')
|
||||
// ->options(Task::COMPANY_CERTIFICATIONS)
|
||||
// ->default(Task::COMPANY_CERTIFICATION_NO)
|
||||
// ->required();
|
||||
$form->radio('type', '任务计量类型')->default(Task::TYPE_COUNT)->options(Task::TYPES)->required();
|
||||
$form->radio('cycle', '任务计量周期')->default(Task::CYCLE_DAY)->options(Task::CYCLES)->required();
|
||||
$form->number('task_number', '任务量')->default(1)->required();
|
||||
// $form->ueditor('description', '任务详情')->required();
|
||||
$form->switch('status', '是否开启')->states([
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
||||
]);
|
||||
$form->saving(function (Form $form) {
|
||||
$task = Task::query()->where('key', $form->key)->first();
|
||||
if ($task && $form->isCreating()) {
|
||||
$error = new MessageBag([
|
||||
'title' => '错误',
|
||||
'message' => '任务关键字已经存在',
|
||||
]);
|
||||
return back()->withInput()->with(compact('error'));
|
||||
}
|
||||
});
|
||||
return $form;
|
||||
}
|
||||
|
||||
}
|
||||
50
modules/Task/Http/Controllers/Admin/UserController.php
Normal file
50
modules/Task/Http/Controllers/Admin/UserController.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Admin;
|
||||
|
||||
use App\Admin\Traits\WithUploads;
|
||||
use Encore\Admin\Controllers\AdminController;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Grid;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Modules\Linker\Traits\WithLinker;
|
||||
use Modules\Task\Models\Category;
|
||||
use Modules\Task\Models\Task;
|
||||
use Modules\Task\Models\User;
|
||||
use Modules\User\Models\AccountRule;
|
||||
use Modules\User\Models\Identity;
|
||||
use Modules\User\Models\IdentityMiddle;
|
||||
|
||||
class UserController extends AdminController
|
||||
{
|
||||
|
||||
use WithUploads, WithLinker;
|
||||
|
||||
protected $title = '任务管理';
|
||||
|
||||
public function grid(): Grid
|
||||
{
|
||||
$grid = new Grid(new User());
|
||||
|
||||
$grid->disableCreateButton();
|
||||
$grid->disableActions();
|
||||
|
||||
$grid->filter(function (Grid\Filter $filter) {
|
||||
$filter->column(1 / 3, function (Grid\Filter $filter) {
|
||||
$filter->equal('user_id', '下单用户')->select()->ajax(route('admin.user.users.ajax'));
|
||||
});
|
||||
$filter->column(1 / 3, function (Grid\Filter $filter) {
|
||||
$filter->equal('task_id', '任务')->select(Task::query()->pluck('title', 'id'));
|
||||
});
|
||||
});
|
||||
|
||||
$grid->column('id', '#ID#');
|
||||
$grid->column('task.title', '任务');
|
||||
$grid->column('user.username', '用户');
|
||||
$grid->column('task.task_number', '任务量');
|
||||
$grid->column('total', '完成次数');
|
||||
$grid->column('task_at', '时间');
|
||||
|
||||
return $grid;
|
||||
}
|
||||
}
|
||||
21
modules/Task/Http/Controllers/Api/CategoryController.php
Normal file
21
modules/Task/Http/Controllers/Api/CategoryController.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Api;
|
||||
|
||||
use App\Api\Controllers\Controller;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\Task\Http\Resources\CategoryResource;
|
||||
use Modules\Task\Models\Category;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$tasks = Category::Shown()->get();
|
||||
|
||||
return $this->success(CategoryResource::collection($tasks));
|
||||
}
|
||||
|
||||
}
|
||||
39
modules/Task/Http/Controllers/Api/TaskController.php
Normal file
39
modules/Task/Http/Controllers/Api/TaskController.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Api;
|
||||
|
||||
use App\Api\Controllers\Controller;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Jason\Api\Api;
|
||||
use Modules\Task\Http\Resources\TaskBaseResource;
|
||||
use Modules\Task\Http\Resources\TaskResource;
|
||||
use Modules\Task\Models\Task;
|
||||
|
||||
class TaskController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$user = Api::user();
|
||||
$category_id = $request->category_id ?? '';
|
||||
|
||||
$tasks = Task::query()
|
||||
->when($category_id, function ($q) use ($category_id) {
|
||||
$q->where('category_id', $category_id);
|
||||
})
|
||||
->Shown()
|
||||
->when($user, function ($q) use ($user) {
|
||||
$q->ofUser($user);
|
||||
})
|
||||
->get();
|
||||
|
||||
return $this->success(TaskBaseResource::collection($tasks));
|
||||
}
|
||||
|
||||
public function show(Task $task)
|
||||
{
|
||||
return $this->success(new TaskResource($task));
|
||||
}
|
||||
|
||||
}
|
||||
76
modules/Task/Http/Controllers/Api/UserController.php
Normal file
76
modules/Task/Http/Controllers/Api/UserController.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Controllers\Api;
|
||||
|
||||
use App\Api\Controllers\Controller;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use EasyWeChat\Factory;
|
||||
use Illuminate\Support\Collection;
|
||||
use Jason\Api\Api;
|
||||
use Modules\Task\Facades\TaskFacade;
|
||||
use Modules\Task\Models\Task;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Notes: 微信步数
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/26 9:46
|
||||
*/
|
||||
public function wechatStep(Request $request)
|
||||
{
|
||||
|
||||
try {
|
||||
$key = 'steps';
|
||||
$task = Task::query()->where('key', $key)->first();
|
||||
if ($task && $task->status != Task::STATUS_UP) {
|
||||
throw new \Exception('任务关闭');
|
||||
}
|
||||
|
||||
$toDayStartTimestamp = Carbon::now()->startOfDay()->timestamp;//当天开始的时间戳
|
||||
|
||||
$app = Factory::miniProgram([
|
||||
'app_id' => env('WECHAT_MINI_PROGRAM_APPID'),
|
||||
'secret' => env('WECHAT_MINI_PROGRAM_SECRET'),
|
||||
'response_type' => 'collection',
|
||||
]);
|
||||
|
||||
$session = $app->auth->session($request->code);
|
||||
if ($session->errcode) {
|
||||
return $this->failed($session->errmsg);
|
||||
}
|
||||
|
||||
$decryptedData = $app->encryptor->decryptData(
|
||||
$session->session_key,
|
||||
$request->iv,
|
||||
$request->encryptData
|
||||
);
|
||||
|
||||
$list = collect($decryptedData['stepInfoList']);
|
||||
|
||||
if ($list->isNotEmpty()) {
|
||||
$toDay = $list->where('timestamp', $toDayStartTimestamp)->first();
|
||||
if ($toDay) {
|
||||
TaskFacade::do($key, Api::userId(), [
|
||||
'steps' => $toDay['step']
|
||||
], $toDay['step']);
|
||||
}
|
||||
|
||||
if ($toDay['step'] >= $task->task_number) {
|
||||
return $this->success('任务完成');
|
||||
} else {
|
||||
throw new \Exception('您今天的步数未达标');
|
||||
}
|
||||
} else {
|
||||
throw new \Exception('未获取到微信运动数据');
|
||||
}
|
||||
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
return $this->failed($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
21
modules/Task/Http/Resources/CategoryResource.php
Normal file
21
modules/Task/Http/Resources/CategoryResource.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CategoryResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request): array
|
||||
{
|
||||
return [
|
||||
'category_id' => $this->id,
|
||||
'title' => $this->title,
|
||||
'remark' => $this->remark,
|
||||
'cover' => $this->cover_url,
|
||||
'url' => $this->linker,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
27
modules/Task/Http/Resources/TaskBaseResource.php
Normal file
27
modules/Task/Http/Resources/TaskBaseResource.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Jason\Api\Api;
|
||||
|
||||
class TaskBaseResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request): array
|
||||
{
|
||||
$user = Api::user();
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'ico' => $this->ico_url,
|
||||
'key' => $this->key,
|
||||
'cover' => $this->cover_url,
|
||||
'title' => $this->title,
|
||||
'tips' => $this->tips,
|
||||
'linker' => $this->linker,
|
||||
'user' => $this->getUserTask($user),
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
36
modules/Task/Http/Resources/TaskResource.php
Normal file
36
modules/Task/Http/Resources/TaskResource.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Jason\Api\Api;
|
||||
|
||||
class TaskResource extends JsonResource
|
||||
{
|
||||
|
||||
public function toArray($request): array
|
||||
{
|
||||
$user = Api::user();
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'ico' => $this->ico_url,
|
||||
'key' => $this->key,
|
||||
'cover' => $this->cover_url,
|
||||
'title' => $this->title,
|
||||
'sub_title' => $this->sub_title,
|
||||
'remark' => $this->remark,
|
||||
'tips' => $this->tips,
|
||||
'url' => $this->linker,
|
||||
'category' => new CategoryResource($this->category),
|
||||
'rule' => [
|
||||
'id' => $this->rule->id,
|
||||
'name' => $this->rule->name,
|
||||
'title' => $this->rule->title,
|
||||
],
|
||||
'user' => $this->getUserTask($user),
|
||||
'content' => $this->description,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user