Browse Source

经典病例后台功能添加

xiewei 11 months ago
parent
commit
9597a6be2c
27 changed files with 1610 additions and 15 deletions
  1. 39 0
      src/main/java/com/diagbot/dto/CaseBatchDTO.java
  2. 42 0
      src/main/java/com/diagbot/dto/ClassicCaseIndexDTO.java
  3. 68 0
      src/main/java/com/diagbot/dto/KlClassicCaseDTO.java
  4. 195 0
      src/main/java/com/diagbot/entity/KlCaseDetail.java
  5. 139 0
      src/main/java/com/diagbot/entity/KlClassicCase.java
  6. 42 0
      src/main/java/com/diagbot/entity/KlClassicCaseInfo.java
  7. 2 1
      src/main/java/com/diagbot/enums/LexiconEnum.java
  8. 35 0
      src/main/java/com/diagbot/facade/KlCaseDetailFacade.java
  9. 370 0
      src/main/java/com/diagbot/facade/KlClassicCaseFacade.java
  10. 15 0
      src/main/java/com/diagbot/facade/KlClassicCaseInfoFacade.java
  11. 17 0
      src/main/java/com/diagbot/mapper/KlCaseDetailMapper.java
  12. 32 0
      src/main/java/com/diagbot/mapper/KlClassicCaseInfoMapper.java
  13. 26 0
      src/main/java/com/diagbot/mapper/KlClassicCaseMapper.java
  14. 17 0
      src/main/java/com/diagbot/service/KlCaseDetailService.java
  15. 25 0
      src/main/java/com/diagbot/service/KlClassicCaseInfoService.java
  16. 25 0
      src/main/java/com/diagbot/service/KlClassicCaseService.java
  17. 23 0
      src/main/java/com/diagbot/service/impl/KlCaseDetailServiceImpl.java
  18. 48 0
      src/main/java/com/diagbot/service/impl/KlClassicCaseInfoServiceImpl.java
  19. 34 0
      src/main/java/com/diagbot/service/impl/KlClassicCaseServiceImpl.java
  20. 1 1
      src/main/java/com/diagbot/service/impl/KlConceptDetailServiceImpl.java
  21. 33 0
      src/main/java/com/diagbot/vo/KlClassicCasePageVO.java
  22. 63 0
      src/main/java/com/diagbot/vo/KlClassicCaseVO.java
  23. 57 13
      src/main/java/com/diagbot/web/KlConceptStaticController.java
  24. 21 0
      src/main/resources/mapper/KlCaseDetailMapper.xml
  25. 134 0
      src/main/resources/mapper/KlClassicCaseInfoMapper.xml
  26. 67 0
      src/main/resources/mapper/KlClassicCaseMapper.xml
  27. 40 0
      src/main/resources/mapper/KlConceptMapper.xml

+ 39 - 0
src/main/java/com/diagbot/dto/CaseBatchDTO.java

@@ -0,0 +1,39 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/6/7 10:27
+ */
+@Getter
+@Setter
+public class CaseBatchDTO {
+    private Long id;
+    private Integer status;
+    private String name;
+    private String synonyms;
+    private Integer type;
+    private Integer age;
+    private String sex;
+    private String dept;
+    //病例标题
+    private String title;
+    private String chief;
+    private String present;
+    private String pasts;
+    private String personal;
+    private String family;
+    private String marital;
+    private String vital;
+    private String lis;
+    private String pacs;
+    //西医诊断
+    private String diag;
+    //中医诊断
+    private String tcmdiag;
+    //医嘱
+    private String drug;
+}

+ 42 - 0
src/main/java/com/diagbot/dto/ClassicCaseIndexDTO.java

@@ -0,0 +1,42 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/8/18 15:59
+ */
+@Getter
+@Setter
+public class ClassicCaseIndexDTO {
+    /**
+     * 术语id
+     */
+    private Long id;
+    /**
+     * 术语名称
+     */
+    private String name;
+    /**
+     * 词性
+     */
+    private Integer type;
+    /**
+     * 词性
+     */
+    private String typeName;
+    /**
+     * 同义词
+     */
+    private String retrievalName;
+    /**
+     * 是否有静态知识
+     */
+    private Integer hasInfo = 0;
+    /**
+     * 启用禁用
+     */
+    private Integer status;
+}

+ 68 - 0
src/main/java/com/diagbot/dto/KlClassicCaseDTO.java

@@ -0,0 +1,68 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/2/24 13:38
+ */
+@Getter
+@Setter
+public class KlClassicCaseDTO {
+    /**
+     * 术语id
+     */
+    private Long id;
+    /**
+     * 术语名称
+     */
+    private String name;
+    /**
+     * 关联标题
+     */
+    private String title;
+    /**
+     * 术语类型(词性)
+     */
+    private Integer type;
+    /**
+     * 术语类型(词性)
+     */
+    private String typeName;
+    /**
+     * 临床路径名称
+     */
+    private String clinicalPathwayName;
+    /**
+     * 注意事项名称
+     */
+    private String noticeName;
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date gmtModified;
+    /**
+     * 修改人
+     */
+    private String modifier;
+    /**
+     * 启用状态
+     */
+    private Integer status;
+    /**
+     * 明细
+     */
+    private List<KlConceptDetailDTO> details;
+    /**
+     * 量表结构
+     */
+    private KlScaleByIdDTO scale;
+
+}

+ 195 - 0
src/main/java/com/diagbot/entity/KlCaseDetail.java

@@ -0,0 +1,195 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 静态知识内容表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-01-21
+ */
+public class KlCaseDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 提示概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 提示明细标题
+     */
+    private String title;
+
+    /**
+     * 提示明细内容
+     */
+    private String content;
+
+    /**
+     * 纯文本
+     */
+    private String text;
+
+    /**
+     * 提示明细序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 内容类型(多选):1-化验、辅检、手术和操作、诊断、药品静态信息,2-注意事项,3-临床路径,4-治疗方案
+     */
+    private String contentType;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public Integer getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(Integer orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    @Override
+    public String toString() {
+        return "KlConceptDetail{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", conceptId=" + conceptId +
+                ", title=" + title +
+                ", content=" + content +
+                ", text=" + text +
+                ", orderNo=" + orderNo +
+                ", contentType=" + contentType +
+                "}";
+    }
+}

+ 139 - 0
src/main/java/com/diagbot/entity/KlClassicCase.java

@@ -0,0 +1,139 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 经典病例标准术语表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-01-21
+ */
+public class KlClassicCase {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 提示概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 启用状态(0:禁用,1:启用)
+     */
+    private Integer status;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return "KlConceptStatic{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", conceptId=" + conceptId +
+                ", status=" + status +
+                "}";
+    }
+}

+ 42 - 0
src/main/java/com/diagbot/entity/KlClassicCaseInfo.java

@@ -0,0 +1,42 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/6/7 10:27
+ */
+@Getter
+@Setter
+public class KlClassicCaseInfo implements Serializable {
+    private Long id;
+    private String isDeleted;
+    private Date gmtCreate;
+    private Date gmtModified;
+    private String creator;
+    private String modifier;
+    private Long conceptId;
+    private Integer age;
+    private String sex;
+    private String dept;
+    //病例标题
+    private String title;
+    private String chief;
+    private String present;
+    private String pasts;
+    private String personal;
+    private String family;
+    private String marital;
+    private String vital;
+    private String lis;
+    private String pacs;
+    private String diag;
+    private String tcmdiag;
+    private String drug;
+    private Integer status;
+}

+ 2 - 1
src/main/java/com/diagbot/enums/LexiconEnum.java

@@ -83,7 +83,8 @@ public enum LexiconEnum implements KeyedNamed {
     OperationClassNode(407,"手术和操作类别根节点"),
     LisClassNode(408,"实验室检查类别根节点"),
     PacsClassNode(409,"辅助检查类别根节点"),
-    Age(410,"年龄");
+    Age(410,"年龄"),
+    ClassicCase(411,"经典病例");
 
 
     @Setter

+ 35 - 0
src/main/java/com/diagbot/facade/KlCaseDetailFacade.java

@@ -0,0 +1,35 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlClassicCaseDTO;
+import com.diagbot.dto.KlConceptDetailDTO;
+import com.diagbot.dto.KlScaleByIdDTO;
+import com.diagbot.entity.KlCaseDetail;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlConcept;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.service.KlConceptDetailService;
+import com.diagbot.service.impl.KlCaseDetailServiceImpl;
+import com.diagbot.service.impl.KlConceptDetailServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.IdVO;
+import com.diagbot.vo.KlScaleByIdVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/2/24 11:25
+ */
+@Component
+public class KlCaseDetailFacade extends KlCaseDetailServiceImpl {
+
+}

+ 370 - 0
src/main/java/com/diagbot/facade/KlClassicCaseFacade.java

@@ -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;
+    }
+
+}

+ 15 - 0
src/main/java/com/diagbot/facade/KlClassicCaseInfoFacade.java

@@ -0,0 +1,15 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlClassicCaseInfoServiceImpl;
+import com.diagbot.service.impl.KlClassicCaseServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/1/26 13:07
+ */
+@Component
+public class KlClassicCaseInfoFacade extends KlClassicCaseInfoServiceImpl {
+
+}

+ 17 - 0
src/main/java/com/diagbot/mapper/KlCaseDetailMapper.java

@@ -0,0 +1,17 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.KlCaseDetail;
+import com.diagbot.entity.KlConceptDetail;
+
+/**
+ * <p>
+ * 经典病例内容表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-01-21
+ */
+public interface KlCaseDetailMapper extends BaseMapper<KlCaseDetail> {
+
+}

+ 32 - 0
src/main/java/com/diagbot/mapper/KlClassicCaseInfoMapper.java

@@ -0,0 +1,32 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.vo.MappingConfigPageVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 经典病例表 Mapper 接口
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlClassicCaseInfoMapper extends BaseMapper<KlClassicCaseInfo> {
+    /**
+     * 查询病例信息
+     *
+     * @param ids
+     * @return
+     */
+    List<KlClassicCaseInfo> listInfo(@Param("ids") List<Long> ids);
+
+    KlClassicCaseInfo getOneCase(@Param("conceptId") Long conceptId);
+
+}

+ 26 - 0
src/main/java/com/diagbot/mapper/KlClassicCaseMapper.java

@@ -0,0 +1,26 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.KlClassicCaseDTO;
+import com.diagbot.dto.KlConceptStaticDTO;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.entity.KlOperation;
+import com.diagbot.vo.KlClassicCasePageVO;
+import com.diagbot.vo.KlConceptStaticPageVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 经典病例表 Mapper 接口
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlClassicCaseMapper extends BaseMapper<KlClassicCase> {
+
+    IPage<KlClassicCaseDTO> getClassicCase(@Param("klClassicCasePageVO") KlClassicCasePageVO klClassicCasePageVO);
+
+}

+ 17 - 0
src/main/java/com/diagbot/service/KlCaseDetailService.java

@@ -0,0 +1,17 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.KlCaseDetail;
+import com.diagbot.entity.KlConceptDetail;
+
+/**
+ * <p>
+ * 静态知识内容表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-01-21
+ */
+public interface KlCaseDetailService extends IService<KlCaseDetail> {
+
+}

+ 25 - 0
src/main/java/com/diagbot/service/KlClassicCaseInfoService.java

@@ -0,0 +1,25 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.model.entity.Lis;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 经典病例表 服务类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlClassicCaseInfoService extends IService<KlClassicCaseInfo> {
+    public List<KlClassicCaseInfo> listInfo(@Param("conceptIds") List<Long> conceptIds);
+
+    public KlClassicCaseInfo getOneCase(@Param("conceptId") Long conceptId);
+
+}

+ 25 - 0
src/main/java/com/diagbot/service/KlClassicCaseService.java

@@ -0,0 +1,25 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.KlClassicCaseDTO;
+import com.diagbot.dto.KlConceptStaticDTO;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.entity.KlOperation;
+import com.diagbot.vo.KlClassicCasePageVO;
+import com.diagbot.vo.KlConceptStaticPageVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 经典病例表 服务类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlClassicCaseService extends IService<KlClassicCase> {
+
+    IPage<KlClassicCaseDTO> getClassicCase(@Param("klClassicCasePageVO") KlClassicCasePageVO klClassicCasePageVO);
+}

+ 23 - 0
src/main/java/com/diagbot/service/impl/KlCaseDetailServiceImpl.java

@@ -0,0 +1,23 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.KlCaseDetail;
+import com.diagbot.entity.KlConceptDetail;
+import com.diagbot.mapper.KlCaseDetailMapper;
+import com.diagbot.mapper.KlConceptDetailMapper;
+import com.diagbot.service.KlCaseDetailService;
+import com.diagbot.service.KlConceptDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 经典病例内容表 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-01-21
+ */
+@Service
+public class KlCaseDetailServiceImpl extends ServiceImpl<KlCaseDetailMapper, KlCaseDetail> implements KlCaseDetailService {
+
+}

+ 48 - 0
src/main/java/com/diagbot/service/impl/KlClassicCaseInfoServiceImpl.java

@@ -0,0 +1,48 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.entity.wrapper.MappingConfigWrapper;
+import com.diagbot.mapper.KlClassicCaseInfoMapper;
+import com.diagbot.mapper.KlClassicCaseMapper;
+import com.diagbot.service.KlClassicCaseInfoService;
+import com.diagbot.service.KlClassicCaseService;
+import com.diagbot.vo.MappingConfigPageVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 经典病例表 服务实现类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+@Service
+public class KlClassicCaseInfoServiceImpl extends ServiceImpl<KlClassicCaseInfoMapper, KlClassicCaseInfo> implements KlClassicCaseInfoService {
+    @Autowired
+    KlClassicCaseInfoMapper klClassicCaseInfoMapper;
+    /**
+     * 查询病例信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<KlClassicCaseInfo> listInfo(@Param("conceptIds") List<Long> ids) {
+        return klClassicCaseInfoMapper.listInfo(ids);
+    }
+
+    @Override
+    public KlClassicCaseInfo getOneCase(@Param("conceptId") Long conceptId) {
+        return klClassicCaseInfoMapper.getOneCase(conceptId);
+    }
+}

+ 34 - 0
src/main/java/com/diagbot/service/impl/KlClassicCaseServiceImpl.java

@@ -0,0 +1,34 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.KlClassicCaseDTO;
+import com.diagbot.dto.KlConceptStaticDTO;
+import com.diagbot.entity.KlClassicCase;
+import com.diagbot.entity.KlClassicCaseInfo;
+import com.diagbot.entity.KlOperation;
+import com.diagbot.mapper.KlClassicCaseMapper;
+import com.diagbot.mapper.KlOperationMapper;
+import com.diagbot.service.KlClassicCaseService;
+import com.diagbot.service.KlOperationService;
+import com.diagbot.vo.KlClassicCasePageVO;
+import com.diagbot.vo.KlConceptStaticPageVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 经典病例表 服务实现类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+@Service
+public class KlClassicCaseServiceImpl extends ServiceImpl<KlClassicCaseMapper, KlClassicCase> implements KlClassicCaseService {
+
+    @Override
+    public IPage<KlClassicCaseDTO> getClassicCase(@Param("klClassicCasePageVO") KlClassicCasePageVO klClassicCasePageVO) {
+        return baseMapper.getClassicCase(klClassicCasePageVO);
+    }
+}

+ 1 - 1
src/main/java/com/diagbot/service/impl/KlConceptDetailServiceImpl.java

@@ -8,7 +8,7 @@ import org.springframework.stereotype.Service;
 
 /**
  * <p>
- * 静态知识内容表 服务实现类
+ * 经典病例内容表 服务实现类
  * </p>
  *
  * @author gaodm

+ 33 - 0
src/main/java/com/diagbot/vo/KlClassicCasePageVO.java

@@ -0,0 +1,33 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/2/24 13:41
+ */
+@Getter
+@Setter
+public class KlClassicCasePageVO extends Page {
+    /**
+     * 标准术语
+     */
+    private String name;
+    /**
+     * 术语类型
+     */
+    private Integer type;
+    /**
+     * 术语类型
+     */
+    @ApiModelProperty(hidden = true)
+    private String typeName;
+    /**
+     * 启用状态
+     */
+    private Integer status;
+}

+ 63 - 0
src/main/java/com/diagbot/vo/KlClassicCaseVO.java

@@ -0,0 +1,63 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/2/24 15:03
+ */
+@Getter
+@Setter
+public class KlClassicCaseVO {
+    private Long id;
+    /**
+     * 标准术语
+     */
+    private String name;
+    /**
+     * 术语类型
+     */
+    private Integer type;
+    /**
+     * 术语类型
+     */
+    @ApiModelProperty(hidden = true)
+    private String typeName;
+    /**
+     * 临床路径名称
+     */
+    private String clinicalPathwayName;
+
+    /**
+     * 注意事项名称
+     */
+    private String noticeName;
+
+    /**
+     * 经典病例明细
+     */
+    private List<KlConceptDetailVO> details;
+
+    /**
+     * 操作id
+     */
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+
+    /**
+     * 量表结构
+     */
+    private KlScaleSaveUpVO scale;
+
+    /**
+     * 数据来源:0-医院端、1-云平台,默认0
+     */
+    private Integer source = 0;
+
+}

+ 57 - 13
src/main/java/com/diagbot/web/KlConceptStaticController.java

@@ -3,21 +3,12 @@ package com.diagbot.web;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.dto.ConceptDetailDTO;
-import com.diagbot.dto.ConceptScaleDTO;
-import com.diagbot.dto.KlConceptStaticDTO;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.StaticKnowledgeDTO;
-import com.diagbot.dto.StaticKnowledgeIndexPageDTO;
+import com.diagbot.dto.*;
+import com.diagbot.facade.KlCaseDetailFacade;
+import com.diagbot.facade.KlClassicCaseFacade;
 import com.diagbot.facade.KlConceptStaticFacade;
 import com.diagbot.util.BeanUtil;
-import com.diagbot.vo.ChangeStatusVO;
-import com.diagbot.vo.GetDetailVO;
-import com.diagbot.vo.IdVO;
-import com.diagbot.vo.KlConceptStaticPageVO;
-import com.diagbot.vo.KlConceptStaticVO;
-import com.diagbot.vo.StaticKnowledgeIndexPageVO;
-import com.diagbot.vo.StaticKnowledgeVO;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,6 +34,10 @@ import java.util.Map;
 public class KlConceptStaticController {
     @Autowired
     KlConceptStaticFacade klConceptStaticFacade;
+    @Autowired
+    private KlCaseDetailFacade klCaseDetailFacade;
+    @Autowired
+    private KlClassicCaseFacade klClassicCaseFacade;
 
     @ApiOperation(value = "获取静态知识[zhaops]",
             notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
@@ -69,6 +64,20 @@ public class KlConceptStaticController {
         return RespDTO.onSuc(page);
     }
 
+    @ApiOperation(value = "获取经典病例列表",
+            notes = "type: 类型:11-经典病例  <br>" +
+                    "name: 术语名称<br>" +
+                    "status: 启用状态:1-启用、0-禁用<br>")
+    @PostMapping("/getClassicCase")
+    @SysLogger("getClassicCase")
+    @SuppressWarnings("unchecked")
+    public RespDTO<Page<KlClassicCaseDTO>> getClassicCase(@Valid @RequestBody KlClassicCasePageVO klClassicCasePageVO) {
+        IPage<KlClassicCaseDTO> data = klClassicCaseFacade.getClassicCase(klClassicCasePageVO);
+        Page<KlClassicCaseDTO> page = new Page<>();
+        BeanUtil.copyProperties(data, page);
+        return RespDTO.onSuc(page);
+    }
+
     @ApiOperation(value = "静态知识检索(分页返回)[zhaops]",
             notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规  <br>" +
                     "inputStr: 检索内容<br>")
@@ -100,6 +109,21 @@ public class KlConceptStaticController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "保存经典病例-新增或修改",
+            notes = "id: id <br>" +
+                    "name: 术语名称 <br>" +
+                    "type: 类型:11-经典病例  <br>" +
+                    "source:数据来源:0-医院端、1-云平台,默认0 <br>" +
+                    "details: 明细<br>" +
+                    "scale:评估量表<br>")
+    @PostMapping("/saveOrUpdateCase")
+    @SysLogger("saveOrUpdateCase")
+    @Transactional
+    public RespDTO<Boolean> saveOrUpdateCase(@Valid @RequestBody KlClassicCaseVO klClassicCaseVO) {
+        Boolean data = klClassicCaseFacade.saveOrUpdateCase(klClassicCaseVO);
+        return RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "静态知识启用禁用[zhaops]",
             notes = "id: 术语id <br>" +
                     "status: 启用状态(0:禁用,1:启用)<br>")
@@ -111,6 +135,17 @@ public class KlConceptStaticController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "经典病例启用禁用",
+            notes = "id: 术语id <br>" +
+                    "status: 启用状态(0:禁用,1:启用)<br>")
+    @PostMapping("/changeCaseStatus")
+    @SysLogger("changeCaseStatus")
+    @Transactional
+    public RespDTO<Boolean> changeCaseStatus(@Valid @RequestBody ChangeStatusVO changeStatusVO) {
+        Boolean data = klClassicCaseFacade.changeCaseStatus(changeStatusVO);
+        return RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "根据术语id获取静态信息[zhaops]",
             notes = "id: 术语id <br>")
     @PostMapping("/getRecordById")
@@ -120,6 +155,15 @@ public class KlConceptStaticController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "根据经典病例id获取静态信息",
+            notes = "id: 术语id <br>")
+    @PostMapping("/getCaseById")
+    @SysLogger("getCaseById")
+    public RespDTO<KlClassicCaseDTO> getCaseById(@Valid @RequestBody IdVO idVO) {
+        KlClassicCaseDTO data = klClassicCaseFacade.getCaseById(idVO);
+        return RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "静态知识是否存在[zhaops]",
             notes = "name: 术语名称 <br>" +
                     "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规  <br>")

+ 21 - 0
src/main/resources/mapper/KlCaseDetailMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.KlCaseDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlCaseDetail">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="concept_id" property="conceptId" />
+        <result column="title" property="title" />
+        <result column="content" property="content" />
+        <result column="text" property="text" />
+        <result column="order_no" property="orderNo" />
+        <result column="content_type" property="contentType" />
+    </resultMap>
+
+</mapper>

+ 134 - 0
src/main/resources/mapper/KlClassicCaseInfoMapper.xml

@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.KlClassicCaseInfoMapper">
+
+    <resultMap id="listInfo" type="com.diagbot.entity.KlClassicCaseInfo">
+        <id column="id" property="id" />
+        <result column="age" property="age" />
+        <result column="sex" property="sex" />
+        <result column="dept" property="dept" />
+        <result column="concept_id" property="conceptId" />
+        <result column="chief" property="chief" />
+        <result column="present" property="present" />
+        <result column="pasts" property="pasts" />
+        <result column="personal" property="personal" />
+        <result column="family" property="family" />
+        <result column="marital" property="marital" />
+        <result column="vital" property="vital" />
+        <result column="lis" property="lis" />
+        <result column="pacs" property="pacs" />
+        <result column="diag" property="diag" />
+        <result column="tcmdiag" property="tcmdiag" />
+        <result column="drug" property="drug" />
+    </resultMap>
+
+    <select id="listInfo" resultType="com.diagbot.entity.KlClassicCaseInfo">
+        SELECT age,sex,dept,t1.concept_id concept_id,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '主诉' AND t2.concept_id = t1.concept_id
+            ) AS chief,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '现病史' AND t2.concept_id = t1.concept_id
+            ) AS present,
+            (SELECT content
+                FROM kl_case_detail t2
+                WHERE title = '既往史' AND t2.concept_id = t1.concept_id
+            ) AS pasts,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '个人史' AND t2.concept_id = t1.concept_id
+            ) AS personal,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '家族史' AND t2.concept_id = t1.concept_id
+            ) AS family,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '婚育史' AND t2.concept_id = t1.concept_id
+            ) AS marital,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '查体' AND t2.concept_id = t1.concept_id
+            ) AS vital,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '检验' AND t2.concept_id = t1.concept_id
+            ) AS lis,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '检查' AND t2.concept_id = t1.concept_id
+            ) AS pacs,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '西医诊断' AND t2.concept_id = t1.concept_id
+            ) AS diag,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '中医诊断' AND t2.concept_id = t1.concept_id
+            ) AS tcmdiag,
+            (SELECT content
+                FROM kl_case_detail  t2
+                WHERE title = '医嘱' AND t2.concept_id = t1.concept_id
+            ) AS drug
+        FROM kl_classic_case t1 where is_deleted = 'N' and t1.concept_id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <select id="getOneCase" resultType="com.diagbot.entity.KlClassicCaseInfo">
+        SELECT age,sex,dept,t1.concept_id concept_id,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '主诉' AND t2.concept_id = t1.id
+        ) AS chief,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '现病史' AND t2.concept_id = t1.id
+        ) AS present,
+        (SELECT content
+        FROM kl_case_detail t2
+        WHERE title = '既往史' AND t2.concept_id = t1.id
+        ) AS pasts,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '个人史' AND t2.concept_id = t1.id
+        ) AS personal,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '家族史' AND t2.concept_id = t1.id
+        ) AS family,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '婚育史' AND t2.concept_id = t1.id
+        ) AS marital,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '查体' AND t2.concept_id = t1.id
+        ) AS vital,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '检验' AND t2.concept_id = t1.id
+        ) AS lis,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '检查' AND t2.concept_id = t1.id
+        ) AS pacs,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '西医诊断' AND t2.concept_id = t1.id
+        ) AS diag,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '中医诊断' AND t2.concept_id = t1.id
+        ) AS tcmdiag,
+        (SELECT content
+        FROM kl_case_detail  t2
+        WHERE title = '医嘱' AND t2.concept_id = t1.id
+        ) AS drug
+        FROM kl_classic_case t1 where is_deleted = 'N' and t1.concept_id = #{conceptId}
+    </select>
+
+</mapper>

+ 67 - 0
src/main/resources/mapper/KlClassicCaseMapper.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.KlClassicCaseMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlClassicCase">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="concept_id" property="conceptId" />
+        <result column="age" property="age" />
+        <result column="sex" property="sex" />
+        <result column="dept" property="dept" />
+        <result column="title" property="title" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 经典病例分页查询 -->
+    <select id="getClassicCase" resultType="com.diagbot.dto.KlClassicCaseDTO">
+        SELECT
+        t1.id,
+        t1.NAME,
+--         t1.clinicalPathwayName,
+--         t1.noticeName,
+        t1.type,
+        t1.status,
+        t1.title,
+        t1.gmtModified,
+        t1.modifier
+        FROM
+        (
+        SELECT
+        a.id,
+        a.lib_name as NAME ,
+--         b.clinical_pathway_name AS clinicalPathwayName,
+--         b.notice_name AS noticeName,
+        a.lib_type as type,
+        b.status,
+        "" AS title,
+        b.gmt_modified AS gmtModified,
+        b.modifier
+        FROM
+        kl_concept a,
+        kl_classic_case b
+        WHERE
+        a.id = b.concept_id
+        and a.is_deleted = 'N'
+        and b.is_deleted = 'N'
+        <if test="klClassicCasePageVO.status!=null ">
+            AND b.status = #{klClassicCasePageVO.status}
+        </if>
+        <if test="klClassicCasePageVO.name!=null and klClassicCasePageVO.name!=''">
+            AND a.lib_name like concat('%', #{klClassicCasePageVO.name},'%')
+        </if>
+        <if test="klClassicCasePageVO.type!=null and klClassicCasePageVO.type!=''">
+            AND a.lib_type = #{klClassicCasePageVO.type}
+        </if>
+        ) t1
+        ORDER BY
+        t1.status DESC,
+        t1.gmtModified DESC
+    </select>
+
+</mapper>

+ 40 - 0
src/main/resources/mapper/KlConceptMapper.xml

@@ -766,6 +766,46 @@
         </if>
     </select>
 
+    <select id="caseIndex" resultType="com.diagbot.dto.ClassicCaseIndexDTO">
+        SELECT
+        t1.id AS id,
+        t1.lib_name AS NAME,
+        t2.NAME AS retrievalName,
+        t1.lib_type AS type,
+        t3.name AS typeName,
+        t1.status AS status
+        FROM
+        kl_concept t1
+        INNER JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        INNER JOIN kl_lexicon t3 ON t1.lib_type = t3.code
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t1.status = 1
+        AND
+        (
+        <if test="inputStr!=null and inputStr!=''">
+            t2.spell LIKE ( concat('%',LOWER(#{inputStr}),'%'))
+            OR
+            t2.name LIKE concat('%',#{inputStr},'%')
+        </if>
+        )
+        <if test="hasInfo!=null ">
+            <choose>
+                <when test="hasInfo==0">
+                    AND t2.concept_id IS NULL
+                </when>
+                <when test="hasInfo==1">
+                    AND t2.concept_id IS NOT NULL
+                </when>
+            </choose>
+        </if>
+        <if test="size!=null">
+            LIMIT #{size}
+        </if>
+    </select>
+
     <select id="getLisDetaisByNames" parameterType="com.diagbot.vo.KllisDetailVO"
             resultType="com.diagbot.dto.KllisDetailDTO">
         SELECT