SysAreaServiceImpl.java 4.9 KB

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