Explorar o código

查询多个标签优化,化验内容待改

zhoutg %!s(int64=6) %!d(string=hai) anos
pai
achega
2abda06a77

+ 150 - 0
icss-service/src/main/java/com/diagbot/facade/QuestionFacade.java

@@ -2,16 +2,24 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.QuestionDTO;
+import com.diagbot.entity.QuestionDetail;
 import com.diagbot.entity.QuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.QuestionInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.QuestionIds2VO;
 import com.diagbot.vo.QuestionIdsVO;
 import com.diagbot.vo.QuestionVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -26,6 +34,10 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
 
     @Autowired
     QuestionCacheFacade questionCacheFacade;
+    @Autowired
+    QuestionDetailFacade questionDetailFacade;
+    @Autowired
+    LisMappingFacade lisMappingFacade;
 
     /**
      * 根据参数返回标签内容
@@ -92,4 +104,142 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
         return questionInfo;
     }
 
+
+    /**
+     * 查询多个id返回标签内容
+     *
+     * @param questionIds2VO 获取标签内容参数
+     * @return 标签内容
+     */
+    public Map<Long, Object> getByIds(QuestionIds2VO questionIds2VO) {
+        Integer sexType = questionIds2VO.getSexType();
+        Integer age = questionIds2VO.getAge();
+        Map<Long, Object> data = new LinkedHashMap<>();
+        if (ListUtil.isEmpty(questionIds2VO.getIds())) {
+            return data;
+        }
+        // TODO 删除
+        data.put(0L, "00000000000000");
+
+        Map paramMap = new HashMap<>();
+        paramMap.put("sexType", sexType);
+        paramMap.put("age", age);
+        paramMap.put("idList", questionIds2VO.getIds());
+
+        List<QuestionInfo> questionInfoList = this.getByParam2(paramMap);
+        List<Long> questionId = questionInfoList.stream().map(r -> r.getId()).collect(Collectors.toList());
+
+        // 获取第一层明细项
+        Map<Long, List<QuestionDetail>> detailMap = getQuestionDetailWithMap(questionInfoList.stream().filter(r -> r.getTagType() == 1).map(r -> r.getId()).collect(Collectors.toList()));
+
+        // 获取第二层mapping和明细项
+        List<Long> ques2 = new ArrayList<>();
+        Map<Long, List<QuestionInfoWrapper>> mapping2 = getQuestionMappingWithMap(sexType, age, questionId, ques2);
+        Map<Long, List<QuestionDetail>> detailMap2 = getQuestionDetailWithMap(ques2);
+
+        // 获取第三层mapping和明细项
+        List<Long> ques3 = new ArrayList<>();
+        Map<Long, List<QuestionInfoWrapper>> mapping3 = new HashMap<>();
+        Map<Long, List<QuestionDetail>> detailMap3 = new HashMap<>();
+        if (!ListUtil.isEmpty(ques2)) {
+            mapping3 = getQuestionMappingWithMap(sexType, age, ques2, ques3);
+            detailMap3 = getQuestionDetailWithMap(ques3);
+        }
+
+        for (QuestionInfo questionInfo : questionInfoList) {
+            QuestionDTO res = new QuestionDTO();
+            BeanUtil.copyProperties(questionInfo, res);
+            // 设置第一层明细
+            if (detailMap.get(res.getId()) != null) {
+                res.setQuestionDetailList(detailMap.get(res.getId()));
+            }
+
+            // 设置第二层mapping
+            List<QuestionInfoWrapper> w2 = mapping2.get(res.getId());
+            if (ListUtil.isNotEmpty(w2)) {
+                List<QuestionDTO> m2 =  BeanUtil.listCopyTo(w2, QuestionDTO.class);
+                res.setQuestionMapping(m2);
+                for (QuestionDTO q2: m2) {
+                    // 设置第二层明细
+                    if (detailMap2.get(q2.getId()) != null) {
+                        q2.setQuestionDetailList(detailMap2.get(q2.getId()));
+                    }
+                    List<QuestionInfoWrapper> w3 = mapping3.get(q2.getId());
+                    if (ListUtil.isNotEmpty(w3)) {
+                        // 设置第三层mapping
+                        List<QuestionDTO> m3 =  BeanUtil.listCopyTo(w3, QuestionDTO.class);
+                        q2.setQuestionMapping(m3);
+                        for (QuestionDTO q3: m3) {
+                            // 设置第三层明细
+                            if (detailMap3.get(q3.getId()) != null) {
+                                q3.setQuestionDetailList(detailMap3.get(q3.getId()));
+                            }
+                        }
+                    }
+                }
+            }
+
+            // TODO 优化
+            //获取uniqueName
+//            if (res != null && res.getType() != null &&
+//                    QuestionTypeEnum.Lis.getKey() == res.getType().intValue()) {
+//                String project = res.getName();
+//                List<String> details = new ArrayList<>();
+//                if (ListUtil.isNotEmpty(res.getQuestionMapping())) {
+//                    details = res.getQuestionMapping().stream().map(row -> row.getName()).collect(Collectors.toList());
+//                }
+//                Map<String, Map<String, String>> map = lisMappingFacade.getLisMappingByQuestion(project, details);
+//                if (map != null) {
+//                    if (map.get("project") != null) {
+//                        res.setUniqueName(map.get("project").get(res.getName()));
+//                    }
+//                    if (map.get("details") != null) {
+//                        for (QuestionDTO bean : res.getQuestionMapping()) {
+//                            bean.setUniqueName(map.get("details").get(bean.getName()));
+//                        }
+//                    }
+//                }
+//            }
+
+            data.put(res.getId(), res);
+        }
+        return data;
+    }
+
+
+    /**
+     * 根据questionIds获取明细
+     *
+     * @param questionIds
+     * @return
+     */
+    public Map<Long, List<QuestionDetail>> getQuestionDetailWithMap(List<Long> questionIds) {
+        List<QuestionDetail> detailList = questionDetailFacade.list(new QueryWrapper<QuestionDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("question_id", questionIds)
+                .orderByAsc("order_no"));
+        Map<Long, List<QuestionDetail>> detailMap = EntityUtil.makeEntityListMap(detailList, "questionId");
+        return detailMap;
+    }
+
+
+    /**
+     * 获取下级question
+     *
+     * @param sexType 性别
+     * @param age 年龄
+     * @param ids 列表
+     * @return
+     */
+    public Map getQuestionMappingWithMap(Integer sexType, Integer age, List<Long> ids, List<Long> mappIds) {
+        Map paramMap = new HashMap<>();
+        paramMap.put("sexType", sexType);
+        paramMap.put("age", age);
+        paramMap.put("ids", ids);
+        List<QuestionInfoWrapper> questionMapping1 = this.getByQuestionMapping(paramMap);
+        List<Long> list = questionMapping1.stream().map(r -> r.getId()).collect(Collectors.toList());
+        mappIds.addAll(list);
+        return EntityUtil.makeEntityListMap(questionMapping1, "parentQuestion");
+    }
+
 }

+ 8 - 0
icss-service/src/main/java/com/diagbot/mapper/QuestionInfoMapper.java

@@ -26,6 +26,14 @@ public interface QuestionInfoMapper extends BaseMapper<QuestionInfo> {
     public QuestionInfo getByParam(Map map);
 
 
+    /**
+     *  根据参数获取标签信息
+     * @param map 参数
+     * @return
+     */
+    public List<QuestionInfo> getByParam2(Map map);
+
+
     /**
      *  根据questionMapping获取标签信息
      * @param map 参数

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

@@ -26,6 +26,9 @@ public interface QuestionInfoService extends IService<QuestionInfo> {
     public QuestionInfo getByParam(Map map);
 
 
+    public List<QuestionInfo> getByParam2(Map map);
+
+
     /**
      * 根据questionMapping获取标签信息
      *

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

@@ -26,6 +26,11 @@ public class QuestionInfoServiceImpl extends ServiceImpl<QuestionInfoMapper, Que
         return baseMapper.getByParam(map);
     }
 
+    @Override
+    public List<QuestionInfo> getByParam2(Map map) {
+        return baseMapper.getByParam2(map);
+    }
+
     @Override
     public List<QuestionInfoWrapper> getByQuestionMapping(Map map) {
         return baseMapper.getByQuestionMapping(map);

+ 19 - 0
icss-service/src/main/java/com/diagbot/vo/QuestionIds2VO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class QuestionIds2VO {
+    private List<Long> ids;
+    private Integer sexType;
+    private Integer age;
+}

+ 14 - 0
icss-service/src/main/java/com/diagbot/web/QuestionInfoController.java

@@ -4,6 +4,7 @@ package com.diagbot.web;
 import com.diagbot.dto.QuestionDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.QuestionFacade;
+import com.diagbot.vo.QuestionIds2VO;
 import com.diagbot.vo.QuestionIdsVO;
 import com.diagbot.vo.QuestionVO;
 import io.swagger.annotations.Api;
@@ -53,4 +54,17 @@ public class QuestionInfoController {
         Map<Long, Object> data = questionFacade.getByIds(questionIdsVO);
         return RespDTO.onSuc(data);
     }
+
+
+    @ApiOperation(value = "查询多个id优化[by:zhoutg]",
+            notes = "ids: 多个questionId<br>" +
+                    "sexType:性别,1:男,2:女<br>" +
+                    "age:年龄")
+    @PostMapping("/getByIds2")
+    public RespDTO<Map<Long, Object>> getByIds(@RequestBody QuestionIds2VO questionIds2VO) {
+        Map<Long, Object> data = questionFacade.getByIds(questionIds2VO);
+        return RespDTO.onSuc(data);
+    }
+
+
 }

+ 17 - 0
icss-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -41,6 +41,23 @@
     </select>
 
 
+    <select id="getByParam2" parameterType="java.util.Map" resultMap="BaseResultMap">
+        select * from icss_question_info  where is_deleted = 'N'
+        <if test="idList != null and idList.size > 0">
+            and id in
+            <foreach item="item" collection="idList" open="(" separator="," close=")" >
+                #{item}
+            </foreach>
+        </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>
+    </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