RedisInitService.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. package com.yihu.ehr.redis.cache.service;
  2. import com.yihu.ehr.query.BaseJpaService;
  3. import com.yihu.ehr.redis.schema.*;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.util.StringUtils;
  8. import java.util.List;
  9. import java.util.Map;
  10. /**
  11. * Redis初始化管理
  12. * @author hzp add at 20170425
  13. */
  14. @Service
  15. public class RedisInitService extends BaseJpaService {
  16. @Autowired
  17. private JdbcTemplate jdbc;
  18. @Autowired
  19. private HealthProblemDictKeySchema healthProblemDictKeySchema;
  20. @Autowired
  21. private Icd10KeySchema icd10KeySchema;
  22. @Autowired
  23. private OrgKeySchema orgKeySchema;
  24. @Autowired
  25. private RsAdapterMetaKeySchema rsAdapterMetaKeySchema;
  26. @Autowired
  27. private RsMetadataKeySchema rsMetadataKeySchema;
  28. @Autowired
  29. private AddressDictSchema addressDictSchema;
  30. /**
  31. * 缓存健康问题名称Redis
  32. */
  33. public int cacheHpName() {
  34. String sql = "select code, name from health_problem_dict";
  35. List<Map<String,Object>> list = jdbc.queryForList(sql);
  36. //清空相关Redis
  37. healthProblemDictKeySchema.deleteAll();
  38. for (Map<String,Object> map : list){
  39. healthProblemDictKeySchema.set((String) map.get("code"), (String)map.get("name"));
  40. }
  41. return list.size();
  42. }
  43. /**
  44. * 缓存ICD10 Redis
  45. */
  46. public int cacheIcd10() {
  47. String sql = "select t.hp_code, d.code, d.name, d.chronic_flag, d.type from\n" +
  48. "(select r.icd10_id, group_concat(p.`code` separator ';') hp_code \n" +
  49. "from icd10_hp_relation r\n" +
  50. "left join health_problem_dict p on p.id = r.hp_id \n" +
  51. "group by icd10_id) t\n" +
  52. "left join icd10_dict d on t.icd10_id = d.id" ;
  53. List<Map<String,Object>> list = jdbc.queryForList(sql);
  54. //清空相关Redis
  55. icd10KeySchema.deleteAll();
  56. icd10KeySchema.deleteHpCode();
  57. icd10KeySchema.deleteChronic();
  58. list.forEach(item -> {
  59. icd10KeySchema.set((String) item.get("code"), (String)item.get("name"));
  60. icd10KeySchema.setHpCode((String) item.get("code"), (String)item.get("hp_code"));
  61. if (item.get("chronic_flag") != null) {
  62. if (item.get("type") != null) {
  63. icd10KeySchema.setChronicInfo((String) item.get("code"), item.get("chronic_flag") + "-" + item.get("type"));
  64. } else {
  65. icd10KeySchema.setChronicInfo((String) item.get("code"), item.get("chronic_flag") + "-0");
  66. }
  67. }
  68. });
  69. return list.size();
  70. }
  71. /**
  72. * 缓存机构名称Redis
  73. */
  74. public int cacheOrgName() {
  75. String sql = "select org_code, full_name from organizations";
  76. List<Map<String, Object>> list = jdbc.queryForList(sql);
  77. //清空相关Redis
  78. orgKeySchema.deleteAll();
  79. for (Map<String,Object> map : list){
  80. orgKeySchema.set(String.valueOf(map.get("org_code")), String.valueOf(map.get("full_name")));
  81. }
  82. return list.size();
  83. }
  84. /**
  85. * 缓存机构区域Redis
  86. */
  87. public int cacheOrgArea() {
  88. String sql = "select org_code, administrative_division from organizations";
  89. List<Map<String,Object>> list = jdbc.queryForList(sql);
  90. //清空相关Redis
  91. orgKeySchema.deleteOrgArea();
  92. for (Map<String,Object> map : list){
  93. orgKeySchema.setOrgArea(String.valueOf(map.get("org_code")), String.valueOf(map.get("administrative_division")));
  94. }
  95. return list.size();
  96. }
  97. /**
  98. * 缓存机构Saas区域Redis
  99. */
  100. public int cacheOrgSaasArea() {
  101. String sql = "select org_code, saas_code from org_saas where type='1' order by org_code";
  102. List<Map<String,Object>> list = jdbc.queryForList(sql);
  103. //清空相关Redis
  104. orgKeySchema.deleteOrgSaasArea();
  105. String orgCode = "";
  106. String val = "";
  107. for (Map<String,Object> map:list){
  108. String orgCodeCurrent = String.valueOf(map.get("org_code"));
  109. String saasCodeCurrent = String.valueOf(map.get("saas_code"));
  110. if (!orgCode.equals(orgCodeCurrent) && !StringUtils.isEmpty(orgCode)) {
  111. orgKeySchema.setOrgSaasArea(orgCode,val);
  112. val = saasCodeCurrent;
  113. orgCode = orgCodeCurrent;
  114. } else {
  115. if (StringUtils.isEmpty(val)) {
  116. orgCode = orgCodeCurrent;
  117. val = saasCodeCurrent;
  118. } else {
  119. orgCode = orgCodeCurrent;
  120. val += "," + saasCodeCurrent;
  121. }
  122. }
  123. }
  124. if (!StringUtils.isEmpty(orgCode)) {
  125. orgKeySchema.setOrgSaasArea(orgCode,val);
  126. }
  127. return list.size();
  128. }
  129. /**
  130. * 缓存机构Saas机构Redis
  131. */
  132. public int cacheOrgSaasOrg() {
  133. String sql = "select org_code, saas_code from org_saas where type='2' order by org_code";
  134. List<Map<String, Object>> list = jdbc.queryForList(sql);
  135. //清空相关Redis
  136. orgKeySchema.deleteOrgSaasOrg();
  137. String orgCode = "";
  138. String val = "";
  139. for (Map<String,Object> map:list){
  140. String orgCodeCurrent = String.valueOf(map.get("org_code"));
  141. String saasCodeCurrent = String.valueOf(map.get("saas_code"));
  142. if (!orgCode.equals(orgCodeCurrent) && !StringUtils.isEmpty(orgCode)) {
  143. orgKeySchema.setOrgSaasOrg(orgCode,val);
  144. val = saasCodeCurrent;
  145. orgCode = orgCodeCurrent;
  146. } else {
  147. if (StringUtils.isEmpty(val)) {
  148. orgCode = orgCodeCurrent;
  149. val = saasCodeCurrent;
  150. } else {
  151. orgCode = orgCodeCurrent;
  152. val += "," + saasCodeCurrent;
  153. }
  154. }
  155. }
  156. if (!StringUtils.isEmpty(orgCode)) {
  157. orgKeySchema.setOrgSaasOrg(orgCode,val);
  158. }
  159. return list.size();
  160. }
  161. /**
  162. * 缓存适配数据元数据
  163. * @param id
  164. * @return
  165. */
  166. public int cacheAdapterMetadata (String id, boolean deleteAll){
  167. String schemaSql = "SELECT adapter_version FROM rs_adapter_scheme WHERE id = " + id;
  168. String metaSql = "SELECT src_dataset_code, src_metadata_code, metadata_id FROM rs_adapter_metadata WHERE scheme_id = " + id;
  169. Map<String, Object> schemaMap = jdbc.queryForMap(schemaSql);
  170. List<Map<String, Object>> metaList = jdbc.queryForList(metaSql);
  171. //清空相关Redis
  172. if (deleteAll) {
  173. rsAdapterMetaKeySchema.deleteAll();
  174. } else {
  175. rsAdapterMetaKeySchema.deleteVersion(schemaMap.get("adapter_version").toString());
  176. }
  177. for (Map<String, Object> metaMap : metaList) {
  178. if (StringUtils.isEmpty(metaMap.get("src_dataset_code")) || StringUtils.isEmpty(metaMap.get("metadata_id"))) {
  179. continue;
  180. }
  181. rsAdapterMetaKeySchema.setMetaData(schemaMap.get("adapter_version").toString(), metaMap.get("src_dataset_code").toString(),
  182. metaMap.get("src_metadata_code").toString(), metaMap.get("metadata_id").toString());
  183. }
  184. return metaList.size();
  185. }
  186. /**
  187. * 缓存数据元字典(Dict_code不为空)
  188. * @return
  189. */
  190. public int cacheMetadataDict() {
  191. String sql = "SELECT id, dict_code FROM rs_metadata WHERE dict_code != NULL OR dict_code != ''";
  192. //String sql1 = "SELECT a FROM RsMetadata a WHERE a.dictCode <> NULL AND a.dictCode <> ''";
  193. List<Map<String, Object>> metaList = jdbc.queryForList(sql);
  194. //清空相关Redis
  195. rsMetadataKeySchema.deleteAll();
  196. for (Map<String, Object> tempMap : metaList) {
  197. if (StringUtils.isEmpty(tempMap.get("dict_code"))) {
  198. continue;
  199. }
  200. rsMetadataKeySchema.set((String) tempMap.get("id"), (String) tempMap.get("dict_code"));
  201. }
  202. return metaList.size();
  203. }
  204. /**
  205. * 缓存行政区域Redis
  206. */
  207. public int cacheAreaName() {
  208. String sql = "select id, name from address_dict";
  209. List<Map<String,Object>> list = jdbc.queryForList(sql);
  210. //清空相关Redis
  211. addressDictSchema.delete();
  212. for (Map<String,Object> map : list){
  213. addressDictSchema.setAreaName(String.valueOf(map.get("id")), String.valueOf(map.get("name")));
  214. }
  215. return list.size();
  216. }
  217. //TODO ------------------- 未知用途 --------------------------
  218. @Autowired
  219. private IndicatorsDictKeySchema indicatorsDictKeySchema;
  220. /**
  221. * 缓存指标
  222. * @return
  223. */
  224. /*public boolean cacheIndicatorsDict() {
  225. String sql = "SELECT * FROM indicators_dict";
  226. List<Map<String, Object>> list = jdbc.queryForList(sql);
  227. indicatorsDictKeySchema.deleteAll();
  228. for (Map<String, Object> tempMap : list) {
  229. HashMap<String, String> map = new HashMap<>();
  230. map.put("id", String.valueOf(tempMap.get("id")));
  231. map.put("code", String.valueOf(tempMap.get("code")));
  232. map.put("name", String.valueOf(tempMap.get("name")));
  233. map.put("PhoneticCode", String.valueOf(tempMap.get("phonetic_code")));
  234. map.put("type", String.valueOf(tempMap.get("type")));
  235. map.put("unit", String.valueOf(tempMap.get("unit")));
  236. map.put("LowerLimit", String.valueOf(tempMap.get("lower_limit")));
  237. map.put("UpperLimit", String.valueOf(tempMap.get("upper_limit")));
  238. map.put("Description", String.valueOf(tempMap.get("description")));
  239. indicatorsDictKeySchema.set(String.valueOf(tempMap.get("code")), map);
  240. }
  241. return true;
  242. }*/
  243. }