Explorar o código

完善数据解析和数据库查询

DESKTOP-6LTVLN7\Liumouren hai 3 meses
pai
achega
ef722e02aa

+ 9 - 9
pom.xml

@@ -33,20 +33,20 @@
     </properties>
     <dependencies>
         <!-- Spring Data JPA 依赖,用于简化数据库操作 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-data-jpa</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <!-- MySQL 驱动依赖 -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.33</version> <!-- 可根据需要选择合适的 MySQL 8 版本 -->
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>mysql</groupId>-->
+<!--            <artifactId>mysql-connector-java</artifactId>-->
+<!--            <version>8.0.33</version> &lt;!&ndash; 可根据需要选择合适的 MySQL 8 版本 &ndash;&gt;-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.json</groupId>
             <artifactId>json</artifactId>

+ 0 - 2
src/main/java/com/skyversation/poiaddr/PoiAddrApplication.java

@@ -2,11 +2,9 @@ package com.skyversation.poiaddr;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.data.web.config.EnableSpringDataWebSupport;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication
-@EnableSpringDataWebSupport // 以自动处理分页参数和 Page 的序列化:
 @EnableScheduling // 定时任务支持
 public class PoiAddrApplication {
     public static void main(String[] args) {

+ 104 - 9
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -9,13 +9,16 @@ import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.util.net.AddressNetTools;
 import com.skyversation.poiaddr.util.status.AddressLevel;
 import com.skyversation.poiaddr.util.status.AddressResultEnum;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.util.StringUtils;
+import org.apache.commons.codec.binary.Base64;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.*;
 
 public class AddressQueryEngine {
 
@@ -67,7 +70,7 @@ public class AddressQueryEngine {
         }*/
         if (addressResult.getData() == null || addressResult.getData().size() == 0) {
             for (String addr : addrs) {
-                AddressResult.ContentBean contentBean = verificaData(szxSearchByName(addr), level, addr);
+                AddressResult.ContentBean contentBean = verificaData(sj_szxSearchByName(addr), level, addr);
                 if (contentBean != null) {
                     contentBean.setSearchAddress(addr);
                     contentBeans.add(contentBean);
@@ -149,7 +152,7 @@ public class AddressQueryEngine {
      * @return
      */
     public AddressResult szxSearchByName(String address) {
-        ResponseEntity response = AddressNetTools.getInstance().requestGet(Constant.SZX_URL + "&region=" + Constant.getAMAP_CITY_CODE() + "&query=" + address, null, null, 10);
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET, Constant.SZX_URL + "&region=" + Constant.getAMAP_CITY_CODE() + "&query=" + address, null, null, 10);
         if (response != null) {
             String body = response.getBody() + "";
             if (!StringUtils.hasText(body))
@@ -166,6 +169,98 @@ public class AddressQueryEngine {
         }
     }
 
+    public String getSigns(String timestamp, String appCode, String UUid, String appSecret) {
+//        先拼接
+        String signData = timestamp + appCode + UUid;
+//        生成sign
+        String sign = "";
+        try {
+            Mac sha256 = Mac.getInstance("HmacSHA256");
+            sha256.init(new SecretKeySpec(appSecret.getBytes(), "HmacSHA256"));
+            byte[] result = sha256.doFinal(signData.getBytes());
+            sign = Base64.encodeBase64String(result);
+        } catch (Exception e) {
+            System.err.println("sign 生成异常:" + e);
+        }
+        return sign;
+    }
+
+    public Object x_sjRHSearchByAddr(String address) {
+//      鉴权
+        Map<String, String> headerMap = new HashMap<>();
+        String timestamp = System.currentTimeMillis() + "";
+        String appCode = "7unv4vbwqxnq4a7m9h";
+        String UUid = UUID.randomUUID().toString();
+        String appSecret = "w6tawvf4k3ck4ikij9";
+        headerMap.put("x-timestamp", timestamp);
+        headerMap.put("x-appcode", appCode);
+        headerMap.put("x-uuid", UUid);
+//      签名
+        headerMap.put("x-sign", getSigns(timestamp, appCode, UUid, appSecret));
+        JSONObject params = new JSONObject();
+        JSONArray requestJson = new JSONArray();
+        JSONObject paramObject = new JSONObject();
+        paramObject.put("name", "query");
+        paramObject.put("position", "QUERY");
+        paramObject.put("value", address);
+        requestJson.add(paramObject);
+        params.put("requestJson", requestJson);
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, headerMap, 10);
+        if (response != null) {
+            String body = response.getBody() + "";
+            if (!StringUtils.hasText(body))
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
+            try {
+                JSONArray json = JSONArray.parseArray(body);
+                return TransfromDataTool.szxResultToResult2(json);
+            } catch (Exception e) {
+                System.err.println(e);
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
+            }
+        } else {
+            return "地址[" + address + "]未查询到数据!";
+        }
+    }
+
+    public AddressResult sj_szxSearchByName(String address) {
+//      鉴权
+        Map<String, String> headerMap = new HashMap<>();
+        String timestamp = System.currentTimeMillis() + "";
+        String appCode = "7unv4vbwqxnq4a7m9h";
+        String UUid = UUID.randomUUID().toString();
+        String appSecret = "w6tawvf4k3ck4ikij9";
+        headerMap.put("x-timestamp", timestamp);
+        headerMap.put("x-appcode", appCode);
+        headerMap.put("x-uuid", UUid);
+//      签名
+        headerMap.put("x-sign", getSigns(timestamp, appCode, UUid, appSecret));
+
+        JSONObject params = new JSONObject();
+        JSONArray requestJson = new JSONArray();
+        JSONObject paramObject = new JSONObject();
+        paramObject.put("name", "query");
+        paramObject.put("position", "QUERY");
+        paramObject.put("value", address);
+        requestJson.add(paramObject);
+        params.put("requestJson", requestJson);
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, headerMap, 10);
+        if (response != null) {
+            String body = response.getBody() + "";
+            if (!StringUtils.hasText(body))
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
+            try {
+                System.out.println("请求地址:" + address + ";返回结果:" + body);
+                return TransfromDataTool.szxResultToResult(JSONObject.parseObject(body));
+            } catch (Exception e) {
+                System.err.println(e);
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
+            }
+        } else {
+            System.out.println("地址[" + address + "]未查询到数据!");
+            return null;
+        }
+    }
+
     /***
      * 高德普通地名搜索
      * @param address
@@ -173,7 +268,7 @@ public class AddressQueryEngine {
      */
     public AddressResult gdSearchByName(String address) {
         String geoUrl = Constant.AMAP_GEO_URL + "?key=" + Constant.AMAP_KEY + "&address=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&output=JSON";
-        ResponseEntity response = AddressNetTools.getInstance().requestGet(geoUrl, null, null, 0);
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET, geoUrl, null, null, 0);
         if (response != null && response.getBody() != null) {
             String body = response.getBody() + "";
             if (!StringUtils.hasText(body))
@@ -199,7 +294,7 @@ public class AddressQueryEngine {
         String geoUrl =
                 Constant.AMAP_SEARCH_NAME_V3 + "?key=" + Constant.AMAP_KEY + "&types=" + Constant.AMAP_SEARCH_TYPES +
                         "&keywords=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&offset=20";
-        ResponseEntity responseEntity = AddressNetTools.getInstance().requestGet(geoUrl, null, null, 0);
+        ResponseEntity responseEntity = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET, geoUrl, null, null, 0);
         if (responseEntity.hasBody()) {
             String body = responseEntity.getBody() + "";
             if (!StringUtils.hasText(body)) {
@@ -217,7 +312,7 @@ public class AddressQueryEngine {
                         geoUrl =
                                 Constant.AMAP_SEARCH_NAME_V3 + "?key=" + Constant.AMAP_KEY + "&types=" + Constant.AMAP_SEARCH_TYPES +
                                         "&keywords=" + address + "&city=" + Constant.getAMAP_CITY_CODE() + "&offset=20&page=" + i;
-                        ResponseEntity responseEntity2 = AddressNetTools.getInstance().requestGet(geoUrl, null, null, 0);
+                        ResponseEntity responseEntity2 = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET, geoUrl, null, null, 0);
                         if (responseEntity2.hasBody()) {
                             body = responseEntity2.getBody() + "";
                         }

+ 2 - 1
src/main/java/com/skyversation/poiaddr/addquery/AddressTools.java

@@ -5,6 +5,7 @@ import com.skyversation.poiaddr.bean.WDToken;
 import com.skyversation.poiaddr.util.net.AddressNetTools;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.util.status.AddressResultEnum;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
 
 import java.math.BigInteger;
@@ -32,7 +33,7 @@ public class AddressTools {
 
         String param = "?user=" + userName + "&secret=" + secret + "&time=" + time;
         System.out.println("准备获取token,获取地址为:" + Constant.GET_TOKEN_URL + param);
-        ResponseEntity responseEntity =AddressNetTools.getInstance().requestGet(Constant.GET_TOKEN_URL + param, null, null,0);
+        ResponseEntity responseEntity =AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET,Constant.GET_TOKEN_URL + param, null, null,0);
         if(responseEntity != null){
             String body = responseEntity.getBody() + "";
             WDToken wdToken = JSONObject.parseObject(body, WDToken.class);

+ 1 - 0
src/main/java/com/skyversation/poiaddr/addquery/Constant.java

@@ -46,6 +46,7 @@ public class Constant {
     public static final String GET_TOKEN_URL = "http://10.235.245.226:7010/addrMatch/auth/getToken";
     public static final String GET_ADDRESS_MEG_URL = "http://10.235.245.226:7010/addrMatch/addrApi/searchAddr";
     public static final String SZX_URL = "https://service-api.onemap.sh.gov.cn/data-service-manage-service/MapProxyApi/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBsaWNhdGlvbl9pZCI6NjEsImFwcGxpY2F0aW9uX25hbWUiOiLpnZLmtabkuozkuInnu7TmnI3liqHns7vnu58iLCJleHAiOjIwNDY2Nzg0MDN9.IKUMdjUX4U1jncIUNren-iotL7duXI90aLECMjpvUX8/address_search/MapServer?page_num=1&page_size=5";
+    public static final String SJ_SZX_SEARCH_BY_NAME = "https://data.songjiang.gov.cn:8081/openapi/1736930075105";
     public static final String V4_URL = "http://10.235.245.174:10011/proxy/address/getAddressV4?token=65463DEE-620A-0ED5-2385-17ECD07CD351&address=";
 
     public static String AMAP_GEO_URL = "https://restapi.amap.com/v3/geocode/geo";

+ 35 - 0
src/main/java/com/skyversation/poiaddr/addquery/TransfromDataTool.java

@@ -44,6 +44,41 @@ public class TransfromDataTool {
         return result;
     }
 
+    public static AddressResult szxResultToResult2(JSONArray array) {
+        AddressResult result = new AddressResult();
+        if (array == null || array.size() < 1) {
+            result.setCode(AddressResultEnum.RESULT_NULL);
+            return result;
+        }
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject jsonObject = array.getJSONObject(i);
+            AddressResult.ContentBean content = new AddressResult.ContentBean();
+            content.setPname(jsonObject.getString("province"));
+            content.setCityname(jsonObject.getString("district"));
+            content.setAdname(jsonObject.getString("town"));
+//            content.setCommunity(jsonObject.getString("community"));
+//            content.setCommunityCode(jsonObject.getString("communitycode"));
+            content.setType(jsonObject.getString("type"));
+            content.setAddress(jsonObject.getString("address"));
+//            content.setDistance(jsonObject.getString("lv"));
+            content.setName(jsonObject.getString("address"));
+            if (jsonObject.containsKey("location") && jsonObject.getJSONObject("location").containsKey("lat")) {
+                double[] points = CoordTransform2.getInstance().shcj_to_wgs84(
+                        Double.parseDouble(jsonObject.getJSONObject("location").getString("lat")), Double.parseDouble(jsonObject.getJSONObject("location").getString("lon")));
+                content.setLocation(points[0] + "," + points[1]);
+                content.setLon(points[0]);
+                content.setLat(points[1]);
+            }
+
+            if (result.getData() == null) {
+                result.setData(new ArrayList<>());
+            }
+            result.getData().add(content);
+        }
+        result.setCode(AddressResultEnum.WDJA_SUCCESS);
+        return result;
+    }
+
     public static AddressResult szxResultToResult(JSONObject json) {
         AddressResult result = new AddressResult();
         JSONArray array = json.getJSONArray("result");

+ 15 - 15
src/main/java/com/skyversation/poiaddr/config/AuthInterceptor.java

@@ -23,35 +23,35 @@ public class AuthInterceptor implements HandlerInterceptor {
         log.info(">>>>>>>>>>>>>>>" + request.getRequestURL() + "<<<<<<<<<<<<<<<<<<<<<<");
 
         //增加响应头缺失代码
-        response.addHeader("X-Frame-Options","SAMEORIGIN");
-        response.addHeader("Referrer-Policy","origin");
-        response.addHeader("Content-Security-Policy","object-src 'self'");
-        response.addHeader("X-Permitted-Cross-Domain-Policies","master-only");
-        response.addHeader("X-Content-Type-Options","nosniff");
-        response.addHeader("X-XSS-Protection","1; mode=block");
-        response.addHeader("X-Download-Options","noopen");
-        response.addHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload");
+        response.addHeader("X-Frame-Options", "SAMEORIGIN");
+        response.addHeader("Referrer-Policy", "origin");
+        response.addHeader("Content-Security-Policy", "object-src 'self'");
+        response.addHeader("X-Permitted-Cross-Domain-Policies", "master-only");
+        response.addHeader("X-Content-Type-Options", "nosniff");
+        response.addHeader("X-XSS-Protection", "1; mode=block");
+        response.addHeader("X-Download-Options", "noopen");
+        response.addHeader("Strict-Transport-Security", "max-age=63072000; includeSubdomains; preload");
         //处理cookie问题
         Cookie[] cookies = request.getCookies();
         if (cookies != null) {
             for (Cookie cookie : cookies) {
                 String value = cookie.getValue();
                 StringBuilder builder = new StringBuilder();
-                builder.append(cookie.getName()+"="+value+";");
+                builder.append(cookie.getName() + "=" + value + ";");
                 builder.append("Secure;");//Cookie设置Secure标识
                 builder.append("HttpOnly;");//Cookie设置HttpOnly
                 response.addHeader("Set-Cookie", builder.toString());
             }
         }
-        if(request.getRequestURI().contains("/poiApi/poiAddress/test") || request.getRequestURI().contains("/poiApi/poiAddress/runSql")){
+        if (request.getRequestURI().contains("/poiApi/poiAddress")) {
             return true;
         }
         String token = request.getHeader("token");
         String requestURI = request.getRequestURI();
-        if (StringUtils.isEmpty(token)){
+        if (StringUtils.isEmpty(token)) {
             token = request.getParameter("token");
         }
-        if(StringUtils.isEmpty(token)){
+        if (StringUtils.isEmpty(token)) {
             response.setCharacterEncoding("utf-8");
             response.setContentType("application/json; charset=utf-8");
             PrintWriter writer = response.getWriter();
@@ -59,14 +59,14 @@ public class AuthInterceptor implements HandlerInterceptor {
             return false;
         }
         log.info("token : [ {} ]", token);
-        String userRedis = NetTools.getInstance().getUserByToken(token,requestURI,response,request);
-        if (userRedis.contains("无效token")){
+        String userRedis = NetTools.getInstance().getUserByToken(token, requestURI, response, request);
+        if (userRedis.contains("无效token")) {
             response.setCharacterEncoding("utf-8");
             response.setContentType("application/json; charset=utf-8");
             PrintWriter writer = response.getWriter();
             writer.write("无效token");
             return false;
-        }else if (userRedis.contains("无权限")){
+        } else if (userRedis.contains("无权限")) {
             response.setCharacterEncoding("utf-8");
             response.setContentType("application/json; charset=utf-8");
             PrintWriter writer = response.getWriter();

+ 5 - 1
src/main/java/com/skyversation/poiaddr/config/DbConnection.java

@@ -38,7 +38,7 @@ public class DbConnection {
             System.err.println("加载驱动异常:" + e);
             System.exit(1);
         }
-        String jdbcURL = "jdbc:transwarp2://172.30.75.126:31768/dws";
+        String jdbcURL = "jdbc:transwarp2://172.30.75.126:31768/kjyy_dev";
         System.out.println("配置文件中的数据库用户名:" + db_user_name + ";密码:" + db_password);
         String user = db_user_name;
         String password = db_password;
@@ -47,6 +47,10 @@ public class DbConnection {
 
     }
 
+    public int updateSql(String sqlStr) throws SQLException {
+        return stmt.executeUpdate(sqlStr);
+    }
+
     public List<Map<String, Object>> runSqlStr(String sqlStr) throws SQLException {
         ResultSet rs = stmt.executeQuery(sqlStr);
         ResultSetMetaData rsmd = rs.getMetaData();

+ 21 - 4
src/main/java/com/skyversation/poiaddr/controller/PoiAddressController.java

@@ -1,7 +1,8 @@
 package com.skyversation.poiaddr.controller;
 
+import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.config.DbConnection;
-import com.skyversation.poiaddr.service.impl.TestDataServiceImpl;
+import com.skyversation.poiaddr.service.impl.SjArrDzbzhSjWcbryDzxxServiceImpl;
 import com.skyversation.poiaddr.util.RequestUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
@@ -18,7 +19,7 @@ import java.sql.SQLException;
 public class PoiAddressController {
 
     @Resource
-    private TestDataServiceImpl testDataService;
+    private SjArrDzbzhSjWcbryDzxxServiceImpl testDataService;
 
     //    地址查询
     @GetMapping(value = "/selectAddressInfo/{address}")
@@ -59,6 +60,22 @@ public class PoiAddressController {
      */
     @GetMapping(value = "/runsSql/{sqlStr}")
     public Object runSql(@PathVariable(name = "sqlStr") String sqlStr) throws SQLException {
-        return DbConnection.getInstance().runSqlStr(sqlStr);
+        if (sqlStr.contains("update")) {
+            return DbConnection.getInstance().updateSql(sqlStr);
+        } else {
+            return DbConnection.getInstance().runSqlStr(sqlStr);
+        }
+    }
+
+    /**
+     * 直接输地址并返回结果
+     *
+     * @param address
+     * @return
+     * @throws SQLException
+     */
+    @GetMapping(value = "/searchAddr/{address}")
+    public Object searchByAddrStr(@PathVariable(name = "address") String address) {
+        return AddressQueryEngine.getInstance().x_sjRHSearchByAddr(address);
     }
-}
+}

+ 2 - 25
src/main/java/com/skyversation/poiaddr/entity/TestData.java → src/main/java/com/skyversation/poiaddr/entity/SjArrDzbzhSjWcbryDzxx.java

@@ -3,10 +3,6 @@ package com.skyversation.poiaddr.entity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.Id;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -19,112 +15,93 @@ import java.util.Date;
 @AllArgsConstructor
 @NoArgsConstructor
 @Data
-@Entity
-@Table ( name ="test_data" , schema = "")
-public class TestData  implements Serializable {
+//@Table ( name ="sj_zrr_dzbzh_sj_wcbry_dzxx" , schema = "")
+public class SjArrDzbzhSjWcbryDzxx implements Serializable {
 
 	private static final long serialVersionUID =  5402991726683110730L;
 
 	/**
 	 * 主键
 	 */
-	@Id
-   	@Column(name = "id" )
 	private String id;
 
 	/**
 	 * 实口地址
 	 */
-   	@Column(name = "sk_hjdz" )
 	private String skHjdz;
 
 	/**
 	 * 实口居住
 	 */
-   	@Column(name = "sk_jzdz" )
 	private String skJzdz;
 
 	/**
 	 * 基层户籍
 	 */
-   	@Column(name = "jc_hjdz" )
 	private String jcHjdz;
 
 	/**
 	 * 基层居住
 	 */
-   	@Column(name = "jc_jzdz" )
 	private String jcJzdz;
 
 	/**
 	 * 社区云户籍
 	 */
-   	@Column(name = "sqy_hjdz" )
 	private String sqyHjdz;
 
 	/**
 	 * 社区云居住
 	 */
-   	@Column(name = "sqy_jzdz" )
 	private String sqyJzdz;
 
 	/**
 	 * 匹配等级
 	 */
-   	@Column(name = "level" )
 	private String level;
 
 	/**
 	 * 行政区划
 	 */
-   	@Column(name = "administrative_division" )
 	private String administrativeDivision;
 
 	/**
 	 * 城市
 	 */
-   	@Column(name = "market" )
 	private String market;
 
 	/**
 	 * 所属街镇
 	 */
-   	@Column(name = "twon" )
 	private String twon;
 
 	/**
 	 * 经度
 	 */
-   	@Column(name = "lat" )
 	private String lat;
 
 	/**
 	 * 纬度
 	 */
-   	@Column(name = "lon" )
 	private String lon;
 
 	/**
 	 * 是否在松江区
 	 */
-   	@Column(name = "in_the_area" )
 	private String inTheArea;
 
 	/**
 	 * 更新时间
 	 */
-   	@Column(name = "update_time" )
 	private Date updateTime;
 
 	/**
 	 * 查询地址
 	 */
-   	@Column(name = "result_addr_key" )
 	private String resultAddrKey;
 
 	/**
 	 * 规范化地址
 	 */
-   	@Column(name = "standardized_address" )
 	private String standardizedAddress;
 }

+ 0 - 16
src/main/java/com/skyversation/poiaddr/service/TestDataRepository.java

@@ -1,16 +0,0 @@
-package com.skyversation.poiaddr.service;
-
-import com.skyversation.poiaddr.entity.TestData;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface TestDataRepository extends JpaRepository<TestData, Long> {
-    // 使用原生 SQL 进行模糊查询并分页
-    @Query(value = "SELECT * FROM test_data WHERE update_time is null", nativeQuery = true)
-//    @Query(value = "SELECT * FROM test_data WHERE sk_hjdz like '%新松江路%' and standardized_address like '%新路%'", nativeQuery = true)
-    Page<TestData> findByAddress1Containing(Pageable pageable);
-}

+ 96 - 20
src/main/java/com/skyversation/poiaddr/service/impl/TestDataServiceImpl.java → src/main/java/com/skyversation/poiaddr/service/impl/SjArrDzbzhSjWcbryDzxxServiceImpl.java

@@ -3,37 +3,115 @@ package com.skyversation.poiaddr.service.impl;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.AddressResult;
-import com.skyversation.poiaddr.entity.TestData;
-import com.skyversation.poiaddr.service.TestDataRepository;
+import com.skyversation.poiaddr.config.DbConnection;
+import com.skyversation.poiaddr.entity.SjArrDzbzhSjWcbryDzxx;
 import com.skyversation.poiaddr.util.status.AddressLevel;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
 @Service
-public class TestDataServiceImpl {
-    @Autowired
-    private TestDataRepository testDataRepository;
+public class SjArrDzbzhSjWcbryDzxxServiceImpl {
 
     //  分页查询地址表
-    public Page<TestData> getAllDataPage(int size) {
-        Pageable pageable = PageRequest.of(0, size);
-        return testDataRepository.findByAddress1Containing(pageable);
+    public List<SjArrDzbzhSjWcbryDzxx> getAllDataPage(int size) {
+        try {
+            List<SjArrDzbzhSjWcbryDzxx> requestData = new ArrayList<>();
+            String sql = "SELECT * FROM sj_zrr_dzbzh_sj_wcbry_dzxx WHERE update_time is null group by id limit " + size;
+            List<Map<String, Object>> dbData = DbConnection.getInstance().runSqlStr(sql);
+            for (Map<String, Object> item : dbData) {
+                SjArrDzbzhSjWcbryDzxx sjArrDzbzhSjWcbryDzxx = new SjArrDzbzhSjWcbryDzxx();
+                sjArrDzbzhSjWcbryDzxx.setId(item.getOrDefault("id", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setInTheArea(item.getOrDefault("in_the_area", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setResultAddrKey(item.getOrDefault("result_addr_key", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setLevel(item.getOrDefault("level", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setLat(item.getOrDefault("lat", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setLon(item.getOrDefault("lon", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setMarket(item.getOrDefault("market", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setTwon(item.getOrDefault("twon", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setAdministrativeDivision(item.getOrDefault("administrative_division", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setStandardizedAddress(item.getOrDefault("standardized_address", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setUpdateTime(new Date(item.getOrDefault("update_time", "").toString()));
+                sjArrDzbzhSjWcbryDzxx.setJcHjdz(item.getOrDefault("jc_hjdz", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setJcJzdz(item.getOrDefault("jc_jzdz", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setSkHjdz(item.getOrDefault("sk_hjdz", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setSkJzdz(item.getOrDefault("sk_jzdz", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setSqyHjdz(item.getOrDefault("sqy_hjdz", "").toString());
+                sjArrDzbzhSjWcbryDzxx.setSqyJzdz(item.getOrDefault("sqy_jzdz", "").toString());
+                requestData.add(sjArrDzbzhSjWcbryDzxx);
+            }
+            return requestData;
+        } catch (Exception e) {
+            System.err.println("sql运行异常:" + e);
+            return null;
+        }
     }
 
     //   批量修改地址表
-    public List<TestData> updateDatas(List<TestData> testDataList) {
-        return testDataRepository.saveAll(testDataList);
+    public void updateDatas(List<SjArrDzbzhSjWcbryDzxx> sjArrDzbzhSjWcbryDzxxList) {
+        for (SjArrDzbzhSjWcbryDzxx item : sjArrDzbzhSjWcbryDzxxList) {
+            if (!item.getId().isEmpty()) {
+                StringBuilder sql = new StringBuilder();
+                sql.append("update sj_zrr_dzbzh_sj_wcbry_dzxx set ");
+                if (item.getLat().isEmpty()) {
+                    sql.append(" lat = null");
+                } else {
+                    sql.append(" lat = ").append(item.getLat());
+                }
+                if (item.getLon().isEmpty()) {
+                    sql.append(" lon = null");
+                } else {
+                    sql.append(" lon = ").append(item.getLon());
+                }
+                if (item.getLevel().isEmpty()) {
+                    sql.append(" level = null");
+                } else {
+                    sql.append(" level = ").append(item.getLevel());
+                }
+                if (item.getAdministrativeDivision().isEmpty()) {
+                    sql.append(" administrative_division = null");
+                } else {
+                    sql.append(" administrative_division = ").append(item.getAdministrativeDivision());
+                }
+                if (item.getInTheArea().isEmpty()) {
+                    sql.append(" in_the_area = null");
+                } else {
+                    sql.append(" in_the_area = ").append(item.getInTheArea());
+                }
+                if (item.getMarket().isEmpty()) {
+                    sql.append(" market = null");
+                } else {
+                    sql.append(" market = ").append(item.getMarket());
+                }
+                if (item.getResultAddrKey().isEmpty()) {
+                    sql.append(" result_addr_key = null");
+                } else {
+                    sql.append(" result_addr_key = ").append(item.getResultAddrKey());
+                }
+                if (item.getStandardizedAddress().isEmpty()) {
+                    sql.append(" standardized_address = null");
+                } else {
+                    sql.append(" standardized_address = ").append(item.getStandardizedAddress());
+                }
+                if (item.getUpdateTime() == null) {
+                    sql.append(" standardized_address = null");
+                } else {
+                    sql.append(" standardized_address = ").append(item.getUpdateTime());
+                }
+                try {
+                    DbConnection.getInstance().updateSql(sql.toString());
+                } catch (Exception e) {
+                    System.err.println("更新异常" + e);
+                }
+            }
+        }
     }
 
     private boolean isOtherDistrictThanSongJiang(String address) {
@@ -56,13 +134,12 @@ public class TestDataServiceImpl {
     public void iterativeProcessing(Integer pageSize, Integer level, Integer init) {
         System.out.println("<<<<<<<<------iterativeProcessing{pageSize:" + pageSize + "}");
         long startTime = System.currentTimeMillis();
-        Page<TestData> outData = getAllDataPage(pageSize);
-        if (outData.getTotalElements() > 0) {
-            List<TestData> listData = outData.getContent();
+        List<SjArrDzbzhSjWcbryDzxx> listData = getAllDataPage(pageSize);
+        if (listData.size() > 0) {
             // 创建线程池
             ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
             List<Future<?>> futures = new ArrayList<>();
-            for (TestData item : listData) {
+            for (SjArrDzbzhSjWcbryDzxx item : listData) {
                 futures.add(executorService.submit(() -> {
                     if (init == 1) {
                         item.setInTheArea(null);
@@ -167,8 +244,7 @@ public class TestDataServiceImpl {
             updateDatas(listData);
             long endTime = System.currentTimeMillis();
             System.out.println("处理单批次用时" + (endTime - startTime) / 1000 + "秒!");
-            if (outData.getTotalElements() - pageSize > 0) {
-                System.out.println("剩余处理条数:" + (outData.getTotalElements() - pageSize));
+            if (listData.size() > 0) {
                 iterativeProcessing(pageSize, level, init);
             } else {
                 System.out.println("<<<<<<<<------任务处理完成!");

+ 0 - 1
src/main/java/com/skyversation/poiaddr/util/CoordTransform2.java

@@ -50,7 +50,6 @@ public class CoordTransform2 {
     }
 
     private static CoordTransform2 instance = new CoordTransform2();
-    private CoordTransform2(){}
     public static CoordTransform2 getInstance(){
         if(instance == null) {
             instance = new CoordTransform2();

+ 19 - 6
src/main/java/com/skyversation/poiaddr/util/net/AddressNetTools.java

@@ -1,5 +1,6 @@
 package com.skyversation.poiaddr.util.net;
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
@@ -13,6 +14,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.http.client.SimpleClientHttpRequestFactory;
 import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
@@ -43,7 +45,7 @@ public class AddressNetTools {
     }
 
     @Async
-    public ResponseEntity requestGet(String url, MultiValueMap<String, String> params, Map<String, String> headerMap, Integer ifReloadSize) {
+    public ResponseEntity requestGetOrPost(HttpMethod httpMethod, String url, JSONObject params, Map<String, String> headerMap, Integer ifReloadSize) {
         SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
         requestFactory.setConnectTimeout(3 * 1000);
         requestFactory.setReadTimeout(3 * 1000);
@@ -51,21 +53,32 @@ public class AddressNetTools {
         client.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
         HttpHeaders headers = new HttpHeaders();
         //请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        headers.setContentType(httpMethod == HttpMethod.POST ? MediaType.APPLICATION_JSON : MediaType.APPLICATION_FORM_URLENCODED);
         if (headerMap != null) {
             Set<String> sets = headerMap.keySet();
             for (String key : sets) {
                 headers.add(key, headerMap.get(key));
             }
         }
-
-        org.springframework.http.HttpEntity<MultiValueMap<String, String>> requestEntity = new org.springframework.http.HttpEntity<>(params, headers);//执行HTTP请求
         try {
-            return client.exchange(url, HttpMethod.GET, requestEntity, String.class);
+            if(httpMethod == HttpMethod.POST){
+                org.springframework.http.HttpEntity<JSONObject> requestEntity = new org.springframework.http.HttpEntity<>(params, headers);//执行HTTP请求
+                return client.exchange(url, httpMethod, requestEntity, String.class);
+            }else{
+                MultiValueMap<String, String> params2 = new LinkedMultiValueMap<>();
+                if(params != null){
+                    for(String key:params.keySet()){
+                        params2.add(key,params.get(key).toString());
+                    }
+                }
+                org.springframework.http.HttpEntity<MultiValueMap<String, String>> requestEntity = new org.springframework.http.HttpEntity<>(params2, headers);//执行HTTP请求
+                return client.exchange(url, httpMethod, requestEntity, String.class);
+            }
+
         } catch (Exception e) {
             if (ifReloadSize > 0) {
                 ifReloadSize--;
-                return requestGet(url, params, headerMap, ifReloadSize);
+                return requestGetOrPost(httpMethod,url, params, headerMap, ifReloadSize);
             } else {
                 System.err.println("requestGet err:" + e);
                 return null;

+ 2 - 2
src/main/java/com/skyversation/poiaddr/util/tasks/ScheduledTasks.java

@@ -1,6 +1,6 @@
 package com.skyversation.poiaddr.util.tasks;
 
-import com.skyversation.poiaddr.service.impl.TestDataServiceImpl;
+import com.skyversation.poiaddr.service.impl.SjArrDzbzhSjWcbryDzxxServiceImpl;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
@@ -10,7 +10,7 @@ import java.util.Date;
 public class ScheduledTasks {
 
     @Resource
-    private TestDataServiceImpl testDataService;
+    private SjArrDzbzhSjWcbryDzxxServiceImpl testDataService;
 
     /**
      * 每天 1 点执行的方法

+ 13 - 8
src/main/resources/application.properties

@@ -4,12 +4,17 @@ spring.application.name=poiAddr
 spring.servlet.multipart.max-file-size=300MB
 spring.servlet.multipart.max-request-size=300MB
 # \u6570\u636E\u5E93\u914D\u7F6E\uFF08\u672C\u5730\u8C03\u8BD5\u73AF\u5883\uFF09
-spring.datasource.url=jdbc:mysql://127.0.0.1:3306/songjiang?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
-spring.datasource.username=root
-spring.datasource.password=root
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/songjiang?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+#spring.datasource.username=root
+#spring.datasource.password=root
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+# \u6570\u636E\u5E93\u914D\u7F6E\uFF08\u672C\u5730\u8C03\u8BD5\u73AF\u5883\uFF09
+#spring.datasource.url=jdbc:mysql://127.0.0.1:3307/songjiang?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+#spring.datasource.username=root
+#spring.datasource.password=yysk1234
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 # \u6570\u636E\u5E93\u8FDE\u63A5\u4FE1\u606F\uFF08\u5F00\u53D1\u73AF\u5883\uFF09
-#spring.datasource.url=jdbc:transwarp2://172.30.75.126:31768/dws
+#spring.datasource.url=jdbc:transwarp2://172.30.75.126:31768/kjyy_dev
 #spring.datasource.username=dev_sjbdc_kjyy
 #spring.datasource.password=30DFBEABYi#5
 #spring.datasource.driver-class-name=io.transwarp.jdbc.QuarkDriver
@@ -20,9 +25,9 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 #spring.datasource.driver-class-name=com.argoDb.jdbc.Driver
 
 # JPA \u914D\u7F6E
-#spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
-spring.jpa.hibernate.ddl-auto=update
-spring.jpa.show-sql=false
+#spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
+#spring.jpa.hibernate.ddl-auto=update
+#spring.jpa.show-sql=false
 # \u677E\u6C5F\u8857\u9547
 app.area=\u677E\u6C5F
 app.town=\u5CB3\u9633\u8857\u9053\u3001\u6C38\u4E30\u8857\u9053\u3001\u65B9\u677E\u8857\u9053\u3001\u4E2D\u5C71\u8857\u9053\u3001\u5E7F\u5BCC\u6797\u8857\u9053\u3001\u4E5D\u91CC\u4EAD\u8857\u9053\u3001\u6CD7\u6CFE\u9547\u3001\u4F58\u5C71\u9547\u3001\u8F66\u58A9\u9547\u3001\u65B0\u6865\u9547\u3001\u6D1E\u6CFE\u9547\u3001\u4E5D\u4EAD\u9547\u3001\u6CD6\u6E2F\u9547\u3001\u77F3\u6E56\u8361\u9547\u3001\u65B0\u6D5C\u9547\u3001\u53F6\u69AD\u9547\u3001\u5C0F\u6606\u5C71\u9547