package com.whdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.whdc.mapper.AdinfoMapper; import com.whdc.model.entity.Adinfo; import com.whdc.model.vo.AdcdTree; import com.whdc.service.IAdinfoService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* @author xusan * @date 2024-05-11 */ @Service public class AdinfoServiceImpl extends ServiceImpl implements IAdinfoService { @Override public IPage page(Adinfo dto) { return baseMapper.page(new Page<>(), dto); } @Override public List find(Adinfo dto) { return baseMapper.find(dto); } /** * 行政区划树型查询 * 420116,001,002,000 * 6位区县,9位街道,12位组 * 省 市 县 * 42 28 22 100 011 100 * * @param adcd * @return */ // @Cacheable(cacheNames = {REDIS_KEY}, key = "getMethodName()", condition = "#adcd", unless = "false", cacheResolver = "redisExpireCacheResolver") public List tree(String adcd, String adnm) { List list = treeList(adcd, adnm); if (CollectionUtils.isNotEmpty(list)){ list = list.stream().sorted(Comparator.comparing(Adinfo::getAdcd) .reversed() ).collect(Collectors.toList()); } // 市 4205 00000000000 Map> city = new HashMap<>(); // 县 421122 000000000 Map> county = new HashMap<>(); List tree = new ArrayList<>(); for (Adinfo adinfo : list) { String ad = adinfo.getAdcd(); String nm = adinfo.getAdnm(); AdcdTree adcdTree = new AdcdTree().setAdcd(ad).setAdnm(nm).setAdcdChildren(new ArrayList<>()); // 判断行政区划编码 String provinceStr = ad.substring(0, 2); String cityStr = ad.substring(0, 4); if ("00000000000".equals(ad.substring(4))) { // 市 adcdTree.setAdlevel(1); adcdTree.setAdcdChildren(county.get(cityStr)); addTree(city, provinceStr, adcdTree); } else if ("000000000".equals(ad.substring(6))) { // 县 adcdTree.setAdlevel(2); addTree(county, cityStr, adcdTree); } } // 排序 return sorted(tree); } public List treeList(String adcd, String adnm) { if(StringUtils.isNotBlank(adcd) && adcd.endsWith("0000000000000")){ adcd = adcd.substring(0,2); } if (StringUtils.isNotBlank(adcd) && StringUtils.isNotBlank(adnm)) { // 需要查出层级数据 return baseMapper.selectByCdOrNm(adcd, adnm); } else { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(adcd)) { queryWrapper.like(Adinfo::getAdcd, adcd); } List adinfos = baseMapper.selectList(queryWrapper); return adinfos; // 查所有 } } private List sorted( List tree) { List sorteds = null; if (CollectionUtils.isNotEmpty(tree)){ sorteds = tree.stream().sorted(Comparator.comparing(AdcdTree::getAdcd) ).collect(Collectors.toList()); sorteds.forEach(o->{ o.setAdcdChildren(sorted(o.getAdcdChildren())); }); } return sorteds; } private void addTree(Map> data, String key, AdcdTree tree) { List trees = data.get(key); if (CollectionUtils.isEmpty(trees)) { trees = new ArrayList<>(); } trees.add(tree); data.put(key, trees); } }