KnowledgeServiceImpl.java 102 KB

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