From 63d93f64e7643624a4d078c0ac3ec3d465897b11 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期五, 29 十二月 2023 13:05:23 +0800 Subject: [PATCH] 分类授权:主题库定义按钮授权相关接口提交 --- Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java | 2 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java | 4 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeClassifyClient.java | 20 ++- Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeClassifyClient.java | 14 ++ Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml | 7 + Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java | 83 ++++++++++++++-- Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java | 7 + Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java | 58 +++++++++++ Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java | 6 + Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue | 6 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java | 5 + Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ClassifyAuthMapper.xml | 21 ++++ Source/UBCS/ubcs-service/ubcs-system/pom.xml | 6 + Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java | 7 + Source/UBCS-WEB/src/api/system/classifyAuth.js | 10 ++ Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java | 7 + 16 files changed, 239 insertions(+), 24 deletions(-) diff --git a/Source/UBCS-WEB/src/api/system/classifyAuth.js b/Source/UBCS-WEB/src/api/system/classifyAuth.js index 1955f55..41c12d6 100644 --- a/Source/UBCS-WEB/src/api/system/classifyAuth.js +++ b/Source/UBCS-WEB/src/api/system/classifyAuth.js @@ -16,4 +16,14 @@ method: 'post', data: data }) +} + +export const getAuthButtonList = (params) => { + return request({ + url: '/api/ubcs-system/classifyAuth/getAuthButtonList', + method: 'get', + params: { + ...params + } + }) } \ No newline at end of file diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue index daebd0c..429d8f1 100644 --- a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue +++ b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue @@ -96,7 +96,7 @@ // 瀵硅瘽妗嗘樉绀烘帶鍒� isShowDialog: this.visible, isLoading: false, - tableHeight: '520px', + tableHeight: 'calc(100vh - 550px)', classifyAuthData: [], //鍒楀ご classifyAuthHeader: [], @@ -160,7 +160,7 @@ let item = { oid: authData.oid, roleData: authData.roleId, - classifyItem: this.classifyData.text, + classifyItem: this.classifyData.label, uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d } //灏嗘寜閽缃繘鍘� @@ -191,7 +191,7 @@ addClassifyAuth() { let item = { roleData: this.roleList[0].id, - classifyItem: this.classifyData.text, + classifyItem: this.classifyData.label, uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d } //灏嗘寜閽缃繘鍘� diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeClassifyClient.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeClassifyClient.java index 210b71f..c2852e4 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeClassifyClient.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeClassifyClient.java @@ -21,7 +21,9 @@ import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO; import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.web.pagemodel.Tree; +import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.mp.support.BladePage; +import org.springblade.core.tool.api.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -37,7 +39,7 @@ * @since 2023-04-06 */ @FeignClient( - value = "ubcs-code" + value = AppConstant.APPLICATION_NAME_CODE ) public interface ICodeClassifyClient { @@ -45,7 +47,9 @@ String TOP = API_PREFIX + "/top"; String CODE_CLASSIFY_TREE=API_PREFIX+"/referCodeClassifyTree"; String CODE_ATTRIBUTE_LIST=API_PREFIX+"/listCodeAttributeByClassId"; + String CODE_ALL_PARENT_OID=API_PREFIX+"/selectAllParentOid"; String CODE_GETBYID="/getById"; + /** * 鑾峰彇涓婚搴撳畾涔夎〃鍒楄〃 * @@ -64,6 +68,14 @@ @PostMapping(CODE_CLASSIFY_TREE) public List<Tree> referCodeClassifyTree(@RequestBody TreeQueryObject treeQueryObject); + /** + * 鑾峰彇鎵�鏈変笂绾ц妭鐐圭殑oid + * @param oid + * @return + */ + @PostMapping(CODE_ALL_PARENT_OID) + public R<List<String> > selectAllParentOid(@RequestParam("oid") String oid); + /*** * 鑾峰彇涓绘暟鎹ā鏉垮睘鎬т俊鎭� * @param codeClassifyId diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java index fd445bf..29319f2 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java +++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java @@ -78,6 +78,7 @@ String STRATEGYBYID = API_PREFIX + "/query-userid"; String REGEX = API_PREFIX + "/combination-regex"; String REGEXONE = API_PREFIX + "/combination-regex-one"; + String GETVIEWCLASSIFY = API_PREFIX + "/get-view-classify"; /** * 鑾峰彇鑿滃崟 @@ -390,4 +391,7 @@ @PostMapping(REGEXONE) R<List<String>> getRegexByList(@RequestBody List<String> combinationIds); + @GetMapping(GETVIEWCLASSIFY) + R<List<String>> getViewClassByRoleIds(@RequestParam("roleIds") List<String> roleIds); + } diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java index eef6674..d88ac80 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java +++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java @@ -199,5 +199,10 @@ return R.fail("鑾峰彇鏁版嵁澶辫触"); } + @Override + public R<List<String>> getViewClassByRoleIds(List<String> roleIds) { + return R.fail("鑾峰彇鏁版嵁澶辫触"); + } + } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeClassifyClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeClassifyClient.java index f8172ec..43e60a9 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeClassifyClient.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeClassifyClient.java @@ -32,6 +32,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import com.vci.ubcs.code.service.ICodeClassifyService; +import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -51,11 +52,9 @@ @AllArgsConstructor public class CodeClassifyClient implements ICodeClassifyClient { - private final ICodeClassifyService plCodeClassifyService; - private final ICodeClassifyTemplateAttrService codeClassifyTemplateAttrService; - + private final ICodeClassifyService codeClassifyService; private final MdmEngineService engineService; - CodeClassifyMapper codeClassifyMapper; + private final CodeClassifyMapper codeClassifyMapper; @Override @GetMapping(TOP) @@ -67,6 +66,15 @@ return BladePage.of(page); } + /** + * 鑾峰彇鎵�鏈変笂绾ц妭鐐圭殑oid + * @param oid + * @return + */ + public R<List<String>> selectAllParentOid(String oid){ + return R.data(codeClassifyService.selectAllParentOid(oid)); + } + /*** * 鑾峰彇涓婚搴撳垎绫诲眰绾ф爲 * @param treeQueryObject @@ -75,7 +83,7 @@ @Override @PostMapping(CODE_CLASSIFY_TREE) public List<Tree> referCodeClassifyTree(TreeQueryObject treeQueryObject) { - return plCodeClassifyService.treeCodeClassify(treeQueryObject); + return codeClassifyService.treeCodeClassify(treeQueryObject); } @Override @@ -94,7 +102,7 @@ @Override @GetMapping(CODE_GETBYID) public CodeClassify getById(String classifyId) { - return plCodeClassifyService.getById(classifyId); + return codeClassifyService.getById(classifyId); } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java index d0b93e0..43038f3 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java @@ -53,6 +53,13 @@ Map<String,String> selectAllLevelChildOid(@Param("oid") String oid); /** + * 鏌ヨ鎵�鏈変笂灞傜埗鑺傜偣鐨刼id + * @param oid + * @return + */ + List<String> selectAllParentOid(@Param("oid") String oid); + + /** * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐� * * @param oid 鍒嗙被鐨勪富閿� diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java index 0372041..5ea88bb 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java @@ -224,6 +224,13 @@ List<CodeClassify> selectAllLevelParents(String oid); /** + * 鑾峰彇鎵�鏈変笂绾ц妭鐐圭殑oid + * @param oid + * @return + */ + List<String> selectAllParentOid(String oid); + + /** * 涓婚敭鑾峰彇涓婚搴撳垎绫� * @param oid 涓婚敭 * @return 涓婚搴撳垎绫绘樉绀哄璞� diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java index e021231..f2d1d0b 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java @@ -49,6 +49,7 @@ import com.vci.ubcs.starter.web.util.LangBaseUtil; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.cache.NacosConfigCache; +import com.vci.ubcs.system.feign.ISysClient; import org.apache.poi.hssf.util.HSSFColor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +93,7 @@ private IBtmTypeClient btmTypeClient; @Resource - private CommonsMapper commonsMapper; + private ISysClient sysClient; /** * 鏃ュ織 @@ -582,18 +583,67 @@ return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : ""); }); - - Iterator var6 = tree.listIterator(); - while(var6.hasNext()){ - Tree trees = (Tree) var6.next(); - boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid()); - if(checkHasChild){ - trees.setLeaf(false); - }else{ - trees.setLeaf(true); + //瓒呯鏄剧ず鎵�鏈夊垎绫� + if(VciBaseUtil.checkAdminTenant()){ + Iterator var6 = tree.listIterator(); + while(var6.hasNext()){ + Tree trees = (Tree) var6.next(); + boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid()); + if(checkHasChild){ + trees.setLeaf(false); + }else{ + trees.setLeaf(true); + } } + }else { + // 閭d簺鍒嗙被鍏峰鏌ョ湅鏉冮檺 + R<List<String>> viewClassByRoleIds = sysClient.getViewClassByRoleIds(Arrays.asList(AuthUtil.getUser().getRoleId().split(","))); + // 璇锋眰澶辫触鎴栬�呰姹傚緱鍒扮殑鍏峰鏌ョ湅鏉冮檺鐨勫垎绫籭d闆嗗悎涓虹┖ + if(!viewClassByRoleIds.isSuccess() && !viewClassByRoleIds.getData().isEmpty()){ + return new ArrayList<>(); + } + // 杩囨护 + filterTreeNodes(tree,viewClassByRoleIds.getData()); } return tree; + } + + /** + * 鍒嗙被鎺堟潈杩囨护鎺夋病鏈夋潈闄愮殑鍒嗙被 + * @param trees + * @param classifyIds + */ + private void filterTreeNodes(List<Tree> trees, List<String> classifyIds) { + Iterator<Tree> iterator = trees.iterator(); + while (iterator.hasNext()) { + Tree tree = iterator.next(); + Boolean checkHasChild = codeClassifyMapper.checkHasChild(tree.getOid()); + tree.setLeaf(!checkHasChild); + if (classifyIds.contains(tree.getOid())) { + // 濡傛灉椤跺眰鑺傜偣瀛樺湪浜� classifyIds 涓紝鐩存帴淇濈暀鍏跺瓙鑺傜偣闆嗗悎 + continue; + } + if (tree.getChildren() != null && !tree.getChildren().isEmpty()) { + filterTreeNodes(tree.getChildren(), classifyIds); + } + if (!hasMatchingChild(tree, classifyIds)) { + iterator.remove(); + } + } + } + + private boolean hasMatchingChild(Tree tree, List<String> classifyIds) { + if (classifyIds.contains(tree.getOid())) { + return true; + } + if (tree.getChildren() != null) { + for (Tree child : tree.getChildren()) { + if (hasMatchingChild(child, classifyIds)) { + return true; + } + } + } + return false; } /** @@ -1408,6 +1458,19 @@ } /** + * 鏌ヨ鎵�鏈変笂灞傜埗鑺傜偣鐨刼id + * @param oid + * @return + */ + @Override + public List<String> selectAllParentOid(String oid){ + if(Func.isBlank(oid)){ + return new ArrayList<>(); + } + return this.codeClassifyMapper.selectAllParentOid(oid); + } + + /** * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭� * * @param codeClassifyOid 鍒嗙被鐨勪富閿� diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml index 049f925..870f09a 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml @@ -60,6 +60,13 @@ PRIOR OID = parentCodeClassifyOid </select> + <select id="selectAllParentOid" resultType="java.lang.String"> + SELECT oid + FROM PL_CODE_CLASSIFY + START WITH oid = #{oid} + CONNECT BY PRIOR PARENTCODECLASSIFYOID = oid + </select> + <select id="checkHasChild" resultType="java.lang.Boolean"> <![CDATA[select count(oid) from PL_CODE_CLASSIFY diff --git a/Source/UBCS/ubcs-service/ubcs-system/pom.xml b/Source/UBCS/ubcs-service/ubcs-system/pom.xml index 16e06e5..b91d2f6 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/pom.xml +++ b/Source/UBCS/ubcs-service/ubcs-system/pom.xml @@ -55,6 +55,12 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>com.vci.ubcs</groupId> + <artifactId>ubcs-code-api</artifactId> + <version>3.0.1.RELEASE</version> + <scope>compile</scope> + </dependency> </dependencies> <build> diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java index 20ddb06..f96ff31 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java @@ -62,6 +62,8 @@ private final IMdmCountConfigService mdmCountConfigService; + private final IClassifyAuthService classifyAuthService; + @Override @GetMapping(MENU) public R<Menu> getMenu(Long id) { @@ -262,4 +264,8 @@ return R.data(mdmCountConfigService.getMdmCountConfig(userId)); } + public R<List<String>> getViewClassByRoleIds(List<String> roleIds){ + return R.data(classifyAuthService.getViewClassByRoleIds(roleIds)); + } + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java index 64418b0..0333c0b 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java @@ -14,4 +14,6 @@ List<ClassifyAuth> getClassifyAuthList(@Param("classifyId") String classifyId); + List<String> getViewClassByRoleIds(@Param("roleIds") List<String> roleIds); + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java index 71805b1..7fcb85f 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java @@ -37,4 +37,11 @@ */ Map<String,Boolean> getAuthButtonList(String classifyId); + /** + * 鏍规嵁瑙掕壊id鏌ョ湅鏈夊摢浜涘垎绫诲叿澶囨煡鐪嬫潈闄� + * @param roleIds + * @return + */ + List<String> getViewClassByRoleIds(List<String> roleIds); + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java index 0eb2627..b9350dc 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vci.ubcs.code.feign.ICodeClassifyClient; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.entity.ClassifyAuth; import com.vci.ubcs.system.entity.Menu; @@ -37,6 +38,8 @@ private final IMenuService menuService; + private final ICodeClassifyClient codeClassifyClient; + /** * 鍒嗙被鎺堟潈淇濆瓨鎺ュ彛 * @param classifyAuthList @@ -48,6 +51,17 @@ if(classifyAuthList.isEmpty()){ R.fail("鎺堟潈鍒楄〃涓嶈兘涓虹┖锛�"); } + // 鍒ら噸锛屾煡鐪嬫槸鍚﹀瓨鍦ㄥ悓涓�涓猚lassid涓嬮厤缃簡鐩稿悓鐨勮鑹� + Map<String, Long> roleidCounts = classifyAuthList.stream() + .collect(Collectors.groupingBy(ClassifyAuth::getRoleId, Collectors.counting())); + + // 妫�鏌ユ槸鍚︽湁roleid鍑虹幇娆℃暟澶т簬1鐨勬儏鍐� + boolean hasDuplicateRoleid = roleidCounts.values().stream() + .anyMatch(count -> count > 1); + if(hasDuplicateRoleid){ + R.fail("瑙掕壊鍜屽垎绫诲凡缁忓瓨鍦紝璇烽噸鏂伴厤缃紒"); + } + // 濡傛灉浼犺繃鏉ョ殑闆嗗悎涓鍒嗙被id涓嬪垹闄や簡閮ㄥ垎瑙掕壊鐨勬巿鏉冿紝灏遍渶瑕佸皢璇ュ簱涓璫lassifyId涓嬩笉瀛樺湪鐨勬暟鎹垹鎺� List<String> roleIds = classifyAuthList.stream().map(ClassifyAuth::getRoleId).collect(Collectors.toList()); // 鍒犻櫎 @@ -75,10 +89,10 @@ LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()); List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); - if(!classifyAuths.isEmpty()){ - return ClassifyAuthWrapper.build().listVO(classifyAuths); + if(classifyAuths.isEmpty()){ + return new ArrayList<ClassifyAuthVO>(); } - return new ArrayList<ClassifyAuthVO>(); + return ClassifyAuthWrapper.build().listVO(classifyAuths); } /** @@ -87,12 +101,37 @@ * @return */ public Map<String,Boolean> getAuthButtonList(String classifyId){ + if(Func.isBlank(classifyId)){ + return new HashMap<>(); + } + //鏌ヨ鍒嗙被鑺傜偣鐨勬墍鏈夌埗绾ц妭鐐� + R<List<String>> listR = codeClassifyClient.selectAllParentOid(classifyId); + if (!listR.isSuccess() && !listR.getData().isEmpty()) { + throw new ServiceException("鑾峰彇鍒嗙被淇℃伅澶辫触锛�"); + } + // 杩斿洖鐨勫垎绫籵id鏄綋鍓嶈妭鐐逛负绗竴涓紝鍚庨潰渚濇鏄粬鐨勪笂灞傝妭鐐� + List<String> classifyOidList = listR.getData(); final String roleIds = AuthUtil.getUser().getRoleId(); // 鍏堟煡璇㈡寜閽甶d鍒楄〃 LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() .lambda().eq(ClassifyAuth::getClassifyId, classifyId) .in(ClassifyAuth::getRoleId, roleIds); List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); + //濡傛灉褰撳墠鍒嗙被娌℃湁鎵惧埌鎺堟潈閰嶇疆锛屽氨渚濇浠庡綋鍓嶈妭鐐瑰線涓婂眰鑺傜偣鎵炬巿鏉冮厤缃紝鎵惧埌浜嗗氨鍋滄锛屾病鎵惧埌灏变竴鐩存壘鍒版渶鍚� + if(classifyAuths.isEmpty()){ + // 涓嬫爣浠�1寮�濮嬪洜涓哄綋鍓嶈妭鐐�0宸茬粡鏌ヨ杩� + for (int i = 1; i < classifyOidList.size(); i++) { + classifyAuths = this.classifyAuthMapper.selectList( + Wrappers.<ClassifyAuth>query() + .lambda().eq(ClassifyAuth::getClassifyId, classifyOidList.get(i)) + .in(ClassifyAuth::getRoleId, roleIds) + ); + if(!classifyAuths.isEmpty()){ + break; + } + } + } + //鍑虹幇浜嗛敊璇暟鎹紝鍚屼竴涓鑹插拰鍚屼竴涓垎绫籭d瀛樺湪澶氭潯鎺堟潈璁板綍 if(classifyAuths.size()>1){ throw new ServiceException("瑙掕壊鍜屽垎绫婚厤缃瓨鍦ㄥ鏉¤褰曪紝璇疯仈绯荤鐞嗕汉鍛樻竻鐞嗛敊璇厤缃紒"); } @@ -116,4 +155,17 @@ return buttonMaps; } + /** + * 鏍规嵁瑙掕壊id鏌ョ湅鏈夊摢浜涘垎绫诲叿澶囨煡鐪嬫潈闄� + * @param roleIds + * @return + */ + @Override + public List<String> getViewClassByRoleIds(List<String> roleIds) { + if(roleIds.isEmpty()){ + return new ArrayList<>(); + } + return this.classifyAuthMapper.getViewClassByRoleIds(roleIds); + } + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ClassifyAuthMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ClassifyAuthMapper.xml index 7df2173..3f4c681 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ClassifyAuthMapper.xml +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ClassifyAuthMapper.xml @@ -9,7 +9,26 @@ </resultMap> <select id="getClassifyAuthList" resultMap="classifyAuthMap"> - SELECT * FROM PL_ORG_CLASSIFYAUTH WHERE CLASSIFY_ID = #{classifyId}; + SELECT * + FROM PL_ORG_CLASSIFYAUTH + WHERE CLASSIFY_ID = #{classifyId}; + </select> + + + <select id="getViewClassByRoleIds" resultType="java.lang.String"> + SELECT CLASSIFY_ID + FROM PL_ORG_CLASSIFYAUTH + WHERE + <if test="roleIds != null and ! roleIds.isEmpty() and roleIds.size() > 0"> + ROLE_ID IN + <foreach item="item" index="index" collection="roleIds" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + AND BUTTON_IDS LIKE CONCAT('%', CONCAT((SELECT ID + FROM PL_SYS_MENU + WHERE CODE = 'classify_view'), '%')) + </select> -- Gitblit v1.9.3