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