|
@@ -19,16 +19,13 @@ 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 io.micrometer.core.instrument.util.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.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -71,7 +68,88 @@ public class KlClassicCaseFacade extends KlClassicCaseServiceImpl {
|
|
|
KlConceptService klConceptService;
|
|
|
|
|
|
/**
|
|
|
- * 经典病例分页查询
|
|
|
+ * 获取经典病历
|
|
|
+ *
|
|
|
+ * @param staticKnowledgeVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ClassicCaseDTO getClassicCaseInfo(StaticKnowledgeVO staticKnowledgeVO) {
|
|
|
+ ClassicCaseDTO classicCaseDTO = new ClassicCaseDTO();
|
|
|
+ Integer type = convertType(staticKnowledgeVO.getType(), 1);
|
|
|
+ if (type == null) {
|
|
|
+ throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "请输入正确类型(11-经典病例)");
|
|
|
+ }
|
|
|
+ staticKnowledgeVO.setType(type);
|
|
|
+
|
|
|
+ KlConcept concept = klConceptFacade.getOne(new QueryWrapper<KlConcept>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("lib_name", staticKnowledgeVO.getName())
|
|
|
+ .eq("status", StatusEnum.Enable.getKey())
|
|
|
+ .eq("lib_type", type), false);
|
|
|
+
|
|
|
+ Integer sameType = 0;
|
|
|
+
|
|
|
+ KlClassicCase caseInfo = this.getOne(new QueryWrapper<KlClassicCase>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", concept.getId())
|
|
|
+ .eq("status", StatusEnum.Enable.getKey()), false);
|
|
|
+ if (caseInfo != null) {
|
|
|
+ staticKnowledgeVO.setType(sameType);
|
|
|
+ }
|
|
|
+
|
|
|
+ //经典病例详情
|
|
|
+// String sql = "";
|
|
|
+// if (ListUtil.isNotEmpty(staticKnowledgeVO.getContentTypes())) {
|
|
|
+//
|
|
|
+// for (Integer contentType : staticKnowledgeVO.getContentTypes()) {
|
|
|
+// if (contentType.equals(0)) {
|
|
|
+// sql = "";
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// if (StringUtil.isNotBlank(sql)) {
|
|
|
+// sql += " or ";
|
|
|
+// }
|
|
|
+// sql += "find_in_set(" + contentType + ",content_type)";
|
|
|
+// }
|
|
|
+// if (StringUtil.isNotBlank(sql)) {
|
|
|
+// sql = "(" + sql + ")";
|
|
|
+// }
|
|
|
+// }
|
|
|
+ List<KlCaseDetail> details = klCaseDetailFacade.list(new QueryWrapper<KlCaseDetail>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", concept.getId())
|
|
|
+// .apply(sql)
|
|
|
+ .orderByAsc("order_no"));
|
|
|
+
|
|
|
+ List<ClassicCaseDetailDTO> detailList
|
|
|
+ = BeanUtil.listCopyTo(details, ClassicCaseDetailDTO.class);
|
|
|
+ List<ClassicCaseDetailDTO> introduceList = detailList
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //Map<String, List<StaticKnowledgeDetailDTO>> detailMap = new HashMap<>();
|
|
|
+ Map<String, List<ClassicCaseDetailDTO>> detailMap = new HashMap<>();
|
|
|
+ if (ListUtil.isNotEmpty(introduceList) && staticKnowledgeVO.getContentTypes().contains(1)) {
|
|
|
+ detailMap.put("经典病历", introduceList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type.equals(LexiconEnum.Scale.getKey())) {
|
|
|
+ //量表详情
|
|
|
+ ScaleVO scaleVO = new ScaleVO();
|
|
|
+ BeanUtil.copyProperties(staticKnowledgeVO, scaleVO);
|
|
|
+ classicCaseDTO.setScale(getScaleStructure(scaleVO, concept.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ classicCaseDTO.setDetails(detailMap);
|
|
|
+ classicCaseDTO.setId(concept.getId());
|
|
|
+ classicCaseDTO.setName(concept.getLibName());
|
|
|
+ Integer retType = convertType(concept.getLibType(), 2);
|
|
|
+ classicCaseDTO.setType(retType == null ? "" : retType.toString());
|
|
|
+
|
|
|
+ return classicCaseDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 经典病历分页查询
|
|
|
*
|
|
|
* @param klClassicCasePageVO
|
|
|
* @return
|
|
@@ -148,7 +226,7 @@ public class KlClassicCaseFacade extends KlClassicCaseServiceImpl {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据经典病例id获取病例信息
|
|
|
+ * 根据经典病历id获取病历信息
|
|
|
*
|
|
|
* @param idVO
|
|
|
* @return
|
|
@@ -264,7 +342,7 @@ public class KlClassicCaseFacade extends KlClassicCaseServiceImpl {
|
|
|
detail.setGmtModified(now);
|
|
|
});
|
|
|
|
|
|
- //保存经典病例基础信息
|
|
|
+ //保存经典病历基础信息
|
|
|
this.saveOrUpdate(classicCase);
|
|
|
|
|
|
//删除已有明细
|
|
@@ -367,4 +445,117 @@ public class KlClassicCaseFacade extends KlClassicCaseServiceImpl {
|
|
|
return retType;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取量表结构
|
|
|
+ *
|
|
|
+ * @param conceptId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ConceptScaleDTO getScaleStructure(ScaleVO scaleVO, Long conceptId) {
|
|
|
+ ConceptScaleDTO retDTO = new ConceptScaleDTO();
|
|
|
+ List<KlConceptScale> scaleList = klConceptScaleFacade.list(new QueryWrapper<KlConceptScale>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", conceptId)
|
|
|
+ .orderByAsc("text_type", "group_num", "order_no"));
|
|
|
+ if (ListUtil.isEmpty(scaleList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<ConceptScaleDetailDTO> scaleDetailList = BeanUtil.listCopyTo(scaleList, ConceptScaleDetailDTO.class);
|
|
|
+ if (null != scaleVO) {
|
|
|
+ List<String> codeList = new ArrayList<>();
|
|
|
+ codeList = scaleDetailList.stream().filter(s -> StringUtils.isNotBlank(s.getRuleCode())).map(ac -> ac.getRuleCode()).collect(Collectors.toList());
|
|
|
+ scaleVO.setCodeList(codeList);
|
|
|
+ ScaleDTO scaleDTO = klRegulationBaseFacade.process(scaleVO);
|
|
|
+ List<String> codeListNew = scaleDTO.getCodeList(); //Arrays.asList("100001", "100013");
|
|
|
+ if (ListUtil.isNotEmpty(codeListNew)) {
|
|
|
+ for (String str : codeListNew) {
|
|
|
+ for (ConceptScaleDetailDTO data2 : scaleDetailList) {
|
|
|
+ if (null != data2.getRuleCode() && data2.getRuleCode().equals(str)) {
|
|
|
+ data2.setMatch(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (null != scaleVO) {
|
|
|
+ List<String> codeList = new ArrayList<>();
|
|
|
+ codeList = scaleDetailList.stream().map(ac -> ac.getRuleCode()).collect(Collectors.toList());
|
|
|
+ scaleVO.setCodeList(codeList);
|
|
|
+ ScaleDTO scaleDTO = klRegulationBaseFacade.process(scaleVO);
|
|
|
+ List<String> codeListNew = scaleDTO.getCodeList(); //Arrays.asList("100001", "100013");
|
|
|
+ if (ListUtil.isNotEmpty(codeListNew)) {
|
|
|
+ for (String str : codeListNew) {
|
|
|
+ for (ConceptScaleDetailDTO data2 : scaleDetailList) {
|
|
|
+ if (null != data2.getRuleCode() && data2.getRuleCode().equals(str)) {
|
|
|
+ data2.setMatch(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, List<ConceptScaleDetailDTO>> parentMap
|
|
|
+ = scaleDetailList.stream().sorted(Comparator.comparing(ConceptScaleDetailDTO::getTextType).thenComparing(ConceptScaleDetailDTO::getGroupNum)).collect(Collectors.groupingBy(ConceptScaleDetailDTO::getParentId));
|
|
|
+ List<ConceptScaleDetailDTO> retScacleDetailList = parentMap.get(-1L);
|
|
|
+ if (ListUtil.isEmpty(retScacleDetailList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<ConceptScaleSubDTO> retList = Lists.newLinkedList();
|
|
|
+ Map<Integer, List<ConceptScaleDetailDTO>> groupMap
|
|
|
+ = retScacleDetailList.stream().collect(Collectors.groupingBy(ConceptScaleDetailDTO::getGroupNum));
|
|
|
+ for (Map.Entry<Integer, List<ConceptScaleDetailDTO>> entry : groupMap.entrySet()) {
|
|
|
+ ConceptScaleSubDTO subItem = new ConceptScaleSubDTO();
|
|
|
+ subItem.setGroupNum(entry.getKey());
|
|
|
+ subItem.setDetailList(entry.getValue());
|
|
|
+ retList.add(subItem);
|
|
|
+ }
|
|
|
+ for (ConceptScaleSubDTO subDTO : retList) {
|
|
|
+ scaleRecursion(subDTO, parentMap);
|
|
|
+ }
|
|
|
+ //排序
|
|
|
+ for (ConceptScaleSubDTO data : retList) {
|
|
|
+ if (ListUtil.isNotEmpty(data.getDetailList())) {
|
|
|
+ for (ConceptScaleDetailDTO datasub : data.getDetailList()) {
|
|
|
+ if (ListUtil.isNotEmpty(datasub.getSubList())) {
|
|
|
+ datasub.setSubList(datasub.getSubList().stream().sorted(Comparator.comparing(ConceptScaleSubDTO::getGroupNum)).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ retDTO.setScaleDetails(retList);
|
|
|
+ return retDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 递归
|
|
|
+ *
|
|
|
+ * @param item
|
|
|
+ * @param treeMap
|
|
|
+ */
|
|
|
+ public ConceptScaleSubDTO scaleRecursion(ConceptScaleSubDTO item,
|
|
|
+ Map<Long, List<ConceptScaleDetailDTO>> treeMap) {
|
|
|
+ List<ConceptScaleDetailDTO> list = item.getDetailList();
|
|
|
+ if (ListUtil.isNotEmpty(list)) {
|
|
|
+ for (ConceptScaleDetailDTO detail : list) {
|
|
|
+ List<ConceptScaleDetailDTO> subDetailList = treeMap.get(detail.getId());
|
|
|
+ if (ListUtil.isNotEmpty(subDetailList)) {
|
|
|
+ Map<Integer, List<ConceptScaleDetailDTO>> subMap
|
|
|
+ = subDetailList.stream().collect(Collectors.groupingBy(ConceptScaleDetailDTO::getGroupNum));
|
|
|
+ List<ConceptScaleSubDTO> subList = Lists.newLinkedList();
|
|
|
+ for (Map.Entry<Integer, List<ConceptScaleDetailDTO>> subEntry : subMap.entrySet()) {
|
|
|
+ ConceptScaleSubDTO subDTO = new ConceptScaleSubDTO();
|
|
|
+ subDTO.setGroupNum(subEntry.getKey());
|
|
|
+ subDTO.setDetailList(subEntry.getValue());
|
|
|
+ scaleRecursion(subDTO, treeMap);
|
|
|
+ subList.add(subDTO);
|
|
|
+ }
|
|
|
+ detail.setSubList(subList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
}
|