From 764e55ac4248578e4e0c0e973cfb74c7586092b6 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期五, 03 一月 2025 20:12:54 +0800 Subject: [PATCH] 泾川县人民医院调整 --- src/main/java/com/example/utils/synczd/DictionaryUtilGanSuPingLiangXianRenMinYy.java | 379 ++++++++++++++++++++++++++++++++++ src/main/java/com/example/constant/ApiParamsConstants.java | 32 ++ src/main/java/com/example/service/gansu/pingliang/JingChuanXianRenMinHisService.java | 192 +++++++++++++++++ 3 files changed, 602 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/example/constant/ApiParamsConstants.java b/src/main/java/com/example/constant/ApiParamsConstants.java index 4e41633..bc46641 100644 --- a/src/main/java/com/example/constant/ApiParamsConstants.java +++ b/src/main/java/com/example/constant/ApiParamsConstants.java @@ -101,7 +101,7 @@ /** * 璐圭敤鎬ц川 */ - public static final String FEI_YONG_XINGZHI = "feiYongStatus"; + public static final String FEI_YONG_XINGZHI = "feiYongXingZhi"; /** * 绉戝鍚嶅瓧 @@ -147,6 +147,36 @@ public static final String HOSPITAL = "hospital"; /** + * 鏀惰垂澶х被缂栫爜 + */ + public static final String FEIYONG_DLBM = "feiYongDLBM"; + + /** + * 鏀惰垂缁嗙被缂栫爜 + */ + public static final String FEIYONG_XLBM = "feiYongXLBM"; + + /** + * 鏀惰垂鏄庣粏璐圭敤椤圭洰缂栫爜 + */ + public static final String FEIYONG_MXFYXMBM = "feiYongMXFYXMBM"; + + /** + * 璐圭敤鍖诲槺鍙风爜 + */ + public static final String FEIYONG_YZHM = "feiYongYZHM"; + + /** + * 璐圭敤鏄惁缁勫悎璐圭敤 + */ + public static final String FEIYONG_SFZHFY = "feiYongSFZHFY"; + + /** + * 璐圭敤缁勫悎璐圭敤缂栫爜 + */ + public static final String FEIYONG_ZHFYBM = "feiYongZHFYBM"; + + /** * 鍏叡鏌ヨkey */ public static final String COMMON_QUERY_KEY = "commonQueryKey"; diff --git a/src/main/java/com/example/service/gansu/pingliang/JingChuanXianRenMinHisService.java b/src/main/java/com/example/service/gansu/pingliang/JingChuanXianRenMinHisService.java new file mode 100644 index 0000000..3a5dfd1 --- /dev/null +++ b/src/main/java/com/example/service/gansu/pingliang/JingChuanXianRenMinHisService.java @@ -0,0 +1,192 @@ +package com.example.service.gansu.pingliang; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.example.config.ConfigValue; +import com.example.constant.ApiParamsConstants; +import com.example.domain.HisSyncDict; +import com.example.service.HisService; +import com.example.utils.HttpClientUtils; +import com.example.utils.synczd.DictionaryUtilGanSuPingLiangXianRenMinYy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/1/2 21:35 + */ +@Slf4j +@Service("GanSuPingLiangJianChuanXianRenMin") +public class JingChuanXianRenMinHisService implements HisService { + + @Autowired + private DictionaryUtilGanSuPingLiangXianRenMinYy syncZd; + + @Autowired + private ConfigValue configValue; + + private final ApplicationContext applicationContext; + + private final String HIS_URL; + private final String TJ_URL; + + @Autowired + public JingChuanXianRenMinHisService(ApplicationContext applicationContext, ConfigValue configValue) { + this.applicationContext = applicationContext; + this.configValue = configValue; + HIS_URL = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.lis_api_url") + ":" + configValue.getConfigValue("GanSu_PingLiang_XianRenMen.lis_api_port") + configValue.getConfigValue("GanSu_PingLiang_XianRenMen.lisapiappend"); + TJ_URL = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.tjUrl"); + } + @Override + public String jianDang(Map<String, Object> map) { + return ""; + } + + @Override + public String getBingRenXxByShengFenZheng(Map<String, Object> map) { + return ""; + } + + @Override + public String saveBingRenXx(Map<String, Object> map) { + return ""; + } + + @Override + public String getListDaiShouFei(Map<String, Object> map) { + return ""; + } + + @Override + public String createMenZhenFy(Map<String, Object> map) { + JSONArray list = (JSONArray) map.get("feiYongInfoList"); +// JSONArray array = JSONUtil.createArray(); +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// String sqsj = format.format(new Date()); +// for (Object o : list) { +// JSONObject entries = (JSONObject) o; +// JSONObject object = JSONUtil.createObj(); +// object.putOpt("fbbm",entries.getStr(ApiParamsConstants.FEI_YONG_XINGZHI)); +// object.putOpt("dlbm",entries.getStr(ApiParamsConstants.FEIYONG_DLBM)); +// object.putOpt("xlbm",entries.getStr(ApiParamsConstants.FEIYONG_XLBM)); +// object.putOpt("mxfyxmbm",entries.getStr(ApiParamsConstants.FEIYONG_MXFYXMBM)); +// object.putOpt("czybm",""); +// object.putOpt("sfrq",sqsj); +// object.putOpt("rybrid",entries.getStr(ApiParamsConstants.PATIONID)); +// object.putOpt("ryghxh",entries.getStr(ApiParamsConstants.CARD_ID)); +// object.putOpt("brxm",entries.getStr(ApiParamsConstants.CUS_NAME)); +// object.putOpt("fysl",entries.getStr(ApiParamsConstants.)); +// object.putOpt("fydj",""); +// object.putOpt("fyje",""); +// object.putOpt("mzys",""); +// object.putOpt("mzks",""); +// object.putOpt("hsks",""); +// object.putOpt("zxks",""); +// object.putOpt("yzlx",""); +// object.putOpt("yzhm",""); +// object.putOpt("tjbh",""); +// object.putOpt("sfzhfy",""); +// object.putOpt("zhfybh",""); +// array.add(object); +// } + String post = HttpClientUtils.sendPost(HIS_URL+"/Tjinterface/postFymxList", JSONUtil.toJsonStr(list)); + + + return ""; + } + + @Override + public String cheXiaoMzFy(Map<String, Object> map) { + JSONArray list = (JSONArray) map.get("list"); + String post = HttpClientUtils.sendPost(HIS_URL+"/Tjinterface/postFymxList", JSONUtil.toJsonStr(list)); + + return ""; + } + + @Override + public String pushZhiFuMsg(String hospName, Map<String, Object> map) { + return ""; + } + + @Override + public String getKeShi(Map<String, Object> map) { + return ""; + } + + @Override + public String getListYiShengZd(Map<String, Object> map) { + return ""; + } + + @Override + public String getShouFeiXm(Map<String, Object> map) { + return ""; + } + + @Override + public String getKeShiByConditions(Map<String, Object> map) { + return ""; + } + + @Override + public String getYangBen(Map<String, Object> map) { + return ""; + } + + @Override + public String getListBingQuZd(Map<String, Object> map) { + return ""; + } + + @Override + public String getZhiGongPage(Map<String, Object> map) { + return ""; + } + + @Override + public String getJianChaXm(Map<String, Object> map) { + return ""; + } + + @Override + public String getJianYanXm(Map<String, Object> map) { + return ""; + } + + @Override + public String getShouFeiXmJg(Map<String, Object> map) { + return ""; + } + + @Override + public String getRongQi(Map<String, Object> map) { + return ""; + } + + @Override + public String getJyYangBen(Map<String, Object> map) { + return ""; + } + + @Override + public void syncDict(String hospName) { + HashMap<String, Object> map = new HashMap<>(); + map.put("hosp","shanxiqinxamjyy"); + String post = HttpClientUtils.sendPost(TJ_URL + "/callBack/getZdList", map); + JSONArray jsonArray = JSONUtil.parseObj(post).getJSONArray("data"); + if (jsonArray != null && !jsonArray.isEmpty()) { + List<HisSyncDict> list = jsonArray.toList(HisSyncDict.class); + syncZd.exec(list); + } + } +} diff --git a/src/main/java/com/example/utils/synczd/DictionaryUtilGanSuPingLiangXianRenMinYy.java b/src/main/java/com/example/utils/synczd/DictionaryUtilGanSuPingLiangXianRenMinYy.java new file mode 100644 index 0000000..7a34118 --- /dev/null +++ b/src/main/java/com/example/utils/synczd/DictionaryUtilGanSuPingLiangXianRenMinYy.java @@ -0,0 +1,379 @@ +package com.example.utils.synczd; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.example.config.ConfigValue; +import com.example.domain.HisSyncDict; +import com.example.mapper.HisSyncDictMapper; +import com.example.service.HisSyncDictService; +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 java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/1/2 21:57 + */ +@Slf4j +@Component +public class DictionaryUtilGanSuPingLiangXianRenMinYy { + @Autowired + private HisSyncDictService hisSyncDictService; + @Autowired + private ConfigValue configValue; + @Autowired + private HisSyncDictMapper hisSyncDictMapper; + + private static String BASE_API_URL = ""; + private static String USER = ""; + private static String PASSWORD = ""; + private static String URL = ""; + private static String NAME = ""; + @Value("${config.path}") + public void setConfigPath(String configPath) { + NAME = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.name"); + URL = "jdbc:mysql://" + configValue.getConfigValue("GanSu_PingLiang_XianRenMen.ip") + ":" + configValue.getConfigValue("GanSu_PingLiang_XianRenMen.prot") + "/" + NAME + + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8"; + USER = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.username"); + PASSWORD = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.password"); + String apiUrl = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.his_api_url"); + String apiPort = configValue.getConfigValue("GanSu_PingLiang_XianRenMen.his_api_port"); + BASE_API_URL = apiUrl+":"+apiPort+configValue.getConfigValue("GanSu_PingLiang_XianRenMen.hisapiappend"); + } + + + // 鍒嗛〉姣忔1000鏉� + static { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (Exception e) { + System.out.println("闈欐�佷唬鐮佸潡寮傚父 ->"+e.getMessage()); + } + } + + /** + * 杩涜鍚屾 + */ + public void exec(List<HisSyncDict> hisSyncDicts){ + log.info("寮�濮嬫墽琛屽悓姝�"); + Connection connection = getConnection(); + if (connection == null) + return; + for (HisSyncDict hisSyncDict : hisSyncDicts) { + hisSyncDict.setDictName(hisSyncDict.getHospId()+"_"+hisSyncDict.getDictName()); + extracted(NAME, connection, hisSyncDict); + } + try { + connection.close(); + } catch (SQLException ignored) { } + hisSyncDictMapper.proSyncCommonDict(); + log.info("鎵ц鍚屾瀹屾瘯"); + } + + private void extracted(String name, Connection connection, HisSyncDict hisSyncDict) { + String method = hisSyncDict.getDictName(); + log.info("寮�濮嬭姹備唬鐮� ->{}", method); + String tabName = "ltkj_" + method.toLowerCase(); + JSONObject object = JSONUtil.createObj(); + log.info("璇锋眰鎺ュ彛 ->{}, 璇锋眰鍙傛暟 ->{}", BASE_API_URL+hisSyncDict.getUrl(), object); + JSONObject entries = execRequest(object.toString(),hisSyncDict); + log.info("璇锋眰杩斿洖 ->{}", entries.toString()); + if ("1".equals(entries.getStr("code"))) { + Object returnData = entries.get("data"); + if (returnData instanceof JSONObject){ + JSONObject response = entries.getJSONObject("data"); + try { + dropTable(tabName, connection); + } catch (SQLException e) { + log.error("鍒犻櫎琛ㄥ紓甯� ->{}", e.getMessage()); + } + editDataBase(connection, tabName, response, name); + }else { + JSONArray response = entries.getJSONArray("data"); + try { + dropTable(tabName, connection); + List<JSONObject> list = JSONUtil.toList(response, JSONObject.class); + for (JSONObject jsonObject : list) { + editDataBase(connection, tabName, jsonObject, name); + } + } catch (SQLException e) { + log.error("鍒犻櫎琛ㄥ紓甯� ->{}", e.getMessage()); + } + } + } + } + + /** + * 閽堝浜庡垎椤垫帴鍙� 鍒涘缓琛ㄣ�佹彃鍏ユ暟鎹� + * + * @param connection + * @param tabName + * @param response + * @return + */ + private int LimitInsertData(Connection connection, String tabName, JSONObject response,String name,Integer page) { + JSONArray jsonArray = response.getJSONArray("list"); + JSONObject entries = (JSONObject) jsonArray.get(0); + int maxPage; + // 琛屾暟 鏁版嵁杩斿洖鐨勭鍑犺 + Integer rowNumber = response.getInt("RowNumber"); + // 鎬绘潯鏁� + Integer totalCount = response.getInt("totalRows"); + Integer pageCount = response.getInt("pageCount"); + maxPage = (totalCount + 100 - 1) / 100; + log.info("璇锋眰杩斿洖鎬绘潯鏁� ->{},褰撳墠椤� ->{},鎬婚〉鏁� ->{}",totalCount,page,maxPage); + jsonArray.forEach(obj -> { + editDataBase(connection, tabName, (JSONObject) obj,name); + }); + return pageCount; + } + + /** + * 鎿嶄綔鏁版嵁搴� + * + * @param connection + * @param tabName + * @param obj + */ + private void editDataBase(Connection connection, String tabName, JSONObject obj,String name) { + try { + if (!tabIsExists(connection, tabName,name)) { + // 鍒涘缓琛� + creatTable(obj, tabName, connection); + } + } catch (SQLException throwables) { + log.error("鍒涘缓琛ㄥ紓甯�"); + log.error(throwables.getSQLState()); + log.error(throwables.getMessage()); + } + // 瀵规瘮瀛楁 骞舵彃鍏ユ暟鎹� + try { + operationTable(obj, tabName, connection); + } catch (SQLException e) { + log.error("瀵规瘮瀛楁鎻掑叆鏁版嵁寮傚父"); + log.error(e.getSQLState()); + log.error(e.getMessage()); + e.printStackTrace(); + } + } + + /** + * 鎵цpost璇锋眰 + * + * @param params 璇锋眰鍙傛暟 渚嬪锛� param1=val1¶m2=val2 + * @return 璇锋眰杩斿洖鐨刯son杞崲鍚庣殑JSONObject瀵硅薄 + */ + private JSONObject execRequest(String params,HisSyncDict hisSyncDict) { + java.net.URL url = null; + HttpURLConnection connection = null; + OutputStreamWriter writer = null; + BufferedReader reader = null; + StringBuilder response = new StringBuilder(); + try { + url = new URL(BASE_API_URL+hisSyncDict.getUrl()); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + log.info("璇锋眰鎺ュ彛 ->{}", hisSyncDict.getUrl()); + connection.setDoOutput(true); + StringBuilder postData = new StringBuilder(); + JSONObject jsonObject = JSONUtil.parseObj(params); + for (String key : jsonObject.keySet()) { + if (postData.length() > 0) { + postData.append("&"); + } + String encode = URLEncoder.encode(key, "UTF-8"); + String encode1 = URLEncoder.encode(String.valueOf(jsonObject.get(key)), "UTF-8"); + postData.append(encode).append("=").append(encode1); + } + + writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(postData.toString()); + writer.flush(); + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + return JSONUtil.parseObj(response); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (connection != null) { + connection.disconnect(); + } + } + return null; + } + + public Connection getConnection() { + try { + log.info("鏁版嵁搴撲俊鎭� ->{},{},{}",USER,PASSWORD,URL); + return DriverManager.getConnection(URL,USER,PASSWORD); + } catch (Exception throwables) { + log.error("鑾峰彇sql杩炴帴澶辫触"); + throwables.printStackTrace(); + } + return null; + } + + /** + * 琛ㄦ槸鍚﹀瓨鍦� + * + * @param connection + * @param tableName + * @return + * @throws SQLException + */ + private Boolean tabIsExists(Connection connection, String tableName,String name) throws SQLException { + String tabSql = "SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND table_name = ?"; + PreparedStatement statement = connection.prepareStatement(tabSql); + statement.setString(1, name); + statement.setString(2, tableName); +// log.info("鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� sql-> {}", statement.toString()); + ResultSet resultSet = statement.executeQuery(); + boolean next = resultSet.next(); + statement.close(); + return next; + } + + /** + * 鎿嶄綔琛� + * + * @param tabName + * @param connection + * @throws SQLException + */ + private void operationTable(JSONObject jsonObject, String tabName, Connection connection) throws SQLException { + List<String> columns = getColumns(tabName, connection); +// log.info("褰撳墠琛ㄥ瓧娈典负 ->{}", columns); + ArrayList<String> responseColums = new ArrayList<>(); + for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { + String key = entry.getKey().trim().toLowerCase(); + responseColums.add(key); + } +// log.info("璇锋眰杩斿洖鐨勫瓧娈典负 ->{}", responseColums); + responseColums.removeAll(columns); +// log.info("闇�瑕佸鍔犵殑瀛楁 ->{}",responseColums); + if (!responseColums.isEmpty()) { + // 闇�瑕佸鍔犲瓧娈� 骞舵彃鍏ユ暟鎹� + for (String colum : responseColums) { + String sql = "alter table " + tabName + " add column " + colum + " VARCHAR(200) null"; +// log.info("淇敼瀛楁 ->{}",sql.toString()); + 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()) { + 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+", "").replace("\\",""); + insertSqlBuilder.append(key).append(", "); + valueBuilder.append("'").append(val.replaceAll("'","鈥�")).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(); + log.info("鎻掑叆鏁版嵁 sql-> {}", insertSqlBuilder.toString()); + 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 resultDataIndex1 杩斿洖鏁版嵁涓殑绗竴涓弬鏁� + * @param tabName + * @param connection + * @throws SQLException + */ + private void creatTable(JSONObject resultDataIndex1, String tabName, Connection connection) throws SQLException { + StringBuilder sql = new StringBuilder("CREATE TABLE " + tabName + " ("); + for (Map.Entry<String, Object> entry : resultDataIndex1.entrySet()) { + String key = entry.getKey().trim().toLowerCase(); + sql.append(key).append(" VARCHAR(200) null,"); + } + sql.append("insert_time").append(" VARCHAR(100) null,"); + sql = new StringBuilder(sql.substring(0, sql.length() - 1)); + sql.append(");"); + log.info("鍒涘缓琛ㄦ牸 -> {}",sql.toString()); + Statement statement = connection.createStatement(); + statement.execute(sql.toString()); + } + + /** + * 鍒犻櫎琛� + * @param tabName + * @param connection + * @throws SQLException + */ + private void dropTable(String tabName,Connection connection) throws SQLException { + String sql = "DROP TABLE IF EXISTS " + tabName; + Statement statement = connection.createStatement(); + statement.executeUpdate(sql); + statement.close(); + } +} -- Gitblit v1.8.0