MetaSpatialWharfService.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.config.Constants;
  3. import com.izouma.nineth.domain.Asset;
  4. import com.izouma.nineth.domain.MetaSpatialWharf;
  5. import com.izouma.nineth.dto.MetaBoatDTO;
  6. import com.izouma.nineth.dto.MetaRestResult;
  7. import com.izouma.nineth.dto.PageQuery;
  8. import com.izouma.nineth.repo.AssetRepo;
  9. import com.izouma.nineth.repo.MetaSpatialWharfRepo;
  10. import com.izouma.nineth.utils.JpaUtils;
  11. import com.izouma.nineth.utils.SecurityUtils;
  12. import lombok.AllArgsConstructor;
  13. import org.apache.commons.collections.CollectionUtils;
  14. import org.apache.commons.lang3.StringUtils;
  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.Objects;
  20. @Service
  21. @AllArgsConstructor
  22. public class MetaSpatialWharfService {
  23. private MetaSpatialWharfRepo metaSpatialWharfRepo;
  24. private AssetRepo assetRepo;
  25. private final String BOAT_NAME = "%僵尸%";
  26. public Page<MetaSpatialWharf> all(PageQuery pageQuery) {
  27. return metaSpatialWharfRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSpatialWharf.class), JpaUtils.toPageRequest(pageQuery));
  28. }
  29. public MetaRestResult<MetaSpatialWharf> park(MetaSpatialWharf metaSpatialWharf) {
  30. if (Objects.isNull(metaSpatialWharf)) {
  31. return MetaRestResult.returnError("Illegal parameter : parameter can not be null");
  32. }
  33. if (Objects.isNull(metaSpatialWharf.getUserId())) {
  34. return MetaRestResult.returnError("Illegal parameter : userId can not be null");
  35. }
  36. if (!metaSpatialWharf.getUserId().equals(SecurityUtils.getAuthenticatedUser().getId())) {
  37. return MetaRestResult.returnError("当前船只不属于你!");
  38. }
  39. if (Objects.isNull(metaSpatialWharf.getBoatId())) {
  40. return MetaRestResult.returnError("Illegal parameter : boatId can not be null");
  41. }
  42. if (Objects.isNull(metaSpatialWharf.getIsLandId())) {
  43. return MetaRestResult.returnError("Illegal parameter : isLandId can not be null");
  44. }
  45. if (StringUtils.isBlank(metaSpatialWharf.getBoatType())) {
  46. return MetaRestResult.returnError("Illegal parameter : boatType can not be null");
  47. }
  48. if (Objects.isNull(metaSpatialWharf.getMetaBoatPositionId())) {
  49. return MetaRestResult.returnError("Illegal parameter : metaBoatPositionId can not be null");
  50. }
  51. MetaSpatialWharf position = metaSpatialWharfRepo.findByMetaBoatPositionIdAndDel(metaSpatialWharf.getMetaBoatPositionId(), false);
  52. if (Objects.nonNull(position)) {
  53. return MetaRestResult.returnError(String.format("该位置已被船[%S]停靠", position.getBoatId()));
  54. }
  55. MetaSpatialWharf dbMetaSpatialWharf = metaSpatialWharfRepo.findByBoatIdAndUserIdAndDel(metaSpatialWharf.getBoatId(), metaSpatialWharf.getUserId(), false);
  56. if (Objects.nonNull(dbMetaSpatialWharf)) {
  57. return MetaRestResult.returnError(String.format("该船只已经停靠在岛屿[%S]", dbMetaSpatialWharf.getIsLandId()));
  58. }
  59. Asset asset = assetRepo.findByIdAndUserIdAndDel(metaSpatialWharf.getBoatId(), metaSpatialWharf.getUserId(), false);
  60. if (Objects.isNull(asset)) {
  61. return MetaRestResult.returnError(String.format("藏品[%S]不存在", metaSpatialWharf.getBoatId()));
  62. }
  63. metaSpatialWharf.setBoatImg(asset.getPic().get(0).getUrl());
  64. MetaSpatialWharf save = metaSpatialWharfRepo.save(metaSpatialWharf);
  65. save.setMeUse(true);
  66. return MetaRestResult.returnSuccess("停靠成功", save);
  67. }
  68. private String getRarityType(String name) {
  69. if (StringUtils.isBlank(name)) {
  70. return null;
  71. }
  72. if (name.contains(Constants.Rarity.U) && !name.contains(Constants.Rarity.UR)) {
  73. return Constants.Rarity.U;
  74. }
  75. if (name.contains(Constants.Rarity.R) && !name.contains(Constants.Rarity.SR)) {
  76. return Constants.Rarity.R;
  77. }
  78. if (name.contains(Constants.Rarity.SR) && !name.contains(Constants.Rarity.SSR)) {
  79. return Constants.Rarity.SR;
  80. }
  81. if (name.contains(Constants.Rarity.SSR)) {
  82. return Constants.Rarity.SSR;
  83. }
  84. if (name.contains(Constants.Rarity.UR)) {
  85. return Constants.Rarity.UR;
  86. }
  87. return null;
  88. }
  89. public MetaRestResult<List<MetaBoatDTO>> queryBoats(List<String> boatTypes) {
  90. if (CollectionUtils.isEmpty(boatTypes)) {
  91. return MetaRestResult.returnError("船只类型为空");
  92. }
  93. List<MetaBoatDTO> metaBoatDTOS = new ArrayList<>();
  94. boatTypes.forEach(type -> {
  95. List<Long> parkingBoatIds = metaSpatialWharfRepo.findParkingBoatIds(SecurityUtils.getAuthenticatedUser().getId());
  96. if (CollectionUtils.isEmpty(parkingBoatIds)) {
  97. parkingBoatIds = new ArrayList<>();
  98. parkingBoatIds.add(0L);
  99. }
  100. List<Asset> assets = findAllBoatsByType(type, parkingBoatIds);
  101. if (CollectionUtils.isNotEmpty(assets)) {
  102. assets.forEach(asset -> {
  103. metaBoatDTOS.add(new MetaBoatDTO(asset.getId(), asset.getPic().get(0).getUrl(), type));
  104. });
  105. }
  106. });
  107. return MetaRestResult.returnSuccess(metaBoatDTOS);
  108. }
  109. private List<Asset> findAllBoatsByType(String type, List<Long> parkingBoatIds) {
  110. Long id = SecurityUtils.getAuthenticatedUser().getId();
  111. switch (type) {
  112. case Constants.Rarity.U:
  113. return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.U_LIKE, Constants.Rarity.UR_LIKE, id);
  114. case Constants.Rarity.SR:
  115. return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.SR_LIKE, Constants.Rarity.SSR_LIKE, id);
  116. case Constants.Rarity.SSR:
  117. return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.SSR_LIKE, Constants.Rarity.U_LIKE, id);
  118. case Constants.Rarity.UR:
  119. return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.UR_LIKE, Constants.Rarity.U_LIKE, id);
  120. default:
  121. return null;
  122. }
  123. }
  124. }