Commit 3d5df9aa authored by renandong's avatar renandong 🇨🇳

1,判断更新处理数据不为空

2,每次最大处理数,如果缓存没有则取本地,如果缓存于本地不一致则取本地并替换缓存
parent 2606f9a2
......@@ -88,7 +88,6 @@ public class MenuService {
String kk_sh_token = "kk_sh_token";
try {
String authToken = GeTuiUtils.getAuthToken(kk_sh_token);
System.out.println("===============" + authToken);
//将token以及用户ID封装调用画像查询接口
String result = GeTuiUtils.queryTagKKSH(gidList, authToken);
JSONObject jsonObject = JSONObject.parseObject(result);
......@@ -104,7 +103,6 @@ public class MenuService {
all.put("error_code", 0);
}
return all;
//如果以上步骤无法走通则直接返回。并修改标识符终止循环
} else {
log.error("返回值内不包含需要解析的数据" + jsonObject.toJSONString());
}
......@@ -134,7 +132,6 @@ public class MenuService {
if (jsonObject.containsKey("userTag")) {
JSONArray userTag = jsonObject.getJSONArray("userTag");
return getUserTagByTag(userTag, 2, tags);
//如果以上步骤无法走通则直接返回。并修改标识符终止循环
} else {
log.error("返回值内不包含需要解析的数据" + jsonObject.toJSONString());
}
......
......@@ -55,7 +55,7 @@ public class UserTagsTask {
/**
* 更新用户标签
*/
@Scheduled(cron = "0 20 11 * * ?")
@Scheduled(cron = "0 0 23 * * ?")
public void updateUserTags() {
try {
//获取每次处理的id起始值
......@@ -65,11 +65,18 @@ public class UserTagsTask {
}
int id = Integer.parseInt(userId);
//获取每次处理最大数
//获取缓存内每次处理最大数
String pushSize = RedisUtil.StringOps.get("push_max_size");
//如果缓存没有则取配置文件中的
if (StringUtils.isBlank(pushSize)) {
RedisUtil.StringOps.set("push_max_size", pushMaxSize);
pushSize = pushMaxSize;
} else {
//如果缓存和配置文件不一致则使用配置文件数值替换缓存
if (!pushMaxSize.equals(pushSize)) {
RedisUtil.StringOps.set("push_max_size", pushMaxSize);
pushSize = pushMaxSize;
}
}
int max = Integer.parseInt(pushSize);
......@@ -77,51 +84,69 @@ public class UserTagsTask {
List<UserMenusEntity> userMenusList = new ArrayList<>();
//获取标签列表
List<MenuTagsEntity> tags = menuTagsService.list();
//获取小于起始值,且更新时间为当前时间用户信息
List<UserTagEntity> beforeUser = userTagService.findUserByTodayAndIdBefore(id);
//过滤用户gid
List<String> beforeGid = beforeUser.stream().map(UserTagEntity::getGid).distinct().collect(Collectors.toList());
//获取更新总数量
int size = beforeGid.size();
//如果更新数量大于总量,截取每次处理总量的更新用户信息
if (size > max) {
beforeGid = beforeGid.subList(0, max - 1);
//如果每次更新数据为空则全部设置为新增
if (CollUtil.isEmpty(beforeUser)) {
List<UserMenusEntity> afterTag = getAfterTag(id, max, tags);
if (afterTag != null) {
userMenusList.addAll(afterTag);
}
} else {
//最大处理数减去当天更新处理数,得到剩余处理数,获取起始值后的新增的用户信息
List<UserTagEntity> afterUser = userTagService.findUserByIdAfter(Integer.parseInt(userId), max - size);
//如果当天新增数不为空
if (CollUtil.isNotEmpty(afterUser)) {
//获取用户最后一条信息
UserTagEntity afterUserInfo = afterUser.get(afterUser.size() - 1);
//并覆盖起始值
RedisUtil.StringOps.set("user_tag_id", String.valueOf(afterUserInfo.getId()));
//过滤用户gid
List<String> afterGid = afterUser.stream().map(UserTagEntity::getGid).distinct().collect(Collectors.toList());
//调用个像接口获取新增用户标签
List<UserMenusEntity> afterTag = getUserTag(afterGid, afterUser, tags);
if (CollUtil.isNotEmpty(afterTag)) {
//过滤用户gid
List<String> beforeGid = beforeUser.stream().map(UserTagEntity::getGid).distinct().collect(Collectors.toList());
//获取更新总数量
int size = beforeGid.size();
//如果更新数量大于总量,截取每次处理总量的更新用户信息
if (size > max) {
beforeGid = beforeGid.subList(0, max - 1);
} else {
List<UserMenusEntity> afterTag = getAfterTag(id, max - size, tags);
if (afterTag != null) {
userMenusList.addAll(afterTag);
}
}
}
//调用个像接口获取更新用户标签
List<UserMenusEntity> beforeTag = getUserTag(beforeGid, beforeUser, tags);
if (CollUtil.isNotEmpty(beforeTag)) {
userMenusList.addAll(beforeTag);
//调用个像接口获取更新用户标签
List<UserMenusEntity> beforeTag = getUserTag(beforeGid, beforeUser, tags);
if (CollUtil.isNotEmpty(beforeTag)) {
userMenusList.addAll(beforeTag);
}
}
//批量插入用户标签信息
userMenusService.batchInsert(userMenusList);
log.error("执行结束{}", asyncServiceExecutor.getPoolSize());
log.info("执行结束,当前最新id{}", RedisUtil.StringOps.get("user_tag_id"));
} catch (Exception e) {
e.printStackTrace();
log.error("执行定时更新标签任务失败!");
}
}
/**
* 处理新增用户标签
*
* @param userId 用户id
* @param limit 处理条数
* @param tags 标签信息
* @return 标签信息
* @throws InterruptedException 网络异常
*/
private List<UserMenusEntity> getAfterTag(Integer userId, Integer limit, List<MenuTagsEntity> tags) throws InterruptedException {
//最大处理数减去当天更新处理数,得到剩余处理数,获取起始值后的新增的用户信息
List<UserTagEntity> afterUser = userTagService.findUserByIdAfter(userId, limit);
//如果当天新增数不为空
if (CollUtil.isNotEmpty(afterUser)) {
//获取用户最后一条信息
UserTagEntity afterUserInfo = afterUser.get(afterUser.size() - 1);
//并覆盖起始值
RedisUtil.StringOps.set("user_tag_id", String.valueOf(afterUserInfo.getId()));
//过滤用户gid
List<String> afterGid = afterUser.stream().map(UserTagEntity::getGid).distinct().collect(Collectors.toList());
//调用个像接口获取新增用户标签
return getUserTag(afterGid, afterUser, tags);
}
return null;
}
/**
* 获取个像用户标签信息
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment