2026-03-21 02:55:24 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\controller\admin\v1\hjf;
|
|
|
|
|
|
|
|
|
|
|
|
use app\controller\admin\AuthController;
|
|
|
|
|
|
use app\dao\user\UserDao;
|
2026-03-22 01:43:36 +08:00
|
|
|
|
use app\services\agent\AgentLevelServices;
|
2026-03-21 02:55:24 +08:00
|
|
|
|
use app\services\hjf\MemberLevelServices;
|
|
|
|
|
|
use think\annotation\Inject;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-03-22 01:43:36 +08:00
|
|
|
|
* Admin · 会员管理接口(改造复用版)
|
2026-03-21 02:55:24 +08:00
|
|
|
|
*
|
2026-03-22 01:43:36 +08:00
|
|
|
|
* 复用 eb_agent_level 体系,使用 eb_user.agent_level 字段。
|
|
|
|
|
|
*
|
|
|
|
|
|
* GET /adminapi/hjf/member/list — 会员列表
|
|
|
|
|
|
* PUT /adminapi/hjf/member/level/:uid — 手动调整会员等级
|
|
|
|
|
|
* GET /adminapi/hjf/member/config — 获取会员等级配置(从 eb_agent_level 读取)
|
|
|
|
|
|
* POST /adminapi/hjf/member/config — 保存会员等级配置(写入 eb_agent_level)
|
2026-03-21 02:55:24 +08:00
|
|
|
|
*
|
|
|
|
|
|
* Class MemberController
|
|
|
|
|
|
* @package app\controller\admin\v1\hjf
|
|
|
|
|
|
*/
|
|
|
|
|
|
class MemberController extends AuthController
|
|
|
|
|
|
{
|
|
|
|
|
|
#[Inject]
|
|
|
|
|
|
protected UserDao $userDao;
|
|
|
|
|
|
|
|
|
|
|
|
#[Inject]
|
|
|
|
|
|
protected MemberLevelServices $levelServices;
|
|
|
|
|
|
|
2026-03-22 01:43:36 +08:00
|
|
|
|
#[Inject]
|
|
|
|
|
|
protected AgentLevelServices $agentLevelServices;
|
|
|
|
|
|
|
2026-03-21 02:55:24 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 会员列表(分页)
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function memberList(): mixed
|
|
|
|
|
|
{
|
|
|
|
|
|
$where = $this->request->getMore([
|
|
|
|
|
|
['keyword', ''],
|
|
|
|
|
|
['member_level', ''],
|
|
|
|
|
|
['page', 1],
|
|
|
|
|
|
['limit', 20],
|
|
|
|
|
|
]);
|
|
|
|
|
|
$page = (int)$where['page'];
|
|
|
|
|
|
$limit = (int)$where['limit'];
|
|
|
|
|
|
|
|
|
|
|
|
$condition = [];
|
|
|
|
|
|
if ($where['keyword'] !== '') {
|
|
|
|
|
|
$condition['uid|nickname|phone'] = ['like', '%' . $where['keyword'] . '%'];
|
|
|
|
|
|
}
|
2026-03-22 01:43:36 +08:00
|
|
|
|
|
2026-03-21 02:55:24 +08:00
|
|
|
|
if ($where['member_level'] !== '') {
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$grade = (int)$where['member_level'];
|
|
|
|
|
|
if ($grade === 0) {
|
|
|
|
|
|
$condition['agent_level'] = 0;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$agentLevelId = $this->agentLevelServices->getLevelIdByGrade($grade);
|
|
|
|
|
|
$condition['agent_level'] = $agentLevelId ?: -1;
|
|
|
|
|
|
}
|
2026-03-21 02:55:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$count = $this->userDao->count($condition);
|
|
|
|
|
|
$list = $this->userDao->selectList(
|
|
|
|
|
|
$condition,
|
2026-03-22 01:43:36 +08:00
|
|
|
|
'uid,nickname,avatar,phone,agent_level,frozen_points,available_points,now_money,spread_uid,add_time',
|
2026-03-21 02:55:24 +08:00
|
|
|
|
$page,
|
|
|
|
|
|
$limit,
|
|
|
|
|
|
'uid',
|
|
|
|
|
|
'desc'
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$levelList = $this->agentLevelServices->dao->getList(['is_del' => 0, 'status' => 1]);
|
|
|
|
|
|
$levelMap = array_column($levelList, null, 'id');
|
|
|
|
|
|
|
2026-03-21 02:55:24 +08:00
|
|
|
|
foreach ($list as &$item) {
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$agentLevelId = (int)($item['agent_level'] ?? 0);
|
|
|
|
|
|
$levelInfo = $levelMap[$agentLevelId] ?? null;
|
|
|
|
|
|
$item['member_level'] = $levelInfo ? (int)$levelInfo['grade'] : 0;
|
|
|
|
|
|
$item['member_level_name'] = $levelInfo ? $levelInfo['name'] : '普通会员';
|
|
|
|
|
|
$item['direct_order_count'] = $this->levelServices->getDirectQueueOrderCount((int)$item['uid']);
|
2026-03-21 02:55:24 +08:00
|
|
|
|
$item['umbrella_order_count'] = $this->levelServices->getUmbrellaQueueOrderCount((int)$item['uid']);
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$item['direct_spread_count'] = $this->levelServices->getDirectSpreadCount((int)$item['uid']);
|
2026-03-21 02:55:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
unset($item);
|
|
|
|
|
|
|
|
|
|
|
|
return $this->success(compact('list', 'count'));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 手动调整会员等级
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function updateLevel(int $uid): mixed
|
|
|
|
|
|
{
|
|
|
|
|
|
$data = $this->request->getMore([
|
|
|
|
|
|
['member_level', 0],
|
|
|
|
|
|
]);
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$grade = (int)$data['member_level'];
|
2026-03-21 02:55:24 +08:00
|
|
|
|
|
2026-03-22 01:43:36 +08:00
|
|
|
|
if ($grade < 0 || $grade > 4) {
|
2026-03-21 02:55:24 +08:00
|
|
|
|
return $this->fail('等级范围 0-4');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$user = $this->userDao->get($uid);
|
|
|
|
|
|
if (!$user) {
|
|
|
|
|
|
return $this->fail('用户不存在');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$this->levelServices->setUserLevel($uid, $grade);
|
2026-03-21 02:55:24 +08:00
|
|
|
|
|
|
|
|
|
|
return $this->success('更新成功');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-03-22 01:43:36 +08:00
|
|
|
|
* 获取会员等级配置(从 eb_agent_level 表读取)
|
2026-03-21 02:55:24 +08:00
|
|
|
|
*/
|
|
|
|
|
|
public function getConfig(): mixed
|
|
|
|
|
|
{
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$levelList = $this->agentLevelServices->dao->getList(['is_del' => 0, 'status' => 1]);
|
2026-03-21 02:55:24 +08:00
|
|
|
|
$config = [];
|
2026-03-22 01:43:36 +08:00
|
|
|
|
foreach ($levelList as $level) {
|
|
|
|
|
|
$config[] = [
|
|
|
|
|
|
'id' => $level['id'],
|
|
|
|
|
|
'name' => $level['name'],
|
|
|
|
|
|
'grade' => $level['grade'],
|
|
|
|
|
|
'direct_reward_points' => $level['direct_reward_points'] ?? 0,
|
|
|
|
|
|
'umbrella_reward_points' => $level['umbrella_reward_points'] ?? 0,
|
|
|
|
|
|
];
|
2026-03-21 02:55:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
return $this->success($config);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-03-22 01:43:36 +08:00
|
|
|
|
* 保存会员等级配置(写入 eb_agent_level 表)
|
2026-03-21 02:55:24 +08:00
|
|
|
|
*/
|
2026-03-22 01:43:36 +08:00
|
|
|
|
public function saveConfig(): mixed
|
2026-03-21 02:55:24 +08:00
|
|
|
|
{
|
2026-03-22 01:43:36 +08:00
|
|
|
|
$levels = $this->request->post('levels', []);
|
|
|
|
|
|
if (!is_array($levels)) {
|
|
|
|
|
|
return $this->fail('参数格式错误');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($levels as $item) {
|
|
|
|
|
|
if (empty($item['id'])) continue;
|
|
|
|
|
|
$updateData = [];
|
|
|
|
|
|
if (isset($item['direct_reward_points'])) {
|
|
|
|
|
|
$updateData['direct_reward_points'] = (int)$item['direct_reward_points'];
|
|
|
|
|
|
}
|
|
|
|
|
|
if (isset($item['umbrella_reward_points'])) {
|
|
|
|
|
|
$updateData['umbrella_reward_points'] = (int)$item['umbrella_reward_points'];
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($updateData) {
|
|
|
|
|
|
$this->agentLevelServices->dao->update((int)$item['id'], $updateData);
|
2026-03-21 02:55:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $this->success('保存成功');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|