// +---------------------------------------------------------------------- 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 { /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * UserService constructor. */ public function __construct() { $this->model = new UserModel(); } /** * 获取用户列表 * @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]; } // 调用父类方法获取列表 $result = parent::getList($map); // 为每个用户添加商家信息 if ($result['code'] == 0 && isset($result['data']) && is_array($result['data'])) { foreach ($result['data'] as &$user) { // 查询该用户对应的商家信息(通过 user.user_id = shop.user_id 关联) $memberId = $user['user_id'] ?? 0; $store = $memberId > 0 ? \App\Models\StoreModel::where('user_id', $memberId) ->where('mark', 1) ->select(['id', 'name', 'real_name', 'phone']) ->first() : null; $user['store_info'] = $store ? $store->toArray() : null; } } return $result; } /** * 添加或编辑用户 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); // 强制保持 mark=1,防止前端误传 mark=0 $data['mark'] = 1; // 用户名 $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); } } // 头像处理 $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 = ""; $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'] = []; // 获取用户关联的商户ID(通过 user.user_id = shop.user_id 关联) $storeModel = new \App\Models\StoreModel(); $memberId = $userInfo['user_id'] ?? 0; $storeInfo = $memberId > 0 ? $storeModel->getInfoByUserId($memberId) : null; $userInfo['store_id'] = $storeInfo ? $storeInfo['id'] : 0; // 权限节点列表 $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() { $id = request()->input('id'); if (empty($id)) { return message("参数错误", false); } $user = $this->model->find($id); if (!$user) { return message("用户不存在", false); } // 确保username字段存在且不为空 if (empty($user->username)) { return message("用户名字段为空,无法重置密码", false); } // 重置密码为:123456 $newPassword = '123456'; // 密码加密:密码 + 用户名(与登录验证保持一致) $user->password = get_password($newPassword . $user->username); $user->save(); return message("密码已重置为:{$newPassword}"); } /** * 更新商家关联 * @param int $userId 用户ID(user表主键) * @param int|null $storeId 商家ID */ private function updateStoreRelation($userId, $storeId) { try { // 获取用户的member ID(user.user_id) $user = \App\Models\UserModel::where('id', $userId)->first(); if (!$user) { return; } $memberId = $user->user_id; // 先清除该member之前的商家关联 \App\Models\StoreModel::where('user_id', $memberId) ->where('mark', 1) ->update(['user_id' => 0]); // 如果选择了商家,更新商家的 user_id 为 member ID if ($storeId) { \App\Models\StoreModel::where('id', $storeId) ->where('mark', 1) ->update(['user_id' => $memberId]); } } catch (\Exception $e) { } } }