From c42f62b32bac302a7ac9fcde7489f7c5fc6e11aa Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期五, 06 十二月 2024 15:35:17 +0800 Subject: [PATCH] zjh20241205-3 --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java | 217 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 174 insertions(+), 43 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 8f243c6..083f3d5 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 @@ -7,12 +7,16 @@ 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; @@ -33,8 +37,10 @@ @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 = ""; @@ -42,10 +48,44 @@ 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 { @@ -53,21 +93,21 @@ } catch (ClassNotFoundException e) { e.printStackTrace(); } - try { - InputStreamReader reader = new InputStreamReader(new FileInputStream(CONFIG_PATH), 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(); - } +// 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(); +// } } @@ -175,7 +215,7 @@ } } - @Transactional +// @Transactional public AjaxResult getHISDataNew(String type, Map<String, Object> params){ LambdaQueryWrapper<HisApiConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(HisApiConfig::getApiMethod, type); @@ -210,6 +250,64 @@ } } + 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)); + } + } + /** * ResultData涓哄璞� * 鏍规嵁his鎺ュ彛杩斿洖鍊� 鎻掑叆鏁版嵁 @@ -218,14 +316,18 @@ * @param code 鎺ュ彛浠g爜 * @return 鎵ц鏄惁鎴愬姛 */ - public AjaxResult save(JSONObject object, String code,HisApiConfig hisApiConfig,String paramsJson) { + 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(); - Boolean isExists = tabIsExists(connection, hisApiConfig.getTabName()); + Boolean isExists = tabIsExists(connection, tabName); if (null == isExists) return AjaxResult.error(); if (!isExists) { try { - creatTable(object, hisApiConfig.getTabName(), connection); + creatTable(object, tabName, connection); } catch (SQLException e) { e.printStackTrace(); return AjaxResult.error(); @@ -233,14 +335,15 @@ } //鎻掑叆鏁版嵁 try { - operationTable(object,connection,hisApiConfig,paramsJson); + operationTable(object,connection,hisApiConfig,paramsJson,code); } catch (SQLException e) { e.printStackTrace(); return AjaxResult.error(); - } - try { - connection.close(); - } catch (SQLException ignored) { + }finally { + try { + connection.close(); + } catch (SQLException ignored) { + } } return AjaxResult.success(); } @@ -251,8 +354,12 @@ * @param connection * @throws SQLException */ - private void operationTable(JSONObject jsonObject, Connection connection,HisApiConfig hisApiConfig,String paramsJson) throws SQLException { - List<String> columns = getColumns(hisApiConfig.getTabName(), connection); + 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()) { String key = entry.getKey().trim().toLowerCase(); @@ -268,14 +375,14 @@ responseColums.removeAll(columns); if (!responseColums.isEmpty()) { for (String colum : responseColums) { - String sql = "alter table " + hisApiConfig.getTabName() + " add column " + colum + " VARCHAR(200) null"; + String sql = "alter table " + tabName + " add column " + colum + " VARCHAR(200) null"; Statement statement = connection.createStatement(); statement.executeUpdate(sql); statement.close(); } - insertDataNew(connection, jsonObject,hisApiConfig,paramsJson); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson,code); } else { - insertDataNew(connection, jsonObject,hisApiConfig,paramsJson); + insertDataNew(connection, jsonObject,hisApiConfig,paramsJson,code); } } @@ -346,13 +453,22 @@ * @param jsonObject * @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()); + @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(hisApiConfig.getTabName()).append(" ("); - deleteSqlBuilder.append("delete from ").append(hisApiConfig.getTabName()).append(" where "); + 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(); @@ -365,31 +481,31 @@ insertSqlBuilder.append(key).append(", "); valueBuilder.append("'").append(val).append("', "); // 鍒ゆ柇鏁版嵁鏄惁澶т簬瀛楁鍒涘缓鍊煎鏋滃ぇ浜庡垯澧炲姞瓒呰繃闃堝�煎垯浣跨敤text - String columnType = getColumnType(connection, hisApiConfig.getTabName(), key); + String columnType = getColumnType(connection, tabName, key); if (!"text".equalsIgnoreCase(columnType)){ - int currentSize = getColumnSize(connection, hisApiConfig.getTabName(), key); + int currentSize = getColumnSize(connection, tabName, key); if (currentSize < val.length()){ if (val.length()>= 1000){ - alterColumnTypeToText(connection, hisApiConfig.getTabName(), key); + alterColumnTypeToText(connection, tabName, key); }else { int newSize = ((val.length() / 100) + 1) * 100; - alterColumnSize(connection, hisApiConfig.getTabName(), key, newSize); + alterColumnSize(connection, tabName, key, newSize); } } } } deleteSqlBuilder.delete(deleteSqlBuilder.length() - 5, deleteSqlBuilder.length()); Statement statement = connection.prepareStatement(deleteSqlBuilder.toString()); -// log.info("鎵ц鍒犻櫎 ->{}",deleteSqlBuilder.toString()); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鍒犻櫎 ->{}",deleteSqlBuilder.toString()); int i = statement.executeUpdate(deleteSqlBuilder.toString()); -// log.info("鍒犻櫎鏉℃暟 ->{}",i); + 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, hisApiConfig.getTabName(), "request_params")) { + try (ResultSet resultSet = metaData.getColumns(null, null, tabName, "request_params")) { if (!resultSet.next()){ - String alterTableSQL = String.format("ALTER TABLE %s ADD COLUMN %s %s", hisApiConfig.getTabName(), "request_params", "text"); + String alterTableSQL = String.format("ALTER TABLE %s ADD COLUMN %s %s", tabName, "request_params", "text"); statement = connection.createStatement(); statement.execute(alterTableSQL); } @@ -409,8 +525,23 @@ 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(); - statement.execute(insertSqlBuilder.toString()); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆 ->{}",insertSqlBuilder.toString()); + boolean execute = statement.execute(insertSqlBuilder.toString()); + if (!execute){ + int updateCount = statement.getUpdateCount(); + log.info("HIS鏁版嵁淇濆瓨绫� 鎵ц鎻掑叆鎴愬姛 褰卞搷琛屾暟->{}",updateCount); + } statement.close(); } -- Gitblit v1.8.0