SysAreaServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.ydtech.modules.admin.dao.SysAreaMapper;
  5. import com.ydtech.modules.admin.model.SysArea;
  6. import com.ydtech.modules.admin.model.vo.PersonAreaVo;
  7. import com.ydtech.modules.admin.model.vo.SysAreaVo;
  8. import com.ydtech.modules.admin.service.SysAreaService;
  9. import org.springframework.stereotype.Service;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.stream.Collectors;
  14. /**
  15. * @author Administrator
  16. * @description 针对表【sys_area(省市县代码)】的数据库操作Service实现
  17. * @createDate 2023-11-15 11:23:28
  18. */
  19. @Service
  20. public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea>
  21. implements SysAreaService {
  22. @Override
  23. public List<SysAreaVo> querySysArea() {
  24. List<SysArea> list = list();
  25. List<SysAreaVo> collect = list.stream().map(SysAreaVo::new).collect(Collectors.toList());
  26. Map<String, List<SysAreaVo>> map = collect.stream().collect(Collectors.groupingBy(SysAreaVo::getUpperCode));
  27. collect.forEach(i -> i.setChild(map.getOrDefault(i.getAreaCode(), new ArrayList<>())));
  28. return map.get("0");
  29. }
  30. @Override
  31. public List<SysArea> queryByLevel(Integer level) {
  32. return baseMapper.selectList(new LambdaQueryWrapper<SysArea>().eq(SysArea::getLevel, level));
  33. }
  34. //递归查询他的所有上级
  35. @Override
  36. public List<SysArea> queryAllParent(SysArea sysArea) {
  37. List<SysArea> list = new ArrayList<>();
  38. list.add(sysArea);
  39. if (sysArea.getLevel() == 1) {
  40. return list;
  41. }
  42. SysArea parent = baseMapper.selectOne(new LambdaQueryWrapper<SysArea>().eq(SysArea::getAreaCode, sysArea.getUpperCode()));
  43. list.addAll(queryAllParent(parent));
  44. return list;
  45. }
  46. //查询所有的上级
  47. @Override
  48. public PersonAreaVo queryByAddress(String address, String idcard) {
  49. PersonAreaVo personAreaVo = new PersonAreaVo();
  50. //获取县级全部区划数据
  51. List<SysArea> sysAreaVos = this.queryByLevel(3);
  52. //被保人 赛选出的地址条件
  53. List<SysArea> collect = sysAreaVos.stream().filter(item -> address.contains(item.getAreaCname())).collect(Collectors.toList());
  54. //截取身份证的省级代码
  55. String provincesCode = idcard.substring(0, 3);
  56. //获取省级的区划
  57. if (!collect.isEmpty()) {
  58. List<SysArea> provincesArea = collect.stream()
  59. .filter(item -> item.getAreaCode().substring(0, 3).equals(provincesCode))
  60. .collect(Collectors.toList());
  61. //如果查不出来默认使用赛选出的第一个
  62. if (provincesArea.isEmpty()) {
  63. provincesArea.add(collect.get(0));
  64. }
  65. List<SysArea> sysAreas = this.queryAllParent(provincesArea.get(0));
  66. sysAreas.sort((o1, o2) -> o2.getLevel() - o1.getLevel());
  67. //如果等于2 说明是直辖市
  68. if (sysAreas.size() >= 2) {
  69. if (sysAreas.size() == 2) {
  70. personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
  71. personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
  72. personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
  73. personAreaVo.setCityName(sysAreas.get(0).getAreaCname());
  74. personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
  75. personAreaVo.setCountyName(sysAreas.get(1).getAreaCname());
  76. } else {
  77. personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
  78. personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
  79. personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
  80. personAreaVo.setCityName(sysAreas.get(1).getAreaCname());
  81. personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(2).getAreaCode()));
  82. personAreaVo.setCountyName(sysAreas.get(2).getAreaCname());
  83. }
  84. return personAreaVo;
  85. }
  86. }
  87. personAreaVo.setProvinceCode(Integer.parseInt(idcard.substring(0, 2) + "0000"));
  88. personAreaVo.setCityCode(Integer.parseInt(idcard.substring(0, 4) + "00"));
  89. personAreaVo.setCountyCode(Integer.parseInt(idcard.substring(0, 6)));
  90. return personAreaVo;
  91. }
  92. }