|
@@ -4,9 +4,12 @@ import com.skyversation.poiaddr.addquery.AddressQueryEngine;
|
|
|
import com.skyversation.poiaddr.addquery.Constant;
|
|
|
import com.skyversation.poiaddr.bean.AddressResult;
|
|
|
import com.skyversation.poiaddr.config.DbConnection;
|
|
|
+import com.skyversation.poiaddr.entity.AmapAddressV3;
|
|
|
import com.skyversation.poiaddr.entity.YyskAddressStandardization;
|
|
|
+import com.skyversation.poiaddr.service.AreaService;
|
|
|
import com.skyversation.poiaddr.util.AddressMatcher;
|
|
|
import com.skyversation.poiaddr.util.AddressTools;
|
|
|
+import com.skyversation.poiaddr.util.Coordinate;
|
|
|
import com.skyversation.poiaddr.util.ExcelReaderUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -227,6 +230,83 @@ public class YyskAddressStandardizationServiceImpl {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void readFileToPg(String fileRootPath, Integer startFileIndex, Integer endFileIndex, Integer sort) {
|
|
|
+ System.out.println("<<<<<<<<------readFileToPg{fileIndex:" + startFileIndex + "}");
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<YyskAddressStandardization> listData = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ List<Map<String, Object>> fileData = ExcelReaderUtils.readExcel(fileRootPath + startFileIndex + ".xlsx");
|
|
|
+ for (Map<String, Object> item : fileData) {
|
|
|
+ YyskAddressStandardization yyskAddressStandardization = new YyskAddressStandardization();
|
|
|
+ String matchLevel = item.get("matchLevel").toString();
|
|
|
+ if (matchLevel != null && !matchLevel.isEmpty() && !"异常".equals(matchLevel) && !"rule_0".equals(matchLevel) && item.get("lat") != null && item.get("lon") != null) {
|
|
|
+ if ("rule_2".equals(matchLevel) || "rule_4".equals(matchLevel) || Float.parseFloat(matchLevel) > 1.8) {
|
|
|
+ yyskAddressStandardization.setAddress(item.get("address").toString());
|
|
|
+ yyskAddressStandardization.setReturnAddress(item.get("returnAddress").toString());
|
|
|
+ yyskAddressStandardization.setStandardAddress(item.get("standardAddress").toString());
|
|
|
+ yyskAddressStandardization.setProvinces(item.get("provinces").toString());
|
|
|
+ yyskAddressStandardization.setMarket(item.get("market").toString());
|
|
|
+ yyskAddressStandardization.setDistinguish(item.get("distinguish").toString());
|
|
|
+ yyskAddressStandardization.setStreetTown(item.get("streetTown").toString());
|
|
|
+ yyskAddressStandardization.setResidentialCommittee(item.get("residentialCommittee").toString());
|
|
|
+ yyskAddressStandardization.setLon(item.get("lat").toString());
|
|
|
+ yyskAddressStandardization.setLat(item.get("lon").toString());
|
|
|
+ listData.add(yyskAddressStandardization);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fileData.clear();
|
|
|
+ } catch (Exception e) {
|
|
|
+ listData = null;
|
|
|
+ }
|
|
|
+ if (listData != null && listData.size() > 0) {
|
|
|
+ List<AmapAddressV3> amapAddressV3List = new ArrayList<>();
|
|
|
+ for (YyskAddressStandardization yyskAddressStandardization : listData) {
|
|
|
+ AmapAddressV3 amapAddressV3 = new AmapAddressV3();
|
|
|
+ amapAddressV3.setId(UUID.randomUUID().toString());
|
|
|
+ amapAddressV3.setAddress(yyskAddressStandardization.getReturnAddress());
|
|
|
+ amapAddressV3.setLon(yyskAddressStandardization.getLon());
|
|
|
+ amapAddressV3.setLat(yyskAddressStandardization.getLat());
|
|
|
+ amapAddressV3.setPname(yyskAddressStandardization.getProvinces());
|
|
|
+ amapAddressV3.setCityname(yyskAddressStandardization.getMarket());
|
|
|
+ amapAddressV3.setAdname(yyskAddressStandardization.getDistinguish());
|
|
|
+ amapAddressV3.setStreetTTown(yyskAddressStandardization.getStreetTown());
|
|
|
+ amapAddressV3.setResidentialCommittee(yyskAddressStandardization.getResidentialCommittee());
|
|
|
+// 上海2000转高德
|
|
|
+ double[] gcjLocation = Coordinate.shcj_to_gcj02(Double.parseDouble(yyskAddressStandardization.getLon()), Double.parseDouble(yyskAddressStandardization.getLat()));
|
|
|
+ amapAddressV3.setLocation(gcjLocation[0] + "," + gcjLocation[1]);
|
|
|
+ amapAddressV3.setCreateTime(new Date());
|
|
|
+ amapAddressV3List.add(amapAddressV3);
|
|
|
+
|
|
|
+ AmapAddressV3 amapAddressV32 = new AmapAddressV3();
|
|
|
+ amapAddressV32.setId(UUID.randomUUID().toString());
|
|
|
+ amapAddressV32.setAddress(yyskAddressStandardization.getStandardAddress());
|
|
|
+ amapAddressV32.setLon(amapAddressV3.getLon());
|
|
|
+ amapAddressV32.setLat(amapAddressV3.getLat());
|
|
|
+ amapAddressV32.setPname(amapAddressV3.getPname());
|
|
|
+ amapAddressV32.setCityname(amapAddressV3.getCityname());
|
|
|
+ amapAddressV32.setAdname(amapAddressV3.getAdname());
|
|
|
+ amapAddressV32.setStreetTTown(amapAddressV3.getStreetTTown());
|
|
|
+ amapAddressV32.setResidentialCommittee(amapAddressV3.getResidentialCommittee());
|
|
|
+ amapAddressV32.setLocation(amapAddressV3.getLocation());
|
|
|
+ amapAddressV32.setCreateTime(new Date());
|
|
|
+ amapAddressV3List.add(amapAddressV32);
|
|
|
+ }
|
|
|
+ // 写入到数据库中
|
|
|
+ AreaService.getInstance().saveAmapAddressV3(amapAddressV3List);
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ System.out.println("处理单批次用时" + (endTime - startTime) / 1000 + "秒!");
|
|
|
+ amapAddressV3List.clear();
|
|
|
+ } else {
|
|
|
+ System.out.println("该文件无有效数据!");
|
|
|
+ }
|
|
|
+ if (startFileIndex + sort != endFileIndex) {
|
|
|
+ startFileIndex += sort;
|
|
|
+ readFileToPg(fileRootPath, startFileIndex, endFileIndex, sort);
|
|
|
+ } else {
|
|
|
+ System.out.println("<<<<<<<<------任务处理完成!");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
public void searchLoadFileData(String fileRootPath, Integer startFileIndex, Integer endFileIndex, Integer sort) {
|
|
|
|
|
@@ -257,7 +337,7 @@ public class YyskAddressStandardizationServiceImpl {
|
|
|
|
|
|
}
|
|
|
|
|
|
- public void startMutilExecutor(int startFileIndex, String filePath, String outPath){
|
|
|
+ public void startMutilExecutor(int startFileIndex, String filePath, String outPath) {
|
|
|
System.out.println("<<<<<<<<------searchLoadFileData{fileIndex:" + startFileIndex + "}");
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
List<YyskAddressStandardization> listData = new ArrayList<>();
|
|
@@ -299,101 +379,101 @@ public class YyskAddressStandardizationServiceImpl {
|
|
|
int total = listData.size();
|
|
|
for (YyskAddressStandardization item : listData) {
|
|
|
System.out.println("<<<---- 开始查询第: " + index + " 条数据。。。共:" + total + "条数据--->>>>>>>");
|
|
|
- index ++;
|
|
|
+ index++;
|
|
|
// futures.add(executorService.submit(() -> {
|
|
|
- List<String> addrList = new ArrayList<>();
|
|
|
- String[] addr = AddressMatcher.matchProvinceAndCity(item.getAddress());
|
|
|
- if (addr != null && !addr[0].contains("上海")) {
|
|
|
+ List<String> addrList = new ArrayList<>();
|
|
|
+ String[] addr = AddressMatcher.matchProvinceAndCity(item.getAddress());
|
|
|
+ if (addr != null && !addr[0].contains("上海")) {
|
|
|
// 匹配全国省名
|
|
|
- item.setProvinces(addr[0]);
|
|
|
+ item.setProvinces(addr[0]);
|
|
|
// 遍历全国城市名称匹配搜索地址市名
|
|
|
- item.setMarket(addr[1]);
|
|
|
- item.setMatchLevel("rule_0");
|
|
|
- } else {
|
|
|
- addrList.add(item.getAddress());
|
|
|
- String[] strs = AddressTools.parseAddressJZ(item.getAddress());
|
|
|
- if (strs != null) {
|
|
|
- item.setProvinces(strs[0] == null ? "" : strs[0]);
|
|
|
- item.setMarket(strs[0] == null ? "" : strs[0]);
|
|
|
- item.setDistinguish(strs[1] == null ? "" : strs[1]);
|
|
|
- item.setStreetTown(strs[2] == null ? "" : strs[2]);
|
|
|
- }
|
|
|
+ item.setMarket(addr[1]);
|
|
|
+ item.setMatchLevel("rule_0");
|
|
|
+ } else {
|
|
|
+ addrList.add(item.getAddress());
|
|
|
+ String[] strs = AddressTools.parseAddressJZ(item.getAddress());
|
|
|
+ if (strs != null) {
|
|
|
+ item.setProvinces(strs[0] == null ? "" : strs[0]);
|
|
|
+ item.setMarket(strs[0] == null ? "" : strs[0]);
|
|
|
+ item.setDistinguish(strs[1] == null ? "" : strs[1]);
|
|
|
+ item.setStreetTown(strs[2] == null ? "" : strs[2]);
|
|
|
}
|
|
|
- if (addrList.size() > 0) {
|
|
|
- // TODO 开始查询
|
|
|
- AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(addrList);
|
|
|
- System.out.println("<<<---- 第: " + index + " 条数据返回数据,数据为:!!!" + addressResult.getMessage() + " ----->>>>>");
|
|
|
- if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1) {
|
|
|
- item.setMatchLevel("异常");
|
|
|
- item.setReturnAddress("未匹配到符合规则的结果");
|
|
|
- } else {
|
|
|
- try {
|
|
|
- for (AddressResult.ContentBean contentBean : addressResult.getData()) {
|
|
|
- String resultAddrKey = contentBean.getAddress();
|
|
|
- if (resultAddrKey != null && contentBean.getLon() != null && contentBean.getLat() != null && AddressTools.isOtherDistrictThanSongJiang2(resultAddrKey)) {
|
|
|
+ }
|
|
|
+ if (addrList.size() > 0) {
|
|
|
+ // TODO 开始查询
|
|
|
+ AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(addrList);
|
|
|
+ System.out.println("<<<---- 第: " + index + " 条数据返回数据,数据为:!!!" + addressResult.getMessage() + " ----->>>>>");
|
|
|
+ if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1) {
|
|
|
+ item.setMatchLevel("异常");
|
|
|
+ item.setReturnAddress("未匹配到符合规则的结果");
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ for (AddressResult.ContentBean contentBean : addressResult.getData()) {
|
|
|
+ String resultAddrKey = contentBean.getAddress();
|
|
|
+ if (resultAddrKey != null && contentBean.getLon() != null && contentBean.getLat() != null && AddressTools.isOtherDistrictThanSongJiang2(resultAddrKey)) {
|
|
|
// 去除特殊字符
|
|
|
- resultAddrKey = AddressTools.getInstance().deleteStr(contentBean.getAddress());
|
|
|
+ resultAddrKey = AddressTools.getInstance().deleteStr(contentBean.getAddress());
|
|
|
// 遍历全国省份名称得到省名
|
|
|
- item.setProvinces(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
|
|
|
+ item.setProvinces(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
|
|
|
// 写入街镇数据
|
|
|
- if (contentBean.getAdname() != null && !contentBean.getAdname().isEmpty()) {
|
|
|
- item.setStreetTown(contentBean.getAdname());
|
|
|
- } else if (contentBean.getTownJson() != null && contentBean.getTownJson().getString("name") != null) {
|
|
|
- item.setStreetTown(contentBean.getTownJson().getString("name"));
|
|
|
- } else {
|
|
|
- item.setStreetTown("");
|
|
|
- }
|
|
|
+ if (contentBean.getAdname() != null && !contentBean.getAdname().isEmpty()) {
|
|
|
+ item.setStreetTown(contentBean.getAdname());
|
|
|
+ } else if (contentBean.getTownJson() != null && contentBean.getTownJson().getString("name") != null) {
|
|
|
+ item.setStreetTown(contentBean.getTownJson().getString("name"));
|
|
|
+ } else {
|
|
|
+ item.setStreetTown("");
|
|
|
+ }
|
|
|
// 写入上海市市名
|
|
|
- item.setMarket(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
|
|
|
+ item.setMarket(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
|
|
|
// 写入区名
|
|
|
- if (contentBean.getCityname() != null && !contentBean.getCityname().isEmpty()) {
|
|
|
- item.setDistinguish(contentBean.getCityname());
|
|
|
- } else if (contentBean.getAdJson() != null && contentBean.getAdJson().getString("name") != null) {
|
|
|
- item.setDistinguish(contentBean.getAdJson().getString("name"));
|
|
|
- } else {
|
|
|
- item.setDistinguish("");
|
|
|
- }
|
|
|
+ if (contentBean.getCityname() != null && !contentBean.getCityname().isEmpty()) {
|
|
|
+ item.setDistinguish(contentBean.getCityname());
|
|
|
+ } else if (contentBean.getAdJson() != null && contentBean.getAdJson().getString("name") != null) {
|
|
|
+ item.setDistinguish(contentBean.getAdJson().getString("name"));
|
|
|
+ } else {
|
|
|
+ item.setDistinguish("");
|
|
|
+ }
|
|
|
// 写入sh2000坐标系
|
|
|
- if (contentBean.getLocation() != null && !contentBean.getLocation().trim().isEmpty()) {
|
|
|
- String[] latLonStr = contentBean.getLocation().split(",");
|
|
|
- item.setLat(latLonStr[0]);
|
|
|
- item.setLon(latLonStr[1]);
|
|
|
- }
|
|
|
- item.setReturnAddress(resultAddrKey);
|
|
|
- item.setMatchLevel(contentBean.getScore());
|
|
|
+ if (contentBean.getLocation() != null && !contentBean.getLocation().trim().isEmpty()) {
|
|
|
+ String[] latLonStr = contentBean.getLocation().split(",");
|
|
|
+ item.setLat(latLonStr[0]);
|
|
|
+ item.setLon(latLonStr[1]);
|
|
|
+ }
|
|
|
+ item.setReturnAddress(resultAddrKey);
|
|
|
+ item.setMatchLevel(contentBean.getScore());
|
|
|
// 判断并写入居委
|
|
|
- if (contentBean.getCommunity() != null && !contentBean.getCommunity().isEmpty()) {
|
|
|
- item.setResidentialCommittee(contentBean.getCommunity());
|
|
|
- } else if (contentBean.getCjJson() != null && contentBean.getCjJson().containsKey("居委_1")) {
|
|
|
- item.setResidentialCommittee(contentBean.getCjJson().getString("居委_1"));
|
|
|
- } else {
|
|
|
- item.setResidentialCommittee("");
|
|
|
- }
|
|
|
- String oldAddress = "";
|
|
|
- try{
|
|
|
- oldAddress = Objects.requireNonNull(AddressTools.parseAddressJZ(contentBean.getSearchAddress()))[3].
|
|
|
- replaceAll(item.getMarket().equals("[]") ? "" : item.getMarket(), "").
|
|
|
- replaceAll(item.getDistinguish().equals("[]") ? "" : item.getDistinguish(), "").
|
|
|
- replaceAll(item.getStreetTown().equals("[]") ? "" : item.getStreetTown(), "").
|
|
|
- replaceAll(item.getResidentialCommittee().equals("[]") ? "" : item.getResidentialCommittee(), "");
|
|
|
- } catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplace_ct(oldAddress));
|
|
|
- break;
|
|
|
+ if (contentBean.getCommunity() != null && !contentBean.getCommunity().isEmpty()) {
|
|
|
+ item.setResidentialCommittee(contentBean.getCommunity());
|
|
|
+ } else if (contentBean.getCjJson() != null && contentBean.getCjJson().containsKey("居委_1")) {
|
|
|
+ item.setResidentialCommittee(contentBean.getCjJson().getString("居委_1"));
|
|
|
} else {
|
|
|
- item.setMatchLevel("异常");
|
|
|
- item.setReturnAddress("结果处理异常");
|
|
|
+ item.setResidentialCommittee("");
|
|
|
+ }
|
|
|
+ String oldAddress = "";
|
|
|
+ try {
|
|
|
+ oldAddress = Objects.requireNonNull(AddressTools.parseAddressJZ(contentBean.getSearchAddress()))[3].
|
|
|
+ replaceAll(item.getMarket().equals("[]") ? "" : item.getMarket(), "").
|
|
|
+ replaceAll(item.getDistinguish().equals("[]") ? "" : item.getDistinguish(), "").
|
|
|
+ replaceAll(item.getStreetTown().equals("[]") ? "" : item.getStreetTown(), "").
|
|
|
+ replaceAll(item.getResidentialCommittee().equals("[]") ? "" : item.getResidentialCommittee(), "");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
+ item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplace_ct(oldAddress));
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ item.setMatchLevel("异常");
|
|
|
+ item.setReturnAddress("结果处理异常");
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- item.setMatchLevel("异常");
|
|
|
- e.printStackTrace();
|
|
|
- System.err.println("查询结果处理异常:" + e);
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ item.setMatchLevel("异常");
|
|
|
+ e.printStackTrace();
|
|
|
+ System.err.println("查询结果处理异常:" + e);
|
|
|
}
|
|
|
}
|
|
|
- item.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
// }));
|
|
|
}
|
|
|
|