From 1e91dc33009cfdc951b2642877f40280b51c3089 Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期五, 28 二月 2025 15:17:01 +0800 Subject: [PATCH] zjh20250228 --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java | 594 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 473 insertions(+), 121 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 319645b..9aa67d2 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,117 +1,316 @@ 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; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.core.domain.AjaxResult; +import com.ltkj.hosp.domain.ApiConfig; +import com.ltkj.hosp.domain.HisApiConfig; +import com.ltkj.hosp.service.ApiConfigService; +import com.ltkj.hosp.service.HisApiConfigService; +import com.ltkj.web.wxUtils.HttpClientUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.sql.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.Date; +import java.util.stream.Collectors; /** * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 * @Author: zhaowenxuan * @Date: 2024/5/31 14:38 */ +@Slf4j @Component public class HisApiGetMethodService { + + // 鏁版嵁搴撻厤缃枃浠惰矾寰� - private static final String CONFIG_PATH = "D:\\ltkjprojectconf\\config.properties"; +// private static final String CONFIG_PATH = url; +// 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 = ""; + private static String DATA_URL = ""; + private static String DATA_USER =""; + private static String DATA_PASS = ""; + private static String LIS_URL = ""; + private static String PACS_URL = ""; @Autowired private HisApiMethodService controller; + @Autowired + private HisApiConfigService hisApiConfigService; + @Autowired + private ApiConfigService apiConfigService; + + private static String url; + + + @Value ("${config.properties}") + public void set(String urls){ + url=urls; + FileInputStream inputStream = null; + try { + inputStream = new FileInputStream(url); + Properties props = new Properties(); + props.load(inputStream); + DB_NAME = props.getProperty("name"); + DATA_URL = "jdbc:mysql://" + props.getProperty("ip") + ":" + props.getProperty("prot") + "/" + DB_NAME + "" + + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8"; + DATA_USER = props.getProperty("username"); + DATA_PASS = props.getProperty("password"); + String apiUrl = props.getProperty("his_api_url"); + String apiPort = props.getProperty("his_api_port"); + HIS_URL = apiUrl+":"+apiPort; + String lisApiUrl = props.getProperty("lis_api_url"); + String lisApiPort = props.getProperty("lis_api_port"); + LIS_URL = lisApiUrl+":"+lisApiPort; + String pacsApiUrl = props.getProperty("pacs_api_url"); + String pacsApiPort = props.getProperty("pacs_api_port"); + PACS_URL = pacsApiUrl+":"+pacsApiPort; + } catch (IOException e) { + System.out.println("鍒濆鍖栨暟鎹簱寮傚父 ->"+e.getMessage()); + } + } + + static { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } +// try { +// InputStreamReader reader = new InputStreamReader(new FileInputStream(url), StandardCharsets.UTF_8); +// Properties props = new Properties(); +// props.load(reader); +// String api_url = props.getProperty("his_api_url"); +// String port = props.getProperty("his_api_port"); +// DB_NAME = props.getProperty("name"); +// DATA_URL = "jdbc:mysql://" + props.getProperty("ip") + ":" + props.getProperty("prot") + "/" + DB_NAME + +// "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8"; +// DATA_USER = props.getProperty("username"); +// DATA_PASS = props.getProperty("password"); +// HIS_URL=api_url+":"+port; +// } catch (IOException throwables) { +// throwables.printStackTrace(); +// } + } /** - * 鑾峰彇 + * 鑾峰彇鏁版嵁 * + * @param type 鎺ュ彛浠g爜 + * @param params 璇锋眰鍙傛暟 * @return + * @deprecated + * 鏂规硶宸插純鐢�,灏唖witch鏇存敼涓烘暟鎹簱鍖归厤 浣跨敤鏂版柟娉晎@link #getHISDataNew(String, Map)} */ + @Deprecated + @Transactional public AjaxResult getHISData(String type, Map<String, Object> params) { - // Getoutaccountrecord 鑾峰彇闂ㄨ瘖缁撶畻璁板綍 - // Getoutpatientcostinfo 鑾峰彇闂ㄨ瘖鎮h�呰垂鐢ㄦ竻鍗曚俊鎭� - // Getlaburgentinfo 鑾峰彇鍗辨�ュ�间俊鎭� - // Getlabgermdetailinfo 鑾峰彇寰敓鐗╄嵂鏁忎俊鎭� - // Getlabgermrepinfo 鑾峰彇寰敓鐗╂姤鍛婅褰曚俊鎭� - // Getlabreportinfo 鑾峰彇妫�楠屾姤鍛婅褰曚俊鎭� - // Getlabapplyinfo 鑾峰彇妫�楠岀敵璇蜂俊鎭� - // Getexamurgentinfo 鑾峰彇妫�鏌ュ嵄鎬ュ�间俊鎭� - // Getexamreportinfo 鑾峰彇妫�鏌ユ姤鍛婁俊鎭� - // Getexamapplyinfo 鑾峰彇妫�鏌ョ敵璇蜂俊鎭� AjaxResult result = null; + // TODO 鍒涘缓琛� 寮勬垚鏁版嵁搴撳姩鎬佽幏鍙� 鎺ュ彛鍦板潃銆佷唬鐮併�佹槸鍚﹀垎椤点�佷富閿甶d銆佷富閿瓧娈� + // TODO 浠�2.4.2鑾峰彇鍒版暟鎹� 鏍规嵁his_registration_id鍒犻櫎鏃ф暟鎹湪鎻掑叆鏂版暟鎹� 涓嬪眰涓氬姟鍧囦竴鏍锋牴鎹繑鍥炵殑JYBGID鍒犻櫎鏃ф暟鎹湪鎻掑叆鏂版暟鎹� switch (type) { case "Getoutaccountrecord": result = controller.Getoutaccountrecord(params); - result.put("limit",true); +// result.put("limit", true); break; case "Getoutpatientcostinfo": result = controller.Getoutpatientcostinfo(params); - result.put("limit",true); +// result.put("limit", true); break; case "Getlaburgentinfo": result = controller.Getlaburgentinfo(params); - result.put("limit",false); +// result.put("limit", false); break; case "Getlabgermdetailinfo": result = controller.Getlabgermdetailinfo(params); - result.put("limit",false); +// result.put("limit", false); break; case "Getlabgermrepinfo": result = controller.Getlabgermrepinfo(params); - result.put("limit",false); +// result.put("limit", false); break; case "Getlabreportinfo": result = controller.Getlabreportinfo(params); - result.put("limit",true); +// result.put("limit", true); break; case "Getlabapplyinfo": result = controller.Getlabapplyinfo(params); - result.put("limit",false); +// result.put("limit", false); break; case "Getexamurgentinfo": result = controller.Getexamurgentinfo(params); - result.put("limit",true); +// result.put("limit", true); break; case "Getexamreportinfo": result = controller.Getexamreportinfo(params); - result.put("limit",true); +// result.put("limit", true); break; case "Getexamapplyinfo": result = controller.Getexamapplyinfo(params); - result.put("limit",false); +// result.put("limit", false); + break; + case "Getlabdetailinfo": + result = controller.Getlabdetailinfo(params); +// result.put("limit", false); break; } String json = result.get("data").toString(); JSONObject response = JSONUtil.parseObj(json).getJSONObject("Response"); if (response.getStr("ResultCode").toString().equals("0")) { - // TODO 濡傛灉涓嶅甫鍒嗛〉鍙傛暟 杩斿洖鐨勬暟鎹兘鏄璞� 鍒欏湪杩欓噷閫氳繃result.get("limit")杩涜鍒ゆ柇 澶勭悊瀵硅薄鎴栭泦鍚堝苟杩斿洖 + AjaxResult ajaxResult = AjaxResult.success(); +// if ((boolean) result.get("limit")) { +// ajaxResult = saveArray(json, type); JSONArray resultData = response.getJSONArray("ResultData"); - List<Map<String, Object>> list = new ArrayList<>(); + List<Map<String, String>> list = new ArrayList<>(); for (Object resultDatum : resultData) { JSONObject object = (JSONObject) resultDatum; - Map<String, Object> map = new HashMap<>(); + ajaxResult = save(object, type,null,JSONUtil.toJsonStr(params)); + Map<String, String> map = new HashMap<>(); for (String key : object.keySet()) { - map.put(key, object.get(key)); + String defaultVal = object.get(key).toString(); + String val = defaultVal.trim().replaceAll("\\s+", ""); + map.put(key, val); } list.add(map); } - AjaxResult ajaxResult = null; - if ((boolean)result.get("limit")){ - ajaxResult = saveArray(json, type); - }else { - ajaxResult = save(response.getJSONObject("ResultData"),type); - } ajaxResult.put("data", list); +// } else { +// // 浠ラ泦鍚堣繑鍥� +// JSONArray resultData = response.getJSONArray("ResultData"); +// List<JSONObject> list = JSONUtil.toList(resultData, JSONObject.class); +// ArrayList<Map<String, String>> maps = new ArrayList<>(); +// for (JSONObject data : list) { +// ajaxResult = save(data, type); +// HashMap<String, String> map1 = new HashMap<>(); +// for (String key : data.keySet()) { +// String defaultVal = data.get(key).toString(); +// String val = defaultVal.trim().replaceAll("\\s+", ""); +// map1.put(key, val); +// } +// maps.add(map1); +// } +// ajaxResult.put("data", maps); +// } return ajaxResult; } else { + return AjaxResult.error().put("result", JSONUtil.parseObj(json)); + } + } + +// @Transactional + public AjaxResult getHISDataNew(String type, Map<String, Object> params){ + try { + LambdaQueryWrapper<HisApiConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(HisApiConfig::getApiMethod, type); + HisApiConfig hisApiConfig = hisApiConfigService.getOne(lambdaQueryWrapper); + String responseJson = HttpClientUtils.sendPost(HIS_URL + hisApiConfig.getApiUrl(), params); + 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(hisApiConfig.getResultDataKey()); + List<Map<String, String>> list = new ArrayList<>(); + for (Object resultDatum : resultData) { + JSONObject object = (JSONObject) resultDatum; + 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(); + String val = defaultVal.trim().replaceAll("\\s+", ""); + map.put(key, val); + } + list.add(map); + } + ajaxResult.put("data", list); + return ajaxResult; + } else { + return AjaxResult.error().put("result", JSONUtil.parseObj(responseJson)); + } + } catch (Exception e) { +// throw new RuntimeException(e); + log.error(String.valueOf(e)); return AjaxResult.error(); + } + } + + public AjaxResult getLisData(String type,Map<String ,Object> params){ + LambdaQueryWrapper<ApiConfig> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ApiConfig::getType,"lis"); + wrapper.eq(ApiConfig::getApiMethod,type); + return getAjaxResult("lis", params, wrapper); + } + + public AjaxResult getPacsData(String type,Map<String ,Object> params){ + LambdaQueryWrapper<ApiConfig> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ApiConfig::getType,"pacs"); + wrapper.eq(ApiConfig::getApiMethod,type); + return getAjaxResult("pacs", params, wrapper); + } + + private AjaxResult getAjaxResult(String type, Map<String, Object> params, LambdaQueryWrapper<ApiConfig> wrapper) { + ApiConfig apiConfig = apiConfigService.getOne(wrapper); + String responseJson; + switch (type){ + case "pacs": + responseJson = HttpClientUtils.sendPost(PACS_URL + apiConfig.getApiUrl(), params); + break; + default: + responseJson = HttpClientUtils.sendPost(LIS_URL + apiConfig.getApiUrl(), params); + break; + } + Integer isResponse = apiConfig.getIsResponse(); + JSONObject response = null; + if (isResponse == 1) { + response = JSONUtil.parseObj(responseJson).getJSONObject("Response"); + } else{ + response = JSONUtil.parseObj(responseJson); + } + if (response.getStr(apiConfig.getResultCodeKey()).equals("1")) { + AjaxResult ajaxResult = AjaxResult.success(); + if (response.getStr(apiConfig.getResultDataKey()) != null && StrUtil.isNotBlank(response.getStr(apiConfig.getResultDataKey()))){ + JSONArray resultData = response.getJSONArray(apiConfig.getResultDataKey()); + List<Map<String, String>> list = new ArrayList<>(); + for (Object resultDatum : resultData) { + JSONObject object = (JSONObject) resultDatum; + ajaxResult = save(object, type,apiConfig,JSONUtil.toJsonStr(params)); + Map<String, String> map = new HashMap<>(); + for (String key : object.keySet()) { + String defaultVal = object.get(key).toString(); + String val = defaultVal.trim().replaceAll("\\s+", ""); + map.put(key, val); + } + list.add(map); + } + ajaxResult.put("data", list); + }else { + ajaxResult.put("data",response); + } + return ajaxResult; + } else { + return AjaxResult.error().put("result", JSONUtil.parseObj(responseJson)); } } @@ -123,85 +322,33 @@ * @param code 鎺ュ彛浠g爜 * @return 鎵ц鏄惁鎴愬姛 */ - public AjaxResult save(JSONObject object, 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")) { -// JSONObject object = response.getJSONObject("ResultData"); + public AjaxResult save(JSONObject object, String code,Object hisApiConfig,String paramsJson) { + String tabName = ""; + if (code.equals("lis") || code.equals("pacs")) + tabName = ((ApiConfig)hisApiConfig).getTabName(); + else tabName = ((HisApiConfig) hisApiConfig).getTabName(); 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(); + } catch (SQLException e) { + e.printStackTrace(); return AjaxResult.error(); } } //鎻掑叆鏁版嵁 try { - operationTable(object, tabName, connection); - } catch (SQLException throwables) { - throwables.printStackTrace(); + operationTable(object,connection,hisApiConfig,paramsJson,code); + } catch (SQLException e) { + e.printStackTrace(); return AjaxResult.error(); - } -// } - try { - if (connection != null) - connection.close(); - } catch (SQLException throwables) { - } -// } - return AjaxResult.success(); - } - - /** - * 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, tabName, connection); - } catch (SQLException throwables) { - throwables.printStackTrace(); - return AjaxResult.error(); - } - } + }finally { try { - if (connection != null) - connection.close(); - } catch (SQLException throwables) { + connection.close(); + } catch (SQLException ignored) { } } return AjaxResult.success(); @@ -210,15 +357,26 @@ /** * 鎿嶄綔琛� * - * @param tabName * @param connection * @throws SQLException */ - private void operationTable(JSONObject jsonObject, String tabName, Connection connection) throws SQLException { + private void operationTable(JSONObject jsonObject, Connection connection,Object hisApiConfig,String paramsJson,String code) throws SQLException { + String tabName = ""; + if (code.equals("lis") || code.equals("pacs")) + tabName = ((ApiConfig)hisApiConfig).getTabName(); + else tabName = ((HisApiConfig) hisApiConfig).getTabName(); List<String> columns = getColumns(tabName, connection); ArrayList<String> responseColums = new ArrayList<>(); for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { - responseColums.add(entry.getKey()); + 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()) { @@ -228,27 +386,59 @@ statement.executeUpdate(sql); statement.close(); } - insertData(tabName, connection, jsonObject); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson,code); } else { - insertData(tabName, connection, jsonObject); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson,code); } } /** * 鎻掑叆鏁版嵁 * - * @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(); - insertSqlBuilder.append("insert into ").append(tabName).append(" ("); + StringBuilder selectSqlBuilder = new StringBuilder(); + 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()) { - insertSqlBuilder.append(entry.getKey()).append(", "); - valueBuilder.append("'").append(entry.getValue()).append("', "); + String defaultVal = entry.getValue().toString(); + String key = entry.getKey().trim().toLowerCase(); + if (StrUtil.isBlank(defaultVal) || defaultVal.equals("null")) + continue; + String val = defaultVal.trim().replaceAll("\\s+", ""); + 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()); + ResultSet resultSet = statement.executeQuery(selectSqlBuilder.toString()); + resultSet.next(); + String string = resultSet.getString("count"); + statement.close(); + // 濡傛灉涓嶄负0 鍒欒繖鏉℃暟鎹瓨鍦� 涓嶈繘琛屾彃鍏� + if (!"0".equals(string)) { +// log.info("鏁版嵁瀛樺湪涓嶉渶瑕佹彃鍏� {}", jsonObject); + return; } insertSqlBuilder.append("insert_time, "); String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); @@ -257,9 +447,179 @@ valueBuilder.delete(valueBuilder.length() - 2, valueBuilder.length()); insertSqlBuilder.append(") values (").append(valueBuilder).append(")"); // 鎻掑叆鏁版嵁 - Statement statement = connection.createStatement(); + statement = connection.createStatement(); statement.execute(insertSqlBuilder.toString()); statement.close(); + } + + /** + * 鎻掑叆鏁版嵁 + * + * @param connection + * @param jsonObject + * @throws SQLException + */ + @Transactional + public void insertDataNew(Connection connection, JSONObject jsonObject, Object hisApiConfig, String paramsJson, String code) throws SQLException { + String tabName = ""; + List<String> primaryKesList; + if (code.equals("lis") || code.equals("pacs")) { + tabName = ((ApiConfig) hisApiConfig).getTabName(); + primaryKesList = Arrays.stream(((ApiConfig)hisApiConfig).getPrimaryKeys().split(",")).map(String::toLowerCase).collect(Collectors.toList()); + } else { + tabName = ((HisApiConfig) hisApiConfig).getTabName(); + primaryKesList = Arrays.stream(((HisApiConfig)hisApiConfig).getPrimaryKeys().split(",")).map(String::toLowerCase).collect(Collectors.toList()); + } + StringBuilder deleteSqlBuilder = new StringBuilder(); + StringBuilder insertSqlBuilder = new StringBuilder(); + StringBuilder valueBuilder = new StringBuilder(); + insertSqlBuilder.append("insert into ").append(tabName).append(" ("); + deleteSqlBuilder.append("delete from ").append(tabName).append(" where "); + for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { + String defaultVal = entry.getValue().toString(); + String key = entry.getKey().trim().toLowerCase(); + if (StrUtil.isBlank(defaultVal) || defaultVal.equals("null")) + continue; + String val = defaultVal.trim().replaceAll("\\s+", ""); + if (primaryKesList.contains(key)) { + deleteSqlBuilder.append(key).append(" = '").append(val).append("' and "); + } + insertSqlBuilder.append(key).append(", "); + valueBuilder.append("'").append(val).append("', "); + // 鍒ゆ柇鏁版嵁鏄惁澶т簬瀛楁鍒涘缓鍊煎鏋滃ぇ浜庡垯澧炲姞瓒呰繃闃堝�煎垯浣跨敤text + String columnType = getColumnType(connection, tabName, key); + if (!"text".equalsIgnoreCase(columnType)){ + int currentSize = getColumnSize(connection, tabName, key); + if (currentSize < val.length()){ + if (val.length()>= 1000){ + alterColumnTypeToText(connection, tabName, key); + }else { + int newSize = ((val.length() / 100) + 1) * 100; + alterColumnSize(connection, tabName, key, newSize); + } + } + } + } + deleteSqlBuilder.delete(deleteSqlBuilder.length() - 5, deleteSqlBuilder.length()); + Statement statement = connection.prepareStatement(deleteSqlBuilder.toString()); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鍒犻櫎 ->{}",deleteSqlBuilder.toString()); + int i = statement.executeUpdate(deleteSqlBuilder.toString()); + log.info("HIS鏁版嵁淇濆瓨绫� 鍒犻櫎鏉℃暟 ->{}",i); + statement.close(); + insertSqlBuilder.append("insert_time, "); + insertSqlBuilder.append("request_params, "); + DatabaseMetaData metaData = connection.getMetaData(); + try (ResultSet resultSet = metaData.getColumns(null, null, tabName, "request_params")) { + if (!resultSet.next()){ + String alterTableSQL = String.format("ALTER TABLE %s ADD COLUMN %s %s", tabName, "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(")"); +// log.info("鎵ц鎻掑叆 ->{}",insertSqlBuilder.toString()); + // 鎻掑叆鏁版嵁 +// boolean execute = statement.execute(insertSqlBuilder.toString()); +// for (int j = 0; j < 10; j++) { +// statement = connection.createStatement(); +// log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆 ->{}",insertSqlBuilder.toString()); +// boolean execute = statement.execute(insertSqlBuilder.toString()); +// log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆鐘舵�� ->{},娆℃暟->{}",execute,(j+1)); +// statement.close(); +// if (execute) +// break; +// } + statement = connection.createStatement(); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆 ->{}",insertSqlBuilder.toString()); + boolean execute = statement.execute(insertSqlBuilder.toString()); + if (!execute){ + int updateCount = statement.getUpdateCount(); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆鎴愬姛 褰卞搷琛屾暟->{}",updateCount); + } + 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); + } } /** @@ -292,9 +652,11 @@ private void creatTable(JSONObject data, String tabName, Connection connection) throws SQLException { StringBuilder sql = new StringBuilder("CREATE TABLE " + tabName + " ("); for (Map.Entry<String, Object> entry : data.entrySet()) { - sql.append(entry.getKey()).append(" VARCHAR(200) null,"); + String key = entry.getKey().trim().toLowerCase(); + 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(); @@ -332,18 +694,8 @@ */ private Connection getConnection() { try { - FileInputStream inputStream = new FileInputStream(CONFIG_PATH); - Properties props = new Properties(); - props.load(inputStream); - String name = props.getProperty("name"); - String url = "jdbc:mysql://" + props.getProperty("ip") + ":" + props.getProperty("prot") + "/" + name + "" + - "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8"; - String user = props.getProperty("username"); - String password = props.getProperty("password"); - Connection connection = DriverManager.getConnection(url, user, password); - DB_NAME = name; - return connection; - } catch (SQLException | IOException throwables) { + return DriverManager.getConnection(DATA_URL, DATA_USER, DATA_PASS); + } catch (SQLException throwables) { throwables.printStackTrace(); } return null; -- Gitblit v1.8.0