From 6d09f4ac6ee4718acd131f234f24ad1ac3c2ce3c Mon Sep 17 00:00:00 2001 From: zjh <zjh@888> Date: 星期三, 19 六月 2024 12:11:36 +0800 Subject: [PATCH] zjh 本地 2024/06/19 --1 --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java | 216 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 149 insertions(+), 67 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 de2736f..8f243c6 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 @@ -1,5 +1,6 @@ package com.ltkj.web.controller.his; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @@ -34,7 +35,7 @@ public class HisApiGetMethodService { // 鏁版嵁搴撻厤缃枃浠惰矾寰� private static final String CONFIG_PATH = "D:\\ltkjprojectconf\\config.properties"; -// private static final String CONFIG_PATH = "D:\\ltkjprojectconf\\config.properties"; +// private static final String CONFIG_PATH = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/ltkj_peis/ltkj-admin/src/main/resources/config.properties"; // 鏁版嵁搴撳悕 private static String DB_NAME = ""; private static String HIS_URL = ""; @@ -76,7 +77,10 @@ * @param type 鎺ュ彛浠g爜 * @param params 璇锋眰鍙傛暟 * @return + * @deprecated + * 鏂规硶宸插純鐢�,灏唖witch鏇存敼涓烘暟鎹簱鍖归厤 浣跨敤鏂版柟娉晎@link #getHISDataNew(String, Map)} */ + @Deprecated @Transactional public AjaxResult getHISData(String type, Map<String, Object> params) { AjaxResult result = null; @@ -138,7 +142,7 @@ List<Map<String, String>> list = new ArrayList<>(); for (Object resultDatum : resultData) { JSONObject object = (JSONObject) resultDatum; - ajaxResult = save(object, type,null); + ajaxResult = save(object, type,null,JSONUtil.toJsonStr(params)); Map<String, String> map = new HashMap<>(); for (String key : object.keySet()) { String defaultVal = object.get(key).toString(); @@ -170,21 +174,27 @@ return AjaxResult.error().put("result", JSONUtil.parseObj(json)); } } - + @Transactional public AjaxResult getHISDataNew(String type, Map<String, Object> params){ LambdaQueryWrapper<HisApiConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>(); 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; - ajaxResult = save(object, type,hisApiConfig); + ajaxResult = save(object, type,hisApiConfig,JSONUtil.toJsonStr(params)); Map<String, String> map = new HashMap<>(); for (String key : object.keySet()) { String defaultVal = object.get(key).toString(); @@ -208,7 +218,7 @@ * @param code 鎺ュ彛浠g爜 * @return 鎵ц鏄惁鎴愬姛 */ - public AjaxResult save(JSONObject object, String code,HisApiConfig hisApiConfig) { + public AjaxResult save(JSONObject object, String code,HisApiConfig hisApiConfig,String paramsJson) { Connection connection = getConnection(); Boolean isExists = tabIsExists(connection, hisApiConfig.getTabName()); if (null == isExists) @@ -223,7 +233,7 @@ } //鎻掑叆鏁版嵁 try { - operationTable(object,connection,hisApiConfig); + operationTable(object,connection,hisApiConfig,paramsJson); } catch (SQLException e) { e.printStackTrace(); return AjaxResult.error(); @@ -236,63 +246,24 @@ } /** - * ResultData涓洪泦鍚� - * 鏍规嵁his鎺ュ彛杩斿洖鍊� 鎻掑叆鏁版嵁 - * 濡傛灉娌℃湁琛ㄥ垯鍒涘缓琛� 鎺ュ彛澧炲姞浜嗗瓧娈靛垯涓鸿〃澧炲姞瀛楁 - * - * @param code 鎺ュ彛浠g爜 - * @return 鎵ц鏄惁鎴愬姛 - */ - public AjaxResult saveArray(String json, String code) { - code = code.toLowerCase(); - JSONObject jsonObject = JSONUtil.parseObj(json); - JSONObject response = jsonObject.getJSONObject("Response"); - String tabName = "ltkj_" + code; - if (response.getStr("ResultCode").equals("0")) { - JSONArray resultData = response.getJSONArray("ResultData"); - Connection connection = getConnection(); - for (Object resultDatum : resultData) { - JSONObject object = (JSONObject) resultDatum; - Boolean isExists = tabIsExists(connection, tabName); - if (null == isExists) - return AjaxResult.error(); - if (!isExists) { - try { - creatTable(object, tabName, connection); - } catch (SQLException throwables) { - throwables.printStackTrace(); - return AjaxResult.error(); - } - } - //鎻掑叆鏁版嵁 - try { - operationTable(object,connection,null); - } catch (SQLException throwables) { - throwables.printStackTrace(); - return AjaxResult.error(); - } - } - try { - if (connection != null) - connection.close(); - } catch (SQLException throwables) { - } - } - return AjaxResult.success(); - } - - /** * 鎿嶄綔琛� * * @param connection * @throws SQLException */ - private void operationTable(JSONObject jsonObject, Connection connection,HisApiConfig hisApiConfig) throws SQLException { + private void operationTable(JSONObject jsonObject, Connection connection,HisApiConfig hisApiConfig,String paramsJson) throws SQLException { List<String> columns = getColumns(hisApiConfig.getTabName(), connection); ArrayList<String> responseColums = new ArrayList<>(); for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String key = entry.getKey().trim().toLowerCase(); responseColums.add(key); + } + Map<String, Object> beanToMap = BeanUtil.beanToMap(JSONUtil.parseObj(paramsJson)); + Set<Map.Entry<String, Object>> entries = beanToMap.entrySet(); + for (Map.Entry<String, Object> entry : entries) { + String key = "request_params_"+entry.getKey().trim().toLowerCase(); + if (!columns.contains(key)) + responseColums.add(key); } responseColums.removeAll(columns); if (!responseColums.isEmpty()) { @@ -302,30 +273,26 @@ statement.executeUpdate(sql); statement.close(); } - if (hisApiConfig == null) - insertData(hisApiConfig.getTabName(), connection, jsonObject); - else insertDataNew(connection, jsonObject,hisApiConfig); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson); } else { - if (hisApiConfig == null) - insertData(hisApiConfig.getTabName(), connection, jsonObject); - else insertDataNew(connection, jsonObject,hisApiConfig); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson); } } /** * 鎻掑叆鏁版嵁 * - * @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 +302,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()); @@ -366,7 +346,7 @@ * @param jsonObject * @throws SQLException */ - private void insertDataNew(Connection connection, JSONObject jsonObject,HisApiConfig hisApiConfig) throws SQLException { + private void insertDataNew(Connection connection, JSONObject jsonObject,HisApiConfig hisApiConfig,String paramsJson) throws SQLException { List<String> primaryKesList = Arrays.stream(hisApiConfig.getPrimaryKeys().split(",")).map(String::toLowerCase).collect(Collectors.toList()); StringBuilder deleteSqlBuilder = new StringBuilder(); StringBuilder insertSqlBuilder = new StringBuilder(); @@ -384,6 +364,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()); @@ -392,8 +385,25 @@ // log.info("鍒犻櫎鏉℃暟 ->{}",i); statement.close(); insertSqlBuilder.append("insert_time, "); + insertSqlBuilder.append("request_params, "); + DatabaseMetaData metaData = connection.getMetaData(); + try (ResultSet resultSet = metaData.getColumns(null, null, hisApiConfig.getTabName(), "request_params")) { + if (!resultSet.next()){ + String alterTableSQL = String.format("ALTER TABLE %s ADD COLUMN %s %s", hisApiConfig.getTabName(), "request_params", "text"); + statement = connection.createStatement(); + statement.execute(alterTableSQL); + } + } String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); valueBuilder.append("'").append(time).append("'").append(", "); + valueBuilder.append("'").append(paramsJson).append("'").append(", "); + Map<String, Object> beanToMap = BeanUtil.beanToMap(JSONUtil.parseObj(paramsJson)); + Set<Map.Entry<String, Object>> entries = beanToMap.entrySet(); + for (Map.Entry<String, Object> entry : entries) { + String key = "request_params_"+entry.getKey().trim().toLowerCase(); + insertSqlBuilder.append(key).append(", "); + valueBuilder.append("'").append(entry.getValue().toString()).append("', "); + } insertSqlBuilder.delete(insertSqlBuilder.length() - 2, insertSqlBuilder.length()); valueBuilder.delete(valueBuilder.length() - 2, valueBuilder.length()); insertSqlBuilder.append(") values (").append(valueBuilder).append(")"); @@ -402,6 +412,77 @@ statement = connection.createStatement(); statement.execute(insertSqlBuilder.toString()); statement.close(); + } + + /** + * 鑾峰彇鍒楃被鍨� + * @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); + } } /** @@ -438,6 +519,7 @@ sql.append(key).append(" VARCHAR(200) null,"); } sql.append("insert_time").append(" VARCHAR(200) null,"); + sql.append("request_params").append(" text null COMMENT '璇锋眰鍙傛暟',"); sql = new StringBuilder(sql.substring(0, sql.length() - 1)); sql.append(");"); Statement statement = connection.createStatement(); -- Gitblit v1.8.0