feat:用户token更新

This commit is contained in:
Xiang
2025-12-16 09:43:02 +08:00
parent 69257b5c80
commit c6817b23fc
12 changed files with 233 additions and 9 deletions

View File

@@ -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 ADD_SUBSCRIBE = GNTYZX_BASE_URL + "/GYM-JN/multi/Subscribe/addSubscribe";
/**
* 心跳监测接口
*/
public final static String HEALTH_DECLARATION = GNTYZX_BASE_URL + "/GYM-JN//busi/healthDeclaration/addUserPrivacy";
} }

View File

@@ -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.pojo.VenueInfoDO;
import com.xiang.xservice.application.script.jntyzx.entity.resp.query.SitePositionList; 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.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 com.xiang.xservice.basic.common.resp.Result;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@@ -21,7 +21,7 @@ import java.util.List;
public class VenueController { public class VenueController {
private final IVenueService venueService; private final IVenueService venueService;
private final IVenueServiceHttp venueServiceHttp; private final IJntyzxHttpService jntyzxHttpService;
private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU3ODQ1NjMsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.QBzNQNvJZQPZZnzmbU8K5Liz0piHwercrDIq3kirUJk"; private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU3ODQ1NjMsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.QBzNQNvJZQPZZnzmbU8K5Liz0piHwercrDIq3kirUJk";
@@ -43,7 +43,7 @@ public class VenueController {
if (CollectionUtils.isEmpty(venueInfoDOS)) { if (CollectionUtils.isEmpty(venueInfoDOS)) {
return Result.error("暂无可订购的数据"); return Result.error("暂无可订购的数据");
} }
venueServiceHttp.createOrder(venueInfoDOS); jntyzxHttpService.createOrder(venueInfoDOS);
return Result.success(); return Result.success();
} }

View File

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

View File

@@ -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<UserTokenInfoDO> {
List<UserTokenInfoDO> listUser();
UserTokenInfoDO getByName(String name);
}

View File

@@ -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<JntyzxUserTokenInfoMapper, UserTokenInfoDO> implements IUserTokenInfoManage {
@Override
public List<UserTokenInfoDO> listUser() {
LambdaQueryWrapper<UserTokenInfoDO> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(UserTokenInfoDO::getStatus, 1);
return baseMapper.selectList(lambdaQueryWrapper);
}
@Override
public UserTokenInfoDO getByName(String name) {
LambdaQueryWrapper<UserTokenInfoDO> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(UserTokenInfoDO::getStatus, 1);
lambdaQueryWrapper.eq(UserTokenInfoDO::getName, name);
return baseMapper.selectOne(lambdaQueryWrapper);
}
}

View File

@@ -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<UserTokenInfoDO> {
}

View File

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

View File

@@ -1,6 +1,7 @@
package com.xiang.xservice.application.script.jntyzx.service; 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.pojo.VenueInfoDO;
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.SitePositionList;
import java.util.List; import java.util.List;
@@ -9,7 +10,7 @@ import java.util.List;
* @Author: xiang * @Author: xiang
* @Date: 2025-12-15 14:47 * @Date: 2025-12-15 14:47
*/ */
public interface IVenueServiceHttp { public interface IJntyzxHttpService {
/** /**
* 查询今日可用场地 * 查询今日可用场地
@@ -22,4 +23,13 @@ public interface IVenueServiceHttp {
* @return * @return
*/ */
Boolean createOrder(List<VenueInfoDO> venueInfos); Boolean createOrder(List<VenueInfoDO> venueInfos);
/**
* 心跳监测
* @param token token
* @param openId openid
* @return
*/
JntyzxResponse<Void> healthDeclaration(String token, String openId);
} }

View File

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

View File

@@ -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.pojo.VenueInfoDO;
import com.xiang.xservice.application.script.jntyzx.entity.req.SubscribeRequest; 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.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.SitePositionList;
import com.xiang.xservice.application.script.jntyzx.entity.resp.query.VenueList; import com.xiang.xservice.application.script.jntyzx.entity.resp.query.VenueList;
import com.xiang.xservice.basic.utils.Base64; import com.xiang.xservice.basic.utils.Base64;
@@ -31,7 +32,7 @@ import java.util.Objects;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class VenueServiceHttpImpl implements IVenueServiceHttp { public class JntyzxHttpServiceImpl implements IJntyzxHttpService {
@Override @Override
public List<SitePositionList> queryAvailable(String isWeekend, String token) { public List<SitePositionList> queryAvailable(String isWeekend, String token) {
@@ -140,6 +141,21 @@ public class VenueServiceHttpImpl implements IVenueServiceHttp {
return null; return null;
} }
@Override
public JntyzxResponse<Void> healthDeclaration(String token, String openId) {
Map<String, String> headers = Maps.newHashMap();
headers.put("X-Access-Token", token);
Map<String, String> 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() { private static JSONObject buildParamJsonObj() {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("id", "1702581215097257986"); jsonObject.put("id", "1702581215097257986");

View File

@@ -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<UserTokenInfoDO> userTokenInfoDOS = userTokenInfoManage.listUser();
if (CollectionUtils.isEmpty(userTokenInfoDOS)) {
log.info("【心跳监测】查询用户信息为空,无需操作");
return true;
}
userTokenInfoDOS.parallelStream().forEach(this::healthDeclaration);
return true;
}
private boolean healthDeclaration(UserTokenInfoDO userTokenInfoDO) {
JntyzxResponse<Void> 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;
}
}

View File

@@ -27,13 +27,13 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class VenueServiceImpl implements IVenueService { public class VenueServiceImpl implements IVenueService {
private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU3ODQ1NjMsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.QBzNQNvJZQPZZnzmbU8K5Liz0piHwercrDIq3kirUJk"; private final static String STATIC_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NjU4NTI4MjYsInVzZXJuYW1lIjoid3hfb3Blbl9pZF9vMjFNWDR5N3doWENHanZVVEdQNkNUejJIYkQ4In0.pI1tK1imZdKZWXdHRxseqq87_IarHhiRt-hUdBq8hkg";
private final IVenueServiceHttp venueServiceHttp; private final IJntyzxHttpService jntyzxHttpService;
private final IVenueInfoManage venueInfoManage; private final IVenueInfoManage venueInfoManage;
@Override @Override
public List<SitePositionList> queryVenueService() { public List<SitePositionList> queryVenueService() {
List<SitePositionList> sitePositionLists = venueServiceHttp.queryAvailable("1", STATIC_TOKEN); List<SitePositionList> sitePositionLists = jntyzxHttpService.queryAvailable("1", STATIC_TOKEN);
if (CollectionUtils.isEmpty(sitePositionLists)) { if (CollectionUtils.isEmpty(sitePositionLists)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
@@ -42,7 +42,7 @@ public class VenueServiceImpl implements IVenueService {
} }
public List<SitePositionList> queryTomorrowVenue() { public List<SitePositionList> queryTomorrowVenue() {
List<SitePositionList> sitePositionLists = venueServiceHttp.queryAvailableTomorrow("1", STATIC_TOKEN); List<SitePositionList> sitePositionLists = jntyzxHttpService.queryAvailableTomorrow("1", STATIC_TOKEN);
if (CollectionUtils.isEmpty(sitePositionLists)) { if (CollectionUtils.isEmpty(sitePositionLists)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }