Files
huangjingfen/pro_v3.5.1/app/controller/admin/v1/hjf/MemberController.php
apple 76ccb24679 feat(fsgx): HJF queue merge, brokerage timing, cycle commission, points release
- Add HJF jobs, services, DAOs, models, admin/API controllers, release command
- Respect brokerage_timing (on_pay vs confirm); dispatch HjfOrderPayJob for queue goods
- Queue-only cycle commission and position index fix in StoreOrderCreateServices
- UserBill income types: frozen_points_brokerage, frozen_points_release
- Timer: fsgx_release_frozen_points -> PointsReleaseServices
- Agent tasks: no_assess filtering for direct/umbrella counts
- Migrations: queue_pool, points_release_log, fsgx_v1 checklist updates
- Admin/uniapp: crontab preset, membership level, user list, finance routes, docs

Made-with: Cursor
2026-03-24 11:59:09 +08:00

162 lines
5.3 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
declare(strict_types=1);
namespace app\controller\admin\v1\hjf;
use app\controller\admin\AuthController;
use app\dao\user\UserDao;
use app\services\agent\AgentLevelServices;
use app\services\hjf\MemberLevelServices;
use think\annotation\Inject;
/**
* Admin · 会员管理接口(改造复用版)
*
* 复用 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
*
* Class MemberController
* @package app\controller\admin\v1\hjf
*/
class MemberController extends AuthController
{
#[Inject]
protected UserDao $userDao;
#[Inject]
protected MemberLevelServices $levelServices;
#[Inject]
protected AgentLevelServices $agentLevelServices;
/**
* 会员列表(分页)
*/
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'] . '%'];
}
if ($where['member_level'] !== '') {
$grade = (int)$where['member_level'];
if ($grade === 0) {
$condition['agent_level'] = 0;
} else {
$agentLevelId = $this->agentLevelServices->getLevelIdByGrade($grade);
$condition['agent_level'] = $agentLevelId ?: -1;
}
}
$count = $this->userDao->count($condition);
$list = $this->userDao->selectList(
$condition,
'uid,nickname,avatar,phone,agent_level,frozen_points,available_points,now_money,spread_uid,add_time',
$page,
$limit,
'uid',
'desc'
);
$levelList = $this->agentLevelServices->dao->getList(['is_del' => 0, 'status' => 1]);
$levelMap = array_column($levelList, null, 'id');
foreach ($list as &$item) {
$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']);
$item['umbrella_order_count'] = $this->levelServices->getUmbrellaQueueOrderCount((int)$item['uid']);
$item['direct_spread_count'] = $this->levelServices->getDirectSpreadCount((int)$item['uid']);
}
unset($item);
return $this->success(compact('list', 'count'));
}
/**
* 手动调整会员等级
*/
public function updateLevel(int $uid): mixed
{
$data = $this->request->getMore([
['member_level', 0],
]);
$grade = (int)$data['member_level'];
if ($grade < 0 || $grade > 4) {
return $this->fail('等级范围 0-4');
}
$user = $this->userDao->get($uid);
if (!$user) {
return $this->fail('用户不存在');
}
$this->levelServices->setUserLevel($uid, $grade);
return $this->success('更新成功');
}
/**
* 获取会员等级配置(从 eb_agent_level 表读取)
*/
public function getConfig(): mixed
{
$levelList = $this->agentLevelServices->dao->getList(['is_del' => 0, 'status' => 1]);
$config = [];
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,
];
}
return $this->success($config);
}
/**
* 保存会员等级配置(写入 eb_agent_level 表)
*/
public function saveConfig(): mixed
{
$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);
}
}
return $this->success('保存成功');
}
}