new-admin-api/app/common/repositories/user/UserInviteCodeRepository.php

240 lines
9.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\repositories\user;
use app\common\dao\user\UserInviteCodeDao;
use app\common\model\user\UserInviteCode;
use app\common\repositories\BaseRepository;
use app\common\repositories\system\groupData\GroupDataRepository;
use app\common\repositories\system\groupData\GroupRepository;
use FormBuilder\Factory\Elm;
use think\exception\ValidateException;
use think\facade\Route;
class UserInviteCodeRepository extends BaseRepository{
public function __construct(UserInviteCodeDao $dao){
$this->dao = $dao;
}
/**
* Common: 公共查询模型
* Author: wu-hui
* Time: 2024/04/02 16:59
* @param $search
* @return \app\common\model\user\UserInviteCode
*/
public function getSearchModel($search){
return $this->dao->searchList($search);
}
/**
* Common: 获取信息列表
* Author: wu-hui
* Time: 2024/04/02 16:59
* @param array $params
* @param int $page
* @param int $limit
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getList(array $params,int $page,int $limit):array{
$query = $this->dao->searchList($params);
$count = $query->count();
$list = $query->page($page,$limit)->select()->toArray();
return compact('count','list');
}
/**
* Common: 生成编辑表单数据
* Author: wu-hui
* Time: 2024/04/02 17:16
* @return \FormBuilder\Form
* @throws \FormBuilder\Exception\FormBuilderException
*/
public function getEditFormData(){
// 获取有效的会员卡列表
$groupId = app()->make(GroupRepository::class)->getSearch(['group_key' => 'svip_pay'])->value('group_id');
$vipList = app()->make(GroupDataRepository::class)
->getSearch([])
->field(['group_data_id as value','value as label'])
->withAttr('label', 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();
$formData = [];
$url = Route::buildUrl('systemUserInviteCodeEditInfo')->build();
$form = Elm::createForm($url);
$rules = [
Elm::input('batch_title','当前批次名称')->required()->col(16),
Elm::radio('generation_method', '生成方式', 0)->options([
['value' => 0, 'label' => '随机生成'],
['value' => 1, 'label' => '顺序生成'],
])->appendRule('suffix',[
'type' => 'div',
'style' => ['color' => '#999999'],
'domProps' => [
'innerHTML' => '随机生成:使用字母和数字随机生成;顺序生成:根据指定前缀,指定初始值和结束值进行生成',
]
])->control([
[
'value' => 0,
'rule' => [
Elm::input('create_num','生成数量')->required()->col(16)
->type('number')
->min('1')
->max('999999')
->step('1'),
]
],
[
'value' => 1,
'rule' => [
Elm::input('prefix','前缀')->required()->col(16),
Elm::number('start','初始值')->required()->max(999999)->col(16),
Elm::number('end','结束值')->required()->max(999999)->col(16),
]
]
]),
Elm::select('group_data_id','绑定会员卡类型')->options($vipList),
];
$form->setRule($rules);
return $form->setTitle( '添加邀请码')->formData($formData);
}
/**
* Common: 码生成
* Author: wu-hui
* Time: 2024/04/02 17:22
* @param $params
* @return int
*/
public function createExchangeCode($params){
if((int)$params['group_data_id'] <= 0) throw new ValidateException('请选择绑定会员卡类型!');
// 是否允许生成邀请码
$isHas = (int)$this->dao->getSearch(['batch_title'=>$params['batch_title']])->value('id');
if($isHas > 0) throw new ValidateException('批次名称已经存在,请更换名称!');
// 生成批次唯一编号
$initial = substr(getFirstCharter($params['batch_title']), 0, 1);
$batchUnique = strtoupper(uniqid($initial));// 批次唯一编号
// 生成操作
$insertData = [];
if($params['generation_method'] == 1){
// 顺序生成
if($params['start'] <= 0 || $params['end'] <= 0) throw new ValidateException('初始值和结束值必须大于0');
if($params['start'] >= $params['end']) throw new ValidateException('初始值必须小于结束值');
for($i = $params['start']; $i <= $params['end']; $i++){
// 邀请码生成
$exchangeCode = strtoupper($initial . substr(uniqid(), -8));
if(!in_array($exchangeCode, array_column($insertData,'exchange_code'))){
$insertData[] = [
'batch_title' => $params['batch_title'],
'batch_unique' => $batchUnique,
'exchange_code' => $params['prefix'] . str_pad($i, strlen($params['end']), '0', STR_PAD_LEFT),
'group_data_id' => $params['group_data_id'],
];
}
}
}else{
// 随机生成
if($params['create_num'] <= 0) throw new ValidateException('生成数量必须大于0');
for($i = 0; count($insertData) < $params['create_num']; $i++){
// 邀请码生成
$exchangeCode = strtoupper($initial . substr(uniqid(), -8));
if(!in_array($exchangeCode, array_column($insertData,'exchange_code'))){
$insertData[] = [
'batch_title' => $params['batch_title'],
'batch_unique' => $batchUnique,
'exchange_code' => strtoupper($initial . substr(uniqid(), -8)),
'group_data_id' => $params['group_data_id'],
];
}
}
}
return $this->dao->insertAll($insertData);
}
/**
* Common: 作废表单
* Author: wu-hui
* Time: 2024/04/02 17:38
* @return \FormBuilder\Form
* @throws \FormBuilder\Exception\FormBuilderException
*/
public function cancelFormData(){
$formData = [];
$url = Route::buildUrl('systemUserInviteCodeCancelInfo')->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的邀请码都会作废',
]
]),
];
$form->setRule($rules);
return $form->setTitle( '作废邀请码')->formData($formData);
}
/**
* Common: 作废表单提交
* Author: wu-hui
* Time: 2024/04/02 17:39
* @param $params
* @return UserInviteCode
*/
public function cancelExchangeCode($params){
// 是否允许生成邀请码
if($params['end_id'] <= 0) throw new ValidateException('结束id必须大于0');
if($params['end_id'] <= $params['start_id']) throw new ValidateException('结束id必须大于开始id');
return UserInviteCode::where('id','>',$params['start_id'])
->where('id','<=',$params['end_id'])
->where('status','<>', 2)
->update([
'status' => 3,
]);
}
/**
* Common: 修改码
* Author: wu-hui
* Time: 2024/04/02 17:43
* @param $params
* @return UserInviteCode
*/
public function updateExchangeCode($params){
if(empty($params['new_exchange_code'])) throw new ValidateException('请输入新邀请码!');
if(strlen($params['new_exchange_code']) > 10) throw new ValidateException('邀请码长度不能超过10个字符');
// 判断:是否存在信息
$info = $this->getSearchModel(['id'=>$params['id']])->findOrEmpty();
if((int)($info->id ?? 0) <= 0) throw new ValidateException('邀请码不存在!');
if((int)($info->status ?? 0) != 0) throw new ValidateException('当前邀请码不允许修改!');
// 判断:是否已经存在
$isHas = (int)$this->getSearchModel(['exchange_code'=>$params['new_exchange_code']])->value('id');
if($isHas > 0) throw new ValidateException('邀请码已经存在!');
// 执行修改
return UserInviteCode::where('id',$params['id'])
->update([
'exchange_code' => $params['new_exchange_code'],
]);
}
}