MasterResourceDao.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.yihu.ehr.resolve.dao;
  2. import com.google.gson.JsonArray;
  3. import com.google.gson.JsonElement;
  4. import com.google.gson.JsonObject;
  5. import com.google.gson.JsonParser;
  6. import com.yihu.ehr.profile.EventType;
  7. import com.yihu.ehr.hbase.HBaseDao;
  8. import com.yihu.ehr.hbase.TableBundle;
  9. import com.yihu.ehr.profile.core.ResourceCore;
  10. import com.yihu.ehr.profile.exception.IllegalJsonFileException;
  11. import com.yihu.ehr.profile.family.ResourceCells;
  12. import com.yihu.ehr.resolve.model.stage1.FilePackage;
  13. import com.yihu.ehr.resolve.model.stage1.LinkPackage;
  14. import com.yihu.ehr.resolve.model.stage1.OriginalPackage;
  15. import com.yihu.ehr.resolve.model.stage2.MasterRecord;
  16. import com.yihu.ehr.resolve.model.stage2.ResourceBucket;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Repository;
  20. import java.util.Map;
  21. /**
  22. * 档案资源主库。
  23. *
  24. * @author Sand
  25. * @version 1.0
  26. * @created 2015.08.27 10:20
  27. */
  28. @Repository
  29. public class MasterResourceDao {
  30. @Autowired
  31. private HBaseDao hbaseDao;
  32. public void saveOrUpdate(ResourceBucket resourceBucket, OriginalPackage originalPackage) throws Exception {
  33. //如果是非结构化档案, 或者是 影像档案, 通过rowkey 判断结构化档案 是否有数据
  34. if(originalPackage instanceof FilePackage || originalPackage instanceof LinkPackage){
  35. String profileId = originalPackage.getProfileId().toString();
  36. String rowkey = profileId.substring(2,profileId.length());
  37. Map<String, String> originResult = hbaseDao.get(ResourceCore.MasterTable, rowkey, resourceBucket.getdFamily());
  38. /*if (!originResult.isEmpty()) {
  39. throw new IllegalJsonFileException("Please upload the struct package(" + rowkey + ") first !");
  40. }*/
  41. }
  42. String rowKey = resourceBucket.getId();
  43. TableBundle bundle = new TableBundle();
  44. if (originalPackage.isReUploadFlg()) { //补传处理
  45. Map<String, String> originResult = hbaseDao.get(resourceBucket.getMaster(), rowKey, resourceBucket.getdFamily());
  46. if (!originResult.isEmpty()) {
  47. MasterRecord masterRecord = resourceBucket.getMasterRecord();
  48. Map<String, String> supplement = masterRecord.getDataGroup();
  49. originResult.putAll(supplement);
  50. bundle.addValues(rowKey, resourceBucket.getdFamily(), originResult);
  51. hbaseDao.save(resourceBucket.getMaster(), bundle);
  52. Map<String, String> basicResult = hbaseDao.get(resourceBucket.getMaster(), rowKey, resourceBucket.getBasicFamily());
  53. updateFile(resourceBucket,originalPackage,basicResult);
  54. if (StringUtils.isNotEmpty(basicResult.get(ResourceCells.EVENT_TYPE))) {
  55. EventType eventType = EventType.create(basicResult.get(ResourceCells.EVENT_TYPE));
  56. originalPackage.setEventType(eventType);
  57. }
  58. resourceBucket.insertBasicRecord(ResourceCells.DEMOGRAPHIC_ID, basicResult.get(ResourceCells.DEMOGRAPHIC_ID));
  59. } else {
  60. throw new IllegalJsonFileException("Please upload the complete package(" + rowKey + ") first !");
  61. }
  62. } else {
  63. // delete legacy data if they are exist
  64. //主表直接GET
  65. String legacy = hbaseDao.get(resourceBucket.getMaster(), rowKey);
  66. if (StringUtils.isNotEmpty(legacy)) {
  67. hbaseDao.delete(resourceBucket.getMaster(), rowKey);
  68. }
  69. // now save the data to hbase
  70. bundle.clear();
  71. bundle.addValues(
  72. rowKey,
  73. resourceBucket.getBasicFamily(),
  74. resourceBucket.getMasterBasicRecords(originalPackage.getProfileType())
  75. );
  76. bundle.addValues(
  77. rowKey,
  78. resourceBucket.getdFamily(),
  79. resourceBucket.getMasterRecord().getDataGroup()
  80. );
  81. hbaseDao.save(resourceBucket.getMaster(), bundle);
  82. }
  83. }
  84. /**
  85. * 此处方法主要是非结构化档案补传,文件的更新
  86. * @param resourceBucket
  87. * @param originalPackage
  88. * @param basicResult
  89. */
  90. private void updateFile(ResourceBucket resourceBucket, OriginalPackage originalPackage,Map<String, String> basicResult){
  91. if(originalPackage instanceof FilePackage){
  92. String file_list = basicResult.get("file_list");
  93. JsonArray oldFileArray = new JsonParser().parse(file_list).getAsJsonArray();
  94. JsonArray newFileArray = new JsonArray();
  95. newFileArray.addAll(oldFileArray);
  96. //新上报的数据
  97. String file_list1 = resourceBucket.getBasicRecord("file_list");
  98. JsonArray waitAddFileArray = new JsonParser().parse(file_list1).getAsJsonArray();
  99. for(JsonElement waitAdd :waitAddFileArray){
  100. String cdaId = ((JsonObject) waitAdd).get("cda_document_id").getAsString();
  101. for(JsonElement oldFile :oldFileArray){
  102. String oldCdaId = ((JsonObject) oldFile).get("cda_document_id").getAsString();
  103. if(cdaId.equalsIgnoreCase(oldCdaId)){
  104. newFileArray.remove(oldFile);
  105. }
  106. }
  107. }
  108. newFileArray.addAll(waitAddFileArray);
  109. basicResult.put("file_list",newFileArray.toString());
  110. TableBundle bundle = new TableBundle();
  111. bundle.addValues(resourceBucket.getId(), resourceBucket.getBasicFamily(), basicResult);
  112. hbaseDao.save(resourceBucket.getMaster(), bundle);
  113. }else if (originalPackage instanceof LinkPackage){
  114. String file_list = basicResult.get("file_list");
  115. JsonArray oldFileArray = new JsonParser().parse(file_list).getAsJsonArray();
  116. //新上报的数据
  117. String file_list1 = resourceBucket.getBasicRecord("file_list");
  118. JsonArray waitAddFileArray = new JsonParser().parse(file_list1).getAsJsonArray();
  119. oldFileArray.addAll(waitAddFileArray);
  120. basicResult.put("file_list",oldFileArray.toString());
  121. TableBundle bundle = new TableBundle();
  122. bundle.addValues(resourceBucket.getId(), resourceBucket.getBasicFamily(), basicResult);
  123. hbaseDao.save(resourceBucket.getMaster(), bundle);
  124. }
  125. }
  126. }