diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
index 16619fb..74da853 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
@@ -1,323 +1,280 @@
-package com.ruoyi.system.api.domain;
-
-import java.util.Date;
-import java.util.List;
-import javax.validation.constraints.*;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.core.annotation.Excel;
-import com.ruoyi.common.core.annotation.Excel.ColumnType;
-import com.ruoyi.common.core.annotation.Excel.Type;
-import com.ruoyi.common.core.annotation.Excels;
-import com.ruoyi.common.core.web.domain.BaseEntity;
-import com.ruoyi.common.core.xss.Xss;
-
-/**
- * 用户对象 sys_user
- * 
- * @author ruoyi
- */
-public class SysUser extends BaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 用户ID */
-    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
-    private Long userId;
-
-    /** 部门ID */
-    @Excel(name = "部门编号", type = Type.IMPORT)
-    private Long deptId;
-
-    /** 用户账号 */
-    @Excel(name = "登录名称")
-    private String userName;
-
-    /** 用户昵称 */
-    @Excel(name = "用户名称")
-    private String nickName;
-
-    /** 用户邮箱 */
-    @Excel(name = "用户邮箱")
-    private String email;
-
-    /** 手机号码 */
-    @Excel(name = "手机号码")
-    private String phonenumber;
-
-    /** 用户性别 */
-    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
-    private String sex;
-
-    /** 用户头像 */
-    private String avatar;
-
-    /** 密码 */
-    private String password;
-
-    /** 帐号状态(0正常 1停用) */
-    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
-    private String status;
-
-    /** 删除标志(0代表存在 2代表删除) */
-    private String delFlag;
-
-    /** 最后登录IP */
-    @Excel(name = "最后登录IP", type = Type.EXPORT)
-    private String loginIp;
-
-    /** 最后登录时间 */
-    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
-    private Date loginDate;
-
-    /** 部门对象 */
-    @Excels({
-        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
-        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
-    })
-    private SysDept dept;
-
-    /** 角色对象 */
-    private List<SysRole> roles;
-
-    /** 角色组 */
-    private Long[] roleIds;
-
-    /** 岗位组 */
-    private Long[] postIds;
-
-    /** 角色ID */
-    private Long roleId;
-
-    public SysUser()
-    {
-
-    }
-
-    public SysUser(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public Long getUserId()
-    {
-        return userId;
-    }
-
-    public void setUserId(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public boolean isAdmin()
-    {
-        return isAdmin(this.userId);
-    }
-
-    public static boolean isAdmin(Long userId)
-    {
-        return userId != null && 1L == userId;
-    }
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-
-    @Xss(message = "用户昵称不能包含脚本字符")
-    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
-    public String getNickName()
-    {
-        return nickName;
-    }
-
-    public void setNickName(String nickName)
-    {
-        this.nickName = nickName;
-    }
-
-    @Xss(message = "用户账号不能包含脚本字符")
-    @NotBlank(message = "用户账号不能为空")
-    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
-    public String getUserName()
-    {
-        return userName;
-    }
-
-    public void setUserName(String userName)
-    {
-        this.userName = userName;
-    }
-
-    @Email(message = "邮箱格式不正确")
-    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
-    public String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
-    public String getPhonenumber()
-    {
-        return phonenumber;
-    }
-
-    public void setPhonenumber(String phonenumber)
-    {
-        this.phonenumber = phonenumber;
-    }
-
-    public String getSex()
-    {
-        return sex;
-    }
-
-    public void setSex(String sex)
-    {
-        this.sex = sex;
-    }
-
-    public String getAvatar()
-    {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar)
-    {
-        this.avatar = avatar;
-    }
-
-    public String getPassword()
-    {
-        return password;
-    }
-
-    public void setPassword(String password)
-    {
-        this.password = password;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getDelFlag()
-    {
-        return delFlag;
-    }
-
-    public void setDelFlag(String delFlag)
-    {
-        this.delFlag = delFlag;
-    }
-
-    public String getLoginIp()
-    {
-        return loginIp;
-    }
-
-    public void setLoginIp(String loginIp)
-    {
-        this.loginIp = loginIp;
-    }
-
-    public Date getLoginDate()
-    {
-        return loginDate;
-    }
-
-    public void setLoginDate(Date loginDate)
-    {
-        this.loginDate = loginDate;
-    }
-
-    public SysDept getDept()
-    {
-        return dept;
-    }
-
-    public void setDept(SysDept dept)
-    {
-        this.dept = dept;
-    }
-
-    public List<SysRole> getRoles()
-    {
-        return roles;
-    }
-
-    public void setRoles(List<SysRole> roles)
-    {
-        this.roles = roles;
-    }
-
-    public Long[] getRoleIds()
-    {
-        return roleIds;
-    }
-
-    public void setRoleIds(Long[] roleIds)
-    {
-        this.roleIds = roleIds;
-    }
-
-    public Long[] getPostIds()
-    {
-        return postIds;
-    }
-
-    public void setPostIds(Long[] postIds)
-    {
-        this.postIds = postIds;
-    }
-
-    public Long getRoleId()
-    {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId)
-    {
-        this.roleId = roleId;
-    }
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("deptId", getDeptId())
-            .append("userName", getUserName())
-            .append("nickName", getNickName())
-            .append("email", getEmail())
-            .append("phonenumber", getPhonenumber())
-            .append("sex", getSex())
-            .append("avatar", getAvatar())
-            .append("password", getPassword())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("loginIp", getLoginIp())
-            .append("loginDate", getLoginDate())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .append("dept", getDept())
-            .toString();
-    }
-}
+package com.ruoyi.system.api.domain;
+
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.annotation.Excel.ColumnType;
+import com.ruoyi.common.core.annotation.Excel.Type;
+import com.ruoyi.common.core.annotation.Excels;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.ruoyi.common.core.xss.Xss;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 用户对象 sys_user
+ *
+ * @author ruoyi
+ */
+public class SysUser extends BaseEntity {
+	private static final long serialVersionUID = 1L;
+
+	/** 用户ID */
+	@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
+	private Long userId;
+
+	/** 部门ID */
+	@Excel(name = "部门编号", type = Type.IMPORT)
+	private Long deptId;
+
+	/** 用户账号 */
+	@Excel(name = "登录名称")
+	private String userName;
+
+	/** 用户昵称 */
+	@Excel(name = "用户名称")
+	private String nickName;
+
+	/** 用户邮箱 */
+	@Excel(name = "用户邮箱")
+	private String email;
+
+	/** 手机号码 */
+	@Excel(name = "手机号码")
+	private String phonenumber;
+
+	/** 用户性别 */
+	@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+	private String sex;
+
+	/** 用户头像 */
+	private String avatar;
+
+	/** 密码 */
+	private String password;
+
+	/** 帐号状态(0正常 1停用) */
+	@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
+	private String status;
+
+	/** 删除标志(0代表存在 2代表删除) */
+	private String delFlag;
+
+	/** 最后登录IP */
+	@Excel(name = "最后登录IP", type = Type.EXPORT)
+	private String loginIp;
+
+	/** 最后登录时间 */
+	@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
+	private Date loginDate;
+
+	/** 部门对象 */
+	@Excels({ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+			@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) })
+	private SysDept dept;
+
+	/** 角色对象 */
+	private List<SysRole> roles;
+
+	/** 角色组 */
+	private Long[] roleIds;
+
+	/** 岗位组 */
+	private Long[] postIds;
+
+	/** 角色ID */
+	private Long roleId;
+	private String datasourceId;
+
+	public String getDatasourceId() {
+		return datasourceId;
+	}
+
+	public void setDatasourceId(String datasourceId) {
+		this.datasourceId = datasourceId;
+	}
+
+	public SysUser() {
+
+	}
+
+	public SysUser(Long userId) {
+		this.userId = userId;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public boolean isAdmin() {
+		return isAdmin(this.userId);
+	}
+
+	public static boolean isAdmin(Long userId) {
+		return userId != null && 1L == userId;
+	}
+
+	public Long getDeptId() {
+		return deptId;
+	}
+
+	public void setDeptId(Long deptId) {
+		this.deptId = deptId;
+	}
+
+	@Xss(message = "用户昵称不能包含脚本字符")
+	@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+	public String getNickName() {
+		return nickName;
+	}
+
+	public void setNickName(String nickName) {
+		this.nickName = nickName;
+	}
+
+	@Xss(message = "用户账号不能包含脚本字符")
+	@NotBlank(message = "用户账号不能为空")
+	@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	@Email(message = "邮箱格式不正确")
+	@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
+	public String getPhonenumber() {
+		return phonenumber;
+	}
+
+	public void setPhonenumber(String phonenumber) {
+		this.phonenumber = phonenumber;
+	}
+
+	public String getSex() {
+		return sex;
+	}
+
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(String delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public String getLoginIp() {
+		return loginIp;
+	}
+
+	public void setLoginIp(String loginIp) {
+		this.loginIp = loginIp;
+	}
+
+	public Date getLoginDate() {
+		return loginDate;
+	}
+
+	public void setLoginDate(Date loginDate) {
+		this.loginDate = loginDate;
+	}
+
+	public SysDept getDept() {
+		return dept;
+	}
+
+	public void setDept(SysDept dept) {
+		this.dept = dept;
+	}
+
+	public List<SysRole> getRoles() {
+		return roles;
+	}
+
+	public void setRoles(List<SysRole> roles) {
+		this.roles = roles;
+	}
+
+	public Long[] getRoleIds() {
+		return roleIds;
+	}
+
+	public void setRoleIds(Long[] roleIds) {
+		this.roleIds = roleIds;
+	}
+
+	public Long[] getPostIds() {
+		return postIds;
+	}
+
+	public void setPostIds(Long[] postIds) {
+		this.postIds = postIds;
+	}
+
+	public Long getRoleId() {
+		return roleId;
+	}
+
+	public void setRoleId(Long roleId) {
+		this.roleId = roleId;
+	}
+
+	@Override
+	public String toString() {
+		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("userId", getUserId())
+				.append("deptId", getDeptId()).append("userName", getUserName()).append("nickName", getNickName())
+				.append("email", getEmail()).append("phonenumber", getPhonenumber()).append("sex", getSex())
+				.append("avatar", getAvatar()).append("password", getPassword()).append("status", getStatus())
+				.append("delFlag", getDelFlag()).append("loginIp", getLoginIp()).append("loginDate", getLoginDate())
+				.append("createBy", getCreateBy()).append("createTime", getCreateTime())
+				.append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark())
+				.append("dept", getDept()).toString();
+	}
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
index 2f00e10..c78e53e 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
@@ -1,150 +1,142 @@
-package com.ruoyi.system.api.model;
-
-import java.io.Serializable;
-import java.util.Set;
-import com.ruoyi.system.api.domain.SysUser;
-
-/**
- * 用户信息
- *
- * @author ruoyi
- */
-public class LoginUser implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 用户唯一标识
-     */
-    private String token;
-
-    /**
-     * 用户名id
-     */
-    private Long userid;
-
-    /**
-     * 用户名
-     */
-    private String username;
-
-    /**
-     * 登录时间
-     */
-    private Long loginTime;
-
-    /**
-     * 过期时间
-     */
-    private Long expireTime;
-
-    /**
-     * 登录IP地址
-     */
-    private String ipaddr;
-
-    /**
-     * 权限列表
-     */
-    private Set<String> permissions;
-
-    /**
-     * 角色列表
-     */
-    private Set<String> roles;
-
-    /**
-     * 用户信息
-     */
-    private SysUser sysUser;
-
-    public String getToken()
-    {
-        return token;
-    }
-
-    public void setToken(String token)
-    {
-        this.token = token;
-    }
-
-    public Long getUserid()
-    {
-        return userid;
-    }
-
-    public void setUserid(Long userid)
-    {
-        this.userid = userid;
-    }
-
-    public String getUsername()
-    {
-        return username;
-    }
-
-    public void setUsername(String username)
-    {
-        this.username = username;
-    }
-
-    public Long getLoginTime()
-    {
-        return loginTime;
-    }
-
-    public void setLoginTime(Long loginTime)
-    {
-        this.loginTime = loginTime;
-    }
-
-    public Long getExpireTime()
-    {
-        return expireTime;
-    }
-
-    public void setExpireTime(Long expireTime)
-    {
-        this.expireTime = expireTime;
-    }
-
-    public String getIpaddr()
-    {
-        return ipaddr;
-    }
-
-    public void setIpaddr(String ipaddr)
-    {
-        this.ipaddr = ipaddr;
-    }
-
-    public Set<String> getPermissions()
-    {
-        return permissions;
-    }
-
-    public void setPermissions(Set<String> permissions)
-    {
-        this.permissions = permissions;
-    }
-
-    public Set<String> getRoles()
-    {
-        return roles;
-    }
-
-    public void setRoles(Set<String> roles)
-    {
-        this.roles = roles;
-    }
-
-    public SysUser getSysUser()
-    {
-        return sysUser;
-    }
-
-    public void setSysUser(SysUser sysUser)
-    {
-        this.sysUser = sysUser;
-    }
-}
+package com.ruoyi.system.api.model;
+
+import com.ruoyi.system.api.domain.SysUser;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * 用户信息
+ *
+ * @author sf
+ */
+public class LoginUser implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 用户唯一标识
+	 */
+	private String token;
+
+	/**
+	 * 用户名id
+	 */
+	private Long userid;
+
+	/**
+	 * 用户名
+	 */
+	private String username;
+
+	/**
+	 * 登录时间
+	 */
+	private Long loginTime;
+
+	/**
+	 * 过期时间
+	 */
+	private Long expireTime;
+
+	/**
+	 * 登录IP地址
+	 */
+	private String ipaddr;
+
+	/**
+	 * 权限列表
+	 */
+	private Set<String> permissions;
+
+	/**
+	 * 角色列表
+	 */
+	private Set<String> roles;
+	// 可访问园区
+	private String poolName;
+
+	/**
+	 * 用户信息
+	 */
+	private SysUser sysUser;
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public Long getUserid() {
+		return userid;
+	}
+
+	public void setUserid(Long userid) {
+		this.userid = userid;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public Long getLoginTime() {
+		return loginTime;
+	}
+
+	public void setLoginTime(Long loginTime) {
+		this.loginTime = loginTime;
+	}
+
+	public Long getExpireTime() {
+		return expireTime;
+	}
+
+	public void setExpireTime(Long expireTime) {
+		this.expireTime = expireTime;
+	}
+
+	public String getIpaddr() {
+		return ipaddr;
+	}
+
+	public void setIpaddr(String ipaddr) {
+		this.ipaddr = ipaddr;
+	}
+
+	public Set<String> getPermissions() {
+		return permissions;
+	}
+
+	public void setPermissions(Set<String> permissions) {
+		this.permissions = permissions;
+	}
+
+	public Set<String> getRoles() {
+		return roles;
+	}
+
+	public void setRoles(Set<String> roles) {
+		this.roles = roles;
+	}
+
+	public SysUser getSysUser() {
+		return sysUser;
+	}
+
+	public void setSysUser(SysUser sysUser) {
+		this.sysUser = sysUser;
+	}
+
+	public String getPoolName() {
+		return poolName;
+	}
+
+	public void setPoolName(String poolName) {
+		this.poolName = poolName;
+	}
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index 431c264..356cbe7 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -18,6 +18,8 @@ import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.model.LoginUser;
 
+import java.util.concurrent.TimeUnit;
+
 /**
  * 登录校验方法
  * 
@@ -96,7 +98,20 @@ public class SysLoginService
             recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
             throw new ServiceException("对不起,您的账号:" + username + " 已停用");
         }
-        passwordService.validate(user, password);
+        /*passwordService.validate(user, password);
+        recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");*/
+        /****** 2023年6月30日 检查是否配置园区 ******/
+        if (StringUtils.isEmpty(userInfo.getPoolName())) {
+            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户暂未分配园区,请联系管理员");
+            throw new ServiceException("对不起,您的账号:" + username + " 暂未分配园区");
+        }
+        // 非免密
+        /*if (!noPassword) {
+            passwordService.validate(user, password);
+        }*/
+        // 缓存用户园区
+        redisService.setCacheObject(CacheConstants.USER_POOL_NAME_CURRENT + username, userInfo.getPoolName(),
+                CacheConstants.REFRESH_TIME, TimeUnit.MINUTES);
         recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
         return userInfo;
     }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index e2df52b..b8f55ee 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -1,59 +1,60 @@
-package com.ruoyi.common.core.constant;
-
-/**
- * 缓存常量信息
- * 
- * @author ruoyi
- */
-public class CacheConstants
-{
-    /**
-     * 缓存有效期,默认720(分钟)
-     */
-    public final static long EXPIRATION = 720;
-
-    /**
-     * 缓存刷新时间,默认120(分钟)
-     */
-    public final static long REFRESH_TIME = 120;
-
-    /**
-     * 密码最大错误次数
-     */
-    public final static int PASSWORD_MAX_RETRY_COUNT = 5;
-
-    /**
-     * 密码锁定时间,默认10(分钟)
-     */
-    public final static long PASSWORD_LOCK_TIME = 10;
-
-    /**
-     * 权限缓存前缀
-     */
-    public final static String LOGIN_TOKEN_KEY = "login_tokens:";
-
-    /**
-     * 验证码 redis key
-     */
-    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
-
-    /**
-     * 参数管理 cache key
-     */
-    public static final String SYS_CONFIG_KEY = "sys_config:";
-
-    /**
-     * 字典管理 cache key
-     */
-    public static final String SYS_DICT_KEY = "sys_dict:";
-
-    /**
-     * 登录账户密码错误次数 redis key
-     */
-    public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
-
-    /**
-     * 登录IP黑名单 cache key
-     */
-    public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList";
-}
+package com.ruoyi.common.core.constant;
+
+/**
+ * 缓存常量信息
+ * 
+ * @author sf
+ */
+public class CacheConstants {
+	/**
+	 * 缓存有效期,默认720(分钟)
+	 */
+	public final static long EXPIRATION = 720;
+
+	/**
+	 * 缓存刷新时间,默认120(分钟)
+	 */
+	public final static long REFRESH_TIME = 120;
+
+	/**
+	 * 密码最大错误次数
+	 */
+	public final static int PASSWORD_MAX_RETRY_COUNT = 5;
+
+	/**
+	 * 密码锁定时间,默认10(分钟)
+	 */
+	public final static long PASSWORD_LOCK_TIME = 10;
+
+	/**
+	 * 权限缓存前缀
+	 */
+	public final static String LOGIN_TOKEN_KEY = "login_tokens:";
+
+	/**
+	 * 验证码 redis key
+	 */
+	public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
+
+	/**
+	 * 参数管理 cache key
+	 */
+	public static final String SYS_CONFIG_KEY = "sys_config:";
+
+	/**
+	 * 字典管理 cache key
+	 */
+	public static final String SYS_DICT_KEY = "sys_dict:";
+
+	/**
+	 * 登录账户密码错误次数 redis key
+	 */
+	public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+
+	/**
+	 * 登录IP黑名单 cache key
+	 */
+	public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList";
+	// 用户当前所选园区
+	public static final String USER_POOL_NAME_CURRENT = "user_pool_name_current:";
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
index 1327c9b..bffe78c 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
@@ -1,118 +1,123 @@
-package com.ruoyi.common.core.web.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-/**
- * Entity基类
- * 
- * @author ruoyi
- */
-public class BaseEntity implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 搜索值 */
-    @JsonIgnore
-    private String searchValue;
-
-    /** 创建者 */
-    private String createBy;
-
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /** 更新者 */
-    private String updateBy;
-
-    /** 更新时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    /** 备注 */
-    private String remark;
-
-    /** 请求参数 */
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    private Map<String, Object> params;
-
-    public String getSearchValue()
-    {
-        return searchValue;
-    }
-
-    public void setSearchValue(String searchValue)
-    {
-        this.searchValue = searchValue;
-    }
-
-    public String getCreateBy()
-    {
-        return createBy;
-    }
-
-    public void setCreateBy(String createBy)
-    {
-        this.createBy = createBy;
-    }
-
-    public Date getCreateTime()
-    {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime)
-    {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateBy()
-    {
-        return updateBy;
-    }
-
-    public void setUpdateBy(String updateBy)
-    {
-        this.updateBy = updateBy;
-    }
-
-    public Date getUpdateTime()
-    {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime)
-    {
-        this.updateTime = updateTime;
-    }
-
-    public String getRemark()
-    {
-        return remark;
-    }
-
-    public void setRemark(String remark)
-    {
-        this.remark = remark;
-    }
-
-    public Map<String, Object> getParams()
-    {
-        if (params == null)
-        {
-            params = new HashMap<>();
-        }
-        return params;
-    }
-
-    public void setParams(Map<String, Object> params)
-    {
-        this.params = params;
-    }
-}
+package com.ruoyi.common.core.web.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Entity基类
+ * 
+ * @author sf
+ */
+public class BaseEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/** 搜索值 */
+	@JsonIgnore
+	private String searchValue;
+
+	/** 创建者 */
+	private String createBy;
+
+	/** 创建时间 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 更新者 */
+	private String updateBy;
+
+	/** 更新时间 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 备注 */
+	private String remark;
+	//数据源标识
+	private String poolName;
+	//部门
+	private Long deptId;
+
+	/** 请求参数 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private Map<String, Object> params;
+
+	public String getSearchValue() {
+		return searchValue;
+	}
+
+	public void setSearchValue(String searchValue) {
+		this.searchValue = searchValue;
+	}
+
+	public String getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateBy() {
+		return updateBy;
+	}
+
+	public void setUpdateBy(String updateBy) {
+		this.updateBy = updateBy;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Map<String, Object> getParams() {
+		if (params == null) {
+			params = new HashMap<>();
+		}
+		return params;
+	}
+
+	public void setParams(Map<String, Object> params) {
+		this.params = params;
+	}
+
+	public String getPoolName() {
+		return poolName;
+	}
+
+	public void setPoolName(String poolName) {
+		this.poolName = poolName;
+	}
+
+	public Long getDeptId() {
+		return deptId;
+	}
+
+	public void setDeptId(Long deptId) {
+		this.deptId = deptId;
+	}
+}
diff --git a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java
index 9a80312..fa60a65 100644
--- a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java
+++ b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java
@@ -14,8 +14,7 @@ import java.lang.annotation.Target;
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
-public @interface DataScope
-{
+public @interface DataScope {
     /**
      * 部门表的别名
      */
diff --git a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/PoolDeptAuto.java b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/PoolDeptAuto.java
new file mode 100644
index 0000000..6f9d31f
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/PoolDeptAuto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.common.datascope.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 自动设置当前数据源及数据所属的部门
+ * 
+ * @ClassName: DataPoolDept
+ * @Description: TODO
+ * @author shichangzhou
+ * @date 2023年4月24日 下午5:47:07
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface PoolDeptAuto {
+
+	// 是否自动设置数据源标识
+	public boolean pool() default true;
+
+	// 是否自动设置部门
+	public boolean dept() default true;
+
+}
diff --git a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
index dde9196..59627f2 100644
--- a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
+++ b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
@@ -1,10 +1,18 @@
 package com.ruoyi.common.datascope.aspect;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
+
+import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.datascope.annotation.PoolDeptAuto;
+import com.ruoyi.common.redis.service.RedisService;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.core.context.SecurityContextHolder;
 import com.ruoyi.common.core.text.Convert;
@@ -23,8 +31,13 @@ import com.ruoyi.system.api.model.LoginUser;
  */
 @Aspect
 @Component
-public class DataScopeAspect
-{
+public class DataScopeAspect {
+
+    private static final Logger log = LoggerFactory.getLogger(DataScopeAspect.class);
+
+    @Autowired
+    private RedisService redisService;
+
     /**
      * 全部数据权限
      */
@@ -56,23 +69,71 @@ public class DataScopeAspect
     public static final String DATA_SCOPE = "dataScope";
 
     @Before("@annotation(controllerDataScope)")
-    public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable
-    {
+    public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable {
         clearDataScope(point);
         handleDataScope(point, controllerDataScope);
     }
 
-    protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope)
-    {
+    @Before("@annotation(controllerPoolDeptAuto)")
+    public void doBefore(JoinPoint point, PoolDeptAuto controllerPoolDeptAuto)
+            throws SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException {
+
+        Object obj = point.getArgs()[0];
+        if (controllerPoolDeptAuto.pool()) {
+            log.debug("已开启自动设置数据源标识");
+            Field field = null;
+            try {
+                field = obj.getClass().getSuperclass().getDeclaredField("poolName");
+            } catch (NoSuchFieldException e) {
+                field = obj.getClass().getDeclaredField("poolName");
+                log.error("If PoolDeptAuto annotation is used, the parameter must contain poolName!", e);
+                throw e;
+            }
+            field.setAccessible(true);
+            Object poolName = field.get(obj);
+            if (poolName == null) {
+                // 缓存用户园区
+                poolName = redisService
+                        .getCacheObject(CacheConstants.USER_POOL_NAME_CURRENT + SecurityUtils.getUsername());
+                if (StringUtils.isNotNull(poolName)) {
+                    field.set(obj, poolName);
+                } else {
+                    log.error("Cannot be found the current poolName!");
+                }
+            }
+        }
+        if (controllerPoolDeptAuto.dept()) {
+            Field field = null;
+            try {
+                field = obj.getClass().getSuperclass().getDeclaredField("deptId");
+            } catch (NoSuchFieldException e) {
+                field = obj.getClass().getDeclaredField("deptId");
+                log.error("If PoolDeptAuto annotation is used, the parameter must contain deptId!", e);
+                throw e;
+            }
+            field.setAccessible(true);
+            Object deptId = field.get(obj);
+            if (deptId == null) {
+                // 获取当前的用户
+                LoginUser loginUser = SecurityUtils.getLoginUser();
+                if (StringUtils.isNotNull(loginUser)) {
+                    field.set(obj, loginUser.getSysUser().getDeptId());
+                } else {
+                    log.error("Cannot be found the current login user deptId!");
+                }
+            }
+        }
+    }
+
+    protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) {
         // 获取当前的用户
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (StringUtils.isNotNull(loginUser))
-        {
+        if (StringUtils.isNotNull(loginUser)) {
             SysUser currentUser = loginUser.getSysUser();
             // 如果是超级管理员,则不过滤数据
-            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
-            {
-                String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), SecurityContextHolder.getPermission());
+            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) {
+                String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(),
+                        SecurityContextHolder.getPermission());
                 dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
                         controllerDataScope.userAlias(), permission);
             }
@@ -81,60 +142,45 @@ public class DataScopeAspect
 
     /**
      * 数据范围过滤
-     * 
-     * @param joinPoint 切点
-     * @param user 用户
-     * @param deptAlias 部门别名
-     * @param userAlias 用户别名
+     *
+     * @param joinPoint  切点
+     * @param user       用户
+     * @param deptAlias  部门别名
+     * @param userAlias  用户别名
      * @param permission 权限字符
      */
-    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission)
-    {
+    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias,
+                                       String permission) {
         StringBuilder sqlString = new StringBuilder();
         List<String> conditions = new ArrayList<String>();
 
-        for (SysRole role : user.getRoles())
-        {
+        for (SysRole role : user.getRoles()) {
             String dataScope = role.getDataScope();
-            if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope))
-            {
+            if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) {
                 continue;
             }
             if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions())
-                    && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission)))
-            {
+                    && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) {
                 continue;
             }
-            if (DATA_SCOPE_ALL.equals(dataScope))
-            {
+            if (DATA_SCOPE_ALL.equals(dataScope)) {
                 sqlString = new StringBuilder();
                 conditions.add(dataScope);
                 break;
-            }
-            else if (DATA_SCOPE_CUSTOM.equals(dataScope))
-            {
+            } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
                 sqlString.append(StringUtils.format(
                         " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
                         role.getRoleId()));
-            }
-            else if (DATA_SCOPE_DEPT.equals(dataScope))
-            {
+            } else if (DATA_SCOPE_DEPT.equals(dataScope)) {
                 sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
-            }
-            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-            {
+            } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
                 sqlString.append(StringUtils.format(
                         " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
                         deptAlias, user.getDeptId(), user.getDeptId()));
-            }
-            else if (DATA_SCOPE_SELF.equals(dataScope))
-            {
-                if (StringUtils.isNotBlank(userAlias))
-                {
+            } else if (DATA_SCOPE_SELF.equals(dataScope)) {
+                if (StringUtils.isNotBlank(userAlias)) {
                     sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
-                }
-                else
-                {
+                } else {
                     // 数据权限为仅本人且没有userAlias别名不查询任何数据
                     sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
                 }
@@ -143,16 +189,13 @@ public class DataScopeAspect
         }
 
         // 多角色情况下,所有角色都不包含传递过来的权限字符,这个时候sqlString也会为空,所以要限制一下,不查询任何数据
-        if (StringUtils.isEmpty(conditions))
-        {
+        if (StringUtils.isEmpty(conditions)) {
             sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
         }
 
-        if (StringUtils.isNotBlank(sqlString.toString()))
-        {
+        if (StringUtils.isNotBlank(sqlString.toString())) {
             Object params = joinPoint.getArgs()[0];
-            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-            {
+            if (StringUtils.isNotNull(params) && params instanceof BaseEntity) {
                 BaseEntity baseEntity = (BaseEntity) params;
                 baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
             }
@@ -162,11 +205,9 @@ public class DataScopeAspect
     /**
      * 拼接权限sql前先清空params.dataScope参数防止注入
      */
-    private void clearDataScope(final JoinPoint joinPoint)
-    {
+    private void clearDataScope(final JoinPoint joinPoint) {
         Object params = joinPoint.getArgs()[0];
-        if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-        {
+        if (StringUtils.isNotNull(params) && params instanceof BaseEntity) {
             BaseEntity baseEntity = (BaseEntity) params;
             baseEntity.getParams().put(DATA_SCOPE, "");
         }
diff --git a/ruoyi-common/ruoyi-common-datasource/src/main/java/com/ruoyi/common/datasource/creator/DynamicDatasourceCreator.java b/ruoyi-common/ruoyi-common-datasource/src/main/java/com/ruoyi/common/datasource/creator/DynamicDatasourceCreator.java
new file mode 100644
index 0000000..2992b05
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-datasource/src/main/java/com/ruoyi/common/datasource/creator/DynamicDatasourceCreator.java
@@ -0,0 +1,36 @@
+package com.ruoyi.common.datasource.creator;
+
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+/**
+ * 动态创建数据源
+ * 
+ * @ClassName: DynamicDatasourceCreator
+ * @Description: TODO
+ * @author shichangzhou
+ * @date 2023年4月20日 下午1:15:09
+ */
+@Component
+public class DynamicDatasourceCreator {
+
+	private static final Logger log = LoggerFactory.getLogger(DynamicDatasourceCreator.class);
+	@Resource
+	private DynamicRoutingDataSource dynamicRoutingDataSource;
+	@Resource
+	private DefaultDataSourceCreator defaultDataSourceCreator;
+
+	public DataSource createDynamicDataSource(DataSourceProperty dataSourceProperty) {
+		log.info("Dynamic Datasource init.....");
+		DataSource dataSource = defaultDataSourceCreator.createDataSource(dataSourceProperty);
+		dynamicRoutingDataSource.addDataSource(dataSourceProperty.getPoolName(), dataSource);
+		return dataSource;
+	}
+}
diff --git a/ruoyi-common/ruoyi-common-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..9092e63
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.ruoyi.common.datasource.creator.DynamicDatasourceCreator
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/DynamicDatasource.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/DynamicDatasource.java
new file mode 100644
index 0000000..41df460
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/DynamicDatasource.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.config;
+
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
+import com.ruoyi.common.datasource.creator.DynamicDatasourceCreator;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 初始化动态数据源
+ */
+@Component
+public class DynamicDatasource {
+
+	@Resource
+	private DynamicDatasourceCreator dynamicDatasourceCreator;
+	@Autowired
+	private ISysUserService sysUserService;
+
+	@PostConstruct
+	public void init() {
+		SysUser sysUser = new SysUser();
+		sysUser.setUserId(1L);
+		List<Map<String, String>> dateSources = sysUserService.getPoolNameList(sysUser);
+		for (Map<String, String> dateSource : dateSources) {
+			DataSourceProperty sdp = new DataSourceProperty();
+			sdp.setUrl(dateSource.get("url"));
+			sdp.setUsername(dateSource.get("userName"));
+			sdp.setPassword(dateSource.get("password"));
+			sdp.setDriverClassName(dateSource.get("driveClassName"));
+			sdp.setPoolName(dateSource.get("poolName"));// 这是数据源的key
+			sdp.setLazy(false);
+			dynamicDatasourceCreator.createDynamicDataSource(sdp);
+		}
+	}
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 47102d5..f1ca97b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -1,326 +1,318 @@
-package com.ruoyi.system.controller;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.web.controller.BaseController;
-import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.page.TableDataInfo;
-import com.ruoyi.common.log.annotation.Log;
-import com.ruoyi.common.log.enums.BusinessType;
-import com.ruoyi.common.security.annotation.InnerAuth;
-import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.system.api.domain.SysDept;
-import com.ruoyi.system.api.domain.SysRole;
-import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.api.model.LoginUser;
-import com.ruoyi.system.service.ISysConfigService;
-import com.ruoyi.system.service.ISysDeptService;
-import com.ruoyi.system.service.ISysPermissionService;
-import com.ruoyi.system.service.ISysPostService;
-import com.ruoyi.system.service.ISysRoleService;
-import com.ruoyi.system.service.ISysUserService;
-
-/**
- * 用户信息
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/user")
-public class SysUserController extends BaseController
-{
-    @Autowired
-    private ISysUserService userService;
-
-    @Autowired
-    private ISysRoleService roleService;
-
-    @Autowired
-    private ISysDeptService deptService;
-
-    @Autowired
-    private ISysPostService postService;
-
-    @Autowired
-    private ISysPermissionService permissionService;
-
-    @Autowired
-    private ISysConfigService configService;
-
-    /**
-     * 获取用户列表
-     */
-    @RequiresPermissions("system:user:list")
-    @GetMapping("/list")
-    public TableDataInfo list(SysUser user)
-    {
-        startPage();
-        List<SysUser> list = userService.selectUserList(user);
-        return getDataTable(list);
-    }
-
-    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
-    @RequiresPermissions("system:user:export")
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, SysUser user)
-    {
-        List<SysUser> list = userService.selectUserList(user);
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        util.exportExcel(response, list, "用户数据");
-    }
-
-    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
-    @RequiresPermissions("system:user:import")
-    @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
-    {
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        List<SysUser> userList = util.importExcel(file.getInputStream());
-        String operName = SecurityUtils.getUsername();
-        String message = userService.importUser(userList, updateSupport, operName);
-        return success(message);
-    }
-
-    @PostMapping("/importTemplate")
-    public void importTemplate(HttpServletResponse response) throws IOException
-    {
-        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
-        util.importTemplateExcel(response, "用户数据");
-    }
-
-    /**
-     * 获取当前用户信息
-     */
-    @InnerAuth
-    @GetMapping("/info/{username}")
-    public R<LoginUser> info(@PathVariable("username") String username)
-    {
-        SysUser sysUser = userService.selectUserByUserName(username);
-        if (StringUtils.isNull(sysUser))
-        {
-            return R.fail("用户名或密码错误");
-        }
-        // 角色集合
-        Set<String> roles = permissionService.getRolePermission(sysUser);
-        // 权限集合
-        Set<String> permissions = permissionService.getMenuPermission(sysUser);
-        LoginUser sysUserVo = new LoginUser();
-        sysUserVo.setSysUser(sysUser);
-        sysUserVo.setRoles(roles);
-        sysUserVo.setPermissions(permissions);
-        return R.ok(sysUserVo);
-    }
-
-    /**
-     * 注册用户信息
-     */
-    @InnerAuth
-    @PostMapping("/register")
-    public R<Boolean> register(@RequestBody SysUser sysUser)
-    {
-        String username = sysUser.getUserName();
-        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
-        {
-            return R.fail("当前系统没有开启注册功能!");
-        }
-        if (!userService.checkUserNameUnique(sysUser))
-        {
-            return R.fail("保存用户'" + username + "'失败,注册账号已存在");
-        }
-        return R.ok(userService.registerUser(sysUser));
-    }
-
-    /**
-     * 获取用户信息
-     * 
-     * @return 用户信息
-     */
-    @GetMapping("getInfo")
-    public AjaxResult getInfo()
-    {
-        SysUser user = userService.selectUserById(SecurityUtils.getUserId());
-        // 角色集合
-        Set<String> roles = permissionService.getRolePermission(user);
-        // 权限集合
-        Set<String> permissions = permissionService.getMenuPermission(user);
-        AjaxResult ajax = AjaxResult.success();
-        ajax.put("user", user);
-        ajax.put("roles", roles);
-        ajax.put("permissions", permissions);
-        return ajax;
-    }
-
-    /**
-     * 根据用户编号获取详细信息
-     */
-    @RequiresPermissions("system:user:query")
-    @GetMapping(value = { "/", "/{userId}" })
-    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
-    {
-        userService.checkUserDataScope(userId);
-        AjaxResult ajax = AjaxResult.success();
-        List<SysRole> roles = roleService.selectRoleAll();
-        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
-        ajax.put("posts", postService.selectPostAll());
-        if (StringUtils.isNotNull(userId))
-        {
-            SysUser sysUser = userService.selectUserById(userId);
-            ajax.put(AjaxResult.DATA_TAG, sysUser);
-            ajax.put("postIds", postService.selectPostListByUserId(userId));
-            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
-        }
-        return ajax;
-    }
-
-    /**
-     * 新增用户
-     */
-    @RequiresPermissions("system:user:add")
-    @Log(title = "用户管理", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysUser user)
-    {
-        if (!userService.checkUserNameUnique(user))
-        {
-            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
-        {
-            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
-            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
-        }
-        user.setCreateBy(SecurityUtils.getUsername());
-        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        return toAjax(userService.insertUser(user));
-    }
-
-    /**
-     * 修改用户
-     */
-    @RequiresPermissions("system:user:edit")
-    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
-        if (!userService.checkUserNameUnique(user))
-        {
-            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
-        {
-            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
-            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
-        }
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.updateUser(user));
-    }
-
-    /**
-     * 删除用户
-     */
-    @RequiresPermissions("system:user:remove")
-    @Log(title = "用户管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{userIds}")
-    public AjaxResult remove(@PathVariable Long[] userIds)
-    {
-        if (ArrayUtils.contains(userIds, SecurityUtils.getUserId()))
-        {
-            return error("当前用户不能删除");
-        }
-        return toAjax(userService.deleteUserByIds(userIds));
-    }
-
-    /**
-     * 重置密码
-     */
-    @RequiresPermissions("system:user:edit")
-    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/resetPwd")
-    public AjaxResult resetPwd(@RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
-        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.resetPwd(user));
-    }
-
-    /**
-     * 状态修改
-     */
-    @RequiresPermissions("system:user:edit")
-    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysUser user)
-    {
-        userService.checkUserAllowed(user);
-        userService.checkUserDataScope(user.getUserId());
-        user.setUpdateBy(SecurityUtils.getUsername());
-        return toAjax(userService.updateUserStatus(user));
-    }
-
-    /**
-     * 根据用户编号获取授权角色
-     */
-    @RequiresPermissions("system:user:query")
-    @GetMapping("/authRole/{userId}")
-    public AjaxResult authRole(@PathVariable("userId") Long userId)
-    {
-        AjaxResult ajax = AjaxResult.success();
-        SysUser user = userService.selectUserById(userId);
-        List<SysRole> roles = roleService.selectRolesByUserId(userId);
-        ajax.put("user", user);
-        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
-        return ajax;
-    }
-
-    /**
-     * 用户授权角色
-     */
-    @RequiresPermissions("system:user:edit")
-    @Log(title = "用户管理", businessType = BusinessType.GRANT)
-    @PutMapping("/authRole")
-    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
-    {
-        userService.checkUserDataScope(userId);
-        userService.insertUserAuth(userId, roleIds);
-        return success();
-    }
-
-    /**
-     * 获取部门树列表
-     */
-    @RequiresPermissions("system:user:list")
-    @GetMapping("/deptTree")
-    public AjaxResult deptTree(SysDept dept)
-    {
-        return success(deptService.selectDeptTreeList(dept));
-    }
-}
+package com.ruoyi.system.controller;
+
+import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.InnerAuth;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.SysDept;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.system.service.*;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 用户信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/user")
+public class SysUserController extends BaseController {
+	@Autowired
+	private ISysUserService userService;
+
+	@Autowired
+	private ISysRoleService roleService;
+
+	@Autowired
+	private ISysDeptService deptService;
+
+	@Autowired
+	private ISysPostService postService;
+
+	@Autowired
+	private ISysPermissionService permissionService;
+
+	@Autowired
+	private ISysConfigService configService;
+
+	@Autowired
+	private RedisService redisService;
+
+	/**
+	 * 获取用户列表
+	 */
+	@RequiresPermissions("system:user:list")
+	@GetMapping("/list")
+	public TableDataInfo list(SysUser user) {
+		startPage();
+		List<SysUser> list = userService.selectUserList(user);
+		return getDataTable(list);
+	}
+
+	@Log(title = "用户管理", businessType = BusinessType.EXPORT)
+	@RequiresPermissions("system:user:export")
+	@PostMapping("/export")
+	public void export(HttpServletResponse response, SysUser user) {
+		List<SysUser> list = userService.selectUserList(user);
+		ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+		util.exportExcel(response, list, "用户数据");
+	}
+
+	@Log(title = "用户管理", businessType = BusinessType.IMPORT)
+	@RequiresPermissions("system:user:import")
+	@PostMapping("/importData")
+	public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
+		ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+		List<SysUser> userList = util.importExcel(file.getInputStream());
+		String operName = SecurityUtils.getUsername();
+		String message = userService.importUser(userList, updateSupport, operName);
+		return success(message);
+	}
+
+	@PostMapping("/importTemplate")
+	public void importTemplate(HttpServletResponse response) throws IOException {
+		ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+		util.importTemplateExcel(response, "用户数据");
+	}
+
+	/**
+	 * 获取当前用户信息
+	 */
+	@InnerAuth
+	@GetMapping("/info/{username}")
+	public R<LoginUser> info(@PathVariable("username") String username) {
+		SysUser sysUser = userService.selectUserByUserName(username);
+		if (StringUtils.isNull(sysUser)) {
+			return R.fail("用户名或密码错误");
+		}
+		// 角色集合
+		Set<String> roles = permissionService.getRolePermission(sysUser);
+		// 权限集合
+		Set<String> permissions = permissionService.getMenuPermission(sysUser);
+		// 园区集合
+		List<Map<String, String>> poolNameList = permissionService.getPoolNameList(sysUser);
+		LoginUser sysUserVo = new LoginUser();
+		sysUserVo.setSysUser(sysUser);
+		sysUserVo.setRoles(roles);
+		sysUserVo.setPermissions(permissions);
+		if (!CollectionUtils.isEmpty(poolNameList)) {
+			sysUserVo.setPoolName(poolNameList.get(0).get("poolName"));
+		}
+		return R.ok(sysUserVo);
+	}
+
+	/**
+	 * 注册用户信息
+	 */
+	@InnerAuth
+	@PostMapping("/register")
+	public R<Boolean> register(@RequestBody SysUser sysUser) {
+		String username = sysUser.getUserName();
+		if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
+			return R.fail("当前系统没有开启注册功能!");
+		}
+		if (!userService.checkUserNameUnique(sysUser)) {
+			return R.fail("保存用户'" + username + "'失败,注册账号已存在");
+		}
+		return R.ok(userService.registerUser(sysUser));
+	}
+
+	/**
+	 * 获取用户信息
+	 *
+	 * @return 用户信息
+	 */
+	@GetMapping("getInfo")
+	public AjaxResult getInfo() {
+		SysUser user = userService.selectUserById(SecurityUtils.getUserId());
+		// 角色集合
+		Set<String> roles = permissionService.getRolePermission(user);
+		// 权限集合
+		Set<String> permissions = permissionService.getMenuPermission(user);
+		// 园区集合
+		List<Map<String, String>> poolNameList = permissionService.getPoolNameList(user);
+		// 缓存用户园区
+		String poolName = redisService.getCacheObject(CacheConstants.USER_POOL_NAME_CURRENT + user.getUserName());
+		user.setPoolName(poolName);
+		AjaxResult ajax = AjaxResult.success();
+		ajax.put("user", user);
+		ajax.put("roles", roles);
+		ajax.put("permissions", permissions);
+		ajax.put("poolNameList", poolNameList);
+		return ajax;
+	}
+
+	/**
+	 * 根据用户编号获取详细信息
+	 */
+	@RequiresPermissions("system:user:query")
+	@GetMapping(value = { "/", "/{userId}" })
+	public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
+		userService.checkUserDataScope(userId);
+		AjaxResult ajax = AjaxResult.success();
+		List<SysRole> roles = roleService.selectRoleAll();
+		ajax.put("roles", SysUser.isAdmin(userId) ? roles
+				: roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+		ajax.put("posts", postService.selectPostAll());
+		if (StringUtils.isNotNull(userId)) {
+			SysUser sysUser = userService.selectUserById(userId);
+			ajax.put(AjaxResult.DATA_TAG, sysUser);
+			ajax.put("postIds", postService.selectPostListByUserId(userId));
+			ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
+		}
+		return ajax;
+	}
+
+	/**
+	 * 新增用户
+	 */
+	@RequiresPermissions("system:user:add")
+	@Log(title = "用户管理", businessType = BusinessType.INSERT)
+	@PostMapping
+	public AjaxResult add(@Validated @RequestBody SysUser user) {
+		if (!userService.checkUserNameUnique(user)) {
+			return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+		} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
+			return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+		} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
+			return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+		}
+		user.setCreateBy(SecurityUtils.getUsername());
+		user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+		return toAjax(userService.insertUser(user));
+	}
+
+	/**
+	 * 修改用户
+	 */
+	@RequiresPermissions("system:user:edit")
+	@Log(title = "用户管理", businessType = BusinessType.UPDATE)
+	@PutMapping
+	public AjaxResult edit(@Validated @RequestBody SysUser user) {
+		userService.checkUserAllowed(user);
+		userService.checkUserDataScope(user.getUserId());
+		if (!userService.checkUserNameUnique(user)) {
+			return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
+		} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
+			return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+		} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
+			return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+		}
+		user.setUpdateBy(SecurityUtils.getUsername());
+		return toAjax(userService.updateUser(user));
+	}
+
+	/**
+	 * 删除用户
+	 */
+	@RequiresPermissions("system:user:remove")
+	@Log(title = "用户管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{userIds}")
+	public AjaxResult remove(@PathVariable Long[] userIds) {
+		if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) {
+			return error("当前用户不能删除");
+		}
+		return toAjax(userService.deleteUserByIds(userIds));
+	}
+
+	/**
+	 * 重置密码
+	 */
+	@RequiresPermissions("system:user:edit")
+	@Log(title = "用户管理", businessType = BusinessType.UPDATE)
+	@PutMapping("/resetPwd")
+	public AjaxResult resetPwd(@RequestBody SysUser user) {
+		userService.checkUserAllowed(user);
+		userService.checkUserDataScope(user.getUserId());
+		user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+		user.setUpdateBy(SecurityUtils.getUsername());
+		return toAjax(userService.resetPwd(user));
+	}
+
+	/**
+	 * 状态修改
+	 */
+	@RequiresPermissions("system:user:edit")
+	@Log(title = "用户管理", businessType = BusinessType.UPDATE)
+	@PutMapping("/changeStatus")
+	public AjaxResult changeStatus(@RequestBody SysUser user) {
+		userService.checkUserAllowed(user);
+		userService.checkUserDataScope(user.getUserId());
+		user.setUpdateBy(SecurityUtils.getUsername());
+		return toAjax(userService.updateUserStatus(user));
+	}
+
+	/**
+	 * 根据用户编号获取授权角色
+	 */
+	@RequiresPermissions("system:user:query")
+	@GetMapping("/authRole/{userId}")
+	public AjaxResult authRole(@PathVariable("userId") Long userId) {
+		AjaxResult ajax = AjaxResult.success();
+		SysUser user = userService.selectUserById(userId);
+		List<SysRole> roles = roleService.selectRolesByUserId(userId);
+		ajax.put("user", user);
+		ajax.put("roles", SysUser.isAdmin(userId) ? roles
+				: roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+		return ajax;
+	}
+
+	/**
+	 * 用户授权角色
+	 */
+	@RequiresPermissions("system:user:edit")
+	@Log(title = "用户管理", businessType = BusinessType.GRANT)
+	@PutMapping("/authRole")
+	public AjaxResult insertAuthRole(Long userId, Long[] roleIds) {
+		userService.checkUserDataScope(userId);
+		userService.insertUserAuth(userId, roleIds);
+		return success();
+	}
+
+	/**
+	 * 获取部门树列表
+	 */
+	@RequiresPermissions("system:user:list")
+	@GetMapping("/deptTree")
+	public AjaxResult deptTree(SysDept dept) {
+
+		return success(deptService.selectDeptTreeList(dept));
+	}
+
+	/**
+	 * 变更园区
+	 */
+//	@RequiresPermissions("system:user:changePoolName")
+	@PutMapping("/changePoolName")
+	public AjaxResult changePoolName(@RequestBody SysUser user) {
+		String username = SecurityUtils.getUsername();
+		// 缓存用户园区
+		redisService.setCacheObject(CacheConstants.USER_POOL_NAME_CURRENT + username, user.getPoolName(),
+				CacheConstants.REFRESH_TIME, TimeUnit.MINUTES);
+		return success();
+	}
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDatasource.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDatasource.java
new file mode 100644
index 0000000..655d83d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDatasource.java
@@ -0,0 +1,240 @@
+package com.ruoyi.system.domain;
+
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 园区数据库对象 sys_datasource
+ *
+ * @author sf
+ * @date 2023-05-18
+ */
+public class SysDatasource extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String id;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private String url;
+
+    /** ip:端口 */
+    @Excel(name = "ip:端口")
+    private String ipPort;
+
+    /** 用户名 */
+    @Excel(name = "用户名")
+    private String userName;
+
+    /** 密码 */
+    @Excel(name = "密码")
+    private String password;
+
+    /** 驱动 */
+    @Excel(name = "驱动")
+    private String driveClassName;
+
+    /** 数据源标识 */
+    @Excel(name = "数据源标识")
+    private String poolName;
+
+    /** 数据源名称 */
+    @Excel(name = "数据源名称")
+    private String parkName;
+
+    /** 帐号状态(0正常 */
+    @Excel(name = "帐号状态", readConverterExp = "帐号状态(0正常")
+    private String status;
+
+    /** 删除标志(0代表存在 */
+    private String delFlag;
+
+    /** 数据所属部门 */
+    @Excel(name = "数据所属部门")
+    private Long deptId;
+    private String deptName;
+
+    /** 0未创建 */
+    @Excel(name = "0未创建")
+    private String schemaCreated;
+    private String datasourceId;
+    private String userId;
+    private String nickName;
+    private String systemType;
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public String getSystemType() {
+        return systemType;
+    }
+
+    public void setSystemType(String systemType) {
+        this.systemType = systemType;
+    }
+
+    public String getDatasourceId() {
+        return datasourceId;
+    }
+
+    public void setDatasourceId(String datasourceId) {
+        this.datasourceId = datasourceId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setUrl(String url)
+    {
+        this.url = url;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+    public void setIpPort(String ipPort)
+    {
+        this.ipPort = ipPort;
+    }
+
+    public String getIpPort()
+    {
+        return ipPort;
+    }
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName()
+    {
+        return userName;
+    }
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+    public void setDriveClassName(String driveClassName)
+    {
+        this.driveClassName = driveClassName;
+    }
+
+    public String getDriveClassName()
+    {
+        return driveClassName;
+    }
+    public void setPoolName(String poolName)
+    {
+        this.poolName = poolName;
+    }
+
+    public String getPoolName()
+    {
+        return poolName;
+    }
+    public void setParkName(String parkName)
+    {
+        this.parkName = parkName;
+    }
+
+    public String getParkName()
+    {
+        return parkName;
+    }
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setSchemaCreated(String schemaCreated)
+    {
+        this.schemaCreated = schemaCreated;
+    }
+
+    public String getSchemaCreated()
+    {
+        return schemaCreated;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("url", getUrl())
+            .append("ipPort", getIpPort())
+            .append("userName", getUserName())
+            .append("password", getPassword())
+            .append("driveClassName", getDriveClassName())
+            .append("poolName", getPoolName())
+            .append("parkName", getParkName())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("deptId", getDeptId())
+            .append("schemaCreated", getSchemaCreated())
+            .toString();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDatasourceMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDatasourceMapper.java
new file mode 100644
index 0000000..14642c9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDatasourceMapper.java
@@ -0,0 +1,78 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.domain.SysDatasource;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 园区数据库Mapper接口
+ *
+ * @author sf
+ * @date 2023-05-18
+ */
+@Mapper
+public interface SysDatasourceMapper
+{
+    /**
+     * 查询园区数据库
+     *
+     * @param id 园区数据库主键
+     * @return 园区数据库
+     */
+    public SysDatasource selectSysDatasourceById(String id);
+
+    /**
+     * 查询园区数据库列表
+     *
+     * @param sysDatasource 园区数据库
+     * @return 园区数据库集合
+     */
+    public List<SysDatasource> selectSysDatasourceList(SysDatasource sysDatasource);
+
+    /**
+     * 新增园区数据库
+     *
+     * @param sysDatasource 园区数据库
+     * @return 结果
+     */
+    public int insertSysDatasource(SysDatasource sysDatasource);
+
+    /**
+     * 修改园区数据库
+     *
+     * @param sysDatasource 园区数据库
+     * @return 结果
+     */
+    public int updateSysDatasource(SysDatasource sysDatasource);
+
+    /**
+     * 删除园区数据库
+     *
+     * @param id 园区数据库主键
+     * @return 结果
+     */
+    public int deleteSysDatasourceById(String id);
+
+    /**
+     * 批量删除园区数据库
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSysDatasourceByIds(String[] ids);
+
+    List<SysDatasource> selectAllocatedList(SysDatasource sysDatasource);
+
+    List<SysUser> selectUnallocatedList(SysUser user);
+
+    int batchUserDB(List<SysDatasource> list);
+
+    int deleteUserRoleInfo(SysDatasource sysDatasource);
+
+    int deleteUserRoleInfos(@Param("datasourceId") String datasourceId, @Param("userIds") Long[] userIds);
+
+    List<SysDatasource> selectDBListByDept(SysDatasource qo);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 9535ab8..538fe34 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -1,127 +1,130 @@
-package com.ruoyi.system.mapper;
-
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
-import com.ruoyi.system.api.domain.SysUser;
-
-/**
- * 用户表 数据层
- * 
- * @author ruoyi
- */
-public interface SysUserMapper
-{
-    /**
-     * 根据条件分页查询用户列表
-     * 
-     * @param sysUser 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectUserList(SysUser sysUser);
-
-    /**
-     * 根据条件分页查询已配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectAllocatedList(SysUser user);
-
-    /**
-     * 根据条件分页查询未分配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectUnallocatedList(SysUser user);
-
-    /**
-     * 通过用户名查询用户
-     * 
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    public SysUser selectUserByUserName(String userName);
-
-    /**
-     * 通过用户ID查询用户
-     * 
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    public SysUser selectUserById(Long userId);
-
-    /**
-     * 新增用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int insertUser(SysUser user);
-
-    /**
-     * 修改用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUser(SysUser user);
-
-    /**
-     * 修改用户头像
-     * 
-     * @param userName 用户名
-     * @param avatar 头像地址
-     * @return 结果
-     */
-    public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
-
-    /**
-     * 重置用户密码
-     * 
-     * @param userName 用户名
-     * @param password 密码
-     * @return 结果
-     */
-    public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
-
-    /**
-     * 通过用户ID删除用户
-     * 
-     * @param userId 用户ID
-     * @return 结果
-     */
-    public int deleteUserById(Long userId);
-
-    /**
-     * 批量删除用户信息
-     * 
-     * @param userIds 需要删除的用户ID
-     * @return 结果
-     */
-    public int deleteUserByIds(Long[] userIds);
-
-    /**
-     * 校验用户名称是否唯一
-     * 
-     * @param userName 用户名称
-     * @return 结果
-     */
-    public SysUser checkUserNameUnique(String userName);
-
-    /**
-     * 校验手机号码是否唯一
-     *
-     * @param phonenumber 手机号码
-     * @return 结果
-     */
-    public SysUser checkPhoneUnique(String phonenumber);
-
-    /**
-     * 校验email是否唯一
-     *
-     * @param email 用户邮箱
-     * @return 结果
-     */
-    public SysUser checkEmailUnique(String email);
-}
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.api.domain.SysUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户表 数据层
+ * 
+ * @author sf
+ */
+public interface SysUserMapper {
+	/**
+	 * 根据条件分页查询用户列表
+	 * 
+	 * @param sysUser 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectUserList(SysUser sysUser);
+
+	/**
+	 * 根据条件分页查询已配用户角色列表
+	 * 
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectAllocatedList(SysUser user);
+
+	/**
+	 * 根据条件分页查询未分配用户角色列表
+	 * 
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectUnallocatedList(SysUser user);
+
+	/**
+	 * 通过用户名查询用户
+	 * 
+	 * @param userName 用户名
+	 * @return 用户对象信息
+	 */
+	public SysUser selectUserByUserName(String userName);
+
+	/**
+	 * 通过用户ID查询用户
+	 * 
+	 * @param userId 用户ID
+	 * @return 用户对象信息
+	 */
+	public SysUser selectUserById(Long userId);
+
+	/**
+	 * 新增用户信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int insertUser(SysUser user);
+
+	/**
+	 * 修改用户信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int updateUser(SysUser user);
+
+	/**
+	 * 修改用户头像
+	 * 
+	 * @param userName 用户名
+	 * @param avatar   头像地址
+	 * @return 结果
+	 */
+	public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
+
+	/**
+	 * 重置用户密码
+	 * 
+	 * @param userName 用户名
+	 * @param password 密码
+	 * @return 结果
+	 */
+	public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
+
+	/**
+	 * 通过用户ID删除用户
+	 * 
+	 * @param userId 用户ID
+	 * @return 结果
+	 */
+	public int deleteUserById(Long userId);
+
+	/**
+	 * 批量删除用户信息
+	 * 
+	 * @param userIds 需要删除的用户ID
+	 * @return 结果
+	 */
+	public int deleteUserByIds(Long[] userIds);
+
+	/**
+	 * 校验用户名称是否唯一
+	 * 
+	 * @param userName 用户名称
+	 * @return 结果
+	 */
+	public SysUser checkUserNameUnique(String userName);
+
+	/**
+	 * 校验手机号码是否唯一
+	 *
+	 * @param phonenumber 手机号码
+	 * @return 结果
+	 */
+	public SysUser checkPhoneUnique(String phonenumber);
+
+	/**
+	 * 校验email是否唯一
+	 *
+	 * @param email 用户邮箱
+	 * @return 结果
+	 */
+	public SysUser checkEmailUnique(String email);
+
+	public List<Map<String, String>> getPoolNameList(SysUser user);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
index 9c33e54..7fbaf00 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
@@ -1,44 +1,47 @@
-package com.ruoyi.system.mapper;
-
-import java.util.List;
-import com.ruoyi.system.domain.SysUserPost;
-
-/**
- * 用户与岗位关联表 数据层
- * 
- * @author ruoyi
- */
-public interface SysUserPostMapper
-{
-    /**
-     * 通过用户ID删除用户和岗位关联
-     * 
-     * @param userId 用户ID
-     * @return 结果
-     */
-    public int deleteUserPostByUserId(Long userId);
-
-    /**
-     * 通过岗位ID查询岗位使用数量
-     * 
-     * @param postId 岗位ID
-     * @return 结果
-     */
-    public int countUserPostById(Long postId);
-
-    /**
-     * 批量删除用户和岗位关联
-     * 
-     * @param ids 需要删除的数据ID
-     * @return 结果
-     */
-    public int deleteUserPost(Long[] ids);
-
-    /**
-     * 批量新增用户岗位信息
-     * 
-     * @param userPostList 用户角色列表
-     * @return 结果
-     */
-    public int batchUserPost(List<SysUserPost> userPostList);
-}
+package com.ruoyi.system.mapper;
+
+
+import com.ruoyi.system.domain.SysUserPost;
+
+import java.util.List;
+
+/**
+ * 用户与岗位关联表 数据层
+ *
+ * @author sf
+ */
+public interface SysUserPostMapper {
+	/**
+	 * 通过用户ID删除用户和岗位关联
+	 *
+	 * @param userId 用户ID
+	 * @return 结果
+	 */
+	public int deleteUserPostByUserId(Long userId);
+
+	/**
+	 * 通过岗位ID查询岗位使用数量
+	 *
+	 * @param postId 岗位ID
+	 * @return 结果
+	 */
+	public int countUserPostById(Long postId);
+
+	/**
+	 * 批量删除用户和岗位关联
+	 *
+	 * @param ids 需要删除的数据ID
+	 * @return 结果
+	 */
+	public int deleteUserPost(Long[] ids);
+
+	/**
+	 * 批量新增用户岗位信息
+	 *
+	 * @param userPostList 用户角色列表
+	 * @return 结果
+	 */
+	public int batchUserPost(List<SysUserPost> userPostList);
+
+    void deleteUserDBByUserId(Long userId);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPermissionService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPermissionService.java
index bc3bf32..615f4df 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPermissionService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPermissionService.java
@@ -1,5 +1,7 @@
 package com.ruoyi.system.service;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.ruoyi.system.api.domain.SysUser;
@@ -26,4 +28,11 @@ public interface ISysPermissionService
      * @return 菜单权限信息
      */
     public Set<String> getMenuPermission(SysUser user);
+
+    /**
+     * 获取用户园区
+     * @param sysUser
+     * @return
+     */
+    public List<Map<String,String>> getPoolNameList(SysUser sysUser);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index d263253..baf285c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -1,206 +1,210 @@
-package com.ruoyi.system.service;
-
-import java.util.List;
-import com.ruoyi.system.api.domain.SysUser;
-
-/**
- * 用户 业务层
- * 
- * @author ruoyi
- */
-public interface ISysUserService
-{
-    /**
-     * 根据条件分页查询用户列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectUserList(SysUser user);
-
-    /**
-     * 根据条件分页查询已分配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectAllocatedList(SysUser user);
-
-    /**
-     * 根据条件分页查询未分配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SysUser> selectUnallocatedList(SysUser user);
-
-    /**
-     * 通过用户名查询用户
-     * 
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    public SysUser selectUserByUserName(String userName);
-
-    /**
-     * 通过用户ID查询用户
-     * 
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    public SysUser selectUserById(Long userId);
-
-    /**
-     * 根据用户ID查询用户所属角色组
-     * 
-     * @param userName 用户名
-     * @return 结果
-     */
-    public String selectUserRoleGroup(String userName);
-
-    /**
-     * 根据用户ID查询用户所属岗位组
-     * 
-     * @param userName 用户名
-     * @return 结果
-     */
-    public String selectUserPostGroup(String userName);
-
-    /**
-     * 校验用户名称是否唯一
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public boolean checkUserNameUnique(SysUser user);
-
-    /**
-     * 校验手机号码是否唯一
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public boolean checkPhoneUnique(SysUser user);
-
-    /**
-     * 校验email是否唯一
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public boolean checkEmailUnique(SysUser user);
-
-    /**
-     * 校验用户是否允许操作
-     * 
-     * @param user 用户信息
-     */
-    public void checkUserAllowed(SysUser user);
-
-    /**
-     * 校验用户是否有数据权限
-     * 
-     * @param userId 用户id
-     */
-    public void checkUserDataScope(Long userId);
-
-    /**
-     * 新增用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int insertUser(SysUser user);
-
-    /**
-     * 注册用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public boolean registerUser(SysUser user);
-
-    /**
-     * 修改用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUser(SysUser user);
-
-    /**
-     * 用户授权角色
-     * 
-     * @param userId 用户ID
-     * @param roleIds 角色组
-     */
-    public void insertUserAuth(Long userId, Long[] roleIds);
-
-    /**
-     * 修改用户状态
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUserStatus(SysUser user);
-
-    /**
-     * 修改用户基本信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUserProfile(SysUser user);
-
-    /**
-     * 修改用户头像
-     * 
-     * @param userName 用户名
-     * @param avatar 头像地址
-     * @return 结果
-     */
-    public boolean updateUserAvatar(String userName, String avatar);
-
-    /**
-     * 重置用户密码
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int resetPwd(SysUser user);
-
-    /**
-     * 重置用户密码
-     * 
-     * @param userName 用户名
-     * @param password 密码
-     * @return 结果
-     */
-    public int resetUserPwd(String userName, String password);
-
-    /**
-     * 通过用户ID删除用户
-     * 
-     * @param userId 用户ID
-     * @return 结果
-     */
-    public int deleteUserById(Long userId);
-
-    /**
-     * 批量删除用户信息
-     * 
-     * @param userIds 需要删除的用户ID
-     * @return 结果
-     */
-    public int deleteUserByIds(Long[] userIds);
-
-    /**
-     * 导入用户数据
-     * 
-     * @param userList 用户数据列表
-     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
-     * @param operName 操作用户
-     * @return 结果
-     */
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
-}
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.api.domain.SysUser;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户 业务层
+ * 
+ * @author sf
+ */
+public interface ISysUserService {
+	/**
+	 * 根据条件分页查询用户列表
+	 * 
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectUserList(SysUser user);
+
+	/**
+	 * 根据条件分页查询已分配用户角色列表
+	 * 
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectAllocatedList(SysUser user);
+
+	/**
+	 * 根据条件分页查询未分配用户角色列表
+	 * 
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	public List<SysUser> selectUnallocatedList(SysUser user);
+
+	/**
+	 * 通过用户名查询用户
+	 * 
+	 * @param userName 用户名
+	 * @return 用户对象信息
+	 */
+	public SysUser selectUserByUserName(String userName);
+
+	/**
+	 * 通过用户ID查询用户
+	 * 
+	 * @param userId 用户ID
+	 * @return 用户对象信息
+	 */
+	public SysUser selectUserById(Long userId);
+
+	/**
+	 * 根据用户ID查询用户所属角色组
+	 * 
+	 * @param userName 用户名
+	 * @return 结果
+	 */
+	public String selectUserRoleGroup(String userName);
+
+	/**
+	 * 根据用户ID查询用户所属岗位组
+	 * 
+	 * @param userName 用户名
+	 * @return 结果
+	 */
+	public String selectUserPostGroup(String userName);
+
+	/**
+	 * 校验用户名称是否唯一
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public boolean checkUserNameUnique(SysUser user);
+
+	/**
+	 * 校验手机号码是否唯一
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public boolean checkPhoneUnique(SysUser user);
+
+	/**
+	 * 校验email是否唯一
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public boolean checkEmailUnique(SysUser user);
+
+	/**
+	 * 校验用户是否允许操作
+	 * 
+	 * @param user 用户信息
+	 */
+	public void checkUserAllowed(SysUser user);
+
+	/**
+	 * 校验用户是否有数据权限
+	 * 
+	 * @param userId 用户id
+	 */
+	public void checkUserDataScope(Long userId);
+
+	/**
+	 * 新增用户信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int insertUser(SysUser user);
+
+	/**
+	 * 注册用户信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public boolean registerUser(SysUser user);
+
+	/**
+	 * 修改用户信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int updateUser(SysUser user);
+
+	/**
+	 * 用户授权角色
+	 * 
+	 * @param userId  用户ID
+	 * @param roleIds 角色组
+	 */
+	public void insertUserAuth(Long userId, Long[] roleIds);
+
+	/**
+	 * 修改用户状态
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int updateUserStatus(SysUser user);
+
+	/**
+	 * 修改用户基本信息
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int updateUserProfile(SysUser user);
+
+	/**
+	 * 修改用户头像
+	 * 
+	 * @param userName 用户名
+	 * @param avatar   头像地址
+	 * @return 结果
+	 */
+	public boolean updateUserAvatar(String userName, String avatar);
+
+	/**
+	 * 重置用户密码
+	 * 
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	public int resetPwd(SysUser user);
+
+	/**
+	 * 重置用户密码
+	 * 
+	 * @param userName 用户名
+	 * @param password 密码
+	 * @return 结果
+	 */
+	public int resetUserPwd(String userName, String password);
+
+	/**
+	 * 通过用户ID删除用户
+	 * 
+	 * @param userId 用户ID
+	 * @return 结果
+	 */
+	public int deleteUserById(Long userId);
+
+	/**
+	 * 批量删除用户信息
+	 * 
+	 * @param userIds 需要删除的用户ID
+	 * @return 结果
+	 */
+	public int deleteUserByIds(Long[] userIds);
+
+	/**
+	 * 导入用户数据
+	 * 
+	 * @param userList        用户数据列表
+	 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+	 * @param operName        操作用户
+	 * @return 结果
+	 */
+	public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
+
+	// 查询用户可见数据源
+	public List<Map<String, String>> getPoolNameList(SysUser user);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index cdaaa2d..252c5e2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -3,6 +3,8 @@ package com.ruoyi.system.service.impl;
 import java.util.Collection;
 import java.util.List;
 import javax.annotation.PostConstruct;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.core.constant.CacheConstants;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
index b506636..d52632b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
@@ -2,7 +2,10 @@ package com.ruoyi.system.service.impl;
 
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+
+import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -26,6 +29,9 @@ public class SysPermissionServiceImpl implements ISysPermissionService
     @Autowired
     private ISysMenuService menuService;
 
+    @Autowired
+    private ISysUserService userService;
+
     /**
      * 获取角色数据权限
      * 
@@ -83,4 +89,14 @@ public class SysPermissionServiceImpl implements ISysPermissionService
         }
         return perms;
     }
+
+    /**
+     * 获取用户园区
+     * @param user
+     * @return
+     */
+    @Override
+    public List<Map<String, String>> getPoolNameList(SysUser user) {
+        return userService.getPoolNameList(user);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 4735055..6a0c02c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -1,545 +1,517 @@
-package com.ruoyi.system.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.validation.Validator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import com.ruoyi.common.core.constant.UserConstants;
-import com.ruoyi.common.core.exception.ServiceException;
-import com.ruoyi.common.core.utils.SpringUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.bean.BeanValidators;
-import com.ruoyi.common.datascope.annotation.DataScope;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.system.api.domain.SysRole;
-import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.domain.SysPost;
-import com.ruoyi.system.domain.SysUserPost;
-import com.ruoyi.system.domain.SysUserRole;
-import com.ruoyi.system.mapper.SysPostMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysUserPostMapper;
-import com.ruoyi.system.mapper.SysUserRoleMapper;
-import com.ruoyi.system.service.ISysConfigService;
-import com.ruoyi.system.service.ISysUserService;
-
-/**
- * 用户 业务层处理
- * 
- * @author ruoyi
- */
-@Service
-public class SysUserServiceImpl implements ISysUserService
-{
-    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
-
-    @Autowired
-    private SysUserMapper userMapper;
-
-    @Autowired
-    private SysRoleMapper roleMapper;
-
-    @Autowired
-    private SysPostMapper postMapper;
-
-    @Autowired
-    private SysUserRoleMapper userRoleMapper;
-
-    @Autowired
-    private SysUserPostMapper userPostMapper;
-
-    @Autowired
-    private ISysConfigService configService;
-
-    @Autowired
-    protected Validator validator;
-
-    /**
-     * 根据条件分页查询用户列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectUserList(SysUser user)
-    {
-        return userMapper.selectUserList(user);
-    }
-
-    /**
-     * 根据条件分页查询已分配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectAllocatedList(SysUser user)
-    {
-        return userMapper.selectAllocatedList(user);
-    }
-
-    /**
-     * 根据条件分页查询未分配用户角色列表
-     * 
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectUnallocatedList(SysUser user)
-    {
-        return userMapper.selectUnallocatedList(user);
-    }
-
-    /**
-     * 通过用户名查询用户
-     * 
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    @Override
-    public SysUser selectUserByUserName(String userName)
-    {
-        return userMapper.selectUserByUserName(userName);
-    }
-
-    /**
-     * 通过用户ID查询用户
-     * 
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    @Override
-    public SysUser selectUserById(Long userId)
-    {
-        return userMapper.selectUserById(userId);
-    }
-
-    /**
-     * 查询用户所属角色组
-     * 
-     * @param userName 用户名
-     * @return 结果
-     */
-    @Override
-    public String selectUserRoleGroup(String userName)
-    {
-        List<SysRole> list = roleMapper.selectRolesByUserName(userName);
-        if (CollectionUtils.isEmpty(list))
-        {
-            return StringUtils.EMPTY;
-        }
-        return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
-    }
-
-    /**
-     * 查询用户所属岗位组
-     * 
-     * @param userName 用户名
-     * @return 结果
-     */
-    @Override
-    public String selectUserPostGroup(String userName)
-    {
-        List<SysPost> list = postMapper.selectPostsByUserName(userName);
-        if (CollectionUtils.isEmpty(list))
-        {
-            return StringUtils.EMPTY;
-        }
-        return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
-    }
-
-    /**
-     * 校验用户名称是否唯一
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public boolean checkUserNameUnique(SysUser user)
-    {
-        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SysUser info = userMapper.checkUserNameUnique(user.getUserName());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验手机号码是否唯一
-     *
-     * @param user 用户信息
-     * @return
-     */
-    @Override
-    public boolean checkPhoneUnique(SysUser user)
-    {
-        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验email是否唯一
-     *
-     * @param user 用户信息
-     * @return
-     */
-    @Override
-    public boolean checkEmailUnique(SysUser user)
-    {
-        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SysUser info = userMapper.checkEmailUnique(user.getEmail());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验用户是否允许操作
-     * 
-     * @param user 用户信息
-     */
-    @Override
-    public void checkUserAllowed(SysUser user)
-    {
-        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
-        {
-            throw new ServiceException("不允许操作超级管理员用户");
-        }
-    }
-
-    /**
-     * 校验用户是否有数据权限
-     * 
-     * @param userId 用户id
-     */
-    @Override
-    public void checkUserDataScope(Long userId)
-    {
-        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
-        {
-            SysUser user = new SysUser();
-            user.setUserId(userId);
-            List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
-            if (StringUtils.isEmpty(users))
-            {
-                throw new ServiceException("没有权限访问用户数据!");
-            }
-        }
-    }
-
-    /**
-     * 新增保存用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int insertUser(SysUser user)
-    {
-        // 新增用户信息
-        int rows = userMapper.insertUser(user);
-        // 新增用户岗位关联
-        insertUserPost(user);
-        // 新增用户与角色管理
-        insertUserRole(user);
-        return rows;
-    }
-
-    /**
-     * 注册用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public boolean registerUser(SysUser user)
-    {
-        return userMapper.insertUser(user) > 0;
-    }
-
-    /**
-     * 修改保存用户信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int updateUser(SysUser user)
-    {
-        Long userId = user.getUserId();
-        // 删除用户与角色关联
-        userRoleMapper.deleteUserRoleByUserId(userId);
-        // 新增用户与角色管理
-        insertUserRole(user);
-        // 删除用户与岗位关联
-        userPostMapper.deleteUserPostByUserId(userId);
-        // 新增用户与岗位管理
-        insertUserPost(user);
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 用户授权角色
-     * 
-     * @param userId 用户ID
-     * @param roleIds 角色组
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void insertUserAuth(Long userId, Long[] roleIds)
-    {
-        userRoleMapper.deleteUserRoleByUserId(userId);
-        insertUserRole(userId, roleIds);
-    }
-
-    /**
-     * 修改用户状态
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int updateUserStatus(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 修改用户基本信息
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int updateUserProfile(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 修改用户头像
-     * 
-     * @param userName 用户名
-     * @param avatar 头像地址
-     * @return 结果
-     */
-    @Override
-    public boolean updateUserAvatar(String userName, String avatar)
-    {
-        return userMapper.updateUserAvatar(userName, avatar) > 0;
-    }
-
-    /**
-     * 重置用户密码
-     * 
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int resetPwd(SysUser user)
-    {
-        return userMapper.updateUser(user);
-    }
-
-    /**
-     * 重置用户密码
-     * 
-     * @param userName 用户名
-     * @param password 密码
-     * @return 结果
-     */
-    @Override
-    public int resetUserPwd(String userName, String password)
-    {
-        return userMapper.resetUserPwd(userName, password);
-    }
-
-    /**
-     * 新增用户角色信息
-     * 
-     * @param user 用户对象
-     */
-    public void insertUserRole(SysUser user)
-    {
-        this.insertUserRole(user.getUserId(), user.getRoleIds());
-    }
-
-    /**
-     * 新增用户岗位信息
-     * 
-     * @param user 用户对象
-     */
-    public void insertUserPost(SysUser user)
-    {
-        Long[] posts = user.getPostIds();
-        if (StringUtils.isNotEmpty(posts))
-        {
-            // 新增用户与岗位管理
-            List<SysUserPost> list = new ArrayList<SysUserPost>();
-            for (Long postId : posts)
-            {
-                SysUserPost up = new SysUserPost();
-                up.setUserId(user.getUserId());
-                up.setPostId(postId);
-                list.add(up);
-            }
-            userPostMapper.batchUserPost(list);
-        }
-    }
-
-    /**
-     * 新增用户角色信息
-     * 
-     * @param userId 用户ID
-     * @param roleIds 角色组
-     */
-    public void insertUserRole(Long userId, Long[] roleIds)
-    {
-        if (StringUtils.isNotEmpty(roleIds))
-        {
-            // 新增用户与角色管理
-            List<SysUserRole> list = new ArrayList<SysUserRole>();
-            for (Long roleId : roleIds)
-            {
-                SysUserRole ur = new SysUserRole();
-                ur.setUserId(userId);
-                ur.setRoleId(roleId);
-                list.add(ur);
-            }
-            userRoleMapper.batchUserRole(list);
-        }
-    }
-
-    /**
-     * 通过用户ID删除用户
-     * 
-     * @param userId 用户ID
-     * @return 结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int deleteUserById(Long userId)
-    {
-        // 删除用户与角色关联
-        userRoleMapper.deleteUserRoleByUserId(userId);
-        // 删除用户与岗位表
-        userPostMapper.deleteUserPostByUserId(userId);
-        return userMapper.deleteUserById(userId);
-    }
-
-    /**
-     * 批量删除用户信息
-     * 
-     * @param userIds 需要删除的用户ID
-     * @return 结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int deleteUserByIds(Long[] userIds)
-    {
-        for (Long userId : userIds)
-        {
-            checkUserAllowed(new SysUser(userId));
-            checkUserDataScope(userId);
-        }
-        // 删除用户与角色关联
-        userRoleMapper.deleteUserRole(userIds);
-        // 删除用户与岗位关联
-        userPostMapper.deleteUserPost(userIds);
-        return userMapper.deleteUserByIds(userIds);
-    }
-
-    /**
-     * 导入用户数据
-     * 
-     * @param userList 用户数据列表
-     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
-     * @param operName 操作用户
-     * @return 结果
-     */
-    @Override
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
-    {
-        if (StringUtils.isNull(userList) || userList.size() == 0)
-        {
-            throw new ServiceException("导入用户数据不能为空!");
-        }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        String password = configService.selectConfigByKey("sys.user.initPassword");
-        for (SysUser user : userList)
-        {
-            try
-            {
-                // 验证是否存在这个用户
-                SysUser u = userMapper.selectUserByUserName(user.getUserName());
-                if (StringUtils.isNull(u))
-                {
-                    BeanValidators.validateWithException(validator, user);
-                    user.setPassword(SecurityUtils.encryptPassword(password));
-                    user.setCreateBy(operName);
-                    userMapper.insertUser(user);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
-                }
-                else if (isUpdateSupport)
-                {
-                    BeanValidators.validateWithException(validator, user);
-                    checkUserAllowed(u);
-                    checkUserDataScope(u.getUserId());
-                    user.setUserId(u.getUserId());
-                    user.setUpdateBy(operName);
-                    userMapper.updateUser(user);
-                    successNum++;
-                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
-                }
-                else
-                {
-                    failureNum++;
-                    failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
-                }
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
-                failureMsg.append(msg + e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            throw new ServiceException(failureMsg.toString());
-        }
-        else
-        {
-            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
-        }
-        return successMsg.toString();
-    }
-
-}
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.constant.UserConstants;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.bean.BeanValidators;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.domain.SysDatasource;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.domain.SysUserPost;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 用户 业务层处理
+ *
+ * @author sf
+ */
+@Service
+public class SysUserServiceImpl implements ISysUserService {
+	private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
+
+	@Autowired
+	private SysUserMapper userMapper;
+
+	@Autowired
+	private SysRoleMapper roleMapper;
+
+	@Autowired
+	private SysPostMapper postMapper;
+
+	@Autowired
+	private SysUserRoleMapper userRoleMapper;
+
+	@Autowired
+	private SysUserPostMapper userPostMapper;
+
+	@Autowired
+	private ISysConfigService configService;
+
+	@Autowired
+	protected Validator validator;
+
+	@Autowired
+	private SysDatasourceMapper sysDatasourceMapper;
+
+	/**
+	 * 根据条件分页查询用户列表
+	 *
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	@Override
+	@DataScope(deptAlias = "d", userAlias = "u")
+	public List<SysUser> selectUserList(SysUser user) {
+		return userMapper.selectUserList(user);
+	}
+
+	/**
+	 * 根据条件分页查询已分配用户角色列表
+	 *
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	@Override
+	@DataScope(deptAlias = "d", userAlias = "u")
+	public List<SysUser> selectAllocatedList(SysUser user) {
+		return userMapper.selectAllocatedList(user);
+	}
+
+	/**
+	 * 根据条件分页查询未分配用户角色列表
+	 *
+	 * @param user 用户信息
+	 * @return 用户信息集合信息
+	 */
+	@Override
+	@DataScope(deptAlias = "d", userAlias = "u")
+	public List<SysUser> selectUnallocatedList(SysUser user) {
+		return userMapper.selectUnallocatedList(user);
+	}
+
+	/**
+	 * 通过用户名查询用户
+	 *
+	 * @param userName 用户名
+	 * @return 用户对象信息
+	 */
+	@Override
+	public SysUser selectUserByUserName(String userName) {
+		return userMapper.selectUserByUserName(userName);
+	}
+
+	/**
+	 * 通过用户ID查询用户
+	 *
+	 * @param userId 用户ID
+	 * @return 用户对象信息
+	 */
+	@Override
+	public SysUser selectUserById(Long userId) {
+		return userMapper.selectUserById(userId);
+	}
+
+	/**
+	 * 查询用户所属角色组
+	 *
+	 * @param userName 用户名
+	 * @return 结果
+	 */
+	@Override
+	public String selectUserRoleGroup(String userName) {
+		List<SysRole> list = roleMapper.selectRolesByUserName(userName);
+		if (CollectionUtils.isEmpty(list)) {
+			return StringUtils.EMPTY;
+		}
+		return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
+	}
+
+	/**
+	 * 查询用户所属岗位组
+	 *
+	 * @param userName 用户名
+	 * @return 结果
+	 */
+	@Override
+	public String selectUserPostGroup(String userName) {
+		List<SysPost> list = postMapper.selectPostsByUserName(userName);
+		if (CollectionUtils.isEmpty(list)) {
+			return StringUtils.EMPTY;
+		}
+		return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
+	}
+
+	/**
+	 * 校验用户名称是否唯一
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	public boolean checkUserNameUnique(SysUser user) {
+		Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+		SysUser info = userMapper.checkUserNameUnique(user.getUserName());
+		if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+			return UserConstants.NOT_UNIQUE;
+		}
+		return UserConstants.UNIQUE;
+	}
+
+	/**
+	 * 校验手机号码是否唯一
+	 *
+	 * @param user 用户信息
+	 * @return
+	 */
+	@Override
+	public boolean checkPhoneUnique(SysUser user) {
+		Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+		SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
+		if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+			return UserConstants.NOT_UNIQUE;
+		}
+		return UserConstants.UNIQUE;
+	}
+
+	/**
+	 * 校验email是否唯一
+	 *
+	 * @param user 用户信息
+	 * @return
+	 */
+	@Override
+	public boolean checkEmailUnique(SysUser user) {
+		Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
+		SysUser info = userMapper.checkEmailUnique(user.getEmail());
+		if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
+			return UserConstants.NOT_UNIQUE;
+		}
+		return UserConstants.UNIQUE;
+	}
+
+	/**
+	 * 校验用户是否允许操作
+	 *
+	 * @param user 用户信息
+	 */
+	@Override
+	public void checkUserAllowed(SysUser user) {
+		if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
+			throw new ServiceException("不允许操作超级管理员用户");
+		}
+	}
+
+	/**
+	 * 校验用户是否有数据权限
+	 *
+	 * @param userId 用户id
+	 */
+	@Override
+	public void checkUserDataScope(Long userId) {
+		if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+			SysUser user = new SysUser();
+			user.setUserId(userId);
+			List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
+			if (StringUtils.isEmpty(users)) {
+				throw new ServiceException("没有权限访问用户数据!");
+			}
+		}
+	}
+
+	/**
+	 * 新增保存用户信息
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public int insertUser(SysUser user) {
+		// 新增用户信息
+		int rows = userMapper.insertUser(user);
+		// 新增用户岗位关联
+		insertUserPost(user);
+		// 新增用户与角色管理
+		insertUserRole(user);
+		// 加园区权限
+        insertUserDB(user);
+		return rows;
+	}
+	public void insertUserDB(SysUser user) {
+		// 新增用户与园区数据源
+		SysDatasource qo = new SysDatasource();
+		qo.setDeptId(user.getDeptId());//
+		List<SysDatasource> dbs = sysDatasourceMapper.selectDBListByDept(qo);
+		List<SysDatasource> list = new ArrayList<SysDatasource>();
+		for (SysDatasource db : dbs) {
+			SysDatasource ur = new SysDatasource();
+			ur.setUserId(user.getUserId().toString());
+			ur.setDatasourceId(db.getId());
+			list.add(ur);
+		}
+		sysDatasourceMapper.batchUserDB(list);
+	}
+	/**
+	 * 注册用户信息
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	public boolean registerUser(SysUser user) {
+		return userMapper.insertUser(user) > 0;
+	}
+
+	/**
+	 * 修改保存用户信息
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public int updateUser(SysUser user) {
+		Long userId = user.getUserId();
+		// 删除用户与角色关联
+		userRoleMapper.deleteUserRoleByUserId(userId);
+		// 新增用户与角色管理
+		insertUserRole(user);
+		// 删除用户与岗位关联
+		userPostMapper.deleteUserPostByUserId(userId);
+		// 新增用户与岗位管理
+		insertUserPost(user);
+        // 删除用户与数据源关联
+		userPostMapper.deleteUserDBByUserId(userId);
+		// 加园区权限
+		insertUserDB(user);
+		return userMapper.updateUser(user);
+	}
+
+	/**
+	 * 用户授权角色
+	 *
+	 * @param userId  用户ID
+	 * @param roleIds 角色组
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void insertUserAuth(Long userId, Long[] roleIds) {
+		userRoleMapper.deleteUserRoleByUserId(userId);
+		insertUserRole(userId, roleIds);
+	}
+
+	/**
+	 * 修改用户状态
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	public int updateUserStatus(SysUser user) {
+		return userMapper.updateUser(user);
+	}
+
+	/**
+	 * 修改用户基本信息
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	public int updateUserProfile(SysUser user) {
+		return userMapper.updateUser(user);
+	}
+
+	/**
+	 * 修改用户头像
+	 *
+	 * @param userName 用户名
+	 * @param avatar   头像地址
+	 * @return 结果
+	 */
+	@Override
+	public boolean updateUserAvatar(String userName, String avatar) {
+		return userMapper.updateUserAvatar(userName, avatar) > 0;
+	}
+
+	/**
+	 * 重置用户密码
+	 *
+	 * @param user 用户信息
+	 * @return 结果
+	 */
+	@Override
+	public int resetPwd(SysUser user) {
+		return userMapper.updateUser(user);
+	}
+
+	/**
+	 * 重置用户密码
+	 *
+	 * @param userName 用户名
+	 * @param password 密码
+	 * @return 结果
+	 */
+	@Override
+	public int resetUserPwd(String userName, String password) {
+		return userMapper.resetUserPwd(userName, password);
+	}
+
+	/**
+	 * 新增用户角色信息
+	 *
+	 * @param user 用户对象
+	 */
+	public void insertUserRole(SysUser user) {
+		this.insertUserRole(user.getUserId(), user.getRoleIds());
+	}
+
+	/**
+	 * 新增用户岗位信息
+	 *
+	 * @param user 用户对象
+	 */
+	public void insertUserPost(SysUser user) {
+		Long[] posts = user.getPostIds();
+		if (StringUtils.isNotEmpty(posts)) {
+			// 新增用户与岗位管理
+			List<SysUserPost> list = new ArrayList<SysUserPost>();
+			for (Long postId : posts) {
+				SysUserPost up = new SysUserPost();
+				up.setUserId(user.getUserId());
+				up.setPostId(postId);
+				list.add(up);
+			}
+			userPostMapper.batchUserPost(list);
+		}
+	}
+
+	/**
+	 * 新增用户角色信息
+	 *
+	 * @param userId  用户ID
+	 * @param roleIds 角色组
+	 */
+	public void insertUserRole(Long userId, Long[] roleIds) {
+		if (StringUtils.isNotEmpty(roleIds)) {
+			// 新增用户与角色管理
+			List<SysUserRole> list = new ArrayList<SysUserRole>();
+			for (Long roleId : roleIds) {
+				SysUserRole ur = new SysUserRole();
+				ur.setUserId(userId);
+				ur.setRoleId(roleId);
+				list.add(ur);
+			}
+			userRoleMapper.batchUserRole(list);
+		}
+	}
+
+	/**
+	 * 通过用户ID删除用户
+	 *
+	 * @param userId 用户ID
+	 * @return 结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public int deleteUserById(Long userId) {
+		// 删除用户与角色关联
+		userRoleMapper.deleteUserRoleByUserId(userId);
+		// 删除用户与岗位表
+		userPostMapper.deleteUserPostByUserId(userId);
+		return userMapper.deleteUserById(userId);
+	}
+
+	/**
+	 * 批量删除用户信息
+	 *
+	 * @param userIds 需要删除的用户ID
+	 * @return 结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public int deleteUserByIds(Long[] userIds) {
+		for (Long userId : userIds) {
+			checkUserAllowed(new SysUser(userId));
+			checkUserDataScope(userId);
+		}
+		// 删除用户与角色关联
+		userRoleMapper.deleteUserRole(userIds);
+		// 删除用户与岗位关联
+		userPostMapper.deleteUserPost(userIds);
+		return userMapper.deleteUserByIds(userIds);
+	}
+
+	/**
+	 * 导入用户数据
+	 *
+	 * @param userList        用户数据列表
+	 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+	 * @param operName        操作用户
+	 * @return 结果
+	 */
+	@Override
+	public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
+		if (StringUtils.isNull(userList) || userList.size() == 0) {
+			throw new ServiceException("导入用户数据不能为空!");
+		}
+		int successNum = 0;
+		int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		String password = configService.selectConfigByKey("sys.user.initPassword");
+		for (SysUser user : userList) {
+			try {
+				// 验证是否存在这个用户
+				SysUser u = userMapper.selectUserByUserName(user.getUserName());
+				if (StringUtils.isNull(u)) {
+					BeanValidators.validateWithException(validator, user);
+					user.setPassword(SecurityUtils.encryptPassword(password));
+					user.setCreateBy(operName);
+					userMapper.insertUser(user);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
+				} else if (isUpdateSupport) {
+					BeanValidators.validateWithException(validator, user);
+					checkUserAllowed(u);
+					checkUserDataScope(u.getUserId());
+					user.setUserId(u.getUserId());
+					user.setUpdateBy(operName);
+					userMapper.updateUser(user);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
+				} else {
+					failureNum++;
+					failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
+				}
+			} catch (Exception e) {
+				failureNum++;
+				String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
+				failureMsg.append(msg + e.getMessage());
+				log.error(msg, e);
+			}
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		} else {
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
+
+	@Override
+	public List<Map<String, String>> getPoolNameList(SysUser user) {
+		return userMapper.getPoolNameList(user);
+	}
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
index c64ad2a..1c3872d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -23,3 +23,11 @@ spring:
         # 共享配置
         shared-configs:
           - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+mysql:
+  #数据库链接前缀
+  prev: jdbc:mysql://
+  #数据库链接后缀
+  affter: ?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+  #数据标识前缀
+  poolName:
+    prev: sf
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDatasourceMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDatasourceMapper.xml
new file mode 100644
index 0000000..21611b8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDatasourceMapper.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SysDatasourceMapper">
+
+    <resultMap type="SysDatasource" id="SysDatasourceResult">
+        <result property="id"    column="id"    />
+        <result property="url"    column="url"    />
+        <result property="ipPort"    column="ip_port"    />
+        <result property="userName"    column="user_name"    />
+        <result property="password"    column="password"    />
+        <result property="driveClassName"    column="drive_class_name"    />
+        <result property="poolName"    column="pool_name"    />
+        <result property="parkName"    column="park_name"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="schemaCreated"    column="schema_created"    />
+        <result property="deptName"    column="dept_name"    />
+        <result property="systemType"    column="system_type"    />
+    </resultMap>
+
+    <sql id="selectSysDatasourceVo">
+        select id, url, ip_port, user_name, password, drive_class_name, pool_name, park_name,
+               status, del_flag, create_by, create_time, update_by, update_time, remark,system_type,
+               dept_id, schema_created from sys_datasource
+    </sql>
+
+    <select id="selectSysDatasourceList" parameterType="SysDatasource" resultMap="SysDatasourceResult">
+        select sd.id, sd.url, sd.ip_port, sd.user_name, sd.password, sd.drive_class_name, sd.pool_name, sd.park_name,
+        sd.status, sd.del_flag, sd.create_by, sd.create_time, sd.update_by, sd.update_time, sd.remark,sd.system_type,
+        sd.dept_id,d.dept_name, sd.schema_created from sys_datasource sd
+        left join sys_dept d on sd.dept_id = d.dept_id
+        <where>
+            <if test="url != null  and url != ''"> and url = #{url}</if>
+            <if test="ipPort != null  and ipPort != ''"> and ip_port like concat('%', #{ipPort}, '%')</if>
+            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
+            <if test="password != null  and password != ''"> and password = #{password}</if>
+            <if test="driveClassName != null  and driveClassName != ''"> and drive_class_name like concat('%', #{driveClassName}, '%')</if>
+            <if test="poolName != null  and poolName != ''"> and pool_name like concat('%', #{poolName}, '%')</if>
+            <if test="parkName != null  and parkName != ''"> and park_name like concat('%', #{parkName}, '%')</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="schemaCreated != null  and schemaCreated != ''"> and schema_created = #{schemaCreated}</if>
+        </where>
+    </select>
+
+    <select id="selectSysDatasourceById" parameterType="String" resultMap="SysDatasourceResult">
+        <include refid="selectSysDatasourceVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectAllocatedList" resultType="com.ruoyi.system.domain.SysDatasource">
+        select sd.id,
+               sd.ip_port ipPort,
+               sd.pool_name poolName,
+               sud.user_id userId,
+               su.user_name userName,
+               su.nick_name nickName
+        from sys_datasource sd
+        left join sys_user_datasource sud on sd.id = sud.datasource_id
+        left join sys_user su on su.user_id = sud.user_id
+        where sud.user_id is not null
+        <if test="nickName != null and nickName != ''">
+            AND su.nick_name like concat('%', #{nickName}, '%')
+        </if>
+        <if test="datasourceId != null and datasourceId != ''">
+            AND sd.id = #{datasourceId}
+        </if>
+    </select>
+    <select id="selectUnallocatedList" resultType="com.ruoyi.system.api.domain.SysUser">
+        select distinct u.user_id userId, u.dept_id deptId, u.user_name userName, u.nick_name nickName,
+                        u.email, u.phonenumber, u.status, u.create_time createTime
+        from sys_user u
+        left join sys_user_datasource ur on u.user_id = ur.user_id
+        left join sys_datasource r on r.id = ur.datasource_id
+        where u.del_flag = '0' and (r.id != #{datasourceId} or r.id IS NULL)
+        and u.user_id not in (select ur.user_id from sys_user_datasource ur where ur.datasource_id = #{datasourceId})
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="phonenumber != null and phonenumber != ''">
+            AND u.phonenumber like concat('%', #{phonenumber}, '%')
+        </if>
+    </select>
+    <select id="selectDBListByDept" resultType="com.ruoyi.system.domain.SysDatasource">
+        select id
+        from sys_datasource
+        where del_flag = 0 and dept_id = #{deptId}
+    </select>
+
+    <insert id="insertSysDatasource" parameterType="SysDatasource">
+        insert into sys_datasource
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="url != null and url != ''">url,</if>
+            <if test="ipPort != null">ip_port,</if>
+            <if test="userName != null and userName != ''">user_name,</if>
+            <if test="password != null and password != ''">password,</if>
+            <if test="driveClassName != null and driveClassName != ''">drive_class_name,</if>
+            <if test="poolName != null and poolName != ''">pool_name,</if>
+            <if test="parkName != null">park_name,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="schemaCreated != null">schema_created,</if>
+            <if test="systemType != null">system_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="url != null and url != ''">#{url},</if>
+            <if test="ipPort != null">#{ipPort},</if>
+            <if test="userName != null and userName != ''">#{userName},</if>
+            <if test="password != null and password != ''">#{password},</if>
+            <if test="driveClassName != null and driveClassName != ''">#{driveClassName},</if>
+            <if test="poolName != null and poolName != ''">#{poolName},</if>
+            <if test="parkName != null">#{parkName},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="schemaCreated != null">#{schemaCreated},</if>
+            <if test="systemType != null">#{systemType},</if>
+         </trim>
+    </insert>
+    <insert id="batchUserDB">
+        insert into sys_user_datasource(user_id, datasource_id) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.userId},#{item.datasourceId})
+        </foreach>
+    </insert>
+
+    <update id="updateSysDatasource" parameterType="SysDatasource">
+        update sys_datasource
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="url != null and url != ''">url = #{url},</if>
+            <if test="ipPort != null">ip_port = #{ipPort},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="password != null and password != ''">password = #{password},</if>
+            <if test="driveClassName != null and driveClassName != ''">drive_class_name = #{driveClassName},</if>
+            <if test="poolName != null and poolName != ''">pool_name = #{poolName},</if>
+            <if test="parkName != null">park_name = #{parkName},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="schemaCreated != null">schema_created = #{schemaCreated},</if>
+            <if test="systemType != null">system_type = #{systemType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSysDatasourceById" parameterType="String">
+        delete from sys_datasource where id = #{id}
+    </delete>
+
+    <delete id="deleteSysDatasourceByIds" parameterType="String">
+        delete from sys_datasource where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <delete id="deleteUserRoleInfo">
+        delete from sys_user_datasource where user_id=#{userId} and datasource_id=#{datasourceId}
+    </delete>
+
+    <delete id="deleteUserRoleInfos">
+        delete from sys_user_datasource where datasource_id=#{datasourceId} and user_id in
+        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 3c1c6c5..702c942 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -1,221 +1,235 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
-
-    <resultMap type="SysUser" id="SysUserResult">
-        <id     property="userId"       column="user_id"      />
-        <result property="deptId"       column="dept_id"      />
-        <result property="userName"     column="user_name"    />
-        <result property="nickName"     column="nick_name"    />
-        <result property="email"        column="email"        />
-        <result property="phonenumber"  column="phonenumber"  />
-        <result property="sex"          column="sex"          />
-        <result property="avatar"       column="avatar"       />
-        <result property="password"     column="password"     />
-        <result property="status"       column="status"       />
-        <result property="delFlag"      column="del_flag"     />
-        <result property="loginIp"      column="login_ip"     />
-        <result property="loginDate"    column="login_date"   />
-        <result property="createBy"     column="create_by"    />
-        <result property="createTime"   column="create_time"  />
-        <result property="updateBy"     column="update_by"    />
-        <result property="updateTime"   column="update_time"  />
-        <result property="remark"       column="remark"       />
-        <association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
-        <collection  property="roles"   javaType="java.util.List"           resultMap="RoleResult" />
-    </resultMap>
-	
-    <resultMap id="deptResult" type="SysDept">
-        <id     property="deptId"    column="dept_id"     />
-        <result property="parentId"  column="parent_id"   />
-        <result property="deptName"  column="dept_name"   />
-        <result property="ancestors" column="ancestors"   />
-        <result property="orderNum"  column="order_num"   />
-        <result property="leader"    column="leader"      />
-        <result property="status"    column="dept_status" />
-    </resultMap>
-	
-    <resultMap id="RoleResult" type="SysRole">
-        <id     property="roleId"       column="role_id"        />
-        <result property="roleName"     column="role_name"      />
-        <result property="roleKey"      column="role_key"       />
-        <result property="roleSort"     column="role_sort"      />
-        <result property="dataScope"     column="data_scope"    />
-        <result property="status"       column="role_status"    />
-    </resultMap>
-	
-	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
-        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
-        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
-        from sys_user u
-		    left join sys_dept d on u.dept_id = d.dept_id
-		    left join sys_user_role ur on u.user_id = ur.user_id
-		    left join sys_role r on r.role_id = ur.role_id
-    </sql>
-    
-    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
-		left join sys_dept d on u.dept_id = d.dept_id
-		where u.del_flag = '0'
-		<if test="userId != null and userId != 0">
-			AND u.user_id = #{userId}
-		</if>
-		<if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="status != null and status != ''">
-			AND u.status = #{status}
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-		</if>
-		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-		</if>
-		<if test="deptId != null and deptId != 0">
-			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-	    from sys_user u
-			 left join sys_dept d on u.dept_id = d.dept_id
-			 left join sys_user_role ur on u.user_id = ur.user_id
-			 left join sys_role r on r.role_id = ur.role_id
-	    where u.del_flag = '0' and r.role_id = #{roleId}
-	    <if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-	    from sys_user u
-			 left join sys_dept d on u.dept_id = d.dept_id
-			 left join sys_user_role ur on u.user_id = ur.user_id
-			 left join sys_role r on r.role_id = ur.role_id
-	    where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL)
-	    and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = #{roleId})
-	    <if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
-	    <include refid="selectUserVo"/>
-		where u.user_name = #{userName} and u.del_flag = '0'
-	</select>
-	
-	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
-		<include refid="selectUserVo"/>
-		where u.user_id = #{userId}
-	</select>
-	
-	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
-	</select>
-	
-	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
-	</select>
-	
-	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
-	</select>
-	
-	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
- 		insert into sys_user(
- 			<if test="userId != null and userId != 0">user_id,</if>
- 			<if test="deptId != null and deptId != 0">dept_id,</if>
- 			<if test="userName != null and userName != ''">user_name,</if>
- 			<if test="nickName != null and nickName != ''">nick_name,</if>
- 			<if test="email != null and email != ''">email,</if>
- 			<if test="avatar != null and avatar != ''">avatar,</if>
- 			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
- 			<if test="sex != null and sex != ''">sex,</if>
- 			<if test="password != null and password != ''">password,</if>
- 			<if test="status != null and status != ''">status,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
- 			create_time
- 		)values(
- 			<if test="userId != null and userId != ''">#{userId},</if>
- 			<if test="deptId != null and deptId != ''">#{deptId},</if>
- 			<if test="userName != null and userName != ''">#{userName},</if>
- 			<if test="nickName != null and nickName != ''">#{nickName},</if>
- 			<if test="email != null and email != ''">#{email},</if>
- 			<if test="avatar != null and avatar != ''">#{avatar},</if>
- 			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
- 			<if test="sex != null and sex != ''">#{sex},</if>
- 			<if test="password != null and password != ''">#{password},</if>
- 			<if test="status != null and status != ''">#{status},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
- 			sysdate()
- 		)
-	</insert>
-	
-	<update id="updateUser" parameterType="SysUser">
- 		update sys_user
- 		<set>
- 			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
- 			<if test="userName != null and userName != ''">user_name = #{userName},</if>
- 			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
- 			<if test="email != null ">email = #{email},</if>
- 			<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
- 			<if test="sex != null and sex != ''">sex = #{sex},</if>
- 			<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
- 			<if test="password != null and password != ''">password = #{password},</if>
- 			<if test="status != null and status != ''">status = #{status},</if>
- 			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
- 			<if test="loginDate != null">login_date = #{loginDate},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			update_time = sysdate()
- 		</set>
- 		where user_id = #{userId}
-	</update>
-	
-	<update id="updateUserStatus" parameterType="SysUser">
- 		update sys_user set status = #{status} where user_id = #{userId}
-	</update>
-	
-	<update id="updateUserAvatar" parameterType="SysUser">
- 		update sys_user set avatar = #{avatar} where user_name = #{userName}
-	</update>
-	
-	<update id="resetUserPwd" parameterType="SysUser">
- 		update sys_user set password = #{password} where user_name = #{userName}
-	</update>
-	
-	<delete id="deleteUserById" parameterType="Long">
- 		update sys_user set del_flag = '2' where user_id = #{userId}
- 	</delete>
- 	
- 	<delete id="deleteUserByIds" parameterType="Long">
- 		update sys_user set del_flag = '2' where user_id in
- 		<foreach collection="array" item="userId" open="(" separator="," close=")">
- 			#{userId}
-        </foreach> 
- 	</delete>
-	
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
+
+    <resultMap type="SysUser" id="SysUserResult">
+        <id     property="userId"       column="user_id"      />
+        <result property="deptId"       column="dept_id"      />
+        <result property="userName"     column="user_name"    />
+        <result property="nickName"     column="nick_name"    />
+        <result property="email"        column="email"        />
+        <result property="phonenumber"  column="phonenumber"  />
+        <result property="sex"          column="sex"          />
+        <result property="avatar"       column="avatar"       />
+        <result property="password"     column="password"     />
+        <result property="status"       column="status"       />
+        <result property="delFlag"      column="del_flag"     />
+        <result property="loginIp"      column="login_ip"     />
+        <result property="loginDate"    column="login_date"   />
+        <result property="createBy"     column="create_by"    />
+        <result property="createTime"   column="create_time"  />
+        <result property="updateBy"     column="update_by"    />
+        <result property="updateTime"   column="update_time"  />
+        <result property="remark"       column="remark"       />
+        <association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
+        <collection  property="roles"   javaType="java.util.List"           resultMap="RoleResult" />
+    </resultMap>
+	
+    <resultMap id="deptResult" type="SysDept">
+        <id     property="deptId"    column="dept_id"     />
+        <result property="parentId"  column="parent_id"   />
+        <result property="deptName"  column="dept_name"   />
+        <result property="ancestors" column="ancestors"   />
+        <result property="orderNum"  column="order_num"   />
+        <result property="leader"    column="leader"      />
+        <result property="status"    column="dept_status" />
+    </resultMap>
+	
+    <resultMap id="RoleResult" type="SysRole">
+        <id     property="roleId"       column="role_id"        />
+        <result property="roleName"     column="role_name"      />
+        <result property="roleKey"      column="role_key"       />
+        <result property="roleSort"     column="role_sort"      />
+        <result property="dataScope"     column="data_scope"    />
+        <result property="status"       column="role_status"    />
+    </resultMap>
+	
+	<sql id="selectUserVo">
+        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
+        from sys_user u
+		    left join sys_dept d on u.dept_id = d.dept_id
+		    left join sys_user_role ur on u.user_id = ur.user_id
+		    left join sys_role r on r.role_id = ur.role_id
+    </sql>
+    
+    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		where u.del_flag = '0'
+		<if test="userId != null and userId != 0">
+			AND u.user_id = #{userId}
+		</if>
+		<if test="userName != null and userName != ''">
+			AND u.user_name like concat('%', #{userName}, '%')
+		</if>
+		<if test="status != null and status != ''">
+			AND u.status = #{status}
+		</if>
+		<if test="phonenumber != null and phonenumber != ''">
+			AND u.phonenumber like concat('%', #{phonenumber}, '%')
+		</if>
+		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
+			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+		</if>
+		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+		</if>
+		<if test="deptId != null and deptId != 0">
+			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
+		</if>
+		<!-- 数据范围过滤 -->
+		${params.dataScope}
+	</select>
+	
+	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
+	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+	    from sys_user u
+			 left join sys_dept d on u.dept_id = d.dept_id
+			 left join sys_user_role ur on u.user_id = ur.user_id
+			 left join sys_role r on r.role_id = ur.role_id
+	    where u.del_flag = '0' and r.role_id = #{roleId}
+	    <if test="userName != null and userName != ''">
+			AND u.user_name like concat('%', #{userName}, '%')
+		</if>
+		<if test="phonenumber != null and phonenumber != ''">
+			AND u.phonenumber like concat('%', #{phonenumber}, '%')
+		</if>
+		<!-- 数据范围过滤 -->
+		${params.dataScope}
+	</select>
+	
+	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
+	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+	    from sys_user u
+			 left join sys_dept d on u.dept_id = d.dept_id
+			 left join sys_user_role ur on u.user_id = ur.user_id
+			 left join sys_role r on r.role_id = ur.role_id
+	    where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL)
+	    and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = #{roleId})
+	    <if test="userName != null and userName != ''">
+			AND u.user_name like concat('%', #{userName}, '%')
+		</if>
+		<if test="phonenumber != null and phonenumber != ''">
+			AND u.phonenumber like concat('%', #{phonenumber}, '%')
+		</if>
+		<!-- 数据范围过滤 -->
+		${params.dataScope}
+	</select>
+	
+	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
+	    <include refid="selectUserVo"/>
+		where u.user_name = #{userName} and u.del_flag = '0'
+	</select>
+	
+	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
+		<include refid="selectUserVo"/>
+		where u.user_id = #{userId}
+	</select>
+	
+	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
+	</select>
+	
+	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
+	</select>
+	
+	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
+	</select>
+	
+	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+ 		insert into sys_user(
+ 			<if test="userId != null and userId != 0">user_id,</if>
+ 			<if test="deptId != null and deptId != 0">dept_id,</if>
+ 			<if test="userName != null and userName != ''">user_name,</if>
+ 			<if test="nickName != null and nickName != ''">nick_name,</if>
+ 			<if test="email != null and email != ''">email,</if>
+ 			<if test="avatar != null and avatar != ''">avatar,</if>
+ 			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
+ 			<if test="sex != null and sex != ''">sex,</if>
+ 			<if test="password != null and password != ''">password,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			create_time
+ 		)values(
+ 			<if test="userId != null and userId != ''">#{userId},</if>
+ 			<if test="deptId != null and deptId != ''">#{deptId},</if>
+ 			<if test="userName != null and userName != ''">#{userName},</if>
+ 			<if test="nickName != null and nickName != ''">#{nickName},</if>
+ 			<if test="email != null and email != ''">#{email},</if>
+ 			<if test="avatar != null and avatar != ''">#{avatar},</if>
+ 			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
+ 			<if test="sex != null and sex != ''">#{sex},</if>
+ 			<if test="password != null and password != ''">#{password},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			sysdate()
+ 		)
+	</insert>
+	
+	<update id="updateUser" parameterType="SysUser">
+ 		update sys_user
+ 		<set>
+ 			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+ 			<if test="userName != null and userName != ''">user_name = #{userName},</if>
+ 			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+ 			<if test="email != null ">email = #{email},</if>
+ 			<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
+ 			<if test="sex != null and sex != ''">sex = #{sex},</if>
+ 			<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
+ 			<if test="password != null and password != ''">password = #{password},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
+ 			<if test="loginDate != null">login_date = #{loginDate},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			update_time = sysdate()
+ 		</set>
+ 		where user_id = #{userId}
+	</update>
+	
+	<update id="updateUserStatus" parameterType="SysUser">
+ 		update sys_user set status = #{status} where user_id = #{userId}
+	</update>
+	
+	<update id="updateUserAvatar" parameterType="SysUser">
+ 		update sys_user set avatar = #{avatar} where user_name = #{userName}
+	</update>
+	
+	<update id="resetUserPwd" parameterType="SysUser">
+ 		update sys_user set password = #{password} where user_name = #{userName}
+	</update>
+	
+	<delete id="deleteUserById" parameterType="Long">
+ 		update sys_user set del_flag = '2' where user_id = #{userId}
+ 	</delete>
+ 	
+ 	<delete id="deleteUserByIds" parameterType="Long">
+ 		update sys_user set del_flag = '2' where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	<select id="getPoolNameList" parameterType="SysUser" resultType="java.util.Map">
+		SELECT
+			DISTINCT s.pool_name as poolName,
+			s.park_name as parkName,
+			url,
+			user_name as userName,
+			`password`,
+			drive_class_name as driveClassName
+		FROM sys_user_datasource ud
+		LEFT JOIN sys_datasource s ON ud.datasource_id = s.id
+		WHERE status=0
+		<if test="userId != '1'">
+			and ud.user_id = #{userId}
+		</if>
+	</select>
 </mapper> 
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
index 21c4098..9b39e52 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
@@ -30,5 +30,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			(#{item.userId},#{item.postId})
 		</foreach>
 	</insert>
+
+	<delete id="deleteUserDBByUserId">
+		delete from sys_user_datasource where user_id = #{userId}
+	</delete>
 	
 </mapper> 
\ No newline at end of file