Browse Source

1、优化企业树形接口

rayson 5 months ago
parent
commit
eec74b14ac

+ 2 - 5
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/permission/MdeDataScopeEnum.java

@@ -1,21 +1,18 @@
 package com.citu.module.menduner.system.enums.permission;
 
-import com.citu.framework.common.core.IntArrayValuable;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
-import java.util.Arrays;
-
 /**
  * 数据范围枚举类
- *
+ * <p>
  * 用于实现数据级别的权限
  *
  * @author Rayson
  */
 @Getter
 @AllArgsConstructor
-public enum MdeDataScopeEnum   {
+public enum MdeDataScopeEnum {
 
     ALL("1"), // 全部数据权限
 

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/config/permission/CustomDataPermissionRule.java

@@ -17,6 +17,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.sf.jsqlparser.expression.*;
 import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
+import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
 import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
 import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
 import net.sf.jsqlparser.expression.operators.relational.InExpression;
@@ -133,7 +134,7 @@ public class CustomDataPermissionRule implements DataPermissionRule {
         // // 目前,如果有指定数据 + 可查看自己,采用 OR 条件。即,WHERE (xx_id IN ? OR user_id = ?)
         // return new Parenthesis(new OrExpression(dataExpression, userExpression));
         // 改为 AND 条件。即,WHERE (xx_id IN ? and user_id = ?)
-        return new ParenthesedExpressionList(new AndExpression(dataExpression, userExpression));
+        return new ParenthesedExpressionList(new OrExpression(dataExpression, userExpression));
     }
 
     private Expression buildDataExpression(String tableName, Alias tableAlias, Set<Long> dataIds) {

+ 20 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/datapermission/config/DataPermissionConfiguration.java

@@ -1,6 +1,10 @@
 package com.citu.module.menduner.system.framework.datapermission.config;
 
 import com.citu.module.menduner.system.config.permission.CustomDataPermissionRuleCustomizer;
+import com.citu.module.menduner.system.dal.dataobject.interview.InterviewInviteDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
+import com.citu.module.menduner.system.dal.dataobject.order.TradeOrderDO;
 import com.citu.module.menduner.system.dal.dataobject.permission.MdeRoleDO;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -16,6 +20,22 @@ public class DataPermissionConfiguration {
     @Bean
     public CustomDataPermissionRuleCustomizer customDataPermissionRuleCustomizer() {
         return rule -> {
+
+            // 招聘职位表 where enterprise_id = xx and user_id = xx
+            rule.addDataColumn(JobAdvertisedDO.class);
+            rule.addUserColumn(JobAdvertisedDO.class);
+
+            // 简历投递表 where  enterprise_id = xx and publish_user_id = xx
+            rule.addDataColumn(JobCvRelDO.class);
+            rule.addUserColumn(JobCvRelDO.class, "publish_user_id");
+
+            // 面试邀约表 where enterprise_id = xx and invite_user_id = xx
+            rule.addDataColumn(InterviewInviteDO.class);
+            rule.addUserColumn(InterviewInviteDO.class, "invite_user_id");
+
+            // 交易订单表 where enterprise_id = xx and invite_user_id = xx
+            rule.addDataColumn(TradeOrderDO.class);
+            rule.addUserColumn(TradeOrderDO.class);
         };
     }
 

+ 14 - 15
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/EnterpriseServiceImpl.java

@@ -522,27 +522,25 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         if (null == parent) {
             return null;
         }
+        return buildTree(parent,null);
+    }
 
+    private AppRecruitEnterpriseTreeRespVO buildTree(EnterpriseDO parent, String path) {
         AppRecruitEnterpriseTreeRespVO resp = EnterpriseConvert.INSTANCE.convert17(parent);
-        List<AppRecruitEnterpriseTreeRespVO> children = new LinkedList<>();
-        // 遍历每一层
-        Collection<Long> parentIds = Collections.singleton(id);
-        for (int i = 0; i < Short.MAX_VALUE; i++) { // 使用 Short.MAX_VALUE 避免 bug 场景下,存在死循环
-            // 查询当前层,所有的子节点
-            List<EnterpriseDO> list = enterpriseMapper.selectListByParentId(parentIds);
-            // 1. 如果没有子节点,则结束遍历
-            if (CollUtil.isEmpty(list)) {
-                break;
-            }
-            // 2. 如果有子节点,继续遍历
-            children.addAll(EnterpriseConvert.INSTANCE.convertList3(list));
-            parentIds = convertSet(list, EnterpriseDO::getId);
+        if(null == path) {
+            resp.setPath(parent.getId().toString());
+        }else {
+            resp.setPath(path + "," + parent.getId());
         }
-        resp.setChildren(children);
+        List<EnterpriseDO> children = enterpriseMapper.selectListByParentId(Collections.singleton(parent.getId()));
+        List<AppRecruitEnterpriseTreeRespVO> childrenVOs = new LinkedList<>();
+        for (EnterpriseDO child : children) {
+            childrenVOs.add(buildTree(child,resp.getPath()));
+        }
+        resp.setChildren(childrenVOs);
         return resp;
     }
 
-
     /**
      * 递归查询子节点
      *
@@ -555,6 +553,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         return all.stream()
                 .filter(child -> Objects.equals(child.getParentId(), root.getId()))
                 .map(child -> {
+                    child.setPath(root.getPath() + "," + child.getId());
                     child.setChildren(getChildren(child, all));
                     return child;
                 })

+ 0 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/bind/EnterpriseUserBindServiceImpl.java

@@ -207,10 +207,6 @@ public class EnterpriseUserBindServiceImpl implements EnterpriseUserBindService
         } else {
             userBindDO.setPassword(encodePassword(userBindDO.getPassword()));
         }
-        EnterpriseUserBindDO adminUser = mapper.getAdminUser(userBindDO.getEnterpriseId());
-        if (null != adminUser) {
-            throw exception(MDE_ENTERPRISE_USER_BIND_ADMIN_EXISTS);
-        }
         mapper.insert(userBindDO);
         // 设置用户绑定企业角色
         if (checkIsAdmin(userBindDO)) {

+ 10 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/permission/MdePermissionServiceImpl.java

@@ -301,7 +301,7 @@ public class MdePermissionServiceImpl implements MdePermissionService {
         return roles;
     }
 
-    // ========== 用户-部门的相关方法  ==========
+    // ========== 用户-企业的相关方法  ==========
 
     @Override
     public void assignRoleDataScope(Long roleId, String dataScope, Set<Long> dataScopeDataIds) {
@@ -312,7 +312,7 @@ public class MdePermissionServiceImpl implements MdePermissionService {
     @DataPermission(enable = false) // 关闭数据权限,不然就会出现递归获取数据权限的问题
     public DataPermissionRespDTO getDataPermission(Long enterpriseId, Long userId) {
         DataPermissionRespDTO result = new DataPermissionRespDTO();
-        // 获得用户的部门编号的缓存,通过 Guava 的 Suppliers 惰性求值,即有且仅有第一次发起 DB 的查询
+        // 获得用户的企业编号的缓存,通过 Guava 的 Suppliers 惰性求值,即有且仅有第一次发起 DB 的查询
         EnterpriseUserBindDO enterpriseUserBind = enterpriseUserBindService
                 .selectByEnterpriseIdAndUserId(enterpriseId, userId);
         if (enterpriseUserBind == null) {
@@ -325,8 +325,12 @@ public class MdePermissionServiceImpl implements MdePermissionService {
         if (CollUtil.isEmpty(roles)) {
             result.setSelf(true);
             if(enterpriseUserBindService.checkIsAdmin(enterpriseUserBind)) {
-                // 管理员
-                result.setDataIds(Collections.singleton(enterpriseId));
+                // 管理员 数据权限是 当前企业以及下级
+                CollUtil.addAll(result.getDataIds(), enterpriseService
+                        .getChildEnterpriseIdListFromCache(enterpriseUserBind.getEnterpriseId()));
+                // 添加本身企业编号
+                CollUtil.addAll(result.getDataIds(), enterpriseUserBind
+                        .getEnterpriseId());
             }
             return result;
         }
@@ -345,7 +349,7 @@ public class MdePermissionServiceImpl implements MdePermissionService {
             // 情况二,DEPT_CUSTOM 自定义
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.ENTERPRISE_CUSTOM.getScope())) {
                 CollUtil.addAll(result.getDataIds(), role.getDataScopeEnterpriseIds());
-                // 自定义可见部门时,保证可以看到自己所在的部门。否则,一些场景下可能会有问题。
+                // 自定义可见企业时,保证可以看到自己所在的企业。否则,一些场景下可能会有问题。
                 // 例如说,登录时,基于 t_user 的 username 查询会可能被 dept_id 过滤掉
                 CollUtil.addAll(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 continue;
@@ -359,7 +363,7 @@ public class MdePermissionServiceImpl implements MdePermissionService {
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.ENTERPRISE_AND_CHILD.getScope())) {
                 CollUtil.addAll(result.getDataIds(), enterpriseService
                         .getChildEnterpriseIdListFromCache(enterpriseUserBind.getEnterpriseId()));
-                // 添加本身部门编号
+                // 添加本身企业编号
                 CollUtil.addAll(result.getDataIds(), enterpriseUserBind
                         .getEnterpriseId());
                 continue;