¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.ubcs.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | 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; |
| | | import com.vci.ubcs.system.mapper.ClassifyAuthMapper; |
| | | import com.vci.ubcs.system.service.IClassifyAuthService; |
| | | import com.vci.ubcs.system.service.IMenuService; |
| | | import com.vci.ubcs.system.vo.ClassifyAuthVO; |
| | | import com.vci.ubcs.system.vo.MenuVO; |
| | | import com.vci.ubcs.system.wrapper.ClassifyAuthWrapper; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * åç±»ææ |
| | | * @author ludc |
| | | * @date 2023/12/25 15:35 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class ClassifyAuthServiceImpl extends ServiceImpl<ClassifyAuthMapper,ClassifyAuth> implements IClassifyAuthService { |
| | | |
| | | private final ClassifyAuthMapper classifyAuthMapper; |
| | | |
| | | private final IMenuService menuService; |
| | | |
| | | private final ICodeClassifyClient codeClassifyClient; |
| | | |
| | | /** |
| | | * åç±»ææä¿åæ¥å£ |
| | | * @param classifyAuthList |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R submit(List<ClassifyAuth> classifyAuthList) { |
| | | if(classifyAuthList.isEmpty()){ |
| | | R.fail("ææå表ä¸è½ä¸ºç©ºï¼"); |
| | | } |
| | | // å¤éï¼æ¥çæ¯å¦åå¨åä¸ä¸ªclassidä¸é
ç½®äºç¸åçè§è² |
| | | 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ä¸å é¤äºé¨åè§è²çææï¼å°±éè¦å°è¯¥åºä¸classifyIdä¸ä¸åå¨çæ°æ®å æ |
| | | List<String> roleIds = classifyAuthList.stream().map(ClassifyAuth::getRoleId).collect(Collectors.toList()); |
| | | // å é¤ |
| | | LambdaUpdateWrapper<ClassifyAuth> updateWrapper = Wrappers.<ClassifyAuth>update() |
| | | .lambda().eq(ClassifyAuth::getClassifyId, classifyAuthList.get(0).getClassifyId()) |
| | | .notIn(ClassifyAuth::getRoleId, roleIds); |
| | | try { |
| | | this.classifyAuthMapper.delete(updateWrapper); |
| | | }catch (Exception e){ |
| | | throw new ServiceException("åç±»ææè¿ç¨ä¸åºç°é误ï¼é误åå ï¼"+e.getMessage()); |
| | | } |
| | | return R.status(saveOrUpdateBatch(classifyAuthList)); |
| | | } |
| | | |
| | | /** |
| | | * è·ååç±»ææéå |
| | | * @param classifyAuthVO |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ClassifyAuthVO> getClassifyAuthList(ClassifyAuthVO classifyAuthVO) { |
| | | if(Func.isBlank(classifyAuthVO.getClassifyId())){ |
| | | throw new ServiceException("缺å°å¿
ä¼ åæ°åç±»id"); |
| | | } |
| | | LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() |
| | | .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()); |
| | | List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); |
| | | if(classifyAuths.isEmpty()){ |
| | | return new ArrayList<ClassifyAuthVO>(); |
| | | } |
| | | return ClassifyAuthWrapper.build().listVO(classifyAuths); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢è¯¥åç±»ä¸ï¼å½åç»å½çè§è²æåªäºæé®æé |
| | | * @param classifyId |
| | | * @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("è·åå类信æ¯å¤±è´¥ï¼"); |
| | | } |
| | | // è¿åçåç±»oidæ¯å½åèç¹ä¸ºç¬¬ä¸ä¸ªï¼åé¢ä¾æ¬¡æ¯ä»çä¸å±èç¹ |
| | | List<String> classifyOidList = listR.getData(); |
| | | final String roleIds = AuthUtil.getUser().getRoleId(); |
| | | // å
æ¥è¯¢æé®idå表 |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | //åºç°äºéè¯¯æ°æ®ï¼åä¸ä¸ªè§è²ååä¸ä¸ªåç±»idåå¨å¤æ¡ææè®°å½ |
| | | if(classifyAuths.size()>1){ |
| | | throw new ServiceException("è§è²ååç±»é
ç½®åå¨å¤æ¡è®°å½ï¼è¯·è系管çäººåæ¸
çé误é
ç½®ï¼"); |
| | | } |
| | | // æ¯å¦ä¸ºè¶
管 |
| | | Boolean isAdmin = VciBaseUtil.checkAdminTenant(); |
| | | // æªé
ç½®æé®æé |
| | | if(!isAdmin && (classifyAuths.isEmpty() || Func.isBlank(classifyAuths.get(0).getButtonIds()))){ |
| | | return new HashMap<>(); |
| | | } |
| | | List<String> condition1 = new ArrayList<>(); |
| | | // 妿䏿¯è¶
ç®¡ç¨æ· |
| | | if(!isAdmin){ |
| | | condition1.addAll(Arrays.asList(classifyAuths.get(0).getButtonIds().split(","))); |
| | | } |
| | | List<Menu> menuList = menuService.getMenuListById(condition1,"1648879284590858241"); |
| | | if(menuList.isEmpty()){ |
| | | return new HashMap<>(); |
| | | } |
| | | Map<String, Boolean> buttonMaps = menuList.stream() |
| | | .collect(Collectors.toMap(Menu::getCode, menu -> true)); |
| | | 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); |
| | | } |
| | | |
| | | } |