MetaShowRoomAssetService.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package com.izouma.nineth.service;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.izouma.nineth.config.Constants;
  4. import com.izouma.nineth.domain.Asset;
  5. import com.izouma.nineth.domain.MetaItem;
  6. import com.izouma.nineth.domain.MetaShowRoomAsset;
  7. import com.izouma.nineth.dto.MetaRestResult;
  8. import com.izouma.nineth.dto.MetaServiceResult;
  9. import com.izouma.nineth.dto.PageQuery;
  10. import com.izouma.nineth.enums.MetaItemEnum;
  11. import com.izouma.nineth.exception.BusinessException;
  12. import com.izouma.nineth.repo.AssetRepo;
  13. import com.izouma.nineth.repo.MetaItemRepo;
  14. import com.izouma.nineth.repo.MetaShowRoomAssetRepo;
  15. import com.izouma.nineth.utils.JpaUtils;
  16. import lombok.AllArgsConstructor;
  17. import org.apache.commons.collections.CollectionUtils;
  18. import org.springframework.data.domain.Page;
  19. import org.springframework.stereotype.Service;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Objects;
  23. @Service
  24. @AllArgsConstructor
  25. public class MetaShowRoomAssetService {
  26. private MetaShowRoomAssetRepo metaShowRoomAssetRepo;
  27. private AssetRepo assetRepo;
  28. private MetaItemRepo metaItemRepo;
  29. public Page<MetaShowRoomAsset> all(PageQuery pageQuery) {
  30. return metaShowRoomAssetRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaShowRoomAsset.class), JpaUtils.toPageRequest(pageQuery));
  31. }
  32. public MetaRestResult<Boolean> putOn(MetaShowRoomAsset metaShowRoomAsset) {
  33. MetaServiceResult result = checkParams(metaShowRoomAsset);
  34. if (!result.isSuccess()) {
  35. return MetaRestResult.returnError(result.getMessage(), Boolean.FALSE);
  36. }
  37. Asset asset = assetRepo.findById(metaShowRoomAsset.getAssetId()).orElse(null);
  38. if (Objects.isNull(asset)) {
  39. return MetaRestResult.returnError("不存在该资产", Boolean.FALSE);
  40. }
  41. if (!asset.getUserId().equals(metaShowRoomAsset.getUserId())) {
  42. return MetaRestResult.returnError("该资产不属于你");
  43. }
  44. if (Constants.META_INOPERABLE_STATUS.contains(asset.getStatus())) {
  45. return MetaRestResult.returnError(String.format("该资产目前状态为[%S],不可上架。请刷新藏品室数据", asset.getStatus().getDescription()), Boolean.FALSE);
  46. }
  47. metaShowRoomAssetRepo.save(metaShowRoomAsset);
  48. return MetaRestResult.returnSuccess("上架成功", Boolean.TRUE);
  49. }
  50. public MetaRestResult<Boolean> putOff(Long assetId) {
  51. metaShowRoomAssetRepo.deleteByAssetId(assetId);
  52. return MetaRestResult.returnSuccess("下架成功", Boolean.TRUE);
  53. }
  54. public MetaRestResult<Boolean> putOffAll(Long showRoomId) {
  55. metaShowRoomAssetRepo.deleteByShowRoomId(showRoomId);
  56. return MetaRestResult.returnSuccess("一键下架成功", Boolean.TRUE);
  57. }
  58. public MetaRestResult<List<MetaShowRoomAsset>> findShowRoomAsset(Long showRoomId) {
  59. List<MetaShowRoomAsset> metaShowRoomAssets = metaShowRoomAssetRepo.findAllByShowRoomId(showRoomId);
  60. List<MetaShowRoomAsset> newMetaShowRoomAsset = new ArrayList<>();
  61. metaShowRoomAssets.forEach(metaShowRoomAsset -> {
  62. Asset asset = assetRepo.findById(metaShowRoomAsset.getAssetId()).orElseThrow(new BusinessException(String.format("assetId[%S]的资产不存在", metaShowRoomAsset.getAssetId())));
  63. if (Constants.META_INOPERABLE_STATUS.contains(asset.getStatus())) {
  64. metaShowRoomAssetRepo.deleteByAssetId(asset.getId());
  65. } else {
  66. metaShowRoomAsset.setAsset(asset);
  67. newMetaShowRoomAsset.add(metaShowRoomAsset);
  68. }
  69. });
  70. return MetaRestResult.returnSuccess(newMetaShowRoomAsset);
  71. }
  72. public MetaRestResult<List<Asset>> noShowRoomAndBlindBox(Long userId) {
  73. // 查询已上架藏品
  74. List<Long> assetIds = metaShowRoomAssetRepo.findAssetIdAllByUserId(userId);
  75. List<MetaItem> metaItems = metaItemRepo.findAllByType(MetaItemEnum.META_SHOW_ROOM);
  76. // 查询展厅数据
  77. List<Long> ids = new ArrayList<>();
  78. metaItems.forEach(metaItem -> {
  79. List<Asset> metaItemAssets = assetRepo.findAllByUserIdAndStatusInAndNameLike(userId, Constants.META_NORMAL_STATUS, "%" + metaItem.getName() + "%");
  80. if (CollectionUtil.isNotEmpty(metaItemAssets)) {
  81. metaItemAssets.forEach(metaItemAsset -> {
  82. ids.add(metaItemAsset.getId());
  83. });
  84. }
  85. });
  86. List<Asset> assets;
  87. if (CollectionUtils.isNotEmpty(ids)) {
  88. assets = assetRepo.findAllByIdNotInAndUserIdAndStatusInAndOpened(ids, userId, Constants.META_NORMAL_STATUS, true);
  89. } else {
  90. assets = assetRepo.findAllByUserIdAndStatusInAndOpened(userId, Constants.META_NORMAL_STATUS, true);
  91. }
  92. if (CollectionUtils.isEmpty(assets) || CollectionUtils.isEmpty(assetIds)) {
  93. return MetaRestResult.returnSuccess(assets);
  94. }
  95. // 查询用户拥有的非展厅非未开启盲盒藏品
  96. assets.forEach(asset -> {
  97. asset.setMetaPutOn(assetIds.contains(asset.getId()));
  98. });
  99. return MetaRestResult.returnSuccess(assets);
  100. }
  101. public MetaRestResult<List<Asset>> noBlindBox(Long userId) {
  102. List<Long> assetIds = metaShowRoomAssetRepo.findAssetIdAllByUserId(userId);
  103. // 查询玩家拥有的非未开启藏品
  104. List<Asset> assets = assetRepo.findAllByUserIdAndStatusInAndOpened(userId, Constants.META_NORMAL_STATUS, true);
  105. if (CollectionUtils.isEmpty(assets) || CollectionUtils.isEmpty(assetIds)) {
  106. return MetaRestResult.returnSuccess(assets);
  107. }
  108. assets.forEach(asset -> {
  109. asset.setMetaPutOn(assetIds.contains(asset.getId()));
  110. });
  111. return MetaRestResult.returnSuccess(assets);
  112. }
  113. private MetaServiceResult checkParams(MetaShowRoomAsset metaShowRoomAsset) {
  114. if (Objects.isNull(metaShowRoomAsset)) {
  115. return MetaServiceResult.returnError("Illegal parameter : parameter can not be null");
  116. }
  117. if (Objects.isNull(metaShowRoomAsset.getShowRoomId())) {
  118. return MetaServiceResult.returnError("Illegal parameter : showRoomId can not be null");
  119. }
  120. if (Objects.isNull(metaShowRoomAsset.getUserId())) {
  121. return MetaServiceResult.returnError("Illegal parameter : userId can not be null");
  122. }
  123. if (Objects.isNull(metaShowRoomAsset.getAssetId())) {
  124. return MetaServiceResult.returnError("Illegal parameter : assetId can not be null");
  125. }
  126. if (Objects.isNull(metaShowRoomAsset.getCoordinate())) {
  127. return MetaServiceResult.returnError("Illegal parameter : coordinate can not be null");
  128. }
  129. return MetaServiceResult.returnSuccess();
  130. }
  131. }