|
|
@@ -5,6 +5,7 @@ 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.enums.SubscribeStatus;
|
|
|
import com.izouma.nineth.exception.BusinessException;
|
|
|
import com.izouma.nineth.repo.CollectionRepo;
|
|
|
import com.izouma.nineth.repo.SubscribeRepo;
|
|
|
@@ -29,29 +30,71 @@ public class SubscribeTask {
|
|
|
@Autowired
|
|
|
private SubscribeRepo subscribeRepo;
|
|
|
|
|
|
- @Scheduled(cron = "0/30 * * * * ? ")
|
|
|
- public void subscriberTask(){
|
|
|
- ArrayList<Subscribe> subscribes = new ArrayList<>();
|
|
|
+ @Scheduled(cron = "0/5 * * * * ? *")
|
|
|
+ public void subscriberTask() {
|
|
|
+ //首先获取当前时间
|
|
|
LocalDateTime startTime = LocalDateTime.now();
|
|
|
- LocalDateTime endTime = LocalDateTime.now().plusMinutes(1);
|
|
|
- List<Collection> collectionList = collectionRepo.findAllByEndTimeLessThanEqualAndEndTimeLessThan(startTime,endTime);
|
|
|
- if (Collections.isEmpty(collectionList)){
|
|
|
- log.error("该时间段中并无藏品筛选");
|
|
|
- return;
|
|
|
+ //获取5秒钟以后的时间
|
|
|
+ LocalDateTime endTime = startTime.plusSeconds(5);
|
|
|
+ //根据开始时间和结束时间去数据库把这两个时间段中 符合的预约发布时间中获取藏品
|
|
|
+ List<Collection> ongoingList = collectionRepo.findAllByStartTimeGreaterThanAndsAndStartTimeGreaterThanEqual(startTime, endTime);
|
|
|
+ //预约发布时间判断
|
|
|
+ if (!Collections.isEmpty(ongoingList)) {
|
|
|
+ for (Collection collection : ongoingList) {
|
|
|
+ if (collection.getStartTime().isAfter(startTime) && collection.getStartTime().isAfter(endTime)) {
|
|
|
+ int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ONGOING);
|
|
|
+ System.out.println("影响的行数为: " + i);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- for (Collection collection : collectionList) {
|
|
|
- List<Subscribe> subscribeList = subscribeRepo.findAllByCollectionId(collection.getId());
|
|
|
- if (subscribeList.size() < collection.getStock()){
|
|
|
- for (Subscribe subscribe : subscribeList) {
|
|
|
- subscribeRepo.setPurchaseQualifications(subscribe.getId(),true);
|
|
|
+ //预约结束时间判断
|
|
|
+ List<Collection> subscribeEndingList = collectionRepo.findAllByEndTimeGreaterThanAndEndTimeGreaterThanEqual(startTime, endTime);
|
|
|
+ if (!Collections.isEmpty(subscribeEndingList)) {
|
|
|
+ for (Collection collection : subscribeEndingList) {
|
|
|
+ if (collection.getEndTime().isAfter(startTime) && collection.getEndTime().isAfter(endTime)) {
|
|
|
+ int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.SUBSCRIBE_ENDING);
|
|
|
+ System.out.println("影响的行数为: " + i);
|
|
|
}
|
|
|
- }else {
|
|
|
- for (int i = 0; i < collection.getStock(); i++) {
|
|
|
- subscribes.add(RandomUtil.randomEle(subscribeList));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //进行购买资格筛选
|
|
|
+ List<Collection> collectionList = collectionRepo.findAllByEndTimeLessThanEqualAndPublishTimeGreaterThan(startTime, endTime);
|
|
|
+ if (!Collections.isEmpty(collectionList)) {
|
|
|
+ for (Collection collection : collectionList) {
|
|
|
+ List<Subscribe> subscribeList = subscribeRepo.findAllByCollectionId(collection.getId());
|
|
|
+ if (subscribeList.size() < collection.getStock()) {
|
|
|
+ for (Subscribe subscribe : subscribeList) {
|
|
|
+ subscribeRepo.setPurchaseQualifications(subscribe.getId(), true);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ArrayList<Subscribe> subscribes = new ArrayList<>();
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|
|
|
- List<Long> list = subscribes.stream().map(Subscribe::getId).collect(Collectors.toList());
|
|
|
- for (Long id :list){
|
|
|
- subscribeRepo.setPurchaseQualifications(id,true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //购买资格公布时间
|
|
|
+ List<Collection> announcingList = collectionRepo.findAllByPublishTimeGreaterThanAndPublishTimeGreaterThanEqual(startTime, endTime);
|
|
|
+ if (!Collections.isEmpty(announcingList)) {
|
|
|
+ for (Collection collection : announcingList) {
|
|
|
+ if (collection.getPublishTime().isAfter(startTime) && collection.getPublishTime().isAfter(endTime)) {
|
|
|
+ int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ANNOUNCING);
|
|
|
+ System.out.println("影响的行数为: " + i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //购买时间
|
|
|
+ List<Collection> onSaleList = collectionRepo.findAllByPurchaseTimeGreaterThanAndPurchaseTimeGreaterThanEqual(startTime, endTime);
|
|
|
+ if (!Collections.isEmpty(onSaleList)) {
|
|
|
+ for (Collection collection : onSaleList) {
|
|
|
+ if (collection.getPurchaseTime().isAfter(startTime) && collection.getPurchaseTime().isAfter(endTime)) {
|
|
|
+ int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ON_SALE);
|
|
|
+ System.out.println("影响的行数为: " + i);
|
|
|
}
|
|
|
}
|
|
|
}
|