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> 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; } }