DiagnoseFacade.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.diagbot.client.NeoServiceClient;
  6. import com.diagbot.dto.ConceptBaseDTO;
  7. import com.diagbot.dto.DiagnoseDetailSaveDTO;
  8. import com.diagbot.dto.DiagnosePageDTO;
  9. import com.diagbot.dto.LibraryForDiagnoseDTO;
  10. import com.diagbot.dto.RespDTO;
  11. import com.diagbot.dto.VerifyDataDTO;
  12. import com.diagbot.entity.CommonParam;
  13. import com.diagbot.entity.Diagnose;
  14. import com.diagbot.entity.DiagnoseDetail;
  15. import com.diagbot.entity.DiagnoseDetailSave;
  16. import com.diagbot.entity.DiagnoseQuestion;
  17. import com.diagbot.entity.wrapper.DiagnoseWrapper;
  18. import com.diagbot.enums.DiagnoseFeatureTypeEnum;
  19. import com.diagbot.enums.DiagnoseFieldEnum;
  20. import com.diagbot.enums.DiagnoseTypeEnum;
  21. import com.diagbot.enums.HasQuestionEnum;
  22. import com.diagbot.enums.InsertOrUpdateEnum;
  23. import com.diagbot.enums.IsDeleteEnum;
  24. import com.diagbot.enums.LexiconTypeEnum;
  25. import com.diagbot.exception.CommonErrorCode;
  26. import com.diagbot.exception.CommonException;
  27. import com.diagbot.service.DiagnoseDetailService;
  28. import com.diagbot.service.DiagnoseQuestionService;
  29. import com.diagbot.service.DiagnoseService;
  30. import com.diagbot.service.impl.DiagnoseServiceImpl;
  31. import com.diagbot.util.BeanUtil;
  32. import com.diagbot.util.DateUtil;
  33. import com.diagbot.util.DiagnoseTypeConvertUtil;
  34. import com.diagbot.util.EntityUtil;
  35. import com.diagbot.util.ListUtil;
  36. import com.diagbot.util.RespDTOUtil;
  37. import com.diagbot.util.StringUtil;
  38. import com.diagbot.util.VerifyUtil;
  39. import com.diagbot.vo.DeleteDiagnoseVO;
  40. import com.diagbot.vo.DiagnosePageVO;
  41. import com.diagbot.vo.DiseaseIndexVO;
  42. import com.diagbot.vo.GetDiagnoseDetailVO;
  43. import com.diagbot.vo.NeoParamVO;
  44. import com.diagbot.vo.UpdateDiagnoseVO;
  45. import org.springframework.beans.factory.annotation.Autowired;
  46. import org.springframework.beans.factory.annotation.Qualifier;
  47. import org.springframework.stereotype.Component;
  48. import java.util.ArrayList;
  49. import java.util.Arrays;
  50. import java.util.Date;
  51. import java.util.List;
  52. import java.util.Map;
  53. import java.util.stream.Collectors;
  54. @Component
  55. public class DiagnoseFacade extends DiagnoseServiceImpl {
  56. public static boolean verifyFlag = true; // true:执行完毕,false:正在执行
  57. @Autowired
  58. ConceptFacade conceptFacade;
  59. @Autowired
  60. @Qualifier("diagnoseServiceImpl")
  61. DiagnoseService diagnoseService;
  62. @Autowired
  63. @Qualifier("diagnoseDetailServiceImpl")
  64. DiagnoseDetailService diagnoseDetailService;
  65. @Autowired
  66. @Qualifier("diagnoseQuestionServiceImpl")
  67. DiagnoseQuestionService diagnoseQuestionService;
  68. @Autowired
  69. DiagnoseDetailFacade diagnoseDetailFacade;
  70. @Autowired
  71. LibraryInfoFacade libraryInfoFacade;
  72. @Autowired
  73. NeoServiceClient neoServiceClient;
  74. /**
  75. * 诊断依据分页
  76. *
  77. * @param diagnosePageVO
  78. * @return
  79. */
  80. public IPage<DiagnosePageDTO> getListFac(DiagnosePageVO diagnosePageVO) {
  81. IPage<DiagnosePageDTO> res = this.getList(diagnosePageVO);
  82. if (res.getTotal() <= 0) {
  83. return res;
  84. }
  85. return res;
  86. }
  87. /**
  88. * 诊断依据删除
  89. *
  90. * @param deleteDiagnoseVO
  91. * @return
  92. */
  93. public void delete(DeleteDiagnoseVO deleteDiagnoseVO) {
  94. if (!(IsDeleteEnum.N.getKey().equals(deleteDiagnoseVO.getIsDeleted())
  95. || IsDeleteEnum.Y.getKey().equals(deleteDiagnoseVO.getIsDeleted()))) {
  96. throw new CommonException(CommonErrorCode.STATUS_IS_ERROR, "状态值错误【Y】或【N】");
  97. }
  98. // 删除图谱数据
  99. NeoParamVO neoParamVO = new NeoParamVO();
  100. neoParamVO.setId(deleteDiagnoseVO.getId());
  101. neoServiceClient.deleteNeo(neoParamVO);
  102. RespDTO<Boolean> respDTO = neoServiceClient.deleteNeo(neoParamVO);
  103. RespDTOUtil.respNGDeal(respDTO, "删除图谱数据失败【远程调用】");
  104. Date now = DateUtil.now();
  105. this.update(new Diagnose(), new UpdateWrapper<Diagnose>()
  106. .eq("id", deleteDiagnoseVO.getId())
  107. .set("gmt_modified", now)
  108. .set("modifier", deleteDiagnoseVO.getModifier())
  109. .set("is_deleted", deleteDiagnoseVO.getIsDeleted())
  110. .set("neo_update", now)
  111. .set("remark", deleteDiagnoseVO.getRemark()));
  112. // 删除明细(逻辑删除)
  113. diagnoseDetailFacade.update(new DiagnoseDetail(), new UpdateWrapper<DiagnoseDetail>()
  114. .eq("diagnose_id", deleteDiagnoseVO.getId())
  115. .set("gmt_modified", now)
  116. .set("modifier", deleteDiagnoseVO.getModifier())
  117. .set("is_deleted", deleteDiagnoseVO.getIsDeleted()));
  118. // 删除问题词列表(物理删除)
  119. diagnoseQuestionService.remove(new QueryWrapper<DiagnoseQuestion>()
  120. .eq("diagnose_id", deleteDiagnoseVO.getId()));
  121. }
  122. /**
  123. * 诊断检索,过滤已添加的诊断
  124. *
  125. * @param diseaseIndexVO
  126. * @return
  127. */
  128. public List<ConceptBaseDTO> indexFac(DiseaseIndexVO diseaseIndexVO) {
  129. // 设置量表类型
  130. diseaseIndexVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
  131. return this.index(diseaseIndexVO);
  132. }
  133. /**
  134. * 诊断依据获取详情
  135. *
  136. * @param getDiagnoseDetailVO
  137. * @return
  138. */
  139. public DiagnoseDetailSaveDTO getDetail(GetDiagnoseDetailVO getDiagnoseDetailVO) {
  140. DiagnoseDetailSaveDTO res = new DiagnoseDetailSaveDTO();
  141. List<DiagnoseDetail> detailList = diagnoseDetailFacade.list(new QueryWrapper<DiagnoseDetail>()
  142. .eq("diagnose_id", getDiagnoseDetailVO.getId())
  143. .eq("is_deleted", IsDeleteEnum.N.getKey())
  144. .orderByAsc("order_no")
  145. );
  146. for (DiagnoseDetail detail : detailList) {
  147. if (DiagnoseTypeEnum.Confirmed.getKey() == detail.getType() ||
  148. DiagnoseTypeEnum.Examination.getKey() == detail.getType() ||
  149. DiagnoseTypeEnum.Vigilant.getKey() == detail.getType()
  150. ) {
  151. res.getDisformula().add(detail);
  152. } else {
  153. res.getDisFeature().add(detail);
  154. }
  155. }
  156. return res;
  157. }
  158. /**
  159. * 诊断依据校验数据,新增或更新主表信息,覆盖明细表和问题词表
  160. *
  161. * @param diagnoseWrapper
  162. */
  163. public VerifyDataDTO verifyData(DiagnoseWrapper diagnoseWrapper) {
  164. VerifyDataDTO verifyDataDTO = new VerifyDataDTO();
  165. CommonParam param = initCommonParam();
  166. param.setPerson(diagnoseWrapper.getModifier());
  167. // 更新主表业务(同时删除明细表和问题词表)
  168. Long id = insertOrUpdateDiagnose(diagnoseWrapper, param);
  169. diagnoseWrapper.setId(id);
  170. // 加载词库数据
  171. List<LibraryForDiagnoseDTO> libraryForDiagnoseDTOS = libraryInfoFacade.getLibraryForDiagnose();
  172. // 明细数据
  173. List<DiagnoseDetail> diagnoseDetailList = new ArrayList<>();
  174. List<DiagnoseDetail> disFeature = new ArrayList<>(); // 诊断特征
  175. List<DiagnoseDetail> disformula = new ArrayList<>(); // 诊断公式
  176. // 问题词数据
  177. List<DiagnoseQuestion> diagnoseQuestionList = new ArrayList<>();
  178. // 处理诊断特征业务(校验编码|标准词|关联词|结果)
  179. doDisFuture(diagnoseWrapper, param, libraryForDiagnoseDTOS, disFeature, diagnoseQuestionList);
  180. // 处理诊断公式业务(校验公式)
  181. doDisFormula(diagnoseWrapper, param, disformula, diagnoseQuestionList);
  182. diagnoseDetailList.addAll(disFeature);
  183. diagnoseDetailList.addAll(disformula);
  184. // 保存明细
  185. diagnoseDetailService.saveBatch(diagnoseDetailList);
  186. // 保存问题词
  187. if (ListUtil.isNotEmpty(diagnoseQuestionList)) {
  188. // 新增问题词数据
  189. diagnoseQuestionService.saveBatch(diagnoseQuestionList);
  190. }
  191. // 更新主表状态
  192. this.update(new UpdateWrapper<Diagnose>()
  193. .set("has_question", param.getFlag())
  194. .eq("id", diagnoseWrapper.getId())
  195. );
  196. verifyDataDTO.setHasQuestion(param.getFlag());
  197. verifyDataDTO.setDisFeature(disFeature);
  198. verifyDataDTO.setDisformula(disformula);
  199. return verifyDataDTO;
  200. }
  201. /**
  202. * 诊断依据校验全部数据(不用修改操作人和时间)
  203. *
  204. */
  205. public void verifyAllData() {
  206. if (!verifyFlag) {
  207. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "其他人正在执行此操作,请稍后再试!");
  208. }
  209. try {
  210. verifyFlag = false;
  211. CommonParam param = initCommonParam();
  212. // 获取所有主表信息
  213. List<Diagnose> diagnoseListWithDB = this.list(new QueryWrapper<Diagnose>()
  214. .eq("is_deleted", IsDeleteEnum.N.getKey())
  215. );
  216. // 获取所有明细信息
  217. List<DiagnoseDetail> diagnoseDetailWithDB = diagnoseDetailFacade.list(new QueryWrapper<DiagnoseDetail>()
  218. .eq("is_deleted", IsDeleteEnum.N.getKey())
  219. );
  220. Map<String, List<DiagnoseDetail>> map = EntityUtil.makeEntityListMap(diagnoseDetailWithDB, "disName");
  221. // 明细数据
  222. List<DiagnoseDetail> diagnoseDetailList = new ArrayList<>();
  223. // 问题词数据
  224. List<DiagnoseQuestion> diagnoseQuestionList = new ArrayList<>();
  225. // 加载词库数据
  226. List<LibraryForDiagnoseDTO> libraryForDiagnoseDTOS = libraryInfoFacade.getLibraryForDiagnose();
  227. Boolean flag = true;
  228. List<Integer> typeList = new ArrayList<>();
  229. // 校验明细数据
  230. for (String key : map.keySet()) {
  231. List<DiagnoseDetail> detail = map.get(key);
  232. int j = 0;
  233. if (ListUtil.isNotEmpty(detail)) {
  234. // 判断诊断名称是否在词库中
  235. flag = verifyExist(libraryForDiagnoseDTOS, detail.get(0).getDisName(), Arrays.asList(LexiconTypeEnum.DIAGNOSIS.getKey()));
  236. if (!flag) {
  237. DiagnoseQuestion diagnoseQuestion1 = createDiagnoseQuestion(detail.get(0).getId(), detail.get(0).getDisName(), DiagnoseFeatureTypeEnum.Dis.getKey(),
  238. detail.get(0).getDisName(), DiagnoseFieldEnum.disName.getKey(), initCommonParam(), ++j);
  239. diagnoseQuestionList.add(diagnoseQuestion1);
  240. }
  241. for (DiagnoseDetail bean : detail) {
  242. if (DiagnoseTypeEnum.Confirmed.getKey() == bean.getType() || (DiagnoseTypeEnum.Examination.getKey() == bean.getType() || (DiagnoseTypeEnum.Vigilant.getKey() == bean.getType()))) {
  243. // 不需要校验公式
  244. } else {
  245. // 校验编码
  246. if (StringUtil.isNotEmpty(bean.getCode())) {
  247. flag = VerifyUtil.verifyCode(String.valueOf(bean.getType()), bean.getCode());
  248. if (!flag) {
  249. bean.setVerifyCode(bean.getCode());
  250. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(bean.getDiagnoseId(), bean.getDisName(), bean.getType(),
  251. bean.getCode(), DiagnoseFieldEnum.code.getKey(), param, ++j);
  252. diagnoseQuestionList.add(diagnoseQuestion);
  253. } else {
  254. bean.setVerifyCode(""); // 将原值清空
  255. }
  256. }
  257. // 校验标准词
  258. if (StringUtil.isNotEmpty(bean.getStandard())) {
  259. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.standard.getKey());
  260. flag = verifyExist(libraryForDiagnoseDTOS, bean.getStandard(), typeList);
  261. if (!flag) {
  262. bean.setVerifyStandard(String.valueOf(bean.getStandard()));
  263. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(bean.getDiagnoseId(), bean.getDisName(), bean.getType(),
  264. bean.getStandard(), DiagnoseFieldEnum.standard.getKey(), param, ++j);
  265. diagnoseQuestionList.add(diagnoseQuestion);
  266. } else {
  267. bean.setVerifyStandard(""); // 将原值清空
  268. }
  269. }
  270. // 校验关联词
  271. if (StringUtil.isNotEmpty(bean.getRelation())) {
  272. String[] arr = bean.getRelation().split("、");
  273. StringBuffer sb = new StringBuffer();
  274. for (String s : arr) {
  275. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.relation.getKey());
  276. flag = verifyExist(libraryForDiagnoseDTOS, s.trim(), typeList);
  277. if (!flag) {
  278. sb.append(s).append("、");
  279. bean.setVerifyRelation(bean.getRelation());
  280. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(bean.getDiagnoseId(), bean.getDisName(), bean.getType(),
  281. s.trim(), DiagnoseFieldEnum.relation.getKey(), param, ++j);
  282. diagnoseQuestionList.add(diagnoseQuestion);
  283. }
  284. }
  285. String errWord = sb.toString();
  286. if (StringUtil.isNotEmpty(errWord)) {
  287. bean.setVerifyRelation(errWord.substring(0, errWord.length() - 1));
  288. } else {
  289. bean.setVerifyRelation(""); // 将原值清空
  290. }
  291. }
  292. // 校验结果
  293. if (StringUtil.isNotEmpty(bean.getResult())) {
  294. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.result.getKey());
  295. flag = verifyExist(libraryForDiagnoseDTOS, bean.getResult(), typeList);
  296. if (!flag) {
  297. bean.setVerifyResult(bean.getResult());
  298. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(bean.getDiagnoseId(), bean.getDisName(), bean.getType(),
  299. bean.getStandard(), DiagnoseFieldEnum.standard.getKey(), param, ++j);
  300. diagnoseQuestionList.add(diagnoseQuestion);
  301. } else {
  302. bean.setVerifyResult(""); // 将原值清空
  303. }
  304. }
  305. }
  306. diagnoseDetailList.add(bean);
  307. }
  308. }
  309. }
  310. // 更新明细
  311. diagnoseDetailService.saveOrUpdateBatch(diagnoseDetailList);
  312. // 删除全部的问题词数据
  313. diagnoseQuestionService.remove(new QueryWrapper<DiagnoseQuestion>());
  314. // 新增问题词
  315. if (ListUtil.isNotEmpty(diagnoseQuestionList)) {
  316. // 新增问题词数据
  317. diagnoseQuestionService.saveBatch(diagnoseQuestionList);
  318. }
  319. List<String> disNameList = diagnoseQuestionList.stream().map(row -> row.getDisName()).distinct().collect(Collectors.toList());
  320. // 修改问题词表的状态
  321. for (Diagnose diagnose : diagnoseListWithDB) {
  322. if (disNameList.contains(diagnose.getDisName())) {
  323. diagnose.setHasQuestion(String.valueOf(HasQuestionEnum.HAS_QUESTION.getKey()));
  324. } else {
  325. diagnose.setHasQuestion(String.valueOf(HasQuestionEnum.NO_QUESTION.getKey()));
  326. }
  327. }
  328. // 更新主表信息
  329. diagnoseService.saveOrUpdateBatch(diagnoseListWithDB);
  330. } catch (Exception e) {
  331. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, e.getMessage());
  332. } finally {
  333. verifyFlag = true;
  334. }
  335. }
  336. /**
  337. * 处理诊断特征业务(校验诊断名称|编码|标准词|关联词|结果)
  338. *
  339. * @param diagnoseWrapper
  340. * @param param
  341. * @return
  342. */
  343. public void doDisFuture(DiagnoseWrapper diagnoseWrapper, CommonParam param, List<LibraryForDiagnoseDTO> libraryForDiagnoseDTOS, List<DiagnoseDetail> diagnoseDetailList, List<DiagnoseQuestion> diagnoseQuestionList) {
  344. int i = param.getI();
  345. int j = param.getJ();
  346. // 判断诊断名称是否在词库中
  347. boolean flag = true;
  348. flag = verifyExist(libraryForDiagnoseDTOS, diagnoseWrapper.getDisName(), Arrays.asList(LexiconTypeEnum.DIAGNOSIS.getKey()));
  349. if (!flag) {
  350. DiagnoseQuestion diagnoseQuestion1 = createDiagnoseQuestion(diagnoseWrapper.getId(), diagnoseWrapper.getDisName(), DiagnoseFeatureTypeEnum.Dis.getKey(),
  351. diagnoseWrapper.getDisName(), DiagnoseFieldEnum.disName.getKey(), initCommonParam(), ++j);
  352. diagnoseQuestionList.add(diagnoseQuestion1);
  353. }
  354. // 遍历诊断特征
  355. for (DiagnoseDetailSave bean : diagnoseWrapper.getDisFeature()) {
  356. DiagnoseDetail diagnoseDetail = new DiagnoseDetail();
  357. BeanUtil.copyProperties(bean, diagnoseDetail);
  358. diagnoseDetail.setDiagnoseId(diagnoseWrapper.getId());
  359. diagnoseDetail.setCreator(param.getPerson());
  360. diagnoseDetail.setGmtCreate(param.getNow());
  361. diagnoseDetail.setModifier(param.getPerson());
  362. diagnoseDetail.setGmtModified(param.getNow());
  363. diagnoseDetail.setDisName(diagnoseWrapper.getDisName());
  364. diagnoseDetail.setOrderNo(++i);
  365. List<Integer> typeList = new ArrayList<>();
  366. // 校验编码
  367. if (StringUtil.isNotEmpty(bean.getCode())) {
  368. flag = VerifyUtil.verifyCode(String.valueOf(bean.getType()), bean.getCode());
  369. if (!flag) {
  370. diagnoseDetail.setVerifyCode(bean.getCode());
  371. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(diagnoseWrapper.getId(), diagnoseWrapper.getDisName(), bean.getType(),
  372. bean.getCode(), DiagnoseFieldEnum.code.getKey(), param, ++j);
  373. diagnoseQuestionList.add(diagnoseQuestion);
  374. }
  375. }
  376. // 校验标准词
  377. if (StringUtil.isNotEmpty(bean.getStandard())) {
  378. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.standard.getKey());
  379. flag = verifyExist(libraryForDiagnoseDTOS, bean.getStandard(), typeList);
  380. if (!flag) {
  381. diagnoseDetail.setVerifyStandard(bean.getStandard());
  382. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(diagnoseWrapper.getId(), diagnoseWrapper.getDisName(), bean.getType(),
  383. bean.getStandard(), DiagnoseFieldEnum.standard.getKey(), param, ++j);
  384. diagnoseQuestionList.add(diagnoseQuestion);
  385. }
  386. }
  387. // 校验关联词
  388. if (StringUtil.isNotEmpty(bean.getRelation())) {
  389. String[] arr = bean.getRelation().split("、");
  390. StringBuffer sb = new StringBuffer();
  391. for (String s : arr) {
  392. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.relation.getKey());
  393. flag = verifyExist(libraryForDiagnoseDTOS, s.trim(), typeList);
  394. if (!flag) {
  395. sb.append(s).append("、");
  396. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(diagnoseWrapper.getId(), diagnoseWrapper.getDisName(), bean.getType(),
  397. s.trim(), DiagnoseFieldEnum.relation.getKey(), param, ++j);
  398. diagnoseQuestionList.add(diagnoseQuestion);
  399. }
  400. }
  401. String errWord = sb.toString();
  402. if (StringUtil.isNotEmpty(errWord)) {
  403. diagnoseDetail.setVerifyRelation(errWord.substring(0, errWord.length()-1));
  404. }
  405. }
  406. // 校验结果
  407. if (StringUtil.isNotEmpty(bean.getResult())) {
  408. typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.result.getKey());
  409. flag = verifyExist(libraryForDiagnoseDTOS, bean.getResult(), typeList);
  410. if (!flag) {
  411. diagnoseDetail.setVerifyResult(bean.getResult());
  412. DiagnoseQuestion diagnoseQuestion = createDiagnoseQuestion(diagnoseWrapper.getId(), diagnoseWrapper.getDisName(), bean.getType(),
  413. bean.getStandard(), DiagnoseFieldEnum.standard.getKey(), param, ++j);
  414. diagnoseQuestionList.add(diagnoseQuestion);
  415. }
  416. }
  417. diagnoseDetailList.add(diagnoseDetail);
  418. }
  419. param.setI(i);
  420. param.setJ(j);
  421. if (ListUtil.isNotEmpty(diagnoseQuestionList)) {
  422. param.setFlag(HasQuestionEnum.HAS_QUESTION.getKey());
  423. }
  424. }
  425. /**
  426. * 处理诊断公式业务(校验公式)
  427. *
  428. * @param diagnoseWrapper
  429. * @param param
  430. * @return
  431. */
  432. public void doDisFormula(DiagnoseWrapper diagnoseWrapper, CommonParam param, List<DiagnoseDetail> diagnoseDetailList, List<DiagnoseQuestion> diagnoseQuestionList) {
  433. List<String> codeList = diagnoseWrapper.getDisFeature().stream().map(row -> row.getCode()).distinct().collect(Collectors.toList());
  434. int i = param.getI();
  435. int j = param.getJ();
  436. // 遍历诊断公式
  437. for (DiagnoseDetailSave bean : diagnoseWrapper.getDisformula()) {
  438. DiagnoseDetail diagnoseDetail = new DiagnoseDetail();
  439. BeanUtil.copyProperties(bean, diagnoseDetail);
  440. diagnoseDetail.setDiagnoseId(diagnoseWrapper.getId());
  441. diagnoseDetail.setCreator(param.getPerson());
  442. diagnoseDetail.setGmtCreate(param.getNow());
  443. diagnoseDetail.setModifier(param.getPerson());
  444. diagnoseDetail.setGmtModified(param.getNow());
  445. diagnoseDetail.setDisName(diagnoseWrapper.getDisName());
  446. diagnoseDetail.setOrderNo(++i);
  447. // 校验公式
  448. String errMsg = VerifyUtil.verifyFormula(codeList, bean.getFormula());
  449. if (StringUtil.isNotEmpty(errMsg)) {
  450. diagnoseDetail.setVerifyFormula(errMsg);
  451. param.setFlag(HasQuestionEnum.HAS_QUESTION.getKey());
  452. } else {
  453. diagnoseDetail.setVerifyFormula("");
  454. }
  455. diagnoseDetailList.add(diagnoseDetail);
  456. }
  457. param.setI(i);
  458. param.setJ(j);
  459. }
  460. /**
  461. * 更新主表业务(同时删除明细表和问题词表)
  462. *
  463. * @param diagnoseWrapper
  464. * @param param
  465. * @return
  466. */
  467. public Long insertOrUpdateDiagnose(DiagnoseWrapper diagnoseWrapper, CommonParam param) {
  468. Diagnose diagnose = new Diagnose();
  469. BeanUtil.copyProperties(diagnoseWrapper, diagnose);
  470. if (diagnoseWrapper.getId() == null) { //新增
  471. diagnose.setCreator(param.getPerson());
  472. diagnose.setGmtCreate(param.getNow());
  473. } else { // 修改
  474. // 明细删除
  475. diagnoseDetailService.remove(new QueryWrapper<DiagnoseDetail>()
  476. .eq("diagnose_id", diagnoseWrapper.getId())
  477. );
  478. // 删除问题词
  479. diagnoseQuestionService.remove(new QueryWrapper<DiagnoseQuestion>()
  480. .eq("diagnose_id", diagnoseWrapper.getId())
  481. );
  482. param.setInsertOrUpdate(InsertOrUpdateEnum.Update.getKey());
  483. }
  484. diagnose.setGmtModified(param.getNow());
  485. this.saveOrUpdate(diagnose);
  486. return diagnose.getId();
  487. }
  488. /**
  489. * 更新图谱(先校验,再更新)
  490. *
  491. * @param updateDiagnoseVO
  492. * @return
  493. */
  494. public void updateNeo(UpdateDiagnoseVO updateDiagnoseVO) {
  495. // VerifyDataDTO verifyDataDTO = verifyData(diagnoseWrapper);
  496. // if (HasQuestionEnum.HAS_QUESTION.getKey() == verifyDataDTO.getHasQuestion()) {
  497. // throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "有问题词存在或公式错误,不能更新图谱");
  498. // }
  499. // 更新图谱对接接口
  500. NeoParamVO neoParamVO = new NeoParamVO();
  501. neoParamVO.setId(updateDiagnoseVO.getId());
  502. RespDTO<Boolean> respDTO = neoServiceClient.updateNeo(neoParamVO);
  503. RespDTOUtil.respNGDeal(respDTO, "更新图谱数据失败【远程调用】");
  504. // 更新时间
  505. this.update(new UpdateWrapper<Diagnose>()
  506. .eq("id", updateDiagnoseVO.getId())
  507. .set("modifier", updateDiagnoseVO.getModifier())
  508. .set("neo_update", new Date())
  509. );
  510. }
  511. /**
  512. * 初始化参数
  513. *
  514. * @return
  515. */
  516. public CommonParam initCommonParam() {
  517. CommonParam param = new CommonParam();
  518. param.setNow(DateUtil.now());
  519. param.setInsertOrUpdate(InsertOrUpdateEnum.Insert.getKey());
  520. return param;
  521. }
  522. /**
  523. * 校验词库中是否存在
  524. *
  525. * @param library 词库数据
  526. * @param name 界面输入
  527. * @param type 转换类型
  528. * @return 校验结果
  529. */
  530. public boolean verifyExist(List<LibraryForDiagnoseDTO> library, String name, List<Integer> type) {
  531. for(Integer integer : type) {
  532. LibraryForDiagnoseDTO libraryForDiagnoseDTO = new LibraryForDiagnoseDTO();
  533. libraryForDiagnoseDTO.setName(name);
  534. libraryForDiagnoseDTO.setTypeId(integer);
  535. if (library.contains(libraryForDiagnoseDTO)) {
  536. return true;
  537. }
  538. }
  539. return false;
  540. }
  541. /**
  542. * 生成问题词
  543. *
  544. * @param disName
  545. * @param type
  546. * @param questionName
  547. * @param commonParam
  548. * @return
  549. */
  550. public DiagnoseQuestion createDiagnoseQuestion(Long diagnoseId, String disName, Integer type, String questionName, Integer questionType, CommonParam commonParam, Integer orderNo) {
  551. DiagnoseQuestion dq = new DiagnoseQuestion();
  552. dq.setCreator(commonParam.getPerson());
  553. dq.setGmtCreate(commonParam.getNow());
  554. dq.setModifier(commonParam.getPerson());
  555. dq.setGmtModified(commonParam.getNow());
  556. dq.setDisName(disName);
  557. dq.setDiagnoseId(diagnoseId);
  558. dq.setType(type);
  559. dq.setQuestionName(questionName);
  560. dq.setQuestionType(questionType);
  561. dq.setOrderNo(orderNo);
  562. return dq;
  563. }
  564. }