| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace app\admin\model\user;
- use app\admin\model\system\SystemUserAgentLevel;
- use app\admin\model\user\User;
- use crmeb\traits\ModelTrait;
- use crmeb\basic\BaseModel;
- /**
- * 用户代理等级 Model
- * 负责管理用户与代理等级的关联数据查询、统计等逻辑
- * Class UserAgentLevel
- * @package app\admin\model\agent
- */
- class UserAgentLevel extends BaseModel
- {
- /**
- * 数据表主键
- * @var string
- */
- protected $pk = 'id';
- /**
- * 模型关联的数据表名
- * @var string
- */
- protected $name = 'user_agent_level';
- use ModelTrait;
- /**
- * 构建代理等级查询条件
- * @param array $where 查询条件(如昵称、等级ID等)
- * @param string $alias 当前表别名
- * @param string $userAlias 用户表别名前缀
- * @param BaseModel|null $model 模型实例(支持链式调用)
- * @return BaseModel
- */
- public static function setWhere($where, $alias = '', $userAlias = 'u.', $model = null)
- {
- $model = is_null($model) ? new self() : $model;
- if ($alias) {
- $model = $model->alias($alias);
- $alias .= '.';
- }
- // 昵称模糊查询
- if (isset($where['nickname']) && $where['nickname'] !== '') {
- $model = $model->where("{$userAlias}nickname", 'like', "%{$where['nickname']}%");
- }
- // 代理等级ID精确查询
- if (isset($where['level_id']) && $where['level_id'] !== '') {
- $model = $model->where("{$alias}level_id", $where['level_id']);
- }
- // 过滤:状态正常 + 未删除
- return $model->where("{$alias}status", 1)->where("{$alias}is_del", 0);
- }
- /**
- * 查询用户代理等级列表(带分页、关联信息)
- * @param array $where 分页及筛选条件(page、limit、nickname、level_id等)
- * @return array 格式:['data' => 列表数据, 'count' => 总数]
- */
- public static function getUserAgentList($where)
- {
- // 关联查询:用户表 + 代理等级配置表
- $query = self::setWhere($where, 'a')
- ->group('a.uid')
- ->order('a.grade desc')
- ->field('a.*, u.nickname, u.avatar')
- ->join('user u', 'a.uid = u.uid');
- // 分页查询数据
- $data = $query->page((int)$where['page'], (int)$where['limit'])->select();
- $data = $data ? $data->toArray() : [];
- // 补充代理等级名称、图标 + 格式化有效期显示
- foreach ($data as &$item) {
- $levelInfo = SystemUserAgentLevel::where('id', $item['level_id'])->find();
- if ($levelInfo) {
- $item['level_name'] = $levelInfo['name'];
- $item['level_icon'] = $levelInfo['icon'];
- }
- $item['is_forever_text'] = $item['is_forever'] ? '永久代理' : '限时代理';
- // $item['valid_time_text'] = $item['is_forever'] ? '永久' : (date('Y-m-d H:i:s', $item['valid_time']) ?: '');
- }
- // 统计符合条件的总数
- $count = $query->count();
- return compact('data', 'count');
- }
- /**
- * 清除用户代理等级(软删除 + 更新用户表标识)
- * @param int $uid 用户ID
- * @return bool|string 成功返回true,失败返回错误信息
- */
- public static function cleanUpAgentLevel($uid)
- {
- self::startTrans(); // 开启事务
- try {
- // 1. 软删除用户代理等级记录
- $delRes = self::where('uid', $uid)->update(['is_del' => 1]);
- // 【可选】若有“代理任务完成记录”,需同步删除(示例:假设表为 user_agent_task_finish)
- // $taskDelRes = UserAgentTaskFinish::where('uid', $uid)->delete();
- $taskDelRes = true; // 暂无需删除任务,模拟成功
- // 2. 所有操作成功时,更新用户表的代理等级为0
- if ($delRes && $taskDelRes) {
- User::where('uid', $uid)->update(['agent_level' => 0]);
- self::commitTrans(); // 提交事务
- return true;
- } else {
- self::rollbackTrans(); // 回滚事务
- return self::setErrorInfo('清除代理等级失败');
- }
- } catch (\Exception $e) {
- self::rollbackTrans(); // 异常时回滚
- return self::setErrorInfo($e->getMessage());
- }
- }
- /*
- * 清除会员等级
- * @paran int $uid
- * @paran boolean
- * */
- public static function cleanUpLevel($uid)
- {
- self::rollbackTrans();
- $res = false !== self::where('uid', $uid)->update(['is_del' => 1]);
- // $res = $res && UserTaskFinish::where('uid', $uid)->delete();
- if ($res) {
- User::where('uid', $uid)->update(['agent_level' => 0]);
- self::commitTrans();
- return true;
- } else {
- self::rollbackTrans();
- return self::setErrorInfo('清除失败');
- }
- }
- }
|