AirDropService.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.*;
  3. import com.izouma.nineth.dto.PageQuery;
  4. import com.izouma.nineth.enums.AirDropType;
  5. import com.izouma.nineth.enums.CollectionType;
  6. import com.izouma.nineth.exception.BusinessException;
  7. import com.izouma.nineth.repo.*;
  8. import com.izouma.nineth.utils.JpaUtils;
  9. import lombok.AllArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.BeanUtils;
  12. import org.springframework.data.domain.Page;
  13. import org.springframework.stereotype.Service;
  14. import java.util.List;
  15. @Service
  16. @AllArgsConstructor
  17. @Slf4j
  18. public class AirDropService {
  19. private AirDropRepo airDropRepo;
  20. private CouponRepo couponRepo;
  21. private UserCouponRepo userCouponRepo;
  22. private CollectionRepo collectionRepo;
  23. private UserRepo userRepo;
  24. private AssetService assetService;
  25. private CollectionService collectionService;
  26. public Page<AirDrop> all(PageQuery pageQuery) {
  27. return airDropRepo.findAll(JpaUtils.toSpecification(pageQuery, AirDrop.class), JpaUtils.toPageRequest(pageQuery));
  28. }
  29. public AirDrop create(AirDrop record) {
  30. if (AirDropType.coupon == record.getType()) {
  31. Coupon coupon = couponRepo.findById(record.getCouponId()).orElseThrow(new BusinessException("兑换券不存在"));
  32. record.getUserIds().stream().parallel().forEach(userId -> {
  33. UserCoupon userCoupon = new UserCoupon();
  34. BeanUtils.copyProperties(coupon, userCoupon);
  35. userCoupon.setId(null);
  36. userCoupon.setCouponId(coupon.getId());
  37. userCoupon.setUserId(userId);
  38. userCouponRepo.save(userCoupon);
  39. });
  40. } else {
  41. Collection collection = collectionRepo.findById(record.getCollectionId())
  42. .orElseThrow(new BusinessException("藏品不存在"));
  43. if (collection.isSalable()) {
  44. throw new BusinessException("请先设置藏品为不可购买");
  45. }
  46. if (collection.getStock() < record.getUserIds().size()) {
  47. throw new BusinessException("藏品库存不足");
  48. }
  49. List<User> users = userRepo.findByIdInAndDelFalse(record.getUserIds());
  50. for (User user : users) {
  51. try {
  52. if (collection.getType() == CollectionType.BLIND_BOX) {
  53. BlindBoxItem winItem = collectionService.draw(collection.getId());
  54. assetService.createAsset(winItem, user, null, null, "空投",
  55. collectionService.getNextNumber(winItem.getCollectionId()), collection.getHoldDays());
  56. } else {
  57. assetService.createAsset(collection, user, null, null, "空投", collectionService.getNextNumber(collection.getId()));
  58. }
  59. collectionService.decreaseStock(collection.getId(), 1);
  60. collectionService.increaseSale(collection.getId(), 1);
  61. } catch (Exception e) {
  62. log.error("空投出错", e);
  63. }
  64. }
  65. }
  66. return airDropRepo.save(record);
  67. }
  68. }