| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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<SysAreaMapper, SysArea>
- implements SysAreaService {
- @Override
- public List<SysAreaVo> querySysArea() {
- List<SysArea> list = list();
- List<SysAreaVo> collect = list.stream().map(SysAreaVo::new).collect(Collectors.toList());
- Map<String, List<SysAreaVo>> 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<SysArea> queryByLevel(Integer level) {
- return baseMapper.selectList(new LambdaQueryWrapper<SysArea>().eq(SysArea::getLevel, level));
- }
- //递归查询他的所有上级
- @Override
- public List<SysArea> queryAllParent(SysArea sysArea) {
- List<SysArea> list = new ArrayList<>();
- list.add(sysArea);
- if (sysArea.getLevel() == 1) {
- return list;
- }
- SysArea parent = baseMapper.selectOne(new LambdaQueryWrapper<SysArea>().eq(SysArea::getAreaCode, sysArea.getUpperCode()));
- list.addAll(queryAllParent(parent));
- return list;
- }
- //查询所有的上级
- @Override
- public PersonAreaVo queryByAddress(String address, String idcard) {
- PersonAreaVo personAreaVo = new PersonAreaVo();
- //获取县级全部区划数据
- List<SysArea> sysAreaVos = this.queryByLevel(3);
- //被保人 赛选出的地址条件
- List<SysArea> collect = sysAreaVos.stream().filter(item -> address.contains(item.getAreaCname())).collect(Collectors.toList());
- //截取身份证的省级代码
- String provincesCode = idcard.substring(0, 3);
- //获取省级的区划
- if (!collect.isEmpty()) {
- List<SysArea> provincesArea = collect.stream()
- .filter(item -> item.getAreaCode().substring(0, 3).equals(provincesCode))
- .collect(Collectors.toList());
- //如果查不出来默认使用赛选出的第一个
- if (provincesArea.isEmpty()) {
- provincesArea.add(collect.get(0));
- }
- List<SysArea> sysAreas = this.queryAllParent(provincesArea.get(0));
- sysAreas.sort((o1, o2) -> o2.getLevel() - o1.getLevel());
- //如果等于2 说明是直辖市
- if (sysAreas.size() >= 2) {
- if (sysAreas.size() == 2) {
- personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
- personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
- personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
- personAreaVo.setCityName(sysAreas.get(0).getAreaCname());
- personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
- personAreaVo.setCountyName(sysAreas.get(1).getAreaCname());
- } else {
- personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
- personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
- personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
- personAreaVo.setCityName(sysAreas.get(1).getAreaCname());
- personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(2).getAreaCode()));
- personAreaVo.setCountyName(sysAreas.get(2).getAreaCname());
- }
- return personAreaVo;
- }
- }
- personAreaVo.setProvinceCode(Integer.parseInt(idcard.substring(0, 2) + "0000"));
- personAreaVo.setCityCode(Integer.parseInt(idcard.substring(0, 4) + "00"));
- personAreaVo.setCountyCode(Integer.parseInt(idcard.substring(0, 6)));
- return personAreaVo;
- }
- }
|