Kaynağa Gözat

权限修改

small 2 yıl önce
ebeveyn
işleme
6ec793db89
35 değiştirilmiş dosya ile 524 ekleme ve 331 silme
  1. 1 21
      sckw-auth/src/main/java/com/sckw/auth/model/vo/res/DeptInfoResVo.java
  2. 1 106
      sckw-auth/src/main/java/com/sckw/auth/model/vo/res/EntInfoResVo.java
  3. 4 4
      sckw-auth/src/main/java/com/sckw/auth/model/vo/res/LoginResVo.java
  4. 66 39
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  5. 24 14
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java
  6. 17 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  7. 6 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ApprovalEnum.java
  8. 0 36
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/UserSystemTypeEnum.java
  9. 8 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java
  10. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginUserInfo.java
  11. 9 2
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsRoleResDto.java
  12. 54 2
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsUserDeptResDto.java
  13. 5 12
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsUserResDto.java
  14. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsEnterpriseController.java
  15. 7 6
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsRoleController.java
  16. 11 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsDeptDao.java
  17. 11 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsEnterpriseDao.java
  18. 2 3
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsRoleDao.java
  19. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java
  20. 5 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsEntCertificate.java
  21. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsRole.java
  22. 5 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsUser.java
  23. 49 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindDeptUserPojo.java
  24. 49 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindEntUserPojo.java
  25. 5 3
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EditRoleReqVo.java
  26. 5 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UserBindRoleReqVo.java
  27. 11 4
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsDeptService.java
  28. 45 29
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  29. 33 24
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java
  30. 11 6
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java
  31. 21 0
      sckw-modules/sckw-system/src/main/resources/mapper/KwsDeptDao.xml
  32. 14 2
      sckw-modules/sckw-system/src/main/resources/mapper/KwsEntCertificateDao.xml
  33. 28 1
      sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml
  34. 1 1
      sckw-modules/sckw-system/src/main/resources/mapper/KwsRoleDao.xml
  35. 12 2
      sckw-modules/sckw-system/src/main/resources/mapper/KwsUserDao.xml

+ 1 - 21
sckw-auth/src/main/java/com/sckw/auth/model/vo/res/DeptInfoResVo.java

@@ -4,7 +4,7 @@ import lombok.Data;
 
 /**
  * @author czh
- * @desc TODO
+ * @desc 机构
  * @date 2023/6/12
  */
 @Data
@@ -15,11 +15,6 @@ public class DeptInfoResVo {
      */
     private long id;
 
-    /**
-     * 机构类型(1系统管理机构、2平台企业机构)
-     */
-    private Integer systemType;
-
     /**
      * 机构名称
      */
@@ -30,19 +25,4 @@ public class DeptInfoResVo {
      */
     private Integer company;
 
-    /**
-     * 上级机构ID,一级机构为0
-     */
-    private Long parentId;
-
-    /**
-     * 所有上级机构id
-     */
-    private String parentIds;
-
-    /**
-     * 机构层级(1更目录、...递增)
-     */
-    private Integer level;
-
 }

+ 1 - 106
sckw-auth/src/main/java/com/sckw/auth/model/vo/res/EntInfoResVo.java

@@ -7,7 +7,7 @@ import java.util.List;
 
 /**
  * @author czh
- * @desc TODO
+ * @desc 企业
  * @date 2023/6/12
  */
 @Data
@@ -18,116 +18,11 @@ public class EntInfoResVo {
      */
     private Long id;
 
-    /**
-     * 企业编号
-     */
-    private String code;
-
     /**
      * 企业名称
      */
     private String firmName;
 
-    /**
-     * 企业联系人
-     */
-    private String contacts;
-
-    /**
-     * 联系电话
-     */
-    private String phone;
-
-    /**
-     * 法人姓名
-     */
-    private String legalName;
-
-    /**
-     * 法人联系电话
-     */
-    private String legalPhone;
-
-    /**
-     * 企业头像
-     */
-    private String head;
-
-    /**
-     * 积分
-     */
-    private Integer integral;
-
-    /**
-     * 账号余额(分)
-     */
-    private Long balance;
-
-    /**
-     * 经验值
-     */
-    private Integer experience;
-
-    /**
-     * 会员等级
-     */
-    private Integer memberLevel;
-
-    /**
-     * 注册时间
-     */
-    private Date regTime;
-
-    /**
-     * 注册来源(app、pc)
-     */
-    private String regSource;
-
-    /**
-     * 组织机构代码
-     */
-    private String orgCode;
-
-    /**
-     * 企业地址code-----区域表id---实际用途?
-     */
-    private Integer cityCode;
-
-    /**
-     * 企业地址-----区域表id---实际用途?
-     */
-    private Integer cityName;
-
-    /**
-     * 企业详细地址
-     */
-    private String detailAddress;
-
-    /**
-     * 企业地址坐标----纬度
-     */
-    private String lat;
-
-    /**
-     * 企业地址坐标----经度
-     */
-    private String lng;
-
-    /**
-     * 资料审批状态(0未审批、1通过、2未通过、3审批中)
-     */
-    private Integer approval;
-
-    /**
-     * 审批时间
-     */
-    private Date approvalTime;
-
-    /**
-     * 专属客户经理(用户ID)
-     */
-    private long manager;
-
     /**
      * 机构信息
      */

+ 4 - 4
sckw-auth/src/main/java/com/sckw/auth/model/vo/res/LoginResVo.java

@@ -70,14 +70,14 @@ public class LoginResVo implements Serializable {
     private Integer isMain;
 
     /**
-     * 企业信息
+     * 设备类型
      */
-    private EntInfoResVo entInfo;
+    private String clientType;
 
     /**
-     * 设备类型
+     * 企业信息
      */
-    private String clientType;
+    private EntInfoResVo entInfo;
 
     /**
      * 角色信息

+ 66 - 39
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -58,14 +58,19 @@ public class AuthServiceImpl implements IAuthService {
         loginResVo.setRoleInfo(kwsRoleResDtos);
         loginResVo.setClientType(reqDto.getClientType());
         if (CollectionUtils.isEmpty(kwsRoleResDtos)) {
-            //角色信息为空,没有认证
+            //用户-角色信息为空,没有认证
             afterProcessor(loginResVo);
             return loginResVo;
         }
 
 
         /*2、登录成功,查询用户机构*/
-        List<Long> deptIds = kwsRoleResDtos.stream().map(KwsRoleResDto::getDeptId).toList();
+        List<KwsUserDeptResDto> kwsUserDeptResDtos = remoteUserService.queryUserDeptByUserId(userId);
+        if (CollectionUtils.isEmpty(kwsUserDeptResDtos)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
+
+        List<Long> deptIds = kwsUserDeptResDtos.stream().map(KwsUserDeptResDto::getDeptId).toList();
         List<KwsDeptResDto> kwsDepts = remoteUserService.queryDeptByIds(deptIds);
         if (CollectionUtils.isEmpty(kwsDepts)) {
             //数据不全,直接返回
@@ -77,13 +82,13 @@ public class AuthServiceImpl implements IAuthService {
         /*3、查企业*/
         //目前一个人只能归属于一个企业,所以这里取第一个就行
         Long entId = kwsDepts.get(0).getEntId();
-        KwsEnterpriseResDto kwsEnterprise = remoteUserService.queryEnterpriseById(entId);
-        if (Objects.isNull(kwsEnterprise)) {
+        KwsEnterpriseResDto kwsEnterpriseResDto = remoteUserService.queryEnterpriseById(entId);
+        if (Objects.isNull(kwsEnterpriseResDto)) {
             //只要查出了机构,这个if其实不会进的,做保险起见还是加上判空
             afterProcessor(loginResVo);
             return loginResVo;
         }
-        BeanUtils.copyProperties(kwsEnterprise, entInfoResVo);
+        BeanUtils.copyProperties(kwsEnterpriseResDto, entInfoResVo);
 
         /*4、生成token,一些信息存redis*/
         afterProcessor(loginResVo);
@@ -99,7 +104,7 @@ public class AuthServiceImpl implements IAuthService {
         } else {
             String key = Global.USER_LOGIN_CAPTCHA + reqDto.getSystemType() + Global.COLON + kwsUser.getAccount();
             String captcha = RedissonUtils.getString(key);
-            if (StringUtils.isBlank(captcha) || StringUtils.isBlank(reqDto.getCaptcha()) || !reqDto.getCaptcha().equals(captcha)){
+            if (StringUtils.isBlank(captcha) || StringUtils.isBlank(reqDto.getCaptcha()) || !reqDto.getCaptcha().equals(captcha)) {
                 throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.CAPCHA_ERROR);
             }
             RedissonUtils.delete(key);
@@ -108,22 +113,18 @@ public class AuthServiceImpl implements IAuthService {
     }
 
     /**
-     * @param  loginResVo 登录的返参
+     * @param loginResVo 登录的返参
      * @desc: 生成token,存redis
      * @author: czh
      * @date: 2023/6/12
      */
     private void afterProcessor(LoginResVo loginResVo) {
         try {
-            Long id = loginResVo.getId();
-            String token = EncryUtil.encry(Global.PRI_KEY, String.valueOf(id));
-            loginResVo.setToken(token);
-            RedissonUtils.putString(Global.getFullUserLoginKey(loginResVo.getSystemType(), loginResVo.getId(), loginResVo.getClientType()), JSON.toJSONString(loginResVo), Global.PC_TOKEN_EXPIRE);
+            //设置token
+            loginResVo.setToken(EncryUtil.encry(Global.PRI_KEY, String.valueOf(loginResVo.getId())));
 
             //异步存redis
-            AsyncFactory.execute(new SaveMenuInfo(loginResVo.getId()));
-            AsyncFactory.execute(new SaveLoginInfo(loginResVo, String.valueOf(loginResVo.getSystemType()), remoteUserService));
-
+            AsyncFactory.execute(new AsyncProcess(loginResVo, remoteUserService));
         } catch (Exception e) {
             throw new SystemException(HttpStatus.GLOBAL_EXCEPTION_CODE, HttpStatus.GLOBAL_EXCEPTION_MESSAGE);
         }
@@ -132,7 +133,7 @@ public class AuthServiceImpl implements IAuthService {
     @Override
     @Transactional(rollbackFor = {})
     public void register(RegisterReqVo reqVo) {
-        /*1、校验验证码*/
+        /*校验验证码*/
         String key = Global.USER_LOGIN_CAPTCHA + reqVo.getPhone() + Global.COLON + reqVo.getSystemType();
         String sms = RedissonUtils.getString(key);
         if (!reqVo.getCaptcha().equals(sms)) {
@@ -146,7 +147,6 @@ public class AuthServiceImpl implements IAuthService {
     }
 
 
-
     @Override
     public void forgetPassword(ForgetPasswordReqVo reqDto) throws SystemException {
         ForgetPasswordReqDto forgetPasswordReqDto = new ForgetPasswordReqDto();
@@ -155,20 +155,56 @@ public class AuthServiceImpl implements IAuthService {
     }
 
 
-    class SaveMenuInfo implements Runnable{
+    static class AsyncProcess implements Runnable {
 
-        private final long id;
+        private final LoginResVo loginResVo;
+
+        private final RemoteUserService remoteUserService;
 
-        public SaveMenuInfo(long id) {
-            this.id = id;
+        public AsyncProcess(LoginResVo loginResVo, RemoteUserService remoteUserService) {
+            this.loginResVo = loginResVo;
+            this.remoteUserService = remoteUserService;
         }
 
         @Override
         public void run() {
+            //存基础信息
+            SaveBaseToCache(loginResVo);
+
+            //存菜单权限
+            SaveToCache(loginResVo);
+
+            //存登录记录信息
+            SaveLoginInfo(loginResVo);
+        }
+
+
+        /**
+         * @param loginResVo 返参
+         * @desc: 存基础信息
+         * @author: czh
+         * @date: 2023/6/28
+         */
+        private void SaveBaseToCache(LoginResVo loginResVo) {
+            //存用户登录信息
+            RedissonUtils.putString(Global.getFullUserLoginKey(loginResVo.getSystemType(), loginResVo.getId(), loginResVo.getClientType()), JSON.toJSONString(loginResVo), Global.PC_TOKEN_EXPIRE);
+
+            //单独存用户企业
+            RedissonUtils.putString(Global.getFullUserEntKey(loginResVo.getSystemType(), loginResVo.getId()), JSON.toJSONString(loginResVo.getEntInfo()), Global.PC_TOKEN_EXPIRE);
+        }
+
+        /**
+         * @param loginResVo 登录返参
+         * @desc: 存缓存
+         * @author: czh
+         * @date: 2023/6/28
+         */
+        private void SaveToCache(LoginResVo loginResVo) {
             //存权限菜单
+            long id = loginResVo.getId();
             List<UserAccessMenuInfoResDto> userAccessMenuInfo = remoteUserService.queryUserAccessMenu(id);
             if (CollectionUtils.isEmpty(userAccessMenuInfo)) {
-                RedissonUtils.delete(Global.REDIS_SYS_MENU_PREFIX + id);
+                RedissonUtils.delete(Global.REDIS_SYS_MENU_PREFIX + loginResVo.getSystemType() + Global.COLON + id);
                 log.error("未查询到用户{}的菜单权限", id);
                 return;
             }
@@ -182,24 +218,14 @@ public class AuthServiceImpl implements IAuthService {
             }
             RedissonUtils.putSet(Global.REDIS_SYS_MENU_PREFIX + id, menus);
         }
-    }
-
-    class SaveLoginInfo implements Runnable {
-
-        private final LoginResVo loginResVo;
-
-        private final String clientType;
-
-        private final RemoteUserService remoteUserService;
-
-        public SaveLoginInfo(LoginResVo loginResVo, String clientType, RemoteUserService remoteUserService) {
-            this.loginResVo = loginResVo;
-            this.clientType = clientType;
-            this.remoteUserService = remoteUserService;
-        }
 
-        @Override
-        public void run() {
+        /**
+         * @param loginResVo 登录返参
+         * @desc: 存登录记录信息
+         * @author: czh
+         * @date: 2023/6/28
+         */
+        private void SaveLoginInfo(LoginResVo loginResVo) {
             long userId = loginResVo.getId();
             UserLoginReqDto currentDayLogin = remoteUserService.currentDayLogin(userId);
             UserLoginReqDto userLoginReqDto = new UserLoginReqDto();
@@ -212,9 +238,10 @@ public class AuthServiceImpl implements IAuthService {
             userLoginReqDto.setFirst(Objects.isNull(currentDayLogin) ? Global.YES : Global.NO);
             userLoginReqDto.setLock(Global.NO);
             userLoginReqDto.setType(Global.NO);
-            userLoginReqDto.setSource(clientType);
+            userLoginReqDto.setSource(loginResVo.getClientType());
             remoteUserService.saveUserLogin(userLoginReqDto);
         }
+
     }
 
 }

+ 24 - 14
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java

@@ -1,5 +1,6 @@
 package com.sckw.core.filter;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.web.config.CustomConfig;
 import com.sckw.core.exception.SystemException;
@@ -52,13 +53,14 @@ public class LoginFilter implements Filter {
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
         HttpServletRequest request = (HttpServletRequest) servletRequest;
         String requestUri = request.getRequestURI();
-        /*1、登录请求直接放行*/
+        /*1、不用token的接口直接放行*/
         if (EXCLUDEPATH.contains(requestUri)) {
             filterChain.doFilter(servletRequest, servletResponse);
             return;
         }
 
-        /*2、非登录接口,校验token有效性*/
+        /*2、校验token有效性*/
+        //token解析后为用户id
         String token = request.getHeader(RequestConstant.TOKEN);
         if (StringUtils.isBlank(token)) {
             throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.TOKEN_MISSING);
@@ -79,26 +81,34 @@ public class LoginFilter implements Filter {
             throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.TOKEN_INVAILD);
         }
 
+
+        //如果企业资质有效期已过,企业普通用户和管理员均不能访问
+
+        //有效期没有过,管理员不限制权限,普通用户做菜单权限的限制
+
         /*3、将redis里的用户信息存入内存中,避免业务操作多次从redis获取值*/
         LoginUserInfo loginUserInfo = JSONObject.parseObject(object.toString(), LoginUserInfo.class);
-        LoginUserHolder.set(loginUserInfo);
-        //管理员不限制权限
-        if (loginUserInfo.getIsMain() == Global.YES){
-            filterChain.doFilter(servletRequest, servletResponse);
-            LoginUserHolder.remove();
-            return;
+        //管理员不限制权限,按钮有权限才放行
+        if (loginUserInfo.getIsMain() != Global.YES && !checkMenu(systemType + Global.COLON + key, requestUri)) {
+            throw new SystemException(HttpStatus.AUTHORITY_NO_CODE, HttpStatus.ACCESS_FIAL);
         }
 
-        //按钮有权限才放行
-        checkMenu(key, requestUri);
+        RedissonUtils.putString(Global.getFullUserLoginKey(Integer.parseInt(systemType), Long.parseLong(key), clientType), JSON.toJSONString(object), Global.PC_TOKEN_EXPIRE);
+        LoginUserHolder.set(loginUserInfo);
         filterChain.doFilter(servletRequest, servletResponse);
         LoginUserHolder.remove();
     }
 
-    private void checkMenu(String key, String url) {
-        if(!RedissonUtils.contains(Global.REDIS_SYS_MENU_PREFIX + key, url)) {
-            throw new SystemException(HttpStatus.AUTHORITY_NO_CODE, HttpStatus.ACCESS_FIAL);
-        }
+    /**
+     * @param key 用户菜单权限key  url 当前请求url
+     * @return boolean
+     * @desc: 校验url权限
+     * @author: czh
+     * @date: 2023/6/28
+     */
+    private boolean checkMenu(String key, String url) {
+        return RedissonUtils.contains(Global.REDIS_SYS_MENU_PREFIX + key, url);
     }
 
+
 }

+ 17 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -85,7 +85,7 @@ public class Global {
     /**redis企业信息前缀*/
     public static final String REDIS_ENTERPRISE_PREFIX = "enterpriseInfo:";
 
-    /**redis用户信息前缀*/
+    /**redis用户菜单信息前缀*/
     public static final String REDIS_SYS_MENU_PREFIX = "sysMenu:";
 
     /**redis用户车辆gps信息*/
@@ -218,15 +218,28 @@ public class Global {
 
     /**未读*/
     public static final Integer UN_READ = 0;
-    /*管理员角色名*/
+    /**管理员角色名*/
     public static final String MANAGE_NAME = "系统管理员";
 
+    /**管理员机构名*/
+    public static final String MANAGE_DEPT_NAME = "系统管理员部门";
+
     /**已读*/
     public static final Integer READ = 1;
 
-    /**完的用户登录信息key*/
-    public static String getFullUserLoginKey (Integer systemType, Long userId, String clientType) {
+    /**完的用户登录信息key*/
+    public static String getFullUserLoginKey(Integer systemType, Long userId, String clientType) {
         return REDIS_USER_PREFIX + systemType + COLON + userId + COLON + clientType;
     }
 
+    /**完整的用户企业信息key*/
+    public static String getFullUserEntKey(Integer systemType, Long userId) {
+        return REDIS_ENTERPRISE_PREFIX + systemType + COLON + userId;
+    }
+
+    /**完整的用户菜单信息key*/
+    public static String getFullUserMenuKey(Integer systemType, Long userId) {
+        return REDIS_SYS_MENU_PREFIX + systemType + COLON + userId;
+    }
+
 }

+ 6 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ApprovalEnum.java

@@ -17,7 +17,9 @@ public enum ApprovalEnum {
     //未通过
     PASS(2, "未通过"),
     //审批中
-    PROCESS(3, "审批中");
+    PROCESS(3, "审批中"),
+    //更新中,待审批
+    REFRESH(4, "更新中");
 
     private final int code;
 
@@ -29,9 +31,9 @@ public enum ApprovalEnum {
     }
 
     public static ApprovalEnum getName(int code){
-        for (ApprovalEnum aprovalEnum : values()) {
-            if (aprovalEnum.getCode() == code) {
-                return aprovalEnum;
+        for (ApprovalEnum approvalEnum : values()) {
+            if (approvalEnum.getCode() == code) {
+                return approvalEnum;
             }
         }
         return null;

+ 0 - 36
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/UserSystemTypeEnum.java

@@ -1,36 +0,0 @@
-package com.sckw.core.model.enums;
-
-import lombok.Getter;
-
-/**
- * @author czh
- * @desc 用户系统类型枚举
- * @date 2023/6/15
- */
-@Getter
-public enum UserSystemTypeEnum {
-
-    //运营端
-    OPERATE(1, "运营端"),
-    //企业开户
-    ENTERPRISE(2, "企业开户");
-
-    private final int code;
-
-    private final String name;
-
-    UserSystemTypeEnum(int code, String name){
-        this.code = code;
-        this.name = name;
-    }
-
-    public static UserSystemTypeEnum getName(int code){
-        for (UserSystemTypeEnum userSystemTypeEnum : values()) {
-            if (userSystemTypeEnum.getCode() == code) {
-                return userSystemTypeEnum;
-            }
-        }
-        return null;
-    }
-
-}

+ 8 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java

@@ -1,10 +1,13 @@
 package com.sckw.core.utils;
 
+import com.alibaba.fastjson2.JSON;
+
 import java.security.MessageDigest;
 import java.util.UUID;
 
 /**
  * 密码工具类
+ *
  * @author Louis
  * @date Sep 1, 2018
  */
@@ -14,7 +17,8 @@ public class PasswordUtils {
 
     /**
      * 匹配密码
-     * @param salt 盐
+     *
+     * @param salt    盐
      * @param rawPass 明文
      * @param encPass 密文
      * @return
@@ -25,6 +29,7 @@ public class PasswordUtils {
 
     /**
      * 明文密码加密
+     *
      * @param rawPass 明文
      * @param salt
      * @return
@@ -108,7 +113,8 @@ public class PasswordUtils {
     }
 
     public static void main(String[] args) {
-        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("123"));
+
+        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("18482106067"));
         String md5 = PasswordUtils.md5("18482106067");
         System.out.println(password);
         System.out.println(md5);

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginUserInfo.java

@@ -30,7 +30,7 @@ public class LoginUserInfo {
      */
     private String phone;
     /**
-     *是否主账号(0是/1否)
+     * 是否主账号(0是/1否)
      */
     private int isMain;
     /**

+ 9 - 2
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsRoleResDto.java

@@ -16,12 +16,19 @@ public class KwsRoleResDto implements Serializable {
     @Serial
     private static final long serialVersionUID = 8340324543879685050L;
 
+    /**
+     * 角色id
+     */
     private long id;
 
+    /**
+     * 角色名
+     */
     private String name;
 
-    private long deptId;
-
+    /**
+     * 备注
+     */
     private String remark;
 
 }

+ 54 - 2
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsUserDeptResDto.java

@@ -1,12 +1,22 @@
 package com.sckw.system.api.model.dto.res;
 
-import com.sckw.system.api.model.dto.BaseModelResDto;
 import lombok.Data;
 
+import java.io.Serial;
 import java.io.Serializable;
+import java.util.Date;
 
+/**
+ * @desc: 用户机构
+ * @author: czh
+ * @date: 2023/6/28
+ */
 @Data
-public class KwsUserDeptResDto extends BaseModelResDto implements Serializable {
+public class KwsUserDeptResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7303338097472303073L;
+
     /**
      * 用户id
      */
@@ -17,4 +27,46 @@ public class KwsUserDeptResDto extends BaseModelResDto implements Serializable {
      */
     private Long deptId;
 
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态:0正常/1锁定
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 删除标识(0正常/-1删除)
+     */
+    private Integer delFlag;
+
+
 }

+ 5 - 12
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsUserResDto.java

@@ -6,6 +6,11 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
 
+/**
+ * @desc: 用户返参
+ * @author: czh
+ * @date: 2023/6/28
+ */
 @Data
 public class KwsUserResDto implements Serializable {
 
@@ -76,15 +81,9 @@ public class KwsUserResDto implements Serializable {
      */
     private Long createBy;
 
-    /**
-     * 创建人姓名
-     */
-//	private String createByName;
-
     /**
      * 创建时间
      */
-    //@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
@@ -92,15 +91,9 @@ public class KwsUserResDto implements Serializable {
      */
     private Long updateBy;
 
-    /**
-     * 跟新人姓名
-     */
-//	private String updateByName;
-
     /**
      * 更新时间
      */
-    //@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     /**

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsEnterpriseController.java

@@ -114,7 +114,7 @@ public class KwsEnterpriseController {
     /**
      * @param ids {ids:主键ID(多个以逗号隔开)}
      * @return HttpResult
-     * @description 更新
+     * @description 删除
      * @author zk
      * @date 2023/06/02
      **/

+ 7 - 6
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsRoleController.java

@@ -6,7 +6,7 @@ import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.model.KwsRole;
-import com.sckw.system.model.vo.req.AddRoleReqVo;
+import com.sckw.system.model.vo.req.EditRoleReqVo;
 import com.sckw.system.model.vo.req.UserBindRoleReqVo;
 import com.sckw.system.service.KwsRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,28 +56,29 @@ public class KwsRoleController {
     }
 
     /**
-     * @param params {name:角色名称}
+     * @param reqVo {name:角色名称}
      * @return
      * @description 新增
      * @author zk
      * @date 2023/5/30
      **/
     @PostMapping("/add")
-    public HttpResult add(@RequestBody AddRoleReqVo reqVo) throws Exception {
+    public HttpResult add(@RequestBody EditRoleReqVo reqVo) throws Exception {
         kwsRoleService.add(reqVo);
         return HttpResult.ok();
     }
 
     /**
-     * @param params {id:主键ID、name:角色名称}
+     * @param reqVo {id:主键ID、name:角色名称}
      * @return
      * @description 更新
      * @author zk
      * @date 2023/5/30
      **/
     @PostMapping("/update")
-    public HttpResult update(@RequestBody KwsRole params) throws Exception {
-        return kwsRoleService.update(params);
+    public HttpResult update(@RequestBody EditRoleReqVo reqVo) throws Exception {
+        kwsRoleService.update(reqVo);
+        return HttpResult.ok();
     }
 
     /**

+ 11 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsDeptDao.java

@@ -1,6 +1,7 @@
 package com.sckw.system.dao;
 
 import com.sckw.system.model.KwsDept;
+import com.sckw.system.model.pojo.FindDeptUserPojo;
 import com.sckw.system.model.vo.res.KwsDeptResVo;
 import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
@@ -57,4 +58,14 @@ public interface KwsDeptDao {
      * @throws Exception
      */
     List<KwsDeptResVo> findList(KwsDept params);
+
+    /**
+     * @param list 机构id集合
+     * @return FindDeptUserPojo
+     * @desc: 根据机构id查用户
+     * @author: czh
+     * @date: 2023/6/28
+     */
+    List<FindDeptUserPojo> findDeptUserByDeptIds(List<Long> list);
+
 }

+ 11 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsEnterpriseDao.java

@@ -2,6 +2,7 @@ package com.sckw.system.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.system.model.KwsEnterprise;
+import com.sckw.system.model.pojo.FindEntUserPojo;
 import com.sckw.system.model.vo.req.EntFindPageReqVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -76,4 +77,14 @@ public interface KwsEnterpriseDao {
      * @date: 2023/6/26
      */
     int approval(KwsEnterprise kwsEnterprise);
+
+    /**
+     * @param  list 企业ids
+     * @return FindEntUserPojo
+     * @desc: 根据企业id查用户
+     * @author: czh
+     * @date: 2023/6/28
+     */
+    List<FindEntUserPojo> findUserByEntIds(List<Long> list);
+
 }

+ 2 - 3
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsRoleDao.java

@@ -1,6 +1,5 @@
 package com.sckw.system.dao;
 
-import com.sckw.system.api.model.dto.res.KwsRoleResDto;
 import com.sckw.system.model.KwsRole;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -63,12 +62,12 @@ public interface KwsRoleDao {
     List<KwsRole> selectBatchByKeys(@Param(value = "list") List<Long> id);
 
     /**
-     * @param list 机构id集合
+     * @param list 机构/企业id集合
      * @return KwsRole
      * @desc: 根据机构id批量查
      * @author: czh
      * @date: 2023/6/14
      */
-    List<KwsRole> selectBatchByDeptIds(List<Long> list);
+    List<KwsRole> selectBatchByUnitIds(List<Long> list);
 
 }

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java

@@ -28,7 +28,7 @@ import java.util.Objects;
 
 /**
  * @author czh
- * @desc dobbo远程接口
+ * @desc 远程接口
  * @date 2023/6/12
  */
 

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsEntCertificate.java

@@ -39,4 +39,9 @@ public class KwsEntCertificate extends BaseModel {
      */
     private String certificateRevolt;
 
+    /**
+     * 有效期
+     */
+    private Date expireTime;
+
 }

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsRole.java

@@ -16,7 +16,7 @@ public class KwsRole extends BaseModel {
     private String name;
 
     /**
-     * 机构/
+     * 当前单位id,可以是机构也可以是企业,目前产品设计是企业
      */
     private Long deptId;
 

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsUser.java

@@ -56,4 +56,9 @@ public class KwsUser extends BaseModel {
      */
     private Integer isMain;
 
+    /**
+     * 盐
+     */
+    private String salt;
+
 }

+ 49 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindDeptUserPojo.java

@@ -0,0 +1,49 @@
+package com.sckw.system.model.pojo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 机构用户
+ * @date 2023/6/28
+ */
+@Data
+public class FindDeptUserPojo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 827327021560216442L;
+
+    /**
+     * 企业id
+     */
+    private Long deptId;
+
+    /**
+     * 企业名
+     */
+    private String deptName;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户账号
+     */
+    private String account;
+
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+}

+ 49 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindEntUserPojo.java

@@ -0,0 +1,49 @@
+package com.sckw.system.model.pojo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 企业用户
+ * @date 2023/6/28
+ */
+@Data
+public class FindEntUserPojo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -4725426630328765633L;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名
+     */
+    private String entName;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户账号
+     */
+    private String account;
+
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+}

+ 5 - 3
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/AddRoleReqVo.java → sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EditRoleReqVo.java

@@ -11,20 +11,22 @@ import java.io.Serializable;
  * @date 2023/6/15
  */
 @Data
-public class AddRoleReqVo implements Serializable {
+public class EditRoleReqVo implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1977281964220931297L;
 
+    private Long id;
+
     /**
      * 角色名称
      */
     private String name;
 
     /**
-     * 当前机构id
+     * 当前单位id,可以是机构也可以是企业,目前产品设计是企业
      */
-    private Long currentDeptId;
+    private Long currentUnitId;
 
     /**
      * 功能权限配置 菜单ID,多个用","隔开

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UserBindRoleReqVo.java

@@ -26,6 +26,11 @@ public class UserBindRoleReqVo implements Serializable {
      */
     private String roleIds;
 
+    /**
+     * 系统类型
+     */
+    private Integer systemType;
+
     /**
      * 备注
      */

+ 11 - 4
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsDeptService.java

@@ -13,6 +13,7 @@ import com.sckw.system.dao.KwsDeptDao;
 import com.sckw.system.dao.KwsUserDeptDao;
 import com.sckw.system.model.KwsDept;
 import com.sckw.system.model.KwsUserDept;
+import com.sckw.system.model.pojo.FindDeptUserPojo;
 import com.sckw.system.model.vo.res.KwsDeptResVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -65,11 +66,20 @@ public class KwsDeptService {
      * @param ids
      */
     public void deleteByKey(String ids) throws Exception {
-        /*1.删除机构*/
         List<Long> list = Arrays.stream(ids.split(",")).map(Long::parseLong).toList();
+        List<FindDeptUserPojo> findDeptUserPojoList = kwsDeptDao.findDeptUserByDeptIds(list);
+        if (!CollectionUtils.isEmpty(findDeptUserPojoList)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
+        }
         deleteDept(kwsDeptDao.selectByKeys(list));
     }
 
+    /**
+     * @param kwsDepts 机构实体类集合
+     * @desc: 删除机构
+     * @author: czh
+     * @date: 2023/6/28
+     */
     public void deleteDept(List<KwsDept> kwsDepts) throws Exception {
         if (CollectionUtils.isEmpty(kwsDepts)) {
             return;
@@ -81,9 +91,6 @@ public class KwsDeptService {
                 throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
             }
         }
-
-        /*2、删除岗位角色*/
-        kwsRoleService.deleteByDeptIds(kwsDepts.stream().map(KwsDept::getId).toList());
     }
 
     /**

+ 45 - 29
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -23,6 +23,7 @@ import com.sckw.system.api.model.dto.req.RegisterReqDto;
 import com.sckw.system.api.model.dto.res.RegisterResDto;
 import com.sckw.system.dao.*;
 import com.sckw.system.model.*;
+import com.sckw.system.model.pojo.FindEntUserPojo;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.CertificateResVo;
 import com.sckw.system.model.vo.res.IdResVo;
@@ -89,13 +90,19 @@ public class KwsEnterpriseService {
      * @date: 2023/6/19
      */
     public void deleteByKey(String ids) throws Exception {
-        /*1、删除企业*/
+        //校验,有员工还在企业下则不能删除
         List<Long> list = Arrays.stream(ids.split(",")).map(Long::parseLong).toList();
         List<KwsEnterprise> kwsEnterprises = kwsEnterpriseDao.selectByKeys(list);
         if (CollectionUtils.isEmpty(kwsEnterprises)) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
         }
 
+        List<FindEntUserPojo> findEntUserPojos = kwsEnterpriseDao.findUserByEntIds(list);
+        if (!CollectionUtils.isEmpty(findEntUserPojos)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
+        }
+
+        /*1、删除企业*/
         for (KwsEnterprise kwsEnterprise : kwsEnterprises) {
             kwsEnterprise.setDelFlag(Global.YES);
             if (kwsEnterpriseDao.update(kwsEnterprise) <= 0) {
@@ -105,6 +112,9 @@ public class KwsEnterpriseService {
 
         /*2、删除机构*/
         kwsDeptService.deleteDept(kwsDeptDao.selectByEntIdList(list));
+
+        /*2、删除角色*/
+        kwsRoleService.deleteByDeptIds(list);
     }
 
     /**
@@ -338,6 +348,7 @@ public class KwsEnterpriseService {
         /*更新企业信息主表审批状态*/
         Long entId = kwsEntCheckTrack.getEntId();
         KwsEnterprise kwsEnterprise = checkKwsEnterpriseById(entId);
+        Integer currentApproval = kwsEnterprise.getApproval();
         kwsEnterprise.setApproval(kwsEntCheckTrack.getStatus());
         if (kwsEnterpriseDao.approval(kwsEnterprise) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
@@ -348,35 +359,40 @@ public class KwsEnterpriseService {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
-        /*审批通过,构建管理员角色及权限*/
-        /*1、新增管理员机构*/
-        KwsDept kwsDept = new KwsDept();
-        long deptId = new IdWorker(1L).nextId();
-        kwsDept.setEntId(entId);
-        kwsDept.setName(Global.MANAGE_NAME);
-        kwsDept.setSystemType(SystemTypeEnum.COMPANY.getCode());
-        kwsDept.setCompany(Global.NO);
-        kwsDept.setId(deptId);
-        kwsDeptService.add(kwsDept);
-
-        /*2、新增管理员角色*/
-        AddRoleReqVo addRoleReqVo = new AddRoleReqVo();
-        List<KwsMenu> list = kwsMenuService.selectAll();
-        if (CollectionUtils.isEmpty(list)) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
-        }
-        addRoleReqVo.setName(Global.MANAGE_NAME);
-        addRoleReqVo.setCurrentDeptId(deptId);
-        addRoleReqVo.setMenuIds(String.join(",", list.stream().map(KwsMenu::getId).map(String::valueOf).toList()));
-        addRoleReqVo.setVisiblePersonal(false);
-        IdResVo idResVo = kwsRoleService.add(addRoleReqVo);
-
-        /*3、绑定角色等*/
-        KwsUser userByAccount = kwsUserService.getUserByAccount(kwsEnterprise.getPhone(), SystemTypeEnum.COMPANY.getCode());
-        if (Objects.isNull(userByAccount)) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        /*第一次审批通过(非更新资质审批通过),构建机构角色等*/
+        if (ApprovalEnum.OK.getCode() == kwsEntCheckTrack.getStatus() && ApprovalEnum.PROCESS.getCode() == currentApproval) {
+            /*审批通过,构建管理员角色及权限*/
+            /*1、新增管理员机构*/
+            KwsDept kwsDept = new KwsDept();
+            Integer systemType = SystemTypeEnum.COMPANY.getCode();
+            long deptId = new IdWorker(1L).nextId();
+            kwsDept.setEntId(entId);
+            kwsDept.setName(Global.MANAGE_DEPT_NAME);
+            kwsDept.setSystemType(systemType);
+            kwsDept.setCompany(Global.NO);
+            kwsDept.setId(deptId);
+            kwsDeptService.add(kwsDept);
+
+            /*2、新增管理员角色*/
+            EditRoleReqVo editRoleReqVo = new EditRoleReqVo();
+            List<KwsMenu> list = kwsMenuService.selectAll();
+            if (CollectionUtils.isEmpty(list)) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
+            editRoleReqVo.setName(Global.MANAGE_NAME);
+            editRoleReqVo.setCurrentUnitId(entId);
+            editRoleReqVo.setMenuIds(String.join(",", list.stream().map(KwsMenu::getId).map(String::valueOf).toList()));
+            editRoleReqVo.setVisiblePersonal(false);
+            IdResVo idResVo = kwsRoleService.add(editRoleReqVo);
+
+            /*3、绑定角色等*/
+            KwsUser userByAccount = kwsUserService.getUserByAccount(kwsEnterprise.getPhone(), SystemTypeEnum.COMPANY.getCode());
+            if (Objects.isNull(userByAccount)) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+            kwsUserService.fillUserRole(String.valueOf(idResVo.getId()),userByAccount.getId(), systemType);
         }
-        kwsUserService.fillUserRole(String.valueOf(idResVo.getId()),userByAccount.getId());
+
     }
 
     private KwsEnterprise checkKwsEnterpriseById(long id) throws SystemException {

+ 33 - 24
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java

@@ -14,11 +14,10 @@ import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.dao.*;
 import com.sckw.system.model.*;
 import com.sckw.system.model.pojo.FindMenuTreePojo;
-import com.sckw.system.model.vo.req.AddRoleReqVo;
+import com.sckw.system.model.vo.req.EditRoleReqVo;
 import com.sckw.system.model.vo.req.RoleBindMeunReqVo;
 import com.sckw.system.model.vo.req.UserBindRoleReqVo;
 import com.sckw.system.model.vo.res.IdResVo;
-import com.sckw.system.model.vo.res.KwsDeptResVo;
 import com.sckw.system.model.vo.res.KwsMenuResVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -77,7 +76,7 @@ public class KwsRoleService {
      * @date: 2023/6/15
      */
     @Transactional(rollbackFor = Exception.class)
-    public IdResVo add(AddRoleReqVo reqVo) {
+    public IdResVo add(EditRoleReqVo reqVo) {
         IdResVo idResVo = new IdResVo();
 
         /*1、存角色信息*/
@@ -86,22 +85,16 @@ public class KwsRoleService {
         idResVo.setId(roleId);
         kwsRole.setId(roleId);
         kwsRole.setName(reqVo.getName());
-        kwsRole.setDeptId(reqVo.getCurrentDeptId());
+        kwsRole.setDeptId(reqVo.getCurrentUnitId());
         kwsRole.setRemark(reqVo.getRemark());
         if (kwsRoleDao.insert(kwsRole) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
         /*2、绑定菜单功能*/
-        KwsDept kwsDept = new KwsDept();
-        kwsDept.setId(reqVo.getCurrentDeptId());
-        List<KwsDeptResVo> list = kwsDeptDao.findList(kwsDept);
-        if (CollectionUtils.isEmpty(list)) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
-        }
         RoleBindMeunReqVo roleBindMeunReqVo = new RoleBindMeunReqVo();
         roleBindMeunReqVo.setRoleId(roleId);
-        roleBindMeunReqVo.setEntId(list.get(0).getEntId());
+        roleBindMeunReqVo.setEntId(reqVo.getCurrentUnitId());
         roleBindMeunReqVo.setMenuIds(reqVo.getMenuIds());
         kwsMenuService.roleBindMeun(roleBindMeunReqVo);
 
@@ -140,13 +133,13 @@ public class KwsRoleService {
     }
 
     /**
-     * @param deptIdList 机构id集合
+     * @param unitIdList 企业/机构id集合
      * @desc: 根据机构删除角色信息
      * @author: czh
      * @date: 2023/6/25
      */
-    public void deleteByDeptIds(List<Long> deptIdList) throws Exception {
-        List<KwsRole> kwsRoles = kwsRoleDao.selectBatchByDeptIds(deptIdList);
+    public void deleteByDeptIds(List<Long> unitIdList) throws Exception {
+        List<KwsRole> kwsRoles = kwsRoleDao.selectBatchByUnitIds(unitIdList);
         if (CollectionUtils.isEmpty(kwsRoles)) {
             return;
         }
@@ -167,8 +160,16 @@ public class KwsRoleService {
         deleteRole(kwsRoles);
     }
 
-    private void deleteRole(List<KwsRole> kwsRoles) throws Exception {
-        /*2、删角色*/
+    /**
+     * @param kwsRoles 角色实体类集合
+     * @return
+     * @desc: TODO
+     * @author: czh
+     * @date: 2023/6/28
+     */
+    @Transactional(rollbackFor = {})
+    public void deleteRole(List<KwsRole> kwsRoles) throws Exception {
+        /*1、删角色*/
         for (KwsRole kwsRole : kwsRoles) {
             kwsRole.setDelFlag(Global.YES);
             if (kwsRoleDao.update(kwsRole) <= 0) {
@@ -176,7 +177,7 @@ public class KwsRoleService {
             }
         }
 
-        /*3、删用户角色关系*/
+        /*2、删用户角色关系*/
         List<Long> idList = kwsRoles.stream().map(KwsRole::getId).toList();
         List<KwsUserRole> kwsUserRoleList = kwsUserRoleDao.findAllByRoleIds(idList);
         if (CollectionUtils.isEmpty(kwsUserRoleList)) {
@@ -190,7 +191,7 @@ public class KwsRoleService {
             }
         }
 
-        /*4、删除角色菜单关系*/
+        /*3、删除角色菜单关系*/
         kwsMenuService.deleteMenuRightsByRoleIds(idList);
 
         //让涉及到的用户重新登录获取菜单权限
@@ -202,12 +203,20 @@ public class KwsRoleService {
 
     /**
      * 更新记录
-     * @param params KwsRole
-     * @return HttpResult
      */
-    public HttpResult update(KwsRole params) throws Exception {
-        int count = kwsRoleDao.update(params);
-        return count > 0 ? HttpResult.ok("更新成功!") : HttpResult.error();
+    @Transactional(rollbackFor = {})
+    public void update(EditRoleReqVo reqVo) throws Exception {
+
+        KwsRole kwsRole = kwsRoleDao.selectByKey(reqVo.getId());
+        if (Objects.isNull(kwsRole)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
+
+        //删除以前的角色
+        deleteRole(Collections.singletonList(kwsRole));
+
+        //新增
+        add(reqVo);
     }
 
     /**
@@ -317,7 +326,7 @@ public class KwsRoleService {
                 menus.addAll(Arrays.asList(kwsMenuResVo.getLinks().split(",")));
             }
         }
-        RedissonUtils.putSet(Global.REDIS_SYS_MENU_PREFIX + userId, menus);
+        RedissonUtils.putSet(Global.getFullUserMenuKey(reqVo.getSystemType() , userId), menus);
         RedissonUtils.deleteBactch(Global.REDIS_USER_PREFIX + userId + "*");
 
     }

+ 11 - 6
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java

@@ -75,7 +75,7 @@ public class KwsUserService {
         }
 
         /*4、填充用户角色、用户机构关系*/
-        fillUserRole(reqVo.getRoleIds(), userId);
+        fillUserRole(reqVo.getRoleIds(), userId, reqVo.getSystemType());
 
     }
 
@@ -83,9 +83,7 @@ public class KwsUserService {
     public RegisterResDto register(RegisterReqDto reqDto) throws SystemException {
         /*存用户表、企业表,暂时不处理角色关系,需要认证*/
         KwsUser kwsUser = new KwsUser();
-        RegisterResDto registerResDto = new RegisterResDto();
         long userId = new IdWorker(1).nextId();
-        registerResDto.setUserId(userId);
         kwsUser.setSystemType(reqDto.getSystemType());
         kwsUser.setAccount(reqDto.getPhone());
         kwsUser.setPassword(reqDto.getPassword());
@@ -100,6 +98,9 @@ public class KwsUserService {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
+        //组装返参
+        RegisterResDto registerResDto = new RegisterResDto();
+        registerResDto.setUserId(userId);
 
         /*存企业机构等*/
         //目前注册接口只有企业管理员进来
@@ -117,26 +118,30 @@ public class KwsUserService {
                 throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
             }
         }
+
         return registerResDto;
     }
 
 
-    public void fillUserRole(String roleIds, long userId) {
+    public void fillUserRole(String roleIds, long userId, Integer systemType) {
         UserBindRoleReqVo userBindRoleReqVo = new UserBindRoleReqVo();
         userBindRoleReqVo.setUserId(userId);
         userBindRoleReqVo.setRoleIds(roleIds);
+        userBindRoleReqVo.setSystemType(systemType);
         kwsRoleService.userBindRole(userBindRoleReqVo);
     }
 
     private void fillPassword(KwsUser kwsUser) {
         //密码为空时,以登录名作为密码
+        String password;
         if (StringUtils.isBlank(kwsUser.getPassword())) {
-            String password = PasswordUtils.entryptPassword(PasswordUtils.md5(kwsUser.getAccount()));
+            password = PasswordUtils.entryptPassword(PasswordUtils.md5(kwsUser.getAccount()));
             kwsUser.setPassword(password);
         } else {
-            String password = PasswordUtils.entryptPassword(kwsUser.getPassword());
+            password = PasswordUtils.entryptPassword(kwsUser.getPassword());
             kwsUser.setPassword(password);
         }
+        kwsUser.setSalt(password.substring(0, 16));
     }
 
     /**

+ 21 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsDeptDao.xml

@@ -208,6 +208,7 @@
     </if>
     ORDER BY level, sort
   </select>
+
   <select id="selectByKeys" resultType="com.sckw.system.model.KwsDept">
     select
     <include refid="Base_Column_List" />
@@ -218,6 +219,7 @@
       #{item}
     </foreach>
   </select>
+
   <select id="selectByEntIdList" resultType="com.sckw.system.model.KwsDept">
     select
     <include refid="Base_Column_List" />
@@ -228,4 +230,23 @@
       #{item}
     </foreach>
   </select>
+
+    <select id="findDeptUserByDeptIds" resultType="com.sckw.system.model.pojo.FindDeptUserPojo">
+      select distinct b.id deptId,
+             b.name deptName,
+             d.id userId,
+             d.name,
+             d.account,
+             d.phone
+        from kws_dept b
+        left join kws_user_dept c on b.id = c.dept_id
+        left join kws_user d on c.user_id = d.id
+       where b.del_flag = 0
+         and c.del_flag = 0
+         and d.del_flag = 0
+         and b.id in
+         <foreach collection="list" separator="," open="(" close=")" item="item">
+           #{item}
+         </foreach>
+    </select>
 </mapper>

+ 14 - 2
sckw-modules/sckw-system/src/main/resources/mapper/KwsEntCertificateDao.xml

@@ -8,6 +8,7 @@
     <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="certificate_mian" jdbcType="VARCHAR" property="certificateMian" />
     <result column="certificate_revolt" jdbcType="VARCHAR" property="certificateRevolt" />
+    <result column="expire_time" jdbcType="TIMESTAMP" property="expireTime" />
     <result column="remark" jdbcType="VARCHAR" property="remark" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="create_by" jdbcType="BIGINT" property="createBy" />
@@ -19,7 +20,7 @@
 
   <sql id="Base_Column_List">
     id, ent_id, type, code, certificate_mian, certificate_revolt, remark, status, create_by, 
-    create_time, update_by, update_time, del_flag
+    create_time, update_by, update_time, del_flag, expire_time
   </sql>
 
   <select id="selectByKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -74,6 +75,9 @@
       <if test="delFlag != null">
         del_flag,
       </if>
+      <if test="expireTime != null">
+        expire_time,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -115,6 +119,9 @@
       <if test="delFlag != null">
         #{delFlag,jdbcType=INTEGER},
       </if>
+      <if test="expireTime != null">
+        #{expireTime,jdbcType=TIMESTAMP},
+      </if>
     </trim>
   </insert>
 
@@ -134,6 +141,7 @@
             update_by,
             update_time,
             del_flag,
+            expire_time
       </trim>
       values
         <foreach collection="list" item="item" separator=",">
@@ -150,7 +158,8 @@
             #{item.createTime,jdbcType=TIMESTAMP},
             #{item.updateBy,jdbcType=BIGINT},
             #{item.updateTime,jdbcType=TIMESTAMP},
-            #{item.delFlag,jdbcType=INTEGER}
+            #{item.delFlag,jdbcType=INTEGER},
+            #{item.expireTime,jdbcType=TIMESTAMP},
           </trim>
         </foreach>
     </insert>
@@ -194,6 +203,9 @@
       <if test="delFlag != null">
         del_flag = #{delFlag,jdbcType=INTEGER},
       </if>
+      <if test="expireTime != null">
+        expire_time = #{expireTime,jdbcType=TIMESTAMP},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>

+ 28 - 1
sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml

@@ -71,6 +71,7 @@
     </if>
     order by a.create_time
   </select>
+
     <select id="findByUserId" resultType="com.sckw.system.model.KwsEnterprise">
       select distinct a.*
         from kws_enterprise a
@@ -87,6 +88,7 @@
          and c.status = 0
          and d.status = 0
     </select>
+
   <select id="selectByKeys" resultType="com.sckw.system.model.KwsEnterprise">
     select
     <include refid="Base_Column_List" />
@@ -99,6 +101,27 @@
 
   </select>
 
+  <select id="findUserByEntIds" resultType="com.sckw.system.model.pojo.FindEntUserPojo">
+    select distinct a.id entId,
+           a.firm_name entName,
+           d.id userId,
+           d.name,
+           d.account,
+           d.phone
+      from kws_enterprise a
+      left join kws_dept b on a.id = b.ent_id
+      left join kws_user_dept c on b.id = c.dept_id
+      left join kws_user d on c.user_id = d.id
+     where a.del_flag = 0
+       and b.del_flag = 0
+       and c.del_flag = 0
+       and d.del_flag = 0
+       and a.id in
+        <foreach collection="list" separator="," open="(" close=")" item="item">
+          #{item}
+        </foreach>
+  </select>
+
   <insert id="insert" parameterType="com.sckw.system.model.KwsEnterprise">
     insert into kws_enterprise
     <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -372,7 +395,11 @@
     where id = #{id,jdbcType=BIGINT}
   </update>
   <update id="approval">
-    update kws_enterprise set approval = #{approval} where id = #{id,jdbcType=BIGINT} and approval = 3 and del_flag = 0
+    update kws_enterprise
+       set approval = #{approval}
+     where id = #{id,jdbcType=BIGINT}
+       and approval in (3, 4)
+       and del_flag = 0
   </update>
 
 </mapper>

+ 1 - 1
sckw-modules/sckw-system/src/main/resources/mapper/KwsRoleDao.xml

@@ -160,7 +160,7 @@
     and a.del_flag = 0
   </select>
 
-    <select id="selectBatchByDeptIds" resultType="com.sckw.system.model.KwsRole">
+    <select id="selectBatchByUnitIds" resultType="com.sckw.system.model.KwsRole">
       select a.*
         from kws_role a
        where a.dept_id in

+ 12 - 2
sckw-modules/sckw-system/src/main/resources/mapper/KwsUserDao.xml

@@ -6,6 +6,7 @@
     <result column="system_type" jdbcType="INTEGER" property="systemType" />
     <result column="account" jdbcType="VARCHAR" property="account" />
     <result column="password" jdbcType="VARCHAR" property="password" />
+    <result column="salt" jdbcType="VARCHAR" property="salt" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="phone" jdbcType="VARCHAR" property="phone" />
     <result column="photo" jdbcType="VARCHAR" property="photo" />
@@ -23,7 +24,7 @@
 
   <sql id="Base_Column_List">
     id, system_type, account, password, name, phone, photo, email, client_id, is_main,
-    remark, status, create_by, create_time, update_by, update_time, del_flag
+    remark, status, create_by, create_time, update_by, update_time, del_flag, salt
   </sql>
 
   <select id="selectByKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -87,6 +88,9 @@
       <if test="delFlag != null">
         del_flag,
       </if>
+      <if test="salt != null">
+        salt,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -140,6 +144,9 @@
       <if test="delFlag != null">
         #{delFlag,jdbcType=INTEGER},
       </if>
+      <if test="salt != null">
+        #{salt,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
 
@@ -194,6 +201,9 @@
       <if test="delFlag != null">
         del_flag = #{delFlag,jdbcType=INTEGER},
       </if>
+      <if test="salt != null">
+        salt = #{salt,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -242,7 +252,7 @@
   <select id="findList" resultType="com.sckw.system.model.KwsUser" parameterType="com.sckw.system.model.KwsUser" >
     select
       su.id, su.system_type systemType, su.account, su.password, su.name,
-      su.phone, su.photo, su.email, su.is_main isMain, su.remark, su.status
+      su.phone, su.photo, su.email, su.is_main isMain, su.remark, su.status, su.salt
     from kws_user su
     where su.del_flag = 0
     <if test="systemType != null and systemType != ''">