|
@@ -0,0 +1,370 @@
|
|
|
+package com.diagbot.facade;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.diagbot.dto.*;
|
|
|
+import com.diagbot.entity.*;
|
|
|
+import com.diagbot.enums.IsDeleteEnum;
|
|
|
+import com.diagbot.enums.LexiconEnum;
|
|
|
+import com.diagbot.enums.StatusEnum;
|
|
|
+import com.diagbot.exception.CommonErrorCode;
|
|
|
+import com.diagbot.exception.CommonException;
|
|
|
+import com.diagbot.service.KlCaseDetailService;
|
|
|
+import com.diagbot.service.KlConceptDetailService;
|
|
|
+import com.diagbot.service.KlConceptService;
|
|
|
+import com.diagbot.service.KlDiseaseService;
|
|
|
+import com.diagbot.service.impl.KlClassicCaseServiceImpl;
|
|
|
+import com.diagbot.service.impl.KlDiseaseServiceImpl;
|
|
|
+import com.diagbot.util.*;
|
|
|
+import com.diagbot.vo.*;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Description:
|
|
|
+ * @author: gaodm
|
|
|
+ * @time: 2021/1/26 13:07
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class KlClassicCaseFacade extends KlClassicCaseServiceImpl {
|
|
|
+ @Autowired
|
|
|
+ private KlConceptFacade klConceptFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlRelationFacade klRelationFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlConceptDetailFacade klConceptDetailFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlConceptScaleFacade klConceptScaleFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlDictionaryInfoFacade klDictionaryInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlScaleFacade klScaleFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlClassicCaseFacade klClassicCaseFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlCaseDetailFacade klCaseDetailFacade;
|
|
|
+ @Autowired
|
|
|
+ private KlClassicCaseInfoFacade klClassicCaseInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("klConceptDetailServiceImpl")
|
|
|
+ private KlConceptDetailService klConceptDetailService;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("klCaseDetailServiceImpl")
|
|
|
+ private KlCaseDetailService klCaseDetailService;
|
|
|
+ @Autowired
|
|
|
+ private DictionaryFacade dictionaryFacade;
|
|
|
+ @Autowired
|
|
|
+ private MedRetrievalFacade medRetrievalFacade;
|
|
|
+ @Autowired
|
|
|
+ KlRegulationBaseFacade klRegulationBaseFacade;
|
|
|
+ KlConceptService klConceptService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 经典病例分页查询
|
|
|
+ *
|
|
|
+ * @param klClassicCasePageVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public IPage<KlClassicCaseDTO> getClassicCase(KlClassicCasePageVO klClassicCasePageVO) {
|
|
|
+ Integer type = convertType(klClassicCasePageVO.getType(), 1);
|
|
|
+ klClassicCasePageVO.setType(type);
|
|
|
+
|
|
|
+ List<DictionaryInfoDTO> dicTypeName = dictionaryFacade.getListByGroupType(13);
|
|
|
+ Map<String, String> dicTypeNameMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(dicTypeName, "val", "name");
|
|
|
+
|
|
|
+ IPage<KlClassicCaseDTO> page = super.getClassicCase(klClassicCasePageVO);
|
|
|
+ List<KlClassicCaseDTO> records = page.getRecords();
|
|
|
+ List<Long> conceptIds = page.getRecords()
|
|
|
+ .stream()
|
|
|
+ .map(KlClassicCaseDTO::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (ListUtil.isNotEmpty(conceptIds)) {
|
|
|
+ QueryWrapper<KlCaseDetail> qw = new QueryWrapper<>();
|
|
|
+ qw.in("concept_id", conceptIds)
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .orderByAsc("concept_id")
|
|
|
+ .orderByAsc("order_no");
|
|
|
+ Map<Long, List<KlCaseDetail>> detailMap = klCaseDetailFacade.list(qw)
|
|
|
+ .stream().collect(Collectors.groupingBy(KlCaseDetail::getConceptId));
|
|
|
+
|
|
|
+ records.forEach(record -> {
|
|
|
+ String typeName = LexiconEnum.getName(record.getType());
|
|
|
+ record.setTypeName(dicTypeNameMap.get(typeName));
|
|
|
+ Integer retType = convertType(record.getType(), 2);
|
|
|
+ record.setType(retType);
|
|
|
+ if (null != detailMap
|
|
|
+ && detailMap.containsKey(record.getId())
|
|
|
+ && ListUtil.isNotEmpty(detailMap.get(record.getId()))) {
|
|
|
+ record.setTitle(detailMap.get(record.getId())
|
|
|
+ .stream()
|
|
|
+ .map(KlCaseDetail::getTitle)
|
|
|
+ .collect(Collectors.joining("、")));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ page.setRecords(records);
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 启用禁用
|
|
|
+ *
|
|
|
+ * @param changeStatusVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean changeCaseStatus(ChangeStatusVO changeStatusVO) {
|
|
|
+ //String userId = SysUserUtils.getCurrentPrincipleID();
|
|
|
+ if (changeStatusVO.getUserId() == null) {
|
|
|
+ changeStatusVO.setUserId(0L);
|
|
|
+ }
|
|
|
+ Date now = DateUtil.now();
|
|
|
+ //更新主表
|
|
|
+ this.update(new UpdateWrapper<KlClassicCase>()
|
|
|
+ .eq("concept_id", changeStatusVO.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .set("gmt_modified", now)
|
|
|
+ .set("modifier", changeStatusVO.getUserId())
|
|
|
+ .set("status", changeStatusVO.getStatus()));
|
|
|
+ //更新明细表
|
|
|
+ klCaseDetailService.update(new UpdateWrapper<KlCaseDetail>()
|
|
|
+ .eq("concept_id", changeStatusVO.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .set("gmt_modified", now)
|
|
|
+ .set("modifier", changeStatusVO.getUserId()));
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据经典病例id获取病例信息
|
|
|
+ *
|
|
|
+ * @param idVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public KlClassicCaseDTO getCaseById(IdVO idVO) {
|
|
|
+ KlClassicCaseDTO klClassicCaseDTO = new KlClassicCaseDTO();
|
|
|
+
|
|
|
+ List<DictionaryInfoDTO> dicTypeName = dictionaryFacade.getListByGroupType(13);
|
|
|
+ Map<String, String> dicTypeNameMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(dicTypeName, "val", "name");
|
|
|
+
|
|
|
+ KlConcept concept = klConceptFacade.getById(idVO.getId());
|
|
|
+ if (concept == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ KlClassicCase classicCase = this.getOne(new QueryWrapper<KlClassicCase>()
|
|
|
+ .eq("concept_id", idVO.getId()), false);
|
|
|
+
|
|
|
+ if (classicCase == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<KlCaseDetail> details = klCaseDetailFacade.list(new QueryWrapper<KlCaseDetail>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", idVO.getId())
|
|
|
+ .orderByAsc("order_no"));
|
|
|
+
|
|
|
+ klClassicCaseDTO.setId(concept.getId());
|
|
|
+ klClassicCaseDTO.setName(concept.getLibName());
|
|
|
+ klClassicCaseDTO.setType(convertType(concept.getLibType(), 2));
|
|
|
+ klClassicCaseDTO.setTypeName(dicTypeNameMap.get(LexiconEnum.getName(concept.getLibType())));
|
|
|
+
|
|
|
+ klClassicCaseDTO.setStatus(classicCase.getStatus());
|
|
|
+ klClassicCaseDTO.setGmtModified(classicCase.getGmtModified());
|
|
|
+ klClassicCaseDTO.setModifier(classicCase.getModifier());
|
|
|
+
|
|
|
+ klClassicCaseDTO.setTitle(ListUtil.isNotEmpty(details)
|
|
|
+ ? details.stream().map(i -> i.getTitle()).collect(Collectors.joining("、"))
|
|
|
+ : "");
|
|
|
+ klClassicCaseDTO.setDetails(ListUtil.isNotEmpty(details)
|
|
|
+ ? BeanUtil.listCopyTo(details, KlConceptDetailDTO.class)
|
|
|
+ : new ArrayList<>());
|
|
|
+
|
|
|
+ //获取量表结构
|
|
|
+ if (concept.getLibType().equals(LexiconEnum.Scale.getKey())) {
|
|
|
+ KlScaleByIdVO klScaleByIdVO = new KlScaleByIdVO();
|
|
|
+ klScaleByIdVO.setId(classicCase.getId());
|
|
|
+ List<KlScaleByIdDTO> scaleList = klScaleFacade.getKlScaleById(klScaleByIdVO);
|
|
|
+ if (ListUtil.isNotEmpty(scaleList)) {
|
|
|
+ klClassicCaseDTO.setScale(scaleList.get(0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return klClassicCaseDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存记录(新增or修改)
|
|
|
+ *
|
|
|
+ * @param klClassicCaseVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean saveOrUpdateCase(KlClassicCaseVO klClassicCaseVO) {
|
|
|
+ if (klClassicCaseVO.getUserId() == null) {
|
|
|
+ klClassicCaseVO.setUserId(0L);
|
|
|
+ }
|
|
|
+ Date now = DateUtil.now();
|
|
|
+
|
|
|
+ Integer type = convertType(klClassicCaseVO.getType(), 1);
|
|
|
+ klClassicCaseVO.setType(type);
|
|
|
+
|
|
|
+ KlConcept concept = new KlConcept();
|
|
|
+ if (klClassicCaseVO.getId() != null) {
|
|
|
+ concept = klConceptFacade.getById(klClassicCaseVO.getId());
|
|
|
+ } else {
|
|
|
+ concept = klConceptFacade.getOne(new QueryWrapper<KlConcept>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("lib_name", klClassicCaseVO.getName())
|
|
|
+ .eq("lib_type", klClassicCaseVO.getType()), false);
|
|
|
+ }
|
|
|
+ if (concept == null) {
|
|
|
+ throw new CommonException(CommonErrorCode.NOT_EXISTS, "标准术语不存在");
|
|
|
+ }
|
|
|
+ if (!concept.getLibName().equals(klClassicCaseVO.getName())) {
|
|
|
+ throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "标准术语名称不允许修改");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long conceptId = concept.getId();
|
|
|
+ KlClassicCase classicCase = this.getOne(new QueryWrapper<KlClassicCase>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", concept.getId()), false);
|
|
|
+
|
|
|
+ if (classicCase == null) {
|
|
|
+ classicCase = new KlClassicCase();
|
|
|
+ classicCase.setId(null);
|
|
|
+ classicCase.setConceptId(concept.getId());
|
|
|
+ classicCase.setStatus(StatusEnum.Enable.getKey());
|
|
|
+ classicCase.setCreator(klClassicCaseVO.getUserId().toString());
|
|
|
+ classicCase.setGmtCreate(now);
|
|
|
+ }
|
|
|
+ classicCase.setModifier(klClassicCaseVO.getUserId().toString());
|
|
|
+ classicCase.setGmtModified(now);
|
|
|
+
|
|
|
+ List<KlCaseDetail> details = Lists.newLinkedList();
|
|
|
+ if (ListUtil.isNotEmpty(klClassicCaseVO.getDetails())) {
|
|
|
+ details = BeanUtil.listCopyTo(klClassicCaseVO.getDetails(), KlCaseDetail.class);
|
|
|
+ }
|
|
|
+ details.forEach(detail -> {
|
|
|
+ detail.setConceptId(conceptId);
|
|
|
+ detail.setCreator(klClassicCaseVO.getUserId().toString());
|
|
|
+ detail.setGmtCreate(now);
|
|
|
+ detail.setModifier(klClassicCaseVO.getUserId().toString());
|
|
|
+ detail.setGmtModified(now);
|
|
|
+ });
|
|
|
+
|
|
|
+ //保存经典病例基础信息
|
|
|
+ this.saveOrUpdate(classicCase);
|
|
|
+
|
|
|
+ //删除已有明细
|
|
|
+ klCaseDetailService.remove(new QueryWrapper<KlCaseDetail>()
|
|
|
+ .eq("concept_id", concept.getId()));
|
|
|
+
|
|
|
+ //保存新的明细
|
|
|
+ klCaseDetailService.saveBatch(details);
|
|
|
+
|
|
|
+ //保存量表明细
|
|
|
+ if (klClassicCaseVO.getSource() != null
|
|
|
+ && klClassicCaseVO.getSource().equals(1)
|
|
|
+ && klClassicCaseVO.getType().equals(LexiconEnum.Scale.getKey())) {
|
|
|
+ if (klClassicCaseVO.getScale() != null) {
|
|
|
+ klClassicCaseVO.getScale().setConceptId(concept.getId());
|
|
|
+ klClassicCaseVO.getScale().setModifier(concept.getModifier());
|
|
|
+ klScaleFacade.saveUpKlScaleAll(klClassicCaseVO.getScale());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面展示类型转换
|
|
|
+ *
|
|
|
+ * @param type
|
|
|
+ * @param flag
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Integer convertType(Integer type, Integer flag) {
|
|
|
+ Integer retType = null;
|
|
|
+ if (type == null) {
|
|
|
+ return retType;
|
|
|
+ }
|
|
|
+ if (flag.equals(1)) {
|
|
|
+ //1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ retType = LexiconEnum.Disease.getKey();
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ retType = LexiconEnum.Medicine.getKey();
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ retType = LexiconEnum.LisName.getKey();
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ retType = LexiconEnum.LisSubName.getKey();
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ retType = LexiconEnum.PacsName.getKey();
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ retType = LexiconEnum.PacsSubName.getKey();
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ retType = LexiconEnum.Operation.getKey();
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ retType = LexiconEnum.Scale.getKey();
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ retType = LexiconEnum.Nurse.getKey();
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ retType = LexiconEnum.Law.getKey();
|
|
|
+ break;
|
|
|
+ case 11:
|
|
|
+ retType = LexiconEnum.ClassicCase.getKey();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else if (flag.equals(2)) {
|
|
|
+ if (type.equals(LexiconEnum.Disease.getKey())) {
|
|
|
+ retType = 1;
|
|
|
+ } else if (type.equals(LexiconEnum.Medicine.getKey())) {
|
|
|
+ retType = 2;
|
|
|
+ } else if (type.equals(LexiconEnum.LisName.getKey())) {
|
|
|
+ retType = 3;
|
|
|
+ } else if (type.equals(LexiconEnum.LisSubName.getKey())) {
|
|
|
+ retType = 4;
|
|
|
+ } else if (type.equals(LexiconEnum.PacsName.getKey())) {
|
|
|
+ retType = 5;
|
|
|
+ } else if (type.equals(LexiconEnum.PacsSubName.getKey())) {
|
|
|
+ retType = 6;
|
|
|
+ } else if (type.equals(LexiconEnum.Operation.getKey())) {
|
|
|
+ retType = 7;
|
|
|
+ } else if (type.equals(LexiconEnum.Scale.getKey())) {
|
|
|
+ retType = 8;
|
|
|
+ } else if (type.equals(LexiconEnum.Nurse.getKey())) {
|
|
|
+ retType = 9;
|
|
|
+ } else if (type.equals(LexiconEnum.Law.getKey())) {
|
|
|
+ retType = 10;
|
|
|
+ } else if (type.equals(LexiconEnum.ClassicCase.getKey())) {
|
|
|
+ retType = 11;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return retType;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|