KnowledgeServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package org.diagbot.service.impl;
  2. import org.apache.commons.collections4.IterableUtils;
  3. import org.diagbot.entity.node.LIS;
  4. import org.diagbot.entity.node.Symptom;
  5. import org.diagbot.mapper.KnowledgeMapper;
  6. import org.diagbot.service.KnowledgeService;
  7. import org.diagbot.vo.*;
  8. import org.diagbot.entity.node.Disease;
  9. import org.diagbot.entity.node.base.BaseNode;
  10. import org.apache.commons.collections4.IteratorUtils;
  11. import org.diagbot.repository.*;
  12. import org.neo4j.driver.v1.types.Node;
  13. import org.neo4j.driver.v1.types.Path;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.data.domain.PageRequest;
  16. import org.springframework.data.domain.Pageable;
  17. import org.springframework.data.domain.Sort;
  18. import org.springframework.stereotype.Service;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. @Service
  22. public class KnowledgeServiceImpl implements KnowledgeService {
  23. @Autowired
  24. private SymptomRepository symptomRepository;
  25. @Autowired
  26. private DiseaseRepository diseaseRepository;
  27. @Autowired
  28. private LISRepository lisRepository;
  29. @Autowired
  30. private BaseNodeRepository baseNodeRepository;
  31. @Autowired
  32. private RelationRepository relationRepository;
  33. @Autowired
  34. private KnowledgeMapper knowledgeMapper;
  35. private List<BaseNode> baseNodes;
  36. private Pageable pageable;
  37. /**
  38. * 处理症状节点相关的申请
  39. */
  40. @Override
  41. public Symptom addSymptom(Symptom symptom) {
  42. return symptomRepository.save(symptom);
  43. }
  44. @Override
  45. public Symptom findOneSymptom(long id) {
  46. return symptomRepository.findById(id).get();
  47. }
  48. @Override
  49. public List<Symptom> findSymptoms(String name) { return symptomRepository.findByNameContaining(name); }
  50. @Override
  51. public void deleteOneSymptom(long id) {
  52. symptomRepository.deleteById(id);
  53. }
  54. @Override
  55. public List<Symptom> selectAllSymptom(PageVo pageVo) {
  56. pageable = getPageable(pageVo);
  57. return IteratorUtils.toList(symptomRepository.findAll().iterator());
  58. }
  59. /**
  60. * 处理疾病节点相关的申请
  61. */
  62. @Override
  63. public Disease addDisease(Disease disease) {
  64. return diseaseRepository.save(disease);
  65. }
  66. @Override
  67. public Disease findOneDisease(long id) {
  68. return diseaseRepository.findById(id).get();
  69. }
  70. @Override
  71. public List<Disease> findDisease(String name) {
  72. return diseaseRepository.findByNameContaining(name);
  73. }
  74. @Override
  75. public void deleteOneDisease(long id) {diseaseRepository.deleteById(id); }
  76. @Override
  77. public List<Disease> selectAllDisease(PageVo pageVo) {
  78. pageable = getPageable(pageVo);
  79. return IteratorUtils.toList(diseaseRepository.findAll(pageable).iterator());
  80. }
  81. /**
  82. * 处理化验节点相关的申请
  83. */
  84. @Override
  85. public LIS addLIS(LIS lis) {
  86. return lisRepository.save(lis);
  87. }
  88. @Override
  89. public LIS findOneLIS(long id) {
  90. return lisRepository.findById(id).get();
  91. }
  92. @Override
  93. public List<LIS> findLIS(String name) { return lisRepository.findByNameContaining(name); }
  94. @Override
  95. public void deleteOneLIS(long id) {lisRepository.deleteById(id); }
  96. @Override
  97. public List<LIS> selectAllLIS(PageVo pageVo) {
  98. pageable = getPageable(pageVo);
  99. return IteratorUtils.toList(lisRepository.findAll().iterator());
  100. }
  101. @Override
  102. public List<Map<String, Object>> getRelationByNodes(RelationVo relationVo) {
  103. String s_name = relationVo.getStart_name();
  104. String s_type = relationVo.getStart_type();
  105. String e_name = relationVo.getEnd_name();
  106. String e_type = relationVo.getEnd_type();
  107. List<Map<String, Object>> list = extractPath(relationRepository.getRelationByNodes(s_name, s_type, e_name, e_type));
  108. return list;
  109. }
  110. @Override
  111. public List<Map<String, Object>> getOneLevelRelationByEndNode(RelationVo relationVo) {
  112. String e_name = relationVo.getEnd_name();
  113. String e_type = relationVo.getEnd_type();
  114. List<Map<String, Object>> list = extractPath(relationRepository.getOneLevelRelationByEndNode(e_name, e_type));
  115. return list;
  116. }
  117. @Override
  118. public Iterable<Map<String, Object>> getNodeByRelation(RelationVo relationVo) {
  119. String s_name = relationVo.getStart_name();
  120. String s_type = relationVo.getStart_type();
  121. String rel = relationVo.getRel_name();
  122. return relationRepository.getNodeByRelation(s_name, s_type, rel);
  123. }
  124. @Override
  125. public BaseNode updateNodeByName(AmendRelationVo amendRelationVo) {
  126. int id = amendRelationVo.getId();
  127. String old_name = amendRelationVo.getOld_start_name();
  128. String new_name = amendRelationVo.getNew_start_name();
  129. return baseNodeRepository.updateNodeByName(id, old_name, new_name);
  130. }
  131. @Override
  132. public List<Map<String, Object>> updateRelation(AmendRelationVo amendRelationVo) {
  133. List<Map<String, Object>> path = extractPath(knowledgeMapper.updateRelation(amendRelationVo));
  134. return path;
  135. }
  136. @Override
  137. public List<Map<String, Object>> getAllNode() {
  138. List<Map<String, Object>> ndlist = baseNodeRepository.getAllNode();
  139. return ndlist;
  140. }
  141. @Override
  142. public List<Map<String, Object>> findHighRiskDisease(QueryVo queryVo) {
  143. List<Map<String, Object>> hrlist = diseaseRepository.findHighRiskDisease(queryVo.getDiseaselist());
  144. return hrlist;
  145. }
  146. @Override
  147. public Map<String, Object> getHighRiskDisease(SearchData searchData) {
  148. String diag = searchData.getDiag();
  149. String[] diseaseArray = diag.split(",|,|、");
  150. List<String> diseaseList = Arrays.asList(diseaseArray);
  151. Map<String, Object> map = new HashMap<>();
  152. List<Map<String, Object>> list = baseNodeRepository.getHighRisk(diseaseList);
  153. for (Map hrmap:list) {
  154. String name = hrmap.get("name").toString();
  155. String risk = hrmap.get("risk").toString();
  156. map.put(name, risk);
  157. }
  158. return map;
  159. }
  160. @Override
  161. public List<Map<String, Object>> getRecommendItem(QueryVo queryVo) {
  162. List<Map<String, Object>> llist = relationRepository.getRecommendItem(queryVo.getDiseaselist());
  163. return llist;
  164. }
  165. public Pageable getPageable(PageVo pageVo) {
  166. if (pageVo.getSize() > 0) {
  167. if (pageVo.getSort_key() != null && pageVo.getSort_direct() != null) {
  168. if (pageVo.getSort_direct().toLowerCase().equals("asc")) {
  169. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize(),
  170. Sort.Direction.ASC, pageVo.getSort_key().trim());
  171. }
  172. else if (pageVo.getSort_direct().toLowerCase().equals("desc")) {
  173. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize(),
  174. Sort.Direction.DESC, pageVo.getSort_key().trim());
  175. }
  176. else {
  177. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize());
  178. }
  179. }
  180. else {
  181. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize());
  182. }
  183. }
  184. else {
  185. pageable = PageRequest.of(0, 100);
  186. }
  187. return pageable;
  188. }
  189. public List<Map<String, Object>> extractPath(Iterable<Map<String, Object>> path) {
  190. Map<String, Object> item = new HashMap<>();
  191. List<Map<String, Object>> pathlist = new ArrayList<>();
  192. Map<String, Object> pathmap;
  193. Iterator<Map<String, Object>> iterator = path.iterator();
  194. while (iterator.hasNext()) {
  195. item = iterator.next();
  196. pathmap = new HashMap<>();
  197. if (item.get("P") != null) {
  198. Path p = (Path)item.get("P");
  199. pathmap = parsePath(p);
  200. }
  201. pathlist.add(pathmap);
  202. }
  203. return pathlist;
  204. }
  205. public Map<String, Object> parsePath(Path p) {
  206. Map<String, Object> path = new HashMap<>();
  207. path.put("start", new HashMap<>());
  208. path.put("end", new HashMap<>());
  209. Map<String, String> s = (Map)path.get("start");
  210. Map<String, String> e = (Map)path.get("end");
  211. Node start = p.start();
  212. Node end = p.end();
  213. s.put("label", start.labels().iterator().next());
  214. e.put("label", end.labels().iterator().next());
  215. String relation = p.relationships().iterator().next().type();
  216. path.put("relation", new HashMap<>());
  217. ((Map)path.get("relation")).put("type", relation);
  218. for (String prop:start.keys()) {
  219. s.put(prop, start.get(prop).toString().replaceAll("\"",""));
  220. }
  221. for (String prop:end.keys()) {
  222. e.put(prop, end.get(prop).toString().replaceAll("\"",""));
  223. }
  224. return path;
  225. }
  226. }