From 51feb82561e07846b32e8e480cf57091dca87247 Mon Sep 17 00:00:00 2001
From: zhaowenxuan <chacca165@163.com>
Date: 星期五, 31 五月 2024 14:27:22 +0800
Subject: [PATCH] 分页请求实现

---
 src/main/java/com/example/utils/DictionaryUtil.java |  363 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 274 insertions(+), 89 deletions(-)

diff --git a/src/main/java/com/example/utils/DictionaryUtil.java b/src/main/java/com/example/utils/DictionaryUtil.java
index 8b6ab76..ad8c6ee 100644
--- a/src/main/java/com/example/utils/DictionaryUtil.java
+++ b/src/main/java/com/example/utils/DictionaryUtil.java
@@ -26,80 +26,225 @@
  */
 public class DictionaryUtil {
     private static final Logger log = LoggerFactory.getLogger(DictionaryUtil.class);
-    private static final String BASE_API_URL = "https://mock.mengxuegu.com/mock/664d3dbce45d2156fa209c80/example/api/His/HisRequest";
+    private static String BASE_API_URL = "https://mock.mengxuegu.com/mock/664d3dbce45d2156fa209c80/example/api/His/HisRequest";
+    // 璇锋眰浠g爜鎬婚泦鍚�
     private static List<String> methods = new ArrayList<>();
     private static final String url = "jdbc:mysql://localhost:3306/test_urlreq";
     private static final String user = "root";
     private static final String password = "Root_ltkj123";
+    // 闇�瑕佸垎椤电殑浠g爜闆嗗悎
+    private static List<String> limits = new ArrayList<>();
 
+    /**
+     * 鏆傛椂涓嶅仛
+     * 1.18 璁¤垂鏄庣粏椤圭洰 MXJFXMZD
+     * 1.90 闂ㄨ瘖鏄庣粏璁¤垂鍙婄粍鍚堣璐归」鐩� MZJFZHMXXM
+     *
+     */
+
+// 鍒嗛〉姣忔1000鏉�
     static {
-        methods.add("KSFLZD");
-        methods.add("BQZD");
-        methods.add("ZKKSZD");
-        methods.add("KSZD");
-        methods.add("YWCKZD");
-        methods.add("GHZLZD");
-        methods.add("YHZD");
-        methods.add("XYZDZD");
-        methods.add("ZYZDZD");
-        methods.add("SSZD");
-        methods.add("ZLXTXZD");
-        methods.add("ZYZZZFZD");
-        methods.add("YJJFXMZD");
-        methods.add("EJJFXMZD");
-        methods.add("MXJFXMZD");
-        methods.add("ZHFLXMZD");
-        methods.add("JFZHXMZD");
-        methods.add("JFZHGLMXJFXMZD");
-        methods.add("CFLXZD");
-        methods.add("YPZLZD");
-        methods.add("YPJXZD");
-        methods.add("YPGXZD");
-        methods.add("YPLXZD");
-        methods.add("JLDWZD");
-        methods.add("YFZD");
-        methods.add("YPZD");
-        methods.add("JYKSZD");
-        methods.add("JYYSZD");
-        methods.add("JYFZZD");
-        methods.add("JYFLZD");
-        methods.add("JYFFZD");
-        methods.add("JYBBZD");
-        methods.add("JYXMZD");
-        methods.add("JYZBZD");
-        methods.add("JYXMZBZD");
-        methods.add("JFXMGLJYXMZD");
-        methods.add("JFZHGLJYXMZD");
-        methods.add("JCSBZD");
-        methods.add("JCBWFLZD");
-        methods.add("JCBWZD");
-        methods.add("JCBWMSZD");
-        methods.add("JFXMGLJCBWZD");
-        methods.add("JFZHXMGLJCBWZD");
+        methods.add("JGDM");
+        methods.add("ZDZYZ");
+//        methods.add("YQZD");
+//        methods.add("KSFLZD");
+//        methods.add("BQZD");
+//        methods.add("ZKKSZD");
+//        methods.add("KSZD");
+//        methods.add("YWCKZD");
+//        methods.add("GHZLZD");
+//        methods.add("YHZD");
+//        methods.add("XYZDZD");
+//        methods.add("ZYZDZD");
+//        methods.add("SSZD");
+//        methods.add("ZLXTXZD");
+//        methods.add("ZYZZZFZD");
+//        methods.add("YJJFXMZD");
+//        methods.add("EJJFXMZD");
+//        methods.add("ZHFLXMZD");
+//        methods.add("JFZHXMZD");
+//        methods.add("JFZHGLMXJFXMZD");
+//        methods.add("CFLXZD");
+//        methods.add("YPZLZD");
+//        methods.add("YPJXZD");
+//        methods.add("YPGXZD");
+//        methods.add("YPLXZD");
+//        methods.add("JLDWZD");
+//        methods.add("YFZD");
+//        methods.add("YPZD");
+//        methods.add("JYKSZD");
+//        methods.add("JYYSZD");
+//        methods.add("JYFZZD");
+//        methods.add("JYFLZD");
+//        methods.add("JYFFZD");
+//        methods.add("JYBBZD");
+//        methods.add("JYXMZD");
+//        methods.add("JYZBZD");
+//        methods.add("JYXMZBZD");
+//        methods.add("JFXMGLJYXMZD");
+//        methods.add("JFZHGLJYXMZD");
+//        methods.add("JCSBZD");
+//        methods.add("JCBWFLZD");
+//        methods.add("JCBWZD");
+//        methods.add("JCBWMSZD");
+//        methods.add("JFXMGLJCBWZD");
+//        methods.add("JFZHXMGLJCBWZD");
+//
+//        methods.add("TJDWXZZD");
+//        methods.add("TJRYLBZD");
+//        methods.add("TJLBZD");
+//        methods.add("TJFQZD");
+//        methods.add("TJKSZD");
+//        methods.add("TJYSZD");
+//        methods.add("TJXMZD");
+//        methods.add("TJZHXMZD");
+//        methods.add("TJZHGLMXZD");
+//        methods.add("TJTCZD");
+//        methods.add("TJTCGLTJZHZD");
+//
+//        methods.add("HTDWZD");
+//        methods.add("ZFLXZD");
+//        methods.add("MZJCJYSQD");
+//        methods.add("MZJCJYSQXMFL");
+//        methods.add("MZJCJYSQDDYXM");
+//        methods.add("BRFB");
 
-        methods.add("TJDWXZZD");
-        methods.add("TJRYLBZD");
-        methods.add("TJLBZD");
-        methods.add("TJFQZD");
-        methods.add("TJKSZD");
-        methods.add("TJYSZD");
-        methods.add("TJXMZD");
-        methods.add("TJZHXMZD");
-        methods.add("TJZHGLMXZD");
-        methods.add("TJTCZD");
-        methods.add("TJTCGLTJZHZD");
-        methods.add("HTDWZD");
-        methods.add("ZFLXZD");
-        methods.add("MZJCJYSQD");
-        methods.add("MZJCJYSQXMFL");
-        methods.add("MZJCJYSQDDYXM");
-        methods.add("MZJFZHMXXM");
-        methods.add("BRFB");
+        limits.add("ZDZYZ");
+        limits.add("KSZD");
+        limits.add("YHZD");
+        limits.add("XYZDZD");
+        limits.add("ZYZDZD");
+        limits.add("SSZD");
+        limits.add("ZLXTXZD");
+        limits.add("ZYZZZFZD");
+        limits.add("JFZHGLMXJFXMZD");
+        limits.add("YPZD");
+        limits.add("JYKSZD");
+        limits.add("JYYSZD");
+        limits.add("JYXMZD");
+        limits.add("JYZBZD");
+        limits.add("JYXMZBZD");
+        limits.add("JFXMGLJYXMZD");
+        limits.add("JFZHGLJYXMZD");
+        limits.add("JFXMGLJCBWZD");
+        limits.add("TJKSZD");
+        limits.add("TJYSZD");
+        limits.add("TJXMZD");
+        limits.add("TJZHXMZD");
+        limits.add("TJZHGLMXZD");
+        limits.add("TJTCZD");
+        limits.add("TJTCGLTJZHZD");
     }
 
     public static void main(String[] args) {
         DictionaryUtil util = new DictionaryUtil();
-        util.exec();
+//        util.exec();
+        util.exec1();
+    }
+
+    private void exec1() {
+        int size = 1000;
+        Connection connection = getConnection();
+        methods.forEach(method -> {
+            System.out.println("寰潖鐨勬帴鍙d唬鐮� ->" + method);
+            String tabName = "ltkj_" + method;
+//            String params = "method="+method;
+            boolean isLimit = false;
+            int page = 1;
+            int maxPage = 1;
+            JSONObject object = JSONUtil.createObj();
+            object.putOpt("method", method);
+            if (limits.contains(method)) {
+                isLimit = true;
+//                params+="&pagecount="+size+"&page="+page;
+                object.putOpt("pagecount", size);
+                object.putOpt("page", page);
+            }
+            JSONObject entries = execRequest(object.toString());
+//            JSONObject entries = execRequest(params);
+            assert entries != null;
+            JSONObject response = entries.getJSONObject("Response");
+            if ("0".equals(response.getStr("ResultCode"))) {
+                if (isLimit) {
+                    maxPage = LimitInsertData(connection, tabName, response);
+                    log.info("璁$畻椤电爜涓� ->{}", maxPage);
+                    if (maxPage > 1) {
+                        page += 1;
+                        for (int i = page; i <= maxPage; i++) {
+//                                params+="&pagecount="+size+"&page="+page;
+                            object.clear();
+                            object.putOpt("method", method);
+                            object.putOpt("pagecount", size);
+                            object.putOpt("page", page);
+//                                entries = execRequest(params);
+                            entries = execRequest(object.toString());
+                            assert entries != null;
+                            response = entries.getJSONObject("Response");
+                            if ("0".equals(response.getStr("ResultCode"))) {
+                                LimitInsertData(connection, tabName, response);
+                            } else {
+//                                    log.error("璇锋眰澶辫触锛�"+params);
+                                log.error("璇锋眰澶辫触锛�" + object.toString());
+                            }
+                            page++;
+                        }
+                    }
+                } else {
+                    JSONArray resultData = response.getJSONArray("ResultData");
+                    JSONObject jsonObject = JSONUtil.toList(resultData, JSONObject.class).get(0);
+                    editDataBase(connection, tabName, resultData, jsonObject);
+                }
+            } else {
+//                    log.error("璇锋眰澶辫触锛�"+params);
+                log.error("璇锋眰澶辫触锛�" + object.toString());
+            }
+        });
+    }
+
+    /**
+     * 閽堝浜庡垎椤垫帴鍙� 鍒涘缓琛ㄣ�佹彃鍏ユ暟鎹�
+     *
+     * @param connection
+     * @param tabName
+     * @param response
+     * @return
+     */
+    private int LimitInsertData(Connection connection, String tabName, JSONObject response) {
+        int maxPage;
+        // 琛屾暟
+        Integer rowNumber = response.getInt("RowNumber");
+        // 鎬绘潯鏁�
+        Integer totalCount = response.getInt("totalCount");
+        JSONArray jsonArray = response.getJSONArray("ResultData");
+        maxPage = (totalCount + 1000 - 1) / 1000;
+        System.out.println("闆嗗悎澶у皬 ->" + jsonArray.size());
+        jsonArray.forEach(obj -> {
+            editDataBase(connection, tabName, jsonArray, (JSONObject) obj);
+        });
+        return maxPage;
+    }
+
+    /**
+     * 鎿嶄綔鏁版嵁搴�
+     *
+     * @param connection
+     * @param tabName
+     * @param jsonArray
+     * @param obj
+     */
+    private void editDataBase(Connection connection, String tabName, JSONArray jsonArray, JSONObject obj) {
+        try {
+            if (!tabIsExists(connection, tabName)) {
+                // 鍒涘缓琛�
+                creatTable(obj, tabName, connection);
+            }
+            // 瀵规瘮瀛楁 骞舵彃鍏ユ暟鎹�
+            operationTable(obj, tabName, connection);
+        } catch (SQLException throwables) {
+            log.error("鏁版嵁搴撴搷浣滃紓甯�");
+            log.error(throwables.getSQLState());
+            log.error(throwables.getMessage());
+        }
     }
 
     private void exec() {
@@ -119,12 +264,53 @@
                         creatTable(resultDataIndex1, tabName, connection);
                     }
                     // 瀵规瘮瀛楁 骞舵彃鍏ユ暟鎹�
-                    operationTable(jsonArray, tabName, connection);
+                    operationTable((JSONObject) jsonArray.get(0), tabName, connection);
                 } catch (SQLException throwables) {
                     throwables.printStackTrace();
                 }
             }
         }
+    }
+
+    /**
+     * 鎵цpost璇锋眰
+     *
+     * @param params 璇锋眰鍙傛暟 渚嬪锛� param1=val1&param2=val2
+     * @return 璇锋眰杩斿洖鐨刯son杞崲鍚庣殑JSONObject瀵硅薄
+     */
+    private JSONObject execRequest(String params) {
+//        System.out.println(params);
+        URL url = null;
+        HttpURLConnection connection = null;
+        try {
+            BASE_API_URL = "http://localhost:5011/api/His/HisRequest";
+            url = new URL(BASE_API_URL);
+            connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("POST");
+            connection.setRequestProperty("Accept", "application/json");
+//            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            connection.setRequestProperty("Content-Type", "application/json;utf-8");
+            connection.setDoOutput(true);
+            OutputStream stream = connection.getOutputStream();
+            stream.write(params.getBytes(StandardCharsets.UTF_8));
+//            System.out.println(connection.getResponseCode());
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            StringBuilder builder = new StringBuilder();
+            String str;
+            while ((str = reader.readLine()) != null) {
+                builder.append(str);
+            }
+            log.info("璇锋眰鍙傛暟 ->{}", params);
+//            log.info("鎵ц璇锋眰鍝嶅簲锛歿}", builder.toString());
+            return JSONUtil.parseObj(builder.toString());
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.disconnect();
+            }
+        }
+        return null;
     }
 
     /**
@@ -192,7 +378,7 @@
         PreparedStatement statement = connection.prepareStatement(tabSql);
         statement.setString(1, "test_urlreq");
         statement.setString(2, tableName);
-        log.info("鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� sql-> {}", statement.toString());
+//        log.info("鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� sql-> {}", statement.toString());
         ResultSet resultSet = statement.executeQuery();
         boolean next = resultSet.next();
         statement.close();
@@ -202,34 +388,31 @@
     /**
      * 鎿嶄綔琛�
      *
-     * @param jsonArray
      * @param tabName
      * @param connection
      * @throws SQLException
      */
-    private void operationTable(JSONArray jsonArray, String tabName, Connection connection) throws SQLException {
+    private void operationTable(JSONObject jsonObject, String tabName, Connection connection) throws SQLException {
         List<String> columns = getColumns(tabName, connection);
-        log.info("褰撳墠琛ㄥ瓧娈典负 ->{}", columns);
+//        log.info("褰撳墠琛ㄥ瓧娈典负 ->{}", columns);
         ArrayList<String> responseColums = new ArrayList<>();
-        for (int i = 0; i < jsonArray.size(); i++) {
-            JSONObject jsonObject = jsonArray.getJSONObject(i);
-            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
-                responseColums.add(entry.getKey());
+        for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+            responseColums.add(entry.getKey());
+        }
+//            log.info("璇锋眰杩斿洖鐨勫瓧娈典负 ->{}", responseColums);
+        responseColums.removeAll(columns);
+        if (!responseColums.isEmpty()) {
+            // 闇�瑕佸鍔犲瓧娈� 骞舵彃鍏ユ暟鎹�
+            for (String colum : responseColums) {
+                String sql = "alter table " + tabName + " add column " + colum + " text null";
+//                    log.info("淇敼瀛楁 ->{}",sql.toString());
+                Statement statement = connection.createStatement();
+                statement.executeUpdate(sql);
+                statement.close();
             }
-            log.info("璇锋眰杩斿洖鐨勫瓧娈典负 ->{}", responseColums);
-            responseColums.removeAll(columns);
-            if (!responseColums.isEmpty()) {
-                // 闇�瑕佸鍔犲瓧娈� 骞舵彃鍏ユ暟鎹�
-                for (String colum : responseColums) {
-                    String sql = "alter table " + tabName + " add column " + colum + " text null";
-                    Statement statement = connection.createStatement();
-                    statement.executeUpdate(sql);
-                    statement.close();
-                }
-                insertData(tabName, connection, jsonObject);
-            } else {
-                insertData(tabName, connection, jsonObject);
-            }
+            insertData(tabName, connection, jsonObject);
+        } else {
+            insertData(tabName, connection, jsonObject);
         }
     }
 
@@ -242,6 +425,7 @@
      * @throws SQLException
      */
     private void insertData(String tabName, Connection connection, JSONObject jsonObject) throws SQLException {
+//        System.out.println("jsonObject = " + jsonObject);
         // 鎻掑叆鏁版嵁鍓� 鍏堟煡璇㈡暟鎹槸鍚﹀瓨鍦�
         StringBuilder selectSqlBuilder = new StringBuilder();
         StringBuilder insertSqlBuilder = new StringBuilder();
@@ -257,7 +441,7 @@
         valueBuilder.delete(valueBuilder.length() - 2, valueBuilder.length());
         selectSqlBuilder.delete(selectSqlBuilder.length() - 5, selectSqlBuilder.length());
         insertSqlBuilder.append(") values (").append(valueBuilder).append(")");
-        log.info("鎻掑叆鍓嶆煡璇� sql ->{}", selectSqlBuilder.toString());
+//        log.info("鎻掑叆鍓嶆煡璇� sql ->{}", selectSqlBuilder.toString());
         Statement statement = connection.prepareStatement(selectSqlBuilder.toString());
         ResultSet resultSet = statement.executeQuery(selectSqlBuilder.toString());
         resultSet.next();
@@ -265,12 +449,12 @@
         statement.close();
         // 濡傛灉涓嶄负0 鍒欒繖鏉℃暟鎹瓨鍦� 涓嶈繘琛屾彃鍏�
         if (!"0".equals(string)) {
-            log.info("鏁版嵁瀛樺湪涓嶉渶瑕佹彃鍏� {}", jsonObject);
+//            log.info("鏁版嵁瀛樺湪涓嶉渶瑕佹彃鍏� {}", jsonObject);
             return;
         }
         // 鎻掑叆鏁版嵁
         statement = connection.createStatement();
-        log.info("鎻掑叆鏁版嵁 sql-> {}", insertSqlBuilder.toString());
+//        log.info("鎻掑叆鏁版嵁 sql-> {}", insertSqlBuilder.toString());
         statement.execute(insertSqlBuilder.toString());
         statement.close();
     }
@@ -309,6 +493,7 @@
         }
         sql = new StringBuilder(sql.substring(0, sql.length() - 1));
         sql.append(");");
+//        log.info("鍒涘缓琛ㄦ牸 -> {}",sql.toString());
         Statement statement = connection.createStatement();
         statement.execute(sql.toString());
     }

--
Gitblit v1.8.0