package com.ltkj.web.controller.his; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.ltkj.common.core.domain.AjaxResult; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.Date; /** * @Company: 西安路泰科技有限公司 * @Author: zhaowenxuan * @Date: 2024/5/31 14:38 */ public class HisApiGetMethodService { // 数据库配置文件路径 private static final String CONFIG_PATH = "D:\\ltkjprojectconf\\config.properties"; // 数据库名 private static String DB_NAME = ""; /** * 根据his接口返回值 插入数据 * 如果没有表则创建表 接口增加了字段则为表增加字段 * @param json 请求返回json * @param code 接口代码 * @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"); 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(); } // } try { if (connection != null) connection.close(); } catch (SQLException throwables) { } // } return AjaxResult.success(); } /** * 操作表 * * @param tabName * @param connection * @throws SQLException */ private void operationTable(JSONObject jsonObject, String tabName, Connection connection) throws SQLException { List columns = getColumns(tabName, connection); ArrayList responseColums = new ArrayList<>(); for (Map.Entry entry : jsonObject.entrySet()) { responseColums.add(entry.getKey()); } responseColums.removeAll(columns); if (!responseColums.isEmpty()) { for (String colum : responseColums) { String sql = "alter table " + tabName + " add column " + colum + " text null"; Statement statement = connection.createStatement(); statement.executeUpdate(sql); statement.close(); } insertData(tabName, connection, jsonObject); } else { insertData(tabName, connection, jsonObject); } } /** * 插入数据 * * @param tabName * @param connection * @param jsonObject * @throws SQLException */ private void insertData(String tabName, Connection connection, JSONObject jsonObject) throws SQLException { StringBuilder insertSqlBuilder = new StringBuilder(); StringBuilder valueBuilder = new StringBuilder(); insertSqlBuilder.append("insert into ").append(tabName).append(" ("); for (Map.Entry entry : jsonObject.entrySet()) { insertSqlBuilder.append(entry.getKey()).append(", "); valueBuilder.append("'").append(entry.getValue()).append("', "); } insertSqlBuilder.append("insert_time, "); String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); valueBuilder.append("'").append(time).append("'").append(", "); insertSqlBuilder.delete(insertSqlBuilder.length() - 2, insertSqlBuilder.length()); valueBuilder.delete(valueBuilder.length() - 2, valueBuilder.length()); insertSqlBuilder.append(") values (").append(valueBuilder).append(")"); // 插入数据 Statement statement = connection.createStatement(); statement.execute(insertSqlBuilder.toString()); statement.close(); } /** * 获取表的列 * * @param tabName * @param connection * @return * @throws SQLException */ private List getColumns(String tabName, Connection connection) throws SQLException { DatabaseMetaData metaData = connection.getMetaData(); ResultSet columns = metaData.getColumns(null, null, tabName, null); ArrayList tabColumns = new ArrayList<>(); while (columns.next()) { String columnName = columns.getString("column_name"); tabColumns.add(columnName); } return tabColumns; } /** * 创建表 * * @param data * @param tabName * @param connection * @throws SQLException */ private void creatTable(JSONObject data, String tabName, Connection connection) throws SQLException { StringBuilder sql = new StringBuilder("CREATE TABLE " + tabName + " ("); for (Map.Entry entry : data.entrySet()) { sql.append(entry.getKey()).append(" text null,"); } sql.append("insert_time").append(" text null,"); sql = new StringBuilder(sql.substring(0, sql.length() - 1)); sql.append(");"); Statement statement = connection.createStatement(); statement.execute(sql.toString()); } /** * 判断表是否存在 * * @param connection * @param tableName * @return */ private Boolean tabIsExists(Connection connection, String tableName) { String tabSql = "SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND table_name = ?"; PreparedStatement statement = null; try { statement = connection.prepareStatement(tabSql); statement.setString(1, DB_NAME); statement.setString(2, tableName); ResultSet resultSet = statement.executeQuery(); boolean next = resultSet.next(); statement.close(); return next; } catch (SQLException throwables) { throwables.printStackTrace(); } return null; } /** * 获取数据库连接 * * @return */ 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) { throwables.printStackTrace(); } return null; } }