UserAssetSummaryService.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.annotations.RedisLock;
  3. import com.izouma.nineth.config.Constants;
  4. import com.izouma.nineth.domain.Asset;
  5. import com.izouma.nineth.domain.UserAssetSummary;
  6. import com.izouma.nineth.dto.PageQuery;
  7. import com.izouma.nineth.enums.CollectionType;
  8. import com.izouma.nineth.repo.AssetRepo;
  9. import com.izouma.nineth.repo.MetaShowRoomAssetRepo;
  10. import com.izouma.nineth.repo.UserAssetSummaryRepo;
  11. import com.izouma.nineth.utils.JpaUtils;
  12. import lombok.AllArgsConstructor;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.apache.commons.collections.CollectionUtils;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.data.domain.Page;
  17. import org.springframework.stereotype.Service;
  18. import javax.transaction.Transactional;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.Objects;
  22. @Service
  23. @AllArgsConstructor
  24. @Slf4j
  25. public class UserAssetSummaryService {
  26. private AssetRepo assetRepo;
  27. private UserAssetSummaryRepo userAssetSummaryRepo;
  28. private MetaShowRoomAssetRepo metaShowRoomAssetRepo;
  29. public Page<UserAssetSummary> all(PageQuery pageQuery) {
  30. return userAssetSummaryRepo.findAll(JpaUtils.toSpecification(pageQuery, UserAssetSummary.class), JpaUtils.toPageRequest(pageQuery));
  31. }
  32. @Transactional
  33. @RedisLock("#userId")
  34. public void calculateNum(Long assetId, Long userId, Long companyId) {
  35. log.info("开始重新计算用户:{},companyId:{}的资产数量", userId, companyId);
  36. List<UserAssetSummary> userAssetSummaries = new ArrayList<>();
  37. // 查询盲盒数量
  38. List<Asset> blindBoxAssets = assetRepo.findAllByUserIdAndTypeAndOpenedAndCompanyId(userId, CollectionType.BLIND_BOX, Boolean.FALSE, companyId);
  39. blindBoxAssets.forEach(asset -> {
  40. userAssetSummaries.add(new UserAssetSummary(asset));
  41. });
  42. // 查询非盲盒数量
  43. List<UserAssetSummary> notBlindBoxAssets = userAssetSummaryRepo.find(userId, companyId);
  44. notBlindBoxAssets.forEach(userAssetSummary -> {
  45. UserAssetSummary newUserAssetSummary = new UserAssetSummary();
  46. BeanUtils.copyProperties(userAssetSummary, newUserAssetSummary);
  47. newUserAssetSummary.setId(null);
  48. userAssetSummaries.add(newUserAssetSummary);
  49. });
  50. List<UserAssetSummary> isExist = userAssetSummaryRepo.findByUserIdAndCompanyId(userId, companyId);
  51. if (CollectionUtils.isNotEmpty(isExist)) {
  52. userAssetSummaryRepo.deleteByUserIdAndCompanyId(userId, companyId);
  53. }
  54. userAssetSummaryRepo.saveAll(userAssetSummaries);
  55. // 如果资产状态为已转让,已销毁, 已转增, 已拍卖删除展厅中藏品
  56. if (Objects.nonNull(assetId)) {
  57. Asset asset = assetRepo.findById(assetId).orElse(null);
  58. if (Objects.nonNull(asset)) {
  59. if (Constants.META_INOPERABLE_STATUS.contains(asset.getStatus())) {
  60. metaShowRoomAssetRepo.deleteByAssetId(asset.getId());
  61. }
  62. }
  63. }
  64. }
  65. }