package com.ydtech.modules.admin.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.aop.annotations.DynamicName; import com.ydtech.modules.admin.dao.SysAreaMapper; import com.ydtech.modules.admin.model.SysArea; import com.ydtech.modules.admin.model.vo.PersonAreaVo; import com.ydtech.modules.admin.model.vo.SysAreaVo; import com.ydtech.modules.admin.service.SysAreaService; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author Administrator * @description 针对表【sys_area(省市县代码)】的数据库操作Service实现 * @createDate 2023-11-15 11:23:28 */ @Service public class SysAreaServiceImpl extends ServiceImpl implements SysAreaService { @Override public List querySysArea() { List list = list(); List collect = list.stream().map(SysAreaVo::new).collect(Collectors.toList()); Map> map = collect.stream().collect(Collectors.groupingBy(SysAreaVo::getUpperCode)); collect.forEach(i -> i.setChild(map.getOrDefault(i.getAreaCode(), new ArrayList<>()))); return map.get("0"); } @Override public List queryByLevel(Integer level) { return baseMapper.selectList(new LambdaQueryWrapper().eq(SysArea::getLevel, level)); } //递归查询他的所有上级 @Override public List queryAllParent(SysArea sysArea) { List list = new ArrayList<>(); list.add(sysArea); if (sysArea.getLevel() == 1) { return list; } SysArea parent = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysArea::getAreaCode, sysArea.getUpperCode())); list.addAll(queryAllParent(parent)); return list; } //查询所有的上级 @Override public PersonAreaVo queryByAddress(String address, String idcard) { PersonAreaVo personAreaVo = new PersonAreaVo(); //获取县级全部区划数据 List sysAreaVos = this.queryByLevel(3); //被保人 赛选出的地址条件 List collect = sysAreaVos.stream().filter(item -> address.contains(item.getAreaCname())).collect(Collectors.toList()); //截取身份证的省级代码 String provincesCode = idcard.substring(0, 3); //获取省级的区划 if (!collect.isEmpty()) { List provincesArea = collect.stream() .filter(item -> item.getAreaCode().substring(0, 3).equals(provincesCode)) .collect(Collectors.toList()); //如果查不出来默认使用赛选出的第一个 if (provincesArea.isEmpty()) { provincesArea.add(collect.get(0)); } List sysAreas = this.queryAllParent(provincesArea.get(0)); //如果等于2 说明是直辖市 if (sysAreas.size() >= 2) { if (sysAreas.size() == 2) { personAreaVo.setCountyCode(sysAreas.get(0).getAreaCode()); personAreaVo.setCountyName(sysAreas.get(0).getAreaCname()); personAreaVo.setCityCode(sysAreas.get(0).getAreaCode()); personAreaVo.setCityName(sysAreas.get(0).getAreaCname()); personAreaVo.setProvinceCode(sysAreas.get(1).getAreaCode()); personAreaVo.setProvinceName(sysAreas.get(1).getAreaCname()); } else { personAreaVo.setCountyCode(sysAreas.get(0).getAreaCode()); personAreaVo.setCountyName(sysAreas.get(0).getAreaCname()); personAreaVo.setCityCode(sysAreas.get(1).getAreaCode()); personAreaVo.setCityName(sysAreas.get(1).getAreaCname()); personAreaVo.setProvinceCode(sysAreas.get(2).getAreaCode()); personAreaVo.setProvinceName(sysAreas.get(2).getAreaCname()); } return personAreaVo; } } personAreaVo.setProvinceCode(idcard.substring(0, 2) + "0000"); personAreaVo.setCityCode(idcard.substring(0, 4) + "00"); personAreaVo.setCountyCode(idcard.substring(0, 6)); return personAreaVo; } }