| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.annotations.Debounce;
- import com.izouma.nineth.config.GeneralProperties;
- import com.izouma.nineth.config.RedisKeys;
- import com.izouma.nineth.domain.ActivityCollection;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.repo.ActivityCollectionRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.rocketmq.spring.core.RocketMQTemplate;
- import org.springframework.data.domain.Page;
- import org.springframework.data.redis.core.BoundValueOperations;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import java.util.Optional;
- import java.util.concurrent.TimeUnit;
- @Slf4j
- @Service
- @AllArgsConstructor
- public class ActivityCollectionService {
- private ActivityCollectionRepo activityCollectionRepo;
- private RedisTemplate<String, Object> redisTemplate;
- private CacheService cacheService;
- private RocketMQTemplate rocketMQTemplate;
- private GeneralProperties generalProperties;
- public Page<ActivityCollection> all(PageQuery pageQuery) {
- return activityCollectionRepo.findAll(JpaUtils.toSpecification(pageQuery, ActivityCollection.class), JpaUtils.toPageRequest(pageQuery));
- }
- public synchronized Long increaseStock(Long id, int number) {
- BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.MINT_ACTIVITY_STOCK + id);
- if (ops.get() == null) {
- Boolean success = ops.setIfAbsent(Optional.ofNullable(activityCollectionRepo.getStock(id))
- .orElse(0), 7, TimeUnit.DAYS);
- log.info("创建redis铸造活动库存:{}", success);
- }
- Long stock = ops.increment(number);
- rocketMQTemplate.convertAndSend(generalProperties.getUpdateActivityStockTopic(), id);
- return stock;
- }
- @Debounce(key = "#id", delay = 500)
- public void syncStock(Long id) {
- Integer stock = (Integer) redisTemplate.opsForValue().get(RedisKeys.MINT_ACTIVITY_STOCK + id);
- if (stock != null) {
- log.info("同步铸造活动库存信息{}", id);
- activityCollectionRepo.updateStock(id, stock);
- cacheService.clearActivityCollection(id);
- }
- }
- }
|