Bladeren bron

定时任务更改

ouyang 3 jaren geleden
bovenliggende
commit
c1c81d7178

+ 7 - 12
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -147,24 +147,19 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
     @Query("select c.vipQuota from Collection c where c.id = ?1")
     Integer getVipQuota(Long id);
 
-//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.start_time >= ?1 ", nativeQuery = true)
-//    @Query(value = "select c.id, c.assetId, c.stock, c.startTime, c.endTime, c.publishTime, c.purchaseTime from Collection c where c.startTime >= ?1 ")
-//    List<Collection> selectOpenSubscribe(LocalDateTime startTime);
-    List<Collection> findAllByStartTimeGreaterThanEqual(LocalDateTime startTime);
 
-//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.start_time <= ?1 and c.end_time >= ?2 ", nativeQuery = true)
-    List<Collection> findAllByStartTimeLessThanEqualAndEndTimeGreaterThanEqual(LocalDateTime startTime, LocalDateTime endTime);
+    List<Collection> findAllByStartTimeGreaterThanAndsAndStartTimeGreaterThanEqual(LocalDateTime startTime,LocalDateTime endTime);
 
-//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.end_time <= ?1 and c.publish_time >= ?2 ", nativeQuery = true)
-    List<Collection> findAllByEndTimeLessThanEqualAndPublishTimeGreaterThanEqual(LocalDateTime endTime, LocalDateTime publishTime);
+    List<Collection> findAllByEndTimeGreaterThanAndEndTimeGreaterThanEqual(LocalDateTime startTime, LocalDateTime endTime);
 
-//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.publish_time <= ?1 and c.purchase_time >= ?2 ", nativeQuery = true)
-    List<Collection> findAllByPublishTimeLessThanEqualAndPurchaseTimeGreaterThanEqual(LocalDateTime publishTime, LocalDateTime purchaseTime);
+    List<Collection> findAllByPublishTimeGreaterThanAndPublishTimeGreaterThanEqual(LocalDateTime endTime, LocalDateTime publishTime);
+
+    List<Collection> findAllByPurchaseTimeGreaterThanAndPurchaseTimeGreaterThanEqual(LocalDateTime publishTime, LocalDateTime purchaseTime);
 
 
     //筛选
-//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.end_time <= ?1 and c.end_time < ?2", nativeQuery = true)
-    List<Collection> findAllByEndTimeLessThanEqualAndEndTimeLessThan(LocalDateTime startTime, LocalDateTime endTime);
+//    @Query(value = "select c.id, c.asset_id, c.stock, c.start_time, c.end_time, c.publish_time, c.purchase_time from collection_info c where c.end_time <= ?1 and c.publish_time > ?2", nativeQuery = true)
+    List<Collection> findAllByEndTimeLessThanEqualAndPublishTimeGreaterThan(LocalDateTime startTime, LocalDateTime endTime);
 
     @Transactional
     @Modifying

+ 28 - 28
src/main/java/com/izouma/nineth/service/scheduledTask/AnnouncingTask.java

@@ -34,33 +34,33 @@ public class AnnouncingTask extends ScheduleConfig {
     private Date time;
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-        taskRegistrar.addTriggerTask(() -> {
-            b:
-            if (Collections.isEmpty(collections)){
-                return;
-            }else {
-                for (Collection collection : collections) {
-                    if (collection.getPublishTime().isBefore(LocalDateTime.now()) && collection.getPublishTime().isBefore(LocalDateTime.now().minusSeconds(2))){
-                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ANNOUNCING);
-                        time = null;
-                        collections.remove(0);
-                        break b;
-                    }
-                }
-            }
-        }, triggerContext -> {
-            if (ObjectUtil.isEmpty(time)){
-                LocalDateTime startTime = LocalDateTime.now();
-                LocalDateTime endTime = startTime.plusMinutes(4);
-                List<Collection> collectionList = collectionRepo.findAllByEndTimeLessThanEqualAndPublishTimeGreaterThanEqual(startTime, endTime);
-                if (Collections.isEmpty(collectionList)) {
-                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
-                }else {
-                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getPublishTime)).collect(Collectors.toList());
-                    time = Date.from(collections.get(0).getPublishTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
-                }
-            }
-            return time;
-        });
+//        taskRegistrar.addTriggerTask(() -> {
+//            b:
+//            if (Collections.isEmpty(collections)){
+//                return;
+//            }else {
+//                for (Collection collection : collections) {
+//                    if (collection.getPublishTime().isBefore(LocalDateTime.now()) && collection.getPublishTime().isBefore(LocalDateTime.now().minusSeconds(2))){
+//                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ANNOUNCING);
+//                        time = null;
+//                        collections.remove(0);
+//                        break b;
+//                    }
+//                }
+//            }
+//        }, triggerContext -> {
+//            if (ObjectUtil.isEmpty(time)){
+//                LocalDateTime startTime = LocalDateTime.now();
+//                LocalDateTime endTime = startTime.plusMinutes(4);
+//                List<Collection> collectionList = collectionRepo.findAllByEndTimeLessThanEqualAndPublishTimeGreaterThanEqual(startTime, endTime);
+//                if (Collections.isEmpty(collectionList)) {
+//                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
+//                }else {
+//                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getPublishTime)).collect(Collectors.toList());
+//                    time = Date.from(collections.get(0).getPublishTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
+//                }
+//            }
+//            return time;
+//        });
     }
 }

+ 28 - 28
src/main/java/com/izouma/nineth/service/scheduledTask/OnSaleTask.java

@@ -33,33 +33,33 @@ public class OnSaleTask extends ScheduleConfig {
     private Date time;
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-        taskRegistrar.addTriggerTask(() -> {
-            b:
-            if (Collections.isEmpty(collections)){
-                return;
-            }else {
-                for (Collection collection : collections) {
-                    if (collection.getPurchaseTime().isBefore(LocalDateTime.now()) && collection.getPurchaseTime().isBefore(LocalDateTime.now().minusSeconds(2))){
-                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ON_SALE);
-                        time = null;
-                        collections.remove(0);
-                        break b;
-                    }
-                }
-            }
-        }, triggerContext -> {
-            if (ObjectUtil.isEmpty(time)){
-                LocalDateTime startTime = LocalDateTime.now();
-                LocalDateTime endTime = startTime.plusMinutes(4);
-                List<Collection> collectionList = collectionRepo.findAllByPublishTimeLessThanEqualAndPurchaseTimeGreaterThanEqual(startTime, endTime);
-                if (Collections.isEmpty(collectionList)) {
-                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
-                }else {
-                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getPurchaseTime)).collect(Collectors.toList());
-                    time = Date.from(collections.get(0).getPurchaseTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
-                }
-            }
-            return time;
-        });
+//        taskRegistrar.addTriggerTask(() -> {
+//            b:
+//            if (Collections.isEmpty(collections)){
+//                return;
+//            }else {
+//                for (Collection collection : collections) {
+//                    if (collection.getPurchaseTime().isBefore(LocalDateTime.now()) && collection.getPurchaseTime().isBefore(LocalDateTime.now().minusSeconds(2))){
+//                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ON_SALE);
+//                        time = null;
+//                        collections.remove(0);
+//                        break b;
+//                    }
+//                }
+//            }
+//        }, triggerContext -> {
+//            if (ObjectUtil.isEmpty(time)){
+//                LocalDateTime startTime = LocalDateTime.now();
+//                LocalDateTime endTime = startTime.plusMinutes(4);
+//                List<Collection> collectionList = collectionRepo.findAllByPublishTimeLessThanEqualAndPurchaseTimeGreaterThanEqual(startTime, endTime);
+//                if (Collections.isEmpty(collectionList)) {
+//                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
+//                }else {
+//                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getPurchaseTime)).collect(Collectors.toList());
+//                    time = Date.from(collections.get(0).getPurchaseTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
+//                }
+//            }
+//            return time;
+//        });
     }
 }

+ 37 - 37
src/main/java/com/izouma/nineth/service/scheduledTask/OngoingTask.java

@@ -34,42 +34,42 @@ public class OngoingTask extends ScheduleConfig {
 
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-        taskRegistrar.addTriggerTask(() -> {
-            b:if (Collections.isEmpty(collections)) {
-                return;
-            } else {
-                for (Collection collection : collections) {
-                    if (collection.getStartTime().isBefore(LocalDateTime.now()) && collection.getStartTime().isBefore(LocalDateTime.now().minusSeconds(2))) {
-                        int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ONGOING);
-                        System.out.println("影响的行数为: " + i);
-                        time = null;
-                        collections.remove(0);
-                        break b;
-                    }
-                }
-            }
-        }, triggerContext -> {
-            if (ObjectUtil.isEmpty(time)) {
-                //首先获取当前时间
-//                LocalDateTime startTime = LocalDateTime.now().minusMinutes(1);
-                LocalDateTime startTime = LocalDateTime.now();
-                //获取四分钟以后的时间
-                LocalDateTime endTime = startTime.plusMinutes(4);
-                //根据开始时间和结束时间去数据库把这两个时间段中 符合的预约发布时间中获取藏品
-                List<Collection> collectionList = collectionRepo.findAllByStartTimeGreaterThanEqual(startTime);
-                //判断获取的藏品列表是否为空
-                if (Collections.isEmpty(collectionList)) {
-//                    return new CronTrigger("0 0/10 * * * ?").nextExecutionTime(triggerContext);
-                    //藏品列表为空 则设置下次的时间查询为结束时间的前30秒  前10秒  前10
-                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
-                }else {
-                    //藏品列表不为空则将取出来的藏品列表根据预约发布的时间排序放入等待的藏品列表
-                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getStartTime)).collect(Collectors.toList());
-                    time = Date.from(collections.get(0).getStartTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
-                }
-            }
-            //取第一个藏品的预约发布时间的前10秒做下次定时任务的时间  换成五秒  两秒
-            return time;
-        });
+//        taskRegistrar.addTriggerTask(() -> {
+//            b:if (Collections.isEmpty(collections)) {
+//                return;
+//            } else {
+//                for (Collection collection : collections) {
+//                    if (collection.getStartTime().isBefore(LocalDateTime.now()) && collection.getStartTime().isBefore(LocalDateTime.now().minusSeconds(2))) {
+//                        int i = collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.ONGOING);
+//                        System.out.println("影响的行数为: " + i);
+//                        time = null;
+//                        collections.remove(0);
+//                        break b;
+//                    }
+//                }
+//            }
+//        }, triggerContext -> {
+//            if (ObjectUtil.isEmpty(time)) {
+//                //首先获取当前时间
+////                LocalDateTime startTime = LocalDateTime.now().minusMinutes(1);
+//                LocalDateTime startTime = LocalDateTime.now();
+//                //获取四分钟以后的时间
+//                LocalDateTime endTime = startTime.plusMinutes(4);
+//                //根据开始时间和结束时间去数据库把这两个时间段中 符合的预约发布时间中获取藏品
+//                List<Collection> collectionList = collectionRepo.findAllByStartTimeGreaterThanEqual(startTime);
+//                //判断获取的藏品列表是否为空
+//                if (Collections.isEmpty(collectionList)) {
+////                    return new CronTrigger("0 0/10 * * * ?").nextExecutionTime(triggerContext);
+//                    //藏品列表为空 则设置下次的时间查询为结束时间的前30秒  前10秒  前10
+//                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
+//                }else {
+//                    //藏品列表不为空则将取出来的藏品列表根据预约发布的时间排序放入等待的藏品列表
+//                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getStartTime)).collect(Collectors.toList());
+//                    time = Date.from(collections.get(0).getStartTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
+//                }
+//            }
+//            //取第一个藏品的预约发布时间的前10秒做下次定时任务的时间  换成五秒  两秒
+//            return time;
+//        });
     }
 }

+ 28 - 28
src/main/java/com/izouma/nineth/service/scheduledTask/SubscribeEenIngTask.java

@@ -34,33 +34,33 @@ public class SubscribeEenIngTask extends ScheduleConfig {
     private Date time;
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-        taskRegistrar.addTriggerTask(() -> {
-            b:
-            if (Collections.isEmpty(collections)){
-                return;
-            }else {
-                for (Collection collection : collections) {
-                    if (collection.getEndTime().isBefore(LocalDateTime.now()) && collection.getEndTime().isBefore(LocalDateTime.now().minusSeconds(2))){
-                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.SUBSCRIBE_ENDING);
-                        time = null;
-                        collections.remove(0);
-                        break b;
-                    }
-                }
-            }
-        }, triggerContext -> {
-            if (ObjectUtil.isEmpty(time)){
-                LocalDateTime startTime = LocalDateTime.now();
-                LocalDateTime endTime = startTime.plusMinutes(4);
-                List<Collection> collectionList = collectionRepo.findAllByStartTimeLessThanEqualAndEndTimeGreaterThanEqual(startTime, endTime);
-                if (Collections.isEmpty(collectionList)) {
-                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
-                }else {
-                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getEndTime)).collect(Collectors.toList());
-                    time = Date.from(collections.get(0).getEndTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
-                }
-            }
-            return time;
-        });
+//        taskRegistrar.addTriggerTask(() -> {
+//            b:
+//            if (Collections.isEmpty(collections)){
+//                return;
+//            }else {
+//                for (Collection collection : collections) {
+//                    if (collection.getEndTime().isBefore(LocalDateTime.now()) && collection.getEndTime().isBefore(LocalDateTime.now().minusSeconds(2))){
+//                        collectionRepo.updateSubscribeStatus(collection.getId(), SubscribeStatus.SUBSCRIBE_ENDING);
+//                        time = null;
+//                        collections.remove(0);
+//                        break b;
+//                    }
+//                }
+//            }
+//        }, triggerContext -> {
+//            if (ObjectUtil.isEmpty(time)){
+//                LocalDateTime startTime = LocalDateTime.now();
+//                LocalDateTime endTime = startTime.plusMinutes(4);
+//                List<Collection> collectionList = collectionRepo.findAllByStartTimeLessThanEqualAndEndTimeGreaterThanEqual(startTime, endTime);
+//                if (Collections.isEmpty(collectionList)) {
+//                    time = Date.from(endTime.minusSeconds(5).atZone(ZoneId.systemDefault()).toInstant());
+//                }else {
+//                    collections = collectionList.stream().sorted(Comparator.comparing(Collection::getEndTime)).collect(Collectors.toList());
+//                    time = Date.from(collections.get(0).getEndTime().minusSeconds(2).atZone(ZoneId.systemDefault()).toInstant());
+//                }
+//            }
+//            return time;
+//        });
     }
 }

+ 62 - 19
src/main/java/com/izouma/nineth/service/scheduledTask/SubscribeTask.java

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