PC %!s(int64=2) %!d(string=hai) anos
pai
achega
780635bffa
Modificáronse 58 ficheiros con 1301 adicións e 173 borrados
  1. 25 0
      sckw-auth/src/main/java/com/sckw/auth/controller/ExceptionController.java
  2. 1 1
      sckw-auth/src/main/java/com/sckw/auth/controller/IndexController.java
  3. 3 3
      sckw-auth/src/main/java/com/sckw/auth/model/vo/res/LoginResVo.java
  4. 10 6
      sckw-auth/src/main/java/com/sckw/auth/service/impl/IndexServiceImpl.java
  5. 3 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/aspect/DaoAspect.java
  6. 29 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/ExceptionFilterConfig.java
  7. 56 13
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java
  8. 27 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilterConfig.java
  9. 39 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/auth/UserAccessMenuInfo.java
  10. 2 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/BaseModel.java
  11. 8 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/CacheGroup.java
  12. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  13. 9 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ApprovalEnum.java
  14. 12 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CertificateTypeEnum.java
  15. 35 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/DeptTypeEnum.java
  16. 9 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/EntTypeEnum.java
  17. 36 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/UserSystemTypeEnum.java
  18. 10 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/IdWorker.java
  19. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java
  20. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  21. 2 10
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/context/LoginUserHolder.java
  22. 3 7
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginUserInfo.java
  23. 10 2
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java
  24. 1 1
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/feign/RemoteUserFService.java
  25. 0 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/req/LoginReqDto.java
  26. 8 2
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsRoleResDto.java
  27. 39 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/UserAccessMenuInfoResDto.java
  28. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/SystemApplication.java
  29. 25 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/ExceptionController.java
  30. 2 2
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsDeptController.java
  31. 19 9
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsMenuController.java
  32. 16 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsRoleController.java
  33. 20 10
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsUserController.java
  34. 7 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsEnterpriseDao.java
  35. 3 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuDao.java
  36. 12 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuRightsDao.java
  37. 13 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsRoleDao.java
  38. 10 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsUserDeptDao.java
  39. 19 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsUserRoleDao.java
  40. 51 7
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java
  41. 10 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsMenu.java
  42. 35 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindMenuTreePojo.java
  43. 4 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntRegisterReqVo.java
  44. 34 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/FindMenuTreeReqVo.java
  45. 39 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/RoleBindMeunReqVo.java
  46. 69 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UserAddReqVo.java
  47. 34 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UserBindRoleReqVo.java
  48. 23 7
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsDeptService.java
  49. 66 23
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  50. 106 14
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java
  51. 90 10
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java
  52. 33 14
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java
  53. 17 1
      sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml
  54. 50 5
      sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuDao.xml
  55. 33 0
      sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuRightsDao.xml
  56. 11 2
      sckw-modules/sckw-system/src/main/resources/mapper/KwsRoleDao.xml
  57. 31 1
      sckw-modules/sckw-system/src/main/resources/mapper/KwsUserDeptDao.xml
  58. 35 0
      sckw-modules/sckw-system/src/main/resources/mapper/KwsUserRoleDao.xml

+ 25 - 0
sckw-auth/src/main/java/com/sckw/auth/controller/ExceptionController.java

@@ -0,0 +1,25 @@
+package com.sckw.auth.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author czh
+ * @desc TODO
+ * @date 2023/6/14
+ */
+@RestController
+@RequestMapping("/error")
+public class ExceptionController {
+
+    /**
+     * 重新抛出异常
+     */
+    @PostMapping("/throwError")
+    public HttpResult exception(HttpServletRequest request) {
+        return HttpResult.error(Integer.parseInt(request.getAttribute("code").toString()), request.getAttribute("message").toString());
+    }
+}

+ 1 - 1
sckw-auth/src/main/java/com/sckw/auth/controller/IndexController.java

@@ -6,6 +6,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.feign.RemoteUserFService;
 import com.sckw.system.api.model.dto.req.RegisterReqDto;
+import jakarta.servlet.http.HttpServletRequest;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -52,5 +53,4 @@ public class IndexController {
         return HttpResult.ok();
     }
 
-
 }

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

@@ -26,12 +26,12 @@ public class LoginResVo implements Serializable {
     /**
      * 用户id
      */
-    private String id;
+    private long id;
 
     /**
      * 系统类型(1运营端、2企业开户)
      */
-    private String systemType;
+    private Integer systemType;
 
     /**
      * 账号
@@ -66,7 +66,7 @@ public class LoginResVo implements Serializable {
     /**
      * 是否是企业管理(0是 1否)
      */
-    private String isMain;
+    private Integer isMain;
 
     /**
      * 企业信息

+ 10 - 6
sckw-auth/src/main/java/com/sckw/auth/service/impl/IndexServiceImpl.java

@@ -40,8 +40,8 @@ public class IndexServiceImpl implements IIndexService {
     @Override
     public LoginResVo login(LoginReqVo reqDto) {
         /*1、根据账号密码或者手机号校验码登录, 手机号后面处理*/
-        KwsUserResDto kwsUser = remoteUserService.checkUserBase(reqDto.getAccount(), reqDto.getSystemType());
-
+        List<KwsUserResDto> kwsUsers = remoteUserService.checkUserBase(reqDto.getAccount(), reqDto.getSystemType());
+        KwsUserResDto kwsUser = kwsUsers.get(0);
         //密码校验
         remoteUserService.checkPassword(reqDto.getPassword(), kwsUser.getPassword());
         LoginResVo loginResVo = new LoginResVo();
@@ -84,7 +84,7 @@ public class IndexServiceImpl implements IIndexService {
         }
         BeanUtils.copyProperties(kwsEnterprise, entInfoResVo);
 
-        /*4、以uuid作为主键存redis,也是会话token*/
+        /*4、生成token,一些信息存redis*/
         saveToCache(loginResVo);
         return loginResVo;
     }
@@ -97,10 +97,14 @@ public class IndexServiceImpl implements IIndexService {
      */
     private void saveToCache(LoginResVo loginResVo) {
         try {
-            String account = loginResVo.getAccount();
-            String token = EncryUtil.encry(Global.PRI_KEY, account);
+            String id = String.valueOf(loginResVo.getId());
+            String token = EncryUtil.encry(Global.PRI_KEY, id);
             loginResVo.setToken(token);
-            redissonUtils.add(CacheGroup.LOGININFO + account, JSON.toJSONString(loginResVo));
+            redissonUtils.add(CacheGroup.LOGININFO + id, JSON.toJSONString(loginResVo));
+
+            //存权限菜单
+            List<UserAccessMenuInfoResDto> userAccessMenuInfo = remoteUserService.queryUserAccessMenu(loginResVo.getId());
+            redissonUtils.add(CacheGroup.ACCESSMENU + id, JSON.toJSONString(userAccessMenuInfo));
         } catch (Exception e) {
             throw new SystemException(HttpStatus.GLOBAL_EXCEPTION_CODE, HttpStatus.GLOBAL_EXCEPTION_MESSAGE);
         }

+ 3 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/aspect/DaoAspect.java

@@ -121,9 +121,9 @@ public class DaoAspect {
                     BeanUtils.setProperty(arg, ID, new IdWorker(1).nextId());
                 }
 
-//                if (isProperty(arg, STATUS) && StringUtils.isBlank(String.valueOf(BeanUtils.getProperty(arg, STATUS)))) {
-//                    BeanUtils.setProperty(arg, STATUS, Global.NO);
-//                }
+                if (isProperty(arg, STATUS) && StringUtils.isBlank(BeanUtils.getProperty(arg, STATUS))) {
+                    BeanUtils.setProperty(arg, STATUS, Global.NO);
+                }
 
                 if (isProperty(arg, DEL_FLAG) && StringUtils.isBlank(BeanUtils.getProperty(arg, DEL_FLAG))) {
                     BeanUtils.setProperty(arg, DEL_FLAG, Global.NO);

+ 29 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/ExceptionFilterConfig.java

@@ -0,0 +1,29 @@
+package com.sckw.core.filter;
+
+import com.sckw.core.exception.SystemException;
+import jakarta.servlet.*;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * @author czh
+ * @desc TODO
+ * @date 2023/6/14
+ */
+@Component
+public class ExceptionFilterConfig implements Filter {
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        try {
+            filterChain.doFilter(servletRequest, servletResponse);
+        } catch (SystemException e) {
+            // 传递异常信息
+            servletRequest.setAttribute("code", e.getCode());
+            servletRequest.setAttribute("message", e.getMessage());
+            // 指定处理该请求的处理器
+            RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/error/throwError");
+            requestDispatcher.forward(servletRequest, servletResponse);
+        }
+    }
+}

+ 56 - 13
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java

@@ -1,66 +1,109 @@
 package com.sckw.core.filter;
 
+import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.auth.UserAccessMenuInfo;
 import com.sckw.core.model.constant.CacheGroup;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.EncryUtil;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.RequestConstant;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.model.LoginUserInfo;
 import com.sckw.redis.utils.RedissonUtils;
 import jakarta.annotation.Resource;
 import jakarta.servlet.*;
-import jakarta.servlet.annotation.WebFilter;
 import jakarta.servlet.http.HttpServletRequest;
-import lombok.Data;
-import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
-@Order(1)
+/**
+ * @desc: 登录过滤
+ * @author: czh
+ * @date: 2023/6/14
+ */
 @Component
 public class LoginFilter implements Filter {
 
-    private static final List<String> excludePath = new ArrayList<>();
+    private static final List<String> EXCLUDEPATH = new ArrayList<>();
 
     static {
-        excludePath.add("/auth/login");
+        EXCLUDEPATH.add("/auth/login");
+        EXCLUDEPATH.add("/kwsUser/resetPassword");
+        EXCLUDEPATH.add("/kwsUser/updatePassword");
+        EXCLUDEPATH.add("/kwsUser/forgetPassword");
     }
 
     @Resource
     private RedissonUtils redissonUtils;
 
     @Override
-    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-        //将形参servletRequest强制转换为HttpServletRequest类型,以便获取请求的URL地址和请求头
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
         HttpServletRequest request = (HttpServletRequest) servletRequest;
-        String requestURI = request.getRequestURI();
-        if (excludePath.contains(requestURI)) {
-            // 如果是登录请求直接放行
+        String requestUri = request.getRequestURI();
+        /*1、登录请求直接放行*/
+        if (EXCLUDEPATH.contains(requestUri)) {
             filterChain.doFilter(servletRequest, servletResponse);
             return;
         }
-        //2、非登录接口,校验token是否过期
+
+        /*2、非登录接口,校验token有效性*/
         String token = request.getHeader(RequestConstant.TOKEN);
         if (StringUtils.isBlank(token)) {
             throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.TOKEN_MISSING);
         }
 
-        String key = null;
+        String key;
         try {
             key = EncryUtil.descry(Global.PRI_KEY, token);
         } catch (Exception e) {
             throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.TOKEN_ERROR);
         }
+
+        //从redis获取用户信息
         Object object = redissonUtils.get(CacheGroup.LOGININFO + key);
         if (Objects.isNull(object)) {
             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.NO){
+            filterChain.doFilter(servletRequest, servletResponse);
+            return;
+        }
+
+        //按钮有权限才放行
+        List<String> links = getMenus(key);
+        if (!links.contains(requestUri)) {
+            throw new SystemException(HttpStatus.AUTHORITY_NO_CODE, HttpStatus.ACCESS_FIAL);
+        }
         filterChain.doFilter(servletRequest, servletResponse);
     }
 
+    private List<String> getMenus(String key) {
+        List<String> links = new ArrayList<>();
+        Object menuObject = redissonUtils.get(CacheGroup.ACCESSMENU + key);
+        if (!Objects.isNull(menuObject)) {
+            List<UserAccessMenuInfo> userAccessMenuInfos = JSONObject.parseArray(menuObject.toString(), UserAccessMenuInfo.class);
+            if (!CollectionUtils.isEmpty(userAccessMenuInfos)) {
+                for (UserAccessMenuInfo userAccessMenuInfo : userAccessMenuInfos) {
+                    String links1 = userAccessMenuInfo.getLinks();
+                    links.addAll(Arrays.asList(links1.split(",")));
+                }
+            }
+        }
+        links.add("/kwsMenu/add");
+        return links;
+    }
+
 }

+ 27 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilterConfig.java

@@ -0,0 +1,27 @@
+package com.sckw.core.filter;
+
+import jakarta.annotation.Resource;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author czh
+ * @desc TODO
+ * @date 2023/6/14
+ */
+@Component
+public class LoginFilterConfig {
+
+
+    @Bean
+    public FilterRegistrationBean registerBusExceptionFilter() {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(new ExceptionFilterConfig());
+        registration.setName("ExceptionFilter");
+        registration.setOrder(-1);
+        return registration;
+    }
+}

+ 39 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/auth/UserAccessMenuInfo.java

@@ -0,0 +1,39 @@
+package com.sckw.core.model.auth;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 查询用户菜单返参
+ * @date 2023/6/13
+ */
+@Data
+public class UserAccessMenuInfo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7179541798171846390L;
+
+    /**
+     * 菜单ID
+     */
+    private long menuId;
+
+    /**
+     * 菜单名
+     */
+    private String name;
+
+    /**
+     * 地址
+     */
+    private String url;
+
+    /**
+     * 后端接口地址
+     */
+    private String links;
+
+}

+ 2 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/BaseModel.java

@@ -33,6 +33,7 @@ public class BaseModel implements Serializable {
 	/**
 	 * 创建人
 	 */
+//	@TableField(fill = FieldFill.INSERT)
 	private Long createBy;
 
 	/**
@@ -49,7 +50,7 @@ public class BaseModel implements Serializable {
 	/**
 	 * 更新人
 	 */
-	@TableField(fill = FieldFill.INSERT_UPDATE)
+//	@TableField(fill = FieldFill.INSERT_UPDATE)
 	private Long updateBy;
 
 	/**

+ 8 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/CacheGroup.java

@@ -7,6 +7,14 @@ package com.sckw.core.model.constant;
  */
 public class CacheGroup {
 
+    /**
+     * 登录信息
+     */
     public static final String LOGININFO = "LOGIN:";
 
+    /**
+     * 按钮权限
+     */
+    public static final String ACCESSMENU = "ACCESSMENU:";
+
 }

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -215,6 +215,8 @@ public class Global {
 
     /**未读*/
     public static final Integer UN_READ = 0;
+    /*管理员角色名*/
+    public static final String MANAGE_NAME = "系统管理员";
 
     /**已读*/
     public static final Integer READ = 1;

+ 9 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ApprovalEnum.java

@@ -3,19 +3,25 @@ package com.sckw.core.model.enums;
 import lombok.Getter;
 
 /**
- * 审批状态枚举
+ * @author czh
+ * @desc 审批状态枚举
+ * @date 2023/6/15
  */
 @Getter
 public enum ApprovalEnum {
 
+    //未审批
     NO(0, "未审批"),
+    //通过
     OK(1, "通过"),
+    //未通过
     PASS(2, "未通过"),
+    //审批中
     PROCESS(3, "审批中");
 
-    private int code;
+    private final int code;
 
-    private String name;
+    private final String name;
 
     ApprovalEnum(int code, String name){
         this.code = code;

+ 12 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CertificateTypeEnum.java

@@ -3,22 +3,31 @@ package com.sckw.core.model.enums;
 import lombok.Getter;
 
 /**
- * 证照类型枚举
+ * @author czh
+ * @desc 证照类型枚举
+ * @date 2023/6/15
  */
 @Getter
 public enum CertificateTypeEnum {
 
+    //联系人身份证
     CONTACTS_IDCARD(1, "联系人身份证"),
+    //法人身份证
     CORPORATION_IDCARD(2, "法人身份证"),
+    //营业执照
     BUSINESSLICENSE(3, "营业执照"),
+    //道路运输许可证
     ROADLICENSE(4, "道路运输许可证"),
+    //开户许可证号
     ACCOUNT(5, "开户许可证号"),
+    //授权证书
     AUTHORIZE(6, "授权证书"),
+    //电子签章授权书
     SIGNATURES(7, "电子签章授权书");
 
-    private int code;
+    private final int code;
 
-    private String name;
+    private final String name;
 
     CertificateTypeEnum(int code, String name){
         this.code = code;

+ 35 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/DeptTypeEnum.java

@@ -0,0 +1,35 @@
+package com.sckw.core.model.enums;
+
+import lombok.Getter;
+
+/**
+ * @author czh
+ * @desc 机构类型枚举
+ * @date 2023/6/15
+ */
+@Getter
+public enum DeptTypeEnum {
+
+    //系统管理机构
+    MANAGE(1, "系统管理机构"),
+    //平台企业机构
+    COMPANY(2, "平台企业机构");
+
+    private final int code;
+
+    private final String name;
+
+    DeptTypeEnum(int code, String name){
+        this.code = code;
+        this.name = name;
+    }
+
+    public static DeptTypeEnum getName(int code){
+        for (DeptTypeEnum deptTypeEnum : values()) {
+            if (deptTypeEnum.getCode() == code) {
+                return deptTypeEnum;
+            }
+        }
+        return null;
+    }
+}

+ 9 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/EntTypeEnum.java

@@ -3,19 +3,25 @@ package com.sckw.core.model.enums;
 import lombok.Getter;
 
 /**
- * 企业类型枚举
+ * @author czh
+ * @desc 企业类型枚举
+ * @date 2023/6/15
  */
 @Getter
 public enum EntTypeEnum {
 
+    //供应商
     SUPPLIER(1, "供应商"),
+    //采购商
     PURCHASER(2, "采购商"),
+    //34PL物流
     LOGISTICS34(3, "34PL物流"),
+    //43PL物流
     LOGISTICS43(4, "43PL物流");
 
-    private int code;
+    private final int code;
 
-    private String name;
+    private final String name;
 
     EntTypeEnum(int code, String name){
         this.code = code;

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

@@ -0,0 +1,36 @@
+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;
+    }
+
+}

+ 10 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/IdWorker.java

@@ -34,7 +34,7 @@ public class IdWorker {
     private long sequence = 0L;
 
     /** 上次生成ID的时间截 */
-    private long lastTimestamp = -1L;
+    private static long lastTimestamp = -1L;
 
     //==============================Constructors=====================================
     /**
@@ -62,13 +62,17 @@ public class IdWorker {
         }
 
         //如果是同一时间生成的,则进行毫秒内序列
+        System.out.println("===============>   timestamp:" + timestamp);
+        System.out.println("===============>   lastTimestamp:" + lastTimestamp);
         if (lastTimestamp == timestamp) {
             //如果毫秒相同,则从0递增生成序列号
             sequence = (sequence + 1) & sequenceMask;
+            System.out.println("===============>   sequence:" + sequence);
             //毫秒内序列溢出
             if (sequence == 0) {
                 //阻塞到下一个毫秒,获得新的时间戳
                 timestamp = tilNextMillis(lastTimestamp);
+                System.out.println("===============>   new timestamp:" + timestamp);
             }
         }
         //时间戳改变,毫秒内序列重置
@@ -78,11 +82,13 @@ public class IdWorker {
 
         //上次生成ID的时间截
         lastTimestamp = timestamp;
-
+        System.out.println("===============>   new lastTimestamp:" + lastTimestamp);
         //移位并通过或运算拼到一起组成64位的ID
-        return ((timestamp - twepoch) << timestampLeftShift) //
-                | (workerId << workerIdShift) //
+        long result = ((timestamp - twepoch) << timestampLeftShift)
+                | (workerId << workerIdShift)
                 | sequence;
+        System.out.println("===============>  result:" + result);
+        return result;
     }
 
     /**

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

@@ -108,8 +108,8 @@ public class PasswordUtils {
     }
 
     public static void main(String[] args) {
-        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("czh"));
-        String md5 = PasswordUtils.md5("123456");
+        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("pt"));
+        String md5 = PasswordUtils.md5("czh");
         System.out.println(password);
         System.out.println(md5);
         System.out.println(validatePassword(md5, password));

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java

@@ -19,6 +19,7 @@ public class HttpStatus {
 
     /**访问权限状态码*/
     public static final int AUTHORITY_NO_CODE = 60403;
+    public static final String ACCESS_FIAL = "暂无该功能权限!";
 
     /**全局异常状态码*/
     public static final int GLOBAL_EXCEPTION_CODE = 60500;
@@ -116,6 +117,7 @@ public class HttpStatus {
     public static final String ACCOUNT_NOT_EXISTS = "用户信息不存在或已失效";
     public static final String ENT_NOT_EXISTS = "企业信息不存在或已失效";
     public static final String ENTCERTIFICATES_NOT_EXISTS = "未查询到企业资质信息";
+    public static final String ROLE_NOT_EXISTS = "未查询到关联的角色";
 
     /**自定义提示消息*/
     public static final String MSG_001 = "密码重置成功";

+ 2 - 10
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/context/LoginUserHolder.java

@@ -124,17 +124,9 @@ public class LoginUserHolder {
      * @author zhaokang
      * @Date 2020/04/13 0021
      */
-    public static Long getDeptId(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getDeptId();
+    public static String getDeptIds(){
+        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getDeptIds();
     }
 
-    /**
-     * (司机)
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getUserIds(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getUserIds();
-    }
 
 }

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

@@ -48,18 +48,14 @@ public class LoginUserInfo {
     /**
      * 用户所属机构id
      */
-    private Long deptId;
-    /**
-     * (司机)
-     */
-    private String userIds;
+    private String deptIds;
 
 
     public LoginUserInfo() {
     }
 
     public LoginUserInfo(Long id, Integer systemType, String account, String userName, String telephone,
-                         int isMain, int status, Long entId, String clientType, Long deptId) {
+                         int isMain, int status, Long entId, String clientType, String deptIds) {
         this.id = id;
         this.systemType = systemType;
         this.account = account;
@@ -69,6 +65,6 @@ public class LoginUserInfo {
         this.status = status;
         this.entId = entId;
         this.clientType = clientType;
-        this.deptId = deptId;
+        this.deptIds = deptIds;
     }
 }

+ 10 - 2
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java

@@ -2,7 +2,6 @@ package com.sckw.system.api;
 
 import com.sckw.system.api.model.dto.req.RegisterReqDto;
 import com.sckw.system.api.model.dto.res.*;
-
 import java.util.List;
 
 public interface RemoteUserService {
@@ -47,7 +46,7 @@ public interface RemoteUserService {
      * @param account
      * @return
      */
-    KwsUserResDto checkUserBase(String account, int systemType);
+    List<KwsUserResDto> checkUserBase(String account, int systemType);
 
     /**
      * 根基id查企业
@@ -64,4 +63,13 @@ public interface RemoteUserService {
      * @date: 2023/6/12
      */
     List<KwsRoleResDto> queryRoleInfoByUserId(Long userId);
+
+    /**
+     * @param id 用户id
+     * @return 查询用户菜单返参
+     * @desc: 根据用户id查拥有的菜单
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    List<UserAccessMenuInfoResDto> queryUserAccessMenu(long id);
 }

+ 1 - 1
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/feign/RemoteUserFService.java

@@ -4,7 +4,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(name = "sckw-system")
+@FeignClient(name = "sckw-system-czh")
 public interface RemoteUserFService {
 
     @GetMapping(value = "/get")

+ 0 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/req/LoginReqDto.java


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

@@ -2,15 +2,21 @@ package com.sckw.system.api.model.dto.res;
 
 import lombok.Data;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @author czh
  * @desc 角色信息
  * @date 2023/6/12
  */
 @Data
-public class KwsRoleResDto {
+public class KwsRoleResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 8340324543879685050L;
 
-    private String id;
+    private long id;
 
     private String name;
 

+ 39 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/UserAccessMenuInfoResDto.java

@@ -0,0 +1,39 @@
+package com.sckw.system.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 查询用户菜单返参
+ * @date 2023/6/13
+ */
+@Data
+public class UserAccessMenuInfoResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7179541798171846390L;
+
+    /**
+     * 菜单ID
+     */
+    private long menuId;
+
+    /**
+     * 菜单名
+     */
+    private String name;
+
+    /**
+     * 地址
+     */
+    private String url;
+
+    /**
+     * 后端接口地址
+     */
+    private String links;
+
+}

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

@@ -11,7 +11,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableDubbo
 @EnableFeignClients({"com.sckw.*.api.feign"})
 @EnableDiscoveryClient
-@SpringBootApplication(scanBasePackages = {"com.sckw.core.*", "com.sckw.core.aspect","com.sckw.system","com.sckw.redis"})
+@SpringBootApplication(scanBasePackages = {"com.sckw.core", "com.sckw.core.aspect","com.sckw.system","com.sckw.redis"})
 @MapperScan(basePackages="com.sckw.system.dao")
 @ServletComponentScan("com.sckw.core.filter")
 public class SystemApplication {

+ 25 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/ExceptionController.java

@@ -0,0 +1,25 @@
+package com.sckw.system.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author czh
+ * @desc TODO
+ * @date 2023/6/14
+ */
+@RestController
+@RequestMapping("/error")
+public class ExceptionController {
+
+    /**
+     * 重新抛出异常
+     */
+    @PostMapping("/throwError")
+    public HttpResult exception(HttpServletRequest request) {
+        return HttpResult.error(Integer.parseInt(request.getAttribute("code").toString()), request.getAttribute("message").toString());
+    }
+}

+ 2 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsDeptController.java

@@ -53,8 +53,8 @@ public class KwsDeptController {
      **/
     @PostMapping("/add")
     public HttpResult add(@RequestBody KwsDept params) throws Exception {
-        //params.setEntId(LoginEntHolder.getEntId());
-        return kwsDeptService.add(params);
+        kwsDeptService.add(params);
+        return HttpResult.ok();
     }
 
     /**

+ 19 - 9
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsMenuController.java

@@ -1,16 +1,12 @@
 package com.sckw.system.controller;
 
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-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.KwsMenu;
+import com.sckw.system.model.vo.req.FindMenuTreeReqVo;
+import com.sckw.system.model.vo.req.RoleBindMeunReqVo;
 import com.sckw.system.service.KwsMenuService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import java.util.HashMap;
-import java.util.List;
 
 /**
  * 菜单
@@ -45,8 +41,8 @@ public class KwsMenuController {
      * @date 2023/5/30
      **/
     @PostMapping("/findMenuTree")
-    public HttpResult findPage(@RequestBody HashMap params) throws Exception {
-        return HttpResult.ok(kwsMenuService.findTree(params));
+    public HttpResult findTree(@RequestBody FindMenuTreeReqVo reqVo) throws Exception {
+        return HttpResult.ok(kwsMenuService.findTree(reqVo));
     }
 
     /**
@@ -60,7 +56,8 @@ public class KwsMenuController {
      **/
     @PostMapping("/add")
     public HttpResult add(@RequestBody KwsMenu params) throws Exception {
-        return kwsMenuService.add(params);
+        kwsMenuService.add(params);
+        return HttpResult.ok();
     }
 
     /**
@@ -88,4 +85,17 @@ public class KwsMenuController {
     public HttpResult del(@RequestParam String ids) throws Exception {
         return kwsMenuService.deleteByKey(ids);
     }
+
+    /**
+     * @param  reqVo 菜单ID多个用","隔开
+     * @return HttpResult
+     * @desc: 角色分配菜单
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    @PostMapping("/roleBindMeun")
+    public HttpResult roleBindMeun(@RequestBody RoleBindMeunReqVo reqVo) throws Exception {
+        kwsMenuService.roleBindMeun(reqVo);
+        return HttpResult.ok();
+    }
 }

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

@@ -6,6 +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.UserBindRoleReqVo;
 import com.sckw.system.service.KwsRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -62,7 +63,8 @@ public class KwsRoleController {
      **/
     @PostMapping("/add")
     public HttpResult add(@RequestBody KwsRole params) throws Exception {
-        return kwsRoleService.add(params);
+        kwsRoleService.add(params);
+        return HttpResult.ok();
     }
 
     /**
@@ -88,4 +90,17 @@ public class KwsRoleController {
     public HttpResult del(@RequestParam String ids) throws Exception {
         return kwsRoleService.deleteByKey(ids);
     }
+
+    /**
+     * @param  reqVo 多个角色用","隔开
+     * @return HttpResult
+     * @desc: 用戶分配角色
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    @PostMapping("userBindRole")
+    public HttpResult userBindRole(@RequestBody UserBindRoleReqVo reqVo) throws Exception {
+        kwsRoleService.userBindRole(reqVo);
+        return HttpResult.ok();
+    }
 }

+ 20 - 10
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsUserController.java

@@ -9,6 +9,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.model.KwsUser;
 import com.sckw.system.model.vo.req.ForgetPasswordReqVo;
 import com.sckw.system.model.vo.req.UpdatePasswordReqVo;
+import com.sckw.system.model.vo.req.UserAddReqVo;
 import com.sckw.system.service.KwsUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -49,7 +50,7 @@ public class KwsUserController {
         // 设置分页参数
         PageHelper.startPage(PageResult.getPageNum(params), PageResult.getPageSize(params));
         List<KwsUser> list = kwsUserService.findPage(params);
-        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo(list));
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(list));
         return HttpResult.ok(pageResult);
     }
 
@@ -65,15 +66,15 @@ public class KwsUserController {
     }
 
     /**
-     * @param params {systemType:系统类型(1运营端、2企业开户)、account:账号、password:密码、name:姓名、telephone:联系电话
-     *               ,photo:头像,email:邮箱}
-     * @description 新增
-     * @author zk
-     * @date 2023/5/30
-     **/
+     * @param reqVo 新增用户入参
+     * @return HttpResult
+     * @desc: 新增用户
+     * @author: czh
+     * @date: 2023/6/14
+     */
     @PostMapping("/add")
-    public HttpResult add(@RequestBody KwsUser params) {
-        kwsUserService.add(params);
+    public HttpResult add(@RequestBody UserAddReqVo reqVo) {
+        kwsUserService.add(reqVo);
         return HttpResult.ok();
     }
 
@@ -134,7 +135,6 @@ public class KwsUserController {
      **/
     @GetMapping(value = "/closeAccount")
     public HttpResult closeAccount(@RequestParam String account) {
-
         return HttpResult.ok();
     }
 
@@ -149,4 +149,14 @@ public class KwsUserController {
         kwsUserService.deleteByKey(ids);
         return HttpResult.ok();
     }
+
+    @PostMapping("testEdit")
+    public HttpResult testEdit() {
+        return HttpResult.ok(HttpStatus.MSG_005);
+    }
+
+    @PostMapping("testApprove")
+    public HttpResult testApprove() {
+        return HttpResult.ok(HttpStatus.MSG_004);
+    }
 }

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

@@ -49,4 +49,11 @@ public interface KwsEnterpriseDao {
      * @return
      */
     List<KwsEnterprise> findList(EntFindPageReqVo params);
+
+    /**
+     * 根据用户查企业信息
+     * @param id
+     * @return
+     */
+    KwsEnterprise findByUserId(long id);
 }

+ 3 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuDao.java

@@ -1,6 +1,8 @@
 package com.sckw.system.dao;
 
 import com.sckw.system.model.KwsMenu;
+import com.sckw.system.model.pojo.FindMenuTreePojo;
+import com.sckw.system.model.vo.req.FindMenuTreeReqVo;
 import com.sckw.system.model.vo.res.KwsMenuResVo;
 import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
@@ -41,5 +43,5 @@ public interface KwsMenuDao {
      * @return
      * @throws Exception
      */
-    List<KwsMenuResVo> findList(Map<String, Object> params);
+    List<KwsMenuResVo> findList(FindMenuTreePojo params);
 }

+ 12 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuRightsDao.java

@@ -2,6 +2,9 @@ package com.sckw.system.dao;
 
 import com.sckw.system.model.KwsMenuRights;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 角色功能权限
@@ -31,4 +34,13 @@ public interface KwsMenuRightsDao {
      * @return
      */
     KwsMenuRights selectByKey(Long id);
+
+    /**
+     * @param  list
+     * @return int
+     * @desc:  批量保存
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    int saveBatch(@Param(value = "list") List<KwsMenuRights> list);
 }

+ 13 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsRoleDao.java

@@ -3,6 +3,8 @@ 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;
+
 import java.util.List;
 import java.util.Map;
 
@@ -49,5 +51,15 @@ public interface KwsRoleDao {
      * @author: czh
      * @date: 2023/6/12
      */
-    List<KwsRoleResDto> queryRoleByUserId(Long userId);
+    List<KwsRole> queryRoleByUserId(Long userId);
+
+    /**
+     * @param id 主键id
+     * @return
+     * @desc: 根据主键批量查
+     * @author: czh
+     * @date: 2023/6/14
+     */
+    List<KwsRole> selectBatchByKeys(@Param(value = "list") List<Long> id);
+
 }

+ 10 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsUserDeptDao.java

@@ -3,6 +3,9 @@ package com.sckw.system.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.system.model.KwsUserDept;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户机构关联信息
@@ -31,4 +34,11 @@ public interface KwsUserDeptDao {
      * @return
      */
     KwsUserDept selectByKey(Long id);
+
+    /**
+     * 批量插入
+     * @param kwsUserDeptList
+     * @return
+     */
+    int saveBatch(@Param(value = "list") List<KwsUserDept> kwsUserDeptList);
 }

+ 19 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsUserRoleDao.java

@@ -2,6 +2,9 @@ package com.sckw.system.dao;
 
 import com.sckw.system.model.KwsUserRole;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户角色关联信息
@@ -30,4 +33,20 @@ public interface KwsUserRoleDao {
      * @return
      */
     KwsUserRole selectByKey(Long id);
+
+    /**
+     * 批量新增
+     * @param list
+     * @return
+     */
+    int saveBatch(@Param(value = "list") List<KwsUserRole> list);
+
+    /**
+     * @param userId 用户id
+     * @return List
+     * @desc: 根据用户ID查用户角色信息
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    List<KwsUserRole> findAllByUserId(Long userId);
 }

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

@@ -1,15 +1,18 @@
 package com.sckw.system.dubbo;
 
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.req.RegisterReqDto;
 import com.sckw.system.api.model.dto.res.*;
-import com.sckw.system.model.KwsDept;
-import com.sckw.system.model.KwsEnterprise;
-import com.sckw.system.model.KwsUser;
-import com.sckw.system.model.KwsUserDept;
+import com.sckw.system.model.*;
+import com.sckw.system.model.pojo.FindMenuTreePojo;
+import com.sckw.system.model.vo.res.KwsMenuResVo;
 import com.sckw.system.service.KwsEnterpriseService;
+import com.sckw.system.service.KwsMenuService;
 import com.sckw.system.service.KwsRoleService;
 import com.sckw.system.service.KwsUserService;
 import jakarta.annotation.Resource;
@@ -40,6 +43,9 @@ public class RemoteUserServiceImpl implements RemoteUserService {
     @Resource
     private KwsRoleService kwsRoleService;
 
+    @Resource
+    private KwsMenuService kwsMenuService;
+
     @Override
     public String getUserInfoV1(String account) {
         return null;
@@ -88,7 +94,43 @@ public class RemoteUserServiceImpl implements RemoteUserService {
 
     @Override
     public List<KwsRoleResDto> queryRoleInfoByUserId(Long userId) {
-        return kwsRoleService.queryRoleByUserId(userId);
+        List<KwsRole> kwsRoles = kwsRoleService.queryRoleByUserId(userId);
+        if (CollectionUtils.isEmpty(kwsRoles)) {
+            return Collections.emptyList();
+        }
+        List<KwsRoleResDto> kwsRoleResDtos = BeanUtils.copyToList(kwsRoles, KwsRoleResDto.class);
+        return kwsRoleResDtos;
+    }
+
+    @Override
+    public List<UserAccessMenuInfoResDto> queryUserAccessMenu(long id) {
+        KwsUser kwsUser = kwsUserService.selectByKey(id);
+        if (Objects.isNull(kwsUser)) {
+            return Collections.emptyList();
+        }
+
+        FindMenuTreePojo findMenuTreePojo = new FindMenuTreePojo();
+        if(kwsUser.getIsMain() == Global.YES) {
+            KwsEnterprise kwsEnterprise = kwsEnterpriseService.findByUserId(kwsUser.getId());
+            if (Objects.isNull(kwsEnterprise)){
+                return Collections.emptyList();
+            }
+            findMenuTreePojo.setEntId(kwsEnterprise.getId());
+        } else {
+            List<KwsUserRole> kwsUserRoles = kwsRoleService.findAllByUserId(id);
+            if (Objects.isNull(kwsUserRoles)){
+                return Collections.emptyList();
+            }
+            List<Long> longs = kwsUserRoles.stream().map(KwsUserRole::getRoleId).toList();
+            findMenuTreePojo.setRoleIds(longs);
+        }
+
+        List<KwsMenuResVo> kwsMenuResVos = kwsMenuService.findList(findMenuTreePojo);
+        if (CollectionUtils.isEmpty(kwsMenuResVos)) {
+            return Collections.emptyList();
+        }
+
+        return BeanUtils.copyToList(kwsMenuResVos, UserAccessMenuInfoResDto.class);
     }
 
     @Override
@@ -102,11 +144,13 @@ public class RemoteUserServiceImpl implements RemoteUserService {
     }
 
     @Override
-    public KwsUserResDto checkUserBase(String account, int systemType){
+    public List<KwsUserResDto> checkUserBase(String account, int systemType){
         KwsUser kwsUser = kwsUserService.checkUserBase(account, systemType);
         KwsUserResDto kwsUserService = new KwsUserResDto();
         BeanUtils.copyProperties(kwsUser, kwsUserService);
-        return kwsUserService;
+        List<KwsUserResDto> list = new ArrayList<>();
+        list.add(kwsUserService);
+        return list;
     }
 
 }

+ 10 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsMenu.java

@@ -41,6 +41,11 @@ public class KwsMenu extends BaseModel {
      */
     private Integer type;
 
+    /**
+     * 请求后端接口地址(按钮才有)
+     */
+    private String links;
+
     /**
      * 菜单图标
      */
@@ -61,6 +66,11 @@ public class KwsMenu extends BaseModel {
      */
     private Integer custom;
 
+    /**
+     * 是否默认展示
+     */
+    private Integer isDisplay;
+
     /**
      * 此菜单是否开放(0普通菜单,1超级管理员菜单,2非普通用户菜单)
      */

+ 35 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindMenuTreePojo.java

@@ -0,0 +1,35 @@
+package com.sckw.system.model.pojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 查菜单树sql的入参
+ * @date 2023/6/13
+ */
+@Data
+public class FindMenuTreePojo {
+
+    /**
+     * 客户端类型
+     */
+    private String clientType;
+
+    /**
+     * 菜单名
+     */
+    private String name;
+
+    /**
+     * 角色id
+     */
+    private List<Long> roleIds;
+
+    /**
+     * 企业id
+     */
+    private long entId;
+
+}

+ 4 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntRegisterReqVo.java

@@ -2,12 +2,16 @@ package com.sckw.system.model.vo.req;
 
 import lombok.Data;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.util.List;
 
 @Data
 public class EntRegisterReqVo implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 2800416148876795046L;
+
     /**
      * 企业名称
      */

+ 34 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/FindMenuTreeReqVo.java

@@ -0,0 +1,34 @@
+package com.sckw.system.model.vo.req;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 查询菜单树入参
+ * @date 2023/6/13
+ */
+@Data
+public class FindMenuTreeReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5817342886374780336L;
+
+    /**
+     * 客户端类型
+     */
+    private String clientType;
+
+    /**
+     * 菜单名
+     */
+    private String name;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+}

+ 39 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/RoleBindMeunReqVo.java

@@ -0,0 +1,39 @@
+package com.sckw.system.model.vo.req;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 角色分配菜单入参
+ * @date 2023/6/13
+ */
+@Data
+public class RoleBindMeunReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -9121728977645694470L;
+
+    /**
+     * 角色ID
+     */
+    private long roleId;
+
+    /**
+     * 企业id
+     */
+    private long entId;
+
+    /**
+     * 菜单ID,多个用","隔开
+     */
+    private String menuIds;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 69 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UserAddReqVo.java

@@ -0,0 +1,69 @@
+package com.sckw.system.model.vo.req;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 新增用户入参
+ * @date 2023/6/14
+ */
+@Data
+public class UserAddReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3710064198286583936L;
+
+    /**
+     * 系统类型(1运营端、2企业开户)
+     */
+    private Integer systemType;
+
+    /**
+     * 账号
+     */
+    private String account;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 用户名
+     */
+    private String name;
+
+    /**
+     * 手机号
+     */
+    private String telephone;
+
+    /**
+     * 头像
+     */
+    private String photo;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 推送设备id
+     */
+    private String clientId;
+
+    /**
+     * 是否是企业管理(1是 0否)
+     */
+    private Integer isMain;
+
+    /**
+     * 分配的角色id,多个用","隔开
+     */
+    private String roleIds;
+
+}

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

@@ -0,0 +1,34 @@
+package com.sckw.system.model.vo.req;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 用户绑定权限入参
+ * @date 2023/6/13
+ */
+@Data
+public class UserBindRoleReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2351484485235753174L;
+
+    /**
+     * 用户id
+     */
+    private long userId;
+
+    /**
+     * 角色id,多个用","隔开
+     */
+    private String roleIds;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 23 - 7
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsDeptService.java

@@ -2,12 +2,16 @@ package com.sckw.system.service;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 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.vo.res.KwsDeptResVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,15 +31,15 @@ public class KwsDeptService {
     @Autowired
     KwsDeptDao kwsDeptDao;
 
+    @Autowired
+    KwsUserDeptDao kwsUserDeptDao;
+
     /**
      * 添加新纪录
      * @param params
      * @return
-     * @throws Exception
      */
-    public HttpResult add(KwsDept params) throws Exception {
-        params.setCreateBy(0L);
-        params.setUpdateBy(0L);
+    public void add(KwsDept params) {
         //params.setEntId(LoginEntHolder.getEntId());
         params.setId(new IdWorker(1).nextId());
         if (StringUtils.isNotBlank(params.getParentId())) {
@@ -46,8 +50,9 @@ public class KwsDeptService {
             }
         }
 
-        int count = kwsDeptDao.insert(params);
-        return count > 0 ? HttpResult.ok("添加成功!") : HttpResult.error();
+        if (kwsDeptDao.insert(params) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
     }
 
     /**
@@ -150,7 +155,18 @@ public class KwsDeptService {
             //子机构的长度为0,返回null,null不会被阿里的FastJson包解析
             return  null;
         }
-        return  childList;
+        return childList;
     }
 
+    /**
+     * @param kwsUserDeptList
+     * @desc: 存用户机构关联关系
+     * @author: czh
+     * @date: 2023/6/14
+     */
+    public void addUserDept(List<KwsUserDept> kwsUserDeptList) {
+        if (kwsUserDeptDao.saveBatch(kwsUserDeptList) < kwsUserDeptList.size()) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+    }
 }

+ 66 - 23
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -1,14 +1,16 @@
 package com.sckw.system.service;
+import java.util.Date;
 
 import java.util.*;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ApprovalEnum;
+import com.sckw.core.model.enums.DeptTypeEnum;
 import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.model.enums.UserSystemTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.BeanUtils;
@@ -21,10 +23,7 @@ import com.sckw.system.dao.KwsEntCertificateDao;
 import com.sckw.system.dao.KwsEntCheckTrackDao;
 import com.sckw.system.dao.KwsEntTypeDao;
 import com.sckw.system.dao.KwsEnterpriseDao;
-import com.sckw.system.model.KwsEntCertificate;
-import com.sckw.system.model.KwsEntCheckTrack;
-import com.sckw.system.model.KwsEntType;
-import com.sckw.system.model.KwsEnterprise;
+import com.sckw.system.model.*;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.CertificateResVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +51,15 @@ public class KwsEnterpriseService {
     @Autowired
     private KwsEntCheckTrackDao kwsEntCheckTrackDao;
 
+    @Autowired
+    private KwsDeptService kwsDeptService;
+
+    @Autowired
+    private KwsRoleService kwsRoleService;
+
+    @Autowired
+    private KwsUserService kwsUserService;
+
     /**
      * 添加新纪录
      *
@@ -66,8 +74,6 @@ public class KwsEnterpriseService {
             return result;
         }
 
-        params.setCreateBy(0L);
-        params.setUpdateBy(0L);
         return null;
     }
 
@@ -230,10 +236,11 @@ public class KwsEnterpriseService {
      */
     @Transactional(rollbackFor = {})
     public void register(EntRegisterReqVo reqVo) {
-        /*存企业信息表*/
+        /*1、存企业信息表*/
         KwsEnterprise kwsEnterprise = new KwsEnterprise();
         long entId = new IdWorker(1).nextId();
         kwsEnterprise.setId(entId);
+        Date date = new Date();
         BeanUtils.copyProperties(reqVo, kwsEnterprise);
 
         //一些待确认的字段
@@ -241,50 +248,75 @@ public class KwsEnterpriseService {
         kwsEnterprise.setBalance(0L);
         kwsEnterprise.setExperience(0);
         kwsEnterprise.setMemberLevel(0);
-        kwsEnterprise.setRegTime(new Date());
+        kwsEnterprise.setRegTime(date);
         kwsEnterprise.setApproval(ApprovalEnum.NO.getCode());
         if (kwsEnterpriseDao.insert(kwsEnterprise) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
-        /*存企业类型,一个企业可以有多个类型*/
+        /*2、存企业类型,一个企业可以有多个类型*/
         List<KwsEntType> kwsEntTypes = new ArrayList<>();
         Arrays.stream(reqVo.getEntTypes().split(",")).toList().forEach(item -> {
             KwsEntType kwsEntType = new KwsEntType();
             kwsEntType.setEntId(entId);
             kwsEntType.setType(Integer.parseInt(item));
             kwsEntType.setId(new IdWorker(1).nextId());
-            kwsEntType.setDelFlag(Global.NO);
-            kwsEntType.setStatus(Global.NO);
-            kwsEntType.setCreateBy(1L);
-            kwsEntType.setUpdateBy(1L);
-            kwsEntType.setCreateTime(new Date());
-            kwsEntType.setUpdateTime(new Date());
             kwsEntTypes.add(kwsEntType);
         });
         if (kwsEntTypeDao.saveBatch(kwsEntTypes) != kwsEntTypes.size()) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
-        /*存企业证书*/
+        /*3、存企业证书*/
         List<KwsEntCertificate> kwsEntCertificates = new ArrayList<>();
         reqVo.getBusinessLicense().forEach(item -> {
             KwsEntCertificate kwsEntCertificate = new KwsEntCertificate();
             //todo 上传证书正反面,将url放到两个入参里
             kwsEntCertificate.setEntId(entId);
             kwsEntCertificate.setId(new IdWorker(1).nextId());
-            kwsEntCertificate.setDelFlag(Global.NO);
-            kwsEntCertificate.setStatus(Global.NO);
-            kwsEntCertificate.setCreateBy(1L);
-            kwsEntCertificate.setUpdateBy(1L);
-            kwsEntCertificate.setCreateTime(new Date());
-            kwsEntCertificate.setUpdateTime(new Date());
             BeanUtils.copyProperties(item, kwsEntCertificate);
             kwsEntCertificates.add(kwsEntCertificate);
         });
         if (kwsEntCertificateDao.saveBatch(kwsEntCertificates) != kwsEntCertificates.size()) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
+
+        /*4、新增管理员机构*/
+        KwsDept kwsDept = new KwsDept();
+        long deptId = new IdWorker(1L).nextId();
+        kwsDept.setSystemType(DeptTypeEnum.MANAGE.getCode());
+        kwsDept.setEntId(entId);
+        kwsDept.setName(DeptTypeEnum.MANAGE.getName());
+        kwsDept.setCompany(Global.NO);
+        kwsDept.setParentId(0L);
+        kwsDept.setParentIds("0");
+        kwsDept.setLevel(1);
+        kwsDept.setSort(0);
+        kwsDept.setId(deptId);
+        kwsDeptService.add(kwsDept);
+
+        /*5、新增管理员角色*/
+        KwsRole kwsRole = new KwsRole();
+        long roleId = new IdWorker(1L).nextId();
+        kwsRole.setName(Global.MANAGE_NAME);
+        kwsRole.setDeptId(deptId);
+        kwsRole.setId(roleId);
+        kwsRoleService.add(kwsRole);
+
+        /*5、新增管理员用户*/
+        String contacts = reqVo.getContacts();
+        String telephone = reqVo.getTelephone();
+        UserAddReqVo userAddReqVo = new UserAddReqVo();
+        userAddReqVo.setSystemType(UserSystemTypeEnum.ENTERPRISE.getCode());
+        userAddReqVo.setAccount(telephone);
+        userAddReqVo.setName(contacts);
+        userAddReqVo.setTelephone(telephone);
+        userAddReqVo.setPhoto("");
+        userAddReqVo.setEmail("");
+        userAddReqVo.setClientId("");
+        userAddReqVo.setIsMain(Global.YES);
+        userAddReqVo.setRoleIds(String.valueOf(roleId));
+        kwsUserService.add(userAddReqVo);
     }
 
     /**
@@ -349,4 +381,15 @@ public class KwsEnterpriseService {
         return list;
     }
 
+    /**
+     * @param  userId 用户id
+     * @return KwsEnterprise
+     * @desc: 根据用户id查企业
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    public KwsEnterprise findByUserId(long userId) {
+        return kwsEnterpriseDao.findByUserId(userId);
+    }
+
 }

+ 106 - 14
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -1,17 +1,24 @@
 package com.sckw.system.service;
+import java.util.*;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
-import com.sckw.system.dao.KwsMenuDao;
-import com.sckw.system.model.KwsMenu;
+import com.sckw.system.dao.*;
+import com.sckw.system.model.*;
+import com.sckw.system.model.pojo.FindMenuTreePojo;
+import com.sckw.system.model.vo.req.FindMenuTreeReqVo;
+import com.sckw.system.model.vo.req.RoleBindMeunReqVo;
 import com.sckw.system.model.vo.res.KwsMenuResVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 菜单service接口
@@ -24,17 +31,36 @@ public class KwsMenuService {
     @Autowired
     KwsMenuDao kwsMenuDao;
 
+    @Autowired
+    KwsMenuRightsDao kwsMenuRightsDao;
+
+    @Autowired
+    KwsUserDao kwsUserDao;
+
+    @Autowired
+    KwsUserRoleDao kwsUserRoleDao;
+
+    @Autowired
+    KwsEnterpriseDao kwsEnterpriseDao;
+
     /**
      * 添加新纪录
      * @param params
      * @return
      * @throws Exception
      */
-    public HttpResult add(KwsMenu params) throws Exception {
-        params.setCreateBy(0L);
-        params.setUpdateBy(0L);
-        int count = kwsMenuDao.insert(params);
-        return count > 0 ? HttpResult.ok("添加成功!") : HttpResult.error();
+    public void add(KwsMenu params) throws Exception {
+        Long parentId = params.getParentId();
+        if (parentId.compareTo(0L) != 0) {
+            KwsMenu kwsMenu = kwsMenuDao.selectByKey(parentId);
+            if (Objects.isNull(kwsMenu)) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
+        }
+
+        if (kwsMenuDao.insert(params) <=0 ) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
     }
 
     /**
@@ -91,18 +117,24 @@ public class KwsMenuService {
 
     /**
      * 分页查询
-     * @param params
+     * @param reqVo
      * @return
      * @throws Exception
      */
-    public List<KwsMenuResVo> findTree(Map<String, Object> params) throws Exception{
-        List<KwsMenuResVo> menuList = kwsMenuDao.findList(params);
+    public List<KwsMenuResVo> findTree(FindMenuTreeReqVo reqVo) throws Exception {
+        FindMenuTreePojo findMenuTreePojo = new FindMenuTreePojo();
+        BeanUtils.copyProperties(reqVo, findMenuTreePojo);
+
+        //填充用户参数
+        extracted(reqVo.getUserId(), findMenuTreePojo);
+
+        List<KwsMenuResVo> menuList = kwsMenuDao.findList(findMenuTreePojo);
         List<KwsMenuResVo> rootList = new ArrayList();
 
         //获取根节点数据
         if (CollectionUtil.isNotEmpty(menuList)) {
             int level = menuList.get(0).getLevel();
-            for(KwsMenuResVo kwsMenu:menuList){
+            for (KwsMenuResVo kwsMenu : menuList) {
                 if (kwsMenu.getLevel() == level) {
                     rootList.add(kwsMenu);
                 }
@@ -117,6 +149,36 @@ public class KwsMenuService {
         return rootList;
     }
 
+    public List<KwsMenuResVo> findList(FindMenuTreePojo findMenuTreePojo) {
+        return kwsMenuDao.findList(findMenuTreePojo);
+    }
+
+    private void extracted(Long userId, FindMenuTreePojo findMenuTreePojo) {
+        if (Objects.isNull(userId)) {
+            return;
+        }
+        KwsUser kwsUser = kwsUserDao.selectByKey(userId);
+        if (Objects.isNull(kwsUser)) {
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ACCOUNT_NOT_EXISTS);
+        }
+
+        //管理员查所有的,普通用户通过企业查
+        if (kwsUser.getIsMain() == Global.YES) {
+            KwsEnterprise kwsEnterprise = kwsEnterpriseDao.findByUserId(userId);
+            if (Objects.isNull(kwsEnterprise)) {
+                throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
+            }
+            findMenuTreePojo.setEntId(kwsEnterprise.getId());
+        } else {
+            List<KwsUserRole> allByUserId = kwsUserRoleDao.findAllByUserId(userId);
+            if (CollectionUtils.isEmpty(allByUserId)) {
+                throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ROLE_NOT_EXISTS);
+            }
+            List<Long> longs = allByUserId.stream().map(KwsUserRole::getRoleId).toList();
+            findMenuTreePojo.setRoleIds(longs);
+        }
+    }
+
     /**
      * 递归获取下级菜单
      * @param parentId 父级机构id
@@ -142,4 +204,34 @@ public class KwsMenuService {
         }
         return  childList;
     }
+
+    /**
+     * @param  reqVo 菜单ID多个用","隔开
+     * @desc: 角色分配菜单
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    public void roleBindMeun(RoleBindMeunReqVo reqVo) {
+        String[] split = reqVo.getMenuIds().split(",");
+        List<KwsMenuRights> list = new ArrayList<>();
+        Date date = new Date();
+        for (String menuId : split) {
+            KwsMenuRights kwsMenuRights = new KwsMenuRights();
+            kwsMenuRights.setEntId(reqVo.getEntId());
+            kwsMenuRights.setMenuId(Long.parseLong(menuId));
+            kwsMenuRights.setRoleId(reqVo.getRoleId());
+            kwsMenuRights.setId(new IdWorker(1L).nextId());
+            kwsMenuRights.setRemark(reqVo.getRemark());
+            kwsMenuRights.setStatus(Global.NO);
+            kwsMenuRights.setCreateBy(LoginUserHolder.getUserId());
+            kwsMenuRights.setCreateTime(date);
+            kwsMenuRights.setUpdateBy(LoginUserHolder.getUserId());
+            kwsMenuRights.setUpdateTime(date);
+            kwsMenuRights.setDelFlag(Global.NO);
+            list.add(kwsMenuRights);
+        }
+        if (kwsMenuRightsDao.saveBatch(list) < list.size()) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+    }
 }

+ 90 - 10
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java

@@ -1,15 +1,29 @@
 package com.sckw.system.service;
+import java.util.Date;
 
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.model.LoginUserInfo;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.api.model.dto.res.KwsRoleResDto;
+import com.sckw.system.dao.KwsMenuRightsDao;
 import com.sckw.system.dao.KwsRoleDao;
+import com.sckw.system.dao.KwsUserRoleDao;
+import com.sckw.system.model.KwsMenuRights;
 import com.sckw.system.model.KwsRole;
+import com.sckw.system.model.KwsUserDept;
+import com.sckw.system.model.KwsUserRole;
+import com.sckw.system.model.vo.req.UserBindRoleReqVo;
+import org.jetbrains.annotations.Nullable;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.List;
-import java.util.Map;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
 
 /**
  * 角色service接口
@@ -22,17 +36,24 @@ public class KwsRoleService {
     @Autowired
     KwsRoleDao kwsRoleDao;
 
+    @Autowired
+    KwsUserRoleDao kwsUserRoleDao;
+
+    @Autowired
+    KwsMenuRightsDao kwsMenuRightsDao;
+
+    @Autowired
+    KwsDeptService kwsDeptService;
     /**
      * 添加新纪录
      * @param params
      * @return
      * @throws Exception
      */
-    public HttpResult add(KwsRole params) throws Exception {
-        params.setCreateBy(0L);
-        params.setUpdateBy(0L);
-        int count = kwsRoleDao.insert(params);
-        return count > 0 ? HttpResult.ok("添加成功!") : HttpResult.error();
+    public void add(KwsRole params) {
+        if (kwsRoleDao.insert(params) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
     }
 
     /**
@@ -77,7 +98,7 @@ public class KwsRoleService {
      * @return
      * @throws Exception
      */
-    public KwsRole selectByKey(Long key) throws Exception {
+    public KwsRole selectByKey(Long key) {
         return kwsRoleDao.selectByKey(key);
     }
 
@@ -98,7 +119,66 @@ public class KwsRoleService {
      * @author: czh
      * @date: 2023/6/12
      */
-    public List<KwsRoleResDto> queryRoleByUserId(Long userId) {
+    public List<KwsRole> queryRoleByUserId(Long userId) {
         return kwsRoleDao.queryRoleByUserId(userId);
     }
-}
+
+    /**
+     * @param  reqVo 多个角色用","隔开
+     * @desc: 用戶分配權限
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    @Transactional(rollbackFor = {})
+    public void userBindRole(UserBindRoleReqVo reqVo) {
+        /*1、存用户角色信息*/
+        String[] roleIdArr = reqVo.getRoleIds().split(",");
+        List<KwsUserRole> kwsUserRolelist = new ArrayList<>();
+        Date date = new Date();
+        Long userId = LoginUserHolder.getUserId();
+        List<Long> roleIdList = new ArrayList<>();
+        for (String roleId : roleIdArr) {
+            KwsUserRole kwsUserRole = new KwsUserRole();
+            kwsUserRole.setUserId(reqVo.getUserId());
+            kwsUserRole.setRoleId(Long.parseLong(roleId));
+            kwsUserRole.setRemark(reqVo.getRemark());
+            kwsUserRole.setId(new IdWorker(1).nextId());
+            kwsUserRole.setCreateTime(date);
+            kwsUserRole.setCreateBy(userId);
+            kwsUserRole.setUpdateTime(date);
+            kwsUserRole.setUpdateBy(userId);
+            kwsUserRole.setStatus(Global.NO);
+            kwsUserRole.setDelFlag(Global.NO);
+            kwsUserRolelist.add(kwsUserRole);
+            roleIdList.add(Long.parseLong(roleId));
+        }
+        if(kwsUserRoleDao.saveBatch(kwsUserRolelist) < kwsUserRolelist.size()){
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+
+        /*2、存用户机构信息*/
+        List<KwsRole> kwsRoles = kwsRoleDao.selectBatchByKeys(roleIdList);
+        List<KwsUserDept> kwsUserDeptList = new ArrayList<>();
+        kwsRoles.forEach(item -> {
+            KwsUserDept kwsUserDept = new KwsUserDept();
+            kwsUserDept.setUserId(reqVo.getUserId());
+            kwsUserDept.setDeptId(item.getDeptId());
+            kwsUserDept.setId(new IdWorker(1).nextId());
+            kwsUserDept.setRemark("");
+            kwsUserDept.setStatus(Global.NO);
+            kwsUserDept.setCreateBy(userId);
+            kwsUserDept.setCreateTime(date);
+            kwsUserDept.setUpdateBy(userId);
+            kwsUserDept.setUpdateTime(date);
+            kwsUserDept.setDelFlag(Global.NO);
+            kwsUserDeptList.add(kwsUserDept);
+        });
+        kwsDeptService.addUserDept(kwsUserDeptList);
+    }
+
+
+    public List<KwsUserRole> findAllByUserId (long userId) {
+        return kwsUserRoleDao.findAllByUserId(userId);
+    }
+
+}

+ 33 - 14
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java

@@ -1,13 +1,13 @@
 package com.sckw.system.service;
+import java.util.Date;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.PasswordUtils;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.model.dto.res.KwsUserDeptResDto;
@@ -15,18 +15,19 @@ import com.sckw.system.dao.KwsEntCheckTrackDao;
 import com.sckw.system.dao.KwsUserDao;
 import com.sckw.system.dao.KwsUserDeptDao;
 import com.sckw.system.model.KwsDept;
+import com.sckw.system.model.KwsRole;
 import com.sckw.system.model.KwsUser;
 import com.sckw.system.model.KwsUserDept;
 import com.sckw.system.model.vo.req.ForgetPasswordReqVo;
 import com.sckw.system.model.vo.req.UpdatePasswordReqVo;
+import com.sckw.system.model.vo.req.UserAddReqVo;
+import com.sckw.system.model.vo.req.UserBindRoleReqVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 用户service接口
@@ -42,9 +43,13 @@ public class KwsUserService {
 
     @Autowired
     KwsUserDeptDao kwsUserDeptDao;
+
     @Autowired
     KwsEntCheckTrackDao kwsEntCheckTrackDao;
 
+    @Autowired
+    KwsRoleService kwsRoleService;
+
     @Autowired
     KwsDeptService kwsDeptService;
 
@@ -53,10 +58,12 @@ public class KwsUserService {
 
     @Autowired
     RedissonUtils redissonUtils;
-    /**
-     * 添加新纪录
-     */
-    public void add(KwsUser kwsUser) {
+
+    @Transactional(rollbackFor = {})
+    public void add(UserAddReqVo reqVo) {
+        KwsUser kwsUser = new KwsUser();
+        BeanUtils.copyProperties(reqVo, kwsUser);
+
         /*1、数据校验*/
         paramsCheck(kwsUser);
 
@@ -64,12 +71,24 @@ public class KwsUserService {
         fillPassword(kwsUser);
 
         /*3、存库*/
-        kwsUser.setCreateBy(0L);
-        kwsUser.setUpdateBy(0L);
+        long userId = new IdWorker(1).nextId();
+        kwsUser.setId(userId);
         int count = kwsUserDao.insert(kwsUser);
         if (count <= 0) {
            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
+
+        /*4、填充用户角色、用户机构关系*/
+        fillUserRole(reqVo, userId);
+
+    }
+
+
+    private void fillUserRole(UserAddReqVo reqVo, long userId) {
+        UserBindRoleReqVo userBindRoleReqVo = new UserBindRoleReqVo();
+        userBindRoleReqVo.setUserId(userId);
+        userBindRoleReqVo.setRoleIds(reqVo.getRoleIds());
+        kwsRoleService.userBindRole(userBindRoleReqVo);
     }
 
     private void fillPassword(KwsUser kwsUser) {
@@ -143,7 +162,7 @@ public class KwsUserService {
     /**
      * 根据主键查询
      */
-    public KwsUser selectByKey(Long key) throws Exception {
+    public KwsUser selectByKey(Long key) {
         return kwsUserDao.selectByKey(key);
     }
 

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

@@ -71,8 +71,24 @@
     </if>
     order by a.create_time
   </select>
+    <select id="findByUserId" resultType="com.sckw.system.model.KwsEnterprise">
+      select distinct a.*
+        from kws_enterprise a
+       inner join kws_dept b on a.id = b.ent_id
+       inner join kws_user_dept c on b.id = c.dept_id
+       inner join kws_user d on c.user_id = d.id
+       where d.id = #{id}
+         and a.del_flag = 0
+         and b.del_flag = 0
+         and c.del_flag = 0
+         and d.del_flag = 0
+         and a.status = 0
+         and b.status = 0
+         and c.status = 0
+         and d.status = 0
+    </select>
 
-  <insert id="insert" parameterType="com.sckw.system.model.KwsEnterprise">
+    <insert id="insert" parameterType="com.sckw.system.model.KwsEnterprise">
     insert into kws_enterprise
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">

+ 50 - 5
sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuDao.xml

@@ -14,6 +14,7 @@
     <result column="level" jdbcType="INTEGER" property="level" />
     <result column="custom" jdbcType="INTEGER" property="custom" />
     <result column="is_main" jdbcType="INTEGER" property="isMain" />
+    <result column="is_display" jdbcType="INTEGER" property="isDisplay" />
     <result column="using_roles" jdbcType="VARCHAR" property="usingRoles" />
     <result column="remark" jdbcType="VARCHAR" property="remark" />
     <result column="status" jdbcType="INTEGER" property="status" />
@@ -25,14 +26,32 @@
   </resultMap>
 
   <sql id="Base_Column_List">
-    id, client_type, parent_id, name, url, perms, type, icon, sort, level, custom, is_main,
-    using_roles, remark, status, create_by, create_time, update_by, update_time, del_flag
+        sm.id,
+        sm.client_type,
+        sm.parent_id,
+        sm.name,
+        sm.url,
+        sm.perms,
+        sm.type,
+        sm.icon,
+        sm.sort,
+        sm.level,
+        sm.custom,
+        sm.is_main,
+        sm.using_roles,
+        sm.remark,
+        sm.status,
+        sm.create_by,
+        sm.create_time,
+        sm.update_by,
+        sm.update_time,
+        sm.del_flag
   </sql>
 
   <select id="selectByKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
-    from kws_menu
+    from kws_menu sm
     where id = #{id,jdbcType=BIGINT}
   </select>
 
@@ -54,6 +73,9 @@
       <if test="url != null">
         url,
       </if>
+      <if test="links != null">
+        links,
+      </if>
       <if test="perms != null">
         perms,
       </if>
@@ -75,6 +97,9 @@
       <if test="isMain != null">
         is_main,
       </if>
+      <if test="isDisplay != null">
+        is_display,
+      </if>
       <if test="usingRoles != null">
         using_roles,
       </if>
@@ -116,6 +141,9 @@
       <if test="url != null">
         #{url,jdbcType=VARCHAR},
       </if>
+      <if test="links != null">
+        #{links,jdbcType=VARCHAR},
+      </if>
       <if test="perms != null">
         #{perms,jdbcType=VARCHAR},
       </if>
@@ -134,6 +162,9 @@
       <if test="custom != null">
         #{custom,jdbcType=INTEGER},
       </if>
+      <if test="isDisplay != null">
+        #{isDisplay,jdbcType=INTEGER},
+      </if>
       <if test="isMain != null">
         #{isMain,jdbcType=INTEGER},
       </if>
@@ -197,6 +228,9 @@
       <if test="custom != null">
         custom = #{custom,jdbcType=INTEGER},
       </if>
+      <if test="isDisplay != null">
+        is_display = #{isDisplay,jdbcType=INTEGER},
+      </if>
       <if test="isMain != null">
         is_main = #{isMain,jdbcType=INTEGER},
       </if>
@@ -228,10 +262,12 @@
     where id = #{id,jdbcType=BIGINT}
   </update>
 
-  <select id="findList" resultType="com.sckw.system.model.vo.res.KwsMenuResVo" parameterType="java.util.Map" >
+  <select id="findList" resultType="com.sckw.system.model.vo.res.KwsMenuResVo"
+          parameterType="com.sckw.system.model.pojo.FindMenuTreePojo" >
     select
     <include refid="Base_Column_List" />
     from kws_menu sm
+    left join kws_menu_rights smr on sm.id = smr.menu_id
     where sm.del_flag = 0
     <if test="clientType != null and clientType != ''">
       and sm.client_type = #{clientType, jdbcType=VARCHAR}
@@ -239,6 +275,15 @@
     <if test="name != null and name != ''">
       and sm.name = #{name, jdbcType=VARCHAR}
     </if>
+    <if test="entId != null">
+      and smr.ent_id = #{entId}
+    </if>
+    <if test="roleIds != null and roleIds.size() > 0">
+      and smr.role_id in
+      <foreach collection="roleIds" separator="," open="(" close=")" item="item">
+        #{item}
+      </foreach>
+    </if>
     ORDER BY sm.level, sm.sort
   </select>
 </mapper>

+ 33 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuRightsDao.xml

@@ -101,6 +101,39 @@
     </trim>
   </insert>
 
+  <insert id="saveBatch" parameterType="com.sckw.system.model.KwsMenuRights">
+    insert into kws_menu_rights
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      id,
+      ent_id,
+      menu_id,
+      role_id,
+      remark,
+      status,
+      create_by,
+      create_time,
+      update_by,
+      update_time,
+      del_flag
+    </trim>
+        values
+    <foreach collection="list" item="item" separator=",">
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        #{item.id,jdbcType=BIGINT},
+        #{item.entId,jdbcType=BIGINT},
+        #{item.menuId,jdbcType=BIGINT},
+        #{item.roleId,jdbcType=BIGINT},
+        #{item.remark,jdbcType=VARCHAR},
+        #{item.status,jdbcType=INTEGER},
+        #{item.createBy,jdbcType=BIGINT},
+        #{item.createTime,jdbcType=TIMESTAMP},
+        #{item.updateBy,jdbcType=BIGINT},
+        #{item.updateTime,jdbcType=TIMESTAMP},
+        #{item.delFlag,jdbcType=INTEGER}
+      </trim>
+    </foreach>
+  </insert>
+
   <update id="update" parameterType="com.sckw.system.model.KwsMenuRights">
     update kws_menu_rights
     <set>

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

@@ -141,12 +141,21 @@
     </if>
     ORDER BY sr.create_time desc
   </select>
-  <select id="queryRoleByUserId" resultType="com.sckw.system.api.model.dto.res.KwsRoleResDto">
-    select a.*
+  <select id="queryRoleByUserId" resultType="com.sckw.system.model.KwsRole">
+    select b.*
       from kws_user_role a
       left join kws_role b on a.role_id = b.id
       where a.del_flag = 0
         and b.del_flag = 0
         and a.user_id = #{userId}
   </select>
+
+  <select id="selectBatchByKeys" resultType="com.sckw.system.model.KwsRole">
+    select a.*
+      from kws_role a
+     where a.id in
+        <foreach collection="list" item="item" open="(" close=")" separator=",">
+          #{item}
+        </foreach>
+  </select>
 </mapper>

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

@@ -93,8 +93,38 @@
       </if>
     </trim>
   </insert>
+    <insert id="saveBatch">
+      insert into kws_user_dept
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+          id,
+          user_id,
+          dept_id,
+          remark,
+          status,
+          create_by,
+          create_time,
+          update_by,
+          update_time,
+          del_flag
+      </trim>
+          values
+      <foreach collection="list" item="item" separator=",">
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        #{item.id,jdbcType=BIGINT},
+        #{item.userId,jdbcType=BIGINT},
+        #{item.deptId,jdbcType=BIGINT},
+        #{item.remark,jdbcType=VARCHAR},
+        #{item.status,jdbcType=INTEGER},
+        #{item.createBy,jdbcType=BIGINT},
+        #{item.createTime,jdbcType=TIMESTAMP},
+        #{item.updateBy,jdbcType=BIGINT},
+        #{item.updateTime,jdbcType=TIMESTAMP},
+        #{item.delFlag,jdbcType=INTEGER}
+      </trim>
+      </foreach>
+    </insert>
 
-  <update id="update" parameterType="com.sckw.system.model.KwsUserDept">
+    <update id="update" parameterType="com.sckw.system.model.KwsUserDept">
     update kws_user_dept
     <set>
       <if test="userId != null">

+ 35 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsUserRoleDao.xml

@@ -26,6 +26,10 @@
     where id = #{id,jdbcType=BIGINT}
   </select>
 
+  <select id="findAllByUserId" resultType="com.sckw.system.model.KwsUserRole">
+    select * from kws_user_role where user_id = #{userId}
+  </select>
+
   <insert id="insert" parameterType="com.sckw.system.model.KwsUserRole">
     insert into kws_user_role
     <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -94,6 +98,37 @@
     </trim>
   </insert>
 
+  <insert id="saveBatch" parameterType="com.sckw.system.model.KwsUserRole">
+    insert into kws_user_role
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      id,
+      user_id,
+      role_id,
+      remark,
+      status,
+      create_by,
+      create_time,
+      update_by,
+      update_time,
+      del_flag
+    </trim>
+    values
+    <foreach collection="list" item="item" separator=",">
+      <trim prefix="(" suffix=")" suffixOverrides=",">
+        #{item.id,jdbcType=BIGINT},
+        #{item.userId,jdbcType=BIGINT},
+        #{item.roleId,jdbcType=BIGINT},
+        #{item.remark,jdbcType=VARCHAR},
+        #{item.status,jdbcType=INTEGER},
+        #{item.createBy,jdbcType=BIGINT},
+        #{item.createTime,jdbcType=TIMESTAMP},
+        #{item.updateBy,jdbcType=BIGINT},
+        #{item.updateTime,jdbcType=TIMESTAMP},
+        #{item.delFlag,jdbcType=INTEGER}
+      </trim>
+    </foreach>
+  </insert>
+
   <update id="update" parameterType="com.sckw.system.model.KwsUserRole">
     update kws_user_role
     <set>