QuestionFacade.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.diagbot.dto.QuestionDTO;
  4. import com.diagbot.entity.QuestionDetail;
  5. import com.diagbot.entity.QuestionInfo;
  6. import com.diagbot.entity.wrapper.QuestionInfoWrapper;
  7. import com.diagbot.enums.IsDeleteEnum;
  8. import com.diagbot.service.impl.QuestionInfoServiceImpl;
  9. import com.diagbot.util.BeanUtil;
  10. import com.diagbot.util.EntityUtil;
  11. import com.diagbot.util.ListUtil;
  12. import com.diagbot.vo.QuestionIds2VO;
  13. import com.diagbot.vo.QuestionVO;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Component;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.LinkedHashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @Description: 标签业务层
  24. * @author: zhoutg
  25. * @time: 2018/8/6 9:11
  26. */
  27. @Component
  28. public class QuestionFacade extends QuestionInfoServiceImpl {
  29. @Autowired
  30. QuestionDetailFacade questionDetailFacade;
  31. /**
  32. * 根据参数返回标签内容
  33. *
  34. * @param questionVO 获取标签内容参数
  35. * @return 标签内容
  36. */
  37. public QuestionDTO getById(QuestionVO questionVO) {
  38. Map paramMap = new HashMap<>();
  39. paramMap.put("sexType", questionVO.getSexType());
  40. paramMap.put("age", questionVO.getAge());
  41. paramMap.put("id", questionVO.getId());
  42. QuestionInfo questionInfo = this.getByParam(paramMap);
  43. if (questionInfo == null) { //无数据直接返回,不通过报错的形式返回
  44. return new QuestionDTO();
  45. }
  46. QuestionDTO res = new QuestionDTO();
  47. BeanUtil.copyProperties(questionInfo, res);
  48. if (questionInfo.getTagType().equals(1)) {
  49. //获取明细项
  50. List<QuestionDetail> questionDetailList = questionDetailFacade.getByQuestionId(questionVO.getId());
  51. res.setQuestionDetailList(questionDetailList);
  52. }
  53. //获取子标签
  54. List<QuestionInfoWrapper> questionMapping = this.getByQuestionMapping(paramMap);
  55. List<QuestionDTO> sonQuestionList = BeanUtil.listCopyTo(questionMapping, QuestionDTO.class);
  56. res.setQuestionMapping(sonQuestionList);
  57. //获取子标签的明细项
  58. if (ListUtil.isNotEmpty(sonQuestionList)) {
  59. Map paramMap1 = new HashMap<>();
  60. paramMap1.put("sexType", questionVO.getSexType());
  61. paramMap1.put("age", questionVO.getAge());
  62. List<Long> sonQuestionIds = sonQuestionList.stream()
  63. .map(artist -> artist.getId())
  64. .collect(Collectors.toList());
  65. Map<Long, List<QuestionDetail>> sonQuestionMap = questionDetailFacade.getByQuestionIds(sonQuestionIds);
  66. paramMap1.put("ids", sonQuestionIds);
  67. //获取第二级子标签
  68. List<QuestionInfoWrapper> questionMapping1 = this.getByQuestionMapping(paramMap1);
  69. Map<Long, List<QuestionInfoWrapper>> qm1 =
  70. EntityUtil.makeEntityListMap(questionMapping1, "parentQuestion");
  71. for (QuestionDTO bean : sonQuestionList) {
  72. List<QuestionDetail> questionDetailList1 = sonQuestionMap.get(bean.getId());
  73. if (ListUtil.isEmpty(questionDetailList1)) {
  74. questionDetailList1 = new ArrayList<>();
  75. }
  76. bean.setQuestionDetailList(questionDetailList1);
  77. List<QuestionDTO> sonQuestionList1 = new ArrayList<>();
  78. if (ListUtil.isNotEmpty(qm1.get(bean.getId()))) {
  79. sonQuestionList1 = BeanUtil.listCopyTo(qm1.get(bean.getId()), QuestionDTO.class);
  80. }
  81. bean.setQuestionMapping(sonQuestionList1);
  82. List<Long> sonQuestionIds1 = sonQuestionList1.stream()
  83. .map(artist -> artist.getId())
  84. .collect(Collectors.toList());
  85. Map<Long, List<QuestionDetail>> sonQuestionMap1 = questionDetailFacade.getByQuestionIds(sonQuestionIds1);
  86. for (QuestionDTO questionDTO : sonQuestionList1) {
  87. //获取二级子明细项
  88. List<QuestionDetail> questionDetailList2 = sonQuestionMap1.get(questionDTO.getId());
  89. if (ListUtil.isEmpty(questionDetailList2)) {
  90. questionDetailList2 = new ArrayList<>();
  91. }
  92. questionDTO.setQuestionDetailList(questionDetailList2);
  93. }
  94. }
  95. }
  96. return res;
  97. }
  98. /**
  99. * 查询多个id返回标签内容
  100. *
  101. * @param questionIds2VO 获取标签内容参数
  102. * @return 标签内容
  103. */
  104. public Map<Long, Object> getByIds(QuestionIds2VO questionIds2VO) {
  105. Integer sexType = questionIds2VO.getSexType();
  106. Integer age = questionIds2VO.getAge();
  107. Map<Long, Object> data = new LinkedHashMap<>();
  108. if (ListUtil.isEmpty(questionIds2VO.getIds())) {
  109. return data;
  110. }
  111. Map paramMap = new HashMap<>();
  112. paramMap.put("sexType", sexType);
  113. paramMap.put("age", age);
  114. paramMap.put("idList", questionIds2VO.getIds());
  115. List<QuestionInfo> questionInfoList = this.getByParam2(paramMap);
  116. List<Long> questionId = questionInfoList.stream().map(r -> r.getId()).collect(Collectors.toList());
  117. // 获取第一层明细项
  118. Map<Long, List<QuestionDetail>> detailMap = getQuestionDetailWithMap(questionInfoList.stream()
  119. .filter(r -> r.getTagType() == 1).map(r -> r.getId()).collect(Collectors.toList()));
  120. // 获取第二层mapping和明细项
  121. List<Long> ques2 = new ArrayList<>();
  122. Map<Long, List<QuestionInfoWrapper>> mapping2 = getQuestionMappingWithMap(sexType, age, questionId, ques2);
  123. Map<Long, List<QuestionDetail>> detailMap2 = getQuestionDetailWithMap(ques2);
  124. // 获取第三层mapping和明细项
  125. List<Long> ques3 = new ArrayList<>();
  126. Map<Long, List<QuestionInfoWrapper>> mapping3 = new HashMap<>();
  127. Map<Long, List<QuestionDetail>> detailMap3 = new HashMap<>();
  128. if (!ListUtil.isEmpty(ques2)) {
  129. mapping3 = getQuestionMappingWithMap(sexType, age, ques2, ques3);
  130. detailMap3 = getQuestionDetailWithMap(ques3);
  131. }
  132. for (QuestionInfo questionInfo : questionInfoList) {
  133. QuestionDTO res = new QuestionDTO();
  134. BeanUtil.copyProperties(questionInfo, res);
  135. // 设置第一层明细
  136. if (detailMap.get(res.getId()) != null) {
  137. res.setQuestionDetailList(detailMap.get(res.getId()));
  138. }
  139. // 设置第二层mapping
  140. List<QuestionInfoWrapper> w2 = mapping2.get(res.getId());
  141. if (ListUtil.isNotEmpty(w2)) {
  142. List<QuestionDTO> m2 = BeanUtil.listCopyTo(w2, QuestionDTO.class);
  143. res.setQuestionMapping(m2);
  144. for (QuestionDTO q2 : m2) {
  145. // 设置第二层明细
  146. if (detailMap2.get(q2.getId()) != null) {
  147. q2.setQuestionDetailList(detailMap2.get(q2.getId()));
  148. }
  149. List<QuestionInfoWrapper> w3 = mapping3.get(q2.getId());
  150. if (ListUtil.isNotEmpty(w3)) {
  151. // 设置第三层mapping
  152. List<QuestionDTO> m3 = BeanUtil.listCopyTo(w3, QuestionDTO.class);
  153. q2.setQuestionMapping(m3);
  154. for (QuestionDTO q3 : m3) {
  155. // 设置第三层明细
  156. if (detailMap3.get(q3.getId()) != null) {
  157. q3.setQuestionDetailList(detailMap3.get(q3.getId()));
  158. }
  159. }
  160. }
  161. }
  162. }
  163. data.put(res.getId(), res);
  164. }
  165. return data;
  166. }
  167. /**
  168. * 根据questionIds获取明细
  169. *
  170. * @param questionIds
  171. * @return
  172. */
  173. public Map<Long, List<QuestionDetail>> getQuestionDetailWithMap(List<Long> questionIds) {
  174. if (ListUtil.isEmpty(questionIds)) {
  175. return new LinkedHashMap<>();
  176. }
  177. List<QuestionDetail> detailList = questionDetailFacade.list(new QueryWrapper<QuestionDetail>()
  178. .eq("is_deleted", IsDeleteEnum.N.getKey())
  179. .in("question_id", questionIds)
  180. .orderByAsc("order_no"));
  181. Map<Long, List<QuestionDetail>> detailMap =
  182. EntityUtil.makeEntityListMap(detailList, "questionId");
  183. return detailMap;
  184. }
  185. /**
  186. * 获取下级question
  187. *
  188. * @param sexType 性别
  189. * @param age 年龄
  190. * @param ids 列表
  191. * @return
  192. */
  193. public Map getQuestionMappingWithMap(Integer sexType, Integer age, List<Long> ids, List<Long> mappIds) {
  194. Map paramMap = new HashMap<>();
  195. paramMap.put("sexType", sexType);
  196. paramMap.put("age", age);
  197. paramMap.put("ids", ids);
  198. List<QuestionInfoWrapper> questionMapping1 = this.getByQuestionMapping(paramMap);
  199. List<Long> list = questionMapping1.stream().map(r -> r.getId()).collect(Collectors.toList());
  200. mappIds.addAll(list);
  201. return EntityUtil.makeEntityListMap(questionMapping1, "parentQuestion");
  202. }
  203. }