MetaRankService.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package com.izouma.nineth.service;
  2. import cn.hutool.core.convert.Convert;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.izouma.nineth.config.MetaConstants;
  5. import com.izouma.nineth.domain.MetaRank;
  6. import com.izouma.nineth.dto.MetaRankDTO;
  7. import com.izouma.nineth.dto.PageQuery;
  8. import com.izouma.nineth.dto.PageWrapper;
  9. import com.izouma.nineth.exception.BusinessException;
  10. import com.izouma.nineth.repo.MetaRankRepo;
  11. import com.izouma.nineth.utils.JpaUtils;
  12. import lombok.AllArgsConstructor;
  13. import org.apache.commons.collections.CollectionUtils;
  14. import org.springframework.data.domain.Page;
  15. import org.springframework.stereotype.Service;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Map;
  19. @Service
  20. @AllArgsConstructor
  21. public class MetaRankService {
  22. private MetaRankRepo metaRankRepo;
  23. private MetaUserGoldRecordService metaUserGoldRecordService;
  24. public Page<MetaRank> all(PageQuery pageQuery) {
  25. return metaRankRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaRank.class), JpaUtils.toPageRequest(pageQuery));
  26. }
  27. public Page<MetaRankDTO> rank(PageQuery pageQuery) {
  28. Map<String, Object> query = pageQuery.getQuery();
  29. if (!query.containsKey("id")) {
  30. throw new BusinessException("排行榜id不存在!");
  31. }
  32. Long id = Convert.toLong(query.get("id"));
  33. if (id.equals(MetaConstants.META_GOLD_RECEIVED_RANK_ID)) {
  34. return buildPage(pageQuery, metaUserGoldRecordService.rank());
  35. }
  36. // ...
  37. throw new BusinessException("非法排行榜id");
  38. }
  39. private Page<MetaRankDTO> buildPage(PageQuery pageQuery, List<Map<String, String>> rank) {
  40. if (CollectionUtils.isEmpty(rank)) {
  41. return null;
  42. }
  43. JSONArray jsonArray = new JSONArray();
  44. jsonArray.addAll(rank);
  45. List<MetaRankDTO> metaRankDTOS = jsonArray.toJavaList(MetaRankDTO.class);
  46. int page = pageQuery.getPage();
  47. int size = pageQuery.getSize();
  48. int start = page * size;
  49. int totalElements = 0;
  50. if (CollectionUtils.isEmpty(metaRankDTOS)) {
  51. return new PageWrapper<>(new ArrayList<MetaRankDTO>(), page,
  52. size, totalElements).toPage();
  53. }
  54. totalElements = metaRankDTOS.size();
  55. List<MetaRankDTO> newMetaRankDTOS;
  56. if (metaRankDTOS.size() < start + size) {
  57. newMetaRankDTOS = metaRankDTOS.subList(start, metaRankDTOS.size());
  58. return new PageWrapper<>(newMetaRankDTOS, page,
  59. size, totalElements).toPage();
  60. }
  61. newMetaRankDTOS = metaRankDTOS.subList(start, start + size);
  62. return new PageWrapper<>(newMetaRankDTOS, page,
  63. size, totalElements).toPage();
  64. }
  65. }