SupervisorsService.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 LARAVEL研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: laravel开发员 <laravel.qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services\Common;
  12. use App\Models\ActionLogModel;
  13. use App\Models\MemberModel;
  14. use App\Models\SupervisorsModel;
  15. use App\Services\BaseService;
  16. use App\Services\RedisService;
  17. /**
  18. * 导师管理-服务类
  19. * @author laravel开发员
  20. * @since 2020/11/11
  21. * @package App\Services\Common
  22. */
  23. class SupervisorsService extends BaseService
  24. {
  25. public static $instance = null;
  26. /**
  27. * 构造函数
  28. * @author laravel开发员
  29. * @since 2020/11/11
  30. */
  31. public function __construct()
  32. {
  33. $this->model = new SupervisorsModel();
  34. }
  35. /**
  36. * 静态入口
  37. */
  38. public static function make()
  39. {
  40. if (!self::$instance) {
  41. self::$instance = new static();
  42. }
  43. return self::$instance;
  44. }
  45. /**
  46. * 获取列表
  47. */
  48. public function getList()
  49. {
  50. $params = request()->all();
  51. $pageSize = $params['limit'] ?? 20;
  52. $where = ['supervisors.mark' => 1];
  53. $query = $this->model->with(['member'])
  54. ->from('supervisors')
  55. ->where($where)
  56. ->where(function ($query) use ($params) {
  57. $keyword = isset($params['keyword']) ? $params['keyword'] : '';
  58. if ($keyword) {
  59. $query->where('supervisors.name', 'like', "%{$keyword}%")->orWhere('supervisors.mobile', 'like', "%{$keyword}%");
  60. }
  61. })
  62. ->where(function ($query) use ($params) {
  63. $status = isset($params['status']) ? $params['status'] : 0;
  64. if ($status > 0) {
  65. $query->where('supervisors.status',$status);
  66. }
  67. // 认证
  68. $isAuth = isset($params['is_auth']) ? intval($params['is_auth']) : 0;
  69. if ($isAuth) {
  70. $query->where('supervisors.is_auth', $isAuth);
  71. }
  72. // 推荐
  73. $isRecommend = isset($params['is_recommend']) ? intval($params['is_recommend']) : 0;
  74. if ($isRecommend) {
  75. $query->where('supervisors.is_recommend', $isRecommend);
  76. }
  77. // 类型
  78. $type = isset($params['type']) ? intval($params['type']) : 0;
  79. if ($type) {
  80. $query->where('supervisors.type', $type);
  81. }
  82. })
  83. ->select(['supervisors.*'])
  84. ->withCount(['consults'])
  85. ->orderBy('supervisors.sort', 'desc')
  86. ->orderBy('supervisors.id', 'desc');
  87. $list = $query->paginate($pageSize > 0 ? $pageSize : 9999999);
  88. $list = $list ? $list->toArray() : [];
  89. if ($list) {
  90. $types = [1=>'专项导师',2=>'研究导师',3=>'发展导师'];
  91. foreach ($list['data'] as &$item) {
  92. $item['avatar'] = $item['avatar'] ? get_image_url($item['avatar']) : '';
  93. $item['create_time_text'] = datetime($item['create_time'], 'Y-m-d H:i');
  94. $item['consults_count'] = $item['consults_count']?$item['consults_count']:0;
  95. $item['intro'] = $item['intro']? get_format_content($item['intro']):'';
  96. $item['type_name'] = isset($types[$item['type']])?$types[$item['type']]:'未知';
  97. }
  98. }
  99. return [
  100. 'code' => 0,
  101. 'msg' => '获取成功',
  102. 'data' => isset($list['data'])?$list['data']:[],
  103. 'count' => isset($list['total'])?$list['total']:0
  104. ];
  105. }
  106. /**
  107. * 搜索用户(用于下拉选择)
  108. * @param string $keyword 搜索关键词
  109. * @param int $accountType 账户类型
  110. * @param int $limit 返回数量
  111. * @return array
  112. */
  113. public function searchUsers($keyword = '',$limit = 20)
  114. {
  115. try {
  116. $query = MemberModel::where('mark', 1);
  117. // 关键词搜索:昵称、手机号、ID
  118. if (!empty($keyword)) {
  119. $query->where(function ($q) use ($keyword) {
  120. $q->where('id', $keyword)
  121. ->orWhere('name', 'like', "%{$keyword}%")
  122. ->orWhere('mobile', 'like', "%{$keyword}%");
  123. });
  124. }
  125. $list = $query->select(['id', 'name', 'mobile', 'type'])
  126. ->limit($limit)
  127. ->get()
  128. ->toArray();
  129. // 转换为数组(如果是对象)
  130. $list = json_decode(json_encode($list), true);
  131. return [
  132. 'code' => 0,
  133. 'msg' => '获取成功',
  134. 'data' => $list
  135. ];
  136. } catch (\Exception $e) {
  137. return [
  138. 'code' => 1,
  139. 'msg' => '搜索失败:' . $e->getMessage(),
  140. 'data' => []
  141. ];
  142. }
  143. }
  144. /**
  145. * 用户选项
  146. * @return array
  147. */
  148. public function options()
  149. {
  150. // 获取参数
  151. $param = request()->all();
  152. // 用户ID
  153. $keyword = getter($param, "keyword");
  154. $id = getter($param, "id");
  155. $datas = $this->model->where(['status' => 1, 'mark' => 1])
  156. ->where(function ($query) use ($id) {
  157. if ($id) {
  158. $query->whereNotIn('id', [$id]);
  159. }
  160. })
  161. ->where(function ($query) use ($keyword) {
  162. if ($keyword) {
  163. $query->where('name', 'like', "%{$keyword}%")->orWhere('mobile', 'like', "%{$keyword}%");
  164. }
  165. })
  166. ->select(['id', 'name', 'mobile', 'type', 'status'])
  167. ->get();
  168. return $datas ? $datas->toArray() : [];
  169. }
  170. /**
  171. * 编辑
  172. * @return array
  173. * @since 2020/11/11
  174. * @author laravel开发员
  175. */
  176. public function edit()
  177. {
  178. // 请求参数
  179. $data = request()->all();
  180. $id = isset($data['id']) ? $data['id'] : 0;
  181. // 头像处理
  182. if (isset($data['avatar']) && $data['avatar']) {
  183. $data['avatar'] = get_image_path(trim($data['avatar']));
  184. }
  185. // 手机号唯一性验证
  186. $name = isset($data['name']) ? trim($data['name']) : '';
  187. if ($name) {
  188. $checkId = $this->model->where(['name' => $name, 'mark' => 1])->value('id');
  189. if ($checkId && ($id != $checkId)) {
  190. return message('导师已存在', false);
  191. }
  192. }
  193. // 处理数值类型字段
  194. if (isset($data['status'])) {
  195. $data['status'] = (int)$data['status'];
  196. }
  197. // 设置日志
  198. ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => '编辑导师信息', 'content' => json_encode($data, 256), 'module' => 'admin']);
  199. ActionLogModel::record();
  200. return parent::edit($data);
  201. }
  202. /**
  203. * 设置状态
  204. */
  205. public function status()
  206. {
  207. $params = request()->all();
  208. $id = $params['id'] ?? 0;
  209. $status = $params['status'] ?? 1;
  210. $member = $this->model->where('id', $id)
  211. ->where('mark', 1)
  212. ->first();
  213. if (!$member) {
  214. return ['code' => 1, 'msg' => '记录不存在'];
  215. }
  216. $member->status = $status;
  217. $member->update_time = time();
  218. $member->save();
  219. return ['code' => 0, 'msg' => '设置成功'];
  220. }
  221. /**
  222. * 设置推荐
  223. */
  224. public function recommend()
  225. {
  226. $params = request()->all();
  227. $id = $params['id'] ?? 0;
  228. $status = $params['is_recommend'] ?? 1;
  229. $member = $this->model->where('id', $id)
  230. ->where('mark', 1)
  231. ->first();
  232. if (!$member) {
  233. return ['code' => 1, 'msg' => '记录不存在'];
  234. }
  235. $member->is_recommend = $status;
  236. $member->update_time = time();
  237. $member->save();
  238. return ['code' => 0, 'msg' => '设置成功'];
  239. }
  240. /**
  241. * 设置认证
  242. */
  243. public function auth()
  244. {
  245. $params = request()->all();
  246. $id = $params['id'] ?? 0;
  247. $status = $params['is_auth'] ?? 1;
  248. $member = $this->model->where('id', $id)
  249. ->where('mark', 1)
  250. ->first();
  251. if (!$member) {
  252. return ['code' => 1, 'msg' => '记录不存在'];
  253. }
  254. $member->is_auth = $status;
  255. $member->update_time = time();
  256. $member->save();
  257. return ['code' => 0, 'msg' => '设置成功'];
  258. }
  259. /**
  260. * 删除
  261. * @return array
  262. */
  263. public function delete()
  264. {
  265. $id = request()->input('id');
  266. // 删除数据
  267. $this->model->where('mark', 1)->where('update_time','<=', 600)->delete();
  268. if (is_array($id)) {
  269. // 批量删除
  270. $count = $this->model->whereIn('id', $id)
  271. ->where('mark', 1)
  272. ->update(['mark' => 0, 'update_time' => time()]);
  273. return ['code' => 0, 'msg' => "成功删除{$count}条记录"];
  274. } else {
  275. // 单个删除
  276. $info = $this->model->where('id', $id)
  277. ->where('mark', 1)
  278. ->first();
  279. if (!$info) {
  280. return ['code' => 1, 'msg' => '记录不存在'];
  281. }
  282. $info->mark = 0;
  283. $info->update_time = time();
  284. $info->save();
  285. return ['code' => 0, 'msg' => '删除成功'];
  286. }
  287. }
  288. }