|
@@ -26,7 +26,9 @@ import javax.annotation.PostConstruct;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.*;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
@Service
|
|
|
public class AreaService {
|
|
@@ -37,6 +39,9 @@ public class AreaService {
|
|
|
@Autowired
|
|
|
private AmapAddressV3Service amapAddressV3Service;
|
|
|
|
|
|
+// 暂存数据库中的所有数据
|
|
|
+ private Map<String, AmapAddressV3> allAddressData = new HashMap<>();
|
|
|
+
|
|
|
private static AreaService instance;
|
|
|
|
|
|
public static AreaService getInstance() {
|
|
@@ -74,6 +79,23 @@ public class AreaService {
|
|
|
Constant.setArea(area);
|
|
|
System.out.println("<<<<<<<<------根据配置文件为AREA赋值:" + Constant.getArea());
|
|
|
System.out.println("<<<<<<<<------当前AMAP_CITY_CODE:" + Constant.getAMAP_CITY_CODE());
|
|
|
+// TODO 数据库连通性测试
|
|
|
+ try {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ System.out.println("<<<<<<<<------开始数据库连通性测试");
|
|
|
+ List<AmapAddressV3> amapAddressV3List = amapAddressV3Service.getAllData();
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ System.out.println(">>>>>>>>------数据库连通性测试完成!用时" + (endTime - startTime) / 1000 + "秒!当前数据库数据条数:" + amapAddressV3List.size());
|
|
|
+ System.out.println("<<<<<<<<------开始缓存数据库数据");
|
|
|
+ for (AmapAddressV3 amapAddressV3 : amapAddressV3List) {
|
|
|
+ allAddressData.put(amapAddressV3.getAddress(), amapAddressV3);
|
|
|
+ }
|
|
|
+ amapAddressV3List.clear();
|
|
|
+ System.out.println(">>>>>>>>------缓存数据库数据完成!allAddressData.size()="+allAddressData.size());
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
|
|
|
+ }
|
|
|
+
|
|
|
// TODO 网络连通性测试,可以请求一下测试的市中心地址
|
|
|
try {
|
|
|
System.out.println("电脑最大线程数:" + Runtime.getRuntime().availableProcessors());
|
|
@@ -87,19 +109,6 @@ public class AreaService {
|
|
|
} catch (Exception e) {
|
|
|
System.err.println(">>>>>>>>------网络连通性测试结果:" + e);
|
|
|
}
|
|
|
-// TODO 数据库连通性测试
|
|
|
- try {
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- System.out.println("<<<<<<<<------开始数据库连通性测试");
|
|
|
- Long amapAddressV3List = amapAddressV3Service.countAllUsersNative();
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- System.out.println(">>>>>>>>------数据库连通性测试完成!用时" + (endTime - startTime) / 1000 + "秒!当前数据库数据条数:" + amapAddressV3List);
|
|
|
-// System.out.println("<<<<<<<<------开始执行任务!!!");
|
|
|
-// yyskAddressStandardizationService.searchLoadFileData("D:\\1.项目\\5. 松江项目\\4. 地名地址\\地名地址库治理数据\\原始数据\\",
|
|
|
-// 0, 10000, 1);
|
|
|
- } catch (Exception e) {
|
|
|
- System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
public void initPolygons() {
|
|
@@ -148,27 +157,53 @@ public class AreaService {
|
|
|
System.out.println("<<<<<<<<------run geo data complete------>>>>>>>>>");
|
|
|
}
|
|
|
|
|
|
- public void saveAmapAddressV3(List<AmapAddressV3> amapAddressV3List){
|
|
|
- amapAddressV3Service.saveAmapAddressV3(amapAddressV3List);
|
|
|
+ public void saveAmapAddressV3(List<AmapAddressV3> amapAddressV3List) {
|
|
|
+ List<AmapAddressV3> amapAddressV3SaveList = new ArrayList<>();
|
|
|
+ for (AmapAddressV3 amapAddressV3 : amapAddressV3List) {
|
|
|
+ if (!allAddressData.containsKey(amapAddressV3.getAddress())) {
|
|
|
+ allAddressData.put(amapAddressV3.getAddress(), amapAddressV3);
|
|
|
+ amapAddressV3SaveList.add(amapAddressV3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ amapAddressV3List.clear();
|
|
|
+ if (amapAddressV3SaveList.size() > 0) {
|
|
|
+ amapAddressV3Service.saveAmapAddressV3(amapAddressV3List);
|
|
|
+ amapAddressV3List.clear();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- public List<AmapAddressV3> getAddressPoisByAddr(String addr){
|
|
|
+ public List<AmapAddressV3> getAddressPoisByAddr(String addr) {
|
|
|
+ List<AmapAddressV3> resultData = new ArrayList<>();
|
|
|
String[] strs = AddressMatcher.matchProvinceAndCity(addr);
|
|
|
- if(strs != null){
|
|
|
- for(String str : strs){
|
|
|
- if(StringUtils.hasText(str)){
|
|
|
+ if (strs != null) {
|
|
|
+ for (String str : strs) {
|
|
|
+ if (StringUtils.hasText(str)) {
|
|
|
addr = addr.replace(str, "");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(addr.contains("号")){
|
|
|
+ if (addr.contains("号")) {
|
|
|
addr = addr.substring(0, addr.lastIndexOf("号") + 1);
|
|
|
- } else if(addr.contains("弄")){
|
|
|
+ } else if (addr.contains("弄")) {
|
|
|
addr = addr.substring(0, addr.lastIndexOf("弄") + 1);
|
|
|
}
|
|
|
- System.out.println("<<<<<<<----- 开始数据库查询,数据查询地址为:" + addr);
|
|
|
- return amapAddressV3Service.getAddressPoisByAddr(addr);
|
|
|
+ if (allAddressData.containsKey(addr)) {
|
|
|
+ resultData.add(allAddressData.get(addr));
|
|
|
+ return resultData;
|
|
|
+ } else {
|
|
|
+ int sumSize = 20;
|
|
|
+ for (String address : allAddressData.keySet()) {
|
|
|
+ if (address.contains(addr) && sumSize > 0) {
|
|
|
+ sumSize--;
|
|
|
+ resultData.add(allAddressData.get(address));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultData;
|
|
|
+// TODO 使用缓存替换数据库查询
|
|
|
+// System.out.println("<<<<<<<----- 开始数据库查询,数据查询地址为:" + addr);
|
|
|
+// return amapAddressV3Service.getAddressPoisByAddr(addr);
|
|
|
}
|
|
|
|
|
|
public GeoJsonBean isInadPolygon(double lon, double lat) {
|