Quellcode durchsuchen

预约流程定时任务

ouyang vor 3 Jahren
Ursprung
Commit
3c684359e0

+ 13 - 1
src/main/java/com/izouma/nineth/repo/SubscribeRepo.java

@@ -2,17 +2,29 @@ package com.izouma.nineth.repo;
 
 
 import com.izouma.nineth.domain.Subscribe;
-import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
 
 public interface SubscribeRepo extends JpaRepository<Subscribe, Long>, JpaSpecificationExecutor<Subscribe> {
     @Query("update Subscribe t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    @Query("select s.id, s.collectionId, s.userId, s.purchaseQualifications from Subscribe s where s.collectionId =?1")
+    List<Subscribe> findAllByCollectionId(Long collectionId);
+
+    @Query("select s.id, s.collectionId, s.userId, s.purchaseQualifications from Subscribe s where s.collectionId =?1 and s.userId = ?2")
+    Subscribe findAllByCollectionIdAndUserId(Long collectionId , Long userId);
+
+    @Transactional
+    @Modifying
+    @Query("update Subscribe s set s.purchaseQualifications = ?2 where s.id = ?1")
+    void setPurchaseQualifications(Long id, boolean purchaseQualifications);
 }

+ 59 - 0
src/main/java/com/izouma/nineth/service/scheduledTask/SubscribeTask.java

@@ -0,0 +1,59 @@
+package com.izouma.nineth.service.scheduledTask;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.alipay.api.domain.Person;
+import com.izouma.nineth.domain.Collection;
+import com.izouma.nineth.domain.Subscribe;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.CollectionRepo;
+import com.izouma.nineth.repo.SubscribeRepo;
+import io.jsonwebtoken.lang.Collections;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class SubscribeTask {
+
+    @Autowired
+    private CollectionRepo collectionRepo;
+    @Autowired
+    private SubscribeRepo subscribeRepo;
+
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void subscriberTask(){
+        ArrayList<Subscribe> subscribes = new ArrayList<>();
+        LocalDateTime startTime = LocalDateTime.now();
+        LocalDateTime endTime = startTime.plusMinutes(10);
+        List<Collection> collectionList = collectionRepo.findByStartTimeAfter(startTime,endTime);
+        if (Collections.isEmpty(collectionList)){
+            log.error("该时间段中并无藏品筛选");
+            return;
+        }
+        collectionList.forEach(collection -> {
+            List<Subscribe> subscribeList = subscribeRepo.findAllByCollectionId(collection.getId());
+            if (subscribeList.size() < collection.getStock()){
+                for (Subscribe subscribe : subscribeList) {
+                    subscribeRepo.setPurchaseQualifications(subscribe.getId(),true);
+                }
+            }else {
+                for (int i = 0; i < collection.getStock(); i++) {
+                    subscribes.add(RandomUtil.randomEle(subscribeList));
+                }
+                List<Long> list = subscribes.stream().map(Subscribe::getId).collect(Collectors.toList());
+                for (Long id :list){
+                    subscribeRepo.setPurchaseQualifications(id,true);
+                }
+            }
+        });
+    }
+}