From 1f2c1c005545db0b232a1db88208f09e47322e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=84=E5=B0=98?= <122383162@qq.com> Date: Fri, 21 Aug 2020 13:16:29 +0800 Subject: [PATCH] =?UTF-8?q?'=E6=8B=86=E5=88=86=E6=B4=BB=E5=8A=A8=E7=9A=84?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=9D=83=E9=99=90=EF=BC=8C=E5=88=86=E4=B8=BA?= =?UTF-8?q?=E5=8F=91=E5=88=B8=E5=92=8C=E6=A0=B8=E5=88=B8=E3=80=82'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Activity/IndexController.php | 109 ++++++++++++++++-- app/Models/Activity.php | 22 ++++ app/Models/ActivityCoupon.php | 14 +-- app/Models/ActivityGrant.php | 12 ++ app/Models/ActivityVerification.php | 12 ++ app/Models/PinganToken.php | 2 + app/Models/Traits/BelongsToActivity.php | 23 ++++ app/Models/User.php | 16 ++- app/Models/UserCode.php | 2 + app/Models/UserInfo.php | 4 +- app/Models/UserPingan.php | 2 +- app/Models/WoCouponLog.php | 2 + packages/coupon/src/Action/ysd/YsdGrant.php | 19 +-- packages/coupon/src/Action/ysd/YsdQuery.php | 15 ++- .../coupon/src/Action/ysd/YsdVerification.php | 4 - 15 files changed, 210 insertions(+), 48 deletions(-) create mode 100644 app/Models/ActivityGrant.php create mode 100644 app/Models/ActivityVerification.php create mode 100644 app/Models/Traits/BelongsToActivity.php diff --git a/app/Admin/Controllers/Activity/IndexController.php b/app/Admin/Controllers/Activity/IndexController.php index 4c160e5..0c352cf 100644 --- a/app/Admin/Controllers/Activity/IndexController.php +++ b/app/Admin/Controllers/Activity/IndexController.php @@ -3,18 +3,72 @@ namespace App\Admin\Controllers\Activity; use App\Models\Activity; +use App\Models\ActivityGrant; use App\Models\ActivityRule; use App\Models\User; -use Encore\Admin\Controllers\AdminController; +use Encore\Admin\Controllers\HasResourceActions; use Encore\Admin\Form; use Encore\Admin\Grid; +use Encore\Admin\Layout\Content; use Illuminate\Support\MessageBag; +use Illuminate\Routing\Controller as AdminController; class IndexController extends AdminController { + use HasResourceActions; + protected $title = '活动管理'; + /** + * 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); @@ -78,21 +132,13 @@ class IndexController extends AdminController * Make a form builder. * @return Form */ - protected function form() + protected function form($id = '') { $form = new Form(new Activity); $form->text('title', '活动名称')->required(); $form->textarea('description', '活动说明')->required(); - $form->select('user_id', '隶属渠道') - ->options(function ($option, $info) { - return User::with('info')->whereHas('identity', function ($q) { - $q->where('identity_id', 1); - })->orderBy('id', 'desc')->get()->pluck('nickname', 'id'); - }) - ->help('活动是否专属,不选择为所有渠道都可使用。'); - $form->select('activity_rule_id', '所属规则') ->options(function ($option, $info) { return ActivityRule::where('status', 1)->pluck('title', 'id'); @@ -114,6 +160,26 @@ class IndexController extends AdminController ->default(1) ->help('同一订单,多次核销时校验,订单每满100元可核销一笔。'); + $grantdef = $verificationsdef = ''; + if ($id) { + $grantdef = Activity::find($id)->grants()->pluck('user_id')->toArray(); + $verificationsdef = Activity::find($id)->verifications()->pluck('user_id')->toArray(); + } + + $users = User::with('info')->whereHas('identity', function ($q) { + $q->where('identity_id', 1); + })->orderBy('id', 'desc')->get()->pluck('nickname', 'id'); + + $form->listbox('grants.user_id', '可发券渠道') + ->options($users) + ->default($grantdef) + ->required(); + + $form->listbox('verifications.user_id', '可核券渠道') + ->options($users) + ->default($verificationsdef) + ->required(); + $form->saving(function (Form $form) { $request = request(); if ($request->type == Activity::TYPE_EXTEND && empty($request->days)) { @@ -142,6 +208,29 @@ class IndexController extends AdminController } }); + $form->saved(function (Form $form) { + $users = []; + foreach ($form->grants['user_id'] as $key => $user_id) { + if ($user_id) { + $form->model()->grants()->updateOrCreate([ + 'user_id' => $user_id, + ]); + $users[] = $user_id; + } + } + $form->model()->grants()->whereNotIn('user_id', $users)->delete(); + $users = []; + foreach ($form->verifications['user_id'] as $key => $user_id) { + if ($user_id) { + $form->model()->verifications()->updateOrCreate([ + 'user_id' => $user_id, + ]); + $users[] = $user_id; + } + } + $form->model()->verifications()->whereNotIn('user_id', $users)->delete(); + }); + return $form; } diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 93e4edb..7ad1618 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -68,6 +68,28 @@ class Activity extends Model return $this->hasMany(ActivityCoupon::class); } + /** + * Notes: 关联可发券渠道 + * @Author: 玄尘 + * @Date : 2020/8/21 11:09 + */ + public function grants() + { + return $this->hasMany(ActivityGrant::class); + + } + + /** + * Notes: 关联可核销渠道 + * @Author: 玄尘 + * @Date : 2020/8/21 11:09 + */ + public function verifications() + { + return $this->hasMany(ActivityVerification::class); + + } + //发券 public function grant($mobile, $outletId = null) { diff --git a/app/Models/ActivityCoupon.php b/app/Models/ActivityCoupon.php index 5ddc32e..b3c49fa 100644 --- a/app/Models/ActivityCoupon.php +++ b/app/Models/ActivityCoupon.php @@ -2,12 +2,13 @@ namespace App\Models; +use App\Models\Traits\BelongsToActivity; use App\Models\Traits\BelongsToOutlet; class ActivityCoupon extends Model { - use BelongsToOutlet; + use BelongsToOutlet, BelongsToActivity; protected $dates = [ 'start_at', @@ -30,17 +31,6 @@ class ActivityCoupon extends Model */ protected $with = ['activity']; - /** - * Notes: 关联活动 - * @Author: 玄尘 - * @Date : 2020/6/30 9:40 - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function activity() - { - return $this->belongsTo(Activity::class); - } - /** * Notes: 卡券状态 * @Author: 玄尘 diff --git a/app/Models/ActivityGrant.php b/app/Models/ActivityGrant.php new file mode 100644 index 0000000..4d9c6be --- /dev/null +++ b/app/Models/ActivityGrant.php @@ -0,0 +1,12 @@ +belongsTo(Activity::class); + } + +} diff --git a/app/Models/User.php b/app/Models/User.php index ba7474d..76a3cbe 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -16,14 +16,12 @@ class User extends Authenticatable /** * The attributes that are mass assignable. - * * @var array */ protected $guarded = []; /** * The attributes that should be hidden for arrays. - * * @var array */ protected $hidden = [ @@ -91,7 +89,7 @@ class User extends Authenticatable /** * Notes: 密码加密 * @Author: - * @Date: 2019/9/6 11:37 + * @Date : 2019/9/6 11:37 * @param $password */ protected function setPasswordAttribute($password) @@ -129,12 +127,12 @@ class User extends Authenticatable public function getCouponCount($type, $date = '') { return $this->coupons() - ->whereIn('status', [2]) - ->where('thirdPartyGoodsId', $type) - ->when($date, function ($q) { - $q->whereDate('created_at', now()->format('Y-m-d')); - }) - ->count(); + ->whereIn('status', [2]) + ->where('thirdPartyGoodsId', $type) + ->when($date, function ($q) { + $q->whereDate('created_at', now()->format('Y-m-d')); + }) + ->count(); } } diff --git a/app/Models/UserCode.php b/app/Models/UserCode.php index eb16966..85c416e 100644 --- a/app/Models/UserCode.php +++ b/app/Models/UserCode.php @@ -4,8 +4,10 @@ namespace App\Models; class UserCode extends Model { + protected $casts = [ 'codes' => 'array', 'profit' => 'array', ]; + } diff --git a/app/Models/UserInfo.php b/app/Models/UserInfo.php index 9e201dd..f214054 100644 --- a/app/Models/UserInfo.php +++ b/app/Models/UserInfo.php @@ -14,7 +14,7 @@ class UserInfo extends Model /** * Notes: 获取性别的文字显示 * @Author: - * @Date: 2019/9/12 09:46 + * @Date : 2019/9/12 09:46 * @return string */ protected function getSexTextAttribute() @@ -35,7 +35,7 @@ class UserInfo extends Model /** * Notes: 处理默认头像 * @Author: - * @Date: 2019/9/12 13:44 + * @Date : 2019/9/12 13:44 * @param $avatar * @return string */ diff --git a/app/Models/UserPingan.php b/app/Models/UserPingan.php index 174974d..4fc3271 100644 --- a/app/Models/UserPingan.php +++ b/app/Models/UserPingan.php @@ -6,6 +6,6 @@ use App\Models\Traits\BelongsToUser; class UserPingan extends Model { - use BelongsToUser; + use BelongsToUser; } diff --git a/app/Models/WoCouponLog.php b/app/Models/WoCouponLog.php index f0962c9..688080d 100644 --- a/app/Models/WoCouponLog.php +++ b/app/Models/WoCouponLog.php @@ -4,8 +4,10 @@ namespace App\Models; class WoCouponLog extends Model { + public function coupon() { return $this->belongsTo(WoCoupon::class, 'wo_coupon_id', 'id'); } + } diff --git a/packages/coupon/src/Action/ysd/YsdGrant.php b/packages/coupon/src/Action/ysd/YsdGrant.php index 067988b..b72c615 100644 --- a/packages/coupon/src/Action/ysd/YsdGrant.php +++ b/packages/coupon/src/Action/ysd/YsdGrant.php @@ -18,15 +18,18 @@ class YsdGrant extends Init return '发券失败,没有找到这个活动。'; } - if ($activity->user) { - $info = User::where('outlet_id', $this->outletId)->first(); - if (!$info) { - return '发券失败,未查询到此网点信息。'; - } + $outlet = User::where('outlet_id', $this->outletId)->first(); + if (!$outlet) { + return '发券失败,未查询到此网点信息。'; + } - if ($info->parent_id != $activity->user_id) { - return '发券失败,您没有权限参加这个活动!'; - } + $grants = $activity->grants()->pluck('user_id'); + if ($grants->isEmpty()) { + return '发券失败,此活动还没有配置可发券渠道,请联系相关人员进行配置。'; + } + + if (!in_array($outlet->parent_id, $grants->toArray())) { + return '发券失败,您没有权限发此类优惠券。'; } $coupon = $activity->grant($this->mobile, $this->outletId); diff --git a/packages/coupon/src/Action/ysd/YsdQuery.php b/packages/coupon/src/Action/ysd/YsdQuery.php index c687c9e..81707ec 100644 --- a/packages/coupon/src/Action/ysd/YsdQuery.php +++ b/packages/coupon/src/Action/ysd/YsdQuery.php @@ -24,8 +24,19 @@ class YsdQuery extends Init throw new \Exception('卡券编号错误,未查询到卡券信息'); } - if ($coupon->activity->user_id > 0 && $info->parent_id != $coupon->activity->user_id) { - throw new \Exception('您没有权限查询此卡券信息。'); + $activity = $coupon->activity; + if (!$activity) { + throw new \Exception('操作失败,未查到活动信息'); + } + + $verifications = $activity->verifications()->pluck('user_id'); + + if ($verifications->isEmpty()) { + throw new \Exception('操作失败,此活动还没有配置可核券渠道,请联系相关人员进行配置。'); + } + + if (!in_array($info->parent_id, $verifications->toArray())) { + throw new \Exception('操作失败,您没有权限查询此卡券信息。'); } return $coupon; diff --git a/packages/coupon/src/Action/ysd/YsdVerification.php b/packages/coupon/src/Action/ysd/YsdVerification.php index 689fdb7..ecf9c44 100644 --- a/packages/coupon/src/Action/ysd/YsdVerification.php +++ b/packages/coupon/src/Action/ysd/YsdVerification.php @@ -104,10 +104,6 @@ class YsdVerification extends Init return '核销失败,优惠券不可核销'; } - if ($this->query_coupon->activity->user_id > 0 && $this->user->id !== $this->query_coupon->activity->user_id) { - return '核销失败,您没有权限核销此优惠券。'; - } - $now = now(); if ($this->query_coupon->start_at->gt($now)) {