From c65befd0d8d18d0aa7ed261980069750c23d156f Mon Sep 17 00:00:00 2001 From: caihaohan Date: Thu, 11 Apr 2024 09:14:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=96=E6=A0=87=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=88=97=E8=A1=A8=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/ISysDepartService.java | 7 ++ .../service/impl/SysDepartServiceImpl.java | 33 ++++++++ .../service/impl/LawsCommonServiceImpl.java | 81 ++++++++++++++++--- 3 files changed, 111 insertions(+), 10 deletions(-) diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java index 96f4fb19..5b76c9d8 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java @@ -156,4 +156,11 @@ public interface ISysDepartService extends IService{ * @return */ List queryDeptByPid(String pid); + + /** + * 获取所有节点的Id + * @param departList + * @return + */ + List getAllId(List departList); } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java index 53e1afda..629927fc 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java @@ -558,6 +558,39 @@ public class SysDepartServiceImpl extends ServiceImpl getAllId(List departList) { + List ids = new ArrayList<>(); + for (SysDepartTreeModel depart : departList) { + collectIds(depart, ids); + } + return ids; + } + + /** + * 递归收集节点ID + * @param node 当前节点 + * @param ids 收集到的ID列表 + */ + private static void collectIds(SysDepartTreeModel node, List ids) { + if (node == null) { + return; + } + ids.add(node.getId()); // 添加当前节点的ID + List children = node.getChildren(); + if (children != null) { + for (SysDepartTreeModel child : children) { + collectIds(child, ids); // 递归处理子节点 + } + } + } + /** * 根据关键字筛选部门信息 * @param keyWord diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index a8954bcd..bbf4b509 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -1,6 +1,7 @@ package com.jero.modules.laws.common.service.impl; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; @@ -32,6 +33,7 @@ import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit; import com.jero.modules.laws.documenttool.mapper.DocumentSplitMapper; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardInspectContent; +import com.jero.modules.laws.enterprise.mapper.EnterpriseStandardAuthUserMapper; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardInspectContentService; @@ -52,11 +54,13 @@ import com.jero.modules.personal.service.ILawsStandardCollectionService; import com.jero.modules.split.common.FileUnZip; import com.jero.modules.split.entity.SarFileSplitInfoEO; import com.jero.modules.split.service.ISarFileSplitInfoService; +import com.jero.modules.sys.service.ILawsGradeService; import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysDictItemService; +import com.jero.modules.system.service.ISysUserDepartService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.util.SysWaterMarkUtil; import com.jero.modules.system.util.UserUtils; @@ -201,6 +205,24 @@ public class LawsCommonServiceImpl implements ILawsCommonService { DECRYPT_SECRET_KEY = decryptSecretKey; } + @Resource + private ISysUserService sysUserRoleService; + + @Resource + private ISysUserDepartService sysUserDepartService; + + @Resource + private ILawsGradeService gradeService; + + @Resource + private EnterpriseStandardAuthUserMapper authUserMapper; + + @Value("#{'${adminRoleCode}'.split(',')}") + private List adminRoleCodeList; + + @Value("#{'${enterpriseDetailRoleCode}'.split(',')}") + private List enterpriseDetailRoleCodeList; + /** * @Author: liao * @Date: 2023/8/23 16:57 @@ -913,7 +935,8 @@ public class LawsCommonServiceImpl implements ILawsCommonService { lawsNodeRelationService.addRelation(standardSystem, standardNumber, id); // 企标授权部门处理 - if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(module)) { + if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(module) || + TableNameEnum.FOREIGN_REGULATIONS.getValue().equals(module)) { Object authDept = parameterMap.get(FieldCommon.AUTH_DEPT); if (authDept != null) { esAuthUserService.resetAuthDept(id, parameterMap.get(FieldCommon.AUTH_DEPT).toString()); @@ -1302,7 +1325,8 @@ public class LawsCommonServiceImpl implements ILawsCommonService { List authDeptList = enterpriseAuthDeptService.list(authDeptWrapper); // 将authDeptList的所有auth_dept取出来转换成逗号拼接的字符串 - if (module.equals(TableNameEnum.ENTERPRISE_STANDARDS.getValue())) { + if (module.equals(TableNameEnum.ENTERPRISE_STANDARDS.getValue()) || + module.equals(TableNameEnum.FOREIGN_REGULATIONS.getValue())) { String authDept = authDeptList.stream().map(EnterpriseStandardAuthDept::getAuthDept) .collect(Collectors.joining(",")); initMap.put(FieldCommon.AUTH_DEPT, authDept); @@ -2092,7 +2116,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { // 拼接多表关联查询条件 Set idSet = new HashSet<>(); boolean idSearch = false; - // 企标独有权限 + // 授权部门 if (module.equals(TableNameEnum.ENTERPRISE_STANDARDS.getValue())) { // 授权部门 String authDept = (String) parameterMap.get(FieldCommon.AUTH_DEPT); @@ -2106,15 +2130,52 @@ public class LawsCommonServiceImpl implements ILawsCommonService { parameterMap.remove(FieldCommon.AUTH_DEPT); } } - if (module.equals(TableNameEnum.FOREIGN_REGULATIONS.getValue())) { - // 外标判断当前登陆人是不是汽车研究总院及子部门的员工,如果是则可以查看引进标准,不做任何操作 - // 如果不是则需要将引进标准的id从所有id中排除掉 + // 外标引用标准 + // 如果当前登陆人是那几种管理员角色,则不需要授权部门筛选 + String userId = UserUtils.getUserId(); + SysUser user = sysUserService.getById(userId); + // 管理员有所有外标的权限 + List roleList = sysUserRoleService.getRole(user.getUsername()); + adminRoleCodeList.addAll(enterpriseDetailRoleCodeList); + if (module.equals(TableNameEnum.FOREIGN_REGULATIONS.getValue()) + && roleList != null + && roleList.stream().noneMatch(adminRoleCodeList::contains)) { // 获取汽车研发总院及其所有子部门 List departList = departService.queryTreeByKeyWord("汽车研究总院"); - List departIdList = departList.stream().map(SysDepartTreeModel::getId).collect(Collectors.toList()); - String userId = UserUtils.getUserId(); -// sysUserService.getUserByDepIds() - + List departIdList = departService.getAllId(departList); + List userByDepIds = sysUserService.getUserByDepIds(departIdList, user.getUsername()); + List list = lawsOverseasStandardService.list(); + List allFbIdList = list.stream().map(LawsOverseasStandard::getId).collect(Collectors.toList()); + LambdaQueryWrapper treeNodeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + treeNodeLambdaQueryWrapper.eq(LawsTreeNode::getNodeName, "引进标准"); + treeNodeLambdaQueryWrapper.eq(LawsTreeNode::getModuleCode, TableNameEnum.FOREIGN_REGULATIONS.getValue()); + LawsTreeNode node = lawsTreeNodeService.getOne(treeNodeLambdaQueryWrapper); + // 获取引进标准的id + LambdaQueryWrapper nodeRelationLambdaQueryWrapper = new LambdaQueryWrapper<>(); + nodeRelationLambdaQueryWrapper.eq(LawsNodeRelation::getNodeId, node.getId()); + List fbList = lawsNodeRelationService.list(nodeRelationLambdaQueryWrapper); + List fbIdList = fbList.stream().map(LawsNodeRelation::getUniqueRelationFlag).collect(Collectors.toList()); + idSearch = true; + // 外标判断当前登陆人是不是汽车研究总院及子部门的员工,如果是则根据授权部门进行权限限制 + // 如果不是则需要将引进标准的id从所有id中排除掉 + if (!CollectionUtils.isEmpty(userByDepIds)) { + LambdaQueryWrapper esAdWrapper = new LambdaQueryWrapper<>(); + // 查询当前用户的部门 + List userDepartList = departService.queryUserDeparts(user.getId()); + // 找出授权部门表有的数据 + List userDepartIdList = userDepartList.stream().map(SysDepart::getId).collect(Collectors.toList()); + esAdWrapper.in(!userDepartIdList.isEmpty(), EnterpriseStandardAuthDept::getAuthDept, userDepartIdList); + esAdWrapper.in(!fbIdList.isEmpty(), EnterpriseStandardAuthDept::getStandardId, fbIdList); + esAdWrapper.isNull(EnterpriseStandardAuthDept::getAuthExpireDate); + List authDeptFb = enterpriseAuthDeptService.list(esAdWrapper); + List authDeptIdList = authDeptFb.stream().map(EnterpriseStandardAuthDept::getStandardId).collect(Collectors.toList()); + if (fbIdList.size() == authDeptIdList.size()) { + idSearch = false; + } + fbIdList.removeAll(authDeptIdList); + } + allFbIdList.removeAll(fbIdList); + idSet.addAll(allFbIdList); } // 体系 String standardSystem = (String) parameterMap.get(FieldCommon.STANDARD_SYSTEM);