Эх сурвалжийг харах

修改框架本身,权限信息、单点登录信息、获取人员权限信息等

lzu918 6 сар өмнө
parent
commit
35890aef67

+ 110 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -2,7 +2,14 @@ package com.ruoyi.web.controller.system;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.enums.UserStatus;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -19,9 +26,12 @@ import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysMenuService;
 
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
 /**
  * 登录验证
  * 登录验证
- * 
+ *
  * @author ruoyi
  * @author ruoyi
  */
  */
 @RestController
 @RestController
@@ -39,9 +49,12 @@ public class SysLoginController
     @Autowired
     @Autowired
     private TokenService tokenService;
     private TokenService tokenService;
 
 
+    @Autowired
+    private ISysUserService userService;
+
     /**
     /**
      * 登录方法
      * 登录方法
-     * 
+     *
      * @param loginBody 登录信息
      * @param loginBody 登录信息
      * @return 结果
      * @return 结果
      */
      */
@@ -56,9 +69,25 @@ public class SysLoginController
         return ajax;
         return ajax;
     }
     }
 
 
+    /**
+     * wanghao
+     * 模拟登录方法--单点登录
+     *
+     * @return 结果
+     */
+    @PostMapping("/syncLogin")
+    public AjaxResult syncLogin(@RequestBody JSONObject idCard)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.syncLoginByIdCard(idCard.getString("idCard"));
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
     /**
     /**
      * 获取用户信息
      * 获取用户信息
-     * 
+     *
      * @return 用户信息
      * @return 用户信息
      */
      */
     @GetMapping("getInfo")
     @GetMapping("getInfo")
@@ -82,9 +111,86 @@ public class SysLoginController
         return ajax;
         return ajax;
     }
     }
 
 
+
+    /**
+     * wanghao 自定义 获取用户信息方法--指定idCard userId policeNo
+     * @param response
+     * @param request
+     * @return
+     */
+    @PostMapping("getInfoByUserInfo")
+    public AjaxResult getInfoByUserInfo(HttpServletResponse response, HttpServletRequest request, @RequestBody JSONObject params) throws BaseException {
+
+        String idCard = params.getString("idCard");
+        String userId = params.getString("userId");
+        String userName = params.getString("userName");
+
+        SysUser user = null;
+
+        if(StringUtils.isNotEmpty(idCard)){
+            user = userService.selectUserByIdCard(idCard);
+        }else if(StringUtils.isNotEmpty(userId)){
+            user = userService.selectUserById(Long.parseLong(userId));
+        }else if(StringUtils.isNotEmpty(userName)){
+            user = userService.selectUserByUserName(userName);
+        }else{
+            throw new RuntimeException("查询条件不能均为空,当前入参:"+JSONObject.toJSONString(params));
+        }
+
+        if (StringUtils.isNull(user)) {
+            throw new UsernameNotFoundException("用户" + idCard + " 不存在");
+        } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
+            throw new BaseException("用户" + idCard + " 已被删除");
+        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+            throw new BaseException("用户" + idCard +  " 已停用");
+        }
+
+        user = userService.selectUserById(user.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;
+    }
+
+
+
+    /**
+     * wanghao 自定义 获取当前用户信息方法
+     * @param response
+     * @param request
+     * @return
+     */
+    @PostMapping("getCurrentUserInfo")
+    public AjaxResult getCurrentUserInfo(HttpServletResponse response, HttpServletRequest request) throws BaseException {
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysUser user = userService.selectUserById(loginUser.getUserId());
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        if (!loginUser.getPermissions().equals(permissions))
+        {
+            loginUser.setPermissions(permissions);
+            tokenService.refreshToken(loginUser);
+        }
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        ajax.put("roles", roles);
+        ajax.put("permissions", permissions);
+        return ajax;
+    }
+
     /**
     /**
      * 获取路由信息
      * 获取路由信息
-     * 
+     *
      * @return 路由信息
      * @return 路由信息
      */
      */
     @GetMapping("getRouters")
     @GetMapping("getRouters")

+ 2 - 2
ruoyi-admin/src/main/resources/application.yml

@@ -19,7 +19,7 @@ server:
   port: 8088
   port: 8088
   servlet:
   servlet:
     # 应用的访问路径
     # 应用的访问路径
-    context-path: /
+    context-path: /zhzg
   tomcat:
   tomcat:
     # tomcat的URI编码
     # tomcat的URI编码
     uri-encoding: UTF-8
     uri-encoding: UTF-8
@@ -135,7 +135,7 @@ swagger:
   # 是否开启swagger
   # 是否开启swagger
   enabled: true
   enabled: true
   # 请求前缀
   # 请求前缀
-  pathMapping: /zhzg/dev-api
+  pathMapping: /dev-api
 
 
 # 防止XSS攻击
 # 防止XSS攻击
 xss:
 xss:

+ 48 - 23
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -14,7 +14,7 @@ import com.ruoyi.common.xss.Xss;
 
 
 /**
 /**
  * 用户对象 sys_user
  * 用户对象 sys_user
- * 
+ *
  * @author ruoyi
  * @author ruoyi
  */
  */
 public class SysUser extends BaseEntity
 public class SysUser extends BaseEntity
@@ -72,8 +72,8 @@ public class SysUser extends BaseEntity
 
 
     /** 部门对象 */
     /** 部门对象 */
     @Excels({
     @Excels({
-        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
-        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
+            @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+            @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
     })
     })
     private SysDept dept;
     private SysDept dept;
 
 
@@ -89,6 +89,11 @@ public class SysUser extends BaseEntity
     /** 角色ID */
     /** 角色ID */
     private Long roleId;
     private Long roleId;
 
 
+
+    //wanghao 20241121 增加人员信息
+    private String idCard;
+    private String policeNo;
+
     public SysUser()
     public SysUser()
     {
     {
 
 
@@ -297,28 +302,48 @@ public class SysUser extends BaseEntity
         this.roleId = roleId;
         this.roleId = roleId;
     }
     }
 
 
+
+    public String getIdCard(){
+        return idCard;
+    }
+
+    public void setIdCard(String idCard){
+        this.idCard = idCard;
+    }
+
+    public String getPoliceNo(){
+        return policeNo;
+    }
+
+    public void setPoliceNo(String policeNo){
+        this.policeNo = policeNo;
+    }
+
+
     @Override
     @Override
     public String toString() {
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
         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();
+                .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())
+                .append("policeNo", getPoliceNo())
+                .append("idCard", getIdCard())
+                .toString();
     }
     }
 }
 }

+ 3 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -110,15 +110,15 @@ public class SecurityConfig
             // 注解标记允许匿名访问的url
             // 注解标记允许匿名访问的url
             .authorizeHttpRequests((requests) -> {
             .authorizeHttpRequests((requests) -> {
                 permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                 permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
-                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
+                // 对于登录login 注册register 验证码captchaImage 允许匿名访问      --增加"/syncLogin"  模拟登录
+                requests.antMatchers("/login", "/register", "/captchaImage","/syncLogin").permitAll()
                     // 静态资源,可匿名访问
                     // 静态资源,可匿名访问
                     .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                     .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                     .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                     .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
 
 
                     // *** 解决401认证问题,在这里对自定义业务模块中对应的资源请求路径放行  增加--放行url ***
                     // *** 解决401认证问题,在这里对自定义业务模块中对应的资源请求路径放行  增加--放行url ***
                     // 开发测试阶段全部放行   ---2024.11.18
                     // 开发测试阶段全部放行   ---2024.11.18
-                    .antMatchers("/*/**").permitAll()
+//                    .antMatchers("/*/**").permitAll()
                     // 除上面外的所有请求全部需要鉴权认证
                     // 除上面外的所有请求全部需要鉴权认证
                     .anyRequest().authenticated();
                     .anyRequest().authenticated();
             })
             })

+ 78 - 4
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -1,11 +1,20 @@
 package com.ruoyi.framework.web.service;
 package com.ruoyi.framework.web.service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.enums.UserStatus;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.Constants;
@@ -31,7 +40,7 @@ import com.ruoyi.system.service.ISysUserService;
 
 
 /**
 /**
  * 登录校验方法
  * 登录校验方法
- * 
+ *
  * @author ruoyi
  * @author ruoyi
  */
  */
 @Component
 @Component
@@ -46,16 +55,20 @@ public class SysLoginService
 
 
     @Autowired
     @Autowired
     private RedisCache redisCache;
     private RedisCache redisCache;
-    
+
     @Autowired
     @Autowired
     private ISysUserService userService;
     private ISysUserService userService;
 
 
     @Autowired
     @Autowired
     private ISysConfigService configService;
     private ISysConfigService configService;
 
 
+    @Autowired
+    private SysPermissionService permissionService;
+
+
     /**
     /**
      * 登录验证
      * 登录验证
-     * 
+     *
      * @param username 用户名
      * @param username 用户名
      * @param password 密码
      * @param password 密码
      * @param code 验证码
      * @param code 验证码
@@ -76,6 +89,8 @@ public class SysLoginService
             AuthenticationContextHolder.setContext(authenticationToken);
             AuthenticationContextHolder.setContext(authenticationToken);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager.authenticate(authenticationToken);
             authentication = authenticationManager.authenticate(authenticationToken);
+
+
         }
         }
         catch (Exception e)
         catch (Exception e)
         {
         {
@@ -97,6 +112,9 @@ public class SysLoginService
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
 
 
+        System.err.println("系统的权限"+JSONObject.toJSONString(loginUser.getPermissions()));
+
+
         //Add 修改用户“最新 ”登录信息, 和日志是不一样的
         //Add 修改用户“最新 ”登录信息, 和日志是不一样的
         recordLoginInfo(loginUser.getUserId());
         recordLoginInfo(loginUser.getUserId());
 
 
@@ -104,9 +122,65 @@ public class SysLoginService
         return tokenService.createToken(loginUser);
         return tokenService.createToken(loginUser);
     }
     }
 
 
+
+    /**
+     * wanghao
+     * 身份证号模拟登录
+     *
+     * @param idCard 身份证号
+     * @return 结果
+     */
+    public String syncLoginByIdCard(String idCard)
+    {
+        SysUser userCurrent = userService.selectUserByIdCard(idCard);
+        if (StringUtils.isNull(userCurrent)) {
+            throw new UsernameNotFoundException("登录用户 --身份证:" + idCard + " 不存在");
+        } else if (UserStatus.DELETED.getCode().equals(userCurrent.getDelFlag())) {
+            throw new BaseException("登录用户 --身份证:" + idCard + " 已被删除");
+        } else if (UserStatus.DISABLE.getCode().equals(userCurrent.getStatus())) {
+            throw new BaseException("登录用户 --身份证:" + idCard +  " 已停用");
+        }
+
+        //必须用userID重新获取一下用户信息,解决权限丢失问题
+        SysUser sysUser = userService.selectUserById(userCurrent.getUserId());
+
+
+        String username = sysUser.getUserName();
+
+        System.err.println("我自己造的权限"+JSONObject.toJSONString(permissionService.getMenuPermission(sysUser)));
+
+        Authentication authentication = null;
+        try {
+            //直接不用springsecurity 认证、自己构造出数据 TODO 这里对于除了admin以外的用户角色列表是否需要遍历逗号分割拼接暂未测试
+            UserDetails userDetails = new LoginUser(sysUser.getUserId(), sysUser.getDeptId(), sysUser, permissionService.getMenuPermission(sysUser));
+            authentication = new UsernamePasswordAuthenticationToken(userDetails, null,
+                    AuthorityUtils.createAuthorityList("ROLE_USER"));
+            SecurityContextHolder.getContext().setAuthentication(authentication);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+
+        System.err.println("我自己造的权限2"+JSONObject.toJSONString(permissionService.getMenuPermission(sysUser)));
+
+
+        // 生成token
+        return tokenService.createToken(loginUser);
+
+    }
+
+
     /**
     /**
      * 校验验证码
      * 校验验证码
-     * 
+     *
      * @param username 用户名
      * @param username 用户名
      * @param code 验证码
      * @param code 验证码
      * @param uuid 唯一标识
      * @param uuid 唯一标识

+ 6 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java

@@ -4,6 +4,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+
+import com.alibaba.fastjson2.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -131,12 +133,16 @@ public class TokenService
      */
      */
     public void verifyToken(LoginUser loginUser)
     public void verifyToken(LoginUser loginUser)
     {
     {
+        System.err.println("原始token"+ JSONObject.toJSONString(loginUser.getToken()));
+        System.err.println("verifyToken相差不足20分钟,自动刷新缓存");
         long expireTime = loginUser.getExpireTime();
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
         long currentTime = System.currentTimeMillis();
         if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
         if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
         {
         {
             refreshToken(loginUser);
             refreshToken(loginUser);
         }
         }
+
+        System.err.println("新token"+ JSONObject.toJSONString(loginUser.getToken()));
     }
     }
 
 
     /**
     /**

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -51,6 +51,8 @@ public interface SysUserMapper
      */
      */
     public SysUser selectUserById(Long userId);
     public SysUser selectUserById(Long userId);
 
 
+
+    public SysUser selectUserByIdCard(String idCard);
     /**
     /**
      * 新增用户信息
      * 新增用户信息
      * 
      * 

+ 10 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -50,6 +50,16 @@ public interface ISysUserService
      */
      */
     public SysUser selectUserById(Long userId);
     public SysUser selectUserById(Long userId);
 
 
+
+    /**
+     * wanghao
+     * 通过用户idCard查询用户
+     *
+     * @param idCard 用户idCard
+     * @return 用户对象信息
+     */
+    public SysUser selectUserByIdCard(String idCard);
+
     /**
     /**
      * 根据用户ID查询用户所属角色组
      * 根据用户ID查询用户所属角色组
      * 
      * 

+ 12 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -128,6 +128,18 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.selectUserById(userId);
         return userMapper.selectUserById(userId);
     }
     }
 
 
+    /**wanghao
+     * 通过用户idCard查询用户
+     *
+     * @param idCard 用户idCard
+     * @return 用户对象信息
+     */
+    @Override
+    public SysUser selectUserByIdCard(String idCard)
+    {
+        return userMapper.selectUserByIdCard(idCard);
+    }
+
     /**
     /**
      * 查询用户所属角色组
      * 查询用户所属角色组
      * 
      * 

+ 38 - 21
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,10 +23,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy"     column="update_by"    />
         <result property="updateBy"     column="update_by"    />
         <result property="updateTime"   column="update_time"  />
         <result property="updateTime"   column="update_time"  />
         <result property="remark"       column="remark"       />
         <result property="remark"       column="remark"       />
+		<result property="idCard"       column="idcard"       />
+		<result property="policeNo"       column="policeno"       />
         <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
         <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
         <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
     </resultMap>
     </resultMap>
-	
+
     <resultMap id="deptResult" type="SysDept">
     <resultMap id="deptResult" type="SysDept">
         <id     property="deptId"    column="dept_id"     />
         <id     property="deptId"    column="dept_id"     />
         <result property="parentId"  column="parent_id"   />
         <result property="parentId"  column="parent_id"   />
@@ -36,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="leader"    column="leader"      />
         <result property="leader"    column="leader"      />
         <result property="status"    column="dept_status" />
         <result property="status"    column="dept_status" />
     </resultMap>
     </resultMap>
-	
+
     <resultMap id="RoleResult" type="SysRole">
     <resultMap id="RoleResult" type="SysRole">
         <id     property="roleId"       column="role_id"        />
         <id     property="roleId"       column="role_id"        />
         <result property="roleName"     column="role_name"      />
         <result property="roleName"     column="role_name"      />
@@ -45,9 +47,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="dataScope"    column="data_scope"     />
         <result property="dataScope"    column="data_scope"     />
         <result property="status"       column="role_status"    />
         <result property="status"       column="role_status"    />
     </resultMap>
     </resultMap>
-	
+
 	<sql id="selectUserVo">
 	<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, 
+        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, u.idcard, u.policeno,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         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
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
         from sys_user u
@@ -55,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		    left join sys_user_role ur on u.user_id = ur.user_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
 		    left join sys_role r on r.role_id = ur.role_id
     </sql>
     </sql>
-    
+
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
     <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
 		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
 		left join sys_dept d on u.dept_id = d.dept_id
@@ -84,7 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 		${params.dataScope}
 	</select>
 	</select>
-	
+
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	<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
 	    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
 	    from sys_user u
@@ -101,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 		${params.dataScope}
 	</select>
 	</select>
-	
+
 	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	<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
 	    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
 	    from sys_user u
@@ -119,29 +121,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 		${params.dataScope}
 	</select>
 	</select>
-	
+
 	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
 	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 	    <include refid="selectUserVo"/>
 		where u.user_name = #{userName} and u.del_flag = '0'
 		where u.user_name = #{userName} and u.del_flag = '0'
 	</select>
 	</select>
-	
+
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
 		where u.user_id = #{userId}
 	</select>
 	</select>
-	
+
+
+	<!-- wanghao remark 代替身份证号 -->
+	<select id="selectUserByIdCard" parameterType="String" resultMap="SysUserResult">
+		<include refid="selectUserVo"/>
+		where u.idcard = #{idCard} and u.del_flag = '0'  limit 1
+	</select>
+
+
+
 	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
 	<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 user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
 	</select>
 	</select>
-	
+
 	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
 	</select>
 	</select>
-	
+
 	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 	</select>
 	</select>
-	
+
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>
  			<if test="userId != null and userId != 0">user_id,</if>
@@ -156,6 +167,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+ 		    <if test="idCard != null and idCard != ''">idCard,</if>
+ 		    <if test="policeNo != null and policeNo != ''">policeNo,</if>
  			create_time
  			create_time
  		)values(
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -170,10 +183,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+ 		    <if test="idCard != null and idCard != ''">#{idCard},</if>
+ 		    <if test="policeNo != null and policeNo != ''">#{policeNo},</if>
  			sysdate()
  			sysdate()
  		)
  		)
 	</insert>
 	</insert>
-	
+
 	<update id="updateUser" parameterType="SysUser">
 	<update id="updateUser" parameterType="SysUser">
  		update sys_user
  		update sys_user
  		<set>
  		<set>
@@ -190,32 +205,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="remark != null">remark = #{remark},</if>
  			<if test="remark != null">remark = #{remark},</if>
+ 		    <if test="idCard != null  and idCard != ''">idCard = #{idCard},</if>
+ 		    <if test="policeNo != null  and policeNo != ''">policeNo = #{policeNo},</if>
  			update_time = sysdate()
  			update_time = sysdate()
  		</set>
  		</set>
  		where user_id = #{userId}
  		where user_id = #{userId}
 	</update>
 	</update>
-	
+
 	<update id="updateUserStatus" parameterType="SysUser">
 	<update id="updateUserStatus" parameterType="SysUser">
  		update sys_user set status = #{status} where user_id = #{userId}
  		update sys_user set status = #{status} where user_id = #{userId}
 	</update>
 	</update>
-	
+
 	<update id="updateUserAvatar" parameterType="SysUser">
 	<update id="updateUserAvatar" parameterType="SysUser">
  		update sys_user set avatar = #{avatar} where user_name = #{userName}
  		update sys_user set avatar = #{avatar} where user_name = #{userName}
 	</update>
 	</update>
-	
+
 	<update id="resetUserPwd" parameterType="SysUser">
 	<update id="resetUserPwd" parameterType="SysUser">
  		update sys_user set password = #{password} where user_name = #{userName}
  		update sys_user set password = #{password} where user_name = #{userName}
 	</update>
 	</update>
-	
+
 	<delete id="deleteUserById" parameterType="Long">
 	<delete id="deleteUserById" parameterType="Long">
  		update sys_user set del_flag = '2' where user_id = #{userId}
  		update sys_user set del_flag = '2' where user_id = #{userId}
  	</delete>
  	</delete>
- 	
+
  	<delete id="deleteUserByIds" parameterType="Long">
  	<delete id="deleteUserByIds" parameterType="Long">
  		update sys_user set del_flag = '2' where user_id in
  		update sys_user set del_flag = '2' where user_id in
  		<foreach collection="array" item="userId" open="(" separator="," close=")">
  		<foreach collection="array" item="userId" open="(" separator="," close=")">
  			#{userId}
  			#{userId}
-        </foreach> 
+        </foreach>
  	</delete>
  	</delete>
-	
+
 </mapper> 
 </mapper> 

+ 1 - 1
ruoyi-ui/.env.development

@@ -5,7 +5,7 @@ VUE_APP_TITLE = 若依管理系统
 ENV = 'development'
 ENV = 'development'
 
 
 # 若依管理系统/开发环境
 # 若依管理系统/开发环境
-VUE_APP_BASE_API = '/zhzg/dev-api'
+VUE_APP_BASE_API = '/dev-api'
 
 
 # 路由懒加载
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -36,7 +36,7 @@ module.exports = {
     proxy: {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://localhost:8088`,
+        target: `http://localhost:8088/zhzg`,
         changeOrigin: true,
         changeOrigin: true,
         pathRewrite: {
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''
           ['^' + process.env.VUE_APP_BASE_API]: ''