SysAreaServiceImpl.java 4.4 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.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) {
  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 = idcard.substring(0, 3);
  57. //获取省级的区划
  58. if (!collect.isEmpty()) {
  59. List<SysArea> provincesArea = collect.stream()
  60. .filter(item -> item.getAreaCode().substring(0, 3).equals(provincesCode))
  61. .collect(Collectors.toList());
  62. //如果查不出来默认使用赛选出的第一个
  63. if (provincesArea.isEmpty()) {
  64. provincesArea.add(collect.get(0));
  65. }
  66. List<SysArea> sysAreas = this.queryAllParent(provincesArea.get(0));
  67. //如果等于2 说明是直辖市
  68. if (sysAreas.size() >= 2) {
  69. if (sysAreas.size() == 2) {
  70. personAreaVo.setCountyCode(sysAreas.get(0).getAreaCode());
  71. personAreaVo.setCountyName(sysAreas.get(0).getAreaCname());
  72. personAreaVo.setCityCode(sysAreas.get(0).getAreaCode());
  73. personAreaVo.setCityName(sysAreas.get(0).getAreaCname());
  74. personAreaVo.setProvinceCode(sysAreas.get(1).getAreaCode());
  75. personAreaVo.setProvinceName(sysAreas.get(1).getAreaCname());
  76. } else {
  77. personAreaVo.setCountyCode(sysAreas.get(0).getAreaCode());
  78. personAreaVo.setCountyName(sysAreas.get(0).getAreaCname());
  79. personAreaVo.setCityCode(sysAreas.get(1).getAreaCode());
  80. personAreaVo.setCityName(sysAreas.get(1).getAreaCname());
  81. personAreaVo.setProvinceCode(sysAreas.get(2).getAreaCode());
  82. personAreaVo.setProvinceName(sysAreas.get(2).getAreaCname());
  83. }
  84. return personAreaVo;
  85. }
  86. }
  87. personAreaVo.setProvinceCode(idcard.substring(0, 2) + "0000");
  88. personAreaVo.setCityCode(idcard.substring(0, 4) + "00");
  89. personAreaVo.setCountyCode(idcard.substring(0, 6));
  90. return personAreaVo;
  91. }
  92. }