package cn.huge.module.ctrole.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.ctrole.dao.mapper.CtRolefunMapper; import cn.huge.module.ctrole.domain.po.CtRolefun; import cn.huge.module.ctuser.domain.bo.RoleTreeBO; import cn.huge.module.cust.constant.UserBaseConsts; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @title: 客户角色菜单权限表业务逻辑处理 * @Description 客户角色菜单权限表业务逻辑处理 * @company hugeinfo * @author liyj * @Time 2024-08-19 20:04:19 * @version 1.0.0 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class CtRolefunService extends ServiceImpl{ @Autowired private CtRolefunMapper mapper; @Autowired private UtilsClientImpl utilsClient; /** * 更新对象 * @param entity 对象 */ public void updateCtRolefun(CtRolefun entity){ try{ mapper.updateCtRolefun(entity); }catch (Exception e){ log.error("[CtRolefunService.updateCtRolefun]调用失败,异常信息:"+e, e); throw new ServiceException("CtRolefunService.updateCtRolefun", e); } } /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ public void updateCtRolefunTerms(CtRolefun entity, Map terms){ try{ mapper.updateCtRolefunTerms(entity, terms); }catch (Exception e){ log.error("[CtRolefunService.updateCtRolefunTerms]调用失败,异常信息:"+e, e); throw new ServiceException("CtRolefunService.updateCtRolefunTerms", e); } } /** * 根据编号物理删除 * @param id 查询条件集合 */ public void deleteCtRolefun(String id){ try{ mapper.deleteCtRolefun(id); }catch (Exception e){ log.error("[CtRolefunService.deleteCtRolefun]调用失败,异常信息:"+e, e); throw new ServiceException("CtRolefunService.deleteCtRolefun", e); } } /** * 按条件查询 * @param terms 条件 * @return List */ public List listTerms(Map terms){ return mapper.listTerms(terms); } /** * 按条件统计 * @param terms 条件 * @return long */ public long countTerms(Map terms){ return mapper.countTerms(terms); } /** * 按条件分页查询 * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQuery(PageRequest page, Map terms){ long total = mapper.countTerms(terms); List content = mapper.pageTerms(page, terms); return new PageImpl(content, page, total); } /** * 新增或更新对象 * @param ctRolefun 实体对象 */ public void saveCtRolefun(CtRolefun ctRolefun){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(ctRolefun.getId())){ ctRolefun.setId(utilsClient.getNewTimeId()); ctRolefun.setCreateTime(nowDate); } ctRolefun.setUpdateTime(nowDate); this.saveOrUpdate(ctRolefun); }catch (Exception e){ log.error("[CtRolefunService.saveCtRolefun]调用失败,异常信息:"+e, e); throw new ServiceException("CtRolefunService.saveCtRolefun", e); } } /** * 查询角色树形结构 * @param roleId 角色编号 * @return List 树形结构 */ public List getRolefunTree(String roleId){ //查询所有的关系 Map terms = Maps.newHashMap(); terms.put("roleId",roleId); List rolefuns = mapper.listTerms(terms); List list = new ArrayList<>(); List treeBOS = new ArrayList<>(); if (rolefuns.size() > 0) { //第一级菜单集合 for (int i = 0; i < rolefuns.size(); i++) { // 一级菜单没有parentId if (BaseConsts.ROOT.equals(rolefuns.get(i).getParentId())) { list.add(rolefuns.get(i)); } } // 为一级菜单设置子菜单,getChild是递归调用的 for (CtRolefun rolefun : list) { RoleTreeBO treeBO = new RoleTreeBO(); treeBO.setLabel(rolefun.getPowerName()); treeBO.setValue(rolefun.getPowerId()); treeBO.setLabelType(rolefun.getPowerType()); treeBO.setAppClient(rolefun.getAppClient()); treeBO.setPowerTag(rolefun.getPowerTag()); treeBO.setPowerUrl(rolefun.getPowerUrl()); treeBO.setPowerIcon(rolefun.getPowerIcon()); treeBO.setChildren(getChild(rolefun.getPowerId(), rolefuns)); treeBOS.add(treeBO); } } return treeBOS; } /** * 递归查找子菜单 * @param id 当前菜单id * @param ctRolefuns 要查找的列表 * @return List 树形列表集合 */ private List getChild(String id, List ctRolefuns) { // 子菜单 List childList = new ArrayList<>(); for (CtRolefun rolefun : ctRolefuns) { // 遍历所有节点,将父菜单id与传过来的id比较 if (StringUtils.isNotBlank(rolefun.getParentId())) { if (rolefun.getParentId().equals(id)) { RoleTreeBO roleTree = new RoleTreeBO(); roleTree.setLabel(rolefun.getPowerName()); roleTree.setValue(rolefun.getPowerId()); roleTree.setLabelType(rolefun.getPowerType()); roleTree.setAppClient(rolefun.getAppClient()); roleTree.setPowerTag(rolefun.getPowerTag()); roleTree.setPowerUrl(rolefun.getPowerUrl()); roleTree.setPowerIcon(rolefun.getPowerIcon()); roleTree.setChildren(getChild(rolefun.getPowerId(), ctRolefuns)); childList.add(roleTree); } } } return childList; } }