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 org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
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
|
*/
|
@Component
|
public class HisApiGetMethodService {
|
// 数据库配置文件路径
|
private static final String CONFIG_PATH = "D:\\ltkjprojectconf\\config.properties";
|
// 数据库名
|
private static String DB_NAME = "";
|
@Autowired
|
private HisApiMethodService controller;
|
|
|
/**
|
* 获取
|
*
|
* @return
|
*/
|
public AjaxResult getHISData(String type, Map<String, Object> params) {
|
// Getoutaccountrecord 获取门诊结算记录
|
// Getoutpatientcostinfo 获取门诊患者费用清单信息
|
// Getlaburgentinfo 获取危急值信息
|
// Getlabgermdetailinfo 获取微生物药敏信息
|
// Getlabgermrepinfo 获取微生物报告记录信息
|
// Getlabreportinfo 获取检验报告记录信息
|
// Getlabapplyinfo 获取检验申请信息
|
// Getexamurgentinfo 获取检查危急值信息
|
// Getexamreportinfo 获取检查报告信息
|
// Getexamapplyinfo 获取检查申请信息
|
AjaxResult result = null;
|
switch (type) {
|
case "Getoutaccountrecord":
|
result = controller.Getoutaccountrecord(params);
|
result.put("limit",true);
|
break;
|
case "Getoutpatientcostinfo":
|
result = controller.Getoutpatientcostinfo(params);
|
result.put("limit",true);
|
break;
|
case "Getlaburgentinfo":
|
result = controller.Getlaburgentinfo(params);
|
result.put("limit",false);
|
break;
|
case "Getlabgermdetailinfo":
|
result = controller.Getlabgermdetailinfo(params);
|
result.put("limit",false);
|
break;
|
case "Getlabgermrepinfo":
|
result = controller.Getlabgermrepinfo(params);
|
result.put("limit",false);
|
break;
|
case "Getlabreportinfo":
|
result = controller.Getlabreportinfo(params);
|
result.put("limit",true);
|
break;
|
case "Getlabapplyinfo":
|
result = controller.Getlabapplyinfo(params);
|
result.put("limit",false);
|
break;
|
case "Getexamurgentinfo":
|
result = controller.Getexamurgentinfo(params);
|
result.put("limit",true);
|
break;
|
case "Getexamreportinfo":
|
result = controller.Getexamreportinfo(params);
|
result.put("limit",true);
|
break;
|
case "Getexamapplyinfo":
|
result = controller.Getexamapplyinfo(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 = saveArray(json, type);
|
}else {
|
ajaxResult = save(response.getJSONObject("ResultData"),type);
|
}
|
ajaxResult.put("data", list);
|
return ajaxResult;
|
} else {
|
return AjaxResult.error();
|
}
|
}
|
|
/**
|
* ResultData为对象
|
* 根据his接口返回值 插入数据
|
* 如果没有表则创建表 接口增加了字段则为表增加字段
|
*
|
* @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();
|
}
|
|
/**
|
* ResultData为集合
|
* 根据his接口返回值 插入数据
|
* 如果没有表则创建表 接口增加了字段则为表增加字段
|
*
|
* @param code 接口代码
|
* @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();
|
}
|
}
|
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<String> columns = getColumns(tabName, connection);
|
ArrayList<String> responseColums = new ArrayList<>();
|
for (Map.Entry<String, Object> 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 + " VARCHAR(200) 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<String, Object> 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<String> getColumns(String tabName, Connection connection) throws SQLException {
|
DatabaseMetaData metaData = connection.getMetaData();
|
ResultSet columns = metaData.getColumns(null, null, tabName, null);
|
ArrayList<String> 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<String, Object> entry : data.entrySet()) {
|
sql.append(entry.getKey()).append(" VARCHAR(200) null,");
|
}
|
sql.append("insert_time").append(" VARCHAR(200) 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;
|
}
|
}
|