java 传入数组和数据库对比数据库没有则删除,数据库有则修改,数组多则添加
public Result<?> speechRuleBatch(SpeechRuleDto speechRule) {
List<SpeechRule> addList = new ArrayList<>();
List<SpeechRule> editList = new ArrayList<>();
List<SpeechRule> delList = new ArrayList<>();
String speechModelId = speechRule.getSpeechModelId();
// 根据测评方案id 查询测评方案下数据
QueryWrapper<SpeechRule> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(SpeechRule::getEvaluationPlanId, speechModelId);
List<SpeechRule> compareList = this.list(wrapper);
//1.1 如果list的size=0 或 =null 情况下 如果compareList 的size>0 则 compareList里的所有数据为delList
List<SpeechRule> speechRuleList = speechRule.getList();
if (null == speechRuleList || speechRuleList.size() < 1) {
if (compareList.size() > 0) {
delList = compareList;
}
} else {
// 1.2 取出传参过来的list 没有id的为addlist
List<SpeechRule> collect = speechRuleList.stream().filter(r -> StringUtils.isBlank(r.getEvaluationPlanId())).collect(Collectors.toList());
if (collect.size() > 0) {
addList = collect;
}
}
//2.取出有id的list,与compareList比较,有则为修改 无则为删除
List<SpeechRule> idCollect = speechRuleList.stream().filter(r -> StringUtils.isNotBlank(r.getEvaluationPlanId())).collect(Collectors.toList());
// 取比较id
List<Long> oldList = compareList.stream().map(SpeechRule::getId).collect(Collectors.toList());
// 取传值id
List<Long> newList = idCollect.stream().map(SpeechRule::getId).collect(Collectors.toList());
//取交集id
List<Long> editIds = newList.stream().filter(oldList::contains).collect(Collectors.toList());
if (editIds.size() > 0) {
//取对应交集的对象
System.out.println("------------------交集的对象---------------------");
List<SpeechRule> editUpdate = idCollect.stream().filter(it -> editIds.contains(it.getId())).collect(Collectors.toList());
if (editUpdate.size() > 0) {
editList = editUpdate;
editList.forEach(System.out::println);
}
}
//取差集id
List<Long> delIds = oldList.stream().filter(it -> !newList.contains(it)).collect(Collectors.toList());
if (delIds.size() > 0) {
//取对应差集的对象
System.out.println("------------------差集的对象---------------------");
List<SpeechRule> delUpdate = compareList.stream().filter(it -> delIds.contains(it.getId())).collect(Collectors.toList());
if (delUpdate.size() > 0) {
delList = delUpdate;
delList.forEach(System.out::println);
}
}
// 执行添加
if (addList.size() > 0) {
for (SpeechRule r : addList) {
r.setEvaluationPlanId(speechModelId);
this.save(r);
}
}
// 执行删除
if (delList.size() > 0) {
List<Long> ids = delList.stream().map(SpeechRule::getId).collect(Collectors.toList());
this.removeByIds(ids);
}
// 执行修改
if (editList.size() > 0) {
for (SpeechRule speech : editList) {
this.updateById(speech);
}
}
return Result.ok("修改成功!");
}