更改迁移
parent
eaddca989d
commit
c6e4e5a639
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Actions\Grid;
|
||||||
|
|
||||||
|
use App\Services\AdminSendCouponService;
|
||||||
|
use Dcat\Admin\Actions\Response;
|
||||||
|
use Dcat\Admin\Grid\RowAction;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class CouponTaskStart extends RowAction
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected $title = '<i class="feather grid-action-icon icon-play-circle"></i>';
|
||||||
|
|
||||||
|
public function title()
|
||||||
|
{
|
||||||
|
if ($this->title) {
|
||||||
|
return $this->title.' 开始任务';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '开始任务';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Model|Authenticatable|HasPermissions|null $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function authorize($user): bool
|
||||||
|
{
|
||||||
|
return $user->can('dcat.admin.coupon_send_tasks.start');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the action request.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function handle(Request $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
$adminSendCouponService = new AdminSendCouponService();
|
||||||
|
$adminSendCouponService->startTaskById($this->getKey());
|
||||||
|
DB::commit();
|
||||||
|
} catch (Throwable $th) {
|
||||||
|
DB::rollBack();
|
||||||
|
report($th);
|
||||||
|
return $this->response()->error('开始失败,'.$th->getMessage())->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->response()->success('操作成功')->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|array|void
|
||||||
|
*/
|
||||||
|
public function confirm()
|
||||||
|
{
|
||||||
|
return ['确认开始执行当前任务?'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ use Dcat\Admin\Grid;
|
||||||
use Dcat\Admin\Http\Controllers\AdminController;
|
use Dcat\Admin\Http\Controllers\AdminController;
|
||||||
use Dcat\Admin\Layout\Content;
|
use Dcat\Admin\Layout\Content;
|
||||||
use Dcat\Admin\Show;
|
use Dcat\Admin\Show;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CouponController extends AdminController
|
class CouponController extends AdminController
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +135,26 @@ class CouponController extends AdminController
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取优惠券接口
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function coupons(Request $request)
|
||||||
|
{
|
||||||
|
$name = $request->input('q');
|
||||||
|
|
||||||
|
$query = CouponModel::select('id', 'name as text');
|
||||||
|
|
||||||
|
if ($name) {
|
||||||
|
$query->where('name', 'like', "%$name%");
|
||||||
|
return $query->paginate(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($query->get());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用范围列表
|
* 使用范围列表
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,18 @@
|
||||||
|
|
||||||
namespace App\Admin\Controllers;
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Admin\Actions\Grid\CouponTaskStart;
|
||||||
|
use App\Admin\Renderable\UserSimpleTable;
|
||||||
use App\Admin\Repositories\CouponSendTask;
|
use App\Admin\Repositories\CouponSendTask;
|
||||||
|
use App\Models\Coupon;
|
||||||
|
use App\Models\CouponSendTask as CouponSendTaskModel;
|
||||||
|
use App\Models\User;
|
||||||
use Dcat\Admin\Admin;
|
use Dcat\Admin\Admin;
|
||||||
use Dcat\Admin\Form;
|
use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Grid;
|
use Dcat\Admin\Grid;
|
||||||
use Dcat\Admin\Http\Controllers\AdminController;
|
use Dcat\Admin\Http\Controllers\AdminController;
|
||||||
use Dcat\Admin\Show;
|
use Dcat\Admin\Show;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CouponSendTaskController extends AdminController
|
class CouponSendTaskController extends AdminController
|
||||||
{
|
{
|
||||||
|
|
@ -22,7 +28,7 @@ class CouponSendTaskController extends AdminController
|
||||||
return Grid::make($builder, function (Grid $grid) {
|
return Grid::make($builder, function (Grid $grid) {
|
||||||
$grid->column('id')->sortable();
|
$grid->column('id')->sortable();
|
||||||
$grid->column('name');
|
$grid->column('name');
|
||||||
$grid->column('coupon.name');
|
$grid->column('coupon.name')->label();
|
||||||
$grid->column('num');
|
$grid->column('num');
|
||||||
$grid->column('administrator.name');
|
$grid->column('administrator.name');
|
||||||
$grid->column('type')->using([
|
$grid->column('type')->using([
|
||||||
|
|
@ -56,6 +62,9 @@ class CouponSendTaskController extends AdminController
|
||||||
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
||||||
if ($actions->row->status == 0) {
|
if ($actions->row->status == 0) {
|
||||||
$actions->disableDelete(Admin::user()->cannot('dcat.admin.coupon_send_tasks.destroy'));
|
$actions->disableDelete(Admin::user()->cannot('dcat.admin.coupon_send_tasks.destroy'));
|
||||||
|
if (Admin::user()->can('dcat.admin.coupon_send_tasks.start')) {
|
||||||
|
$actions->append(new CouponTaskStart());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -98,15 +107,63 @@ class CouponSendTaskController extends AdminController
|
||||||
{
|
{
|
||||||
return Form::make(new CouponSendTask(), function (Form $form) {
|
return Form::make(new CouponSendTask(), function (Form $form) {
|
||||||
$form->display('id');
|
$form->display('id');
|
||||||
$form->text('name');
|
$form->text('name')->required();
|
||||||
$form->text('coupon_id');
|
$form->select('coupon_id')->options(function ($id) {
|
||||||
$form->text('num');
|
$coupon = Coupon::find($id);
|
||||||
$form->text('administrator_id');
|
if ($coupon) {
|
||||||
$form->text('type');
|
return [$coupon->id => $coupon->name];
|
||||||
$form->text('status');
|
}
|
||||||
|
})->ajax(admin_route('api.coupons'));
|
||||||
|
$form->number('num')->default(1);
|
||||||
|
$form->radio('type')->options([
|
||||||
|
1=>'指定用户',
|
||||||
|
])->when(1, function (Form $form) {
|
||||||
|
$form->multipleSelectTable('value1')
|
||||||
|
->from(UserSimpleTable::make())
|
||||||
|
->model(User::class, 'id', 'phone')
|
||||||
|
->customFormat(function ($v) {
|
||||||
|
$v = [];
|
||||||
|
if ($this->model()->type == 1) {
|
||||||
|
$value = json_decode($this->model()->value, true);
|
||||||
|
$v = $value['user_ids'];
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
})->rules('required_if:type,1')->max(100)->help('单次最多选择100名用户');
|
||||||
|
})->default(1);
|
||||||
|
|
||||||
|
$form->hidden('value');
|
||||||
|
|
||||||
|
$form->saving(function (Form $form) {
|
||||||
|
switch ($form->type) {
|
||||||
|
case 1:
|
||||||
|
$form->value = json_encode(['user_ids'=>$form->value1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$form->deleteInput('value1');
|
||||||
|
});
|
||||||
|
|
||||||
$form->display('created_at');
|
$form->display('created_at');
|
||||||
$form->display('updated_at');
|
$form->display('updated_at');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 优惠券任务接口
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function tasks(Request $request)
|
||||||
|
{
|
||||||
|
$name = $request->input('q');
|
||||||
|
|
||||||
|
$query = CouponSendTaskModel::select('id', 'name as text');
|
||||||
|
|
||||||
|
if ($name) {
|
||||||
|
$query->where('name', 'like', "%$name%");
|
||||||
|
return $query->paginate(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($query->get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,32 @@ class CouponTaskLogController extends AdminController
|
||||||
*/
|
*/
|
||||||
protected function grid()
|
protected function grid()
|
||||||
{
|
{
|
||||||
return Grid::make(new CouponTaskLog(), function (Grid $grid) {
|
$builder = CouponTaskLog::with(['coupon', 'task', 'user']);
|
||||||
|
return Grid::make($builder, function (Grid $grid) {
|
||||||
$grid->column('id')->sortable();
|
$grid->column('id')->sortable();
|
||||||
$grid->column('task_id');
|
$grid->column('task.name');
|
||||||
$grid->column('coupon_id');
|
$grid->column('coupon.name');
|
||||||
$grid->column('user_id');
|
$grid->column('user.phone');
|
||||||
$grid->column('num');
|
$grid->column('num');
|
||||||
$grid->column('status');
|
$grid->column('status')->using([
|
||||||
|
0=>'未发放',
|
||||||
|
1=>'发放中',
|
||||||
|
2=>'成功',
|
||||||
|
3=>'失败',
|
||||||
|
])->dot([
|
||||||
|
0=>'#b3b9bf',
|
||||||
|
1=>'primary',
|
||||||
|
2=>'success',
|
||||||
|
3=>'danger',
|
||||||
|
]);
|
||||||
$grid->column('created_at');
|
$grid->column('created_at');
|
||||||
$grid->column('updated_at')->sortable();
|
$grid->column('updated_at')->sortable();
|
||||||
|
|
||||||
$grid->filter(function (Grid\Filter $filter) {
|
$grid->filter(function (Grid\Filter $filter) {
|
||||||
$filter->equal('id');
|
$filter->panel(false);
|
||||||
|
$filter->equal('task_id')->select()->ajax(admin_route('api.coupon_send_tasks'))->width(3);
|
||||||
|
$filter->equal('coupon_id')->select()->ajax(admin_route('api.coupons'))->width(3);
|
||||||
|
$filter->like('user.phone')->width(3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Renderable;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Dcat\Admin\Grid;
|
||||||
|
use Dcat\Admin\Grid\LazyRenderable;
|
||||||
|
|
||||||
|
class UserSimpleTable extends LazyRenderable
|
||||||
|
{
|
||||||
|
public function grid(): Grid
|
||||||
|
{
|
||||||
|
$builder = User::query();
|
||||||
|
return Grid::make($builder, function (Grid $grid) {
|
||||||
|
$grid->disableRowSelector(false);
|
||||||
|
$grid->column('phone');
|
||||||
|
$grid->quickSearch(['phone']);
|
||||||
|
$grid->disableActions();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,10 @@
|
||||||
namespace App\Admin\Repositories;
|
namespace App\Admin\Repositories;
|
||||||
|
|
||||||
use App\Models\Coupon as Model;
|
use App\Models\Coupon as Model;
|
||||||
|
use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Repositories\EloquentRepository;
|
use Dcat\Admin\Repositories\EloquentRepository;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class Coupon extends EloquentRepository
|
class Coupon extends EloquentRepository
|
||||||
{
|
{
|
||||||
|
|
@ -13,4 +16,95 @@ class Coupon extends EloquentRepository
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $eloquentClass = Model::class;
|
protected $eloquentClass = Model::class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增记录.
|
||||||
|
*
|
||||||
|
* @param Form $form
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function store(Form $form)
|
||||||
|
{
|
||||||
|
$result = null;
|
||||||
|
|
||||||
|
DB::transaction(function () use ($form, &$result) {
|
||||||
|
$model = $this->model();
|
||||||
|
|
||||||
|
$updates = $form->updates();
|
||||||
|
|
||||||
|
[$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates);
|
||||||
|
|
||||||
|
if ($relations) {
|
||||||
|
$updates = Arr::except($updates, array_keys($relationKeyMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($updates as $column => $value) {
|
||||||
|
$model->setAttribute($column, $value);
|
||||||
|
}
|
||||||
|
//处理剩余量字段
|
||||||
|
$model = $this->createStock($model);
|
||||||
|
|
||||||
|
$result = $model->save();
|
||||||
|
|
||||||
|
$this->updateRelation($form, $model, $relations, $relationKeyMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $this->model()->getKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新数据.
|
||||||
|
*
|
||||||
|
* @param Form $form
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function update(Form $form)
|
||||||
|
{
|
||||||
|
/* @var EloquentModel $builder */
|
||||||
|
$model = $this->model();
|
||||||
|
|
||||||
|
if (! $model->getKey()) {
|
||||||
|
$model->exists = true;
|
||||||
|
|
||||||
|
$model->setAttribute($model->getKeyName(), $form->getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = null;
|
||||||
|
|
||||||
|
DB::transaction(function () use ($form, $model, &$result) {
|
||||||
|
$updates = $form->updates();
|
||||||
|
|
||||||
|
[$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates);
|
||||||
|
|
||||||
|
if ($relations) {
|
||||||
|
$updates = Arr::except($updates, array_keys($relationKeyMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($updates as $column => $value) {
|
||||||
|
/* @var EloquentModel $model */
|
||||||
|
$model->setAttribute($column, $value);
|
||||||
|
}
|
||||||
|
$model = $this->createStock($model);
|
||||||
|
$result = $model->update();
|
||||||
|
|
||||||
|
$this->updateRelation($form, $model, $relations, $relationKeyMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function createStock($model)
|
||||||
|
{
|
||||||
|
if ($model->limit == 0) {
|
||||||
|
$model->setAttribute('stock', 0);
|
||||||
|
} else {
|
||||||
|
$model->setAttribute('stock', $model->limit - $model->sent);
|
||||||
|
}
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,11 @@
|
||||||
namespace App\Admin\Repositories;
|
namespace App\Admin\Repositories;
|
||||||
|
|
||||||
use App\Models\CouponSendTask as Model;
|
use App\Models\CouponSendTask as Model;
|
||||||
|
use Dcat\Admin\Admin;
|
||||||
|
use Dcat\Admin\Form;
|
||||||
use Dcat\Admin\Repositories\EloquentRepository;
|
use Dcat\Admin\Repositories\EloquentRepository;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class CouponSendTask extends EloquentRepository
|
class CouponSendTask extends EloquentRepository
|
||||||
{
|
{
|
||||||
|
|
@ -13,4 +17,79 @@ class CouponSendTask extends EloquentRepository
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $eloquentClass = Model::class;
|
protected $eloquentClass = Model::class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增记录.
|
||||||
|
*
|
||||||
|
* @param Form $form
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function store(Form $form)
|
||||||
|
{
|
||||||
|
$result = null;
|
||||||
|
|
||||||
|
DB::transaction(function () use ($form, &$result) {
|
||||||
|
$model = $this->model();
|
||||||
|
|
||||||
|
$updates = $form->updates();
|
||||||
|
|
||||||
|
[$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates);
|
||||||
|
|
||||||
|
if ($relations) {
|
||||||
|
$updates = Arr::except($updates, array_keys($relationKeyMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($updates as $column => $value) {
|
||||||
|
$model->setAttribute($column, $value);
|
||||||
|
}
|
||||||
|
$model->setAttribute('administrator_id', Admin::user()->id);
|
||||||
|
|
||||||
|
$result = $model->save();
|
||||||
|
|
||||||
|
$this->updateRelation($form, $model, $relations, $relationKeyMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $this->model()->getKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新数据.
|
||||||
|
*
|
||||||
|
* @param Form $form
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function update(Form $form)
|
||||||
|
{
|
||||||
|
/* @var EloquentModel $builder */
|
||||||
|
$model = $this->model();
|
||||||
|
|
||||||
|
if (! $model->getKey()) {
|
||||||
|
$model->exists = true;
|
||||||
|
|
||||||
|
$model->setAttribute($model->getKeyName(), $form->getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = null;
|
||||||
|
|
||||||
|
DB::transaction(function () use ($form, $model, &$result) {
|
||||||
|
$updates = $form->updates();
|
||||||
|
|
||||||
|
[$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates);
|
||||||
|
|
||||||
|
if ($relations) {
|
||||||
|
$updates = Arr::except($updates, array_keys($relationKeyMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($updates as $column => $value) {
|
||||||
|
/* @var EloquentModel $model */
|
||||||
|
$model->setAttribute($column, $value);
|
||||||
|
}
|
||||||
|
$model->setAttribute('administrator_id', Admin::user()->id);
|
||||||
|
$result = $model->update();
|
||||||
|
|
||||||
|
$this->updateRelation($form, $model, $relations, $relationKeyMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ Route::group([
|
||||||
])->names('coupon_ranges');
|
])->names('coupon_ranges');
|
||||||
|
|
||||||
$router->resource('coupon-send-tasks', 'CouponSendTaskController')->names('coupon_send_tasks');
|
$router->resource('coupon-send-tasks', 'CouponSendTaskController')->names('coupon_send_tasks');
|
||||||
|
|
||||||
$router->resource('coupon-task-logs', 'CouponTaskLogController')->only([
|
$router->resource('coupon-task-logs', 'CouponTaskLogController')->only([
|
||||||
'index',
|
'index',
|
||||||
])->names('coupon_task_logs');
|
])->names('coupon_task_logs');
|
||||||
|
|
@ -87,4 +88,6 @@ Route::group([
|
||||||
$router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories');
|
$router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories');
|
||||||
$router->get('api/product-group-details', 'ProductGroupController@details')->name('api.product_group_details');
|
$router->get('api/product-group-details', 'ProductGroupController@details')->name('api.product_group_details');
|
||||||
$router->get('api/product-skus', 'ProductSkuController@skus')->name('api.product_skus');
|
$router->get('api/product-skus', 'ProductSkuController@skus')->name('api.product_skus');
|
||||||
|
$router->get('api/coupons', 'CouponController@coupons')->name('api.coupons');
|
||||||
|
$router->get('api/coupone-send-tasks', 'CouponSendTaskController@tasks')->name('api.coupon_send_tasks');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,28 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Casts\JsonArray;
|
||||||
|
use App\Models\Admin\Administrator;
|
||||||
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class CouponSendTask extends Model
|
class CouponSendTask extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
use HasDateTimeFormatter;
|
||||||
|
|
||||||
|
// protected $casts = [
|
||||||
|
// 'value'=>JsonArray::class,
|
||||||
|
// ];
|
||||||
|
|
||||||
|
public function coupon()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Coupon::class, 'coupon_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function administrator()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Administrator::class, 'administrator_id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,42 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class CouponTaskLog extends Model
|
class CouponTaskLog extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
use HasDateTimeFormatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此记录发放的券
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function coupon()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Coupon::class, 'coupon_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此记录对应的任务
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function task()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(CouponSendTask::class, 'task_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此记录对应的人
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function user()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(User::class, 'user_id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use App\Models\CouponSendTask;
|
||||||
|
use App\Models\CouponTaskLog;
|
||||||
|
|
||||||
|
class AdminSendCouponService
|
||||||
|
{
|
||||||
|
public function startTaskById(int $id)
|
||||||
|
{
|
||||||
|
$task = CouponSendTask::findOrFail($id);
|
||||||
|
$this->startTask($task);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function startTask(CouponSendTask $task)
|
||||||
|
{
|
||||||
|
$nowTime = now();
|
||||||
|
$task->status = 1;
|
||||||
|
switch ($task->type) {
|
||||||
|
case 1://指定用户
|
||||||
|
$insertLogs = [];
|
||||||
|
$userIds = explode(',', json_decode($task->value, true)['user_ids']);
|
||||||
|
foreach ($userIds as $userId) {
|
||||||
|
$insertLogs[] = [
|
||||||
|
'task_id'=>$task->id,
|
||||||
|
'coupon_id'=>$task->coupon_id,
|
||||||
|
'user_id'=>$userId,
|
||||||
|
'num'=>$task->num,
|
||||||
|
'created_at'=>$nowTime,
|
||||||
|
'updated_at'=>$nowTime,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$res = CouponTaskLog::insert($insertLogs);
|
||||||
|
if ($res) {
|
||||||
|
$task->status = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$task->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ class CreateCouponsTable extends Migration
|
||||||
$table->unsignedBigInteger('threshold')->default(0)->comment('使用门槛金额:分');
|
$table->unsignedBigInteger('threshold')->default(0)->comment('使用门槛金额:分');
|
||||||
$table->unsignedInteger('limit')->default(0)->comment('限量');
|
$table->unsignedInteger('limit')->default(0)->comment('限量');
|
||||||
$table->unsignedInteger('sent')->default(0)->comment('已送数量');
|
$table->unsignedInteger('sent')->default(0)->comment('已送数量');
|
||||||
|
$table->unsignedInteger('stock')->default(0)->comment('剩余量');
|
||||||
$table->unsignedInteger('use_day')->default(0)->comment('使用期限');
|
$table->unsignedInteger('use_day')->default(0)->comment('使用期限');
|
||||||
$table->timestamp('use_start_at')->nullable()->comment('使用开始时间');
|
$table->timestamp('use_start_at')->nullable()->comment('使用开始时间');
|
||||||
$table->timestamp('use_end_at')->nullable()->comment('使用结束时间');
|
$table->timestamp('use_end_at')->nullable()->comment('使用结束时间');
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ class CreateCouponSendTasksTable extends Migration
|
||||||
$table->unsignedBigInteger('num')->default(1)->comment('张数');
|
$table->unsignedBigInteger('num')->default(1)->comment('张数');
|
||||||
$table->unsignedBigInteger('administrator_id')->comment('操作管理员ID');
|
$table->unsignedBigInteger('administrator_id')->comment('操作管理员ID');
|
||||||
$table->unsignedTinyInteger('type')->comment('任务类型:1指定用户,2用户vip等级,3所有用户,4用户excel导入');
|
$table->unsignedTinyInteger('type')->comment('任务类型:1指定用户,2用户vip等级,3所有用户,4用户excel导入');
|
||||||
|
$table->json('value')->comment('任务内容');
|
||||||
$table->unsignedTinyInteger('status')->default(0)->comment('任务状态:0未开始,1初始化中,2执行中,3已完成');
|
$table->unsignedTinyInteger('status')->default(0)->comment('任务状态:0未开始,1初始化中,2执行中,3已完成');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,13 @@ return [
|
||||||
'administrator_id' => '操作人',
|
'administrator_id' => '操作人',
|
||||||
'type' => '任务类型',
|
'type' => '任务类型',
|
||||||
'status' => '任务状态',
|
'status' => '任务状态',
|
||||||
|
'value1' => '指定用户',
|
||||||
|
'coupon'=>[
|
||||||
|
'name' => '优惠券',
|
||||||
|
],
|
||||||
|
'administrator' =>[
|
||||||
|
'name' =>'操作人',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,15 @@ return [
|
||||||
'user_id' => '用户',
|
'user_id' => '用户',
|
||||||
'num' => '张数',
|
'num' => '张数',
|
||||||
'status' => '状态',
|
'status' => '状态',
|
||||||
|
'task'=>[
|
||||||
|
'name' => '任务名称',
|
||||||
|
],
|
||||||
|
'user'=>[
|
||||||
|
'phone'=>'手机号',
|
||||||
|
],
|
||||||
|
'coupon'=>[
|
||||||
|
'name' => '优惠券',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue