| | |
| | | package com.ltkj.web.controller.his; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.ltkj.common.core.domain.AjaxResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | 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.*; |
| | |
| | | * @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 = "/Users/chacca/开发相关/代码/ltkj_peis/ltkj-admin/src/main/resources/config.properties"; |
| | | // 数据库名 |
| | | private static String DB_NAME = ""; |
| | | @Autowired |
| | | private HisApiMethodService controller; |
| | | |
| | | static { |
| | | try { |
| | | Class.forName("com.mysql.cj.jdbc.Driver"); |
| | | } catch (ClassNotFoundException e) { |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取 |
| | | * 获取数据 |
| | | * |
| | | * @param type 接口代码 |
| | | * @param params 请求参数 |
| | | * @return |
| | | */ |
| | | public AjaxResult getHISData(String type, Map<String, Object> params) { |
| | |
| | | // Getexamreportinfo 获取检查报告信息 |
| | | // Getexamapplyinfo 获取检查申请信息 |
| | | AjaxResult result = null; |
| | | // TODO 创建表 弄成数据库动态获取 接口地址、代码、是否分页 |
| | | // 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")进行判断 处理对象或集合并返回 |
| | | JSONArray resultData = response.getJSONArray("ResultData"); |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | for (Object resultDatum : resultData) { |
| | | JSONObject object = (JSONObject) resultDatum; |
| | | Map<String, Object> map = new HashMap<>(); |
| | | for (String key : object.keySet()) { |
| | | map.put(key, object.get(key)); |
| | | } |
| | | list.add(map); |
| | | } |
| | | AjaxResult ajaxResult = null; |
| | | if ((boolean)result.get("limit")){ |
| | | AjaxResult ajaxResult = AjaxResult.success(); |
| | | if ((boolean) result.get("limit")) { |
| | | ajaxResult = saveArray(json, type); |
| | | }else { |
| | | ajaxResult = save(response.getJSONObject("ResultData"),type); |
| | | JSONArray resultData = response.getJSONArray("ResultData"); |
| | | List<Map<String, String>> list = new ArrayList<>(); |
| | | for (Object resultDatum : resultData) { |
| | | JSONObject object = (JSONObject) resultDatum; |
| | | 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 { |
| | | // TODO 如果不带分页参数 返回的数据都是对象 则在这里通过result.get("limit")进行判断 处理对象或集合并返回 |
| | | // TODO 不确定 ResultData 直接是对象或是集合中一个对象的形式 |
| | | // 直接是对象的格式获取 |
| | | // ajaxResult = save(response.getJSONObject("ResultData"),type); |
| | | // JSONObject resultData = response.getJSONObject("ResultData"); |
| | | // HashMap<String, Object> map = new HashMap<>(); |
| | | // for (String key : resultData.keySet()) { |
| | | // map.put(key, resultData.get(key)); |
| | | // } |
| | | // ajaxResult.put("data",map); |
| | | // 以集合返回 |
| | | JSONObject data = (JSONObject) response.getJSONArray("ResultData").get(0); |
| | | 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); |
| | | } |
| | | ArrayList<Map<String, String>> maps = new ArrayList<>(); |
| | | maps.add(map1); |
| | | ajaxResult.put("data", maps); |
| | | } |
| | | ajaxResult.put("data", list); |
| | | return ajaxResult; |
| | | } else { |
| | | return AjaxResult.error(); |
| | | return AjaxResult.error().put("result", JSONUtil.parseObj(json)); |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | | responseColums.removeAll(columns); |
| | | if (!responseColums.isEmpty()) { |
| | |
| | | private void insertData(String tabName, 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 "); |
| | | 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 "); |
| | | } |
| | | 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()); |
| | |
| | | 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(); |
| | | } |
| | |
| | | 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 = new StringBuilder(sql.substring(0, sql.length() - 1)); |
| | |
| | | private Connection getConnection() { |
| | | try { |
| | | FileInputStream inputStream = new FileInputStream(CONFIG_PATH); |
| | | InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); |
| | | Properties props = new Properties(); |
| | | props.load(inputStream); |
| | | props.load(reader); |
| | | 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"); |
| | | log.info("数据库配置信息 ->数据库名-{},user-{},password-{},url-{}", name, user, password, url); |
| | | Connection connection = DriverManager.getConnection(url, user, password); |
| | | DB_NAME = name; |
| | | return connection; |