CacheFacade.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.diagbot.client.PushNewServiceClient;
  4. import com.diagbot.dto.DictionaryInfoDTO;
  5. import com.diagbot.dto.PushReloadDTO;
  6. import com.diagbot.entity.SysDeptPush;
  7. import com.diagbot.entity.TranHospitalInfo;
  8. import com.diagbot.enums.IsDeleteEnum;
  9. import com.diagbot.enums.RedisEnum;
  10. import com.diagbot.enums.StandConvertEnum;
  11. import com.diagbot.util.EntityUtil;
  12. import com.diagbot.util.ListUtil;
  13. import com.diagbot.util.RedisUtil;
  14. import com.diagbot.util.StringUtil;
  15. import org.apache.commons.collections4.map.LinkedMap;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.cache.annotation.CacheEvict;
  18. import org.springframework.stereotype.Component;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @Description:
  24. * @Author:zhoutg
  25. * @time: 2018/11/23 11:37
  26. */
  27. @Component
  28. public class CacheFacade {
  29. @Autowired
  30. RedisUtil redisUtil;
  31. @Autowired
  32. NeoFacade neoFacade;
  33. @Autowired
  34. private KlDiagnoseBaseFacade klDiagnoseBaseFacade;
  35. @Autowired
  36. KlDictionaryInfoFacade klDictionaryInfoFacade;
  37. @Autowired
  38. TranHospitalInfoFacade tranHospitalInfoFacade;
  39. @Autowired
  40. PushNewServiceClient pushNewServiceClient;
  41. @Autowired
  42. DeptPushFacade deptPushFacade;
  43. /**
  44. * 清除缓存信息
  45. *
  46. * @return
  47. */
  48. @CacheEvict(value = "cache", allEntries = true)
  49. public void clear() {
  50. }
  51. /**
  52. * 清除标准词转换缓存信息
  53. *
  54. * @return
  55. */
  56. public void clearStandConvert() {
  57. redisUtil.deleteByPrex(StandConvertEnum.disease.getName());
  58. redisUtil.deleteByPrex(StandConvertEnum.drug.getName());
  59. redisUtil.deleteByPrex(StandConvertEnum.lis.getName());
  60. redisUtil.deleteByPrex(StandConvertEnum.operation.getName());
  61. redisUtil.deleteByPrex(StandConvertEnum.pacs.getName());
  62. redisUtil.deleteByPrex(StandConvertEnum.symptom.getName());
  63. redisUtil.deleteByPrex(StandConvertEnum.vital.getName());
  64. redisUtil.deleteByPrex(StandConvertEnum.transfusion.getName());
  65. }
  66. /**
  67. * 加载药品类型缓存
  68. *
  69. * @return
  70. */
  71. public void loadDrugTypeCache() {
  72. redisUtil.deleteByPrex(RedisEnum.drugType.getName());
  73. neoFacade.getDrugCache();
  74. }
  75. /**
  76. * 加载数据库中症状特征缓存
  77. *
  78. * @return
  79. */
  80. public void getSymptomFeatureCache() {
  81. redisUtil.deleteByPrex(RedisEnum.symptomFeature.getName());
  82. neoFacade.symptomFeatureCache();
  83. }
  84. /**
  85. * 加载数据库中疾病对应缓存
  86. *
  87. * @return
  88. */
  89. public void getDiseaseCorrespondCache() {
  90. redisUtil.deleteByPrex(RedisEnum.diseaseCorrespond.getName());
  91. neoFacade.diseaseCorrespondCache();
  92. }
  93. /**
  94. * 加载数据库中疾病过滤缓存
  95. *
  96. * @return
  97. */
  98. public void getdiseaseFilterCache() {
  99. redisUtil.deleteByPrex(RedisEnum.diseaseFilter.getName());
  100. neoFacade.diseaseFilterCache();
  101. }
  102. /**
  103. * 缓存医学知识库中的所有规则
  104. *
  105. * @return
  106. */
  107. public void loadAllRuleCache(){
  108. redisUtil.deleteByPrex(RedisEnum.allRule.getName());
  109. redisUtil.delete(RedisEnum.drugAllergen.getName());
  110. neoFacade.allRuleCache();
  111. }
  112. /**
  113. * 缓存VTE医嘱数据
  114. *
  115. * @return
  116. */
  117. public void loadVteAdviceCache(){
  118. redisUtil.deleteByPrex(RedisEnum.vteAdvice.getName());
  119. // 加载
  120. List<DictionaryInfoDTO> dictionaryInfoDTOList = klDictionaryInfoFacade.getListByGroupType(100);
  121. if (ListUtil.isNotEmpty(dictionaryInfoDTOList)) {
  122. // 提示语
  123. Map<String, List<DictionaryInfoDTO>> map = EntityUtil.makeEntityListMap(dictionaryInfoDTOList, "name");
  124. for (String key : map.keySet()) {
  125. redisUtil.set(RedisEnum.vteAdvice.getName() + key, map.get(key).stream().map(r -> r.getVal())
  126. .filter(r -> StringUtil.isNotBlank(r)).distinct().collect(Collectors.toList()));
  127. }
  128. }
  129. }
  130. /**
  131. * 重新加载大数据缓存
  132. *
  133. * @return
  134. */
  135. public Boolean reloadPushDB(){
  136. PushReloadDTO pushReloadDTO = pushNewServiceClient.reloadPushDB();
  137. return pushReloadDTO != null && pushReloadDTO.getStatus().equals(0);
  138. }
  139. /**
  140. * 缓存医学知识库中的所有去重的基础诊断依据
  141. *
  142. * @return
  143. */
  144. public void loadAllBaseDiagnoseCache(){
  145. redisUtil.delete(RedisEnum.allBaseDiagnose.getName());
  146. neoFacade.allBaseDiagnose();
  147. }
  148. /**
  149. * 缓存医学知识库中的所有去重的基础规则
  150. *
  151. * @return
  152. */
  153. public void loadAllBaseRegulationCache(){
  154. redisUtil.delete(RedisEnum.allBaseRegulation.getName());
  155. neoFacade.allBaseRegulation();
  156. }
  157. public void clearLoadCache(String str) {
  158. redisUtil.deleteByPrex(str);
  159. }
  160. /**
  161. * 加载大数据推送类型
  162. */
  163. public void loadPushModel() {
  164. redisUtil.delete("pushVersion"); // 删除脏数据
  165. redisUtil.delete(RedisEnum.pushModel.getName());
  166. // 加载
  167. List<TranHospitalInfo> hospitalList = tranHospitalInfoFacade.list(new QueryWrapper<TranHospitalInfo>()
  168. .eq("is_deleted", IsDeleteEnum.N.getKey())
  169. );
  170. if (ListUtil.isNotEmpty(hospitalList)) {
  171. // 推送版本
  172. Map<String, Object> versionMap = new LinkedMap<>();
  173. for (TranHospitalInfo hospitalInfo : hospitalList) {
  174. if (hospitalInfo.getPushMode() != null) {
  175. versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), hospitalInfo.getPushMode());
  176. } else {
  177. versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), 0);
  178. }
  179. }
  180. redisUtil.putHashMap(RedisEnum.pushModel.getName(), versionMap);
  181. }
  182. }
  183. /**
  184. * 加载标准科室和推送类型的映射关系【sys_dept_push】
  185. */
  186. public void loadDeptPush() {
  187. // 删除
  188. redisUtil.delete(RedisEnum.deptPush.getName());
  189. // 加载
  190. List<SysDeptPush> deptPushList = deptPushFacade.list(new QueryWrapper<SysDeptPush>()
  191. .eq("is_deleted", IsDeleteEnum.N.getKey())
  192. );
  193. if (ListUtil.isNotEmpty(deptPushList)) {
  194. // 推送类型
  195. redisUtil.putHashMap(RedisEnum.deptPush.getName(),
  196. deptPushList.stream().collect(Collectors.toMap(k -> k.getDeptName(), v -> v.getPush(), (v1, v2) -> (v2))));
  197. }
  198. }
  199. /**
  200. * 加载开单频次
  201. */
  202. public void loadFrequency() {
  203. // 删除
  204. redisUtil.delete(RedisEnum.frequency.getName());
  205. // 加载
  206. List<DictionaryInfoDTO> dictionaryInfoDTOList = klDictionaryInfoFacade.getListByGroupType(40);
  207. redisUtil.set(RedisEnum.frequency.getName(), dictionaryInfoDTOList);
  208. }
  209. /**
  210. * 加载提示语
  211. */
  212. public void loadMsg() {
  213. // 开单提示语
  214. redisUtil.delete(RedisEnum.msg.getName());
  215. List<DictionaryInfoDTO> dictionaryInfoDTOList = klDictionaryInfoFacade.getListByGroupType(41);
  216. if (ListUtil.isNotEmpty(dictionaryInfoDTOList)) {
  217. // 提示语
  218. Map<String, Object> msgMap = new LinkedMap<>();
  219. for (DictionaryInfoDTO dic : dictionaryInfoDTOList) {
  220. msgMap.put(dic.getName(), dic.getVal());
  221. }
  222. redisUtil.putHashMap(RedisEnum.msg.getName(), msgMap);
  223. }
  224. // 其他值提醒化验提示语
  225. redisUtil.delete(RedisEnum.otherMsg.getName());
  226. List<DictionaryInfoDTO> otherLisList = klDictionaryInfoFacade.getListByGroupType(42);
  227. if (ListUtil.isNotEmpty(otherLisList)) {
  228. // 提示语
  229. Map<String, Object> msgMap = new LinkedMap<>();
  230. for (DictionaryInfoDTO dic : otherLisList) {
  231. msgMap.put(dic.getName(), dic.getVal());
  232. }
  233. redisUtil.putHashMap(RedisEnum.otherMsg.getName(), msgMap);
  234. }
  235. }
  236. }