Skip to content
Snippets Groups Projects
Commit 685413e2 authored by 黄晋's avatar 黄晋
Browse files

尝试Pairs upsert

parent 0ff4f2fa
Branches
No related merge requests found
package com.luca.pilot.service.impl; package com.luca.pilot.service.impl;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.luca.pilot.bizEnum.TableEnum; import com.luca.pilot.bizEnum.TableEnum;
...@@ -18,6 +19,7 @@ import org.springframework.data.mongodb.core.mapping.Document; ...@@ -18,6 +19,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.util.Pair;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -76,7 +78,7 @@ public class PlanServiceImpl implements PlanService { ...@@ -76,7 +78,7 @@ public class PlanServiceImpl implements PlanService {
long totalPlanModuleCount = mongoTemplate.count(new Query(), PlanModule.class); long totalPlanModuleCount = mongoTemplate.count(new Query(), PlanModule.class);
// BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, PlanModule.class); BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, PlanModule.class);
for (int i = 0; i < skip; i++) { for (int i = 0; i < skip; i++) {
countQuery.skip(i * 10000L); countQuery.skip(i * 10000L);
...@@ -103,6 +105,7 @@ public class PlanServiceImpl implements PlanService { ...@@ -103,6 +105,7 @@ public class PlanServiceImpl implements PlanService {
Map<Long, Map<Long, String>> digitalMedicalTypeMap = queryDigitalMedicalType(planTaskDetails); Map<Long, Map<Long, String>> digitalMedicalTypeMap = queryDigitalMedicalType(planTaskDetails);
List<PlanModule> planMoudles = new ArrayList<>(); List<PlanModule> planMoudles = new ArrayList<>();
List<Pair<Query, Update>> pairs = new ArrayList<>();
//以 planTaskDetail 和 planMoudleRelate 为基准 //以 planTaskDetail 和 planMoudleRelate 为基准
// 一个 planTaskDetail 能对应多个 planMoudleRelate,即一次任务配置了多少个模块(问卷,量表,数字靶点) // 一个 planTaskDetail 能对应多个 planMoudleRelate,即一次任务配置了多少个模块(问卷,量表,数字靶点)
...@@ -232,21 +235,23 @@ public class PlanServiceImpl implements PlanService { ...@@ -232,21 +235,23 @@ public class PlanServiceImpl implements PlanService {
if (totalPlanModuleCount > 0) { if (totalPlanModuleCount > 0) {
Query upsertQuery = new Query(where("key").is(planMoudle.getKey())); Query upsertQuery = new Query(where("key").is(planMoudle.getKey()));
Update update = buildUpdate(planMoudle); Update update = buildUpdate(planMoudle);
// bulkOps.upsert(upsertQuery, update); bulkOps.upsert(upsertQuery, update);
mongoTemplate.upsert(upsertQuery, update, PlanModule.class); Pair<Query, Update> pair = Pair.of(upsertQuery, update);
log.info("mongoTemplate upsert 1 条数据"); pairs.add(pair);
}else {
planMoudles.add(planMoudle);
} }
planMoudles.add(planMoudle);
} }
} }
// 是否第一次全量插入 // 是否第一次全量插入
if (totalPlanModuleCount > 0) { if (totalPlanModuleCount > 0) {
// CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
// bulkOps.execute(); bulkOps.upsert(pairs);
// log.info("bulkOps 更新或插入 {} 条数据", planMoudles.size()); bulkOps.execute();
// }); log.info("bulkOps 更新或插入 {} 条数据", pairs.size());
});
} else { } else {
if (!CollectionUtils.isEmpty(planMoudles)) { if (!CollectionUtils.isEmpty(planMoudles)) {
mongoTemplate.insert(planMoudles, PlanModule.class); mongoTemplate.insert(planMoudles, PlanModule.class);
......
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