DistrictService.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.izouma.awesomeAdmin.service;
  2. import com.izouma.awesomeAdmin.domain.District;
  3. import com.izouma.awesomeAdmin.repo.DistrictRepo;
  4. import com.izouma.awesomeAdmin.utils.qqmap.DistrictResponse;
  5. import com.izouma.awesomeAdmin.utils.qqmap.QQMapUtil;
  6. import lombok.AllArgsConstructor;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.springframework.stereotype.Service;
  9. import java.util.List;
  10. @Service
  11. @AllArgsConstructor
  12. public class DistrictService {
  13. private DistrictRepo districtRepo;
  14. public void sync() {
  15. List<List<DistrictResponse.District>> res = QQMapUtil.queryDistrict().getResult();
  16. for (int i = 0; i < 3; i++) {
  17. for (DistrictResponse.District district : res.get(i)) {
  18. District d = convert(district);
  19. d.setLevel(i);
  20. if (i > 0) {
  21. int finalI = i;
  22. DistrictResponse.District parent = res.get(i - 1)
  23. .stream()
  24. .filter(ii -> String.valueOf(ii.getId())
  25. .startsWith(String.valueOf(d.getId()).substring(0, finalI == 1 ? 2 : 4)))
  26. .findFirst()
  27. .orElse(null);
  28. if (parent == null) {
  29. parent = res.get(0)
  30. .stream()
  31. .filter(ii -> String.valueOf(ii.getId())
  32. .startsWith(String.valueOf(d.getId()).substring(0, 2)))
  33. .findFirst()
  34. .orElse(null);
  35. District p = convert(parent);
  36. p.setLevel(1);
  37. p.setParent(Long.parseLong(String.valueOf(parent.getId()).substring(0, 2) + "0100"));
  38. districtRepo.save(p);
  39. d.setParent(p.getId());
  40. } else {
  41. d.setParent((long) parent.getId());
  42. }
  43. }
  44. if (i == 2) {
  45. d.setLeaf(true);
  46. }
  47. if (i == 1 && !String.valueOf(d.getId()).substring(4).equals("00")) {
  48. d.setLeaf(true);
  49. }
  50. districtRepo.save(d);
  51. }
  52. }
  53. }
  54. private District convert(DistrictResponse.District district) {
  55. District res = new District();
  56. res.setId((long) district.getId());
  57. res.setName(district.getName());
  58. res.setFullName(district.getFullname());
  59. res.setLat(district.getLocation().getLat());
  60. res.setLng(district.getLocation().getLng());
  61. res.setPinyin(StringUtils.join(district.getPinyin(), " "));
  62. return res;
  63. }
  64. }