修改:平台激活兑换码改为分配兑换码

添加:商户管理后台 - 添加分配兑换码并激活功能
This commit is contained in:
wuhui_zzw 2024-03-03 10:47:21 +08:00
parent ed4c18b356
commit 583f18cba9
6 changed files with 176 additions and 45 deletions

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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'],
]);
}
}

View File

@ -1,6 +1,10 @@
<?php
namespace app\controller\admin\user;
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;
use app\common\repositories\user\VipExchangeCodeRepository;
use crmeb\basic\BaseController;
use think\App;
@ -25,7 +29,8 @@ class ExchangeCode extends BaseController{
*/
public function getList(){
[$page, $limit] = $this->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);
}
}

View File

@ -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',
]);
/**
* 付费会员权益
*/

View File

@ -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)