MetaRankService.java 3.2 KB

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