AirDropService.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.AirDrop;
  3. import com.izouma.nineth.domain.Collection;
  4. import com.izouma.nineth.domain.Coupon;
  5. import com.izouma.nineth.domain.UserCoupon;
  6. import com.izouma.nineth.dto.PageQuery;
  7. import com.izouma.nineth.enums.AirDropType;
  8. import com.izouma.nineth.exception.BusinessException;
  9. import com.izouma.nineth.repo.AirDropRepo;
  10. import com.izouma.nineth.repo.CollectionRepo;
  11. import com.izouma.nineth.repo.CouponRepo;
  12. import com.izouma.nineth.repo.UserCouponRepo;
  13. import com.izouma.nineth.utils.JpaUtils;
  14. import lombok.AllArgsConstructor;
  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. @Service
  20. @AllArgsConstructor
  21. public class AirDropService {
  22. private AirDropRepo airDropRepo;
  23. private CouponRepo couponRepo;
  24. private UserCouponRepo userCouponRepo;
  25. private CollectionRepo collectionRepo;
  26. public Page<AirDrop> all(PageQuery pageQuery) {
  27. return airDropRepo.findAll(JpaUtils.toSpecification(pageQuery, AirDrop.class), JpaUtils.toPageRequest(pageQuery));
  28. }
  29. @Transactional
  30. public AirDrop create(AirDrop record) {
  31. if (AirDropType.coupon == record.getType()) {
  32. Coupon coupon = couponRepo.findById(record.getCouponId()).orElseThrow(new BusinessException("兑换券不存在"));
  33. record.getUserIds().stream().parallel().forEach(userId -> {
  34. UserCoupon userCoupon = new UserCoupon();
  35. BeanUtils.copyProperties(coupon, userCoupon);
  36. userCoupon.setId(null);
  37. userCoupon.setCouponId(coupon.getId());
  38. userCoupon.setUserId(userId);
  39. userCouponRepo.save(userCoupon);
  40. });
  41. } else {
  42. Collection collection = collectionRepo.findById(record.getCollectionId())
  43. .orElseThrow(new BusinessException("藏品不存在"));
  44. if (collection.getStock() < record.getUserIds().size()) {
  45. throw new BusinessException("藏品库存不足");
  46. }
  47. }
  48. return airDropRepo.save(record);
  49. }
  50. }