diff --git a/app/common/dao/user/VipExchangeCodeDao.php b/app/common/dao/user/VipExchangeCodeDao.php index d8639c0..723028a 100644 --- a/app/common/dao/user/VipExchangeCodeDao.php +++ b/app/common/dao/user/VipExchangeCodeDao.php @@ -34,26 +34,31 @@ class VipExchangeCodeDao extends BaseDao{ ->when(isset($params['status']) && $params['status'] !== '',function($query) use ($params){ $query->where('status', (int)$params['status']); }) - ->when(isset($params['mer_id']) && $params['mer_id'] !== '',function($query) use ($params){ + ->when(isset($params['mer_id']) && $params['mer_id'] !== '' && (int)$params['mer_id'] > 0,function($query) use ($params){ $query->where('mer_id', (int)$params['mer_id']); }) + ->when(isset($params['staff_id']) && $params['staff_id'] !== '' && (int)$params['staff_id'] > 0,function($query) use ($params){ + $query->where('staff_id', (int)$params['staff_id']); + }) ->when(isset($params['group_data_id']) && $params['group_data_id'] !== '',function($query) use ($params){ $query->where('group_data_id', (int)$params['group_data_id']); }) ->with([ - 'mer' => function($query){ + 'mer' => function($query){ $query->field(['mer_id','mer_name'])->bind(['mer_name']); }, 'vipInfo' => function($query){ - $query->field(['group_data_id','value','value as svip_name'])->withAttr('svip_name', function ($val) { - $value = json_decode($val, true); - + $query->field(['group_data_id','value','value as svip_name'])->withAttr('svip_name',function($val){ + $value = json_decode($val,TRUE); return $value['svip_name'] ?? ''; })->bind(['svip_name']); }, - 'user' => function($query){ + 'user' => function($query){ $query->field('uid,nickname,avatar'); }, + 'staff' => function($query){ + $query->field('service_id,nickname as staff_nickname,avatar as staff_avatar')->bind(['staff_nickname','staff_avatar']); + }, ]) ->order('create_time DESC,id DESC'); } diff --git a/app/common/model/user/UserVipExchangeCode.php b/app/common/model/user/UserVipExchangeCode.php index 5f7720d..2af3d5b 100644 --- a/app/common/model/user/UserVipExchangeCode.php +++ b/app/common/model/user/UserVipExchangeCode.php @@ -2,6 +2,7 @@ namespace app\common\model\user; use app\common\model\BaseModel; +use app\common\model\store\service\StoreService; use app\common\model\system\groupData\SystemGroupData; use app\common\model\system\merchant\Merchant; @@ -25,7 +26,9 @@ class UserVipExchangeCode extends BaseModel{ public function user(){ return $this->hasOne(User::class, 'uid', 'use_user_id'); } - + public function staff(){ + return $this->hasOne(StoreService::class, 'service_id', 'staff_id'); + } diff --git a/app/common/repositories/user/VipExchangeCodeRepository.php b/app/common/repositories/user/VipExchangeCodeRepository.php index b647bf9..3604eb7 100644 --- a/app/common/repositories/user/VipExchangeCodeRepository.php +++ b/app/common/repositories/user/VipExchangeCodeRepository.php @@ -4,6 +4,7 @@ namespace app\common\repositories\user; use app\common\dao\user\VipExchangeCodeDao; use app\common\model\user\UserVipExchangeCode; use app\common\repositories\BaseRepository; +use app\common\repositories\store\service\StoreServiceRepository; use app\common\repositories\system\groupData\GroupDataRepository; use app\common\repositories\system\groupData\GroupRepository; use app\common\repositories\system\merchant\MerchantRepository; @@ -98,13 +99,13 @@ class VipExchangeCodeRepository extends BaseRepository{ return $this->dao->insertAll($insertData); } /** - * Common: 激活表单 + * Common: 分配兑换码给商户表单 * Author: wu-hui * Time: 2024/03/02 16:51 * @return \FormBuilder\Form * @throws \FormBuilder\Exception\FormBuilderException */ - public function getActivateFormData(){ + public function allocationMerchantFormData(){ $formData = []; // 获取商户列表 $merList = app()->make(MerchantRepository::class) @@ -150,16 +151,16 @@ class VipExchangeCodeRepository extends BaseRepository{ Elm::select('group_data_id','绑定会员卡类型')->options($vipList), ]; $form->setRule($rules); - return $form->setTitle( '激活兑换码')->formData($formData); + return $form->setTitle( '分配兑换码')->formData($formData); } /** - * Common: 激活兑换码 + * Common: 兑换码分配给商户(不进行激活操作) * Author: wu-hui * Time: 2024/03/02 17:09 * @param $params * @return UserVipExchangeCode */ - public function activateExchangeCode($params){ + public function allocationMerchantExchangeCode($params){ // 是否允许生成兑换码 if($params['end_id'] <= 0) throw new ValidateException('结束id必须大于0'); if($params['end_id'] <= $params['start_id']) throw new ValidateException('结束id必须大于开始id'); @@ -168,26 +169,80 @@ class VipExchangeCodeRepository extends BaseRepository{ return UserVipExchangeCode::where('id','>',$params['start_id']) ->where('id','<=',$params['end_id']) - ->where('status',0) + ->where('status', 0) + ->where(function($query) use ($params){ + $query->where('mer_id', null)->whereOr('mer_id', '<=', 0); + }) ->update([ - 'status' => 1, - 'activate' => date("Y-m-d H:i:s",time()), - 'mer_id' => $params['mer_id'], + 'mer_id' => $params['mer_id'], 'group_data_id' => $params['group_data_id'], ]); } + /** + * Common: 分配给员工并且激活表单 + * Author: wu-hui + * Time: 2024/03/03 10:03 + * @param $merId + * @return \FormBuilder\Form + * @throws \FormBuilder\Exception\FormBuilderException + */ + public function getActivateFormData($merId){ + $formData = []; + // 获取商户员工列表 + $serviceList = app()->make(StoreServiceRepository::class) + ->getSearch([]) + ->field(['nickname as label','service_id as value']) + ->where('mer_id', $merId) + ->where('is_del', 0) + ->select() + ->toArray(); + $url = Route::buildUrl('systemUserVipExchangeCodeActivateInfo')->build(); + $form = Elm::createForm($url); + $rules = [ + Elm::number('start_id','开始ID')->required()->appendRule('suffix',[ + 'type' => 'div', + 'style' => ['color' => '#999999'], + 'domProps' => [ + 'innerHTML' => '例:输入 15 则ID大于15 小于等于结束ID的兑换码都会激活', + ] + ]), + Elm::number('end_id','结束ID')->required()->appendRule('suffix',[ + 'type' => 'div', + 'style' => ['color' => '#999999'], + 'domProps' => [ + 'innerHTML' => '例:输入 80 则ID小于等于80 大于开始ID的兑换码都会激活', + ] + ]), + Elm::select('staff_id','绑定员工')->options($serviceList), + ]; + $form->setRule($rules); + return $form->setTitle( '分配并激活兑换码')->formData($formData); + } + /** + * Common: 分配给员工并且激活 + * Author: wu-hui + * Time: 2024/03/03 10:08 + * @param $params + * @param $merId + * @return UserVipExchangeCode + */ + public function activateExchangeCode($params, $merId){ + // 是否允许生成兑换码 + if($params['end_id'] <= 0) throw new ValidateException('结束id必须大于0'); + if($params['end_id'] <= $params['start_id']) throw new ValidateException('结束id必须大于开始id'); + if($params['staff_id'] <= 0) throw new ValidateException('请绑定员工'); + + return UserVipExchangeCode::where('id','>',$params['start_id']) + ->where('id','<=',$params['end_id']) + ->where('status', 0) + ->where('mer_id', $merId) + ->update([ + 'activate' => date("Y-m-d H:i:s"), + 'status' => 1, + 'staff_id' => $params['staff_id'], + ]); + } - - - - - - - - - - - } diff --git a/app/controller/admin/user/ExchangeCode.php b/app/controller/admin/user/ExchangeCode.php index eaf9473..df962e3 100644 --- a/app/controller/admin/user/ExchangeCode.php +++ b/app/controller/admin/user/ExchangeCode.php @@ -1,6 +1,10 @@ getPage(); - $params = $this->request->params(['is_export','batch_unique','status']); + $params = $this->request->params(['is_export','batch_unique','status','mer_id','staff_id','group_data_id']); + $params['mer_id'] = $this->request->merId(); $data = $this->repository->getList((array)$params,(int)$page,(int)$limit); // 导出数据处理 if($params['is_export'] == 1){ @@ -59,7 +64,8 @@ class ExchangeCode extends BaseController{ * @return mixed */ public function getBatchList(){ - $list = $this->repository->getSearchModel([])->column('batch_unique','batch_title'); + $params['mer_id'] = $this->request->merId(); + $list = $this->repository->getSearchModel($params)->column('batch_unique','batch_title'); return app('json')->success($list); } @@ -88,14 +94,21 @@ class ExchangeCode extends BaseController{ return app('json')->success('添加成功'); } /** - * Common: 激活表单 + * Common: 分配商户 || 分配给员工 * Author: wu-hui * Time: 2024/03/02 16:51 * @return mixed * @throws \FormBuilder\Exception\FormBuilderException */ public function activateForm(){ - $data = $this->repository->getActivateFormData(); + $merId = $this->request->merId(); + if($merId > 0){ + // 商户操作 - 分配给员工并且激活 + $data = $this->repository->getActivateFormData($merId); + }else{ + // 总平台操作 - 分配给商户 + $data = $this->repository->allocationMerchantFormData(); + } return app('json')->success(formToData($data)); } @@ -106,12 +119,62 @@ class ExchangeCode extends BaseController{ * @return mixed */ public function activateInfo(){ - $params = $this->request->params(['start_id','end_id',['mer_id', 0],['group_data_id',0]]); - $this->repository->activateExchangeCode($params); + $merId = $this->request->merId(); + if($merId > 0){ + // 商户操作 - 分配给员工并且激活 + $params = $this->request->params(['start_id','end_id',['staff_id', 0]]); + $this->repository->activateExchangeCode($params, $merId); + }else{ + // 总平台操作 - 分配给商户 + $params = $this->request->params(['start_id','end_id',['mer_id', 0],['group_data_id',0]]); + $this->repository->allocationMerchantExchangeCode($params); + } return app('json')->success('激活成功'); } + /** + * Common: 获取搜索条件对象列表 + * Author: wu-hui + * Time: 2024/03/03 10:40 + * @return mixed + */ + public function getSearchData(){ + $merId = $this->request->merId(); + $groupId = app()->make(GroupRepository::class)->getSearch(['group_key' => 'svip_pay'])->value('group_id'); + $data['vipList'] = app()->make(GroupDataRepository::class) + ->getSearch([]) + ->field(['group_data_id','value']) + ->withAttr('value', function ($val) { + $value = json_decode($val, true); + return $value['svip_name'] ?? ''; + }) + ->where('mer_id', 0) + ->where('status', 1) + ->where('group_id', $groupId) + ->order('sort DESC,group_data_id ASC') + ->select() + ->toArray(); + if($merId > 0){ + // 商户操作 + $data['service'] = app()->make(StoreServiceRepository::class) + ->getSearch([]) + ->field(['nickname','service_id']) + ->where('mer_id', $merId) + ->where('is_del', 0) + ->select() + ->toArray(); + }else{ + // 总平台操作 + $data['mer_list'] = app()->make(MerchantRepository::class) + ->search(['is_del' => 0,'merchant_type' => 0,'status' => 1]) + ->field(['mer_id','mer_name']) + ->select() + ->toArray(); + } + + return app('json')->success($data); + } } diff --git a/route/admin/member.php b/route/admin/member.php index e3fa6dd..9a8583d 100644 --- a/route/admin/member.php +++ b/route/admin/member.php @@ -47,7 +47,7 @@ Route::group(function () { ], ] ]); - //付费会员等级 + // 会员卡兑换码 Route::group('user/exchangeCode', function () { // 兑换码列表 Route::get('getList', 'admin.user.ExchangeCode/getList')->name('systemUserVipExchangeCodeGetList'); @@ -62,23 +62,15 @@ Route::group(function () { // 提交激活表单 Route::post('activateInfo', 'admin.user.ExchangeCode/activateInfo')->name('systemUserVipExchangeCodeActivateInfo'); - - - - })->append(['type' => 1])->option([ '_path' => '/user/member/exchangeCode', '_auth' => true, ]); - - - // 会员订单列表 Route::get('user/svip/order_lst', 'admin.user.Svip/payList')->name('systemUserSvipPayLst')->option([ '_alias' => '列表', '_path' => '/user/member/record', ]); - /** * 付费会员权益 */ diff --git a/route/merchant/users.php b/route/merchant/users.php index 92f4c9f..a69df47 100644 --- a/route/merchant/users.php +++ b/route/merchant/users.php @@ -14,7 +14,6 @@ Route::group(function () { '_path' => '/user/searchRecord', '_auth' => true, ]); - //商户用户列表 Route::group('user', function () { Route::get('lst', '/getList')->name('merchantUserLst')->option([ @@ -39,7 +38,6 @@ Route::group(function () { '_path' => '/user/list', '_auth' => true, ]); - //用户自动标签 Route::group('auto_label', function () { Route::get('lst', '/getList')->name('merchantLabelRuleLst')->option([ @@ -61,7 +59,6 @@ Route::group(function () { '_path' => '/user/maticlabel', '_auth' => true, ]); - //手动标签 Route::group('user/label', function () { Route::get('lst', '/lst')->name('merchantUserLabelLst')->option([ @@ -91,7 +88,23 @@ Route::group(function () { '_auth' => true, ]); + // 会员卡兑换码 + Route::group('user/exchangeCode', function () { + // 兑换码列表 + Route::get('getList', 'admin.user.ExchangeCode/getList')->name('systemUserVipExchangeCodeGetList'); + // 兑换码批次列表 + Route::get('getBatchList', 'admin.user.ExchangeCode/getBatchList')->name('systemUserVipExchangeCodeGetBatchList'); + // 激活表单 + Route::get('activateForm', 'admin.user.ExchangeCode/activateForm')->name('systemUserVipExchangeCodeActivateForm'); + // 提交激活表单 + Route::post('activateInfo', 'admin.user.ExchangeCode/activateInfo')->name('systemUserVipExchangeCodeActivateInfo'); + // 搜索条件对象列表 + Route::get('getSearchData', 'admin.user.ExchangeCode/getSearchData')->name('systemUserVipExchangeCodeGetSearchData'); + })->append(['type' => 1])->option([ + '_path' => '/user/member/exchangeCode', + '_auth' => true, + ]); })->middleware(AllowOriginMiddleware::class)