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

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

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