package com.ruoyi.project.service.impl; import java.util.Iterator; import java.util.List; import com.ruoyi.common.core.domain.AddressSelect; import com.ruoyi.common.core.domain.TreeSelect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.ArrayList; import java.util.stream.Collectors; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.mapper.BasePrcaddressDictMapper; import com.ruoyi.project.service.IBasePrcaddressDictService; import com.ruoyi.common.core.domain.entity.BasePrcaddressDict; /** * 省市区管理Service业务层处理 * * @author ruoyi * @date 2021-11-15 */ @Service public class BasePrcaddressDictServiceImpl extends ServiceImpl implements IBasePrcaddressDictService { @Autowired private BasePrcaddressDictMapper basePrcaddressDictMapper; /** * 查询省市区管理列表 * * @param basePrcaddressDict 省市区管理 * @return 省市区管理 */ @Override public List queryList(BasePrcaddressDict basePrcaddressDict) { LambdaQueryWrapper wrappers = Wrappers.lambdaQuery(); if (StringUtils.isNotBlank(basePrcaddressDict.getAreanumber())){ wrappers.eq(BasePrcaddressDict::getAreanumber ,basePrcaddressDict.getAreanumber()); } if (StringUtils.isNotBlank(basePrcaddressDict.getAreaname())){ wrappers.like(BasePrcaddressDict::getAreaname ,basePrcaddressDict.getAreaname()); } if (StringUtils.isNotBlank(basePrcaddressDict.getSuperiorareanumber())){ wrappers.eq(BasePrcaddressDict::getSuperiorareanumber ,basePrcaddressDict.getSuperiorareanumber()); } if (basePrcaddressDict.getArealv() != null){ wrappers.eq(BasePrcaddressDict::getArealv ,basePrcaddressDict.getArealv()); } if (StringUtils.isNotBlank(basePrcaddressDict.getPym())){ wrappers.eq(BasePrcaddressDict::getPym ,basePrcaddressDict.getPym()); } if (StringUtils.isNotBlank(basePrcaddressDict.getWbm())){ wrappers.eq(BasePrcaddressDict::getWbm ,basePrcaddressDict.getWbm()); } return this.list(wrappers); } @Override public List selectBasePrcaddressDictList(BasePrcaddressDict basePrcaddressDict) { return basePrcaddressDictMapper.selectBasePrcaddressDictList(basePrcaddressDict); } @Override public List buildAddressTreeSelect(List basePrcaddressDicts) { List addressTrees = buildAddressTree(basePrcaddressDicts); return addressTrees.stream().map(AddressSelect::new).collect(Collectors.toList()); } @Override public List buildAddressTree(List basePrcaddressDicts) { List returnList = new ArrayList(); List tempList = new ArrayList(); for (BasePrcaddressDict basePrcaddressDict : basePrcaddressDicts) { tempList.add(basePrcaddressDict.getAreanumber()); } for (Iterator iterator = basePrcaddressDicts.iterator(); iterator.hasNext();){ BasePrcaddressDict basePrcaddressDict = (BasePrcaddressDict) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(basePrcaddressDict.getSuperiorareanumber())) { recursionFn(basePrcaddressDicts, basePrcaddressDict); returnList.add(basePrcaddressDict); } } if (returnList.isEmpty()) { returnList = basePrcaddressDicts; } return returnList; } /** * 递归列表 */ private void recursionFn(List list, BasePrcaddressDict t) { // 得到子节点列表 List childList = getChildList(list, t); t.setChildren(childList); for (BasePrcaddressDict tChild : childList) { if (hasChild(list, tChild)) { recursionFn(list, tChild); } } } /** * 得到子节点列表 */ private List getChildList(List list, BasePrcaddressDict t) { List tlist = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { BasePrcaddressDict n = (BasePrcaddressDict) it.next(); if (StringUtils.isNotNull(n.getSuperiorareanumber()) && n.getSuperiorareanumber().equals(t.getAreanumber())) { tlist.add(n); } } return tlist; } /** * 判断是否有子节点 */ private boolean hasChild(List list, BasePrcaddressDict t) { return getChildList(list, t).size() > 0 ? true : false; } }