// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\ActionLogModel; use App\Models\MemberModel; use App\Models\SupervisorsModel; use App\Services\BaseService; use App\Services\RedisService; /** * 导师管理-服务类 * @author laravel开发员 * @since 2020/11/11 * @package App\Services\Common */ class SupervisorsService extends BaseService { public static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 */ public function __construct() { $this->model = new SupervisorsModel(); } /** * 静态入口 */ public static function make() { if (!self::$instance) { self::$instance = new static(); } return self::$instance; } /** * 获取列表 */ public function getList() { $params = request()->all(); $pageSize = $params['limit'] ?? 20; $where = ['supervisors.mark' => 1]; $query = $this->model->with(['member']) ->from('supervisors') ->where($where) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? $params['keyword'] : ''; if ($keyword) { $query->where('supervisors.name', 'like', "%{$keyword}%")->orWhere('supervisors.mobile', 'like', "%{$keyword}%"); } }) ->where(function ($query) use ($params) { $status = isset($params['status']) ? $params['status'] : 0; if ($status > 0) { $query->where('supervisors.status',$status); } // 认证 $isAuth = isset($params['is_auth']) ? intval($params['is_auth']) : 0; if ($isAuth) { $query->where('supervisors.is_auth', $isAuth); } // 推荐 $isRecommend = isset($params['is_recommend']) ? intval($params['is_recommend']) : 0; if ($isRecommend) { $query->where('supervisors.is_recommend', $isRecommend); } // 类型 $type = isset($params['type']) ? intval($params['type']) : 0; if ($type) { $query->where('supervisors.type', $type); } }) ->select(['supervisors.*']) ->withCount(['consults']) ->orderBy('supervisors.sort', 'desc') ->orderBy('supervisors.id', 'desc'); $list = $query->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list ? $list->toArray() : []; if ($list) { foreach ($list['data'] as &$item) { $item['avatar'] = $item['avatar'] ? get_image_url($item['avatar']) : ''; $item['create_time_text'] = datetime($item['create_time'], 'Y-m-d H:i'); $item['consults_count'] = $item['consults_count']?$item['consults_count']:0; $item['intro'] = $item['intro']? get_format_content($item['intro']):''; } } return [ 'code' => 0, 'msg' => '获取成功', 'data' => isset($list['data'])?$list['data']:[], 'count' => isset($list['total'])?$list['total']:0 ]; } /** * 搜索用户(用于下拉选择) * @param string $keyword 搜索关键词 * @param int $accountType 账户类型 * @param int $limit 返回数量 * @return array */ public function searchUsers($keyword = '',$limit = 20) { try { $query = MemberModel::where('mark', 1); // 关键词搜索:昵称、手机号、ID if (!empty($keyword)) { $query->where(function ($q) use ($keyword) { $q->where('id', $keyword) ->orWhere('name', 'like', "%{$keyword}%") ->orWhere('mobile', 'like', "%{$keyword}%"); }); } $list = $query->select(['id', 'name', 'mobile', 'type']) ->limit($limit) ->get() ->toArray(); // 转换为数组(如果是对象) $list = json_decode(json_encode($list), true); return [ 'code' => 0, 'msg' => '获取成功', 'data' => $list ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => '搜索失败:' . $e->getMessage(), 'data' => [] ]; } } /** * 用户选项 * @return array */ public function options() { // 获取参数 $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $id = getter($param, "id"); $datas = $this->model->where(['status' => 1, 'mark' => 1]) ->where(function ($query) use ($id) { if ($id) { $query->whereNotIn('id', [$id]); } }) ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('name', 'like', "%{$keyword}%")->orWhere('mobile', 'like', "%{$keyword}%"); } }) ->select(['id', 'name', 'mobile', 'type', 'status']) ->get(); return $datas ? $datas->toArray() : []; } /** * 编辑 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); $id = isset($data['id']) ? $data['id'] : 0; // 头像处理 if (isset($data['avatar']) && $data['avatar']) { $data['avatar'] = get_image_path(trim($data['avatar'])); } // 手机号唯一性验证 $name = isset($data['name']) ? trim($data['name']) : ''; if ($name) { $checkId = $this->model->where(['name' => $name, 'mark' => 1])->value('id'); if ($checkId && ($id != $checkId)) { return message('导师已存在', false); } } $data['user_id'] = isset($data['user_id']) ? intval($data['user_id']) : 0; if ($data['user_id']) { $checkId = $this->model->where(['user_id' => $data['user_id'], 'mark' => 1])->value('id'); if ($checkId && ($id != $checkId)) { return message('该会员账号已绑定其他导师', false); } } // 处理数值类型字段 if (isset($data['status'])) { $data['status'] = (int)$data['status']; } // 设置日志 ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => '编辑导师信息', 'content' => json_encode($data, 256), 'module' => 'admin']); ActionLogModel::record(); return parent::edit($data); } /** * 设置状态 */ public function status() { $params = request()->all(); $id = $params['id'] ?? 0; $status = $params['status'] ?? 1; $member = $this->model->where('id', $id) ->where('mark', 1) ->first(); if (!$member) { return ['code' => 1, 'msg' => '记录不存在']; } $member->status = $status; $member->update_time = time(); $member->save(); return ['code' => 0, 'msg' => '设置成功']; } /** * 设置推荐 */ public function recommend() { $params = request()->all(); $id = $params['id'] ?? 0; $status = $params['is_recommend'] ?? 1; $member = $this->model->where('id', $id) ->where('mark', 1) ->first(); if (!$member) { return ['code' => 1, 'msg' => '记录不存在']; } $member->is_recommend = $status; $member->update_time = time(); $member->save(); return ['code' => 0, 'msg' => '设置成功']; } /** * 设置认证 */ public function auth() { $params = request()->all(); $id = $params['id'] ?? 0; $status = $params['is_auth'] ?? 1; $member = $this->model->where('id', $id) ->where('mark', 1) ->first(); if (!$member) { return ['code' => 1, 'msg' => '记录不存在']; } $member->is_auth = $status; $member->update_time = time(); $member->save(); return ['code' => 0, 'msg' => '设置成功']; } /** * 删除 * @return array */ public function delete() { $id = request()->input('id'); // 删除数据 $this->model->where('mark', 1)->where('update_time','<=', 600)->delete(); if (is_array($id)) { // 批量删除 $count = $this->model->whereIn('id', $id) ->where('mark', 1) ->update(['mark' => 0, 'update_time' => time()]); return ['code' => 0, 'msg' => "成功删除{$count}条记录"]; } else { // 单个删除 $info = $this->model->where('id', $id) ->where('mark', 1) ->first(); if (!$info) { return ['code' => 1, 'msg' => '记录不存在']; } $info->mark = 0; $info->update_time = time(); $info->save(); return ['code' => 0, 'msg' => '删除成功']; } } }