From cb36319a6de6a18b00465e87c04e21faf4b0be94 Mon Sep 17 00:00:00 2001 From: 赵文轩 <1652863494@qq.com> Date: 星期三, 12 六月 2024 16:52:58 +0800 Subject: [PATCH] 根据字段值判断是否扩增字段或超过阈值更改为text --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java | 121 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 112 insertions(+), 9 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java index b4e8242..08bc676 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java @@ -177,10 +177,16 @@ lambdaQueryWrapper.eq(HisApiConfig::getApiMethod, type); HisApiConfig hisApiConfig = hisApiConfigService.getOne(lambdaQueryWrapper); String responseJson = HttpClientUtils.sendPost(HIS_URL + hisApiConfig.getApiUrl(), params); - JSONObject response = JSONUtil.parseObj(responseJson).getJSONObject("Response"); - if (response.getStr("ResultCode").equals("0")) { + Integer isResponse = hisApiConfig.getIsResponse(); + JSONObject response = null; + if (isResponse == 1) { + response = JSONUtil.parseObj(responseJson).getJSONObject("Response"); + } else{ + response = JSONUtil.parseObj(responseJson); + } + if (response.getStr(hisApiConfig.getResultCodeKey()).equals("0")) { AjaxResult ajaxResult = AjaxResult.success(); - JSONArray resultData = response.getJSONArray("ResultData"); + JSONArray resultData = response.getJSONArray(hisApiConfig.getResultDataKey()); List<Map<String, String>> list = new ArrayList<>(); for (Object resultDatum : resultData) { JSONObject object = (JSONObject) resultDatum; @@ -303,11 +309,11 @@ statement.close(); } if (hisApiConfig == null) - insertData(hisApiConfig.getTabName(), connection, jsonObject); + insertData(hisApiConfig, connection, jsonObject); else insertDataNew(connection, jsonObject,hisApiConfig); } else { if (hisApiConfig == null) - insertData(hisApiConfig.getTabName(), connection, jsonObject); + insertData(hisApiConfig, connection, jsonObject); else insertDataNew(connection, jsonObject,hisApiConfig); } } @@ -315,17 +321,17 @@ /** * 鎻掑叆鏁版嵁 * - * @param tabName + * @param hisApiConfig * @param connection * @param jsonObject * @throws SQLException */ - private void insertData(String tabName, Connection connection, JSONObject jsonObject) throws SQLException { + private void insertData(HisApiConfig hisApiConfig, Connection connection, JSONObject jsonObject) throws SQLException { StringBuilder insertSqlBuilder = new StringBuilder(); StringBuilder valueBuilder = new StringBuilder(); StringBuilder selectSqlBuilder = new StringBuilder(); - insertSqlBuilder.append("insert into ").append(tabName).append(" ("); - selectSqlBuilder.append("select count(1) as count from ").append(tabName).append(" where "); + insertSqlBuilder.append("insert into ").append(hisApiConfig.getTabName()).append(" ("); + selectSqlBuilder.append("select count(1) as count from ").append(hisApiConfig.getTabName()).append(" where "); for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String defaultVal = entry.getValue().toString(); String key = entry.getKey().trim().toLowerCase(); @@ -335,6 +341,19 @@ insertSqlBuilder.append(key).append(", "); valueBuilder.append("'").append(val).append("', "); selectSqlBuilder.append(key).append(" = '").append(val).append("' and "); + // 鍒ゆ柇鏁版嵁鏄惁澶т簬瀛楁鍒涘缓鍊煎鏋滃ぇ浜庡垯澧炲姞瓒呰繃闃堝�煎垯浣跨敤text + String columnType = getColumnType(connection, hisApiConfig.getTabName(), key); + if (!"text".equalsIgnoreCase(columnType)){ + int currentSize = getColumnSize(connection, hisApiConfig.getTabName(), key); + if (currentSize < val.length()){ + if (val.length()>= 1000){ + alterColumnTypeToText(connection, hisApiConfig.getTabName(), key); + }else { + int newSize = ((val.length() / 100) + 1) * 100; + alterColumnSize(connection, hisApiConfig.getTabName(), key, newSize); + } + } + } } selectSqlBuilder.delete(selectSqlBuilder.length() - 5, selectSqlBuilder.length()); Statement statement = connection.prepareStatement(selectSqlBuilder.toString()); @@ -384,6 +403,19 @@ } insertSqlBuilder.append(key).append(", "); valueBuilder.append("'").append(val).append("', "); + // 鍒ゆ柇鏁版嵁鏄惁澶т簬瀛楁鍒涘缓鍊煎鏋滃ぇ浜庡垯澧炲姞瓒呰繃闃堝�煎垯浣跨敤text + String columnType = getColumnType(connection, hisApiConfig.getTabName(), key); + if (!"text".equalsIgnoreCase(columnType)){ + int currentSize = getColumnSize(connection, hisApiConfig.getTabName(), key); + if (currentSize < val.length()){ + if (val.length()>= 1000){ + alterColumnTypeToText(connection, hisApiConfig.getTabName(), key); + }else { + int newSize = ((val.length() / 100) + 1) * 100; + alterColumnSize(connection, hisApiConfig.getTabName(), key, newSize); + } + } + } } deleteSqlBuilder.delete(deleteSqlBuilder.length() - 5, deleteSqlBuilder.length()); Statement statement = connection.prepareStatement(deleteSqlBuilder.toString()); @@ -405,6 +437,77 @@ } /** + * 鑾峰彇鍒楃被鍨� + * @param connection + * @param tableName + * @param columnName + * @return + * @throws SQLException + */ + private static String getColumnType(Connection connection, String tableName, String columnName) throws SQLException { + String query = "SELECT DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, tableName); + statement.setString(2, columnName); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return resultSet.getString("DATA_TYPE"); + } + } + return ""; + } + + /** + * 鑾峰彇鍒楅暱搴� + * @param connection + * @param tableName + * @param columnName + * @return + * @throws SQLException + */ + private static int getColumnSize(Connection connection, String tableName, String columnName) throws SQLException { + String query = "SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, tableName); + statement.setString(2, columnName); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return resultSet.getInt("CHARACTER_MAXIMUM_LENGTH"); + } + } + return 0; + } + + /** + * 淇敼鍒楅暱搴� + * @param connection + * @param tableName + * @param columnName + * @param newSize + * @throws SQLException + */ + private static void alterColumnSize(Connection connection, String tableName, String columnName, int newSize) throws SQLException { + String alterQuery = String.format("ALTER TABLE %s MODIFY %s VARCHAR(%d)", tableName, columnName, newSize); + try (Statement statement = connection.createStatement()) { + statement.executeUpdate(alterQuery); + } + } + + /** + * 瓒呰繃闃堝�煎垯淇敼涓簍ext绫诲瀷 + * @param connection + * @param tableName + * @param columnName + * @throws SQLException + */ + private static void alterColumnTypeToText(Connection connection, String tableName, String columnName) throws SQLException { + String alterQuery = String.format("ALTER TABLE %s MODIFY %s TEXT", tableName, columnName); + try (Statement statement = connection.createStatement()) { + statement.executeUpdate(alterQuery); + } + } + + /** * 鑾峰彇琛ㄧ殑鍒� * * @param tabName -- Gitblit v1.8.0