MintActivityService.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.annotations.Debounce;
  3. import com.izouma.nineth.config.GeneralProperties;
  4. import com.izouma.nineth.config.RedisKeys;
  5. import com.izouma.nineth.domain.MintActivity;
  6. import com.izouma.nineth.dto.PageQuery;
  7. import com.izouma.nineth.repo.MintActivityRepo;
  8. import com.izouma.nineth.utils.JpaUtils;
  9. import lombok.AllArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.rocketmq.spring.core.RocketMQTemplate;
  12. import org.springframework.data.domain.Page;
  13. import org.springframework.data.redis.core.BoundValueOperations;
  14. import org.springframework.data.redis.core.RedisTemplate;
  15. import org.springframework.stereotype.Service;
  16. import java.util.Optional;
  17. import java.util.concurrent.TimeUnit;
  18. @Slf4j
  19. @Service
  20. @AllArgsConstructor
  21. public class MintActivityService {
  22. private MintActivityRepo mintActivityRepo;
  23. private RedisTemplate<String, Object> redisTemplate;
  24. private CacheService cacheService;
  25. private RocketMQTemplate rocketMQTemplate;
  26. private GeneralProperties generalProperties;
  27. public Page<MintActivity> all(PageQuery pageQuery) {
  28. return mintActivityRepo.findAll(JpaUtils.toSpecification(pageQuery, MintActivity.class), JpaUtils.toPageRequest(pageQuery));
  29. }
  30. public synchronized Long increaseStock(Long id, int number) {
  31. BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.MINT_ACTIVITY_STOCK + id);
  32. if (ops.get() == null) {
  33. Boolean success = ops.setIfAbsent(Optional.ofNullable(mintActivityRepo.getStock(id))
  34. .orElse(0), 7, TimeUnit.DAYS);
  35. log.info("创建redis铸造活动库存:{}", success);
  36. }
  37. Long stock = ops.increment(number);
  38. rocketMQTemplate.convertAndSend(generalProperties.getUpdateActivityStockTopic(), id);
  39. return stock;
  40. }
  41. public synchronized Long decreaseStock(Long id, int number) {
  42. return increaseStock(id, -number);
  43. }
  44. /* public synchronized Long increaseSale(Long id, int number) {
  45. BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps("mintActivitySale::" + id);
  46. if (ops.get() == null) {
  47. Boolean success = ops.setIfAbsent(Optional.ofNullable(mintActivityRepo.getStock(id))
  48. .orElse(0), 7, TimeUnit.DAYS);
  49. log.info("创建redis铸造活动销量:{}", success);
  50. }
  51. Long sale = ops.increment(number);
  52. return sale;
  53. }
  54. public synchronized Long decreaseSale(Long id, int number) {
  55. return increaseSale(id, -number);
  56. }*/
  57. @Debounce(key = "#id", delay = 500)
  58. public void syncStock(Long id) {
  59. Integer stock = (Integer) redisTemplate.opsForValue().get(RedisKeys.MINT_ACTIVITY_STOCK + id);
  60. if (stock != null) {
  61. log.info("同步铸造活动库存信息{}", id);
  62. mintActivityRepo.updateStock(id, stock);
  63. cacheService.clearMintActivity(id);
  64. }
  65. }
  66. }