Files
huangjingfen/pro_v3.5.1_副本/app/controller/admin/v1/hjf/MemberController.php

174 lines
5.2 KiB
PHP
Raw Normal View History

feat(fsgx): 完成全部24项开发任务 Phase1-7 Phase1 后端核心: - 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess) - SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机) - StoreOrderCreateServices 周期循环佣金计算 - StoreOrderTakeServices 佣金发放后同步冻结积分 - StoreProductServices/StoreProduct 保存 is_queue_goods Phase2 后端接口: - GET /api/hjf/brokerage/progress 佣金周期进度 - GET /api/hjf/assets/overview 资产总览 - HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务 - PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口 - GET /adminapi/hjf/points/release_log 积分日志接口 Phase3 前端清理: - hjfCustom.js 路由精简(仅保留 points/log) - hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口 - pages.json 公排→推荐佣金/佣金记录/佣金规则 Phase4-5 前端改造: - queue/status.vue 推荐佣金进度页整体重写 - 商品详情/订单确认/支付结果页文案与逻辑改造 - 个人中心/资产页/引导页/规则页文案改造 - HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造 - 推广中心嵌入佣金进度摘要 - hjfMockData.js 全量更新(公排字段→佣金字段) Phase6 Admin 增强: - 用户列表新增 frozen_points/available_points 列及不考核操作按钮 - hjfPoints.js USE_MOCK=false 对接真实积分日志接口 Phase7 配置文档: - docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单 Made-with: Cursor
2026-03-23 22:32:19 +08:00
<?php
declare(strict_types=1);
namespace app\controller\admin\v1\hjf;
use app\controller\admin\AuthController;
use app\dao\user\UserDao;
use app\services\hjf\MemberLevelServices;
use app\services\system\SystemConfigServices;
use crmeb\services\SystemConfigService;
use think\annotation\Inject;
/**
* Admin · 会员管理接口
*
* GET /adminapi/hjf/member/list 会员列表(分页,支持按等级筛选)
* PUT /adminapi/hjf/member/level/:uid 手动调整会员等级
* GET /adminapi/hjf/member/config 获取会员等级配置
* POST /adminapi/hjf/member/config 保存会员等级配置
*
* Class MemberController
* @package app\controller\admin\v1\hjf
*/
class MemberController extends AuthController
{
#[Inject]
protected UserDao $userDao;
#[Inject]
protected MemberLevelServices $levelServices;
/**
* 会员列表(分页)
*/
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'] !== '') {
$condition['member_level'] = (int)$where['member_level'];
}
$count = $this->userDao->count($condition);
$list = $this->userDao->selectList(
$condition,
'uid,nickname,avatar,phone,member_level,frozen_points,available_points,now_money,spread_uid,add_time',
$page,
$limit,
'uid',
'desc'
);
// 附加直推单数 & 伞下单数
foreach ($list as &$item) {
$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'));
}
/**
* 手动调整会员等级
*
* @param int $uid
*/
public function updateLevel(int $uid): mixed
{
$data = $this->request->getMore([
['member_level', 0],
]);
$newLevel = (int)$data['member_level'];
if ($newLevel < 0 || $newLevel > 4) {
return $this->fail('等级范围 0-4');
}
$user = $this->userDao->get($uid);
if (!$user) {
return $this->fail('用户不存在');
}
$this->userDao->update($uid, ['member_level' => $newLevel], 'uid');
return $this->success('更新成功');
}
/**
* 获取会员等级配置
*/
public function getConfig(): mixed
{
$keys = [
'hjf_level_direct_require_1',
'hjf_level_umbrella_require_2',
'hjf_level_umbrella_require_3',
'hjf_level_umbrella_require_4',
'hjf_reward_direct_1',
'hjf_reward_direct_2',
'hjf_reward_direct_3',
'hjf_reward_direct_4',
'hjf_reward_umbrella_1',
'hjf_reward_umbrella_2',
'hjf_reward_umbrella_3',
'hjf_reward_umbrella_4',
];
$config = [];
$defaults = [
'hjf_level_direct_require_1' => 3,
'hjf_level_umbrella_require_2' => 30,
'hjf_level_umbrella_require_3' => 100,
'hjf_level_umbrella_require_4' => 1000,
'hjf_reward_direct_1' => 500,
'hjf_reward_direct_2' => 800,
'hjf_reward_direct_3' => 1000,
'hjf_reward_direct_4' => 1300,
'hjf_reward_umbrella_1' => 0,
'hjf_reward_umbrella_2' => 300,
'hjf_reward_umbrella_3' => 200,
'hjf_reward_umbrella_4' => 300,
];
foreach ($keys as $key) {
$config[$key] = SystemConfigService::get($key, $defaults[$key] ?? 0);
}
return $this->success($config);
}
/**
* 保存会员等级配置
*/
public function saveConfig(SystemConfigServices $configServices): mixed
{
$allowedKeys = [
'hjf_level_direct_require_1',
'hjf_level_umbrella_require_2',
'hjf_level_umbrella_require_3',
'hjf_level_umbrella_require_4',
'hjf_reward_direct_1',
'hjf_reward_direct_2',
'hjf_reward_direct_3',
'hjf_reward_direct_4',
'hjf_reward_umbrella_1',
'hjf_reward_umbrella_2',
'hjf_reward_umbrella_3',
'hjf_reward_umbrella_4',
];
$data = $this->request->post();
foreach ($data as $key => $value) {
if (in_array($key, $allowedKeys, true)) {
$configServices->setConfig($key, (string)$value);
}
}
return $this->success('保存成功');
}
}