SystemManager.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package com.yihu.ehr.service;
  2. import com.yihu.ehr.common.config.SysConfig;
  3. import com.yihu.ehr.common.config.ThreadConfig;
  4. import com.yihu.ehr.dbhelper.common.enums.CommonEnum;
  5. import com.yihu.ehr.dbhelper.jdbc.DBDriver;
  6. import com.yihu.ehr.dbhelper.jdbc.DBHelper;
  7. import com.yihu.ehr.framework.model.Result;
  8. import com.yihu.ehr.model.DataSource;
  9. import com.yihu.ehr.model.SystemParams;
  10. import com.yihu.ehr.model.UserInfo;
  11. import com.yihu.ehr.service.intf.ISystemManager;
  12. import com.yihu.ehr.service.thread.StandardUpdateThread;
  13. import com.yihu.ehr.service.thread.ThreadManage;
  14. import com.yihu.ehr.util.httpclient.EsbHttp;
  15. import com.yihu.ehr.util.httpclient.Response;
  16. import com.yihu.ehr.ws.SQLWebService;
  17. import org.apache.commons.dbcp2.BasicDataSource;
  18. import org.json.JSONObject;
  19. import org.springframework.jdbc.core.JdbcTemplate;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import javax.servlet.http.HttpSession;
  23. import java.sql.Connection;
  24. import java.sql.Driver;
  25. import java.sql.DriverManager;
  26. import java.util.Enumeration;
  27. import java.util.List;
  28. import java.util.UUID;
  29. /**
  30. * 总平台交互
  31. * Created by HZP on 2016/02/26.
  32. */
  33. @Service("systemManager")
  34. public class SystemManager implements ISystemManager {
  35. DBHelper db = new DBHelper();
  36. /*
  37. 获取系统参数
  38. */
  39. @Override
  40. public SystemParams getSystemParams() throws Exception {
  41. List<JSONObject> list = db.query("select * from system_param");
  42. SystemParams re = new SystemParams();
  43. if (list != null) {
  44. for (JSONObject obj : list) {
  45. String key = obj.getString("param_key");
  46. String value = obj.getString("param_value");
  47. if (key.equals("ORG_CODE")) {
  48. re.setOrgCode(value);
  49. } else if (key.equals("ORG_NAME")) {
  50. re.setOrgName(value);
  51. } else if (key.equals("INTERVAL")) {
  52. re.setInterval(value);
  53. } else if (key.equals("UPDATE_INTERVAL")) {
  54. re.setUpdateInterval(value);
  55. }
  56. }
  57. }
  58. return re;
  59. }
  60. /*
  61. 根据名称获取系统参数
  62. */
  63. @Override
  64. public String getSystemParam(String name) throws Exception {
  65. Object obj = db.scalar("select param_value from system_param where param_key='" + name + "'");
  66. if (obj != null) {
  67. return obj.toString();
  68. } else {
  69. return "";
  70. }
  71. }
  72. /*
  73. 获取数据源
  74. */
  75. @Override
  76. public DataSource getDataSource() throws Exception {
  77. //第一行
  78. return db.load(DataSource.class, "select * from system_datasource");
  79. }
  80. /*
  81. 新增系统参数
  82. */
  83. private void addSystemParams(String key, String value) throws Exception {
  84. String sql = "insert into system_param (id,param_key,param_value) values ('" + UUID.randomUUID() + "','" + key + "','" + value + "')";
  85. if (!db.execute(sql)) {
  86. throw new Exception(db.errorMessage);
  87. }
  88. }
  89. /*
  90. 保存系统参数
  91. */
  92. @Transactional
  93. private void saveSystemParams(String key, String value) throws Exception {
  94. Object obj = db.scalar("select 1 from system_param where param_key='" + key + "'");
  95. if (obj == null) {
  96. addSystemParams(key, value);
  97. } else {
  98. String sql = "update system_param set param_value = '" + value + "' where param_key='" + key + "'";
  99. if (!db.execute(sql)) {
  100. throw new Exception(db.errorMessage);
  101. }
  102. }
  103. }
  104. /*
  105. 保存系统参数
  106. */
  107. @Override
  108. @Transactional
  109. public Result saveParams(String interval, String updateInterval) throws Exception {
  110. //采集频率
  111. saveSystemParams("INTERVAL", interval);
  112. ThreadConfig.CRAWLER_THREAD_SLEEP_TIME = Integer.parseInt(interval);
  113. //更新频率
  114. saveSystemParams("UPDATE_INTERVAL", updateInterval);
  115. ThreadConfig.UPDATE_THREAD_SLEEP_TIME = Integer.parseInt(updateInterval);
  116. return Result.success("保存成功!");
  117. }
  118. /*
  119. 保存数据源
  120. */
  121. @Override
  122. @Transactional
  123. public Result saveDataSource(String id, String name, String config) throws Exception {
  124. String sql = "insert into system_datasource (id,name,config) values ('" + UUID.randomUUID() + "','" + name + "','" + config + "')";
  125. if (id != null && id.length() > 0) {
  126. sql = "update system_datasource set name = '" + name + "',config='" + config + "' where id='" + id + "'";
  127. }
  128. if (db.execute(sql)) {
  129. //更新数据源//jdbc:oracle:thin:hos/hos@//172.19.103.71:1521/orcl
  130. //jdbc:mysql://172.19.103.71:1521/orcl?user=hos&password=hos&useUnicode=true&characterEncoding=UTF-8
  131. //jdbc:sqlserver://172.19.103.71:1521/orcl?user=hos&password=hos
  132. BasicDataSource dasicDataSource = new BasicDataSource();
  133. if (config.contains("oracle")) {
  134. //oracle数据库
  135. dasicDataSource.setUrl(config);
  136. dasicDataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
  137. String[] s1 = config.split("@");
  138. String[] s2 = s1[0].split(":");
  139. String[] s3 = s2[3].split("/");
  140. dasicDataSource.setUsername(s3[0]);
  141. dasicDataSource.setPassword(s3[1]);
  142. System.out.println(config);
  143. System.out.println("username:" + s3[0]);
  144. System.out.println("password:" + s3[1]);
  145. } else if (config.contains("mysql")) {
  146. //mysql数据库
  147. dasicDataSource.setUrl(config);
  148. dasicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
  149. String[] s1 = config.split("\\?");
  150. String[] s2 = s1[1].split("&");
  151. dasicDataSource.setUsername(s2[0].split("=")[1]);
  152. dasicDataSource.setPassword(s2[1].split("=")[1]);
  153. System.out.println(config);
  154. System.out.println("username:" + s2[0].split("=")[1]);
  155. System.out.println("password:" + s2[1].split("=")[1]);
  156. } else if (config.contains("sqlserver")) {
  157. //sqlserver数据库
  158. dasicDataSource.setUrl(config);
  159. dasicDataSource.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
  160. String[] s1 = config.split("\\?");
  161. String[] s2 = s1[1].split("&");
  162. dasicDataSource.setUsername(s2[0].split("=")[1]);
  163. dasicDataSource.setPassword(s2[1].split("=")[1]);
  164. System.out.println(config);
  165. System.out.println("username:" + s2[0].split("=")[1]);
  166. System.out.println("password:" + s2[1].split("=")[1]);
  167. }
  168. SQLWebService.jdbcTemplate = new JdbcTemplate();
  169. SQLWebService.jdbcTemplate.setDataSource(dasicDataSource);
  170. return Result.success("保存成功!");
  171. } else {
  172. return Result.error(db.errorMessage);
  173. }
  174. }
  175. /*
  176. 测试数据源
  177. */
  178. @Override
  179. public Result testDataSource(String uri) {
  180. try {
  181. DBDriver.registerDriver(uri);
  182. Connection conn = DriverManager.getConnection(uri);
  183. if (conn != null) {
  184. String message = "连接测试成功!";
  185. if (conn.isClosed()) {
  186. message = "连接测试失败!";
  187. }
  188. conn.close();
  189. return Result.success(message);
  190. } else {
  191. return Result.error("连接测试失败!");
  192. }
  193. } catch (Exception ex) {
  194. return Result.error(ex.getMessage());
  195. }
  196. }
  197. /*
  198. 登录操作
  199. */
  200. @Override
  201. public Result loginAction(HttpSession session, String user, String password) {
  202. try {
  203. //特殊用户
  204. if (user.equals("admin") && password.equals("JKZL")) {
  205. UserInfo obj = new UserInfo();
  206. obj.setLoginCode("admin");
  207. obj.setRealName("管理员");
  208. obj.setOrgCode("JKZL");
  209. obj.setOrgName("健康之路");
  210. session.setAttribute("userInfo", obj);
  211. return Result.success("登录成功!");
  212. }
  213. //根据用户名/密码到总平台校验
  214. Response response = EsbHttp.loginAction(user, password);
  215. if (response != null && response.getStatusCode() == 200) {
  216. JSONObject obj = new JSONObject(response.getBody());
  217. if (obj.has("token"))//登录成功
  218. {
  219. String token = obj.getString("token");
  220. //获取用户信息
  221. Response re = EsbHttp.getUserInfo(user, token);
  222. if (re != null && re.getStatusCode() == 200) {
  223. JSONObject userObject = new JSONObject(re.getBody());
  224. UserInfo userInfo = new UserInfo();
  225. userInfo.setLoginCode(user);
  226. userInfo.setRealName(userObject.getString("realName"));
  227. String orgCode = "";
  228. String orgName = "";
  229. if (userObject.has("organization") && !userObject.get("organization").equals(null)) {
  230. JSONObject orgInfo = userObject.getJSONObject("organization");
  231. orgCode = orgInfo.getString("orgCode");
  232. orgName = orgInfo.getString("fullName");
  233. userInfo.setOrgCode(orgCode);
  234. userInfo.setOrgName(orgName);
  235. } else {
  236. return Result.error("该用户未配置机构!");
  237. }
  238. session.setAttribute("userInfo", userInfo);
  239. //判断组织编码是否为空
  240. String orgCodeOld = this.getSystemParam("ORG_CODE");
  241. if (orgCodeOld == null || orgCodeOld.length() == 0) {
  242. this.saveSystemParams("FINGER_PRINT", UUID.randomUUID().toString());
  243. this.saveSystemParams("ORG_CODE", orgCode);
  244. this.saveSystemParams("ORG_NAME", orgName);
  245. //启动标准
  246. SysConfig.getInstance().setOrgCode(orgCode);
  247. Thread standardUpdateThread = new Thread(new StandardUpdateThread());
  248. ThreadManage.add(ThreadManage.STANDARD_UPDATE_THREAD, standardUpdateThread);
  249. ThreadManage.setUpdateInterval();
  250. if (!standardUpdateThread.isAlive()) {
  251. standardUpdateThread.start();
  252. }
  253. return Result.success("登录成功!");
  254. } else {
  255. if (orgCodeOld.equals(orgCode)) {
  256. return Result.success("登录成功!");
  257. } else {
  258. return Result.error("机构编码不一致!");
  259. }
  260. }
  261. } else {
  262. return Result.error("获取用户信息失败!");
  263. }
  264. } else {
  265. if (obj.has("message")) {
  266. return Result.error("登录失败!" + obj.getString("message"));
  267. } else {
  268. return Result.error("登录失败!");
  269. }
  270. }
  271. } else {
  272. String msg = "登录失败。";
  273. if (response != null) {
  274. msg += "(错误代码:" + response.getStatusCode() + ",错误信息:" + response.getBody() + ")";
  275. }
  276. return Result.error(msg);
  277. }
  278. } catch (Exception ex) {
  279. return Result.error(ex.getMessage());
  280. }
  281. }
  282. }