UserAgentLevel.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace app\admin\model\user;
  3. use app\admin\model\system\SystemUserAgentLevel;
  4. use app\admin\model\user\User;
  5. use crmeb\traits\ModelTrait;
  6. use crmeb\basic\BaseModel;
  7. /**
  8. * 用户代理等级 Model
  9. * 负责管理用户与代理等级的关联数据查询、统计等逻辑
  10. * Class UserAgentLevel
  11. * @package app\admin\model\agent
  12. */
  13. class UserAgentLevel extends BaseModel
  14. {
  15. /**
  16. * 数据表主键
  17. * @var string
  18. */
  19. protected $pk = 'id';
  20. /**
  21. * 模型关联的数据表名
  22. * @var string
  23. */
  24. protected $name = 'user_agent_level';
  25. use ModelTrait;
  26. /**
  27. * 构建代理等级查询条件
  28. * @param array $where 查询条件(如昵称、等级ID等)
  29. * @param string $alias 当前表别名
  30. * @param string $userAlias 用户表别名前缀
  31. * @param BaseModel|null $model 模型实例(支持链式调用)
  32. * @return BaseModel
  33. */
  34. public static function setWhere($where, $alias = '', $userAlias = 'u.', $model = null)
  35. {
  36. $model = is_null($model) ? new self() : $model;
  37. if ($alias) {
  38. $model = $model->alias($alias);
  39. $alias .= '.';
  40. }
  41. // 昵称模糊查询
  42. if (isset($where['nickname']) && $where['nickname'] !== '') {
  43. $model = $model->where("{$userAlias}nickname", 'like', "%{$where['nickname']}%");
  44. }
  45. // 代理等级ID精确查询
  46. if (isset($where['level_id']) && $where['level_id'] !== '') {
  47. $model = $model->where("{$alias}level_id", $where['level_id']);
  48. }
  49. // 过滤:状态正常 + 未删除
  50. return $model->where("{$alias}status", 1)->where("{$alias}is_del", 0);
  51. }
  52. /**
  53. * 查询用户代理等级列表(带分页、关联信息)
  54. * @param array $where 分页及筛选条件(page、limit、nickname、level_id等)
  55. * @return array 格式:['data' => 列表数据, 'count' => 总数]
  56. */
  57. public static function getUserAgentList($where)
  58. {
  59. // 关联查询:用户表 + 代理等级配置表
  60. $query = self::setWhere($where, 'a')
  61. ->group('a.uid')
  62. ->order('a.grade desc')
  63. ->field('a.*, u.nickname, u.avatar')
  64. ->join('user u', 'a.uid = u.uid');
  65. // 分页查询数据
  66. $data = $query->page((int)$where['page'], (int)$where['limit'])->select();
  67. $data = $data ? $data->toArray() : [];
  68. // 补充代理等级名称、图标 + 格式化有效期显示
  69. foreach ($data as &$item) {
  70. $levelInfo = SystemUserAgentLevel::where('id', $item['level_id'])->find();
  71. if ($levelInfo) {
  72. $item['level_name'] = $levelInfo['name'];
  73. $item['level_icon'] = $levelInfo['icon'];
  74. }
  75. $item['is_forever_text'] = $item['is_forever'] ? '永久代理' : '限时代理';
  76. // $item['valid_time_text'] = $item['is_forever'] ? '永久' : (date('Y-m-d H:i:s', $item['valid_time']) ?: '');
  77. }
  78. // 统计符合条件的总数
  79. $count = $query->count();
  80. return compact('data', 'count');
  81. }
  82. /**
  83. * 清除用户代理等级(软删除 + 更新用户表标识)
  84. * @param int $uid 用户ID
  85. * @return bool|string 成功返回true,失败返回错误信息
  86. */
  87. public static function cleanUpAgentLevel($uid)
  88. {
  89. self::startTrans(); // 开启事务
  90. try {
  91. // 1. 软删除用户代理等级记录
  92. $delRes = self::where('uid', $uid)->update(['is_del' => 1]);
  93. // 【可选】若有“代理任务完成记录”,需同步删除(示例:假设表为 user_agent_task_finish)
  94. // $taskDelRes = UserAgentTaskFinish::where('uid', $uid)->delete();
  95. $taskDelRes = true; // 暂无需删除任务,模拟成功
  96. // 2. 所有操作成功时,更新用户表的代理等级为0
  97. if ($delRes && $taskDelRes) {
  98. User::where('uid', $uid)->update(['agent_level' => 0]);
  99. self::commitTrans(); // 提交事务
  100. return true;
  101. } else {
  102. self::rollbackTrans(); // 回滚事务
  103. return self::setErrorInfo('清除代理等级失败');
  104. }
  105. } catch (\Exception $e) {
  106. self::rollbackTrans(); // 异常时回滚
  107. return self::setErrorInfo($e->getMessage());
  108. }
  109. }
  110. /*
  111. * 清除会员等级
  112. * @paran int $uid
  113. * @paran boolean
  114. * */
  115. public static function cleanUpLevel($uid)
  116. {
  117. self::rollbackTrans();
  118. $res = false !== self::where('uid', $uid)->update(['is_del' => 1]);
  119. // $res = $res && UserTaskFinish::where('uid', $uid)->delete();
  120. if ($res) {
  121. User::where('uid', $uid)->update(['agent_level' => 0]);
  122. self::commitTrans();
  123. return true;
  124. } else {
  125. self::rollbackTrans();
  126. return self::setErrorInfo('清除失败');
  127. }
  128. }
  129. }