if (lastResult.isEmpty()) { toBeInserted = result; } else { // 遍历上一次查询结果,看看是否需要更新或删除 for (Map<String, Object> last : lastResult) { boolean found = false; for (Map<String, Object> current : result) { if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) { found = true; break; } } if (!found) { toBeDeleted.add(last); } } // 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } } // 批量插入 if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } // 批量更新 if (!toBeUpdated.isEmpty()) { jxMjKhTxService.batchUpdate(toBeUpdated); } // 批量删除 if (!toBeDeleted.isEmpty()) { jxMjKhTxService.batchDelete(toBeDeleted); } // 保存本次查询结果 lastResult = result; 相同数据会重复新增 之前有的数据这次没有了为什么没有删除掉 详细解决办法、
时间: 2024-01-08 17:04:54 浏览: 65
这段代码的意思是,根据查询结果(result)中的数据和上一次查询结果(lastResult)中的数据进行比较,找出需要更新、插入或删除的数据。具体实现中,如果上一次查询结果为空,则直接将本次结果作为需要插入的数据;否则,分别遍历上一次和本次查询结果,找到相同的数据表示需要更新,找不到的数据则表示需要插入或删除。
针对你提出的问题,相同的数据会重复新增,可能是因为查询结果中存在相同的记录,但是这些记录在上一次查询结果中被分别找到了,导致重复插入。为了避免这种情况,可以在找到相同数据时,将上一次查询结果中对应的记录从需要删除的数据中移除。
另外,之前有的数据这次没有了为什么没有删除掉,可能是因为这些数据在本次查询结果中不存在,但是在上一次查询结果中存在。在这种情况下,需要将这些数据从需要插入或更新的数据中移除,加入到需要删除的数据中。
综上所述,可以在原有代码的基础上,加入上述的处理逻辑,来避免重复插入和未删除的情况。具体实现可以参考以下代码:
```
if (lastResult.isEmpty()) {
toBeInserted = result;
} else {
// 遍历上一次查询结果,看看是否需要更新或删除
for (Map<String, Object> last : lastResult) {
boolean found = false;
for (Map<String, Object> current : result) {
if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) {
found = true;
// 从需要删除的数据中移除
toBeDeleted.remove(last);
break;
}
}
if (!found) {
toBeDeleted.add(last);
}
}
// 遍历当前查询结果,看看是否需要插入或更新
for (Map<String, Object> current : result) {
boolean found = false;
for (Map<String, Object> last : lastResult) {
if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) {
found = true;
break;
}
}
if (found) {
toBeUpdated.add(current);
} else {
// 从需要插入或更新的数据中移除
toBeInserted.remove(current);
toBeDeleted.add(current);
}
}
}
// 批量插入
if (!toBeInserted.isEmpty()) {
jxMjKhTxService.batchInsert(toBeInserted);
}
// 批量更新
if (!toBeUpdated.isEmpty()) {
jxMjKhTxService.batchUpdate(toBeUpdated);
}
// 批量删除
if (!toBeDeleted.isEmpty()) {
jxMjKhTxService.batchDelete(toBeDeleted);
}
// 保存本次查询结果
lastResult = result;
```