2022-08-11 15:06:36 +08:00

156 lines
4.6 KiB
PHP

<?php
namespace app\data\controller\base;
use app\data\model\BaseUserUpgrade;
use app\data\service\RebateService;
use think\admin\Controller;
/**
* 用户等级管理
* Class Upgrade
* @package app\data\controller\base
*/
class Upgrade extends Controller
{
/**
* 用户等级管理
* @auth true
* @menu true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function index()
{
$this->title = '用户等级管理';
BaseUserUpgrade::mQuery()->like('name')->equal('status')->dateBetween('create_at')->layTable();
}
/**
* 添加用户等级
* @auth true
* @return void
* @throws \think\db\exception\DbException
*/
public function add()
{
$this->max = BaseUserUpgrade::maxNumber() + 1;
BaseUserUpgrade::mForm('form');
}
/**
* 编辑用户等级
* @auth true
* @return void
* @throws \think\db\exception\DbException
*/
public function edit()
{
$this->max = BaseUserUpgrade::maxNumber();
BaseUserUpgrade::mForm('form');
}
/**
* 表单数据处理
* @param array $vo
* @throws \think\db\exception\DbException
*/
protected function _form_filter(array &$vo)
{
if ($this->request->isGet()) {
$this->prizes = RebateService::PRIZES;
$vo['number'] = $vo['number'] ?? BaseUserUpgrade::maxNumber();
} else {
$vo['utime'] = time();
// 用户升级条件开关
$vo['goods_vip_status'] = isset($vo['goods_vip_status']) ? 1 : 0;
$vo['teams_users_status'] = isset($vo['teams_users_status']) ? 1 : 0;
$vo['teams_direct_status'] = isset($vo['teams_direct_status']) ? 1 : 0;
$vo['teams_indirect_status'] = isset($vo['teams_indirect_status']) ? 1 : 0;
$vo['order_amount_status'] = isset($vo['order_amount_status']) ? 1 : 0;
// 默认等级去除条件
if (empty($vo['number'])) {
$vo['rebate_rule'] = [];
foreach ($vo as $k => &$v) if (is_numeric(stripos($k, '_status'))) $v = 0;
}
// 根据数量判断状态
$vo['teams_users_status'] = intval($vo['teams_users_status'] && $vo['teams_users_number'] > 0);
$vo['teams_direct_status'] = intval($vo['teams_direct_status'] && $vo['teams_direct_number'] > 0);
$vo['teams_indirect_status'] = intval($vo['teams_indirect_status'] && $vo['teams_indirect_number'] > 0);
$vo['order_amount_status'] = intval($vo['order_amount_status'] && $vo['order_amount_number'] > 0);
// 检查升级条件配置
$count = 0;
foreach ($vo as $k => $v) if (is_numeric(stripos($k, '_status'))) $count += $v;
if (empty($count) && $vo['number'] > 0) $this->error('升级条件不能为空!');
}
}
/**
* 表单结果处理
* @param boolean $state
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function _form_result(bool $state)
{
if ($state) {
$isasc = input('old_number', 0) <= input('number', 0);
$order = $isasc ? 'number asc,utime asc' : 'number asc,utime desc';
foreach (BaseUserUpgrade::mk()->order($order)->select() as $number => $upgrade) {
$upgrade->save(['number' => $number]);
}
}
}
/**
* 重算用户等级
* @auth true
*/
public function sync()
{
$this->_queue('重新计算所有用户等级', 'xdata:UserUpgrade');
}
/**
* 修改等级状态
* @auth true
*/
public function state()
{
BaseUserUpgrade::mSave();
}
/**
* 删除用户等级
* @auth true
*/
public function remove()
{
BaseUserUpgrade::mDelete();
}
/**
* 状态变更处理
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _save_result()
{
$this->_form_result(true);
}
/**
* 删除结果处理
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _delete_result()
{
$this->_form_result(true);
}
}