From e43af1fe9425705f0ffa8a61f3836e45d7b7f9b7 Mon Sep 17 00:00:00 2001 From: xiang Date: Thu, 15 Jan 2026 20:11:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B1=9F=E4=BD=93=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=9C=BA=E5=9C=B0=E4=BF=A1=E6=81=AF=E6=8B=89=E5=8F=96?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jntyzx/service/IUserTokenInfoService.java | 5 ++ .../modules/jntyzx/service/IVenueService.java | 7 ++ .../impl/UserTokenInfoServiceImpl.java | 5 ++ .../jntyzx/service/impl/VenueServiceImpl.java | 53 ++++++++++++++ .../modules/jntyzx/utils/VenueInfoUtils.java | 4 ++ .../app/schedule/jntyzx/JtVenuePullTask.java | 70 +++++++++++++++++++ 6 files changed, 144 insertions(+) create mode 100644 xservice-server/src/main/java/com/xiang/app/schedule/jntyzx/JtVenuePullTask.java diff --git a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IUserTokenInfoService.java b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IUserTokenInfoService.java index 09e44e2..a1f4fea 100644 --- a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IUserTokenInfoService.java +++ b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IUserTokenInfoService.java @@ -1,11 +1,16 @@ package com.xiang.app.modules.jntyzx.service; +import com.xiang.app.modules.jntyzx.entity.pojo.UserTokenInfoDO; + +import java.util.List; + /** * @Author: xiang * @Date: 2025-12-16 09:22 */ public interface IUserTokenInfoService { + List getAvailableUser(); String getToken(String name); boolean flushSingleToken(String name); boolean flushToken(); diff --git a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IVenueService.java b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IVenueService.java index d9b90d6..5ccdd00 100644 --- a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IVenueService.java +++ b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/IVenueService.java @@ -16,4 +16,11 @@ public interface IVenueService { List queryTomorrowVenue(); List queryCanBuyVenue(); List queryToday6210VenueInfo(); + + /** + * 更新场地信息 + * @param sitePositionLists + * @return + */ + boolean saveOrUpdateTodayVenueInfo(List sitePositionLists); } diff --git a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/UserTokenInfoServiceImpl.java b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/UserTokenInfoServiceImpl.java index bc197e0..cbb9022 100644 --- a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/UserTokenInfoServiceImpl.java +++ b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/UserTokenInfoServiceImpl.java @@ -29,6 +29,11 @@ public class UserTokenInfoServiceImpl implements IUserTokenInfoService { private final JtDingTalkFactory jtDingTalkFactory; + @Override + public List getAvailableUser() { + return userTokenInfoManage.listUser(); + } + @Override public String getToken(String name) { UserTokenInfoDO userTokenInfoDO = userTokenInfoManage.getByName(name); diff --git a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/VenueServiceImpl.java b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/VenueServiceImpl.java index 54848f7..aab11e2 100644 --- a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/VenueServiceImpl.java +++ b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/service/impl/VenueServiceImpl.java @@ -74,6 +74,59 @@ public class VenueServiceImpl implements IVenueService { return venueInfoDOS.stream().filter(item -> VenueInfoUtils.get628VenueInfo(item) || VenueInfoUtils.get8210VenueInfo(item)).toList(); } + @Override + public boolean saveOrUpdateTodayVenueInfo(List sitePositionLists) { + List venueInfoDOS = venueInfoManage.queryByDate(LocalDate.now()); + Map> map = Maps.newHashMap(); + if (CollectionUtils.isNotEmpty(sitePositionLists)) { + Map> map1 = venueInfoDOS.stream().collect(Collectors.groupingBy(VenueInfoDO::getPlaceName)); + map1.forEach((placeName, venueInfos) -> { + Map venueInfoDOMap = venueInfoDOS.stream().collect(Collectors.toMap(VenueInfoDO::getSjName, Function.identity(), (a, b) -> a)); + map.put(placeName, venueInfoDOMap); + }); + } + + for (SitePositionList sitePositionList : sitePositionLists) { + if (map.containsKey(sitePositionList.getPlaceName())) { + Map venueInfoDOMap = map.get(sitePositionList.getPlaceName()); + if (venueInfoDOMap.containsKey(sitePositionList.getSjName())) { + VenueInfoDO venueInfoDO = venueInfoDOMap.get(sitePositionList.getSjName()); + venueInfoDO.setPlaceName(sitePositionList.getPlaceName()); + venueInfoDO.setPlaceMainId(sitePositionList.getId()); + venueInfoDO.setPlaceId(sitePositionList.getPlaceId()); + venueInfoDO.setScheduleId(Integer.valueOf(sitePositionList.getScheduleId())); + venueInfoDO.setSjName(sitePositionList.getSjName()); + venueInfoDO.setContacts(sitePositionList.getContacts()); + venueInfoDO.setType(sitePositionList.getType()); + venueInfoDO.setMoney(sitePositionList.getMoney()); + venueInfoDO.setClassName(sitePositionList.getClassName()); + venueInfoDO.setClassCode(sitePositionList.getClassCode()); + venueInfoDO.setAppointments(sitePositionList.getAppointments()); + venueInfoDO.setCTypeCode(sitePositionList.getCtypeCode()); + venueInfoManage.updateById(venueInfoDO); + } else { + VenueInfoDO venueInfoDO = new VenueInfoDO(); + venueInfoDO.setDate(LocalDate.now()); + venueInfoDO.setCreateTime(LocalDateTime.now()); + venueInfoDO.setPlaceName(sitePositionList.getPlaceName()); + venueInfoDO.setPlaceMainId(sitePositionList.getId()); + venueInfoDO.setPlaceId(sitePositionList.getPlaceId()); + venueInfoDO.setScheduleId(Integer.valueOf(sitePositionList.getScheduleId())); + venueInfoDO.setSjName(sitePositionList.getSjName()); + venueInfoDO.setContacts(sitePositionList.getContacts()); + venueInfoDO.setType(sitePositionList.getType()); + venueInfoDO.setMoney(sitePositionList.getMoney()); + venueInfoDO.setClassName(sitePositionList.getClassName()); + venueInfoDO.setClassCode(sitePositionList.getClassCode()); + venueInfoDO.setAppointments(sitePositionList.getAppointments()); + venueInfoDO.setCTypeCode(sitePositionList.getCtypeCode()); + venueInfoManage.save(venueInfoDO); + } + } + } + return true; + } + private void updateDatabase(List list, boolean isToday) { List venueInfoDOS = Lists.newArrayList(); if (isToday) { diff --git a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/utils/VenueInfoUtils.java b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/utils/VenueInfoUtils.java index a209a00..bb6bd06 100644 --- a/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/utils/VenueInfoUtils.java +++ b/xservice-core/src/main/java/com/xiang/app/modules/jntyzx/utils/VenueInfoUtils.java @@ -1,6 +1,7 @@ package com.xiang.app.modules.jntyzx.utils; import com.xiang.app.modules.jntyzx.entity.pojo.VenueInfoDO; +import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList; import org.apache.commons.lang3.StringUtils; /** @@ -21,4 +22,7 @@ public class VenueInfoUtils { public static boolean get8210VenueInfo(VenueInfoDO venueInfoDO) { return StringUtils.equals(venueInfoDO.getSjName(), "20:00-21:00") || StringUtils.equals(venueInfoDO.getSjName(), "21:00-22:00"); } + public static boolean get8210VenueInfo(SitePositionList sitePositionList) { + return StringUtils.equals(sitePositionList.getSjName(), "20:00-21:00") || StringUtils.equals(sitePositionList.getSjName(), "21:00-22:00"); + } } diff --git a/xservice-server/src/main/java/com/xiang/app/schedule/jntyzx/JtVenuePullTask.java b/xservice-server/src/main/java/com/xiang/app/schedule/jntyzx/JtVenuePullTask.java new file mode 100644 index 0000000..53e5443 --- /dev/null +++ b/xservice-server/src/main/java/com/xiang/app/schedule/jntyzx/JtVenuePullTask.java @@ -0,0 +1,70 @@ +package com.xiang.app.schedule.jntyzx; + +import com.xiang.app.common.service.dingtalk.JtDingTalkFactory; +import com.xiang.app.modules.jntyzx.entity.pojo.UserTokenInfoDO; +import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList; +import com.xiang.app.modules.jntyzx.service.IJntyzxHttpService; +import com.xiang.app.modules.jntyzx.service.IUserTokenInfoService; +import com.xiang.app.modules.jntyzx.service.IVenueService; +import com.xiang.app.modules.jntyzx.utils.VenueInfoUtils; +import com.xiang.core.quartz.annotation.XxzJob; +import com.xiang.xservice.basic.utils.DateUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; +import java.util.Objects; + +@Component +@Slf4j +@RequiredArgsConstructor +public class JtVenuePullTask { + + private final IUserTokenInfoService userTokenInfoService; + private final IJntyzxHttpService jntyzxHttpService; + private final JtDingTalkFactory jtDingTalkFactory; + private final IVenueService venueService; + + @XxzJob(name = "jtVenueInfoPullTask") + public void handler() { + log.info("【Venue】江体小程序场地数据拉取定时任务启动!!!time:{}", System.currentTimeMillis()); + List availableUser = userTokenInfoService.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + log.info("当前无可用用户查询场地信息!"); + return; + } + String token; + for (UserTokenInfoDO userTokenInfoDO : availableUser) { + if (Objects.isNull(userTokenInfoDO)) { + continue; + } + token = userTokenInfoDO.getToken(); + if (StringUtils.isBlank(token)) { + continue; + } + List sitePositionLists = jntyzxHttpService.queryAvailable("1", token); + if (CollectionUtils.isEmpty(sitePositionLists)) { + continue; + } + venueService.saveOrUpdateTodayVenueInfo(sitePositionLists); + + sitePositionLists = sitePositionLists.stream().filter(VenueInfoUtils::get8210VenueInfo).toList(); + if (CollectionUtils.isEmpty(sitePositionLists)) { + return; + } + sitePositionLists = sitePositionLists.stream().filter(item -> StringUtils.equals(item.getContacts(), "0")).toList(); + if (CollectionUtils.isEmpty(sitePositionLists)) { + return; + } + StringBuffer msg = new StringBuffer("查询到20:00-22:00空闲场地信息===>时间:" + DateUtils.getDateFromDate(LocalDate.now()) + "\n"); + sitePositionLists.forEach(item -> { + msg.append(item.getPlaceName()).append("\n"); + }); + jtDingTalkFactory.sendMsg(msg.toString()); + } + } +}