Pārlūkot izejas kodu

预问诊获取填写单后台维护

zhoutg 6 gadi atpakaļ
vecāks
revīzija
42e93b9169
43 mainītis faili ar 2441 papildinājumiem un 0 dzēšanām
  1. 1 0
      precman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  2. 1 0
      precman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  3. 47 0
      precman-service/src/main/java/com/diagbot/dto/QuestionDTO.java
  4. 178 0
      precman-service/src/main/java/com/diagbot/dto/QuestionPageDTO.java
  5. 20 0
      precman-service/src/main/java/com/diagbot/entity/CommonParam.java
  6. 88 0
      precman-service/src/main/java/com/diagbot/entity/DictionaryInfo.java
  7. 87 0
      precman-service/src/main/java/com/diagbot/entity/QuestionDetail.java
  8. 129 0
      precman-service/src/main/java/com/diagbot/entity/QuestionInfo.java
  9. 99 0
      precman-service/src/main/java/com/diagbot/entity/QuestionMapping.java
  10. 22 0
      precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionInfoWrapper.java
  11. 47 0
      precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java
  12. 40 0
      precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java
  13. 51 0
      precman-service/src/main/java/com/diagbot/enums/InsertOrUpdateEnum.java
  14. 50 0
      precman-service/src/main/java/com/diagbot/enums/TagTypeEnum.java
  15. 34 0
      precman-service/src/main/java/com/diagbot/facade/DictionaryFacade.java
  16. 88 0
      precman-service/src/main/java/com/diagbot/facade/QuestionDetailFacade.java
  17. 482 0
      precman-service/src/main/java/com/diagbot/facade/QuestionFacade.java
  18. 25 0
      precman-service/src/main/java/com/diagbot/facade/QuestionMappingFacade.java
  19. 16 0
      precman-service/src/main/java/com/diagbot/mapper/DictionaryInfoMapper.java
  20. 19 0
      precman-service/src/main/java/com/diagbot/mapper/QuestionDetailMapper.java
  21. 60 0
      precman-service/src/main/java/com/diagbot/mapper/QuestionInfoMapper.java
  22. 19 0
      precman-service/src/main/java/com/diagbot/mapper/QuestionMappingMapper.java
  23. 16 0
      precman-service/src/main/java/com/diagbot/service/DictionaryInfoService.java
  24. 26 0
      precman-service/src/main/java/com/diagbot/service/QuestionDetailService.java
  25. 81 0
      precman-service/src/main/java/com/diagbot/service/QuestionInfoService.java
  26. 25 0
      precman-service/src/main/java/com/diagbot/service/QuestionMappingService.java
  27. 20 0
      precman-service/src/main/java/com/diagbot/service/impl/DictionaryInfoServiceImpl.java
  28. 26 0
      precman-service/src/main/java/com/diagbot/service/impl/QuestionDetailServiceImpl.java
  29. 56 0
      precman-service/src/main/java/com/diagbot/service/impl/QuestionInfoServiceImpl.java
  30. 26 0
      precman-service/src/main/java/com/diagbot/service/impl/QuestionMappingServiceImpl.java
  31. 16 0
      precman-service/src/main/java/com/diagbot/vo/DeleteQuestionVO.java
  32. 17 0
      precman-service/src/main/java/com/diagbot/vo/QuestionIdsVO.java
  33. 18 0
      precman-service/src/main/java/com/diagbot/vo/QuestionIndexSubVO.java
  34. 27 0
      precman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java
  35. 23 0
      precman-service/src/main/java/com/diagbot/vo/QuestionPageVO.java
  36. 16 0
      precman-service/src/main/java/com/diagbot/vo/QuestionSaveVO.java
  37. 17 0
      precman-service/src/main/java/com/diagbot/vo/QuestionVO.java
  38. 46 0
      precman-service/src/main/java/com/diagbot/web/DictionaryInfoController.java
  39. 109 0
      precman-service/src/main/java/com/diagbot/web/QuestionInfoController.java
  40. 21 0
      precman-service/src/main/resources/mapper/DictionaryInfoMapper.xml
  41. 32 0
      precman-service/src/main/resources/mapper/QuestionDetailMapper.xml
  42. 179 0
      precman-service/src/main/resources/mapper/QuestionInfoMapper.xml
  43. 41 0
      precman-service/src/main/resources/mapper/QuestionMappingMapper.xml

+ 1 - 0
precman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -27,6 +27,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .authorizeRequests()
                 .regexMatchers(".*swagger.*", ".*v2.*", ".*webjars.*", "/druid.*", "/actuator.*", "/hystrix.*").permitAll()
                 .antMatchers("/file/uploadImage").permitAll()
+                .antMatchers("/dictionaryInfo/getList").permitAll()
                 .antMatchers("/**").authenticated();
         //        .antMatchers("/**").permitAll();
     }

+ 1 - 0
precman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -90,6 +90,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/actuator/**", request)
                 || matchers("/hystrix/**", request)
                 || matchers("/file/uploadImage", request)
+                || matchers("/dictionaryInfo/getList", request)
                 || matchers("/", request)) {
             return true;
         }

+ 47 - 0
precman-service/src/main/java/com/diagbot/dto/QuestionDTO.java

@@ -0,0 +1,47 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.QuestionDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 返回标签内容
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class QuestionDTO {
+
+    private Long id;// id
+    private String name;//内容
+    private String tagName;//标签名称
+    private Integer type;//类型(1:症状 3:其他史 4:查体,5:化验 6:辅检 7:诊断)
+    private Integer controlType; //控件类型
+    private Integer subType; //检索类型
+    private Integer itemType; //元素类型
+    private Integer tagType; //标签标识
+    private String labelPrefix = ""; //前置内容
+    private String labelSuffix = ""; //后置内容
+    private BigDecimal minValue; //最小值
+    private BigDecimal maxValue; //最大值
+    private Integer position;    //标签显示位置(0:在标签后,1:在标签前)
+    private String showAdd;    //复制文字
+    private Integer formPosition; //填写单显示位置(0:左, 1:上)
+    private Integer textGenerate;  //文本生成规则
+    private Integer symptomType; //主症状和伴随症状对应的question类型
+    private Integer exclusionType; //互斥类型
+    private Integer copyType;//是否复制
+    private Integer showInfo; //是否显示i
+    private String joint = "";     //标签后的连接符
+    private String formulaCode; //公式编码
+    private List<QuestionDetail> questionDetailList = new ArrayList<>(); //标签明细表
+    private List<QuestionDTO> questionMapping = new ArrayList<>();     //下级标签
+    private Integer disType;//诊断类型
+//    private List<ScaleContentDTO> scale = new ArrayList<>();
+    private String remark;//备注
+}

+ 178 - 0
precman-service/src/main/java/com/diagbot/dto/QuestionPageDTO.java

@@ -0,0 +1,178 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.QuestionDetail;
+import com.diagbot.entity.QuestionMapping;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 标签基础表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+
+@Getter
+@Setter
+public class QuestionPageDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 标签名
+     */
+    private String tagName;
+
+    /**
+     * 内容
+     */
+    private String name;
+
+    /**
+     * 性别(1:男 2:女 3:通用)
+     */
+    private Integer sexType;
+
+    /**
+     * 最小年龄
+     */
+    private Integer ageBegin;
+
+    /**
+     * 最大年龄
+     */
+    private Integer ageEnd;
+
+    /**
+     * 标签标识(1:单项单列,例如: 程度,咳出通畅度  2:单项多列,例如:杂音,添加症状 3:横铺单标签形式,例如:血压 4:横铺多标签形式,例如:咳嗽 5:竖铺组合项,例如:有无治疗 6:组合项多列 既往史 7:化验)
+     */
+    private Integer tagType;
+
+    /**
+     * 标签标识(中文)
+     */
+    private String tagTypeCn;
+
+    /**
+     * 控件类型(0:无类型,默认值 1:下拉单选 2:下拉多选 3:纯文本 4:待定 5:待定 6:文本框 7:数字键盘文本框 99:联合推送)
+     */
+    private Integer controlType;
+    /**
+     * 控件类型(中文)
+     */
+    private String controlTypeCn;
+
+    /**
+     * 类型
+     */
+    private Integer type;
+
+    /**
+     * 类型(中文名称)
+     */
+    private String typeCn;
+
+    /**
+     * 检索类型
+     */
+    private Integer subType;
+
+    /**
+     * 元素类型
+     */
+    private Integer itemType;
+
+    /**
+     * 前置内容
+     */
+    private String labelPrefix;
+
+    /**
+     * 后置内容
+     */
+    private String labelSuffix;
+
+    /**
+     * 最小值
+     */
+    private BigDecimal minValue;
+
+    /**
+     * 最大值
+     */
+    private BigDecimal maxValue;
+
+    /**
+     * 文本生成规则(0:点选顺序,例如初为 1:从上到下,从左到右,例如查体杂音 2:从左到右,从上到下,例如伴/无)
+     */
+    private Integer textGenerate;
+
+    /**
+     * 是否复制 (0:不复制,1:复制)
+     */
+    private Integer copyType;
+
+
+
+    /**
+     * 复制文字
+     */
+    private String showAdd;
+
+    private String formulaCode; //公式编码
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 明细
+     */
+    private List<QuestionDetail> questionDetails = new ArrayList<>();
+
+    /**
+     * 映射表
+     */
+    private List<QuestionMapping> questionMappings = new ArrayList<>();
+
+    private Boolean exist;
+}

+ 20 - 0
precman-service/src/main/java/com/diagbot/entity/CommonParam.java

@@ -0,0 +1,20 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/12/14 14:15
+ */
+@Getter
+@Setter
+public class CommonParam {
+    private String person;     //操作人
+    private Date now;          //当前时间
+    private int insertOrUpdate;//更新或新增标识
+    private QuestionInfo questionInfo; //主表信息
+}

+ 88 - 0
precman-service/src/main/java/com/diagbot/entity/DictionaryInfo.java

@@ -0,0 +1,88 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * icss字典表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+@TableName("prec_dictionary_info")
+@Getter
+@Setter
+public class DictionaryInfo 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;
+
+    /**
+     * 分组(值自定义)
+     */
+    private Long groupType;
+
+    /**
+     * 内容
+     */
+    private String name;
+
+    /**
+     * 值
+     */
+    private String val;
+
+    /**
+     * 返回类型(0: 都返回,1:后台维护返回 2:icss界面返回)
+     */
+    private Integer returnType;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 87 - 0
precman-service/src/main/java/com/diagbot/entity/QuestionDetail.java

@@ -0,0 +1,87 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标签明细表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@TableName("prec_question_detail")
+@Getter
+@Setter
+public class QuestionDetail 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;
+
+    /**
+     * question_id
+     */
+    private Long questionId;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 患者界面描述
+     */
+    private String description;
+
+    /**
+     * 0:不互斥,1:与其他都互斥
+     */
+    private Integer exclusion;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 129 - 0
precman-service/src/main/java/com/diagbot/entity/QuestionInfo.java

@@ -0,0 +1,129 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标签基础表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@TableName("prec_question_info")
+@Getter
+@Setter
+public class QuestionInfo 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;
+
+    /**
+     * 标签名
+     */
+    private String tagName;
+
+    /**
+     * 内容
+     */
+    private String name;
+
+    /**
+     * 性别(1:男 2:女 3:通用)
+     */
+    private Integer sexType;
+
+    /**
+     * 最小年龄
+     */
+    private Integer ageBegin;
+
+    /**
+     * 最大年龄
+     */
+    private Integer ageEnd;
+
+    /**
+     * 标签标识(1:单项单列,例如: 程度,咳出通畅度  2:单项多列,例如:杂音,添加症状 3:横铺单标签形式,例如:血压 4:横铺多标签形式,例如:咳嗽 5:竖铺组合项,例如:有无治疗 6:组合项多列 既往史 7:化验)
+     */
+    private Integer tagType;
+
+    /**
+     * 控件类型(0:无类型,默认值 1:下拉单选 2:下拉多选 3:纯文本 4:待定 5:待定 6:文本框 7:数字键盘文本框 99:联合推送)
+     */
+    private Integer controlType;
+
+    /**
+     * 类型(1:症状 3:其他史 4:查体,5:化验 6:辅检 7:诊断)
+     */
+    private Integer type;
+
+
+    /**
+     * 元素类型
+     */
+    private Integer itemType;
+
+    /**
+     * 前置内容
+     */
+    private String labelPrefix;
+
+    /**
+     * 后置内容
+     */
+    private String labelSuffix;
+
+    /**
+     * 图片显示地址
+     */
+    private String url;
+
+    /**
+     * 患者界面描述
+     */
+    private String description;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 99 - 0
precman-service/src/main/java/com/diagbot/entity/QuestionMapping.java

@@ -0,0 +1,99 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标签映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@TableName("prec_question_mapping")
+@Getter
+@Setter
+public class QuestionMapping 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;
+
+    /**
+     * 上级question
+     */
+    private Long parentQuestion;
+
+    /**
+     * 下级question
+     */
+    private Long sonQuestion;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 标签显示位置(0:在标签后,1:在标签前)
+     */
+    private Integer position;
+
+    /**
+     * 填写单显示位置(0:左, 1:上)
+     */
+    private Integer formPosition;
+
+    /**
+     * 互斥类型(0:不互斥, 1:互斥 主要用在组合项:例如既往史无殊)
+     */
+    private Integer exclusionType;
+
+    /**
+     * 主症状和伴随症状对应的question类型(0:症状公用 1:主症状特有 2:伴随症状特有 )
+     */
+    private Integer symptomType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 22 - 0
precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionInfoWrapper.java

@@ -0,0 +1,22 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.QuestionInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 标签扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-11-15
+ */
+@Getter
+@Setter
+public class QuestionInfoWrapper extends QuestionInfo {
+
+    private Long parentQuestion; //父级问题ID
+    private Integer exclusionType; //互斥类型
+
+}

+ 47 - 0
precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java

@@ -0,0 +1,47 @@
+package com.diagbot.entity.wrapper;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 标签映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@Getter
+@Setter
+public class QuestionMappingWrapper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 上级question
+     */
+    private Long parentQuestion;
+
+    /**
+     * 下级question
+     */
+    private Long sonQuestion;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 互斥类型(0:不互斥, 1:互斥 主要用在组合项:例如既往史无殊)
+     */
+    private Integer exclusionType;
+
+}

+ 40 - 0
precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java

@@ -0,0 +1,40 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.QuestionDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 标签保存参数
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+
+@Getter
+@Setter
+public class QuestionWrapper implements Serializable {
+    private Long id; //主键
+    private String tagName; //标签名
+    private String name; //界面名称
+    private Integer sexType; //性别(1:男 2:女 3:通用)
+    private Integer ageBegin; //最小年龄
+    private Integer ageEnd; //最大年龄
+    private Integer tagType; //标签显示类型
+    private Integer controlType; //控件类型
+    private Integer type; //类型(1:症状 3:其他史 4:查体,5:化验 6:辅检 7:诊断,8:药品,9:药品分类 21:量表,22:推送指标)
+    private Integer itemType; //元素类型
+    private String labelPrefix; //前置内容
+    private String labelSuffix; //后置内容
+    private String url; //图片显示地址
+    private String description; //患者界面描述
+    private String remark; //备注
+    private List<QuestionDetail> questionDetails = new ArrayList<>(); //明细
+    private List<QuestionMappingWrapper> questionMappings = new ArrayList<>(); //映射关系
+}

+ 51 - 0
precman-service/src/main/java/com/diagbot/enums/InsertOrUpdateEnum.java

@@ -0,0 +1,51 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum InsertOrUpdateEnum implements KeyedNamed {
+    Insert(1, "新增"),
+    Update(2, "修改");
+
+    @Setter
+    private Integer key;
+
+    @Setter
+    private String name;
+
+    InsertOrUpdateEnum(Integer key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static InsertOrUpdateEnum getEnum(Integer key) {
+        for (InsertOrUpdateEnum item : InsertOrUpdateEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(Integer key) {
+        InsertOrUpdateEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 50 - 0
precman-service/src/main/java/com/diagbot/enums/TagTypeEnum.java

@@ -0,0 +1,50 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:标签显示类型
+ * @Author:zhoutg
+ * @time: 2018/11/21 11:39
+ */
+public enum TagTypeEnum implements KeyedNamed {
+    T1(1, "单项单列"),
+    T4(4, "横铺多标签形式"),
+    T6(6, "组合项多列");
+
+    @Setter
+    private Integer key;
+
+    @Setter
+    private String name;
+
+    TagTypeEnum(Integer key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static TagTypeEnum getEnum(Integer key) {
+        for (TagTypeEnum item : TagTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(Integer key) {
+        TagTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 34 - 0
precman-service/src/main/java/com/diagbot/facade/DictionaryFacade.java

@@ -0,0 +1,34 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.DictionaryInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.DictionaryInfoServiceImpl;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class DictionaryFacade extends DictionaryInfoServiceImpl {
+
+    /**
+     * 返回字典信息
+     *
+     * @return
+     */
+    public Map<Long, List<DictionaryInfo>> getList() {
+        List<DictionaryInfo> list = this.list(new QueryWrapper<DictionaryInfo>()
+                .in("return_type", ListUtil.arrayToList(new Long[]{0L, 1L}))
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByAsc("group_type", "order_no"));
+        return EntityUtil.makeEntityListMap(list, "groupType");
+    }
+}

+ 88 - 0
precman-service/src/main/java/com/diagbot/facade/QuestionDetailFacade.java

@@ -0,0 +1,88 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.QuestionDetail;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QuestionDetailServiceImpl;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QuestionDetailFacade extends QuestionDetailServiceImpl {
+
+    /**
+     * 根据questionId删除明细
+     *
+     * @param map
+     * @return
+     */
+    public void deleteByQuestionIdFac(Map map) {
+        this.deleteByQuestionIds(map);
+    }
+
+
+    /**
+     * 根据questionId删除明细
+     *
+     * @param list
+     * @return
+     */
+    public void saveBatchFac(List<QuestionDetail> list) {
+        super.saveBatch(list);
+    }
+
+
+    /**
+     * 根据id获取标签明细
+     *
+     * @param questionId 标签id
+     * @return 标签内容
+     */
+    public List<QuestionDetail> getByQuestionId(Long questionId) {
+        List<QuestionDetail> questionDetailList = new ArrayList<>();
+        if (questionId == null) {
+            return questionDetailList;
+        }
+        QueryWrapper queryWrapper = new QueryWrapper();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        queryWrapper.eq("question_id", questionId);
+        queryWrapper.orderByAsc("order_no");
+        questionDetailList = this.list(queryWrapper);
+        return questionDetailList;
+    }
+
+
+
+    /**
+     * 根据id获取标签明细
+     *
+     * @param questionIds 标签ids
+     * @return 标签内容
+     */
+    public Map<Long, List<QuestionDetail>> getByQuestionIds(List<Long> questionIds) {
+        Map<Long, List<QuestionDetail>> map = new LinkedHashMap<>();
+        if (ListUtil.isEmpty(questionIds)) {
+            return map;
+        }
+        QueryWrapper queryWrapper = new QueryWrapper();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        queryWrapper.in("question_id", questionIds);
+        queryWrapper.orderByAsc("question_id", "order_no");
+        List<QuestionDetail> questionDetailList = this.list(queryWrapper);
+        if (ListUtil.isNotEmpty(questionDetailList)) {
+            map = EntityUtil.makeEntityListMap(questionDetailList, "questionId");
+        }
+        return map;
+    }
+}

+ 482 - 0
precman-service/src/main/java/com/diagbot/facade/QuestionFacade.java

@@ -0,0 +1,482 @@
+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.client.UserServiceClient;
+import com.diagbot.dto.QuestionDTO;
+import com.diagbot.dto.QuestionPageDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.QuestionDetail;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.entity.QuestionMapping;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+import com.diagbot.entity.wrapper.QuestionMappingWrapper;
+import com.diagbot.entity.wrapper.QuestionWrapper;
+import com.diagbot.enums.InsertOrUpdateEnum;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.TagTypeEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.QuestionDetailService;
+import com.diagbot.service.QuestionInfoService;
+import com.diagbot.service.QuestionMappingService;
+import com.diagbot.service.impl.QuestionInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.DeleteQuestionVO;
+import com.diagbot.vo.QuestionIdsVO;
+import com.diagbot.vo.QuestionIndexSubVO;
+import com.diagbot.vo.QuestionIndexVO;
+import com.diagbot.vo.QuestionPageVO;
+import com.diagbot.vo.QuestionSaveVO;
+import com.diagbot.vo.QuestionVO;
+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.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QuestionFacade extends QuestionInfoServiceImpl {
+
+    @Autowired
+    QuestionDetailFacade questionDetailFacade;
+    @Autowired
+    @Qualifier("questionInfoServiceImpl")
+    QuestionInfoService questionInfoService;
+    @Autowired
+    @Qualifier("questionDetailServiceImpl")
+    QuestionDetailService questionDetailService;
+    @Autowired
+    @Qualifier("questionMappingServiceImpl")
+    QuestionMappingService questionMappingService;
+    @Autowired
+    QuestionMappingFacade questionMappingFacade;
+    @Autowired
+    UserServiceClient userServiceClient;
+
+    /**
+     * 标签保存
+     *
+     * @param questionSaveVO
+     */
+    public void saveOrUpdate(QuestionSaveVO questionSaveVO) {
+        QuestionWrapper questionWrapper = questionSaveVO.getQuestionWrapper();
+        CommonParam param = initCommonParam();
+        saveQuestionInfo(questionWrapper, param); //保存|修改主表信息
+        switch (TagTypeEnum.getEnum(questionWrapper.getTagType())) {
+            case T1:   //单项,例如:程度、体温
+                saveQuestionDetail(questionWrapper, param);
+                break;
+            case T4:  //组合项,例如:咳嗽
+            case T6:  // 组合项,例如:既往史
+                saveQuestionMapping(questionWrapper, param);
+                break;
+            default:
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "请选择标签显示类型");
+        }
+    }
+
+
+    /**
+     * 初始化参数
+     *
+     * @return
+     */
+    public CommonParam initCommonParam() {
+        CommonParam param = new CommonParam();
+        String person = UserUtils.getCurrentPrincipleID();
+        param.setNow(DateUtil.now());
+        param.setPerson(person);
+        param.setInsertOrUpdate(InsertOrUpdateEnum.Insert.getKey());
+        return param;
+    }
+
+
+    /**
+     * 保存映射关系
+     *
+     * @param questionWrapper
+     * @param param
+     */
+    public void saveQuestionMapping(QuestionWrapper questionWrapper, CommonParam param) {
+        QuestionInfo questionInfo = param.getQuestionInfo();
+        Date now = param.getNow();
+        String person = param.getPerson();
+        //先删除原明细,再插入新明细
+        deleteMapping(questionInfo.getId(), param);//删除原映射关系
+        List<QuestionMappingWrapper> questionMappings = questionWrapper.getQuestionMappings();
+        if (ListUtil.isNotEmpty(questionMappings)) {
+            saveMapping(questionMappings, person, now, questionInfo.getId());
+        }
+    }
+
+
+    /**
+     * 删除映射关系
+     *
+     * @param questionId
+     * @param param
+     */
+    public void deleteMapping(Long questionId, CommonParam param) {
+        questionMappingFacade.update(new QuestionMapping(),
+                new UpdateWrapper<QuestionMapping>()
+                        .eq("parent_question", questionId)
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .set("gmt_modified", param.getNow())
+                        .set("modifier", param.getPerson())
+                        .set("is_deleted", IsDeleteEnum.Y.getKey()));
+    }
+
+
+    /**
+     * 保存映射关系
+     *
+     * @param questionMappings
+     * @param person
+     * @param now
+     * @param id
+     */
+    public void saveMapping(List<QuestionMappingWrapper> questionMappings, String person, Date now, Long id) {
+        List<QuestionMapping> saveMapping = new ArrayList<>();
+        for (QuestionMappingWrapper mapping : questionMappings) {
+            QuestionMapping bean = new QuestionMapping();
+            BeanUtil.copyProperties(mapping, bean);
+            bean.setId(null); //防止前端传参,将前端的id置空自动插入
+            bean.setCreator(person);
+            bean.setGmtCreate(now);
+            bean.setModifier(person);
+            bean.setGmtModified(now);
+            bean.setParentQuestion(id);
+            saveMapping.add(bean);
+        }
+        questionMappingService.saveBatch(saveMapping);
+    }
+
+
+    /**
+     * 保存明细
+     *
+     * @param questionWrapper
+     * @param param
+     */
+    public void saveQuestionDetail(QuestionWrapper questionWrapper, CommonParam param) {
+        QuestionInfo questionInfo = param.getQuestionInfo();
+        Date now = param.getNow();
+        String person = param.getPerson();
+        //先删除原明细,再插入新明细
+        questionDetailFacade.update(new QuestionDetail(), //删除原明细
+                new UpdateWrapper<QuestionDetail>()
+                        .eq("question_id", questionInfo.getId())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .set("gmt_modified", now)
+                        .set("modifier", person)
+                        .set("is_deleted", IsDeleteEnum.Y.getKey()));
+        List<QuestionDetail> questionDetails = questionWrapper.getQuestionDetails();
+        if (ListUtil.isNotEmpty(questionDetails)) {
+            List<QuestionDetail> saveDetail = new ArrayList<>();
+            int i = 1;
+            for (QuestionDetail detail : questionDetails) {
+                QuestionDetail bean = new QuestionDetail();
+                BeanUtil.copyProperties(detail, bean);
+                bean.setId(null); //防止前端传参,将前端的id置空自动插入
+                bean.setCreator(person);
+                bean.setGmtCreate(now);
+                bean.setModifier(person);
+                bean.setGmtModified(now);
+                bean.setQuestionId(questionInfo.getId());
+                bean.setOrderNo(i++);
+                saveDetail.add(bean);
+            }
+            questionDetailService.saveBatch(saveDetail);
+        }
+    }
+
+
+    /**
+     * 保存主表
+     *
+     * @param questionWrapper
+     * @param param
+     */
+    public void saveQuestionInfo(QuestionWrapper questionWrapper, CommonParam param) {
+        QuestionInfo questionInfo = new QuestionInfo();
+        if (questionWrapper.getId() != null) {
+            questionInfo = this.getOne(new QueryWrapper<QuestionInfo>()
+                    .eq("id", questionWrapper.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()));
+            if (questionInfo == null) { //校验
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标签不存在");
+            }
+            param.setInsertOrUpdate(InsertOrUpdateEnum.Update.getKey());
+        }
+        BeanUtil.copyProperties(questionWrapper, questionInfo);
+        List<QuestionInfo> questionInfoList = this.list(new QueryWrapper<QuestionInfo>()
+                .eq("tag_name", questionInfo.getTagName())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("type", questionInfo.getType())
+                .ne("id", questionInfo.getId() == null ? -1 : questionInfo.getId()));
+        if (ListUtil.isNotEmpty(questionInfoList)) { //标签type、tagName唯一
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标签系统名称已重复,无法建立");
+        }
+        if (InsertOrUpdateEnum.Insert.getKey() == param.getInsertOrUpdate()) {
+            questionInfo.setCreator(param.getPerson()); //创建人
+            questionInfo.setGmtCreate(param.getNow());//创建时间
+        }
+        questionInfo.setGmtModified(param.getNow());//修改时间
+        questionInfo.setModifier(param.getPerson());//修改人
+        param.setQuestionInfo(questionInfo);
+        this.saveOrUpdate(questionInfo);
+    }
+
+
+    /**
+     * 标签列表
+     *
+     * @param questionPageVO
+     * @return
+     */
+    public IPage<QuestionPageDTO> getListFac(QuestionPageVO questionPageVO) {
+        IPage<QuestionPageDTO> res = this.getList(questionPageVO);
+        if (res.getTotal() <= 0) {
+            return res;
+        }
+        List<String> personIds = res.getRecords().stream().map(row -> row.getModifier()).collect(Collectors.toList());
+        RespDTO<Map<String, String>> mapRespDTO = userServiceClient.getUserInfoByIds(personIds);
+        if (mapRespDTO == null || !CommonErrorCode.OK.getCode().equals(mapRespDTO.code)) {
+            throw new CommonException(CommonErrorCode.RPC_ERROR, "获取操作人失败");
+        }
+        for (QuestionPageDTO bean : res.getRecords()) {
+            bean.setModifier(mapRespDTO.data.get(bean.getModifier()));
+        }
+        return res;
+    }
+
+
+    /**
+     * 根据id删除标签
+     *
+     * @param deleteQuestionVO
+     * @return
+     */
+    public Boolean deleteByIdsFac(DeleteQuestionVO deleteQuestionVO) {
+        String ids = deleteQuestionVO.getIds();
+        if (StringUtil.isEmpty(ids)) {
+            return true;
+        }
+        List<String> idList = Arrays.asList(ids.split(","));
+        StringBuffer errMsg = new StringBuffer();
+        Date now = DateUtil.now();
+        String person = UserUtils.getCurrentPrincipleID();
+        for (String id : idList) {
+            Map paramMap = new HashMap<>();
+            paramMap.put("delete", IsDeleteEnum.Y.getKey());
+            paramMap.put("ids", Arrays.asList(ids.split(",")));
+            paramMap.put("gmtModified", now);
+            paramMap.put("modifier", person);
+            //删除自身
+            this.deleteByIds(paramMap);
+            //删除明细
+            questionDetailFacade.deleteByQuestionIdFac(paramMap);
+            //删除映射关系
+            questionMappingFacade.deleteByIdsFac(paramMap);
+            //TODO 删除映射关系或检查抛异常
+        }
+        return true;
+    }
+
+
+    /**
+     * 检索
+     *
+     * @param questionIndexVO
+     * @return
+     */
+    public List<QuestionInfo> indexFac(QuestionIndexVO questionIndexVO) {
+        Map<String, Object> paramMap = new HashMap<>();
+        paramMap.put("age", questionIndexVO.getAge());
+        paramMap.put("sexType", questionIndexVO.getSexType());
+        paramMap.put("tagName", questionIndexVO.getTagName());
+        paramMap.put("type", questionIndexVO.getType());
+        paramMap.put("controlType", questionIndexVO.getControlType());
+        paramMap.put("notIds", questionIndexVO.getNotIds());
+        paramMap.put("tagType", questionIndexVO.getTagType());
+        paramMap.put("existName", questionIndexVO.getExistName());
+        paramMap.put("notTagType", questionIndexVO.getNotTagType());
+        paramMap.put("notControlType", questionIndexVO.getNotControlType());
+        List<QuestionInfo> res = this.index(paramMap);
+        return res;
+    }
+
+    /**
+     * 根据主标签id 检索子标签
+     *
+     * @param questionIndexSubVO
+     * @return
+     */
+    public List<QuestionInfo> indexSub(QuestionIndexSubVO questionIndexSubVO) {
+        Map<String, Object> paramMap = new HashMap<>();
+        paramMap.put("age", questionIndexSubVO.getAge());
+        paramMap.put("sexType", questionIndexSubVO.getSexType());
+        paramMap.put("tagName", questionIndexSubVO.getTagName());
+        paramMap.put("type", questionIndexSubVO.getType());
+        paramMap.put("controlType", questionIndexSubVO.getControlType());
+        paramMap.put("notIds", questionIndexSubVO.getNotIds());
+        paramMap.put("tagType", questionIndexSubVO.getTagType());
+        paramMap.put("existName", questionIndexSubVO.getExistName());
+        paramMap.put("notTagType", questionIndexSubVO.getNotTagType());
+        paramMap.put("notControlType", questionIndexSubVO.getNotControlType());
+
+        QueryWrapper<QuestionMapping> questionMappingQueryWrapper = new QueryWrapper<>();
+        questionMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("parent_question", questionIndexSubVO.getParentId());
+        List<QuestionMapping> questionMappingList = questionMappingFacade.list(questionMappingQueryWrapper);
+        if (ListUtil.isNotEmpty(questionMappingList)) {
+            List<Long> sonIds = questionMappingList.stream().map(questionMapping -> questionMapping.getSonQuestion()).collect(Collectors.toList());
+            paramMap.put("ids", sonIds);
+        }
+        List<QuestionInfo> res = this.index(paramMap);
+        return res;
+    }
+
+
+    /**
+     * 根据参数返回标签内容
+     *
+     * @param questionVO 获取标签内容参数
+     * @return 标签内容
+     */
+    public QuestionDTO getById(QuestionVO questionVO) {
+        Map paramMap = new HashMap<>();
+        paramMap.put("sexType", questionVO.getSexType());
+        paramMap.put("age", questionVO.getAge());
+        paramMap.put("id", questionVO.getId());
+        QuestionInfo questionInfo = this.getByParam(paramMap);
+        if (questionInfo == null) { //无数据直接返回,不通过报错的形式返回
+            return new QuestionDTO();
+        }
+        QuestionDTO res = new QuestionDTO();
+        BeanUtil.copyProperties(questionInfo, res);
+
+        //获取明细项
+        List<QuestionDetail> questionDetailList = questionDetailFacade.getByQuestionId(questionVO.getId());
+        res.setQuestionDetailList(questionDetailList);
+
+        //获取子标签
+        List<QuestionInfoWrapper> questionMapping = this.getByQuestionMapping(paramMap);
+        List<QuestionDTO> sonQuestionList = BeanUtil.listCopyTo(questionMapping, QuestionDTO.class);
+        res.setQuestionMapping(sonQuestionList);
+        //获取子标签的明细项
+        if (ListUtil.isNotEmpty(sonQuestionList)) {
+            Map paramMap1 = new HashMap<>();
+            paramMap1.put("sexType", questionVO.getSexType());
+            paramMap1.put("age", questionVO.getAge());
+            List<Long> sonQuestionIds = sonQuestionList.stream()
+                    .map(artist -> artist.getId())
+                    .collect(Collectors.toList());
+            Map<Long, List<QuestionDetail>> sonQuestionMap = questionDetailFacade.getByQuestionIds(sonQuestionIds);
+            paramMap1.put("ids", sonQuestionIds);
+            //获取第二级子标签
+            List<QuestionInfoWrapper> questionMapping1 = this.getByQuestionMapping(paramMap1);
+            Map<Long, List<QuestionInfoWrapper>> qm1 = EntityUtil.makeEntityListMap(questionMapping1, "parentQuestion");
+            for (QuestionDTO bean : sonQuestionList) {
+                List<QuestionDetail> questionDetailList1 = sonQuestionMap.get(bean.getId());
+                if (ListUtil.isEmpty(questionDetailList1)) {
+                    questionDetailList1 = new ArrayList<>();
+                }
+                bean.setQuestionDetailList(questionDetailList1);
+                List<QuestionDTO> sonQuestionList1 = new ArrayList<>();
+                if (ListUtil.isNotEmpty(qm1.get(bean.getId()))) {
+                    sonQuestionList1 = BeanUtil.listCopyTo(qm1.get(bean.getId()), QuestionDTO.class);
+                }
+                bean.setQuestionMapping(sonQuestionList1);
+
+                List<Long> sonQuestionIds1 = sonQuestionList1.stream()
+                        .map(artist -> artist.getId())
+                        .collect(Collectors.toList());
+                Map<Long, List<QuestionDetail>> sonQuestionMap1 = questionDetailFacade.getByQuestionIds(sonQuestionIds1);
+                for (QuestionDTO questionDTO : sonQuestionList1) {
+                    //获取二级子明细项
+                    List<QuestionDetail> questionDetailList2 = sonQuestionMap1.get(questionDTO.getId());
+                    if (ListUtil.isEmpty(questionDetailList2)) {
+                        questionDetailList2 = new ArrayList<>();
+                    }
+                    questionDTO.setQuestionDetailList(questionDetailList2);
+                }
+
+            }
+        }
+        return res;
+    }
+
+
+    /**
+     * 查询多个id返回标签内容
+     *
+     * @param questionIdsVO 获取标签内容参数
+     * @return 标签内容
+     */
+    public Map<Long, Object> getByIds(QuestionIdsVO questionIdsVO) {
+        Map<Long, Object> data = new HashMap<>();
+        if (StringUtil.isEmpty(questionIdsVO.getIds())) {
+            return data;
+        }
+        String[] ids = questionIdsVO.getIds().split(",");
+        for (String id : ids) {
+            QuestionVO questionVO = new QuestionVO();
+            questionVO.setId(Long.parseLong(id));
+            questionVO.setAge(questionIdsVO.getAge());
+            questionVO.setSexType(questionIdsVO.getSexType());
+            QuestionDTO item = this.getById(questionVO);
+            data.put(item.getId(), item);
+        }
+        return data;
+    }
+
+    /**
+     * 获取所有需要删除的缓存id列表
+     *
+     * @param id
+     * @return
+     */
+    public List<Long> getDeleteId(Long id) {
+        List<Long> list = new ArrayList<>();
+        list.add(id); //添加自身id
+        getParent(id, list); //添加父级
+        return list;
+    }
+
+
+    public void getParent(Long id, List<Long> list) {
+        List<QuestionMapping> questionMappingList = questionMappingFacade.list(
+                new QueryWrapper<QuestionMapping>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("son_question", id)
+        );
+        if (ListUtil.isNotEmpty(questionMappingList)) {
+            for (QuestionMapping questionMapping : questionMappingList) {
+                Long parentId = questionMapping.getParentQuestion();
+                if (!list.contains(parentId)) {
+                    list.add(parentId);
+                    getParent(parentId, list);
+                }
+            }
+        }
+    }
+}

+ 25 - 0
precman-service/src/main/java/com/diagbot/facade/QuestionMappingFacade.java

@@ -0,0 +1,25 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.QuestionMappingServiceImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QuestionMappingFacade extends QuestionMappingServiceImpl {
+
+    /**
+     * 根据id删除标签
+     *
+     * @param map
+     * @return
+     */
+    public void deleteByIdsFac(Map map) {
+        this.deleteByIds(map);
+    }
+}

+ 16 - 0
precman-service/src/main/java/com/diagbot/mapper/DictionaryInfoMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.DictionaryInfo;
+
+/**
+ * <p>
+ * icss字典表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+public interface DictionaryInfoMapper extends BaseMapper<DictionaryInfo> {
+
+}

+ 19 - 0
precman-service/src/main/java/com/diagbot/mapper/QuestionDetailMapper.java

@@ -0,0 +1,19 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.QuestionDetail;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签明细表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+public interface QuestionDetailMapper extends BaseMapper<QuestionDetail> {
+
+    public void deleteByQuestionIds(Map map);
+}

+ 60 - 0
precman-service/src/main/java/com/diagbot/mapper/QuestionInfoMapper.java

@@ -0,0 +1,60 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QuestionPageDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+import com.diagbot.vo.QuestionPageVO;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 Mapper 接口
+ * </p>
+ *
+ * @author zhaops
+ * @since 2018-11-23
+ */
+public interface QuestionInfoMapper extends BaseMapper<QuestionInfo> {
+
+    /**
+     *  根据参数获取标签信息
+     * @param map 参数
+     * @return
+     */
+    public QuestionInfo getByParam(Map map);
+
+    public void deleteByIds(Map map);
+
+    public List<QuestionInfo> index(Map map);
+
+
+    /**
+     * 获取关联的父级标签
+     *
+     * @param id
+     * @return
+     */
+    public List<QuestionInfo> getParent(Long id);
+
+
+    /**
+     * 获取标签列表
+     *
+     * @param questionPageVO
+     * @return
+     */
+    public IPage<QuestionPageDTO> getList(QuestionPageVO questionPageVO);
+
+
+    /**
+     *  根据questionMapping获取标签信息
+     * @param map 参数
+     * @return
+     */
+    public List<QuestionInfoWrapper> getByQuestionMapping(Map map);
+
+
+}

+ 19 - 0
precman-service/src/main/java/com/diagbot/mapper/QuestionMappingMapper.java

@@ -0,0 +1,19 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.QuestionMapping;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签映射表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+public interface QuestionMappingMapper extends BaseMapper<QuestionMapping> {
+
+    public void deleteByIds(Map map);
+}

+ 16 - 0
precman-service/src/main/java/com/diagbot/service/DictionaryInfoService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.DictionaryInfo;
+
+/**
+ * <p>
+ * icss字典表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+public interface DictionaryInfoService extends IService<DictionaryInfo> {
+
+}

+ 26 - 0
precman-service/src/main/java/com/diagbot/service/QuestionDetailService.java

@@ -0,0 +1,26 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.QuestionDetail;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签明细表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+public interface QuestionDetailService extends IService<QuestionDetail> {
+
+
+    /**
+     * 根据id删除标签
+     *
+     * @param map
+     * @return
+     */
+    public void deleteByQuestionIds(Map map);
+}

+ 81 - 0
precman-service/src/main/java/com/diagbot/service/QuestionInfoService.java

@@ -0,0 +1,81 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.QuestionPageDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+import com.diagbot.vo.QuestionPageVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 服务类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2018-11-23
+ */
+public interface QuestionInfoService extends IService<QuestionInfo> {
+
+
+    /**
+     * 根据参数获取标签信息
+     *
+     * @param map 参数
+     * @return
+     */
+    public QuestionInfo getByParam(Map map);
+
+
+    /**
+     * 根据id删除标签
+     *
+     * @param map
+     * @return
+     */
+    public void deleteByIds(Map map);
+
+
+
+    /**
+     * 检索
+     *
+     * @param map
+     * @return
+     */
+    public List<QuestionInfo> index(Map map);
+
+
+    /**
+     * 获取标签列表
+     *
+     * @param questionPageVO
+     * @return
+     */
+    IPage<QuestionPageDTO> getList(QuestionPageVO questionPageVO);
+
+
+
+    /**
+     * 获取关联的父级标签
+     *
+     * @param id
+     * @return
+     */
+    public List<QuestionInfo> getParentQuestion(Long id);
+
+
+    /**
+     * 根据questionMapping获取标签信息
+     *
+     * @param map 参数
+     * @return
+     */
+    public List<QuestionInfoWrapper> getByQuestionMapping(Map map);
+
+}
+
+

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

@@ -0,0 +1,25 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.QuestionMapping;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签映射表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+public interface QuestionMappingService extends IService<QuestionMapping> {
+
+    /**
+     * 根据id删除标签
+     *
+     * @param map
+     * @return
+     */
+    public void deleteByIds(Map map);
+}

+ 20 - 0
precman-service/src/main/java/com/diagbot/service/impl/DictionaryInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.DictionaryInfo;
+import com.diagbot.mapper.DictionaryInfoMapper;
+import com.diagbot.service.DictionaryInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * icss字典表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+@Service
+public class DictionaryInfoServiceImpl extends ServiceImpl<DictionaryInfoMapper, DictionaryInfo> implements DictionaryInfoService {
+
+}

+ 26 - 0
precman-service/src/main/java/com/diagbot/service/impl/QuestionDetailServiceImpl.java

@@ -0,0 +1,26 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.QuestionDetail;
+import com.diagbot.mapper.QuestionDetailMapper;
+import com.diagbot.service.QuestionDetailService;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签明细表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@Service
+public class QuestionDetailServiceImpl extends ServiceImpl<QuestionDetailMapper, QuestionDetail> implements QuestionDetailService {
+
+    @Override
+    public void deleteByQuestionIds(Map map) {
+        baseMapper.deleteByQuestionIds(map);
+    }
+}

+ 56 - 0
precman-service/src/main/java/com/diagbot/service/impl/QuestionInfoServiceImpl.java

@@ -0,0 +1,56 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.QuestionPageDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+import com.diagbot.mapper.QuestionInfoMapper;
+import com.diagbot.service.QuestionInfoService;
+import com.diagbot.vo.QuestionPageVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 服务实现类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2018-11-23
+ */
+@Service
+public class QuestionInfoServiceImpl extends ServiceImpl<QuestionInfoMapper, QuestionInfo> implements QuestionInfoService {
+
+    @Override
+    public QuestionInfo getByParam(Map map) {
+        return baseMapper.getByParam(map);
+    }
+
+    @Override
+    public void deleteByIds(Map map) {
+        baseMapper.deleteByIds(map);
+    }
+
+    @Override
+    public List<QuestionInfo> index(Map map) {
+        return baseMapper.index(map);
+    }
+
+    @Override
+    public List<QuestionInfo> getParentQuestion(Long id) {
+        return baseMapper.getParent(id);
+    }
+
+    @Override
+    public List<QuestionInfoWrapper> getByQuestionMapping(Map map) {
+        return baseMapper.getByQuestionMapping(map);
+    }
+
+    @Override
+    public IPage<QuestionPageDTO> getList(QuestionPageVO questionPageVO) {
+        return baseMapper.getList(questionPageVO);
+    }
+}

+ 26 - 0
precman-service/src/main/java/com/diagbot/service/impl/QuestionMappingServiceImpl.java

@@ -0,0 +1,26 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.QuestionMapping;
+import com.diagbot.mapper.QuestionMappingMapper;
+import com.diagbot.service.QuestionMappingService;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签映射表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@Service
+public class QuestionMappingServiceImpl extends ServiceImpl<QuestionMappingMapper, QuestionMapping> implements QuestionMappingService {
+
+    @Override
+    public void deleteByIds(Map map) {
+        baseMapper.deleteByIds(map);
+    }
+}

+ 16 - 0
precman-service/src/main/java/com/diagbot/vo/DeleteQuestionVO.java

@@ -0,0 +1,16 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: ztg
+ * @time: 2019/1/28 15:45
+ */
+@Getter
+@Setter
+public class DeleteQuestionVO {
+    private Integer type;
+    private String ids;
+}

+ 17 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionIdsVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class QuestionIdsVO {
+    private String ids;
+    private Integer sexType;
+    private Integer age;
+}

+ 18 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionIndexSubVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:检索标签子项
+ * @Author:zhaops
+ * @time: 2019/4/22 16:39
+ */
+@Getter
+@Setter
+public class QuestionIndexSubVO extends QuestionIndexVO {
+    @NotNull(message = "请输入父标签id")
+    private Long parentId;
+}

+ 27 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/29 15:09
+ */
+@Getter
+@Setter
+public class QuestionIndexVO {
+    private String tagName;
+    private Integer sexType;
+    private Integer age;
+    private Integer type;
+    private List<Integer> controlType;
+    private List<Integer> tagType;
+    private List<Long> notIds;
+    private String existName; //是否重复
+    private List<Integer> notTagType;
+    private List<Integer> notControlType;
+    private List<String> filterList;
+}

+ 23 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionPageVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 标签列表入参
+ * @Author: ztg
+ * @Date: 2018/12/13 10:07
+ */
+@Getter
+@Setter
+public class QuestionPageVO extends Page {
+
+    private String type;
+    private String tagName;
+    private List<Integer> tagTypeList;
+    private List<Integer> controlTypeList;
+    private List<Integer> notTypeList;
+}

+ 16 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionSaveVO.java

@@ -0,0 +1,16 @@
+package com.diagbot.vo;
+
+import com.diagbot.entity.wrapper.QuestionWrapper;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 标签保存入参
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class QuestionSaveVO {
+    private QuestionWrapper questionWrapper; //标签相关
+}

+ 17 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class QuestionVO {
+    private Long id;
+    private Integer sexType;
+    private Integer age;
+}

+ 46 - 0
precman-service/src/main/java/com/diagbot/web/DictionaryInfoController.java

@@ -0,0 +1,46 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.DictionaryInfo;
+import com.diagbot.facade.DictionaryFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * icss字典表 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+@RequestMapping("/dictionaryInfo")
+@RestController
+@SuppressWarnings("unchecked")
+@Api(value = "字典信息", tags = { "字典信息" })
+public class DictionaryInfoController {
+
+
+    @Autowired
+    DictionaryFacade dictionaryFacade;
+
+    @ApiOperation(value = "返回字典信息[by:zhoutg]",
+            notes = "")
+    @PostMapping("/getList")
+    @SysLogger("getList")
+    @Transactional
+    public RespDTO<Map<Long, List<DictionaryInfo>>> getList() {
+        Map<Long, List<DictionaryInfo>> data = dictionaryFacade.getList();
+        return RespDTO.onSuc(data);
+    }
+}

+ 109 - 0
precman-service/src/main/java/com/diagbot/web/QuestionInfoController.java

@@ -0,0 +1,109 @@
+package com.diagbot.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QuestionDTO;
+import com.diagbot.dto.QuestionPageDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.facade.QuestionFacade;
+import com.diagbot.vo.DeleteQuestionVO;
+import com.diagbot.vo.QuestionIdsVO;
+import com.diagbot.vo.QuestionIndexVO;
+import com.diagbot.vo.QuestionPageVO;
+import com.diagbot.vo.QuestionSaveVO;
+import com.diagbot.vo.QuestionVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-11-23
+ */
+@RestController
+@RequestMapping("/questionInfo")
+@SuppressWarnings("unchecked")
+@Api(value = "标签相关API——数据谨慎操作", tags = { "标签相关API——数据谨慎操作" })
+public class QuestionInfoController {
+
+    @Autowired
+    QuestionFacade questionFacade;
+
+    @ApiOperation(value = "标签新增或更新[by:zhoutg]",
+            notes = "")
+    @PostMapping("/saveOrUpdate")
+    @SysLogger("saveOrUpdate")
+    @Transactional
+    public RespDTO<Boolean> saveOrUpdate(@RequestBody QuestionSaveVO questionSaveVO) {
+        questionFacade.saveOrUpdate(questionSaveVO);
+        return RespDTO.onSuc(true);
+    }
+
+
+    @ApiOperation(value = "标签分页列表[by:zhoutg]",
+            notes = "")
+    @PostMapping("/page")
+    @SysLogger("page")
+    public RespDTO<IPage<QuestionPageDTO>> list(@RequestBody QuestionPageVO questionPageVO) {
+        IPage<QuestionPageDTO> data = questionFacade.getListFac(questionPageVO);
+        return RespDTO.onSuc(data);
+    }
+
+
+    @ApiOperation(value = "标签检索[by:zhoutg]",
+            notes = "")
+    @PostMapping("/index")
+    @SysLogger("index")
+    public RespDTO<List<QuestionInfo>> index(@RequestBody QuestionIndexVO questionIndexVO) {
+        List<QuestionInfo> data = questionFacade.indexFac(questionIndexVO);
+        return RespDTO.onSuc(data);
+    }
+
+
+    @ApiOperation(value = "标签删除[by:zhoutg]",
+            notes = "")
+    @PostMapping("/delete")
+    @SysLogger("delete")
+    @Transactional
+    public RespDTO<Boolean> delete(@RequestBody DeleteQuestionVO deleteQuestionVO) {
+        questionFacade.deleteByIdsFac(deleteQuestionVO);
+        return RespDTO.onSuc(true);
+    }
+
+
+    @ApiOperation(value = "根据参数返回标签内容[by:zhoutg]",
+            notes = "id: questionId<br>" +
+                    "sexType:性别,1:男,2:女<br>" +
+                    "age:年龄")
+    @PostMapping("/getById")
+    public RespDTO<QuestionDTO> getById(@RequestBody QuestionVO questionVO) {
+        QuestionDTO data = questionFacade.getById(questionVO);
+        return RespDTO.onSuc(data);
+    }
+
+
+    @ApiOperation(value = "查询多个id返回标签内容[by:zhoutg]",
+            notes = "ids: 多个questionId<br>" +
+                    "sexType:性别,1:男,2:女<br>" +
+                    "age:年龄")
+    @PostMapping("/getByIds")
+    public RespDTO<Map<Long, Object>> getByIds(@RequestBody QuestionIdsVO questionIdsVO) {
+        Map<Long, Object> data = questionFacade.getByIds(questionIdsVO);
+        return RespDTO.onSuc(data);
+    }
+
+}

+ 21 - 0
precman-service/src/main/resources/mapper/DictionaryInfoMapper.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.DictionaryInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.DictionaryInfo">
+        <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="group_type" property="groupType" />
+        <result column="name" property="name" />
+        <result column="val" property="val" />
+        <result column="return_type" property="returnType" />
+        <result column="order_no" property="orderNo" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 32 - 0
precman-service/src/main/resources/mapper/QuestionDetailMapper.xml

@@ -0,0 +1,32 @@
+<?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.QuestionDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QuestionDetail">
+        <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="question_id" property="questionId" />
+        <result column="name" property="name" />
+        <result column="order_no" property="orderNo" />
+        <result column="default_select" property="defaultSelect" />
+        <result column="abnormal" property="abnormal" />
+        <result column="code" property="code" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <delete id="deleteByQuestionIds" parameterType="java.util.Map">
+        update `prec_question_detail`
+        set gmt_modified = #{gmtModified}, modifier = #{modifier}, is_deleted = #{delete}
+        where is_deleted = 'N'
+        and question_id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")" >
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>

+ 179 - 0
precman-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -0,0 +1,179 @@
+<?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.QuestionInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QuestionInfo">
+        <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="tag_name" property="tagName" />
+        <result column="name" property="name" />
+        <result column="sex_type" property="sexType" />
+        <result column="age_begin" property="ageBegin" />
+        <result column="age_end" property="ageEnd" />
+        <result column="tag_type" property="tagType" />
+        <result column="control_type" property="controlType" />
+        <result column="type" property="type" />
+        <result column="item_type" property="itemType" />
+        <result column="label_prefix" property="labelPrefix" />
+        <result column="label_suffix" property="labelSuffix" />
+        <result column="url" property="url" />
+        <result column="description" property="description" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+
+
+    <delete id="deleteByIds" parameterType="java.util.Map">
+        update `prec_question_info`
+        set gmt_modified = #{gmtModified}, modifier = #{modifier}, is_deleted = #{delete}
+        where is_deleted = 'N'
+        and id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")" >
+            #{id}
+        </foreach>
+    </delete>
+
+
+    <select id="index" parameterType="java.util.Map" resultType="com.diagbot.entity.QuestionInfo">
+        select * from `prec_question_info`
+        where is_deleted = 'N'
+        <if test="tagName != null and tagName != ''">
+            and tag_name like concat("%", #{tagName}, "%")
+        </if>
+        <if test="existName != null and existName != ''">
+            and tag_name = #{existName}
+        </if>
+        <if test="sexType != null and sexType != 3 and sexType != ''">
+            and sex_type in (3, #{sexType})
+        </if>
+        <if test="age != null and age != ''">
+            <![CDATA[ and age_begin <= #{age} ]]>
+            <![CDATA[ and age_end >= #{age} ]]>
+        </if>
+        <if test="type != null and type != ''">
+            and type = #{type}
+        </if>
+        <if test="controlType != null and controlType.size() > 0">
+            and control_type in
+            <foreach  collection="controlType" item="controlType" open="("  separator=","  close=")">
+                #{controlType}
+            </foreach>
+        </if>
+        <if test="tagType != null and tagType.size() > 0">
+            and tag_type in
+            <foreach  collection="tagType" item="tagType" open="("  separator=","  close=")">
+                #{tagType}
+            </foreach>
+        </if>
+        <if test="notTagType != null and notTagType.size() > 0">
+            and tag_type not in
+            <foreach  collection="notTagType" item="notTagType" open="("  separator=","  close=")">
+                #{notTagType}
+            </foreach>
+        </if>
+        <if test="notControlType != null and notControlType.size() > 0">
+            and control_type not in
+            <foreach  collection="notControlType" item="notControlType" open="("  separator=","  close=")">
+                #{notControlType}
+            </foreach>
+        </if>
+        <if test="notIds != null and notIds.size() > 0 ">
+            and id not in
+            <foreach  collection="notIds" item="id" open="("  separator=","  close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test=" ids != null and ids.size() > 0 ">
+            and id  in
+            <foreach  collection="ids" item="id" open="("  separator=","  close=")">
+                #{id}
+            </foreach>
+        </if>
+        order by gmt_modified desc
+    </select>
+
+
+    <select id="getList" resultType="com.diagbot.dto.QuestionPageDTO">
+        SELECT a.* FROM `prec_question_info` a
+        WHERE a.is_deleted = 'N'
+        <if test="type != null and type != ''">
+            AND a.type = #{type}
+        </if>
+        <if test="tagName != null and tagName != ''">
+            AND a.tag_name like concat ('%', #{tagName}, '%')
+        </if>
+        <if test="notTypeList != null and notTypeList.size() > 0 ">
+            and a.type not in
+            <foreach  collection="notTypeList" item="notType" open="("  separator=","  close=")">
+                #{notType}
+            </foreach>
+        </if>
+        <if test="tagTypeList != null and tagTypeList.size() > 0 ">
+            and a.tag_type in
+            <foreach  collection="tagTypeList" item="tagType" open="("  separator=","  close=")">
+                #{tagType}
+            </foreach>
+        </if>
+        <if test="controlTypeList != null and controlTypeList.size() > 0 ">
+            and a.control_type in
+            <foreach  collection="controlTypeList" item="controlType" open="("  separator=","  close=")">
+                #{controlType}
+            </foreach>
+        </if>
+        order by a.gmt_modified desc
+
+    </select>
+
+
+    <select id="getParent"  resultMap="BaseResultMap">
+        SELECT a.* FROM `prec_question_info` a, prec_question_mapping b
+        where a.is_deleted = 'N' and b.is_deleted = 'N' and a.id = b.parent_question
+        and b.son_question = #{id}
+    </select>
+
+
+    <select id="getByQuestionMapping" parameterType="java.util.Map" resultType="com.diagbot.entity.wrapper.QuestionInfoWrapper">
+        select t.*, m.parent_question, m.position, m.form_position , m.exclusion_type, m.symptom_type from icss_question_info t, icss_question_mapping m
+        where t.is_deleted = 'N' and m.is_deleted = 'N' and m.son_question = t.id
+        <if test="id != null">
+            and m.parent_question = #{id}
+        </if>
+        <if test="ids != null and ids.size > 0">
+            <foreach item="myId" collection="ids" open="and(" separator="or" close=")" >
+                m.parent_question = #{myId}
+            </foreach>
+        </if>
+        <if test="sexType != null and sexType != 3 and sexType != ''">
+            and t.sex_type in (3, #{sexType})
+        </if>
+        <if test="age != null">
+            <![CDATA[ and t.age_begin <= #{age} ]]>
+            <![CDATA[ and t.age_end >= #{age} ]]>
+        </if>
+        <if test="id != null">
+            order by m.order_no
+        </if>
+        <if test="ids != null and ids.size > 0">
+            order by m.parent_question, m.order_no
+        </if>
+    </select>
+
+
+    <select id="getByParam" parameterType="java.util.Map" resultMap="BaseResultMap">
+        select * from icss_question_info  where is_deleted = 'N'
+        and id = #{id}
+        <if test="sexType != null and sexType != 3 and sexType != ''">
+            and sex_type in (3, #{sexType})
+        </if>
+        <if test="age != null and age != ''">
+            <![CDATA[ and age_begin <= #{age} ]]>
+            <![CDATA[ and age_end >= #{age} ]]>
+        </if>
+    </select>
+
+</mapper>

+ 41 - 0
precman-service/src/main/resources/mapper/QuestionMappingMapper.xml

@@ -0,0 +1,41 @@
+<?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.QuestionMappingMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QuestionMapping">
+        <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="parent_question" property="parentQuestion" />
+        <result column="son_question" property="sonQuestion" />
+        <result column="order_no" property="orderNo" />
+        <result column="position" property="position" />
+        <result column="form_position" property="formPosition" />
+        <result column="exclusion_type" property="exclusionType" />
+        <result column="symptom_type" property="symptomType" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+
+    <delete id="deleteByIds" parameterType="java.util.Map">
+        update `prec_question_mapping`
+        set gmt_modified = #{gmtModified}, modifier = #{modifier}, is_deleted = #{delete}
+        where is_deleted = 'N'
+        and
+        (
+            parent_question in
+            <foreach item="id" collection="ids" open="(" separator="," close=")" >
+                #{id}
+            </foreach>
+            or son_question in
+            <foreach item="id" collection="ids" open="(" separator="," close=")" >
+                #{id}
+            </foreach>
+        )
+    </delete>
+
+</mapper>