package com.ozs.base.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ozs.base.domain.BaseProfessional; import com.ozs.base.domain.vo.BaseProfessionalVo; import com.ozs.base.mapper.BaseProfessionalMapper; import com.ozs.base.service.BaseProfessionalService; import com.ozs.common.core.domain.entity.SysDictType; import com.ozs.common.exception.ServiceException; import com.ozs.common.utils.DictUtils; import com.ozs.common.utils.bean.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class BaseProfessionalServiceImpl extends ServiceImpl implements BaseProfessionalService { @Autowired private BaseProfessionalMapper baseProfessionalMapper; @Override public void deleteIds(List deleteIds) { for (Integer deleteId : deleteIds) { BaseProfessional baseProfessional = baseProfessionalMapper.selectById(deleteId); List baseProfessionalList = baseProfessionalMapper.selectByParentCode(baseProfessional.getProfessionalCode()); // int ii = baseProfessionalMapper.countByParentCode(baseProfessional.getProfessionalCode()); if (baseProfessionalList.size() > 0) { throw new ServiceException(String.format("%1$s已有子级,不能删除", baseProfessional.getProfessionalName())); } baseProfessionalMapper.deleteById(deleteId); } } @Override public List selectBaseProfessional(BaseProfessionalVo baseProfessionalVo) { List allList = baseProfessionalMapper.selectBaseProfessional(baseProfessionalVo); // 将实体类转换为Vo类 List allListVo = BeanUtils.entityListToVOList(allList, BaseProfessionalVo.class); List treeList = buildTree(allListVo); return treeList; } /** * 构建树形结构 * * @return */ public static List buildTree(List allList) { //创建集合封装最终数据 List trees = new ArrayList<>(); //遍历所有菜单集合 for (BaseProfessionalVo baseProfessional : allList) { //找到递归入口,parentId=0 if (baseProfessional.getParentCode().equals("0")) { trees.add(findChildren(baseProfessional, allList)); } } return trees; } /** * 从根节点进行递归查询,查询子节点 * 判断 编码 = 父级编码是否相同,如果相同是子节点,进行数据封装 */ private static BaseProfessionalVo findChildren(BaseProfessionalVo baseProfessional, List allList) { //数据初始化 baseProfessional.setBaseProfessionalVoList(new ArrayList()); //遍历递归查找 for (BaseProfessionalVo it : allList) { if (baseProfessional.getProfessionalCode().equals(it.getParentCode())) { if (baseProfessional.getBaseProfessionalVoList() == null) { baseProfessional.setBaseProfessionalVoList(new ArrayList<>()); } baseProfessional.getBaseProfessionalVoList().add(findChildren(it, allList)); } } return baseProfessional; } }