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¶m2=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