调整活动

This commit is contained in:
2021-04-26 10:55:15 +08:00
parent 9ff07723c6
commit 2ffc3e845a
6 changed files with 161 additions and 91 deletions

View File

@@ -5,67 +5,17 @@ namespace App\Admin\Controllers\Activity;
use App\Models\Activity; use App\Models\Activity;
use App\Models\ActivityRule; use App\Models\ActivityRule;
use App\Models\User; use App\Models\User;
use Encore\Admin\Controllers\HasResourceActions; use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form; use Encore\Admin\Form;
use Encore\Admin\Grid; use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Support\MessageBag; use Illuminate\Support\MessageBag;
use Illuminate\Routing\Controller as AdminController;
class IndexController extends AdminController class IndexController extends AdminController
{ {
use HasResourceActions;
protected $title = '活动管理'; protected $title = '活动管理';
/** protected function grid(): Grid
* Get content title.
* @return string
*/
protected function title()
{
return $this->title;
}
/**
* Index interface.
* @param Content $content
* @return Content
*/
public function index(Content $content)
{
return $content->title($this->title())
->description($this->description['index'] ?? trans('admin.list'))
->body($this->grid());
}
/**
* Edit interface.
* @param mixed $id
* @param Content $content
* @return Content
*/
public function edit($id, Content $content)
{
return $content->title($this->title())
->description($this->description['edit'] ?? trans('admin.edit'))
->body($this->form($id)->edit($id));
}
/**
* Create interface.
* @param Content $content
* @return Content
*/
public function create(Content $content)
{
return $content->title($this->title())
->description($this->description['create'] ?? trans('admin.create'))
->body($this->form());
}
protected function grid()
{ {
$grid = new Grid(new Activity); $grid = new Grid(new Activity);
$grid->model()->withCount('coupons'); $grid->model()->withCount('coupons');
@@ -146,7 +96,7 @@ class IndexController extends AdminController
* Make a form builder. * Make a form builder.
* @return Form * @return Form
*/ */
protected function form($id = '') protected function form(): Form
{ {
$form = new Form(new Activity); $form = new Form(new Activity);
@@ -185,26 +135,62 @@ class IndexController extends AdminController
->default(1) ->default(1)
->help('同一订单多次核销时校验订单每满100元可核销一笔。'); ->help('同一订单多次核销时校验订单每满100元可核销一笔。');
$grantdef = $verificationsdef = ''; $users = User::query()
if ($id) { ->with('info')
$grantdef = Activity::find($id)->grants()->pluck('user_id')->toArray(); ->whereHas('identity', function ($q) {
$verificationsdef = Activity::find($id)->verifications()->pluck('user_id')->toArray(); $q->where('identity_id', 1);
} })
->orderBy('id', 'desc')
$users = User::with('info')->whereHas('identity', function ($q) { ->get()
$q->where('identity_id', 1); ->pluck('nickname', 'id');
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
$form->listbox('grants.user_id', '可发券渠道') $form->listbox('grants.user_id', '可发券渠道')
->options($users) ->options($users)
->default($grantdef) ->default(function ($form) {
if ($form->isEditing()) {
return $form->model()->grants()->pluck('user_id')->toArray();
} else {
return [];
}
})
->required(); ->required();
$form->listbox('verifications.user_id', '可核券渠道') $form->listbox('verifications.user_id', '可核券渠道')
->options($users) ->options($users)
->default($verificationsdef) ->default(function ($form) {
if ($form->isEditing()) {
return $form->model()->verifications()->pluck('user_id')->toArray();
} else {
return [];
}
})
->required(); ->required();
$form->radio('verify_shop', '网点校验')
->options(Activity::VERIFY_SHOPS)
->default(Activity::VERIFY_SHOP_NO)
->when(Activity::VERIFY_SHOP_YES, function (Form $form) use ($users) {
$form->listbox('shops.user_id', '可核券渠道')
->options(function () {
return User::query()
->with('info')
->whereHas('identity', function ($q) {
$q->where('identity_id', 2);
})
->where('status', 1)
->orderBy('id', 'desc')
->get()
->pluck('nickname', 'id');
})
->default(function ($form) {
if ($form->isEditing()) {
return $form->model()->shops()->pluck('user_id')->toArray();
} else {
return [];
}
});
});
$form->saving(function (Form $form) { $form->saving(function (Form $form) {
$request = request(); $request = request();
@@ -243,9 +229,22 @@ class IndexController extends AdminController
$form->end_at = $form->end_at . ' 23:59:59'; $form->end_at = $form->end_at . ' 23:59:59';
} }
$shops = isset(request()->shops) ? array_filter(request()->shops['user_id']) : [];
if (request()->verify_shop == Activity::VERIFY_SHOP_YES && empty($shops)) {
$error = new MessageBag([
'title' => '错误',
'message' => '必须设置可核销的网点',
]);
return back()->withInput()->with(compact('error'));
}
}); });
$form->saved(function (Form $form) { $form->saved(function (Form $form) {
//设置发券渠道
$users = []; $users = [];
foreach ($form->grants['user_id'] as $key => $user_id) { foreach ($form->grants['user_id'] as $key => $user_id) {
if ($user_id) { if ($user_id) {
@@ -258,6 +257,8 @@ class IndexController extends AdminController
} }
} }
$form->model()->grants()->whereNotIn('user_id', $users)->delete(); $form->model()->grants()->whereNotIn('user_id', $users)->delete();
//设置核销渠道
$users = []; $users = [];
foreach ($form->verifications['user_id'] as $key => $user_id) { foreach ($form->verifications['user_id'] as $key => $user_id) {
if ($user_id) { if ($user_id) {
@@ -270,6 +271,20 @@ class IndexController extends AdminController
} }
} }
$form->model()->verifications()->whereNotIn('user_id', $users)->delete(); $form->model()->verifications()->whereNotIn('user_id', $users)->delete();
//设置核销网点
$users = [];
foreach ($form->shops['user_id'] as $key => $user_id) {
if ($user_id) {
$form->model()
->shops()
->updateOrCreate([
'user_id' => $user_id,
]);
$users[] = $user_id;
}
}
$form->model()->shops()->whereNotIn('user_id', $users)->delete();
}); });
return $form; return $form;

View File

@@ -3,16 +3,10 @@
namespace App\Admin\Controllers\Activity; namespace App\Admin\Controllers\Activity;
use App\Admin\Renderable\Activity\Grants; use App\Admin\Renderable\Activity\Grants;
use App\Models\Activity;
use App\Models\ActivityCouponLog; use App\Models\ActivityCouponLog;
use App\Models\ActivityGrant;
use App\Models\ActivityRule;
use App\Models\User;
use Encore\Admin\Controllers\HasResourceActions; use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid; use Encore\Admin\Grid;
use Encore\Admin\Layout\Content; use Encore\Admin\Layout\Content;
use Illuminate\Support\MessageBag;
use Illuminate\Routing\Controller as AdminController; use Illuminate\Routing\Controller as AdminController;
class LogController extends AdminController class LogController extends AdminController
@@ -33,7 +27,7 @@ class LogController extends AdminController
/** /**
* Index interface. * Index interface.
* @param Content $content * @param Content $content
* @return Content * @return Content
*/ */
public function index(Content $content) public function index(Content $content)
@@ -69,20 +63,20 @@ class LogController extends AdminController
$grid->column('id', '#ID#'); $grid->column('id', '#ID#');
$grid->column('code', '卡券编号'); $grid->column('code', '卡券编号');
$grid->column('type', '分类') $grid->column('type', '分类')
->using(ActivityCouponLog::TYPES) ->using(ActivityCouponLog::TYPES)
->label([ ->label([
1 => 'default', 1 => 'default',
2 => 'warning', 2 => 'warning',
3 => 'info', 3 => 'info',
]); ]);
$grid->column('status', '状态') $grid->column('status', '状态')
->using(ActivityCouponLog::STATUS) ->using(ActivityCouponLog::STATUS)
->label([ ->label([
1 => 'default', 1 => 'default',
2 => 'warning', 2 => 'warning',
3 => 'info', 3 => 'info',
]); ]);
$grid->column('remark', '处理结果'); $grid->column('remark', '处理结果');

View File

@@ -3,6 +3,9 @@
namespace App\Models; namespace App\Models;
use App\Models\Traits\BelongsToUser; use App\Models\Traits\BelongsToUser;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class Activity extends Model class Activity extends Model
@@ -36,6 +39,13 @@ class Activity extends Model
self::CHANNEL_UNION => '银联', self::CHANNEL_UNION => '银联',
]; ];
const VERIFY_SHOP_YES = 1;
const VERIFY_SHOP_NO = 0;
const VERIFY_SHOPS = [
self::VERIFY_SHOP_YES => '是',
self::VERIFY_SHOP_NO => '否',
];
/** /**
* 默认加载的关联 * 默认加载的关联
* @var array * @var array
@@ -52,7 +62,7 @@ class Activity extends Model
} }
//活动类型 固定期限 延期 //活动类型 固定期限 延期
public function getTypeTextAttribute() public function getTypeTextAttribute(): string
{ {
return self::TYPES[$this->type] ?? '未知'; return self::TYPES[$this->type] ?? '未知';
} }
@@ -64,26 +74,46 @@ class Activity extends Model
} }
//关联卡券规则 ysd-full100-10 //关联卡券规则 ysd-full100-10
public function rule() public function rule(): BelongsTo
{ {
return $this->belongsTo(ActivityRule::class, 'activity_rule_id'); return $this->belongsTo(ActivityRule::class, 'activity_rule_id');
} }
//关联券表 //关联券表
public function coupons() public function coupons(): HasMany
{ {
return $this->hasMany(ActivityCoupon::class); return $this->hasMany(ActivityCoupon::class);
} }
/** /**
* Notes: 关联可发券渠道 * Notes: 关联可发券渠道中间表
* @Author: 玄尘 * @Author: 玄尘
* @Date : 2020/8/21 11:09 * @Date : 2020/8/21 11:09
*/ */
public function grants() public function grants(): HasMany
{ {
return $this->hasMany(ActivityGrant::class); return $this->hasMany(ActivityGrant::class);
}
/**
* Notes: 可发券的渠道
* @Author: 玄尘
* @Date : 2021/4/25 11:36
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function grant_users(): BelongsToMany
{
return $this->belongsToMany(User::class, 'activity_grants')->using(ActivityGrant::class);
}
/**
* Notes: 关联可核券网点中间表
* @Author: 玄尘
* @Date : 2020/8/21 11:09
*/
public function shops(): HasMany
{
return $this->hasMany(ActivityShop::class);
} }
/** /**
@@ -91,10 +121,19 @@ class Activity extends Model
* @Author: 玄尘 * @Author: 玄尘
* @Date : 2020/8/21 11:09 * @Date : 2020/8/21 11:09
*/ */
public function verifications() public function verifications(): HasMany
{ {
return $this->hasMany(ActivityVerification::class); return $this->hasMany(ActivityVerification::class);
}
/**
* Notes: 可核销的渠道
* @Author: 玄尘
* @Date : 2021/4/25 11:37
*/
public function verify_users(): BelongsToMany
{
return $this->belongsToMany(User::class, 'activity_verifications')->using(ActivityVerification::class);
} }
/** /**

View File

@@ -4,9 +4,12 @@ namespace App\Models;
use App\Models\Traits\BelongsToActivity; use App\Models\Traits\BelongsToActivity;
use App\Models\Traits\BelongsToUser; use App\Models\Traits\BelongsToUser;
use Illuminate\Database\Eloquent\Relations\Pivot;
class ActivityGrant extends Model class ActivityGrant extends Pivot
{ {
public $table = 'activity_grants';
use BelongsToActivity, BelongsToUser; use BelongsToActivity, BelongsToUser;
} }

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use App\Models\Traits\BelongsToActivity;
use App\Models\Traits\BelongsToUser;
use Illuminate\Database\Eloquent\Relations\Pivot;
class ActivityShop extends Pivot
{
public $table = 'activity_shops';
use BelongsToUser,
BelongsToActivity;
}

View File

@@ -4,9 +4,12 @@ namespace App\Models;
use App\Models\Traits\BelongsToActivity; use App\Models\Traits\BelongsToActivity;
use App\Models\Traits\BelongsToUser; use App\Models\Traits\BelongsToUser;
use Illuminate\Database\Eloquent\Relations\Pivot;
class ActivityVerification extends Model class ActivityVerification extends Pivot
{ {
public $table = 'activity_verifications';
use BelongsToActivity, BelongsToUser; use BelongsToActivity, BelongsToUser;
} }