feat(import): 实现批量导入去重机制并简化导入逻辑
- 在 BatchImportSupport 中新增 persistInsertOnlyChunk 方法处理仅插入模式的批量保存 - 新增 isDuplicateKey 方法用于检测数据库唯一索引冲突 - 修改行政许可、破产重整、失信被执行人等控制器的导入逻辑,使用新方法替换原有的 upsert 逻辑 - 移除 LinkedHashMap 的去重预处理,改为直接使用数据库唯一索引约束处理重复数据 - 更新导入规则描述,明确使用数据库唯一索引而非覆盖更新逻辑 - 移除 LocalDate 和 LinkedHashMap 等不再使用的导入包
This commit is contained in:
@@ -262,38 +262,13 @@ public class CreditCompetitorController extends BaseController {
|
||||
chunkItems.add(item);
|
||||
chunkRowNumbers.add(excelRowNumber);
|
||||
if (chunkItems.size() >= chunkSize) {
|
||||
successCount += batchImportSupport.persistChunkWithFallback(
|
||||
successCount += batchImportSupport.persistInsertOnlyChunk(
|
||||
creditCompetitorService,
|
||||
chunkItems,
|
||||
chunkRowNumbers,
|
||||
() -> batchImportSupport.upsertBySingleKey(
|
||||
creditCompetitorService,
|
||||
chunkItems,
|
||||
CreditCompetitor::getId,
|
||||
CreditCompetitor::setId,
|
||||
CreditCompetitor::getName,
|
||||
CreditCompetitor::getName,
|
||||
null,
|
||||
mpBatchSize
|
||||
),
|
||||
(rowItem, rowNumber) -> {
|
||||
boolean saved = creditCompetitorService.save(rowItem);
|
||||
if (!saved) {
|
||||
CreditCompetitor existing = creditCompetitorService.lambdaQuery()
|
||||
.eq(CreditCompetitor::getName, rowItem.getName())
|
||||
.one();
|
||||
if (existing != null) {
|
||||
rowItem.setId(existing.getId());
|
||||
if (creditCompetitorService.updateById(rowItem)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
String prefix = rowNumber > 0 ? ("第" + rowNumber + "行:") : "";
|
||||
errorMessages.add(prefix + "保存失败");
|
||||
return false;
|
||||
},
|
||||
mpBatchSize,
|
||||
CreditCompetitor::getName,
|
||||
"",
|
||||
errorMessages
|
||||
);
|
||||
chunkItems.clear();
|
||||
@@ -307,38 +282,13 @@ public class CreditCompetitorController extends BaseController {
|
||||
}
|
||||
|
||||
if (!chunkItems.isEmpty()) {
|
||||
successCount += batchImportSupport.persistChunkWithFallback(
|
||||
successCount += batchImportSupport.persistInsertOnlyChunk(
|
||||
creditCompetitorService,
|
||||
chunkItems,
|
||||
chunkRowNumbers,
|
||||
() -> batchImportSupport.upsertBySingleKey(
|
||||
creditCompetitorService,
|
||||
chunkItems,
|
||||
CreditCompetitor::getId,
|
||||
CreditCompetitor::setId,
|
||||
CreditCompetitor::getName,
|
||||
CreditCompetitor::getName,
|
||||
null,
|
||||
mpBatchSize
|
||||
),
|
||||
(rowItem, rowNumber) -> {
|
||||
boolean saved = creditCompetitorService.save(rowItem);
|
||||
if (!saved) {
|
||||
CreditCompetitor existing = creditCompetitorService.lambdaQuery()
|
||||
.eq(CreditCompetitor::getName, rowItem.getName())
|
||||
.one();
|
||||
if (existing != null) {
|
||||
rowItem.setId(existing.getId());
|
||||
if (creditCompetitorService.updateById(rowItem)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
String prefix = rowNumber > 0 ? ("第" + rowNumber + "行:") : "";
|
||||
errorMessages.add(prefix + "保存失败");
|
||||
return false;
|
||||
},
|
||||
mpBatchSize,
|
||||
CreditCompetitor::getName,
|
||||
"",
|
||||
errorMessages
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user