Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
@@ -94,7 +94,7 @@ * @return */ @GetMapping(MENU_BY_CODES) R<List<Menu>> getMenuByCodes(@RequestParam("codes") List<String> codes); R<List<Menu>> getMenuByCodes(@RequestParam("codes") List<String> codes,@RequestParam("userId") Long userId); /** * 获取用配置的主数据统计 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
@@ -38,7 +38,7 @@ } @Override public R<List<Menu>> getMenuByCodes(List<String> codes) { public R<List<Menu>> getMenuByCodes(List<String> codes,Long userId) { return R.fail("获取数据失败"); } Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java
@@ -148,5 +148,4 @@ return newList; } } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java
@@ -100,7 +100,6 @@ */ @PostMapping( "/copy") public R copyTemplate(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) { return plCodeClstemplateService.copyTemplate(codeClassifyDTO); } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -31,6 +31,7 @@ import com.vci.ubcs.code.service.ICodeClstemplateService; import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO; import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO; import com.vci.ubcs.common.constant.CommonConstant; import com.vci.ubcs.flow.core.entity.ProcessTemplate; import com.vci.ubcs.flow.core.feign.IFlowClient; import com.vci.ubcs.starter.exception.VciBaseException; @@ -627,6 +628,8 @@ codeClassifyTemplateDO_old.setTs(new Date()); codeClassifyTemplateDO_old.setCreateTime(new Date()); codeClassifyTemplateDO_old.setLastModifyTime(new Date()); // 复制的模板生命周期改为编辑中 codeClassifyDO_old.setLcStatus(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING); List<CodeClassifyTemplate> codeClassifyTemplateDOList = new ArrayList<>(); codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old); Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
@@ -12,6 +12,7 @@ import com.vci.ubcs.system.feign.ISysClient; import lombok.extern.slf4j.Slf4j; 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; @@ -54,7 +55,7 @@ */ @Override public List<MdmCount> getMdmCounts(String userId) throws ServiceException{ if(Func.isBlank(userId)){ if(Func.isBlank(userId) && Func.isBlank(AuthUtil.getUserId().toString())){ throw new ServiceException("必传参数用户id不能为空"); } /** 1、先查询出各分类顶层节点有哪些主数据,拿到业务类型名称,相当于拿到主数据表名 @@ -66,15 +67,15 @@ .isNull(CodeClassify::getParentCodeClassifyOid).select(CodeClassify::getBtmTypeId) .orderByAsc(CodeClassify::getBtmTypeId); List<CodeClassify> codeClassifies = codeClassifyService.list(wrapper); List<String> btyTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList()); List<String> btmTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList()); // 2、然后feign调用需要查询出菜单路由和图标 R<List<Menu>> menuList = sysClient.getMenuByCodes(btyTypeIds); if(!menuList.isSuccess() && menuList.getData().isEmpty()){ throw new ServiceException("获取主数据统计时,主数据菜单查询为空,原因:"+menuList.getMsg()); R<List<Menu>> menuList = sysClient.getMenuByCodes(btmTypeIds,Func.toLong(userId)); if(!menuList.isSuccess()){ throw new ServiceException("获取主数据统计时,主数据菜单查询失败,原因:"+menuList.getMsg()); } List<MdmCount> mdmCountList = new ArrayList<>(); // 3、查询当前登录的用户配置了那些主数据统计项 R<MdmCountConfig> mdmCountConfig = sysClient.getMdmCountConfig(userId); R<MdmCountConfig> mdmCountConfig = sysClient.getMdmCountConfig(Func.isBlank(userId) ? AuthUtil.getUserId().toString():userId); if(!mdmCountConfig.isSuccess()){ throw new ServiceException("获取主数据统计项配置时出现错误,原因:"+mdmCountConfig.getMsg()); } Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
@@ -74,8 +74,8 @@ */ @Override @GetMapping(MENU_BY_CODES) public R<List<Menu>> getMenuByCodes(List<String> codes) { return R.data(menuService.getMenuByCodes(codes)); public R<List<Menu>> getMenuByCodes(List<String> codes,Long userId) { return R.data(menuService.getMenuByCodes(codes,userId)); } @Override Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -175,11 +175,12 @@ List<Menu> getMenuButtonByType(String btmType); /** * 根据code查询菜单信息 * 根据code和用户id查询菜单信息 * @param codes * @param userId * @return */ List<Menu> getMenuByCodes(List<String> codes); List<Menu> getMenuByCodes(List<String> codes,Long userId); /** * 对KeepAlive值转换成布尔类型进行封装 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java
@@ -19,6 +19,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.vci.ubcs.system.entity.RoleMenu; import java.util.List; /** * 服务类 * @@ -26,4 +28,11 @@ */ public interface IRoleMenuService extends IService<RoleMenu> { /** * 根据用户id查询,被授权的菜单id * @param userId * @return */ List<Long> getMenuIdByUserId(Long userId); } Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MdmCountConfigServiceImpl.java
@@ -39,7 +39,7 @@ if(mdmCountConfigVO.getMdmNameList().isEmpty()) { return R.status(false); } if(mdmCountConfigVO.getMdmNameList().size() > 7){ if(mdmCountConfigVO.getMdmNameList().size() > 8){ return R.fail("显示的主数据配置项最多为8项"); } boolean res = false; Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -20,10 +20,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.vci.ubcs.starter.enumpack.CodeTableNameEnum; import com.vci.ubcs.starter.util.MybatisParameterUtil; import com.vci.ubcs.system.cache.NacosConfigCache; import com.vci.ubcs.system.cache.SysCache; import com.vci.ubcs.system.dto.MenuDTO; import com.vci.ubcs.system.entity.*; import com.vci.ubcs.system.user.entity.User; import com.vci.ubcs.system.user.feign.IUserClient; import com.vci.ubcs.system.vo.MenuVO; import com.vci.ubcs.system.mapper.MenuMapper; import com.vci.ubcs.system.service.IMenuService; @@ -47,6 +52,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import javax.management.relation.Role; import java.util.*; import java.util.stream.Collectors; @@ -314,16 +320,38 @@ /** * 根据code查询菜单信息 * @param codes * @param userId * @return */ @Override public List<Menu> getMenuByCodes(List<String> codes) { public List<Menu> getMenuByCodes(List<String> codes,Long userId) { if(codes.isEmpty()){ return new ArrayList<>(); } // 查询菜单信息 LambdaQueryWrapper<Menu> wrapper = Wrappers.<Menu>query() .lambda() .in(Menu::getCode, codes) .eq(Menu::getIsDeleted,0) /*未被删除*/ .eq(Menu::getCategory,1) /*菜单类型不能为按钮*/ .orderByAsc(Menu::getCode); /*根据code排序与classify的btmtypeid对应*/ // 超管不用根据角色来查询 if(!AuthUtil.getTenantId().equals(NacosConfigCache.getAdminUserInfo().getTenantId()) && !AuthUtil.getUserId().equals(NacosConfigCache.getAdminUserInfo().getUserId()) ){ if(Func.isBlank(userId.toString()) && Func.isBlank(AuthUtil.getUserId().toString())){ throw new ServiceException("获取用户id失败"); } List<Long> menuIds = roleMenuService.getMenuIdByUserId(userId); if(menuIds.isEmpty()){ return new ArrayList<>(); } if(menuIds.size()>=1000){ MybatisParameterUtil.cutInParameter(wrapper,Menu::getId,menuIds); }else { wrapper.in(Menu::getId,menuIds); } } return this.list(wrapper); } Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
@@ -16,11 +16,27 @@ */ package com.vci.ubcs.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vci.ubcs.starter.util.MybatisParameterUtil; import com.vci.ubcs.system.entity.RoleMenu; import com.vci.ubcs.system.mapper.RoleMenuMapper; import com.vci.ubcs.system.service.IRoleMenuService; import com.vci.ubcs.system.service.IRoleService; import com.vci.ubcs.system.user.entity.User; import com.vci.ubcs.system.user.feign.IUserClient; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 服务实现类 @@ -30,4 +46,41 @@ @Service public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements IRoleMenuService { @Resource private RoleMenuMapper roleMenuMapper; @Resource private IUserClient userClient; /** * 根据用户id查询,被授权的菜单id * @param userId * @return */ @Override public List<Long> getMenuIdByUserId(Long userId) { // 根据用户id查询菜单id R<User> userR = userClient.userInfoById((Func.isEmpty(userId) ? AuthUtil.getUserId():userId)); if (!userR.isSuccess() || Func.isEmpty(userR.getData())) { throw new ServiceException("用户信息查询失败,原因:"+userR.getMsg()); } // 当查询条件in大于一千条时 List<String> roleIdList = Func.toStrList(userR.getData().getRoleId()); //构建查询菜单id的查询条件 LambdaQueryWrapper<RoleMenu> roleMenuWrapper = Wrappers.<RoleMenu>query() .lambda().select(RoleMenu::getMenuId); if(roleIdList.size()>=1000){ MybatisParameterUtil.cutInParameter(roleMenuWrapper,RoleMenu::getRoleId,roleIdList); }else { roleMenuWrapper.in(RoleMenu::getRoleId,roleIdList); } List<RoleMenu> roleMenus = roleMenuMapper.selectList(roleMenuWrapper); if(roleMenus.isEmpty()){ return new ArrayList<>(); } return roleMenus.stream().map(RoleMenu::getMenuId).collect(Collectors.toList()); } }