|
|
@@ -166,9 +166,28 @@ public class UserTeamShareTask implements Runnable {
|
|
|
.map(String::valueOf)
|
|
|
.collect(Collectors.joining(","));
|
|
|
|
|
|
- AppConfig.LOGGER.info("开始查询用户");
|
|
|
- List<User> userList = User.dao.find("SELECT id, balance FROM t_user WHERE id IN (" + inSql + ")");
|
|
|
- AppConfig.LOGGER.info("用户查询完毕");
|
|
|
+ AppConfig.LOGGER.info("开始查询用户,符合条件的用户ID数量: {}", eligibleUserIds.size());
|
|
|
+ // ******** 关键改进:分批查询 User 对象 ********
|
|
|
+ final int BATCH_QUERY_SIZE = 1000; // 每批次查询 1000 个用户
|
|
|
+ List<User> userList = new ArrayList<>(eligibleUserIds.size()); // 预估大小,减少扩容开销
|
|
|
+
|
|
|
+ // 将 Set 转换为 List,方便进行 subList 分批操作
|
|
|
+ List<Long> eligibleUserIdsList = new ArrayList<>(eligibleUserIds);
|
|
|
+
|
|
|
+ for (int i = 0; i < eligibleUserIdsList.size(); i += BATCH_QUERY_SIZE) {
|
|
|
+ // 获取当前批次的 user_id 子列表
|
|
|
+ List<Long> subList = eligibleUserIdsList.subList(i, Math.min(i + BATCH_QUERY_SIZE, eligibleUserIdsList.size()));
|
|
|
+
|
|
|
+ String subInSql = subList.stream()
|
|
|
+ .map(String::valueOf)
|
|
|
+ .collect(Collectors.joining(","));
|
|
|
+
|
|
|
+ // 执行 IN 查询,添加到总的 userList 中
|
|
|
+ userList.addAll(User.dao.find("SELECT id, balance FROM t_user WHERE id IN (" + subInSql + ")"));
|
|
|
+ AppConfig.LOGGER.debug("已查询用户批次 {} 到 {},总已查询用户数: {}", i, Math.min(i + BATCH_QUERY_SIZE, eligibleUserIdsList.size()) -1 , userList.size());
|
|
|
+ }
|
|
|
+ // ******** 分批查询 User 对象结束 ********
|
|
|
+ AppConfig.LOGGER.info("用户查询完毕,共查询到 {} 个符合用户。", userList.size());
|
|
|
|
|
|
// 为了方便处理,将 list 转换为 map,userOrderCounts 也转换为 map
|
|
|
Map<Long, User> userMap = userList.stream()
|
|
|
@@ -241,7 +260,7 @@ public class UserTeamShareTask implements Runnable {
|
|
|
log2.set("create_time", System.currentTimeMillis());
|
|
|
log2.set("is_deleted", 0);
|
|
|
log2.set("description", "NFT持有者共享总数的10%," + validOrderCount + " / " + nftt.getMaxQuantity()); // 加入订单数量信息
|
|
|
- log2.set("amount", shareAmount1);
|
|
|
+ log2.set("amount", shareAmount2);
|
|
|
log2.set("user_id", userId);
|
|
|
depositLogsToSave.add(log2);
|
|
|
}
|