| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package com.izouma.awesomeAdmin.service;
- import com.izouma.awesomeAdmin.domain.District;
- import com.izouma.awesomeAdmin.repo.DistrictRepo;
- import com.izouma.awesomeAdmin.utils.qqmap.DistrictResponse;
- import com.izouma.awesomeAdmin.utils.qqmap.QQMapUtil;
- import lombok.AllArgsConstructor;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Service;
- import java.util.List;
- @Service
- @AllArgsConstructor
- public class DistrictService {
- private DistrictRepo districtRepo;
- public void sync() {
- List<List<DistrictResponse.District>> res = QQMapUtil.queryDistrict().getResult();
- for (int i = 0; i < 3; i++) {
- for (DistrictResponse.District district : res.get(i)) {
- District d = convert(district);
- d.setLevel(i);
- if (i > 0) {
- int finalI = i;
- DistrictResponse.District parent = res.get(i - 1)
- .stream()
- .filter(ii -> String.valueOf(ii.getId())
- .startsWith(String.valueOf(d.getId()).substring(0, finalI == 1 ? 2 : 4)))
- .findFirst()
- .orElse(null);
- if (parent == null) {
- parent = res.get(0)
- .stream()
- .filter(ii -> String.valueOf(ii.getId())
- .startsWith(String.valueOf(d.getId()).substring(0, 2)))
- .findFirst()
- .orElse(null);
- District p = convert(parent);
- p.setLevel(1);
- p.setParent(Long.parseLong(String.valueOf(parent.getId()).substring(0, 2) + "0100"));
- districtRepo.save(p);
- d.setParent(p.getId());
- } else {
- d.setParent((long) parent.getId());
- }
- }
- if (i == 2) {
- d.setLeaf(true);
- }
- if (i == 1 && !String.valueOf(d.getId()).substring(4).equals("00")) {
- d.setLeaf(true);
- }
- districtRepo.save(d);
- }
- }
- }
- private District convert(DistrictResponse.District district) {
- District res = new District();
- res.setId((long) district.getId());
- res.setName(district.getName());
- res.setFullName(district.getFullname());
- res.setLat(district.getLocation().getLat());
- res.setLng(district.getLocation().getLng());
- res.setPinyin(StringUtils.join(district.getPinyin(), " "));
- return res;
- }
- }
|