OfficialApiServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. package com.zhongzheng.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  7. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  8. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  9. import com.baomidou.mybatisplus.extension.api.R;
  10. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  11. import com.zhongzheng.bo.*;
  12. import com.zhongzheng.entity.*;
  13. import com.zhongzheng.exception.CustomException;
  14. import com.zhongzheng.service.*;
  15. import com.zhongzheng.util.DateUtils;
  16. import com.zhongzheng.util.HttpUtils;
  17. import com.zhongzheng.util.ToolsUtils;
  18. import com.zhongzheng.vo.*;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.beans.factory.annotation.Value;
  22. import org.springframework.stereotype.Service;
  23. import java.util.ArrayList;
  24. import java.util.Collections;
  25. import java.util.HashMap;
  26. import java.util.List;
  27. import java.util.stream.Collectors;
  28. @Slf4j
  29. @Service
  30. public class OfficialApiServiceImpl implements IOfficialApiService {
  31. @Autowired
  32. private IOfficialMenuService officialMenuService;
  33. @Autowired
  34. private IOfficialArticleService officialArticleService;
  35. @Autowired
  36. private IOfficialActivityService officialActivityService;
  37. @Autowired
  38. private IOfficialLinkService officialLinkService;
  39. @Autowired
  40. private IOfficialProblemService officialProblemService;
  41. @Autowired
  42. private IOfficialSuggestService officialSuggestService;
  43. @Value("${studySys.eduPath}")
  44. private String SYS_EDUPATH;
  45. @Value("${studySys.goodsPath}")
  46. private String SYS_GOODSPATH;
  47. @Value("${studyApi.domain}")
  48. private String SYS_DOMAIN;
  49. @Value("${studyApi.tenantId}")
  50. private String SYS_TENANTID;
  51. @Override
  52. public List<OfficialMenuVo> listOfficialMenu(OfficialMenuQuery query) {
  53. //获取一级菜单
  54. List<OfficialMenu> list = officialMenuService.list(new LambdaQueryWrapper<OfficialMenu>()
  55. .eq(OfficialMenu::getParentId, ObjectUtils.isNotNull(query.getParentId())? query.getParentId() : 0)
  56. .eq(OfficialMenu::getStatus,1)
  57. .orderByAsc(OfficialMenu::getSortNumber));
  58. if (CollectionUtils.isEmpty(list)){
  59. return new ArrayList<>();
  60. }
  61. List<OfficialMenuVo> collect = list.stream().map(item -> {
  62. OfficialMenuVo vo = BeanUtil.toBean(item, OfficialMenuVo.class);
  63. //递归查询子集
  64. getChildren(vo);
  65. return vo;
  66. }).collect(Collectors.toList());
  67. return collect;
  68. }
  69. @Override
  70. public Page<OfficialArticleVo> listArticle(OfficialArticleQuery query) {
  71. List<Long> menuIds = new ArrayList<>();
  72. if (ObjectUtils.isNotNull(query.getParentId())){
  73. //获取所有子集id
  74. getChildrenIds(query.getParentId(),menuIds);
  75. }
  76. Page<OfficialArticle> list = officialArticleService.page(new Page<>(query.getPageSize(),query.getPageNum()),
  77. new LambdaQueryWrapper<OfficialArticle>()
  78. .eq(ObjectUtils.isNotNull(query.getMenuId()),OfficialArticle::getMenuId, query.getMenuId())
  79. .in(CollectionUtils.isNotEmpty(menuIds),OfficialArticle::getMenuId,menuIds)
  80. .eq(ObjectUtils.isNotNull(query.getArticleId()),OfficialArticle::getArticleId, query.getArticleId())
  81. .like(StringUtils.isNotBlank(query.getTitle()),OfficialArticle::getTitle, query.getTitle())
  82. .eq(OfficialArticle::getStatus, 1)
  83. .orderByDesc(OfficialArticle::getTopStatus)
  84. .orderByDesc(OfficialArticle::getCreateTime));
  85. if (CollectionUtils.isEmpty(list.getRecords())){
  86. return new Page<>();
  87. }
  88. List<OfficialArticleVo> collect = list.getRecords().stream().map(x ->BeanUtil.toBean(x, OfficialArticleVo.class)).collect(Collectors.toList());
  89. Page<OfficialArticleVo> result = new Page<>();
  90. result.setTotal(list.getTotal());
  91. result.setRecords(collect);
  92. result.setSize(list.getSize());
  93. return result;
  94. }
  95. private void getChildrenIds(Long parentId,List<Long> menuIds) {
  96. menuIds.add(parentId);
  97. List<OfficialMenu> list = officialMenuService.list(new LambdaQueryWrapper<OfficialMenu>().eq(OfficialMenu::getParentId, parentId).eq(OfficialMenu::getStatus, 1));
  98. if (CollectionUtils.isNotEmpty(list)){
  99. menuIds.addAll(list.stream().map(OfficialMenu::getMenuId).collect(Collectors.toList()));
  100. list.forEach(item -> {
  101. getChildrenIds(item.getMenuId(),menuIds);
  102. });
  103. }
  104. }
  105. @Override
  106. public List<OfficialActivityVo> listActivity(OfficialActivityQuery query) {
  107. List<OfficialActivity> list = officialActivityService.list(new LambdaQueryWrapper<OfficialActivity>()
  108. .eq(ObjectUtils.isNotNull(query.getType()), OfficialActivity::getType, query.getType())
  109. .eq(OfficialActivity::getStatus, 1)
  110. .orderByAsc(OfficialActivity::getSort));
  111. if (CollectionUtils.isEmpty(list)){
  112. return new ArrayList<>();
  113. }
  114. return list.stream().map(x -> BeanUtil.toBean(x, OfficialActivityVo.class)).collect(Collectors.toList());
  115. }
  116. @Override
  117. public List<OfficialLinkVo> listLink(OfficialLinkQuery query) {
  118. List<OfficialLink> list = officialLinkService.list(new LambdaQueryWrapper<OfficialLink>().eq(OfficialLink::getStatus, 1));
  119. if (CollectionUtils.isEmpty(list)){
  120. return new ArrayList<>();
  121. }
  122. return list.stream().map(x -> BeanUtil.toBean(x, OfficialLinkVo.class)).collect(Collectors.toList());
  123. }
  124. @Override
  125. public List<OfficialProblemVo> listProblem(OfficialProblemQuery query) {
  126. List<OfficialProblem> list = officialProblemService.list(new LambdaQueryWrapper<OfficialProblem>().eq(OfficialProblem::getStatus, 1));
  127. if (CollectionUtils.isEmpty(list)){
  128. return new ArrayList<>();
  129. }
  130. return list.stream().map(x -> BeanUtil.toBean(x, OfficialProblemVo.class)).collect(Collectors.toList());
  131. }
  132. @Override
  133. public boolean saveSuggest(OfficialSuggestBo bo) {
  134. OfficialSuggest bean = BeanUtil.toBean(bo, OfficialSuggest.class);
  135. return officialSuggestService.save(bean);
  136. }
  137. @Override
  138. public List<EducationVo> getEduList(OfficialOpenBo bo) {
  139. CommonOfficialBo studentBo = new CommonOfficialBo();
  140. Long nowTime = DateUtils.getNowTime();
  141. String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
  142. studentBo.setStamp(nowTime);
  143. studentBo.setSign(sign);
  144. HashMap<String, String> headersMap = new HashMap<>();
  145. headersMap.put("TenantId",StringUtils.isNotBlank(bo.getTenantId())?bo.getTenantId():SYS_TENANTID);
  146. String respone = "";
  147. try {
  148. respone = HttpUtils.sendPostHeader(SYS_EDUPATH, JSONObject.parseObject(JSONObject.toJSONString(studentBo)),headersMap);
  149. if (!respone.contains("\"code\":200")) {
  150. throw new CustomException("云学堂教育类型获取失败");
  151. }
  152. JSONObject jsonObject = JSONObject.parseObject(respone);
  153. List<EducationVo> educationVos = JSONArray.parseArray(jsonObject.get("data").toString(), EducationVo.class);
  154. if (CollectionUtils.isNotEmpty(educationVos)){
  155. //填充跳转地址
  156. String path = SYS_DOMAIN + "course-list?sortType=1&showStatus=1&goodsStatus=1";
  157. educationVos.forEach(item -> {
  158. item.setJumpUrl(path+String.format("&educationId=%s",item.getId()));
  159. if (CollectionUtils.isNotEmpty(item.getBusinessList())){
  160. item.getBusinessList().forEach(x -> {
  161. x.setJumpUrl(path+String.format("&educationId=%s&projectId=%s&businessId=%s",item.getId(),x.getProjectId(),x.getId()));
  162. });
  163. }
  164. });
  165. }
  166. return educationVos;
  167. } catch (Exception e) {
  168. e.printStackTrace();
  169. throw new CustomException("云学堂教育类型获取失败");
  170. }
  171. }
  172. @Override
  173. public OfficialArticleVo detailArticle(Long articleId) {
  174. return BeanUtil.toBean(officialArticleService.getById(articleId), OfficialArticleVo.class);
  175. }
  176. @Override
  177. public OfficialMenuVo detailMenu(Long menuId) {
  178. return BeanUtil.toBean(officialMenuService.getById(menuId), OfficialMenuVo.class);
  179. }
  180. @Override
  181. public List<OfficialRecommendVo> getEduGoodsList(OfficialOpenBo bo) {
  182. CommonOfficialBo studentBo = new CommonOfficialBo();
  183. Long nowTime = DateUtils.getNowTime();
  184. String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
  185. studentBo.setStamp(nowTime);
  186. studentBo.setSign(sign);
  187. studentBo.setPlatform(2);
  188. studentBo.setStatus(1);
  189. HashMap<String, String> headersMap = new HashMap<>();
  190. headersMap.put("TenantId",StringUtils.isNotBlank(bo.getTenantId())?bo.getTenantId():SYS_TENANTID);
  191. String respone = "";
  192. try {
  193. respone = HttpUtils.sendPostHeader(SYS_GOODSPATH, JSONObject.parseObject(JSONObject.toJSONString(studentBo)),headersMap);
  194. if (!respone.contains("\"code\":200")) {
  195. throw new CustomException("云学堂推荐商品列表获取失败");
  196. }
  197. JSONObject jsonObject = JSONObject.parseObject(respone);
  198. List<OfficialRecommendVo> educationVos = JSONArray.parseArray(jsonObject.get("data").toString(), OfficialRecommendVo.class);
  199. if (CollectionUtils.isNotEmpty(educationVos)){
  200. //填充跳转地址
  201. String path = SYS_DOMAIN + "course-detail/";
  202. String path1 = SYS_DOMAIN + "course-list?sortType=1&showStatus=1&goodsStatus=1";
  203. String path2 = SYS_DOMAIN + "bank-list?sortType=1&showStatus=1&goodsStatus=1";
  204. educationVos.forEach(item -> {
  205. switch (item.getType()){
  206. case 1: item.setJumpUrl(path1);
  207. break;
  208. case 2: item.setJumpUrl(path2);
  209. break;
  210. default:
  211. break;
  212. }
  213. if (CollectionUtils.isNotEmpty(item.getGoodsList())){
  214. for (OfficialGoodsVo goodsVo : item.getGoodsList()) {
  215. goodsVo.setJumpUrl(path+goodsVo.getGoodsId());
  216. }
  217. }
  218. });
  219. }
  220. return educationVos;
  221. } catch (Exception e) {
  222. e.printStackTrace();
  223. throw new CustomException("云学堂推荐商品列表获取失败");
  224. }
  225. }
  226. private void getChildren(OfficialMenuVo parent) {
  227. List<OfficialMenu> list = officialMenuService.list(new LambdaQueryWrapper<OfficialMenu>()
  228. .eq(OfficialMenu::getParentId, parent.getMenuId())
  229. .orderByAsc(OfficialMenu::getSortNumber));
  230. if (CollectionUtils.isEmpty(list)){
  231. return;
  232. }
  233. List<OfficialMenuVo> collect = list.stream().map(x -> BeanUtil.toBean(x, OfficialMenuVo.class)).collect(Collectors.toList());
  234. parent.setChildList(collect);
  235. list.forEach(item -> {
  236. getChildren(BeanUtil.toBean(item,OfficialMenuVo.class));
  237. });
  238. }
  239. }