diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/constants/UrlConstant.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/constants/UrlConstant.java index 5b2fb8f..77d8f8a 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/constants/UrlConstant.java +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/constants/UrlConstant.java @@ -22,4 +22,9 @@ public class UrlConstant { */ public final static String ADD_SUBSCRIBE = GNTYZX_BASE_URL + "/GYM-JN/multi/Subscribe/addSubscribe"; + /** + * 心跳监测接口 + */ + public final static String HEALTH_DECLARATION = GNTYZX_BASE_URL + "/GYM-JN//busi/healthDeclaration/addUserPrivacy"; + } diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/controller/VenueController.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/controller/VenueController.java index 55fa340..9d9ead6 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/controller/VenueController.java +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/controller/VenueController.java @@ -3,7 +3,7 @@ package com.xiang.xservice.application.script.jntyzx.controller; import com.xiang.xservice.application.script.jntyzx.entity.pojo.VenueInfoDO; import com.xiang.xservice.application.script.jntyzx.entity.resp.query.SitePositionList; import com.xiang.xservice.application.script.jntyzx.service.IVenueService; -import com.xiang.xservice.application.script.jntyzx.service.IVenueServiceHttp; +import com.xiang.xservice.application.script.jntyzx.service.IJntyzxHttpService; import com.xiang.xservice.basic.common.resp.Result; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -21,7 +21,7 @@ import java.util.List; public class VenueController { private final IVenueService venueService; - private final IVenueServiceHttp venueServiceHttp; + private final IJntyzxHttpService jntyzxHttpService; private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU3ODQ1NjMsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.QBzNQNvJZQPZZnzmbU8K5Liz0piHwercrDIq3kirUJk"; @@ -43,7 +43,7 @@ public class VenueController { if (CollectionUtils.isEmpty(venueInfoDOS)) { return Result.error("暂无可订购的数据"); } - venueServiceHttp.createOrder(venueInfoDOS); + jntyzxHttpService.createOrder(venueInfoDOS); return Result.success(); } diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/entity/pojo/UserTokenInfoDO.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/entity/pojo/UserTokenInfoDO.java new file mode 100644 index 0000000..96a3b58 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/entity/pojo/UserTokenInfoDO.java @@ -0,0 +1,37 @@ +package com.xiang.xservice.application.script.jntyzx.entity.pojo; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:18 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("jntyzx_user_token_info") +public class UserTokenInfoDO { + private Long id; + /** + * 用户名 + */ + private String name; + + /** + * token + */ + private String token; + + /** + * wx openid + */ + private String openId; + + /** + * 状态(0:禁用 1:启用) + */ + private Integer status; +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/IUserTokenInfoManage.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/IUserTokenInfoManage.java new file mode 100644 index 0000000..de4d57e --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/IUserTokenInfoManage.java @@ -0,0 +1,16 @@ +package com.xiang.xservice.application.script.jntyzx.manage; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xiang.xservice.application.script.jntyzx.entity.pojo.UserTokenInfoDO; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:19 + */ +public interface IUserTokenInfoManage extends IService { + + List listUser(); + UserTokenInfoDO getByName(String name); +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/UserTokenInfoManageImpl.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/UserTokenInfoManageImpl.java new file mode 100644 index 0000000..cc22d18 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/manage/UserTokenInfoManageImpl.java @@ -0,0 +1,32 @@ +package com.xiang.xservice.application.script.jntyzx.manage; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xiang.xservice.application.script.jntyzx.entity.pojo.UserTokenInfoDO; +import com.xiang.xservice.application.script.jntyzx.mapper.JntyzxUserTokenInfoMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:19 + */ +@Service +public class UserTokenInfoManageImpl extends ServiceImpl implements IUserTokenInfoManage { + @Override + public List listUser() { + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(UserTokenInfoDO::getStatus, 1); + return baseMapper.selectList(lambdaQueryWrapper); + } + + @Override + public UserTokenInfoDO getByName(String name) { + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(UserTokenInfoDO::getStatus, 1); + lambdaQueryWrapper.eq(UserTokenInfoDO::getName, name); + return baseMapper.selectOne(lambdaQueryWrapper); + } +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/mapper/JntyzxUserTokenInfoMapper.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/mapper/JntyzxUserTokenInfoMapper.java new file mode 100644 index 0000000..42dccb0 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/mapper/JntyzxUserTokenInfoMapper.java @@ -0,0 +1,15 @@ +package com.xiang.xservice.application.script.jntyzx.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xiang.xservice.application.script.jntyzx.entity.pojo.UserTokenInfoDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:18 + */ +@Mapper +@Repository +public interface JntyzxUserTokenInfoMapper extends BaseMapper { +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/schedule/JtTokenHealthSchedule.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/schedule/JtTokenHealthSchedule.java new file mode 100644 index 0000000..9d37460 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/schedule/JtTokenHealthSchedule.java @@ -0,0 +1,21 @@ +package com.xiang.xservice.application.script.jntyzx.schedule; + +import com.xiang.xservice.application.script.jntyzx.service.IUserTokenInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:15 + */ +@Component +@RequiredArgsConstructor +public class JtTokenHealthSchedule { + + private final IUserTokenInfoService userTokenInfoService; + @Scheduled(cron = "0 30 0/2 * * ?") + public void flushToken() { + userTokenInfoService.flushToken(); + } +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IVenueServiceHttp.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IJntyzxHttpService.java similarity index 67% rename from script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IVenueServiceHttp.java rename to script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IJntyzxHttpService.java index 3b66159..184a453 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IVenueServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IJntyzxHttpService.java @@ -1,6 +1,7 @@ package com.xiang.xservice.application.script.jntyzx.service; import com.xiang.xservice.application.script.jntyzx.entity.pojo.VenueInfoDO; +import com.xiang.xservice.application.script.jntyzx.entity.resp.JntyzxResponse; import com.xiang.xservice.application.script.jntyzx.entity.resp.query.SitePositionList; import java.util.List; @@ -9,7 +10,7 @@ import java.util.List; * @Author: xiang * @Date: 2025-12-15 14:47 */ -public interface IVenueServiceHttp { +public interface IJntyzxHttpService { /** * 查询今日可用场地 @@ -22,4 +23,13 @@ public interface IVenueServiceHttp { * @return */ Boolean createOrder(List venueInfos); + + /** + * 心跳监测 + * @param token token + * @param openId openid + * @return + */ + JntyzxResponse healthDeclaration(String token, String openId); + } diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IUserTokenInfoService.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IUserTokenInfoService.java new file mode 100644 index 0000000..7ad0c33 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/IUserTokenInfoService.java @@ -0,0 +1,11 @@ +package com.xiang.xservice.application.script.jntyzx.service; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:22 + */ +public interface IUserTokenInfoService { + + boolean flushSingleToken(String name); + boolean flushToken(); +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceHttpImpl.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/JntyzxHttpServiceImpl.java similarity index 90% rename from script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceHttpImpl.java rename to script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/JntyzxHttpServiceImpl.java index 8c19aab..f38a917 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceHttpImpl.java +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/JntyzxHttpServiceImpl.java @@ -9,6 +9,7 @@ import com.xiang.xservice.application.script.jntyzx.constants.UrlConstant; import com.xiang.xservice.application.script.jntyzx.entity.pojo.VenueInfoDO; import com.xiang.xservice.application.script.jntyzx.entity.req.SubscribeRequest; import com.xiang.xservice.application.script.jntyzx.entity.req.SubscribeVo; +import com.xiang.xservice.application.script.jntyzx.entity.resp.JntyzxResponse; import com.xiang.xservice.application.script.jntyzx.entity.resp.query.SitePositionList; import com.xiang.xservice.application.script.jntyzx.entity.resp.query.VenueList; import com.xiang.xservice.basic.utils.Base64; @@ -31,7 +32,7 @@ import java.util.Objects; @Service @RequiredArgsConstructor @Slf4j -public class VenueServiceHttpImpl implements IVenueServiceHttp { +public class JntyzxHttpServiceImpl implements IJntyzxHttpService { @Override public List queryAvailable(String isWeekend, String token) { @@ -140,6 +141,21 @@ public class VenueServiceHttpImpl implements IVenueServiceHttp { return null; } + @Override + public JntyzxResponse healthDeclaration(String token, String openId) { + Map headers = Maps.newHashMap(); + headers.put("X-Access-Token", token); + Map params = Maps.newHashMap(); + params.put("openId", openId); + + String respStr = HttpHelper.doGet(UrlConstant.HEALTH_DECLARATION, headers, params); + if (StringUtils.isBlank(respStr)) { + return null; + } + JntyzxResponse jntyzxResponse = JSON.parseObject(respStr, JntyzxResponse.class); + return jntyzxResponse; + } + private static JSONObject buildParamJsonObj() { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", "1702581215097257986"); diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/UserTokenInfoServiceImpl.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/UserTokenInfoServiceImpl.java new file mode 100644 index 0000000..d7007d2 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/UserTokenInfoServiceImpl.java @@ -0,0 +1,61 @@ +package com.xiang.xservice.application.script.jntyzx.service; + +import com.xiang.xservice.application.script.jntyzx.entity.pojo.UserTokenInfoDO; +import com.xiang.xservice.application.script.jntyzx.entity.resp.JntyzxResponse; +import com.xiang.xservice.application.script.jntyzx.manage.IUserTokenInfoManage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +/** + * @Author: xiang + * @Date: 2025-12-16 09:22 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class UserTokenInfoServiceImpl implements IUserTokenInfoService { + + private final IUserTokenInfoManage userTokenInfoManage; + private final IJntyzxHttpService jntyzxHttpService; + + + @Override + public boolean flushSingleToken(String name) { + UserTokenInfoDO userTokenInfoDO = userTokenInfoManage.getByName(name); + if (Objects.isNull(userTokenInfoDO)) { + log.info("用户信息不存在,无需进行监测!"); + return false; + } + return healthDeclaration(userTokenInfoDO); + + } + + @Override + public boolean flushToken() { + List userTokenInfoDOS = userTokenInfoManage.listUser(); + if (CollectionUtils.isEmpty(userTokenInfoDOS)) { + log.info("【心跳监测】查询用户信息为空,无需操作"); + return true; + } + userTokenInfoDOS.parallelStream().forEach(this::healthDeclaration); + return true; + } + + private boolean healthDeclaration(UserTokenInfoDO userTokenInfoDO) { + JntyzxResponse jntyzxResponse = jntyzxHttpService.healthDeclaration(userTokenInfoDO.getToken(), userTokenInfoDO.getOpenId()); + if (Objects.isNull(jntyzxResponse)) { + log.info("用户名:{}心跳监测失败!", userTokenInfoDO.getName()); + } + boolean flag = StringUtils.contains(jntyzxResponse.getMessage(), "已存在"); + if (flag) { + log.info("用户名:{}心跳成功✅✅✅✅✅✅", userTokenInfoDO.getName()); + } + return flag; + } +} diff --git a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceImpl.java b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceImpl.java index 9091312..ec3560d 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/application/script/jntyzx/service/VenueServiceImpl.java @@ -27,13 +27,13 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class VenueServiceImpl implements IVenueService { - private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU3ODQ1NjMsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.QBzNQNvJZQPZZnzmbU8K5Liz0piHwercrDIq3kirUJk"; - private final IVenueServiceHttp venueServiceHttp; + private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU4NTI4MjYsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.pI1tK1imZdKZWXdHRxseqq87_IarHhiRt-hUdBq8hkg"; + private final IJntyzxHttpService jntyzxHttpService; private final IVenueInfoManage venueInfoManage; @Override public List queryVenueService() { - List sitePositionLists = venueServiceHttp.queryAvailable("1", STATIC_TOKEN); + List sitePositionLists = jntyzxHttpService.queryAvailable("1", STATIC_TOKEN); if (CollectionUtils.isEmpty(sitePositionLists)) { return Lists.newArrayList(); } @@ -42,7 +42,7 @@ public class VenueServiceImpl implements IVenueService { } public List queryTomorrowVenue() { - List sitePositionLists = venueServiceHttp.queryAvailableTomorrow("1", STATIC_TOKEN); + List sitePositionLists = jntyzxHttpService.queryAvailableTomorrow("1", STATIC_TOKEN); if (CollectionUtils.isEmpty(sitePositionLists)) { return Lists.newArrayList(); }