KnowledgeServiceImpl.java 96 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180
  1. package org.diagbot.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.diagbot.entity.node.LIS;
  6. import org.diagbot.entity.node.Symptom;
  7. import org.diagbot.mapper.KnowledgeMapper;
  8. import org.diagbot.pub.Ciku;
  9. import org.diagbot.pub.Label;
  10. import org.diagbot.pub.Type;
  11. import org.diagbot.pub.jdbc.MysqlJdbc;
  12. import org.diagbot.service.KnowledgeService;
  13. import org.diagbot.vo.*;
  14. import org.diagbot.entity.node.Disease;
  15. import org.diagbot.entity.node.base.BaseNode;
  16. import org.apache.commons.collections4.IteratorUtils;
  17. import org.diagbot.repository.*;
  18. import org.diagbot.vo.domain.*;
  19. import org.neo4j.driver.v1.types.Node;
  20. import org.neo4j.driver.v1.types.Path;
  21. import org.slf4j.Logger;
  22. import org.slf4j.LoggerFactory;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.data.domain.PageRequest;
  25. import org.springframework.data.domain.Pageable;
  26. import org.springframework.data.domain.Sort;
  27. import org.springframework.stereotype.Service;
  28. import java.math.RoundingMode;
  29. import java.sql.Connection;
  30. import java.sql.ResultSet;
  31. import java.sql.SQLException;
  32. import java.sql.Statement;
  33. import java.text.NumberFormat;
  34. import java.util.*;
  35. @Service
  36. public class KnowledgeServiceImpl implements KnowledgeService {
  37. Logger logger = LoggerFactory.getLogger(KnowledgeServiceImpl.class);
  38. @Autowired
  39. private SymptomRepository symptomRepository;
  40. @Autowired
  41. private DiseaseRepository diseaseRepository;
  42. @Autowired
  43. private LISRepository lisRepository;
  44. @Autowired
  45. private BaseNodeRepository baseNodeRepository;
  46. @Autowired
  47. private RelationRepository relationRepository;
  48. @Autowired
  49. private ScaleRepository scaleRepository;
  50. @Autowired
  51. private KnowledgeMapper knowledgeMapper;
  52. private List<BaseNode> baseNodes;
  53. private Pageable pageable;
  54. private Connection conn = null;
  55. private MysqlJdbc nlpJdbc = new MysqlJdbc("root", "lantone", "jdbc:mysql://192.168.2.236:3306/med?useSSL=false&useUnicode=true&characterEncoding=UTF-8");
  56. public Connection getConn(){
  57. if(conn == null){
  58. conn = nlpJdbc.connect();
  59. }
  60. return conn;
  61. }
  62. /**
  63. * 处理症状节点相关的申请
  64. */
  65. @Override
  66. public Symptom addSymptom(Symptom symptom) {
  67. return symptomRepository.save(symptom);
  68. }
  69. @Override
  70. public Symptom findOneSymptom(long id) {
  71. return symptomRepository.findById(id).get();
  72. }
  73. @Override
  74. public List<Symptom> findSymptoms(String name) {
  75. return symptomRepository.findByNameContaining(name);
  76. }
  77. @Override
  78. public void deleteOneSymptom(long id) {
  79. symptomRepository.deleteById(id);
  80. }
  81. @Override
  82. public List<Symptom> selectAllSymptom(PageVo pageVo) {
  83. pageable = getPageable(pageVo);
  84. return IteratorUtils.toList(symptomRepository.findAll().iterator());
  85. }
  86. /**
  87. * 处理疾病节点相关的申请
  88. */
  89. @Override
  90. public Disease addDisease(Disease disease) {
  91. return diseaseRepository.save(disease);
  92. }
  93. @Override
  94. public Disease findOneDisease(long id) {
  95. return diseaseRepository.findById(id).get();
  96. }
  97. @Override
  98. public List<Disease> findDisease(String name) {
  99. return diseaseRepository.findByNameContaining(name);
  100. }
  101. @Override
  102. public void deleteOneDisease(long id) {
  103. diseaseRepository.deleteById(id);
  104. }
  105. @Override
  106. public List<Disease> selectAllDisease(PageVo pageVo) {
  107. pageable = getPageable(pageVo);
  108. return IteratorUtils.toList(diseaseRepository.findAll(pageable).iterator());
  109. }
  110. /**
  111. * 处理化验节点相关的申请
  112. */
  113. @Override
  114. public LIS addLIS(LIS lis) {
  115. return lisRepository.save(lis);
  116. }
  117. @Override
  118. public LIS findOneLIS(long id) {
  119. return lisRepository.findById(id).get();
  120. }
  121. @Override
  122. public List<LIS> findLIS(String name) {
  123. return lisRepository.findByNameContaining(name);
  124. }
  125. @Override
  126. public void deleteOneLIS(long id) {
  127. lisRepository.deleteById(id);
  128. }
  129. @Override
  130. public List<LIS> selectAllLIS(PageVo pageVo) {
  131. pageable = getPageable(pageVo);
  132. return IteratorUtils.toList(lisRepository.findAll().iterator());
  133. }
  134. @Override
  135. public List<Map<String, Object>> getRelationByNodes(RelationVo relationVo) {
  136. String s_name = relationVo.getStart_name();
  137. String s_type = relationVo.getStart_type();
  138. String e_name = relationVo.getEnd_name();
  139. String e_type = relationVo.getEnd_type();
  140. List<Map<String, Object>> list = extractPath(relationRepository.getRelationByNodes(s_name, s_type, e_name, e_type));
  141. return list;
  142. }
  143. @Override
  144. public List<Map<String, Object>> getOneLevelRelationByEndNode(RelationVo relationVo) {
  145. String e_name = relationVo.getEnd_name();
  146. String e_type = relationVo.getEnd_type();
  147. List<Map<String, Object>> list = extractPath(relationRepository.getOneLevelRelationByEndNode(e_name, e_type));
  148. return list;
  149. }
  150. @Override
  151. public Iterable<Map<String, Object>> getNodeByRelation(RelationVo relationVo) {
  152. String s_name = relationVo.getStart_name();
  153. String s_type = relationVo.getStart_type();
  154. String rel = relationVo.getRel_name();
  155. return relationRepository.getNodeByRelation(s_name, s_type, rel);
  156. }
  157. @Override
  158. public BaseNode updateNodeByName(AmendRelationVo amendRelationVo) {
  159. int id = amendRelationVo.getId();
  160. String old_name = amendRelationVo.getOld_start_name();
  161. String new_name = amendRelationVo.getNew_start_name();
  162. return baseNodeRepository.updateNodeByName(id, old_name, new_name);
  163. }
  164. @Override
  165. public List<Map<String, Object>> updateRelation(AmendRelationVo amendRelationVo) {
  166. List<Map<String, Object>> path = extractPath(knowledgeMapper.updateRelation(amendRelationVo));
  167. return path;
  168. }
  169. @Override
  170. public List<Map<String, Object>> getAllNode() {
  171. List<Map<String, Object>> ndlist = baseNodeRepository.getAllNode();
  172. return ndlist;
  173. }
  174. @Override
  175. public Map<String, Object> getHighRiskDisease(SearchData searchData) {
  176. Map<String, Object> map = new HashMap<>();
  177. String diag = searchData.getDiag();
  178. if (diag != null && diag != "") {
  179. String[] splitsDiag = searchData.getDiag().split(",|,|、");
  180. List<String> diseaseNameList = Arrays.asList(splitsDiag);
  181. List<Map<String, Object>> list = baseNodeRepository.getHighRisk(diseaseNameList);
  182. for (Map hrmap : list) {
  183. String name = hrmap.get("name").toString();
  184. String risk = hrmap.get("risk").toString();
  185. map.put(name, risk);
  186. }
  187. }
  188. return map;
  189. }
  190. /**
  191. * 推送疑诊,鉴别诊断,急诊,指标推送,不良反应,管理评估
  192. *
  193. * @param searchData
  194. * @return
  195. */
  196. @Override
  197. public ResponseData getDis(SearchData searchData) {
  198. ResponseData responseData = new ResponseData();
  199. Set<String> queZhen = new HashSet<>();
  200. Map<String, Map<String, String>> diseaseCondition = new LinkedHashMap<>();
  201. String webDiag = searchData.getDiag();
  202. String[] featureTypes = searchData.getFeatureType().split(",");
  203. List<String> featureTypeList = Arrays.asList(featureTypes);
  204. logger.info("前端传来的features :" + featureTypeList);
  205. Map<String, Map<String, String>> inputs = searchData.getGraphInputs();
  206. Integer diseaseType = searchData.getDisType();
  207. logger.info("diseaseType为 :" + diseaseType);
  208. Set<String> ss = new HashSet<>();
  209. if(inputs.size()>0){
  210. for (Map.Entry<String, Map<String, String>> input:inputs.entrySet()) {
  211. Map<String, String> value = input.getValue();
  212. String concept = value.get("concept");
  213. String[] splits = StringUtils.split(concept, ",");
  214. for (String s:splits) {
  215. ss.add(s);
  216. }
  217. }
  218. }
  219. logger.info("分词系统传来的词: " + ss);
  220. logger.info("图谱开始根据传来的分词计算诊断.....");
  221. //开始推送诊断逻辑,包括推送疑诊,急诊,鉴别诊断
  222. if (featureTypeList != null && featureTypeList.contains("2")) {
  223. //第一,二步查询输入的词所在number
  224. Set<String> fildInNumber = this.getNumber(ss);
  225. //第三步查找疑诊
  226. List<Map<String, Object>> fildDis = baseNodeRepository.getFildDis(fildInNumber);
  227. if (fildDis != null && fildDis.size() > 0) {
  228. for (Map<String, Object> disMap : fildDis) {
  229. String relationType = disMap.get("relationType").toString();
  230. String name = disMap.get("name").toString();
  231. if ("确诊".equals(relationType)) {
  232. queZhen.add(name);
  233. } else if ("拟诊".equals(relationType)) {
  234. queZhen.add(name);
  235. }
  236. }
  237. }
  238. logger.info("图谱推出的疑诊为: " + queZhen);
  239. for (String que : queZhen) {
  240. Map<String, String> titleMap = new HashMap<>();
  241. titleMap.put("确诊", "");
  242. diseaseCondition.put(que, titleMap);
  243. }
  244. //第四步查找鉴别诊断
  245. String mainDiag = null;//主诊断
  246. if (webDiag != null && !"".equals(webDiag)) {
  247. String[] webDiagSplits = webDiag.split(",");
  248. mainDiag = webDiagSplits[0];
  249. }
  250. if (mainDiag != null) {
  251. //走鉴别诊断逻辑
  252. List<String> diffDis = baseNodeRepository.getDiffDis(mainDiag);
  253. if (diffDis != null && diffDis.size() > 0) {
  254. for (String diff : diffDis) {
  255. if (queZhen.contains(diff)) {
  256. Map<String, String> stringStringMap = diseaseCondition.get(diff);
  257. stringStringMap.put("鉴别诊断", "");
  258. diseaseCondition.put(diff, stringStringMap);
  259. } else {
  260. Map<String, String> diffMap = new HashMap<>();
  261. diffMap.put("鉴别诊断", "");
  262. diseaseCondition.put(diff, diffMap);
  263. }
  264. }
  265. }
  266. }
  267. //急诊逻辑
  268. List<String> emergency = baseNodeRepository.getEmergency(diseaseCondition.keySet());
  269. if (emergency != null && emergency.size() > 0) {
  270. for (String em : emergency) {
  271. Map<String, String> stringStringMap = diseaseCondition.get(em);
  272. stringStringMap.put("急诊", "");
  273. diseaseCondition.put(em, stringStringMap);
  274. }
  275. }
  276. List<FeatureRate> featureRates = new ArrayList<>();
  277. if (diseaseCondition != null) {
  278. for (Map.Entry<String, Map<String, String>> d : diseaseCondition.entrySet()) {
  279. FeatureRate featureRate = new FeatureRate();
  280. featureRate.setFeatureName(d.getKey());
  281. featureRate.setExtraProperty("neo4j");
  282. Map<String, String> value = d.getValue();
  283. String s = JSON.toJSONString(value);
  284. featureRate.setDesc(s);
  285. // featureRate.setRate("neo4j");
  286. featureRates.add(featureRate);
  287. }
  288. }
  289. responseData.setDis(featureRates);
  290. }
  291. Set<String> que = diseaseCondition.keySet();
  292. logger.info("图谱计算出来的诊断(包含疑诊,急诊,鉴别诊断)为: " + que);
  293. //推送治疗,包含不良反应
  294. if (webDiag != null && webDiag.trim() != "" && featureTypeList.contains("6")) {
  295. logger.info("界面有诊断,并且features包含8,可以走治疗方案");
  296. //查找页面诊断里是否有不良反应(慢病的情况下)
  297. Map<String, List<String>> disUE = new HashMap<>();
  298. String[] webDiagList = webDiag.split(",|,|、|;|:|;");
  299. List<Map<String, Object>> untowardEffect = baseNodeRepository.getUntowardEffect(webDiagList);
  300. if (untowardEffect.size() > 0) {
  301. for (Map<String, Object> ue : untowardEffect) {
  302. String dis = ue.get("dis").toString();
  303. String[] ueCollect = (String[]) ue.get("ueCollect");
  304. List<String> ueList = Arrays.asList(ueCollect);
  305. disUE.put(dis, ueList);
  306. }
  307. }
  308. //根据页面输入内容推出的不良反应集合
  309. Set<String> ue = this.getUe(ss);
  310. // webDiag:界面诊断,ss:分词,diseaseType:疾病类型,que:疑诊,鉴别诊断,急诊集合
  311. Map<String, Filnlly> mulDiseaseTreat = processTreat(webDiag, ss, diseaseType, que, disUE, ue);
  312. responseData.setTreat(mulDiseaseTreat);
  313. }
  314. int age = searchData.getAge();
  315. String sex = searchData.getSex();
  316. //指标推送
  317. if (featureTypeList.contains("22")) {
  318. logger.info("图谱推送有疑诊,并且features包含22,可以走右侧推送");
  319. //根据传来的词推送指标
  320. Set<String> ind = this.getInd(ss);
  321. logger.info("图谱推出的指标为: " + ind);
  322. List<MedicalIndication> medicalIndications = this.indProcess(ind, sex, age);
  323. responseData.setMedicalIndications(medicalIndications);
  324. }
  325. List<LisDetail> lisArr = searchData.getLisArr();
  326. Set<String> lisSet = new HashSet<>();
  327. Map<String, Double> lis_Result = new HashMap<>();
  328. if (lisArr != null && lisArr.size() > 0) {
  329. for (LisDetail lis : lisArr) {
  330. String detailName = lis.getUniqueName();
  331. logger.info("公表名为 :" + detailName);
  332. Double value = lis.getValue();
  333. lis_Result.put(detailName, value);
  334. lisSet.add(detailName);
  335. }
  336. }
  337. logger.info("页面导入的所有化验项为 :" + lisSet);
  338. //推送管理评估
  339. if (featureTypeList.contains("11") && diseaseType == 1 && diseaseType != null) {
  340. logger.info("featureTypeList 包含11,走管理评估!!!");
  341. if (webDiag != null && !"".equals(webDiag)) {
  342. String[] webDiagsplits = webDiag.split(",|,|、|;|:|;");
  343. MangementEvaluation mangementEvaluation = this.pushMe(webDiagsplits, lis_Result);
  344. Map<String, JSONObject> mangementEvaluation1 = mangementEvaluation.getMangementEvaluation();
  345. responseData.setManagementEvaluation(mangementEvaluation1);
  346. }
  347. }
  348. return responseData;
  349. }
  350. /**
  351. * 获取化验和辅检,体征结果
  352. * @param searchData
  353. * @return
  354. */
  355. @Override
  356. public Map<String, List<FeatureRate>> getLisPacs(SearchData searchData) {
  357. String[] featureArray = StringUtils.split(searchData.getFeatureType(), ",");
  358. List<String> featureList = Arrays.asList(searchData.getFeatureTypes());
  359. Map<String, List<FeatureRate>> lisPacsFeature = new HashMap<>();
  360. String webDiag = searchData.getDiag();
  361. List<String> webDiagList = null;
  362. if (webDiag != null && webDiag != "") {
  363. webDiagList = Arrays.asList(webDiag.split(",|,|、"));
  364. }
  365. List<FeatureRate> bigdataDiagFeature = searchData.getPushDiags();
  366. List<String> neo4jDiagList = new LinkedList<>();//疑似诊断
  367. List<String> bigdataDiagList = new LinkedList<>();//大数据诊断
  368. if (bigdataDiagFeature.size() > 0) {
  369. for (FeatureRate fe : bigdataDiagFeature) {
  370. if ("neo4j".equals(fe.getSource()) && fe.getDesc().contains("确诊")) {
  371. neo4jDiagList.add(fe.getFeatureName());
  372. } else if (fe.getDesc() == null) {
  373. bigdataDiagList.add(fe.getFeatureName());
  374. }
  375. }
  376. }
  377. logger.info("图谱推出的诊断为: " + neo4jDiagList);
  378. logger.info("大数据推出的诊断为: " + bigdataDiagList);
  379. if (webDiagList != null) {
  380. for (String web : webDiagList) {
  381. for (int i = 0; i < bigdataDiagList.size(); i++) {
  382. if (bigdataDiagList.get(i).equals(web)) {
  383. bigdataDiagList.remove(bigdataDiagList.get(i));
  384. }
  385. }
  386. for (int i = 0; i < neo4jDiagList.size(); i++) {
  387. if (neo4jDiagList.get(i).equals(web)) {
  388. neo4jDiagList.remove(neo4jDiagList.get(i));
  389. }
  390. }
  391. }
  392. }
  393. logger.info("界面诊断为: " + webDiagList);
  394. Map<String, LinkedHashSet<String>> weblisPacs = null,webVital = null;
  395. Map<String, LinkedHashSet<String>> neo4jlisPacs = null,neo4jVital = null;
  396. Map<String, LinkedHashSet<String>> biglisPacs = null,bigVital = null;
  397. if (webDiagList != null && webDiagList.size() > 0) {
  398. weblisPacs = processLisPacs(webDiagList);
  399. webVital = processVital(webDiagList);
  400. }
  401. if (neo4jDiagList != null && neo4jDiagList.size() > 0) {
  402. neo4jlisPacs = processLisPacs(neo4jDiagList);
  403. neo4jVital = processVital(neo4jDiagList);
  404. }
  405. if (bigdataDiagList != null && bigdataDiagList.size() > 0) {
  406. biglisPacs = processLisPacs(bigdataDiagList);
  407. bigVital = processVital(bigdataDiagList);
  408. }
  409. Set<String> lis = new LinkedHashSet<>();
  410. Set<String> pacs = new LinkedHashSet<>();
  411. Set<String> vitalReultSet = new LinkedHashSet<>();
  412. Set<String> webLis = null;
  413. Set<String> webPacs = null;
  414. Set<String> neoLis = null;
  415. Set<String> neoPacs = null;
  416. Set<String> bigLis = null;
  417. Set<String> bigPacs = null;
  418. //如果界面有诊断
  419. if (weblisPacs != null && weblisPacs.values().size() > 0) {
  420. webLis = weblisPacs.get("LIS");
  421. webPacs = weblisPacs.get("PACS");
  422. logger.info("界面有诊断的情况下,界面诊断推出的lis为: " + webLis);
  423. logger.info("界面有诊断的情况下,界面诊断推出的pacs为: " + webPacs);
  424. if(webLis != null){
  425. lis.addAll(webLis);
  426. }
  427. if(webPacs != null){
  428. pacs.addAll(webPacs);
  429. }
  430. vitalReultSet.addAll(webVital.get("VITAL_RESULT"));
  431. }
  432. if(neo4jlisPacs != null){
  433. neoLis = neo4jlisPacs.get("LIS");
  434. neoPacs = neo4jlisPacs.get("PACS");
  435. if(neoLis != null){
  436. lis.addAll(neoLis);
  437. }
  438. if(neoPacs != null){
  439. pacs.addAll(neoPacs);
  440. }
  441. vitalReultSet.addAll(neo4jVital.get("VITAL_RESULT"));
  442. }
  443. if(biglisPacs != null){
  444. bigLis = biglisPacs.get("LIS");
  445. bigPacs = biglisPacs.get("PACS");
  446. if(bigLis != null){
  447. lis.addAll(bigLis);
  448. }
  449. if(bigPacs != null){
  450. pacs.addAll(bigPacs);
  451. }
  452. vitalReultSet.addAll(bigVital.get("VITAL_RESULT"));
  453. }
  454. logger.info("推出的合并lis为: " + lis);
  455. logger.info("推出的合并pacs为: " + pacs);
  456. logger.info("推出的合并体征结果为: " + vitalReultSet);
  457. ArrayList<FeatureRate> lisFeature = new ArrayList<>();
  458. ArrayList<FeatureRate> pacsFeature = new ArrayList<>();
  459. ArrayList<FeatureRate> vitalFeature = new ArrayList<>();
  460. if (lis != null && lis.size() > 0 && featureList.contains("4")) {
  461. List<String> newLis = new ArrayList<>();
  462. if(lis.size()>searchData.getLength()){
  463. for (String l:lis) {
  464. if(newLis.size()<searchData.getLength()){
  465. newLis.add(l);
  466. }
  467. }
  468. }else {
  469. newLis.addAll(lis);
  470. }
  471. for (String l : newLis) {
  472. FeatureRate featureRate = new FeatureRate();
  473. featureRate.setFeatureName(l);
  474. lisFeature.add(featureRate);
  475. }
  476. }
  477. if (pacs != null && pacs.size() > 0 && featureList.contains("5")) {
  478. List<String> newPacs = new ArrayList<>();
  479. if(pacs.size()>searchData.getLength()){
  480. for (String l:pacs) {
  481. if(newPacs.size()<searchData.getLength()){
  482. newPacs.add(l);
  483. }
  484. }
  485. }else {
  486. newPacs.addAll(pacs);
  487. }
  488. for (String p : newPacs) {
  489. FeatureRate featureRate = new FeatureRate();
  490. featureRate.setFeatureName(p);
  491. pacsFeature.add(featureRate);
  492. }
  493. }
  494. if(vitalReultSet.size() > 0){
  495. List<String> newVitalRes = new ArrayList<>();
  496. if(vitalReultSet.size()>searchData.getLength()){
  497. for (String l:vitalReultSet) {
  498. if(newVitalRes.size()<searchData.getLength()){
  499. newVitalRes.add(l);
  500. }
  501. }
  502. }else {
  503. newVitalRes.addAll(vitalReultSet);
  504. }
  505. for (String p : newVitalRes) {
  506. FeatureRate featureRate = new FeatureRate();
  507. featureRate.setFeatureName(p);
  508. vitalFeature.add(featureRate);
  509. }
  510. }
  511. lisPacsFeature.put("lisList", lisFeature);
  512. lisPacsFeature.put("pacsList", pacsFeature);
  513. lisPacsFeature.put("vitalResultList",vitalFeature);
  514. return lisPacsFeature;
  515. }
  516. //查询词所在number,及有用的condition
  517. public Set<String> getNumber(Set<String> ss) {
  518. List<String> newList = new ArrayList<>();
  519. Set<String> fildInNumber = baseNodeRepository.getFildInNumber(ss);
  520. newList.addAll(fildInNumber);
  521. //第二步查询符合的condition4
  522. while (newList.size() > 0) {
  523. List<String> fildInCondition = baseNodeRepository.getFildInCondition(newList, fildInNumber);
  524. newList.clear();
  525. if (fildInCondition != null && fildInCondition.size() > 0) {
  526. for (String condition : fildInCondition) {
  527. newList.add(condition);
  528. fildInNumber.add(condition);
  529. }
  530. }
  531. }
  532. return fildInNumber;
  533. }
  534. /**
  535. * 查询体征
  536. * @param webDiagList
  537. * @return
  538. */
  539. public Map<String, LinkedHashSet<String>> processVital(List<String> webDiagList) {
  540. Map<String, LinkedHashSet<String>> vitalMap = new HashMap<>();
  541. LinkedHashSet<String> vitalResultArray = new LinkedHashSet<>();//体征结果
  542. List<Map<String, Object>> vitalList = baseNodeRepository.getVitalList(webDiagList);
  543. if (vitalList != null && vitalList.size() > 0) {
  544. for (Map<String, Object> f : vitalList) {
  545. String name = f.get("name").toString();
  546. vitalResultArray.add(name);
  547. }
  548. }
  549. vitalMap.put("VITAL_RESULT", vitalResultArray);
  550. return vitalMap;
  551. }
  552. /**
  553. * 根据内容推出不良反应集合
  554. *
  555. * @param ss 分词
  556. * @return
  557. */
  558. public Set<String> getUe(Set<String> ss) {
  559. Set<String> number = getNumber(ss);
  560. Set<String> ueSet = baseNodeRepository.pushUntowardEffects(number);
  561. return ueSet;
  562. }
  563. /**
  564. * 根据传来的词推送指标
  565. *
  566. * @param ss
  567. * @return
  568. */
  569. public Set<String> getInd(Set<String> ss) {
  570. Set<String> number = getNumber(ss);
  571. Set<String> indSet = baseNodeRepository.pushInd(number);
  572. return indSet;
  573. }
  574. /**
  575. * 指标推送处理
  576. *
  577. * @param indSet 指标集合
  578. * @param sex 性别
  579. * @param age 年龄
  580. * @return
  581. */
  582. public List<MedicalIndication> indProcess(Set<String> indSet, String sex, Integer age) {
  583. List<MedicalIndication> medicalIndicationList = new ArrayList<>();
  584. if (indSet != null && indSet.size() > 0) {
  585. for (String s : indSet) {
  586. MedicalIndication medicalIndication = new MedicalIndication();
  587. List<MedicalIndicationDetail> medicalIndicationDetailList = new ArrayList<>();
  588. medicalIndication.setName(s);
  589. MedicalIndicationDetail medicalIndicationDetail1 = null;
  590. MedicalIndicationDetail medicalIndicationDetail2 = null;
  591. MedicalIndicationDetail medicalIndicationDetail3 = null;
  592. JSONObject gongshiJson = null;
  593. List<JSONObject> detailList = null;
  594. List<JSONObject> resultList = null;
  595. List<JSONObject> sexList = null;
  596. List<JSONObject> shiFouList = null;
  597. JSONObject shiFouJson = null;
  598. Set<String> results = new LinkedHashSet<>();
  599. List<Map<String, Object>> allSortMaps = baseNodeRepository.allSort(s);
  600. if (allSortMaps != null && allSortMaps.size() > 0) {
  601. for (Map<String, Object> asm : allSortMaps) {
  602. Integer sort1 = Integer.parseInt(asm.get("sort1").toString());
  603. String conten = asm.get("conten").toString();
  604. Object item = asm.get("item");
  605. if (item == null) {
  606. item = "null";
  607. }
  608. Object controlType = asm.get("controlType");
  609. if (controlType == null) {
  610. controlType = 20;
  611. }
  612. Object value = asm.get("value");
  613. if (value == null) {
  614. value = "null";
  615. }
  616. Object uint = asm.get("uint");
  617. if (uint == null) {
  618. uint = "null";
  619. }
  620. Object state1 = asm.get("state");
  621. if (state1 == null) {
  622. state1 = "20";
  623. }
  624. Object details = asm.get("details");
  625. if (details == null) {
  626. details = "null";
  627. }
  628. if (1 == sort1) {
  629. if (medicalIndicationDetail1 == null) {
  630. medicalIndicationDetail1 = new MedicalIndicationDetail();
  631. }
  632. medicalIndicationDetail1.setType(sort1);
  633. JSONObject liangJson = new JSONObject();
  634. liangJson.put("name", conten);
  635. medicalIndicationDetail1.setContent(liangJson);
  636. } else if (2 == sort1) {
  637. if (medicalIndicationDetail2 == null) {
  638. medicalIndicationDetail2 = new MedicalIndicationDetail();
  639. }
  640. medicalIndicationDetail2.setType(sort1);
  641. if (gongshiJson == null) {
  642. gongshiJson = new JSONObject();
  643. }
  644. gongshiJson.put("name", conten);
  645. if (detailList == null) {
  646. detailList = new ArrayList<>();
  647. }
  648. JSONObject ageJsonObject = new JSONObject();
  649. ageJsonObject.put("controlType", Integer.parseInt(controlType.toString()));
  650. ageJsonObject.put("name", item);
  651. ageJsonObject.put("value", value);
  652. ageJsonObject.put("uint", uint);
  653. if ("年龄".equals(item)) {
  654. ageJsonObject.put("value", age);
  655. }
  656. if (0 != Integer.parseInt(controlType.toString())) {
  657. ageJsonObject.put("details", details);
  658. } else {
  659. if (sexList == null) {
  660. sexList = new ArrayList<>();
  661. }
  662. List<Map<String, Object>> itemMaps = baseNodeRepository.indItemDetail(item.toString());
  663. if (itemMaps != null && itemMaps.size() > 0) {
  664. for (Map<String, Object> items : itemMaps) {
  665. String name = items.get("name").toString();
  666. int state = Integer.parseInt(items.get("state").toString());
  667. String value1 = items.get("value").toString();
  668. JSONObject manJson = new JSONObject();
  669. manJson.put("detailName", name);
  670. manJson.put("value", value1);
  671. manJson.put("state", state);
  672. if ("男".equals(name) && "M".equals(sex)) {
  673. manJson.put("state", 1);
  674. } else if ("女".equals(name) && "F".equals(sex)) {
  675. manJson.put("state", 1);
  676. }
  677. sexList.add(manJson);
  678. }
  679. }
  680. ageJsonObject.put("details", sexList);
  681. }
  682. detailList.add(ageJsonObject);
  683. gongshiJson.put("details", detailList);
  684. if (resultList == null) {
  685. resultList = new ArrayList<>();
  686. }
  687. List<Map<String, Object>> indcontent = baseNodeRepository.indcontent(conten);
  688. if (indcontent.size() > 0 && indcontent != null) {
  689. for (Map<String, Object> con : indcontent) {
  690. String name = con.get("name").toString();
  691. results.add(name);
  692. }
  693. }
  694. } else if (3 == sort1) {
  695. if (medicalIndicationDetail3 == null) {
  696. medicalIndicationDetail3 = new MedicalIndicationDetail();
  697. }
  698. medicalIndicationDetail3.setType(3);
  699. if (shiFouList == null) {
  700. shiFouList = new ArrayList<>();
  701. }
  702. if (shiFouJson == null) {
  703. shiFouJson = new JSONObject();
  704. }
  705. shiFouJson.put("name", conten.replace("\"", ""));
  706. shiFouJson.put("controlType", 0);
  707. JSONObject shiJsonObject = new JSONObject();
  708. shiJsonObject.put("detailName", item);
  709. shiJsonObject.put("state", Integer.parseInt(state1.toString()));
  710. shiFouList.add(shiJsonObject);
  711. shiFouJson.put("details", shiFouList);
  712. medicalIndicationDetail3.setContent(shiFouJson);
  713. }
  714. }
  715. for (String re : results) {
  716. JSONObject result1 = new JSONObject();
  717. result1.put("name", re);
  718. result1.put("text", "");
  719. resultList.add(result1);
  720. }
  721. gongshiJson.put("result", resultList);
  722. medicalIndicationDetail2.setContent(gongshiJson);
  723. medicalIndicationDetailList.add(medicalIndicationDetail1);
  724. medicalIndicationDetailList.add(medicalIndicationDetail2);
  725. medicalIndicationDetailList.add(medicalIndicationDetail3);
  726. medicalIndication.setDetails(medicalIndicationDetailList);
  727. medicalIndicationList.add(medicalIndication);
  728. }
  729. }
  730. } else {
  731. medicalIndicationList = null;
  732. }
  733. return medicalIndicationList;
  734. }
  735. /**
  736. * 推送管理评估
  737. *
  738. * @param webDiagsplits
  739. * @param lis_Result
  740. * @return
  741. */
  742. public MangementEvaluation pushMe(String[] webDiagsplits, Map<String, Double> lis_Result) {
  743. MangementEvaluation mangementEvaluation = new MangementEvaluation();
  744. Map<String, JSONObject> mangementMap = new HashMap<>();
  745. if (webDiagsplits != null && webDiagsplits.length > 0) {
  746. String diag = webDiagsplits[0];//慢病
  747. if ("糖尿病".equals(diag)) {
  748. Map<String, LinkedList<String>> effCollect = new LinkedHashMap<>();
  749. List<Map<String, Object>> allMaps = baseNodeRepository.meAllQuery(diag);
  750. if (allMaps != null && allMaps.size() > 0) {
  751. for (Map<String, Object> am : allMaps) {
  752. String eff = am.get("eff").toString();//血压控制情况
  753. String res = am.get("res").toString();//正常
  754. if (effCollect.keySet().contains(eff)) {
  755. if (!effCollect.get(eff).contains(res)) {
  756. LinkedList<String> strings = effCollect.get(eff);
  757. strings.add(res);
  758. effCollect.put(eff, strings);
  759. }
  760. } else {
  761. LinkedList<String> strings = new LinkedList<>();
  762. strings.add(res);
  763. effCollect.put(eff, strings);
  764. }
  765. }
  766. }
  767. //effCollect 存的:(血脂控制情况 : 正常,轻度,中度,重度)
  768. List<JSONObject> itemJson = new ArrayList<>();
  769. JSONObject curativeJson = new JSONObject();
  770. for (Map.Entry<String, LinkedList<String>> item : effCollect.entrySet()) {
  771. String key = item.getKey();//血脂控制情况
  772. LinkedList<String> value = item.getValue();//正常,轻度,中度,重度
  773. JSONObject bloodPressure = new JSONObject();
  774. bloodPressure.put("controltype", 0);
  775. bloodPressure.put("name", key);
  776. List<JSONObject> bloodPressureLevelList = new ArrayList<>();
  777. for (String res : value) {
  778. JSONObject iJson = new JSONObject();
  779. iJson.put("detailName", res);
  780. iJson.put("state", 0);
  781. bloodPressureLevelList.add(iJson);
  782. }
  783. bloodPressure.put("details", bloodPressureLevelList);
  784. if (bloodPressure.get("name").equals("血脂控制情况")) {
  785. List<JSONObject> details = (List<JSONObject>) bloodPressure.get("details");
  786. Map<String, String> idnRes = new HashMap<>();
  787. //化验计算
  788. List<Map<String, Object>> calXueMap = baseNodeRepository.culXuezhi(key);
  789. if (calXueMap != null && calXueMap.size() > 0) {
  790. for (Map<String, Object> cal : calXueMap) {
  791. String name = cal.get("name").toString();
  792. String between = cal.get("between").toString();
  793. String[] betweenSplit = between.split(",");
  794. double min = Double.parseDouble(betweenSplit[0].replace("[", ""));
  795. double max = Double.parseDouble(betweenSplit[1].replace("]", ""));
  796. String res1 = cal.get("res").toString();
  797. if (lis_Result.keySet().contains(name)) {
  798. Double aDouble = lis_Result.get(name);
  799. if (min < aDouble && aDouble <= max) {
  800. idnRes.put(res1, "血脂控制情况");
  801. } else {
  802. idnRes.put("", "血脂控制情况");
  803. }
  804. }
  805. }
  806. }
  807. Collection<String> values = idnRes.keySet();
  808. List<String> newValues = new ArrayList<>();
  809. if (values.contains("重度")) {
  810. newValues.clear();
  811. newValues.add("重度");
  812. } else if (!values.contains("重度") && values.contains("中度")) {
  813. newValues.clear();
  814. newValues.add("中度");
  815. } else if (!values.contains("重度") && !values.contains("中度") && values.contains("轻度")) {
  816. newValues.clear();
  817. newValues.add("轻度");
  818. } else if (!values.contains("重度") && !values.contains("中度") && !values.contains("轻度") && values.contains("正常")) {
  819. newValues.clear();
  820. newValues.add("正常");
  821. } else {
  822. newValues.clear();
  823. newValues.add("");
  824. }
  825. for (String s : newValues) {
  826. int i = 0;
  827. if (!"".equals(s)) {
  828. for (i = 0; i < details.size(); i++) {
  829. String detailName = (String) details.get(i).get("detailName");
  830. if (detailName.equals(s)) {
  831. details.remove(i);
  832. break;
  833. }
  834. }
  835. JSONObject k = new JSONObject();
  836. k.put("detailName", s);
  837. k.put("state", 1);
  838. details.add(i, k);
  839. }
  840. }
  841. bloodPressure.put("details", details);
  842. }
  843. itemJson.add(bloodPressure);
  844. }
  845. curativeJson.put("rows", itemJson);
  846. //分级管理
  847. JSONObject gradeJson = new JSONObject();
  848. List<JSONObject> gradItemJson = new ArrayList<>();
  849. JSONObject bigGrad = new JSONObject();
  850. bigGrad.put("name", "糖尿病控制情况");
  851. bigGrad.put("controltype", 0);
  852. List<JSONObject> gradItemJ = new ArrayList<>();
  853. String[] gradItem = {"常规管理", "强化管理"};
  854. for (String item : gradItem) {
  855. JSONObject j = new JSONObject();
  856. j.put("detailName", item);
  857. j.put("state", 0);
  858. gradItemJ.add(j);
  859. }
  860. bigGrad.put("details", gradItemJ);
  861. gradItemJson.add(bigGrad);
  862. gradeJson.put("rows", gradItemJson);
  863. mangementMap.put("疗效评估", curativeJson);
  864. mangementMap.put("糖尿病分级管理", gradeJson);
  865. mangementEvaluation.setMangementEvaluation(mangementMap);
  866. }
  867. }
  868. return mangementEvaluation;
  869. }
  870. public Map<String, LinkedHashSet<String>> processLisPacs(List<String> webDiagList) {
  871. Map<String, LinkedHashSet<String>> lisPacsMap = new HashMap<>();
  872. LinkedHashSet<String> lisArray = new LinkedHashSet<>();
  873. LinkedHashSet<String> pacsArray = new LinkedHashSet<>();
  874. List<Map<String, Object>> lisPacsList = baseNodeRepository.getLisPacsList(webDiagList);
  875. if (lisPacsList != null && lisPacsList.size() > 0) {
  876. for (Map<String, Object> f : lisPacsList) {
  877. String label = f.get("label").toString();
  878. String name = f.get("name").toString();
  879. if ("LIS".equals(label)) {
  880. lisArray.add(name);
  881. } else if ("PACS".equals(label)) {
  882. pacsArray.add(name);
  883. }
  884. }
  885. }
  886. // lisPacsMap.put("LIS", processList(lisArray));
  887. // lisPacsMap.put("PACS", processList(pacsArray));
  888. lisPacsMap.put("LIS", lisArray);
  889. lisPacsMap.put("PACS", pacsArray);
  890. return lisPacsMap;
  891. }
  892. /**
  893. * 处理治疗
  894. *
  895. * @param
  896. */
  897. public Map<String, Filnlly> processTreat(String webDisease, Set<String> inputFilds, Integer
  898. disType, Set<String> que, Map<String, List<String>> disUE, Set<String> ue) {
  899. Map<String, Filnlly> diagTreat = new HashMap<>();
  900. NumberFormat nf = NumberFormat.getPercentInstance();
  901. nf.setMinimumFractionDigits(0);//设置该百分比数字,保留2位小数;
  902. nf.setRoundingMode(RoundingMode.HALF_UP); //设置满5向上进位,即四舍五入;
  903. String[] diseaseArray = webDisease.split(",|,|、|;|:|;");
  904. List<String> diseaseList = Arrays.asList(diseaseArray);
  905. Map<String, List> diseFilds = new HashMap<>();
  906. for (int i = 0; i < diseaseList.size(); i++) {
  907. List<String> fildsList = new ArrayList<>();//其他条件数组
  908. for (String fild : inputFilds) {
  909. fildsList.add(fild);
  910. }
  911. if (que != null && que.size() > 0) {
  912. for (String yizhen : que) {
  913. fildsList.add(yizhen);
  914. }
  915. }
  916. for (String h : ue) {
  917. fildsList.add(h);
  918. }
  919. for (int j = 0; j < diseaseList.size(); j++) {
  920. if (i != j) {
  921. fildsList.add(diseaseList.get(j));
  922. }
  923. }
  924. diseFilds.put(diseaseList.get(i), fildsList);
  925. }
  926. for (Map.Entry<String, List> disFild : diseFilds.entrySet()) {
  927. //获取诊断的药类和用药(排序好的)
  928. List<Map<String, Object>> treatMedicaton = baseNodeRepository.getTreatMedicaton(disFild.getKey());
  929. Map<String, LinkedHashMap<String, String>> contentMap = new LinkedHashMap<>();
  930. if (treatMedicaton != null && treatMedicaton.size() > 0) {
  931. for (Map<String, Object> tm : treatMedicaton) {
  932. String drugs = tm.get("drugs").toString();
  933. String medication = tm.get("medication").toString();
  934. String rate = tm.get("rate").toString();
  935. if (contentMap.containsKey(drugs)) {
  936. LinkedHashMap<String, String> drugsMedicationLinkedHashMap = contentMap.get(drugs);
  937. drugsMedicationLinkedHashMap.put(medication, rate);
  938. contentMap.put(drugs, drugsMedicationLinkedHashMap);
  939. } else {
  940. LinkedHashMap<String, String> sa = new LinkedHashMap<>();
  941. sa.put(medication, rate);
  942. contentMap.put(drugs, sa);
  943. }
  944. }
  945. }
  946. //药所属类型的大小类合并
  947. Map<String, String> shortLargeMap = new HashMap<>();
  948. List<Map<String, Object>> shortLarge = baseNodeRepository.getShortLarge(disFild.getKey());
  949. if (shortLarge != null && shortLarge.size() > 0) {
  950. for (Map<String, Object> sl : shortLarge) {
  951. String aShort = sl.get("short").toString();
  952. String large = sl.get("large").toString();
  953. shortLargeMap.put(aShort, large + "(" + aShort + ")");
  954. }
  955. }
  956. //小类替换成大类
  957. Map<String, LinkedHashMap<String, String>> shortLargeMapConcat = new LinkedHashMap<>();
  958. for (Map.Entry<String, LinkedHashMap<String, String>> f : contentMap.entrySet()) {
  959. String drugs = f.getKey();
  960. if (shortLargeMap.get(drugs) != null) {
  961. shortLargeMapConcat.put(shortLargeMap.get(drugs), contentMap.get(drugs));
  962. } else {
  963. shortLargeMapConcat.put(drugs, contentMap.get(drugs));
  964. }
  965. }
  966. //处理慎用,忌用
  967. Map<String, String> medicationUseMap = new HashMap<>();//key:药名 value:禁忌(慎用)
  968. List<Map<String, Object>> shenJi = baseNodeRepository.getShenJiDrugsMedication(disFild.getKey(), disFild.getValue());
  969. if (shenJi != null && shenJi.size() > 0) {
  970. for (Map<String, Object> sj : shenJi) {
  971. String name = sj.get("name").toString();
  972. String type = sj.get("type").toString();
  973. medicationUseMap.put(name, type);//(名字,禁用/慎用)
  974. }
  975. }
  976. //大对象集合
  977. ArrayList<Drugs> drugsList = new ArrayList<Drugs>();
  978. DrugsPattern drugsPattern = new DrugsPattern();
  979. for (Map.Entry<String, LinkedHashMap<String, String>> w : shortLargeMapConcat.entrySet()) {
  980. int i = 0;
  981. int forbidden = 0;
  982. Drugs drugs = new Drugs();
  983. String drugsName = w.getKey();
  984. Map<String, String> bigSubDrugs = drugsPattern.bigSubDrugs(drugsName);
  985. drugs.setBigdrugsName(bigSubDrugs.get("big"));
  986. drugs.setSubdrugsName(bigSubDrugs.get("sub"));
  987. LinkedList<Medicition> medicitionsList = new LinkedList<>();
  988. LinkedHashMap<String, String> meditionRate = w.getValue();
  989. if ("忌用".equals(medicationUseMap.get(bigSubDrugs.get("big"))) || "忌用".equals(medicationUseMap.get(bigSubDrugs.get("sub")))) {
  990. drugs.setDrugsForbidden(2);
  991. for (Map.Entry<String, String> g : meditionRate.entrySet()) {
  992. Medicition medicition = new Medicition();
  993. String meditionName = g.getKey().trim();//药名
  994. String rate = nf.format(Double.parseDouble(g.getValue().trim()));//百分比
  995. medicition.setMedicitionName(meditionName);
  996. medicition.setRate(rate);
  997. if (i < 3) {
  998. medicition.setIsShow(1);
  999. i++;
  1000. } else {
  1001. medicition.setIsShow(0);
  1002. }
  1003. medicition.setForbidden(2);
  1004. medicitionsList.add(medicition);
  1005. }
  1006. } else if ("慎用".equals(medicationUseMap.get(bigSubDrugs.get("big"))) || "慎用".equals(medicationUseMap.get(bigSubDrugs.get("sub")))) {
  1007. drugs.setDrugsForbidden(1);
  1008. for (Map.Entry<String, String> g : meditionRate.entrySet()) {
  1009. Medicition medicition = new Medicition();
  1010. String meditionName = g.getKey().trim();//药名
  1011. String rate = nf.format(Double.parseDouble(g.getValue().trim()));//百分比
  1012. medicition.setMedicitionName(meditionName);
  1013. medicition.setRate(rate);
  1014. if (i < 3) {
  1015. medicition.setIsShow(1);
  1016. i++;
  1017. } else {
  1018. medicition.setIsShow(0);
  1019. }
  1020. medicition.setForbidden(1);
  1021. medicitionsList.add(medicition);
  1022. }
  1023. } else {
  1024. drugs.setDrugsForbidden(0);
  1025. for (Map.Entry<String, String> g : meditionRate.entrySet()) {
  1026. Medicition medicition = new Medicition();
  1027. String meditionName = g.getKey().trim();//药名
  1028. String rate = nf.format(Double.parseDouble(g.getValue().trim()));//百分比
  1029. medicition.setMedicitionName(meditionName);
  1030. medicition.setRate(rate);
  1031. if (i < 3) {
  1032. medicition.setIsShow(1);
  1033. i++;
  1034. } else {
  1035. medicition.setIsShow(0);
  1036. }
  1037. if ("忌用".equals(medicationUseMap.get(meditionName))) {
  1038. medicition.setForbidden(2);
  1039. } else if ("慎用".equals(medicationUseMap.get(meditionName))) {
  1040. medicition.setForbidden(1);
  1041. } else {
  1042. medicition.setForbidden(0);
  1043. }
  1044. medicitionsList.add(medicition);
  1045. }
  1046. }
  1047. drugs.setMedicitionsList(medicitionsList);
  1048. drugsList.add(drugs);
  1049. }
  1050. Filnlly filnlly = new Filnlly();
  1051. //走不良反应
  1052. if (disType != null && 1 == disType) {
  1053. logger.info("disType=1,可以走不良反应!!");
  1054. List<String> diseUeList = disUE.get(disFild.getKey());
  1055. if (diseUeList != null && diseUeList.size() > 0) {
  1056. List<Indicators> indicatorsList1 = new ArrayList<>();
  1057. for (String de : diseUeList) {
  1058. Indicators indicators1 = getAdverse(ue, de);
  1059. indicatorsList1.add(indicators1);
  1060. }
  1061. filnlly.setAdverseEvent(indicatorsList1);
  1062. }
  1063. }
  1064. filnlly.setTreatment(drugsList);
  1065. diagTreat.put(disFild.getKey(), filnlly);
  1066. }
  1067. return diagTreat;
  1068. }
  1069. /**
  1070. * 量表和指标
  1071. *
  1072. * @param diseaseSet 图谱推出的诊断
  1073. * @return
  1074. */
  1075. public MedicalIndication getMedicalIndication(Set<String> diseaseSet) {
  1076. MedicalIndication medicalIndication = new MedicalIndication();
  1077. if (diseaseSet.contains("肾功能不全")) {
  1078. logger.info("diseaseSet中包含肾功能不全");
  1079. //推送指标
  1080. medicalIndication.setName("肾功能不全");
  1081. List<MedicalIndicationDetail> medicalIndicationDetailList = new ArrayList<>();
  1082. //量表
  1083. MedicalIndicationDetail medicalIndicationDetail1 = new MedicalIndicationDetail();
  1084. medicalIndicationDetail1.setType(1);
  1085. JSONObject liangJson = new JSONObject();
  1086. liangJson.put("name", "密西根糖尿病周围神经病评分(MDNS)");
  1087. medicalIndicationDetail1.setContent(liangJson);
  1088. //公式
  1089. MedicalIndicationDetail medicalIndicationDetail2 = new MedicalIndicationDetail();
  1090. medicalIndicationDetail2.setType(2);
  1091. JSONObject gongshiJson = new JSONObject();
  1092. gongshiJson.put("name", "肾小球滤过率");
  1093. List<JSONObject> detailList = new ArrayList<>();
  1094. JSONObject ageJsonObject = new JSONObject();
  1095. ageJsonObject.put("controlType", 2);
  1096. ageJsonObject.put("name", "年龄");
  1097. ageJsonObject.put("value", "");
  1098. ageJsonObject.put("uint", "");
  1099. ageJsonObject.put("details", new ArrayList<>());
  1100. JSONObject indicationJsonObject = new JSONObject();
  1101. indicationJsonObject.put("controlType", 2);
  1102. indicationJsonObject.put("name", "血肌酐");
  1103. indicationJsonObject.put("value", "");
  1104. indicationJsonObject.put("uint", "mg/dL");
  1105. indicationJsonObject.put("details", new ArrayList<>());
  1106. JSONObject sexJson = new JSONObject();
  1107. sexJson.put("controlType", 1);
  1108. sexJson.put("name", "性别");
  1109. sexJson.put("value", "");
  1110. sexJson.put("uint", "");
  1111. List<JSONObject> sexList = new ArrayList<>();
  1112. JSONObject manJson = new JSONObject();
  1113. manJson.put("detailName", "男");
  1114. manJson.put("value", 1);
  1115. manJson.put("state", 0);
  1116. JSONObject womanJson = new JSONObject();
  1117. womanJson.put("detailName", "女");
  1118. womanJson.put("value", 1.018);
  1119. womanJson.put("state", 1);
  1120. sexList.add(manJson);
  1121. sexList.add(womanJson);
  1122. sexJson.put("details", sexList);
  1123. detailList.add(ageJsonObject);
  1124. detailList.add(indicationJsonObject);
  1125. detailList.add(sexJson);
  1126. gongshiJson.put("details", detailList);
  1127. JSONObject resultJson = new JSONObject();
  1128. resultJson.put("value", "");
  1129. resultJson.put("unit", "");
  1130. resultJson.put("text", "");
  1131. gongshiJson.put("result", resultJson);
  1132. medicalIndicationDetail2.setContent(gongshiJson);
  1133. //其他
  1134. MedicalIndicationDetail medicalIndicationDetail3 = new MedicalIndicationDetail();
  1135. medicalIndicationDetail3.setType(3);
  1136. JSONObject shiFouJson = new JSONObject();
  1137. shiFouJson.put("name", "是否");
  1138. shiFouJson.put("controlType", 0);
  1139. List<JSONObject> shiFouList = new ArrayList<>();
  1140. JSONObject shiJsonObject = new JSONObject();
  1141. shiJsonObject.put("detailName", "是");
  1142. shiJsonObject.put("state", 0);
  1143. JSONObject fouJsonObject = new JSONObject();
  1144. fouJsonObject.put("detailName", "否");
  1145. fouJsonObject.put("state", 1);
  1146. shiFouList.add(shiJsonObject);
  1147. shiFouList.add(fouJsonObject);
  1148. shiFouJson.put("details", shiFouList);
  1149. medicalIndicationDetail3.setContent(shiFouJson);
  1150. medicalIndicationDetailList.add(medicalIndicationDetail1);
  1151. medicalIndicationDetailList.add(medicalIndicationDetail2);
  1152. medicalIndicationDetailList.add(medicalIndicationDetail3);
  1153. medicalIndication.setDetails(medicalIndicationDetailList);
  1154. }
  1155. return medicalIndication;
  1156. }
  1157. /**
  1158. * 管理评估
  1159. *
  1160. * @return
  1161. */
  1162. public MangementEvaluation getMangementEvaluation() {
  1163. MangementEvaluation mangementEvaluation = new MangementEvaluation();
  1164. Map<String, JSONObject> mangementMap = new HashMap<>();
  1165. JSONObject curativeJson = new JSONObject();
  1166. List<JSONObject> itemJson = new ArrayList<>();
  1167. JSONObject bloodPressure = new JSONObject();
  1168. bloodPressure.put("controltype", 0);
  1169. bloodPressure.put("name", "血压控制情况");
  1170. List<JSONObject> bloodPressureLevelList = new ArrayList<>();
  1171. String[] items = {"正常", "1级", "2级", "3级"};
  1172. for (String item : items) {
  1173. JSONObject iJson = new JSONObject();
  1174. iJson.put("detailName", item);
  1175. iJson.put("state", 0);
  1176. bloodPressureLevelList.add(iJson);
  1177. }
  1178. bloodPressure.put("details", bloodPressureLevelList);
  1179. itemJson.add(bloodPressure);
  1180. JSONObject bmiControl = new JSONObject();
  1181. bmiControl.put("controltype", 0);
  1182. bmiControl.put("name", "BMI控制情况");
  1183. List<JSONObject> bmiControlLevelList = new ArrayList<>();
  1184. String[] bmiControlitems = {"体重过低", "体重达标", "肥胖前期", "肥胖"};
  1185. for (String item : bmiControlitems) {
  1186. JSONObject iJson = new JSONObject();
  1187. iJson.put("detailName", item);
  1188. iJson.put("state", 0);
  1189. bmiControlLevelList.add(iJson);
  1190. }
  1191. bmiControl.put("details", bmiControlLevelList);
  1192. itemJson.add(bmiControl);
  1193. JSONObject bloodFatControl = new JSONObject();
  1194. bloodFatControl.put("controltype", 0);
  1195. bloodFatControl.put("name", "血脂控制情况");
  1196. List<JSONObject> bloodFatControlLevelList = new ArrayList<>();
  1197. String[] bloodFatControlitems = {"高血脂"};
  1198. for (String item : bloodFatControlitems) {
  1199. JSONObject iJson = new JSONObject();
  1200. iJson.put("detailName", item);
  1201. iJson.put("state", 0);
  1202. bloodFatControlLevelList.add(iJson);
  1203. }
  1204. bloodFatControl.put("details", bmiControlLevelList);
  1205. itemJson.add(bloodFatControl);
  1206. curativeJson.put("rows", itemJson);
  1207. //分级管理
  1208. JSONObject gradeJson = new JSONObject();
  1209. List<JSONObject> gradItemJson = new ArrayList<>();
  1210. JSONObject bigGrad = new JSONObject();
  1211. bigGrad.put("name", "血压控制情况");
  1212. bigGrad.put("controltype", 0);
  1213. List<JSONObject> gradItemJ = new ArrayList<>();
  1214. String[] gradItem = {"常规管理", "强化管理"};
  1215. for (String item : gradItem) {
  1216. JSONObject j = new JSONObject();
  1217. j.put("detailName", item);
  1218. j.put("state", 0);
  1219. gradItemJ.add(j);
  1220. }
  1221. bigGrad.put("details", gradItemJ);
  1222. gradItemJson.add(bigGrad);
  1223. gradeJson.put("rows", gradItemJson);
  1224. mangementMap.put("疗效评估", curativeJson);
  1225. mangementMap.put("糖尿病分级管理", gradeJson);
  1226. mangementEvaluation.setMangementEvaluation(mangementMap);
  1227. return mangementEvaluation;
  1228. }
  1229. public Map getTest() {
  1230. Map result = new HashMap();
  1231. //疗效评估
  1232. Map liaoXiaoMap = new HashMap();
  1233. List<Map> rowList = new ArrayList<>();
  1234. Map item1 = new HashMap();
  1235. item1.put("controltype", 0);
  1236. item1.put("name", "血压控制情况");
  1237. List<Map> item1DetailList = new ArrayList<>();
  1238. Map de1 = new HashMap();
  1239. de1.put("detailName", "正常");
  1240. de1.put("state", 1);
  1241. Map de2 = new HashMap();
  1242. de2.put("detailName", "1级");
  1243. de2.put("state", 0);
  1244. Map de3 = new HashMap();
  1245. de3.put("detailName", "2级");
  1246. de3.put("state", 0);
  1247. Map de4 = new HashMap();
  1248. de4.put("detailName", "3级");
  1249. de4.put("state", 0);
  1250. item1DetailList.add(de1);
  1251. item1DetailList.add(de2);
  1252. item1DetailList.add(de3);
  1253. item1DetailList.add(de4);
  1254. item1.put("details", item1DetailList);
  1255. Map item2 = new HashMap();
  1256. item2.put("controltype", 1);
  1257. item2.put("name", "BMI控制情况");
  1258. List<Map> item2DetailList = new ArrayList<>();
  1259. Map be1 = new HashMap();
  1260. be1.put("detailName", "体重过低");
  1261. be1.put("state", 1);
  1262. Map be2 = new HashMap();
  1263. be2.put("detailName", "体重达标");
  1264. be2.put("state", 0);
  1265. Map be3 = new HashMap();
  1266. be3.put("detailName", "肥胖前期");
  1267. be3.put("state", 0);
  1268. Map be4 = new HashMap();
  1269. be4.put("detailName", "肥胖");
  1270. be4.put("state", 0);
  1271. item2DetailList.add(be1);
  1272. item2DetailList.add(be2);
  1273. item2DetailList.add(be3);
  1274. item2DetailList.add(be4);
  1275. item2.put("details", item2DetailList);
  1276. Map item3 = new HashMap();
  1277. item3.put("controltype", 0);
  1278. item3.put("name", "血脂控制情况");
  1279. List<Map> item3DetailList = new ArrayList<>();
  1280. Map xe1 = new HashMap();
  1281. xe1.put("detailName", "高血脂");
  1282. xe1.put("state", 1);
  1283. item3DetailList.add(xe1);
  1284. item3.put("details", item3DetailList);
  1285. rowList.add(item1);
  1286. rowList.add(item2);
  1287. rowList.add(item3);
  1288. liaoXiaoMap.put("rows", rowList);
  1289. //分级管理
  1290. Map fenjiMap = new HashMap();
  1291. List<Map> ferowList = new ArrayList<>();
  1292. Map feitem1 = new HashMap();
  1293. feitem1.put("controltype", 0);
  1294. feitem1.put("name", "血压控制情况");
  1295. List<Map> feDetailList = new ArrayList<>();
  1296. Map fe1 = new HashMap();
  1297. fe1.put("detailName", "常规管理");
  1298. fe1.put("state", 1);
  1299. Map fe2 = new HashMap();
  1300. fe2.put("detailName", "强化管理");
  1301. fe2.put("state", 0);
  1302. feDetailList.add(fe1);
  1303. feDetailList.add(fe2);
  1304. feitem1.put("details", feDetailList);
  1305. ferowList.add(feitem1);
  1306. fenjiMap.put("rows", ferowList);
  1307. result.put("疗效评估", liaoXiaoMap);
  1308. result.put("糖尿病分级管理", fenjiMap);
  1309. return result;
  1310. }
  1311. /**
  1312. * 不良反应
  1313. *
  1314. * @param dis
  1315. * @param name
  1316. * @return
  1317. */
  1318. public Indicators getAdverse(Set<String> dis, String name) {
  1319. List<Detail> detailList1 = new ArrayList<>();
  1320. Indicators indicators1 = new Indicators();
  1321. indicators1.setName(name);
  1322. indicators1.setControlType(2);
  1323. Detail detail1 = new Detail();
  1324. detail1.setName("否");
  1325. detail1.setValue(0);
  1326. Detail detail2 = new Detail();
  1327. detail2.setName("是");
  1328. detail2.setValue(0);
  1329. if (dis.contains(name)) {
  1330. detail2.setValue(1);
  1331. }
  1332. Detail detail3 = new Detail();
  1333. detail3.setName("轻度");
  1334. detail3.setValue(0);
  1335. Detail detail4 = new Detail();
  1336. detail4.setName("中度");
  1337. detail4.setValue(0);
  1338. Detail detail5 = new Detail();
  1339. detail5.setName("重度");
  1340. detail5.setValue(0);
  1341. Detail detail6 = new Detail();
  1342. detail6.setName("偶尔");
  1343. detail6.setValue(0);
  1344. Detail detail7 = new Detail();
  1345. detail7.setName("频繁");
  1346. detail7.setValue(0);
  1347. detailList1.add(detail1);
  1348. detailList1.add(detail2);
  1349. detailList1.add(detail3);
  1350. detailList1.add(detail4);
  1351. detailList1.add(detail5);
  1352. detailList1.add(detail6);
  1353. detailList1.add(detail7);
  1354. indicators1.setDetails(detailList1);
  1355. return indicators1;
  1356. }
  1357. /**
  1358. * 更新图谱
  1359. * @param singleDisease
  1360. * @return
  1361. * 类型(1:症状,2:体征,3:化验,4:辅检,5:鉴别诊断,6:病史,7:诱因,8:病程,9:其他,91:确诊,92:拟诊,93:警惕)
  1362. */
  1363. @Override
  1364. public RespDTO updateNeoDisease(NeoParamVO singleDisease) {
  1365. RespDTO respDTO = RespDTO.onSuc(true);;
  1366. Long disId = singleDisease.getId();
  1367. String disName = this.getDisName(disId);
  1368. if(StringUtils.isNotEmpty(disName)){
  1369. diseaseRepository.mergeDis(disName,disId,0);
  1370. }else {
  1371. respDTO = RespDTO.onError("在数据库中没有找到"+disId+"对应的疾病!!");
  1372. }
  1373. //把数据库中的所有词读进map缓存
  1374. Map<String, Map<String, String>> ciKu = this.allStandWord2Map();
  1375. //获取每个诊断依据的全部数据
  1376. List<Map<String, String>> allData = this.getAllData(disId);
  1377. //获取拟诊,确诊,警惕组合
  1378. Map<String, List<String>> allNiQueZhenCollection = this.getAllNiQueZhenCollection(disId);
  1379. this.saveNiQue2Neo(allData,allNiQueZhenCollection,disName,disId);
  1380. this.saveData2Neo4j(allData,disId,disName,ciKu);
  1381. return respDTO;
  1382. }
  1383. /**
  1384. * 把一个完整的诊断依据封装到list中,list中存的是map,一行一个map
  1385. * @param disId
  1386. * @return
  1387. */
  1388. public List<Map<String,String>> getAllData(Long disId){
  1389. List<Map<String,String>> contentList = new ArrayList<>();
  1390. conn = this.getConn();
  1391. Statement st = null;
  1392. ResultSet rs = null;
  1393. try {
  1394. String type, code ,standard,relation,result,formula,name;
  1395. String sql = "SELECT diagnose_id,dis_name,`type`,`code`,standard,relation,result,formula FROM `kl_diagnose_detail` where diagnose_id = "+disId+"";
  1396. st = conn.createStatement();
  1397. rs = st.executeQuery(sql);
  1398. while (rs.next()){
  1399. Map<String,String> content = new HashMap<>();
  1400. type = rs.getString(3);
  1401. code = rs.getString("code");
  1402. standard = rs.getString("standard");
  1403. relation = rs.getString("relation");
  1404. result = rs.getString("result");
  1405. formula = rs.getString("formula");
  1406. name = Type.getName(Integer.parseInt(type));
  1407. content.put("type",type);
  1408. content.put("typeName",name);
  1409. content.put("code",code);
  1410. content.put("standard",standard);
  1411. content.put("relation",relation);
  1412. content.put("result",result);
  1413. content.put("formula",formula);
  1414. contentList.add(content);
  1415. }
  1416. } catch (Exception e) {
  1417. e.printStackTrace();
  1418. } finally {
  1419. try {
  1420. rs.close();
  1421. st.close();
  1422. } catch (SQLException e) {
  1423. e.printStackTrace();
  1424. }
  1425. }
  1426. return contentList;
  1427. }
  1428. /**
  1429. * 获取一个诊断依据的确诊,拟诊,警惕集合
  1430. * @param disId
  1431. * @return
  1432. */
  1433. public Map<String,List<String>> getAllNiQueZhenCollection(Long disId) {
  1434. Map<String,List<String>> queNiMap = new HashMap<>();
  1435. conn = this.getConn();
  1436. Statement st = null;
  1437. ResultSet rs = null;
  1438. List<String> queList = new ArrayList<>();
  1439. List<String> niList = new ArrayList<>();
  1440. List<String> highList = new ArrayList<>();
  1441. try {
  1442. String type, formula, label,name;
  1443. String sql = "SELECT type,formula FROM `kl_diagnose_detail` where diagnose_id = "+disId+" and type in (91,92,93)";
  1444. st = conn.createStatement();
  1445. rs = st.executeQuery(sql);
  1446. while (rs.next()) {
  1447. type = rs.getString(1);
  1448. formula = rs.getString(2);
  1449. name = Type.getName(Integer.parseInt(type));
  1450. if("拟诊".equals(name)){
  1451. niList.add(formula);
  1452. }else if("确诊".equals(name)){
  1453. queList.add(formula);
  1454. }else if("警惕".equals(name)){
  1455. highList.add(formula);
  1456. }
  1457. if(queList != null){
  1458. for (String que:queList) {
  1459. if(que.contains("拟诊")){
  1460. for (String ni:niList
  1461. ) {
  1462. String newNi = que.replaceAll("拟诊", ni);
  1463. queList.add(newNi);
  1464. }
  1465. queList.remove(que);
  1466. }
  1467. }
  1468. }
  1469. queNiMap.put("拟诊",niList);
  1470. queNiMap.put("确诊",queList);
  1471. queNiMap.put("警惕",highList);
  1472. }
  1473. }catch (Exception e) {
  1474. e.printStackTrace();
  1475. } finally {
  1476. try {
  1477. rs.close();
  1478. st.close();
  1479. } catch (SQLException e) {
  1480. e.printStackTrace();
  1481. }
  1482. }
  1483. return queNiMap;
  1484. }
  1485. /**
  1486. * 加载所有词库
  1487. * @return
  1488. */
  1489. public Map<String,Map<String,String>> allStandWord2Map(){
  1490. Map<String,Map<String,String>> ciKu = new HashMap<>();
  1491. conn = this.getConn();
  1492. Statement st = null;
  1493. ResultSet rs = null;
  1494. try {
  1495. String tongName, type, isConcept,stand;
  1496. String sql = "SELECT name, type_id,is_concept,IF(is_concept=1,a.name,(select lib_name from kl_concept b where b.id = a.concept_id) ) lib_name \n" +
  1497. "from kl_library_info a where a.is_deleted = 'N'\n" +
  1498. "and type_id in (1,5,12,13,14,16,17,18,35,70)";
  1499. st = conn.createStatement();
  1500. rs = st.executeQuery(sql);
  1501. Map<String,String> detail =null;
  1502. while (rs.next()) {
  1503. tongName = rs.getString(1);
  1504. type = rs.getString(2);
  1505. isConcept = rs.getString(3);
  1506. stand = rs.getString(4);
  1507. detail = new HashMap<>();
  1508. detail.put("isConcept",isConcept);
  1509. detail.put("stand",stand);
  1510. ciKu.put(tongName+","+type,detail);
  1511. }
  1512. }catch (Exception e) {
  1513. e.printStackTrace();
  1514. } finally {
  1515. try {
  1516. rs.close();
  1517. st.close();
  1518. } catch (SQLException e) {
  1519. e.printStackTrace();
  1520. }
  1521. return ciKu;
  1522. }
  1523. }
  1524. /**
  1525. * 获取疾病名
  1526. * @param disId
  1527. * @return
  1528. */
  1529. public String getDisName(Long disId){
  1530. Statement st = null;
  1531. ResultSet rs = null;
  1532. conn = this.getConn();
  1533. String name="";
  1534. try {
  1535. String sql = "SELECT dis_name FROM `kl_diagnose_detail` where diagnose_id = "+disId+"";
  1536. st = conn.createStatement();
  1537. rs = st.executeQuery(sql);
  1538. while (rs.next()) {
  1539. name = rs.getString(1);
  1540. }
  1541. }catch (Exception e) {
  1542. e.printStackTrace();
  1543. } finally {
  1544. try {
  1545. rs.close();
  1546. st.close();
  1547. } catch (SQLException e) {
  1548. e.printStackTrace();
  1549. }
  1550. return name;
  1551. }
  1552. }
  1553. /**
  1554. * 把确诊,拟诊,警惕存入图谱
  1555. */
  1556. public void saveNiQue2Neo(List<Map<String, String>> allData,Map<String, List<String>> allNiQueZhenCollection,String disName,Long disId){
  1557. List<String> stringList =null;
  1558. String[] types = {"确诊","拟诊","警惕"};
  1559. Integer path = 1;
  1560. String[] nisplits;
  1561. for (String type:types) {
  1562. if("确诊".equals(type)){
  1563. stringList = allNiQueZhenCollection.get(type);
  1564. if(stringList != null){
  1565. for(int i =0;i<stringList.size();i++){
  1566. nisplits = stringList.get(i).split("\\+");
  1567. path = nisplits.length;
  1568. diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
  1569. diseaseRepository.mergeQueNiHigh(disName+"-"+type+"组块"+(i+1),disId);
  1570. }
  1571. }
  1572. }else if("拟诊".equals(type)){
  1573. stringList = allNiQueZhenCollection.get(type);
  1574. if(stringList != null){
  1575. for(int i =0;i<stringList.size();i++){
  1576. nisplits = stringList.get(i).split("\\+");
  1577. path = nisplits.length;
  1578. diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
  1579. diseaseRepository.mergeNiHigh(disName+"-"+type+"组块"+(i+1),disId);
  1580. this.splitConditionContent(nisplits,disName,disName+"-"+type+"组块"+(i+1),allData);
  1581. }
  1582. }
  1583. }else if("警惕".equals(type)){
  1584. stringList = allNiQueZhenCollection.get(type);
  1585. if(stringList != null){
  1586. for(int i =0;i<stringList.size();i++){
  1587. nisplits = stringList.get(i).split("\\+");
  1588. path = nisplits.length;
  1589. diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
  1590. diseaseRepository.mergeHigh(disName+"-"+type+"组块"+(i+1),disId);
  1591. this.splitConditionContent(nisplits,disName,disName+"-"+type+"组块"+(i+1),allData);
  1592. }
  1593. }
  1594. }
  1595. }
  1596. }
  1597. /**
  1598. * 处理任几
  1599. * @param nisplits
  1600. * @param disName
  1601. * @param startNode
  1602. * @param allData
  1603. */
  1604. public void splitConditionContent(String[] nisplits,String disName,String startNode,List<Map<String, String>> allData){
  1605. Integer path = 1;
  1606. String rel = "";
  1607. for (String ni:nisplits) {
  1608. if(ni.contains("/")){
  1609. if(ni.contains("任一")){
  1610. path = 1;
  1611. rel = "任一";
  1612. }else if(ni.contains("任二")){
  1613. path = 2;
  1614. rel = "任二";
  1615. }else if(ni.contains("任三")){
  1616. path = 3;
  1617. rel = "任三";
  1618. }else if(ni.contains("任四")){
  1619. path = 4;
  1620. rel = "任四";
  1621. }else if(ni.contains("任五")){
  1622. path = 5;
  1623. rel = "任五";
  1624. }else {
  1625. path = 1;
  1626. rel = "任一";
  1627. }
  1628. diseaseRepository.mergeRenCondition(disName+ni,path,rel);
  1629. diseaseRepository.mergeRenCondition(disName+ni,startNode);
  1630. //获取这个任几集合的数字集合
  1631. List<String> numList = this.getNumList(ni);
  1632. if(numList != null && numList.size()>0){
  1633. for (String num:numList
  1634. ) {
  1635. this.processDetailNum(disName,num,disName+ni,allData);
  1636. }
  1637. }
  1638. }else {
  1639. this.processDetailNum(disName,ni,disName+ni,allData);
  1640. }
  1641. }
  1642. }
  1643. /**
  1644. * 获取任几集合的code列表
  1645. * @return
  1646. */
  1647. public List<String> getNumList(String renCondition){
  1648. List<String> numList = new ArrayList<>();
  1649. String[] numSplits = renCondition.split("/");
  1650. if(numSplits.length>0){
  1651. for (int i=0;i<numSplits.length;i++){
  1652. if(i == 0){
  1653. numList.add(numSplits[i].replaceAll("\\(",""));
  1654. }else if(i == numSplits.length-1){
  1655. String numSplit = numSplits[i];
  1656. int i1 = numSplit.indexOf(")");
  1657. System.out.println(numSplit+"\t"+i1);
  1658. numList.add(numSplits[i].substring(0,numSplits[i].indexOf(")")));
  1659. }else {
  1660. numList.add(numSplits[i]);
  1661. }
  1662. }
  1663. }
  1664. return numList;
  1665. }
  1666. public void processDetailNum(String disName,String num,String renCondition,List<Map<String, String>> allData){
  1667. String[] types = {"化验","辅检","排除条件"};
  1668. for (Map<String, String> row:allData) {
  1669. String code = row.get("code");//编码
  1670. String type = row.get("type");//类型
  1671. String typeName = row.get("typeName");//类型对应的中文名
  1672. String relation = row.get("relation");//关联词
  1673. String result = row.get("result");//结果
  1674. if(num.equals(code)){
  1675. if(Arrays.asList(types).indexOf(typeName) <0){
  1676. diseaseRepository.mergeNUMCondition(disName+code);
  1677. diseaseRepository.mergeNUMCondition(disName+code,renCondition);
  1678. }else if("化验".equals(typeName) && !"".equals(result)){
  1679. diseaseRepository.mergeNUMCondition(disName+code);
  1680. diseaseRepository.mergeNUMCondition(disName+code,renCondition);
  1681. }else if("辅检".equals(typeName) && !"".equals(relation)){
  1682. diseaseRepository.mergeNUMCondition(disName+code);
  1683. diseaseRepository.mergeNUMCondition(disName+code,renCondition);
  1684. }
  1685. }
  1686. }
  1687. }
  1688. /**
  1689. * 保存完整的诊断依据入知识图谱
  1690. * @param allData
  1691. * @param disId
  1692. * @param disName
  1693. */
  1694. public void saveData2Neo4j(List<Map<String, String>> allData,Long disId,String disName,Map<String, Map<String, String>> ciKu){
  1695. for (Map<String,String> row:allData) {
  1696. String code = row.get("code");//编码
  1697. String type = row.get("type");//类型
  1698. String typeName = row.get("typeName");//类型对应的中文名
  1699. String standard = row.get("standard");//标准词
  1700. String relation = row.get("relation");//关联词
  1701. String result = row.get("result");//结果
  1702. if(StringUtils.isNotEmpty(type)){
  1703. String[] split =null;
  1704. String[] lisResultSplit =null;
  1705. String[] pacsResultSplit =null;
  1706. String standWord = null;String lisResult = null,pacsResult=null;
  1707. if(!"3".equals(type) && !"4".equals(type) && !"5".equals(type)){
  1708. //添加词语之前,要找标准词
  1709. //添加standard
  1710. switch (type){
  1711. case "1": //症状
  1712. standWord = searchStandWord(standard, type, ciKu);
  1713. if(StringUtils.isNotEmpty(standWord)){
  1714. diseaseRepository.mergeStandardSymptom(standWord);
  1715. diseaseRepository.mergeRelationStandard(disId,standWord);
  1716. diseaseRepository.mergeRelationStandardshuyu(disName+code,standWord);
  1717. }
  1718. if(StringUtils.isNotEmpty(relation)){
  1719. split = relation.split("、");
  1720. if(split!=null && split.length>0){
  1721. for (String ci:split) {
  1722. if(StringUtils.isNotEmpty(ci)){
  1723. //找标准词
  1724. standWord = searchStandWord(ci,type,ciKu);
  1725. if(StringUtils.isNotEmpty(standWord)){
  1726. diseaseRepository.mergeStandardSymptom(standWord);
  1727. diseaseRepository.mergeRelationStandardshuyu(disName+code,standWord);
  1728. }
  1729. }
  1730. }
  1731. }
  1732. }
  1733. break;
  1734. case "2"://体征结果
  1735. standWord = searchStandWord(standard,type,ciKu);
  1736. if(StringUtils.isNotEmpty(standWord)){
  1737. diseaseRepository.mergeStandardVital(standWord);
  1738. diseaseRepository.mergeRelationStandardVital(disId,standWord);
  1739. diseaseRepository.mergeRelationStandardVitalshuyu(disName+code,standWord);
  1740. }
  1741. if(StringUtils.isNotEmpty(relation)){
  1742. split = relation.split("、");
  1743. if(split!=null && split.length>0){
  1744. for (String ci:split) {
  1745. if(StringUtils.isNotEmpty(ci)){
  1746. //找标准词
  1747. standWord = searchStandWord(ci,type,ciKu);
  1748. if(StringUtils.isNotEmpty(standWord)){
  1749. diseaseRepository.mergeStandardVital(standWord);
  1750. diseaseRepository.mergeRelationStandardVitalshuyu(disName+code,standWord);
  1751. }
  1752. }
  1753. }
  1754. }
  1755. }
  1756. break;
  1757. case "6"://病史
  1758. standWord = searchStandWord(standard,type,ciKu);
  1759. if(StringUtils.isNotEmpty(standWord)){
  1760. diseaseRepository.mergeStandardHistory(standWord);
  1761. diseaseRepository.mergeRelationStandardHistory(disId,standWord);
  1762. diseaseRepository.mergeRelationStandardHistoryshuyu(disName+code,standWord);
  1763. }
  1764. if(StringUtils.isNotEmpty(relation)){
  1765. split = relation.split("、");
  1766. if(split!=null && split.length>0){
  1767. for (String ci:split) {
  1768. if(StringUtils.isNotEmpty(ci)){
  1769. //找标准词
  1770. standWord = searchStandWord(ci,type,ciKu);
  1771. if(StringUtils.isNotEmpty(standWord)){
  1772. diseaseRepository.mergeStandardHistory(standWord);
  1773. diseaseRepository.mergeRelationStandardHistoryshuyu(disName+code,standWord);
  1774. }
  1775. }
  1776. }
  1777. }
  1778. }
  1779. break;
  1780. case "7"://诱因
  1781. standWord = searchStandWord(standard,type,ciKu);
  1782. if(StringUtils.isNotEmpty(standWord)){
  1783. diseaseRepository.mergeStandardCause(standWord);
  1784. diseaseRepository.mergeRelationStandardCause(disId,standWord);
  1785. diseaseRepository.mergeRelationStandardCauseshuyu(disName+code,standWord);
  1786. }
  1787. if(StringUtils.isNotEmpty(relation)){
  1788. split = relation.split("、");
  1789. if(split!=null && split.length>0){
  1790. for (String ci:split) {
  1791. if(StringUtils.isNotEmpty(ci)){
  1792. //找标准词
  1793. standWord = searchStandWord(ci,type,ciKu);
  1794. if(StringUtils.isNotEmpty(standWord)){
  1795. diseaseRepository.mergeStandardCause(standWord);
  1796. diseaseRepository.mergeRelationStandardCauseshuyu(disName+code,standWord);
  1797. }
  1798. }
  1799. }
  1800. }
  1801. }
  1802. break;
  1803. case "8"://病程
  1804. standWord = searchStandWord(standard,type,ciKu);
  1805. if(StringUtils.isNotEmpty(standWord)){
  1806. diseaseRepository.mergeStandardPrognosis(standWord);
  1807. diseaseRepository.mergeRelationStandardPrognosis(disId,standWord);
  1808. diseaseRepository.mergeRelationStandardPrognosisshuyu(disName+code,standWord);
  1809. }
  1810. if(StringUtils.isNotEmpty(relation)){
  1811. split = relation.split("、");
  1812. if(split!=null && split.length>0){
  1813. for (String ci:split) {
  1814. if(StringUtils.isNotEmpty(ci)){
  1815. //找标准词
  1816. standWord = searchStandWord(ci,type,ciKu);
  1817. if(StringUtils.isNotEmpty(standWord)){
  1818. diseaseRepository.mergeStandardPrognosis(standWord);
  1819. diseaseRepository.mergeRelationStandardPrognosisshuyu(disName+code,standWord);
  1820. }
  1821. }
  1822. }
  1823. }
  1824. }
  1825. break;
  1826. case "9"://其他
  1827. standWord = searchStandWord(standard,type,ciKu);
  1828. if(StringUtils.isNotEmpty(standWord)){
  1829. diseaseRepository.mergeStandardOther(standard);
  1830. diseaseRepository.mergeRelationStandardOther(disId,standard);
  1831. diseaseRepository.mergeRelationStandardOthershuyu(disName+code,standard);
  1832. }
  1833. if(StringUtils.isNotEmpty(relation)){
  1834. split = relation.split("、");
  1835. if(split!=null && split.length>0){
  1836. for (String ci:split) {
  1837. if(StringUtils.isNotEmpty(ci)){
  1838. //找标准词
  1839. standWord = searchStandWord(ci,type,ciKu);
  1840. if(StringUtils.isNotEmpty(standWord)){
  1841. diseaseRepository.mergeStandardOther(standWord);
  1842. diseaseRepository.mergeRelationStandardOthershuyu(disName+code,standWord);
  1843. }
  1844. }
  1845. }
  1846. }
  1847. }
  1848. break;
  1849. }
  1850. }else if("5".equals(type)){ //鉴别诊断
  1851. //找标准词
  1852. diseaseRepository.mergeDifferentDis(standard);
  1853. diseaseRepository.mergeRelationDifferentDis(disId,standard);
  1854. if(StringUtils.isNotEmpty(relation)){
  1855. split = relation.split("、");
  1856. if(split !=null && split.length>0){
  1857. for (String dis:split) {
  1858. if(StringUtils.isNotEmpty(dis)){
  1859. //找标准词
  1860. diseaseRepository.mergeDifferentDis(dis);
  1861. diseaseRepository.mergeRelationDifferentDis(disId,dis);
  1862. }
  1863. }
  1864. }
  1865. }
  1866. } else if("3".equals(type)){ //处理化验
  1867. String lis = "";
  1868. //查找化验大项的标准词
  1869. standWord = searchStandWord(standard,type,ciKu);
  1870. if(StringUtils.isNotEmpty(standWord)){
  1871. if(StringUtils.isNotEmpty(relation) && standard.equals(relation)){
  1872. lis = standWord;
  1873. }else if(StringUtils.isNotEmpty(standard) && StringUtils.isEmpty(relation)){
  1874. lis = standWord;
  1875. }else if(StringUtils.isNotEmpty(standard)&& StringUtils.isNotEmpty(relation)&&!standard.equals(relation)){
  1876. type = "subLis";
  1877. if(StringUtils.isNotEmpty(searchStandWord(relation,type,ciKu))){
  1878. //查找化验小项的标准词
  1879. lis = standWord+"--"+searchStandWord(relation,type,ciKu);
  1880. }
  1881. }
  1882. }
  1883. //创建公表名
  1884. diseaseRepository.mergePublicLIS(lis);
  1885. //疾病推荐化验公表名
  1886. diseaseRepository.mergeRelationLIS(disId,lis);
  1887. //处理化验结果
  1888. if(StringUtils.isNotEmpty(result)){
  1889. lisResultSplit = result.split("、");
  1890. if(lisResultSplit != null && lisResultSplit.length>0){
  1891. //化验结果找标准词
  1892. for (String lisRs:lisResultSplit) {
  1893. if(StringUtils.isNotEmpty(lisRs)){
  1894. lisResult = searchStandWord(lisRs,"resultLis",ciKu);
  1895. if(StringUtils.isNotEmpty(lisResult)){
  1896. //创建化验结果节点
  1897. diseaseRepository.mergeLISRESULT(lisResult);
  1898. //公表名和化验结果创建关系
  1899. diseaseRepository.mergeRelationPublicLIS(lis,lisResult);
  1900. //化验结果和对应的codeCondition创建关系
  1901. diseaseRepository.mergeRelationCondiLisRes(disName+code,lisResult);
  1902. }
  1903. }
  1904. }
  1905. }
  1906. }
  1907. }else if("4".equals(type)){ //辅检
  1908. //查找辅检的标准词
  1909. standWord = searchStandWord(standard,type,ciKu);
  1910. if(StringUtils.isNotEmpty(standWord)){
  1911. //创建辅检标准词的节点
  1912. diseaseRepository.mergePacs(standWord);
  1913. //疾病推荐辅检
  1914. diseaseRepository.mergeRelationDis2Pacs(disId,standWord);
  1915. }
  1916. if(StringUtils.isNotEmpty(relation)){
  1917. pacsResultSplit = relation.split("、");
  1918. if(pacsResultSplit != null && pacsResultSplit.length>0){
  1919. for (String pacs:pacsResultSplit) {
  1920. //查找辅检结果的标准词
  1921. if(StringUtils.isNotEmpty(pacs)){
  1922. pacsResult = searchStandWord(pacs,"resultPacs",ciKu);
  1923. if(StringUtils.isNotEmpty(pacsResult)){
  1924. diseaseRepository.mergePacsResult(pacsResult);
  1925. //创建辅检和辅检结果关系
  1926. diseaseRepository.mergeRelationPacsResult(standWord,pacsResult);
  1927. //创建辅检结果和对应的pacsCondition的关系
  1928. diseaseRepository.mergeRelationCondiPacsRes(disName+code,pacsResult);
  1929. }
  1930. }
  1931. }
  1932. }
  1933. }
  1934. }
  1935. }
  1936. }
  1937. }
  1938. /**
  1939. * 查找标准词
  1940. * @param type
  1941. * @return
  1942. */
  1943. public String searchStandWord(String word,String type,Map<String, Map<String, String>> ciKu){
  1944. String stand = null;
  1945. Map<String, String> detaiMap =null;
  1946. String label = Ciku.getLabel(type);
  1947. String[] labelSplits = label.split(",");
  1948. if(labelSplits.length == 1){
  1949. detaiMap = ciKu.get(word + "," + label);
  1950. if(detaiMap != null){
  1951. stand = detaiMap.get("stand");
  1952. }
  1953. }else if(labelSplits.length == 2){
  1954. detaiMap = ciKu.get(word + "," + labelSplits[0]);
  1955. if(detaiMap == null){
  1956. detaiMap = ciKu.get(word + "," + labelSplits[1]);
  1957. }
  1958. if(detaiMap != null){
  1959. stand = detaiMap.get("stand");
  1960. }
  1961. }
  1962. return stand;
  1963. }
  1964. /**
  1965. * 在图谱中删除诊断依据
  1966. * @param singleDisease
  1967. * @return
  1968. */
  1969. @Override
  1970. public RespDTO deleteNeoDisease(NeoParamVO singleDisease) {
  1971. Long disId = singleDisease.getId();
  1972. RespDTO respDTO = null;
  1973. if(disId != null){
  1974. diseaseRepository.deleteRelation1(disId);
  1975. diseaseRepository.deleteRelation2(disId);
  1976. diseaseRepository.deleteRelation3(disId);
  1977. diseaseRepository.deleteRelation4(disId);
  1978. diseaseRepository.deleteRelation5(disId);
  1979. diseaseRepository.deleteRelation6(disId);
  1980. diseaseRepository.deleteRelation7(disId);
  1981. diseaseRepository.deleteRelation8(disId);
  1982. diseaseRepository.deleteRelation9(disId);
  1983. respDTO = RespDTO.onSuc(true);
  1984. }else {
  1985. respDTO = RespDTO.onError(disId +" 删除失败!!!");
  1986. }
  1987. return respDTO;
  1988. }
  1989. @Override
  1990. public List<Map<String, Object>> getRecommendItem(QueryVo queryVo) {
  1991. List<Map<String, Object>> list = relationRepository.getRecommendItem(queryVo.getDiseaselist());
  1992. return list;
  1993. }
  1994. @Override
  1995. public Map<String, List<Map<String, Object>>> getScale(QueryVo queryVo) {
  1996. Map<String, List<Map<String, Object>>> map = new HashMap<>();
  1997. for (String name : queryVo.getScalelist()) {
  1998. List<Map<String, Object>> list = scaleRepository.getScale(name);
  1999. map.put(name, list);
  2000. }
  2001. return map;
  2002. }
  2003. public Pageable getPageable(PageVo pageVo) {
  2004. if (pageVo.getSize() > 0) {
  2005. if (pageVo.getSort_key() != null && pageVo.getSort_direct() != null) {
  2006. if (pageVo.getSort_direct().toLowerCase().equals("asc")) {
  2007. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize(),
  2008. Sort.Direction.ASC, pageVo.getSort_key().trim());
  2009. } else if (pageVo.getSort_direct().toLowerCase().equals("desc")) {
  2010. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize(),
  2011. Sort.Direction.DESC, pageVo.getSort_key().trim());
  2012. } else {
  2013. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize());
  2014. }
  2015. } else {
  2016. pageable = PageRequest.of(pageVo.getCurrent(), pageVo.getSize());
  2017. }
  2018. } else {
  2019. pageable = PageRequest.of(0, 100);
  2020. }
  2021. return pageable;
  2022. }
  2023. public List<Map<String, Object>> extractPath(Iterable<Map<String, Object>> path) {
  2024. Map<String, Object> item = new HashMap<>();
  2025. List<Map<String, Object>> pathlist = new ArrayList<>();
  2026. Map<String, Object> pathmap;
  2027. Iterator<Map<String, Object>> iterator = path.iterator();
  2028. while (iterator.hasNext()) {
  2029. item = iterator.next();
  2030. pathmap = new HashMap<>();
  2031. if (item.get("P") != null) {
  2032. Path p = (Path) item.get("P");
  2033. pathmap = parsePath(p);
  2034. }
  2035. pathlist.add(pathmap);
  2036. }
  2037. return pathlist;
  2038. }
  2039. public Map<String, Object> parsePath(Path p) {
  2040. Map<String, Object> path = new HashMap<>();
  2041. path.put("start", new HashMap<>());
  2042. path.put("end", new HashMap<>());
  2043. Map<String, String> s = (Map) path.get("start");
  2044. Map<String, String> e = (Map) path.get("end");
  2045. Node start = p.start();
  2046. Node end = p.end();
  2047. s.put("label", start.labels().iterator().next());
  2048. e.put("label", end.labels().iterator().next());
  2049. String relation = p.relationships().iterator().next().type();
  2050. path.put("relation", new HashMap<>());
  2051. ((Map) path.get("relation")).put("type", relation);
  2052. for (String prop : start.keys()) {
  2053. s.put(prop, start.get(prop).toString().replaceAll("\"", ""));
  2054. }
  2055. for (String prop : end.keys()) {
  2056. e.put(prop, end.get(prop).toString().replaceAll("\"", ""));
  2057. }
  2058. return path;
  2059. }
  2060. /**
  2061. * 根据出现次数排序,去重
  2062. *
  2063. * @param list
  2064. * @return
  2065. */
  2066. public Set<String> processList(List<String> list) {
  2067. Set<String> resultSet = new LinkedHashSet<>();
  2068. Map<String, Integer> featuerInt = new HashMap<String, Integer>();
  2069. for (String d : list) {
  2070. if (featuerInt.containsKey(d)) {
  2071. featuerInt.put(d, featuerInt.get(d) + 1);
  2072. } else {
  2073. featuerInt.put(d, 1);
  2074. }
  2075. }
  2076. List<Map.Entry<String, Integer>> reslist = new ArrayList<Map.Entry<String, Integer>>(featuerInt.entrySet());
  2077. Collections.sort(reslist, new Comparator<Map.Entry<String, Integer>>() {
  2078. @Override
  2079. public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
  2080. return o2.getValue().compareTo(o1.getValue());
  2081. }
  2082. });
  2083. for (Map.Entry<String, Integer> f : reslist
  2084. ) {
  2085. //排好序的set
  2086. resultSet.add(f.getKey());
  2087. }
  2088. return resultSet;
  2089. }
  2090. }