DatapushService.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.yihu.hos.datacollect.service;
  2. import com.yihu.ehr.dbhelper.mongodb.MongodbHelper;
  3. import com.yihu.hos.common.Services;
  4. import com.yihu.hos.core.log.Logger;
  5. import com.yihu.hos.core.log.LoggerFactory;
  6. import com.yihu.hos.datacollect.dao.DatacollectDao;
  7. import com.yihu.hos.datacollect.dao.DatacollectLogDao;
  8. import com.yihu.hos.resource.service.StdService;
  9. import com.yihu.hos.standard.model.adapter.AdapterDatasetModel;
  10. import com.yihu.hos.standard.model.adapter.resultModel.AdapterMetadataResultDetailModel;
  11. import com.yihu.hos.web.framework.model.ActionResult;
  12. import com.yihu.hos.web.framework.model.Result;
  13. import org.json.JSONArray;
  14. import org.json.JSONObject;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import javax.annotation.Resource;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. /**
  22. * 推数据服务
  23. */
  24. @Service(Services.DatapushService)
  25. public class DatapushService {
  26. public static final String BEAN_ID = Services.DatapushService;
  27. static private final Logger logger = LoggerFactory.getLogger(DatapushService.class);
  28. @Autowired
  29. private DatacollectDao datacollect;
  30. @Resource(name = DatacollectLogDao.BEAN_ID)
  31. private DatacollectLogDao datacollectLog;
  32. @Resource(name = StdService.BEAN_ID)
  33. private StdService stdService;
  34. MongodbHelper mongo = new MongodbHelper();
  35. /**
  36. * 转译字典
  37. */
  38. private String translateDictValue(String oldValue,String type,JSONArray dictAdapterList) throws Exception
  39. {
  40. //应用标准字段
  41. String colName = "adapterEntryCode";
  42. if(type.equals("0")) //通过name转译
  43. {
  44. colName = "adapterEntryValue";
  45. }
  46. //遍历字典数据
  47. for(int i=0; i< dictAdapterList.length();i++)
  48. {
  49. JSONObject dictItem = dictAdapterList.getJSONObject(i);
  50. if(oldValue.equals(dictItem.getString(colName)))
  51. {
  52. String newValue = dictItem.getString("stdEntryCode");
  53. return newValue;
  54. }
  55. }
  56. return oldValue;
  57. }
  58. /*****************************************************************************************************/
  59. /**
  60. * 数据入库
  61. */
  62. @Transactional
  63. public Result pushData(String datasetCode,String dataString,String orgCode) throws Exception
  64. {
  65. //机构标准版本
  66. String version = datacollect.getVersionByQLC(orgCode);
  67. //通过标准数据集名称获取适配关系
  68. AdapterDatasetModel dataset = stdService.getDatasetByCode(version,datasetCode);
  69. String msg = "";
  70. if(dataset!=null)
  71. {
  72. String datasetId = dataset.getAdapterDatasetId().toString();
  73. List<AdapterMetadataResultDetailModel> list = stdService.getDatacolByScheme(version,datasetId);
  74. if(list!=null && list.size()>0)
  75. {
  76. JSONArray array = new JSONArray(dataString);
  77. List<JSONObject> dataList = new ArrayList<>();
  78. if(array!=null && array.length()>0)
  79. {
  80. for (int i=0;i<array.length();i++)
  81. {
  82. JSONObject obj = new JSONObject();
  83. JSONObject data = (JSONObject)array.get(i);
  84. //标准转换
  85. for(AdapterMetadataResultDetailModel metadata : list)
  86. {
  87. String stdColName = metadata.getStdMetadataCode();
  88. String adapterColName = metadata.getAdapterMetadataCode();
  89. if(data.has(adapterColName))
  90. {
  91. String val = data.optString(adapterColName);
  92. String newValue =val;
  93. //判断是否字典
  94. if(metadata.getStdDictId()!=null&&metadata.getStdDictId()!=0)
  95. {
  96. //获取字典列表
  97. List dictString = stdService.getDictByScheme(version,metadata.getStdDictId().toString());
  98. JSONArray dictAdapterArray = new JSONArray(dictString);
  99. String type = "";
  100. if(metadata.getAdapterDataType()!=null)
  101. {
  102. type = metadata.getAdapterDataType().toString();
  103. }
  104. newValue = translateDictValue(val,type,dictAdapterArray);
  105. }
  106. obj.put(stdColName,newValue);
  107. }
  108. }
  109. //org_code字段
  110. obj.put("RSCOM_ORG_CODE",orgCode);
  111. dataList.add(obj);
  112. }
  113. }
  114. //MongoDB入库
  115. boolean b = mongo.insert(datasetCode,dataList);
  116. if(!b)
  117. {
  118. if(mongo.errorMessage!=null && mongo.errorMessage.length()>0)
  119. {
  120. logger.debug(mongo.errorMessage);
  121. msg = "Mongodb保存失败!(表:"+datasetCode+",数据:"+dataString+")"+mongo.errorMessage;
  122. }
  123. else {
  124. msg ="Mongodb保存失败!(表:"+datasetCode+",数据:"+dataString+")";
  125. }
  126. }
  127. }
  128. }
  129. else{
  130. msg ="适配标准不完善!";
  131. }
  132. //是否成功
  133. if(msg.length()>0)
  134. {
  135. //日志记录
  136. datacollectLog.addDataPushLog("1","0",msg);
  137. return ActionResult.error(msg);
  138. }
  139. else{
  140. msg = "数据入库成功!(表:"+datasetCode+")";
  141. //日志记录
  142. datacollectLog.addDataPushLog("1","1",msg);
  143. return ActionResult.success(msg);
  144. }
  145. }
  146. }