1. //异步编排 多线程执行
    2. //获取现在时间段的秒杀商品 并合并到dailySecondKillVO
    3. //判断activityDateVO是否有指定时间 如果为空则为当前时间
    4. CompletableFuture<List<DailySecondKillVO>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
    5. System.out.println(1);
    6. List<DailySecondKillVO> dailySecondKillVO = new ArrayList<>();
    7. //获取参加今天秒杀的商品
    8. List<SecondKillApplicationEntity> secondKillApplication = secondKillApplicationDao.secondKillGoodsToday();
    9. if (activityDateVO.getStartIntervalTime() == null) {
    10. long count = secondKillApplication.parallelStream()
    11. .filter(secondKillApplicationEntity -> secondKillApplicationEntity.getStartIntervalTime().isBefore(LocalTime.now()) && secondKillApplicationEntity.getEndIntervalTime().isAfter(LocalTime.now()))
    12. .map(secoundEntity -> {
    13. DailySecondKillVO dailySecondKillVO1 = new DailySecondKillVO();
    14. BeanUtils.copyProperties(secoundEntity, dailySecondKillVO1);
    15. dailySecondKillVO.add(dailySecondKillVO1);
    16. return dailySecondKillVO;
    17. })
    18. .count();
    19. } else {
    20. long count = secondKillApplication.parallelStream()
    21. .filter(secondKillApplicationEntity -> secondKillApplicationEntity.getStartIntervalTime().equals(activityDateVO.getStartIntervalTime()))
    22. .map(secoundEntity -> {
    23. DailySecondKillVO dailySecondKillVO1 = new DailySecondKillVO();
    24. BeanUtils.copyProperties(secoundEntity, dailySecondKillVO1);
    25. dailySecondKillVO.add(dailySecondKillVO1);
    26. return dailySecondKillVO;
    27. })
    28. .count();
    29. }
    30. return dailySecondKillVO;
    31. }, executor);
    32. CompletableFuture<List<SpikeTimePeriodEntity>> sort = CompletableFuture.supplyAsync(() -> {
    33. System.out.println(2);
    34. List<SpikeTimePeriodEntity> timeSlot = spikeTimePeriodDao.timeSlot();
    35. int size = timeSlot.size();
    36. if (size <= 5) {
    37. int count = 5 - size;
    38. QueryWrapper<SpikeTimePeriodEntity> queryWrapper = new QueryWrapper<>(new SpikeTimePeriodEntity());
    39. queryWrapper.orderByAsc("sort");
    40. queryWrapper.last("limit " + count);
    41. List<SpikeTimePeriodEntity> spikeTimePeriodEntities1 = spikeTimePeriodDao.selectList(queryWrapper);
    42. timeSlot.addAll(spikeTimePeriodEntities1);
    43. }
    44. return timeSlot;
    45. }, executor);
    46. //构建时间段选型按照现在的时间段 以及后面四个
    47. CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(listCompletableFuture, sort);
    48. try {
    49. return R.ok().put("dailySecondKillVO",listCompletableFuture.get()).put("timeSlot",sort.get());
    50. } catch (InterruptedException e) {
    51. throw new RuntimeException(e);
    52. } catch (ExecutionException e) {
    53. throw new RuntimeException(e);
    54. }