diff --git a/src/main/java/com/xiang/common/config/RedisProperties.java b/src/main/java/com/xiang/common/config/RedisProperties.java index 294b887..05f1dc8 100644 --- a/src/main/java/com/xiang/common/config/RedisProperties.java +++ b/src/main/java/com/xiang/common/config/RedisProperties.java @@ -14,7 +14,7 @@ public class RedisProperties { private String host; private String port; private String password; - private Integer database = 0; + private Integer database; public String getAddress() { return "redis://" + host + ":" + port; diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxMiniappScheduleConfig.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxMiniappScheduleConfig.java index aff3a11..af70e5a 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxMiniappScheduleConfig.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxMiniappScheduleConfig.java @@ -19,6 +19,7 @@ public class JntyzxMiniappScheduleConfig { private final JtVenuePullTask jtVenuePullTask; private final JtVenueSubscribeTask jtVenueSubscribeTask; private final JtVenueTomorrowPullTask jtVenueTomorrowPullTask; + private final JntyzxUserInfoConfigTask jntyzxUserInfoConfigTask; @Scheduled(cron = "0 20,50 * * * ?") @@ -27,7 +28,7 @@ public class JntyzxMiniappScheduleConfig { jtTokenRefreshTask.run(); } - @Scheduled(cron = "0 0/1 10-18 * * ?") +// @Scheduled(cron = "0 0/1 10-18 * * ?") @GetMapping("/jtVenuePullTask") public void jtVenuePullTask() { jtVenuePullTask.run(); @@ -42,7 +43,7 @@ public class JntyzxMiniappScheduleConfig { @Scheduled(cron = "0 40 8 * * ?") @GetMapping("/jtUserInfoConfig") public void jtUserInfoConfig() { - + jntyzxUserInfoConfigTask.run(); } @Scheduled(cron = "5 0 9 * * ?") diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxUserInfoConfigTask.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxUserInfoConfigTask.java index 9f6dd70..c232807 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxUserInfoConfigTask.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JntyzxUserInfoConfigTask.java @@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; +import java.util.Comparator; import java.util.List; /** @@ -66,12 +67,15 @@ public class JntyzxUserInfoConfigTask extends BaseScheduleTaskTemplate { protected TaskResult doExecute(Object validatedParams) throws Exception { TaskResult taskResult = new TaskResult(); taskResult.setSuccess(false); - List venueInfoDOS = venueService.queryCanBuyVenue(); + List venueInfoDOS = venueService.queryTomorrowCanBuyVenue(); if (CollectionUtils.isEmpty(venueInfoDOS)) { taskResult.setSummary("无可用场地"); return taskResult; } - venueInfoDOS = venueInfoDOS.stream().filter(VenueInfoUtils::get628VenueInfo).toList(); + venueInfoDOS = venueInfoDOS.stream() + .filter(VenueInfoUtils::get11213VenueInfo4Mor) + .sorted(Comparator.comparing(item -> VenueInfoUtils.sortVenueInfo(item.getPlaceName()))) + .toList(); if (CollectionUtils.isEmpty(venueInfoDOS)) { taskResult.setSummary("无可用场地"); return taskResult; diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JtVenueSubscribeTask.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JtVenueSubscribeTask.java index e1c0989..6ed10b6 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JtVenueSubscribeTask.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/schedule/JtVenueSubscribeTask.java @@ -1,10 +1,10 @@ package com.xiang.service.module.jntyzx.miniapp.schedule; -import com.alibaba.fastjson.JSON; import com.xiang.common.enums.RedisKeyConstant; import com.xiang.common.enums.ScheduleEnums; import com.xiang.common.factory.JntyzxDingTalkFactory; import com.xiang.common.factory.schedule.BaseScheduleTaskTemplate; +import com.xiang.common.pojo.jntyzx.miniapp.pojo.UserInfoDO; import com.xiang.common.pojo.jntyzx.miniapp.pojo.UserTokenInfoDO; import com.xiang.common.pojo.jntyzx.miniapp.pojo.VenueInfoDO; import com.xiang.common.pojo.schedule.TaskResult; @@ -12,19 +12,23 @@ import com.xiang.common.service.IScheduleOpeningConfigService; import com.xiang.common.service.IScheduleRunLogService; import com.xiang.common.utils.RedisService; import com.xiang.service.module.jntyzx.miniapp.service.IJtOrderService; +import com.xiang.service.module.jntyzx.miniapp.service.IUserInfoService; import com.xiang.service.module.jntyzx.miniapp.service.IUserTokenInfoService; import com.xiang.service.module.jntyzx.miniapp.service.IVenueService; import com.xiang.service.module.jntyzx.miniapp.utils.VenueInfoUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestController; -import java.util.Comparator; +import java.time.Duration; +import java.time.LocalTime; import java.util.List; import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.function.Function; import java.util.stream.Collectors; @Slf4j @@ -37,6 +41,7 @@ public class JtVenueSubscribeTask extends BaseScheduleTaskTemplate { private final IVenueService venueService; private final JntyzxDingTalkFactory jtDingTalkFactory; private final RedisService redisService; + private final IUserInfoService userInfoService; public JtVenueSubscribeTask(IScheduleOpeningConfigService scheduleOpeningConfigService, IScheduleRunLogService scheduleRunLogService, @@ -44,13 +49,15 @@ public class JtVenueSubscribeTask extends BaseScheduleTaskTemplate { IJtOrderService jtOrderService, IVenueService venueService, JntyzxDingTalkFactory jtDingTalkFactory, - RedisService redisService) { + RedisService redisService, + IUserInfoService userInfoService) { super(scheduleOpeningConfigService, scheduleRunLogService); this.userTokenInfoService = userTokenInfoService; this.jtOrderService = jtOrderService; this.venueService = venueService; this.jtDingTalkFactory = jtDingTalkFactory; this.redisService = redisService; + this.userInfoService = userInfoService; } @Override @@ -81,31 +88,53 @@ public class JtVenueSubscribeTask extends BaseScheduleTaskTemplate { taskResult.setSummary("无可下单用户"); return taskResult; } + Map userMap = users.stream().collect(Collectors.toMap(UserTokenInfoDO::getName, Function.identity(), (a, b) -> a)); + List venueInfoDOS = venueService.queryTomorrowCanBuyVenue(); Map> venueInfoMap = venueInfoDOS.stream() - .filter(VenueInfoUtils::get8210VenueInfo) - .filter(item -> !StringUtils.contains(item.getPlaceName(), "小馆")) .collect(Collectors.groupingByConcurrent(VenueInfoDO::getPlaceName)); - if (MapUtils.isEmpty(venueInfoMap)) { - log.info("暂无可下单场地,time:{}", System.currentTimeMillis()); - taskResult.setSummary("无下单场地"); + + List userInfoDOS = userInfoService.selectAll(); + if (CollectionUtils.isEmpty(userInfoDOS)) { + log.info("暂无可下单用户, time:{}", System.currentTimeMillis()); + jtDingTalkFactory.sendMsg("暂无可下单用户配置信息, time:" + System.currentTimeMillis()); + taskResult.setSummary("无可下单用户配置信息"); return taskResult; } - users.parallelStream().forEach(user -> { - try { - List placeNameList = venueInfoMap.keySet().stream().sorted(Comparator.comparing(VenueInfoUtils::sortVenueInfo)).toList(); - log.info("场地排序后的集合:{}", JSON.toJSONString(placeNameList)); - for (String placeName : placeNameList) { - List venueInfoDOList = venueInfoMap.get(placeName); + + for (UserInfoDO userInfoDO : userInfoDOS) { + if (venueInfoMap.containsKey(userInfoDO.getPlaceName()) && userMap.containsKey(userInfoDO.getName())) { + UserTokenInfoDO userTokenInfoDO = userMap.get(userInfoDO.getName()); + List venueInfoDOList = venueInfoMap.get(userInfoDO.getPlaceName()); + if (CollectionUtils.isEmpty(venueInfoDOList)) { + continue; + } + venueInfoDOList = VenueInfoUtils.filterVenueList(userInfoDO.getSiteTimeName(), venueInfoDOS); + if (CollectionUtils.isEmpty(venueInfoDOList)) { + logger.info("用户:{}无场地信息:{},时间:{}", userInfoDO.getName(), userInfoDO.getPlaceName(), userInfoDO.getSiteTimeName()); + continue; + } + + String placeName = userInfoDO.getPlaceName(); + + ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); + //计算9点到现在的时间差 + //获取江体当前时间 + LocalTime currentTime = LocalTime.now(); + LocalTime targetTime = LocalTime.parse("09:00:10"); + Duration duration = Duration.between(currentTime, targetTime); + long milliseconds = duration.toMillis(); + List finalVenueInfoDOList = venueInfoDOList; +// executorService.schedule(() -> { for (int i = 0; i < 10; i++) { String valid = (String) redisService.get(RedisKeyConstant.getVenueSubscribeKey(placeName)); if (StringUtils.isNotBlank(valid)) { break; } - boolean order = jtOrderService.createOrder(venueInfoDOList, user); + boolean order = jtOrderService.createOrder(finalVenueInfoDOList, userTokenInfoDO); if (order) { - return; + break; } try { Thread.sleep(1250); @@ -113,13 +142,10 @@ public class JtVenueSubscribeTask extends BaseScheduleTaskTemplate { log.error("睡眠失败~~~"); } } - } - } catch (Exception e) { - // 关键点:异常只影响当前 user - log.error("createOrder 异常,user={}", user.getId(), e); - return; // 结束这个 user,不影响其他 user +// }, milliseconds, TimeUnit.MILLISECONDS); } - }); + } + taskResult.setSuccess(true); taskResult.setSummary("下单执行成功!"); return taskResult; diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/IUserInfoService.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/IUserInfoService.java index bf7eaea..72e5845 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/IUserInfoService.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/IUserInfoService.java @@ -13,4 +13,6 @@ public interface IUserInfoService { boolean delAll(); boolean batchSave(List list); + + List selectAll(); } diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/impl/UserInfoServiceImpl.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/impl/UserInfoServiceImpl.java index 7f3c316..f162388 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/impl/UserInfoServiceImpl.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/service/impl/UserInfoServiceImpl.java @@ -29,4 +29,9 @@ public class UserInfoServiceImpl implements IUserInfoService { public boolean batchSave(List list) { return userInfoManage.saveBatch(list); } + + @Override + public List selectAll() { + return userInfoManage.list(); + } } diff --git a/src/main/java/com/xiang/service/module/jntyzx/miniapp/utils/VenueInfoUtils.java b/src/main/java/com/xiang/service/module/jntyzx/miniapp/utils/VenueInfoUtils.java index f621f25..8a3ca0a 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/miniapp/utils/VenueInfoUtils.java +++ b/src/main/java/com/xiang/service/module/jntyzx/miniapp/utils/VenueInfoUtils.java @@ -4,12 +4,20 @@ import com.xiang.common.pojo.jntyzx.miniapp.pojo.VenueInfoDO; import com.xiang.common.pojo.jntyzx.miniapp.resp.query.SitePositionList; import org.apache.commons.lang3.StringUtils; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + /** * @Author: xiang * @Date: 2025-12-16 09:55 */ public class VenueInfoUtils { + public static boolean get11213VenueInfo4Mor(VenueInfoDO venueInfoDO) { + return StringUtils.equals(venueInfoDO.getSjName(), "11:00-12:00") || StringUtils.equals(venueInfoDO.getSjName(), "12:00-13:00"); + } + public static boolean get123VenueInfo4Mor(VenueInfoDO venueInfoDO) { return StringUtils.equals(venueInfoDO.getSjName(), "13:00-14:00") || StringUtils.equals(venueInfoDO.getSjName(), "14:00-15:00"); } @@ -44,4 +52,32 @@ public class VenueInfoUtils { } return 5; } + + public static List filterVenueList(String siteTimeName, List venueInfoDOS) { + if (StringUtils.equals(siteTimeName, "18:00")) { + return venueInfoDOS.stream().filter(VenueInfoUtils::get628VenueInfo).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "20:00")) { + return venueInfoDOS.stream().filter(VenueInfoUtils::get8210VenueInfo).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "12:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "12:00-13:00")).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "13:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "13:00-14:00")).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "14:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "14:00-15:00")).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "15:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "15:00-16:00")).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "16:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "16:00-17:00")).collect(Collectors.toList()); + } + if (StringUtils.equals(siteTimeName, "17:00")) { + return venueInfoDOS.stream().filter(item -> Objects.equals(item.getSjName(), "17:00-18:00")).collect(Collectors.toList()); + } + return null; + } }