// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\UserModel; use App\Services\BaseService; /** * 用户管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class UserService * @package App\Services\Common */ class UserService extends BaseService { // 静态对象 protected static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * UserService constructor. */ public function __construct() { $this->model = new UserModel(); } /** * 静态入口 * @return static|null */ public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * 获取用户列表 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function getList() { $param = request()->all(); // 查询条件 $map = []; // 用户账号 $username = getter($param, "username"); if ($username) { $map[] = ["username", 'like', "%{$username}%"]; } // 用户姓名 $realname = getter($param, "realname"); if ($realname) { $map[] = ['realname', 'like', "%{$realname}%"]; } // 用户性别 $gender = getter($param, "gender"); if ($gender) { $map[] = ['gender', '=', $gender]; } return parent::getList($map); // TODO: Change the autogenerated stub } /** * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 15) { $list = $this->model->from('user as a') ->where(['a.mark' => 1]) ->where(function ($query) use($params){ $keyword = isset($params['keyword'])? $params['keyword'] : ''; if($keyword){ $query->where('a.realname','like',"%{$keyword}%"); } $mobile = isset($params['mobile'])? $params['mobile'] : ''; if($mobile){ $query->where('a.mobile','like',"%{$mobile}%"); } $status = isset($params['status'])? intval($params['status']) : 0; if($status){ $query->where('a.status','=',$status); } $userType = isset($params['user_type'])? intval($params['user_type']) : 0; if($userType){ $query->where('a.user_type','=',$userType); } $parentId = isset($params['parent_id'])? intval($params['parent_id']) : 0; if($parentId){ $query->where('a.parent_id','=', $parentId); } }) ->select(['a.*']) ->orderBy('a.create_time','desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list? $list->toArray() :[]; if($list){ foreach($list['data'] as &$item){ $item['create_time_text'] = isset($item['create_time']) && $item['create_time']? datetime($item['create_time'],'Y.m.d H:i') : ''; $item['birthday'] = isset($item['birthday']) && $item['birthday']? datetime($item['birthday'],'Y-m-d') : ''; $item['counts'] = MemberService::make()->getCountsByMarket($item['id']); } } return [ 'pageSize'=> $pageSize, 'total'=>isset($list['total'])? $list['total'] : 0, 'list'=> isset($list['data'])? $list['data'] : [] ]; } /** * 添加或编辑用户 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); // 用户名 $username = trim($data['username']); // 密码 $password = trim($data['password']); // 添加时设置密码 if (empty($data['id'])) { $data['password'] = get_password($password . $username); // 用户名重复性验证 $count = $this->model ->where("username", '=', $username) ->where("mark", "=", 1) ->count(); if ($count > 0) { return message("系统中已存在相同的用户名", false); } } else { // 用户名重复性验证 $count = $this->model ->where("username", '=', $username) ->where("id", "<>", $data['id']) ->where("mark", "=", 1) ->count(); if ($count > 0) { return message("系统中已存在相同的用户名", false); } } // 头像处理 if(isset($data['avatar'])){ $avatar = isset($data['avatar']) ? trim($data['avatar']) : ''; if (strpos($avatar, "temp")) { $data['avatar'] = save_image($avatar, 'user'); } else { $data['avatar'] = str_replace(IMG_URL, "", $data['avatar']); } } $error = ""; $data['birthday'] = isset($data['birthday']) && $data['birthday']? strtotime($data['birthday']) : 0; $result = $this->model->edit($data, $error); if (!$result) { return message($error, false); } // 删除已存在的用户角色关系数据 $userRoleService = new UserRoleService(); $userRoleService->deleteUserRole($result); // 插入用户角色关系数据 $userRoleService->insertUserRole($result, $data['role_ids']); return message(); } /** * 获取用户信息 * @param $userId 用户ID * @return array * @author laravel开发员 * @since 2020/11/10 */ public function getUserInfo($userId) { $userInfo = $this->model->getInfo($userId); $userInfo['roles'] = []; $userInfo['authorities'] = []; // 权限节点列表 $menuService = new MenuService(); $permissionList = $menuService->getPermissionsList($userId); $userInfo['permissionList'] = $permissionList; return message("操作成功", true, $userInfo); } /** * 更新个人资料 * @author laravel开发员 * @since 2020/11/11 */ public function updateUserInfo($userId) { // 参数 $param = request()->all(); // 个人信息 $data = [ 'id' => $userId, 'realname' => $param['realname'], 'nickname' => $param['nickname'], 'gender' => $param['gender'], 'mobile' => $param['mobile'], 'email' => $param['email'], 'intro' => $param['intro'], ]; // 头像处理 $avatar = isset($param['avatar']) ? $param['avatar'] : ""; if (strpos($avatar, "data:image") !== false) { $expData = explode(';', $avatar); $fileInfo = explode('/', $expData[0]); $fileExt = $fileInfo[1] == 'jpeg' ? 'jpg' : $fileInfo[1]; // 文件存储路径 $filePath = create_image_path("user", $fileExt); // 获取图片流 $item = explode(',', $avatar); file_put_contents(ATTACHMENT_PATH . $filePath, base64_decode($item[1])); $data['avatar'] = $filePath; } else { $data['avatar'] = str_replace(IMG_URL, "", $param['avatar']); } $result = $this->model->edit($data); if (!$result) { return message("更新资料信息失败", false); } return message("更新资料信息成功"); } /** * 更新密码 * @param $userId 用户ID * @return array * @author laravel开发员 * @since 2020/11/14 */ public function updatePwd($userId) { // 获取参数 $param = request()->all(); // 原始密码 $oldPassword = trim(getter($param, "oldPassword")); if (!$oldPassword) { return message("旧密码不能为空", false); } // 新密码 $newPassword = trim(getter($param, "newPassword")); if (!$newPassword) { return message("新密码不能为空", false); } $userInfo = $this->model->getInfo($userId); if (!$userInfo) { return message("用户信息不存在", false); } if ($userInfo['password'] != get_password($oldPassword . $userInfo['username'])) { return message("旧密码输入不正确", false); } // 设置新密码 $userInfo['password'] = get_password($newPassword . $userInfo['username']); $result = $this->model->edit($userInfo); if (!$result) { return message("修改失败", false); } return message("修改成功"); } /** * 重置密码 * @return array * @since 2020/11/14 * @author laravel开发员 */ public function resetPwd() { // 获取参数 $param = request()->all(); // 用户ID $userId = getter($param, "id"); if (!$userId) { return message("用户ID不能为空", false); } $userInfo = $this->model->getInfo($userId); if (!$userInfo) { return message("用户信息不存在", false); } // 设置新密码 $userInfo['password'] = get_password("123456" . $userInfo['username']); $result = $this->model->edit($userInfo); if (!$result) { return message("重置密码失败", false); } return message("重置密码成功"); } }