Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/dev/icss' into debug

Zhaops 6 gadi atpakaļ
vecāks
revīzija
663c68199d
28 mainītis faili ar 532 papildinājumiem un 77 dzēšanām
  1. 5 1
      icss-service/src/main/java/com/diagbot/dto/PushKYJDTO.java
  2. 20 4
      icss-service/src/main/java/com/diagbot/facade/IntroduceInfoFacade.java
  3. 1 1
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  4. 3 1
      icss-service/src/main/java/com/diagbot/vo/IntroduceByQuestionVO.java
  5. 3 0
      icss-service/src/main/java/com/diagbot/vo/PushKYJVO.java
  6. 3 1
      icss-service/src/main/java/com/diagbot/vo/PushVO.java
  7. 5 3
      icss-service/src/main/java/com/diagbot/web/IntroduceInfoController.java
  8. 6 5
      icss-service/src/main/java/com/diagbot/web/PushController.java
  9. 20 0
      icssman-service/src/main/java/com/diagbot/dto/DictionaryInfoDTO.java
  10. 88 0
      icssman-service/src/main/java/com/diagbot/entity/DictionaryInfo.java
  11. 4 0
      icssman-service/src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java
  12. 3 1
      icssman-service/src/main/java/com/diagbot/enums/TagTypeEnum.java
  13. 35 0
      icssman-service/src/main/java/com/diagbot/facade/DictionaryFacade.java
  14. 70 14
      icssman-service/src/main/java/com/diagbot/facade/ModuleDetailFacade.java
  15. 3 2
      icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java
  16. 106 39
      icssman-service/src/main/java/com/diagbot/facade/QuestionInfoFacade.java
  17. 7 4
      icssman-service/src/main/java/com/diagbot/facade/VitalOrderFacade.java
  18. 16 0
      icssman-service/src/main/java/com/diagbot/mapper/DictionaryInfoMapper.java
  19. 9 0
      icssman-service/src/main/java/com/diagbot/mapper/QuestionInfoMapper.java
  20. 16 0
      icssman-service/src/main/java/com/diagbot/service/DictionaryInfoService.java
  21. 9 0
      icssman-service/src/main/java/com/diagbot/service/QuestionInfoService.java
  22. 20 0
      icssman-service/src/main/java/com/diagbot/service/impl/DictionaryInfoServiceImpl.java
  23. 5 0
      icssman-service/src/main/java/com/diagbot/service/impl/QuestionInfoServiceImpl.java
  24. 2 0
      icssman-service/src/main/java/com/diagbot/vo/AddModuleDetailVO.java
  25. 1 1
      icssman-service/src/main/java/com/diagbot/vo/AddModuleInfoVO.java
  26. 45 0
      icssman-service/src/main/java/com/diagbot/web/DictionaryInfoController.java
  27. 21 0
      icssman-service/src/main/resources/mapper/DictionaryInfoMapper.xml
  28. 6 0
      icssman-service/src/main/resources/mapper/QuestionInfoMapper.xml

+ 5 - 1
icss-service/src/main/java/com/diagbot/dto/PushKYJDTO.java

@@ -14,6 +14,10 @@ import java.util.List;
 @Getter
 @Setter
 public class PushKYJDTO {
+    private List<FeatureRate> symptom;
+    private List<FeatureRate> vitals;
     private List<FeatureRate> dis;
     private List<FeatureRate> labs;
-}
+    private List<FeatureRate> pacs;
+    private List<FeatureRate> history;
+}

+ 20 - 4
icss-service/src/main/java/com/diagbot/facade/IntroduceInfoFacade.java

@@ -52,7 +52,7 @@ public class IntroduceInfoFacade extends IntroduceInfoServiceImpl {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "提示信息未维护");
         }
 
-        IntroduceDTO introduceDTO = this.getRecordById(introduceMap.getIntroduceId());
+        IntroduceDTO introduceDTO = this.getRecordByIdAndPosition(introduceMap.getIntroduceId(), introduceByQuestionVO.getPosition());
         return introduceDTO;
     }
 
@@ -84,17 +84,18 @@ public class IntroduceInfoFacade extends IntroduceInfoServiceImpl {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "提示信息未维护");
         }
 
-        IntroduceDTO introduceDTO = this.getRecordById(introduceMap.getIntroduceId());
+        IntroduceDTO introduceDTO = this.getRecordByIdAndPosition(introduceMap.getIntroduceId(), introduceByQuestionVO.getPosition());
         return introduceDTO;
     }
 
     /**
-     * 根据id获取提示信息
+     * 获取指定位置提示信息
      *
      * @param id
+     * @param position
      * @return
      */
-    public IntroduceDTO getRecordById(Long id) {
+    public IntroduceDTO getRecordByIdAndPosition(Long id, Integer position) {
         IntroduceDTO introduceDTO = new IntroduceDTO();
         IntroduceInfo introduceInfo = this.getById(id);
         if (introduceInfo == null) {
@@ -104,7 +105,12 @@ public class IntroduceInfoFacade extends IntroduceInfoServiceImpl {
         }
         BeanUtil.copyProperties(introduceInfo, introduceDTO);
 
+
         QueryWrapper<IntroduceDetail> introduceDetailQueryWrapper = new QueryWrapper<>();
+        //展示位置
+        if (position != null) {
+            introduceDetailQueryWrapper.apply("find_in_set({0},position)", position);
+        }
         introduceDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).
                 eq("introduce_id", introduceInfo.getId()).
                 orderByAsc("order_no");
@@ -112,4 +118,14 @@ public class IntroduceInfoFacade extends IntroduceInfoServiceImpl {
         introduceDTO.setIntroduceDetailList(introduceDetailList);
         return introduceDTO;
     }
+
+    /**
+     * 根据id获取提示信息
+     *
+     * @param id
+     * @return
+     */
+    public IntroduceDTO getRecordById(Long id) {
+        return getRecordByIdAndPosition(id, null);
+    }
 }

+ 1 - 1
icss-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -15,7 +15,6 @@ import com.diagbot.entity.DeptInfo;
 import com.diagbot.entity.DeptVital;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.entity.VitalOrder;
-import com.diagbot.enums.InputModeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.QuantitativeTypeEnum;
 import com.diagbot.enums.QuestionTypeEnum;
@@ -269,6 +268,7 @@ public class PushFacade {
         PushVO pushVO = new PushVO();
         pushVO.setAge(pushKYJVO.getAge());
         pushVO.setSex(pushKYJVO.getSex());
+        pushVO.setFeatureType(pushKYJVO.getFeatureType());
 
         //参数预处理
         /*String lis = "";

+ 3 - 1
icss-service/src/main/java/com/diagbot/vo/IntroduceByQuestionVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 /**
@@ -17,5 +18,6 @@ public class IntroduceByQuestionVO {
     private String tagName;
     @NotNull(message = "请输入标签类型")
     private Integer type;
-
+    @NotNull(message = "请输入展示位置")
+    private Integer position;
 }

+ 3 - 0
icss-service/src/main/java/com/diagbot/vo/PushKYJVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 
@@ -18,5 +19,7 @@ public class PushKYJVO {
     private Integer age;
     @NotNull(message = "请输入性别")
     private Integer sex;
+    @NotBlank(message = "请输入推送类型")
+    private String featureType;
     private List<LisResult> lisResultList;
 }

+ 3 - 1
icss-service/src/main/java/com/diagbot/vo/PushVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 
@@ -18,6 +19,8 @@ public class PushVO {
     private Integer age;
     @NotNull(message = "请输入性别")
     private Integer sex;
+    @NotBlank(message = "请输入推送类型")
+    private String featureType;
     private String symptom;
     private String diag;
     private String vital;
@@ -25,6 +28,5 @@ public class PushVO {
     private String pacs;
     private String past;
     private String other;
-    private String featureType;
     private Long diseaseId;
 }

+ 5 - 3
icss-service/src/main/java/com/diagbot/web/IntroduceInfoController.java

@@ -35,7 +35,8 @@ public class IntroduceInfoController {
 
     @ApiOperation(value = "根据标签id获取提示信息[by:zhaops]",
             notes = "questionId: 标签id,必填<br>" +
-                    "type:标签类型,必填")
+                    "type:标签类型,必填" +
+                    "position:展示位置(1-推送展示,2-更多展示,3-一般治疗展示,4-手术治疗展示),必填")
     @PostMapping("/getByQuestionId")
     public RespDTO<IntroduceDTO> getByQuestionId(@RequestBody @Valid IntroduceByQuestionVO introduceByQuestionVO) {
         IntroduceDTO introduceDTO = introduceInfoFacade.getByQuestionId(introduceByQuestionVO);
@@ -44,7 +45,8 @@ public class IntroduceInfoController {
 
     @ApiOperation(value = "根据标签名称获取提示信息[by:zhaops]",
             notes = "tagName: 标签名称,必填<br>" +
-                    "type:标签类型,必填")
+                    "type:标签类型,必填" +
+                    "position:展示位置(1-推送展示,2-更多展示,3-一般治疗展示,4-手术治疗展示),必填")
     @PostMapping("/getByQuestionName")
     public RespDTO<IntroduceDTO> getByQuestionName(@RequestBody @Valid IntroduceByQuestionVO introduceByQuestionVO) {
         IntroduceDTO introduceDTO = introduceInfoFacade.getByQuestionName(introduceByQuestionVO);
@@ -58,4 +60,4 @@ public class IntroduceInfoController {
         IntroduceDTO introduceDTO = introduceInfoFacade.getRecordById(id);
         return RespDTO.onSuc(introduceDTO);
     }
-}
+}

+ 6 - 5
icss-service/src/main/java/com/diagbot/web/PushController.java

@@ -42,8 +42,8 @@ public class PushController {
                     "lis:化验,Array<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型,1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案(必填),String<br>"+
-                    "diseaeId:取治疗方案的诊断,Long<br>" )
+                    "featureType:类型,1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案(必填),String<br>" +
+                    "diseaeId:取治疗方案的诊断,Long<br>")
     @PostMapping("/pushInner")
     @SysLogger("pushInner")
     public RespDTO<PushDTO> pushInner(@RequestBody @Valid PushVO pushVO) {
@@ -59,8 +59,8 @@ public class PushController {
                     "lis:化验,Array<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型,1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案(必填),String<br>"+
-                    "diseaeId:取治疗方案的诊断,Long<br>" )
+                    "featureType:类型,1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案(必填),String<br>" +
+                    "diseaeId:取治疗方案的诊断,Long<br>")
     @PostMapping("/pushText")
     @SysLogger("pushText")
     public RespDTO<PushDTO> pushText(@RequestBody @Valid PushVO pushVO) {
@@ -86,7 +86,8 @@ public class PushController {
     @ApiOperation(value = "推理接口(快易检)[by:zhaops]",
             notes = "age: 年龄(必填)<br>" +
                     "sex:性别,1:男,2:女(必填)<br>" +
-                    "lisKYJVOList:化验项列表(必填)<br>")
+                    "lisKYJVOList:化验项列表(必填)<br>" +
+                    "featureType:类型,1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案(必填),String<br>")
     @PostMapping("/pushKYJ")
     @SysLogger("pushKYJ")
     public RespDTO<PushKYJDTO> pushKYJ(@RequestBody @Valid PushKYJVO pushKYJVO) {

+ 20 - 0
icssman-service/src/main/java/com/diagbot/dto/DictionaryInfoDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.DictionaryInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 
+ * @Author: ztg
+ * @Date: 2018/12/25 15:25
+ */
+@Getter
+@Setter
+public class DictionaryInfoDTO {
+    private Long groupType;
+    private String reamrk;
+    private List<DictionaryInfo> detail;
+}

+ 88 - 0
icssman-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("icss_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;
+
+}

+ 4 - 0
icssman-service/src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java

@@ -59,7 +59,11 @@ public class QuestionMappingWrapper implements Serializable {
      */
     private Integer symptomType;
 
+    /**
+     * 文字内容
+     */
     private String text;
 
+    private QuestionWrapper questionMappingSon = new QuestionWrapper(); //第二层级的映射关系
 
 }

+ 3 - 1
icssman-service/src/main/java/com/diagbot/enums/TagTypeEnum.java

@@ -16,7 +16,9 @@ public enum TagTypeEnum implements KeyedNamed {
     T5(5, "竖铺组合项"),
     T6(6, "组合项多列"),
     T7(7, "化验类型"),
-    T8(8, "模板专用文字");
+    T8(8, "文字标签"),
+    T9(9, "空标签"),
+    T10(10, "组合项标签");
 
     @Setter
     private Integer key;

+ 35 - 0
icssman-service/src/main/java/com/diagbot/facade/DictionaryFacade.java

@@ -0,0 +1,35 @@
+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 org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+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() {
+        Map<Long, List<DictionaryInfo>> data = new LinkedHashMap<>();
+        List<DictionaryInfo> list = this.list(new QueryWrapper<DictionaryInfo>()
+                .in("return_type", new Long[]{0L, 1L})
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByAsc("group_type", "order_no"));
+        return EntityUtil.makeEntityListMap(list, "groupType");
+    }
+}

+ 70 - 14
icssman-service/src/main/java/com/diagbot/facade/ModuleDetailFacade.java

@@ -3,11 +3,15 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.entity.ModuleDetail;
-import com.diagbot.entity.ModuleInfo;
+import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.TagTypeEnum;
 import com.diagbot.service.ModuleDetailService;
+import com.diagbot.service.QuestionInfoService;
 import com.diagbot.service.impl.ModuleDetailServiceImpl;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.AddModuleDetailVO;
 import com.diagbot.vo.AddModuleInfoVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -15,6 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -31,6 +36,11 @@ public class ModuleDetailFacade extends ModuleDetailServiceImpl {
     @Autowired
     @Qualifier("moduleDetailServiceImpl")
     private ModuleDetailService moduleDetailService;
+    @Autowired
+    private QuestionInfoFacade questionInfoFacade;
+    @Autowired
+    @Qualifier("questionInfoServiceImpl")
+    private QuestionInfoService questionInfoService;
     /**
      * 根据questionId删除明细
      *
@@ -58,38 +68,84 @@ public class ModuleDetailFacade extends ModuleDetailServiceImpl {
      * @param addModuleInfoVO
      * @return
      */
-    public Boolean saveOrUpdateInfos(AddModuleInfoVO addModuleInfoVO){
+    public Boolean saveOrUpdateInfos(AddModuleInfoVO addModuleInfoVO,Long moduleId){
         /*String userId = UserUtils.getCurrentPrincipleID();*/
         Date now = DateUtil.now();
-        //获取添加的模板信息
-        QueryWrapper<ModuleInfo> moduleInfoQueryWrapper = new QueryWrapper<>();
-        moduleInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-            .eq("name",addModuleInfoVO.getName())
-            .eq("type",addModuleInfoVO.getType());
-        ModuleInfo moduleInfo = moduleInfoFacade.getOne(moduleInfoQueryWrapper);
         //如果该模板添加过明细,先删除
         UpdateWrapper<ModuleDetail> moduleDetailUpdateWrapper = new UpdateWrapper<>();
         moduleDetailUpdateWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("module_id",moduleInfo.getId())
+                .eq("module_id",moduleId)
                 .set("is_deleted",IsDeleteEnum.Y.getKey())
                 .set("modifier","1"/*userId*/)
                 .set("gmt_modified",now);
         this.update(new ModuleDetail(),moduleDetailUpdateWrapper);
-        //重新添加明细
-        List<ModuleDetail> moduleDetailList = new ArrayList<>();
+        //查询自定义标签的id
+        List<String> textList = new ArrayList<>();
+        for(AddModuleDetailVO addModuleDetailVO:addModuleInfoVO.getModelDetils()){
+            if(StringUtil.isNotEmpty(addModuleDetailVO.getText())){
+                textList.add(addModuleDetailVO.getText());
+            }
+        }
+        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("tag_type", TagTypeEnum.T8.getKey())
+                .in("name",textList);
+        List<QuestionInfo> questionInfoList = questionInfoFacade.list(questionInfoQueryWrapper);
+        //将标签id放入map
+        Map<String,Long> questionIdMap = new HashMap<>();
+        QuestionInfo addquestionInfo = null;
+        List<QuestionInfo> addQuestionInfoList = new ArrayList<>();
+        for (QuestionInfo questionInfo:questionInfoList) {
+            questionIdMap.put(questionInfo.getTagName(),questionInfo.getId());
+        }
+        //循环给questionId赋值,如果遇到赋值失败的则是没有questionID,执行添加
+        for (AddModuleDetailVO addModuleDetailVO:addModuleInfoVO.getModelDetils()) {
+            if (StringUtil.isNotEmpty(addModuleDetailVO.getText())){
+                addModuleDetailVO.setQuestionId(questionIdMap.get(addModuleDetailVO.getText()));
+                if(addModuleDetailVO.getQuestionId() == null){
+                    addquestionInfo = new QuestionInfo();
+                    addquestionInfo.setModifier("1");
+                    addquestionInfo.setCreator("1");
+                    addquestionInfo.setGmtCreate(now);
+                    addquestionInfo.setGmtModified(now);
+                    addquestionInfo.setTagType(String.valueOf(TagTypeEnum.T8.getKey()));
+                    addquestionInfo.setTagName(addModuleDetailVO.getText());
+                    addquestionInfo.setName(addModuleDetailVO.getText());
+                    addquestionInfo.setType(addModuleInfoVO.getType());
+                    addquestionInfo.setSubType(1);
+                    addquestionInfo.setName(addModuleDetailVO.getText());
+                    addQuestionInfoList.add(addquestionInfo);
+                }
+            }
+        }
+        questionInfoService.saveBatch(addQuestionInfoList);
+        //查询自定义标签的id
+        QueryWrapper<QuestionInfo> questionInfoQueryWrapper1 = new QueryWrapper<>();
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("tag_type", TagTypeEnum.T8.getKey());
+        List<QuestionInfo> questionInfoList1 = questionInfoFacade.list(questionInfoQueryWrapper1);
+        for (QuestionInfo questionInfo:questionInfoList1) {
+            questionIdMap.put(questionInfo.getTagName(),questionInfo.getId());
+        }
+        //二次赋值保证每一个questionId都有值
         ModuleDetail moduleDetail = null;
+        List<ModuleDetail> moduleDetailList = new ArrayList<>();
         for(int i = 0; i < addModuleInfoVO.getModelDetils().size(); i++){
             moduleDetail = new ModuleDetail();
-            moduleDetail.setModuleId(moduleInfo.getId());
+            moduleDetail.setModuleId(moduleId);
             moduleDetail.setCreator("1"/*userId*/);
             moduleDetail.setModifier("1"/*userId*/);
             moduleDetail.setGmtCreate(now);
             moduleDetail.setGmtModified(now);
-            moduleDetail.setQuestionId(addModuleInfoVO.getModelDetils().get(i).getQuestionId());
-            moduleDetail.setModuleId(moduleInfo.getId());
             moduleDetail.setOrderNo(i+1);
+            if (StringUtil.isNotEmpty(addModuleInfoVO.getModelDetils().get(i).getText())){
+                moduleDetail.setQuestionId(questionIdMap.get(addModuleInfoVO.getModelDetils().get(i).getText()));
+            }else {
+                moduleDetail.setQuestionId(addModuleInfoVO.getModelDetils().get(i).getQuestionId());
+            }
             moduleDetailList.add(moduleDetail);
         }
+        //添加模板明细
         moduleDetailService.saveBatch(moduleDetailList);
         return true;
     }

+ 3 - 2
icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java

@@ -82,7 +82,8 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
         moduleInfo.setGmtCreate(now);
         moduleInfo.setGmtModified(now);
         this.save(moduleInfo);
-        return moduleDetailFacade.saveOrUpdateInfos(addModulInfoVO);
+        Long moduleId = moduleInfo.getId();
+        return moduleDetailFacade.saveOrUpdateInfos(addModulInfoVO,moduleId);
     }
     /**
      * 修改模板
@@ -102,6 +103,6 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
         this.update(new ModuleInfo(),moduleInfoUpdateWrapper);
         AddModuleInfoVO addModuleInfoVO = new AddModuleInfoVO();
         BeanUtil.copyProperties(updateModuleInfoVO,addModuleInfoVO);
-        return moduleDetailFacade.saveOrUpdateInfos(addModuleInfoVO);
+        return moduleDetailFacade.saveOrUpdateInfos(addModuleInfoVO,updateModuleInfoVO.getId());
     }
 }

+ 106 - 39
icssman-service/src/main/java/com/diagbot/facade/QuestionInfoFacade.java

@@ -95,14 +95,13 @@ public class QuestionInfoFacade extends QuestionInfoServiceImpl {
             case "3":  //组合项,例如:血压
             case "4":  //组合项,例如:咳嗽
             case "5":  //组合项,例如:有无治疗
+            case "6":  // 组合项,例如:既往史
             case "7":  //化验
                 saveQuestionMapping(questionWrapper, param);
                 break;
-            case "6":  // 组合项,例如:既往史
-                break;
-            case "8":  //模板专用文字,无单独维护
+            case "8":  //文字,无单独维护
             case "9":  //空标签,只维护主表信息
-            case "10": //疾病组合类型
+            case "10": //组合,无单独维护
                 break;
             default:
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "请选择标签显示类型");
@@ -137,37 +136,101 @@ public class QuestionInfoFacade extends QuestionInfoServiceImpl {
         Date now = param.getNow();
         String person = param.getPerson();
         //先删除原明细,再插入新明细
-        questionMappingFacade.update(new QuestionMapping(), //删除原映射关系
-                new UpdateWrapper<QuestionMapping>()
-                        .eq("parent_question", questionInfo.getId())
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .set("gmt_modified", now)
-                        .set("modifier", person)
-                        .set("is_deleted", IsDeleteEnum.Y.getKey()));
+        deleteMapping(questionInfo.getId(), param);//删除原映射关系
         List<QuestionMappingWrapper> questionMappings = questionWrapper.getQuestionMappings();
+        if (ListUtil.isNotEmpty(questionMappings)) {
+            for (QuestionMappingWrapper bean : questionMappings) {
+                QuestionWrapper sonQues = bean.getQuestionMappingSon();
+                if (ListUtil.isNotEmpty(sonQues.getQuestionMappings())) {
+                    QuestionInfo ques = new QuestionInfo();
+                    BeanUtil.copyProperties(sonQues, ques);
+                    if (ques.getId() != null) {
+                        ques = this.getOne(new QueryWrapper<QuestionInfo>()
+                                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                                .eq("id", ques.getId()));
+                        if (ques == null) {
+                            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标签被修改,请刷新后重新保存");
+                        }
+                    } else {
+                        String name = "组合项_" + DateUtil.format(DateUtil.now(), DateUtil.FORMAT_FULL);
+                        ques.setTagName(name);
+                        ques.setName(name);
+                        ques.setTagType(String.valueOf(TagTypeEnum.T10.getKey()));
+                        ques.setGmtCreate(now);
+                        ques.setCreator(person);
+                        ques.setSubType(1);
+                    }
+                    ques.setType(questionInfo.getType());
+                    ques.setGmtModified(now);
+                    ques.setModifier(person);
+                    this.saveOrUpdate(ques);
+
+                    //删除原二级映射关系
+                    deleteMapping(ques.getId(), param);
+
+                    //添加二级映射关系
+                    saveMapping(sonQues.getQuestionMappings(), new HashMap<String, Long>(), person, now, ques.getId());
+
+                    //设置主映射关系
+                    bean.setSonQuestion(ques.getId());
+                    bean.setParentQuestion(questionInfo.getId());
+                }
+            }
+        }
         if (ListUtil.isNotEmpty(questionMappings)) {
             //预处理文字标签,之后统一添加映射关系
             Map<String, Long> map = getNameMap(questionMappings, now, person, questionInfo.getType());
-            List<QuestionMapping> saveMapping = new ArrayList<>();
-            int i = 1;
-            for (QuestionMappingWrapper mapping : questionMappings) {
-                String text = mapping.getText();
-                if (StringUtil.isNotEmpty(text)) {
-                    mapping.setSonQuestion(map.get(text));
-                }
-                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(questionInfo.getId());
-                bean.setOrderNo(i++);
-                saveMapping.add(bean);
+            saveMapping(questionMappings, map, 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 map
+     * @param person
+     * @param now
+     * @param id
+     */
+    public void saveMapping(List<QuestionMappingWrapper> questionMappings, Map<String, Long> map, String person, Date now, Long id) {
+        List<QuestionMapping> saveMapping = new ArrayList<>();
+        int i = 1;
+        for (QuestionMappingWrapper mapping : questionMappings) {
+            String text = mapping.getText();
+            if (StringUtil.isNotEmpty(text)) {
+                mapping.setSonQuestion(map.get(text));
             }
-            questionMappingService.saveBatch(saveMapping);
+            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);
+            bean.setOrderNo(i++);
+            saveMapping.add(bean);
         }
+        questionMappingService.saveBatch(saveMapping);
     }
 
 
@@ -327,19 +390,23 @@ public class QuestionInfoFacade extends QuestionInfoServiceImpl {
             return true;
         }
         List<String> idList = Arrays.asList(ids.split(","));
+        StringBuffer errMsg = new StringBuffer();
         for (String id : idList) {
             // 查询映射关系中是否存在父级
-            List<QuestionMapping> questionMappings = questionMappingFacade.list(new QueryWrapper<QuestionMapping>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("son_question", id));
-            if (ListUtil.isNotEmpty(questionMappings)) {
-                List<Long> questionIds = questionMappings.stream().map(row -> row.getParentQuestion()).collect(Collectors.toList());
-                List<String> tagName = this.list(new QueryWrapper<QuestionInfo>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .in("id", questionIds))
-                        .stream().map(row -> "【" + row.getTagName() + "】").collect(Collectors.toList());
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "请先删除标签的关联:" + String.join("、", tagName));
+            List<QuestionInfo> info = this.getParentQuestion(Long.parseLong(id));
+            for(QuestionInfo bean : info) {
+                if(bean.getTagType() != null && Integer.parseInt(bean.getTagType()) == TagTypeEnum.T10.getKey()) {
+                    List<QuestionInfo> info2 = this.getParentQuestion(bean.getId());
+                    List<String> msg = info2.stream().map(row -> "【" + row.getTagName() + "】").collect(Collectors.toList());
+                    errMsg.append(String.join("", msg));
+                } else {
+                    errMsg.append("【").append(bean.getTagName()).append("】");
+                }
+            }
+            if(StringUtil.isNotEmpty(errMsg.toString())) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "请先删除标签的关联:" + errMsg);
             }
+
             // 查询模板中是否存在
             List<ModuleDetail> moduleDetails = moduleDetailFacade.list(new QueryWrapper<ModuleDetail>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())

+ 7 - 4
icssman-service/src/main/java/com/diagbot/facade/VitalOrderFacade.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -52,15 +53,17 @@ public class VitalOrderFacade extends VitalOrderServiceImpl {
                 set("gmt_modified", DateUtil.now());
         this.update(new VitalOrder(), vitalOrderUpdateWrapper);
         //插入新排序
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
         List<VitalOrder> vitalOrderList = Lists.newArrayList();
         for (VitalOrderVO vitalOrderVO : vitalOrderVOList) {
             VitalOrder vitalOrder = new VitalOrder();
             vitalOrder.setQuestionId(vitalOrderVO.getVitalId());
             vitalOrder.setOrderNo(vitalOrderVO.getOrderNo());
-            vitalOrder.setCreator(UserUtils.getCurrentPrincipleID());
-            vitalOrder.setGmtCreate(DateUtil.now());
-            vitalOrder.setModifier(UserUtils.getCurrentPrincipleID());
-            vitalOrder.setGmtModified(DateUtil.now());
+            vitalOrder.setCreator(userId);
+            vitalOrder.setGmtCreate(now);
+            vitalOrder.setModifier(userId);
+            vitalOrder.setGmtModified(now);
             vitalOrderList.add(vitalOrder);
         }
         vitalOrderService.saveBatch(vitalOrderList);

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

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

+ 9 - 0
icssman-service/src/main/java/com/diagbot/mapper/QuestionInfoMapper.java

@@ -51,6 +51,15 @@ public interface QuestionInfoMapper extends BaseMapper<QuestionInfo> {
     public List<QuestionInfo> getSpecial(Map map);
 
 
+    /**
+     * 获取关联的父级标签
+     *
+     * @param id
+     * @return
+     */
+    public List<QuestionInfo> getParent(Long id);
+
+
     /**
      * 获取标签列表
      *

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

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

+ 9 - 0
icssman-service/src/main/java/com/diagbot/service/QuestionInfoService.java

@@ -72,6 +72,15 @@ public interface QuestionInfoService extends IService<QuestionInfo> {
      * @return
      */
     public List<QuestionInfo> getSpecial(Map map);
+
+
+    /**
+     * 获取关联的父级标签
+     *
+     * @param id
+     * @return
+     */
+    public List<QuestionInfo> getParentQuestion(Long id);
 }
 
 

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

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

+ 5 - 0
icssman-service/src/main/java/com/diagbot/service/impl/QuestionInfoServiceImpl.java

@@ -51,6 +51,11 @@ public class QuestionInfoServiceImpl extends ServiceImpl<QuestionInfoMapper, Que
         return baseMapper.getSpecial(map);
     }
 
+    @Override
+    public List<QuestionInfo> getParentQuestion(Long id) {
+        return baseMapper.getParent(id);
+    }
+
     @Override
     public IPage<QuestionPageDTO> getList(QuestionPageVO questionPageVO) {
         return baseMapper.getList(questionPageVO);

+ 2 - 0
icssman-service/src/main/java/com/diagbot/vo/AddModuleDetailVO.java

@@ -15,4 +15,6 @@ public class AddModuleDetailVO {
     private Long questionId;
     //特殊标识
     private int flag;
+    //特殊符号,例如逗号,句号
+    private String text;
 }

+ 1 - 1
icssman-service/src/main/java/com/diagbot/vo/AddModuleInfoVO.java

@@ -18,6 +18,6 @@ public class AddModuleInfoVO {
     private String name;
     @NotNull(message="模板类型")
     private int type;
-    @NotNull(message="标签id必传")
+    //标签id
     private List<AddModuleDetailVO> modelDetils;
 }

+ 45 - 0
icssman-service/src/main/java/com/diagbot/web/DictionaryInfoController.java

@@ -0,0 +1,45 @@
+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
+@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);
+    }
+}

+ 21 - 0
icssman-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>

+ 6 - 0
icssman-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -148,4 +148,10 @@
     </select>
 
 
+    <select id="getParent"  resultMap="BaseResultMap">
+        SELECT a.* FROM `icss_question_info` a, icss_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>
+
 </mapper>