|
|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|