DataCollectDispatcher.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.yihu.ehr.service.crawler;
  2. import com.fasterxml.jackson.databind.JsonNode;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.fasterxml.jackson.databind.node.ObjectNode;
  5. import com.yihu.ehr.common.config.SysConfig;
  6. import com.yihu.ehr.common.constants.Constants;
  7. import com.yihu.ehr.model.Patient;
  8. import com.yihu.ehr.model.PatientIdentity;
  9. import com.yihu.ehr.model.entity.adapter.AdapterDataSet;
  10. import com.yihu.ehr.service.patient.PatientCDAIndex;
  11. import com.yihu.ehr.service.patient.PatientCDAUpload;
  12. import com.yihu.ehr.util.db.DBSessionFactory;
  13. import com.yihu.ehr.util.file.FileUtil;
  14. import com.yihu.ehr.util.httpclient.EsbHttp;
  15. import com.yihu.ehr.util.log.LogUtil;
  16. import com.yihu.ehr.util.operator.CollectionUtil;
  17. import com.yihu.ehr.util.operator.StringUtil;
  18. import java.io.IOException;
  19. import java.util.*;
  20. public class DataCollectDispatcher {
  21. public static String registerMethod;
  22. private static DataCollectDispatcher ourInstance = new DataCollectDispatcher();
  23. private DataCollectDispatcher() {
  24. }
  25. public static DataCollectDispatcher getInstance() {
  26. return ourInstance;
  27. }
  28. public void finalize() throws Throwable {
  29. }
  30. /**
  31. * @param patient 病人
  32. * @return true-采集成功,false-采集失败
  33. */
  34. public Boolean collectData(Patient patient, List<AdapterDataSet> adapterDataSetList, Map<String, DBSessionFactory> dataSourceMap, String token) {
  35. Boolean result = true;
  36. Map<String, AdapterDataSet> dataSetMap = new HashMap<>();
  37. List<ObjectNode> dataList = new ArrayList<>();
  38. try {
  39. for (String key : dataSourceMap.keySet()) {
  40. DBOrigin dataCollector = new DBOrigin();
  41. if (dataCollector == null) {
  42. LogUtil.fatal("采集数据:无法获取采集数据源.");
  43. continue;
  44. }
  45. for (AdapterDataSet adapterDataSet : adapterDataSetList) {
  46. //采集病人信息
  47. ObjectNode jsonObject = dataCollector.fecthData(patient, dataSourceMap.get(key), adapterDataSet);
  48. if (jsonObject == null) {
  49. continue;
  50. }
  51. if (jsonObject != null && !StringUtil.isEmpty(jsonObject)) {
  52. dataSetMap.put(adapterDataSet.getAdapterDataSetT().getStdDatasetCode(), adapterDataSet);
  53. dataList.add(jsonObject);
  54. }
  55. //注册病人
  56. if (SysConfig.getInstance().getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
  57. if (!StringUtil.isEmpty(jsonObject.get("data")) && !StringUtil.isEmpty(jsonObject.get("data").get(0))) {
  58. if (!StringUtil.isEmpty(jsonObject.get("data").get(0).get(SysConfig.getInstance().getRegisterIdCardNo()))) {
  59. register(patient, StringUtil.toString(jsonObject), token);
  60. }
  61. }
  62. }
  63. }
  64. }
  65. LogUtil.info("采集病人成功,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
  66. } catch (Exception e) {
  67. LogUtil.error("采集病人失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
  68. LogUtil.error(e);
  69. result = false;
  70. }
  71. //上传档案
  72. try {
  73. if (!CollectionUtil.isEmpty(dataList)) {
  74. if (!upload(dataList, patient, dataSetMap, token)) {
  75. result = false;
  76. }
  77. }
  78. } catch (Exception e) {
  79. result = false;
  80. LogUtil.error("档案上传失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
  81. }
  82. return result;
  83. }
  84. public Boolean upload(List<ObjectNode> dataList, Patient patient, Map<String, AdapterDataSet> dataSetMap, String token) {
  85. Boolean result = true;
  86. try {
  87. DataSetTransformer dataTransformer = new DataSetTransformer();
  88. for (ObjectNode data : dataList) {
  89. dataTransformer.setData(data);
  90. if (!toFile(dataTransformer, patient, "origin")) {
  91. LogUtil.fatal("存储原始文件失败:patient_id=" + patient.getPatientId()
  92. +"event_no=" + patient.getEventNo());
  93. result = false;
  94. break;
  95. }
  96. dataTransformer.transfer(dataSetMap);
  97. if (!toFile(dataTransformer, patient, "standard")) {
  98. LogUtil.fatal("存储标准文件失败:patient_id=" + patient.getPatientId()
  99. + "event_no=" + patient.getEventNo());
  100. result = false;
  101. break;
  102. }
  103. }
  104. PatientCDAUpload patientCDAUpload = new PatientCDAUpload();
  105. if (!patientCDAUpload.upload(patient, token)) {
  106. result = false;
  107. }
  108. } catch (Exception e) {
  109. result = false;
  110. }
  111. return result;
  112. }
  113. public boolean toFile(DataSetTransformer dataTransformer, Patient patient, String fileName) {
  114. ObjectNode jsonObject = dataTransformer.getJsonObject();
  115. PatientCDAIndex patientCDAIndex = new PatientCDAIndex(patient);
  116. String filePath = patientCDAIndex.createDataIndex(fileName, PatientCDAIndex.FileType.JSON);
  117. boolean writeFile = false;
  118. try {
  119. writeFile = FileUtil.writeFile(filePath, jsonObject.toString(), "UTF-8");
  120. } catch (IOException e) {
  121. LogUtil.fatal("存储临时文件失败.");
  122. LogUtil.error(e);
  123. }
  124. return writeFile;
  125. }
  126. /**
  127. * @param patient
  128. * @return boolean
  129. * 注册不是否成功 统一返回true
  130. */
  131. public Boolean register(Patient patient, String data, String token) {
  132. return EsbHttp.register(patient, data, token);
  133. }
  134. /**
  135. * @param condition 查询条件
  136. * @return 病人列表
  137. */
  138. public List<Patient> getPatientQueue(Map<String, Object> condition, List<AdapterDataSet> adapterDataSetList, Map<String, DBSessionFactory> dataSourceMap) {
  139. List<Patient> patientList = new ArrayList<>();
  140. DBOrigin dbOrigin = new DBOrigin();
  141. for(String key : dataSourceMap.keySet()) {
  142. DBSessionFactory dbSessionFactory = dataSourceMap.get(key);
  143. for (AdapterDataSet adapterDataSet : adapterDataSetList) {
  144. PatientIdentity patientIdentity = SysConfig.getInstance().getPatientIdentity(adapterDataSet.getAdapterDataSetT().getStdDatasetCode());
  145. if (patientIdentity == null) {
  146. continue;
  147. }
  148. List<Patient> patients = dbOrigin.getPatientList(dbSessionFactory, key, adapterDataSet, condition);
  149. if (patients == null) {
  150. return null;
  151. }
  152. if (patients.size() > 0) {
  153. patientList.addAll(patients);
  154. }
  155. }
  156. }
  157. return patientList;
  158. }
  159. /**
  160. * 解析病人索引信息
  161. *
  162. * @param patientInfo 病人索引信息
  163. * @return
  164. */
  165. public Patient parsePatient(String patientInfo) throws IOException {
  166. Patient patient = null;
  167. ObjectMapper mapper = new ObjectMapper();
  168. JsonNode rootNode = null;
  169. patient = new Patient();
  170. patient = mapper.readValue(patientInfo, Patient.class);
  171. return patient;
  172. }
  173. /**
  174. * 解析token内容
  175. *
  176. * @param responToken
  177. * @return
  178. */
  179. public Map<String, Object> parseToken(String responToken) {
  180. ObjectMapper mapper = new ObjectMapper();
  181. Map<String, Object> tokenMap = null;
  182. try {
  183. Map<String, Object> map = mapper.readValue(responToken, Map.class);
  184. String code = (String) map.get("code");
  185. if (Constants.OK.equals(code)) {
  186. tokenMap = (Map<String, Object>) map.get("result");
  187. }
  188. } catch (IOException e) {
  189. e.printStackTrace();
  190. }
  191. return tokenMap;
  192. }
  193. }//end DataCollectDispatcher