feat(mapper): 添加公司关联查询和关键词搜索功能
- 在多个Mapper XML文件中添加LEFT JOIN credit_company表关联 - 扩展关键词搜索范围,支持通过公司名称进行搜索匹配 - 更新CreditNearbyCompany相关功能,支持按公司ID筛选和导入 - 修改CreditNearbyCompanyParam中companyId字段类型为String - 暂时注释掉纳税人识别号相关的搜索条件 - 统一各信用数据映射文件中的关键词搜索逻辑
This commit is contained in:
@@ -161,6 +161,12 @@ public class CreditNearbyCompanyController extends BaseController {
|
||||
Map<String, String> urlByCode = ExcelImportSupport.readHyperlinksByHeaderKey(file, usedSheetIndex, usedTitleRows, usedHeadRows, "统一社会信用代码");
|
||||
Map<String, String> urlByName = ExcelImportSupport.readHyperlinksByHeaderKey(file, usedSheetIndex, usedTitleRows, usedHeadRows, "企业名称");
|
||||
|
||||
// 避免逐行写库:按批处理,显著降低 SQL 次数与事务开销
|
||||
final int chunkSize = 500;
|
||||
final int mpBatchSize = 500;
|
||||
List<CreditNearbyCompany> chunkItems = new ArrayList<>(chunkSize);
|
||||
List<Integer> chunkRowNumbers = new ArrayList<>(chunkSize);
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
CreditNearbyCompanyImportParam param = list.get(i);
|
||||
try {
|
||||
@@ -207,14 +213,64 @@ public class CreditNearbyCompanyController extends BaseController {
|
||||
continue;
|
||||
}
|
||||
|
||||
chunkItems.add(item);
|
||||
chunkRowNumbers.add(excelRowNumber);
|
||||
if (chunkItems.size() >= chunkSize) {
|
||||
successCount += persistImportChunk(chunkItems, chunkRowNumbers, companyId, parentId, type, currentTenantId, mpBatchSize, errorMessages);
|
||||
chunkItems.clear();
|
||||
chunkRowNumbers.clear();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
int excelRowNumber = i + 1 + usedTitleRows + usedHeadRows;
|
||||
errorMessages.add("第" + excelRowNumber + "行:" + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (!chunkItems.isEmpty()) {
|
||||
successCount += persistImportChunk(chunkItems, chunkRowNumbers, companyId, parentId, type, currentTenantId, mpBatchSize, errorMessages);
|
||||
}
|
||||
|
||||
if (errorMessages.isEmpty()) {
|
||||
return success("成功导入" + successCount + "条数据", null);
|
||||
} else {
|
||||
return success("导入完成,成功" + successCount + "条,失败" + errorMessages.size() + "条", errorMessages);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return fail("导入失败:" + e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private int persistImportChunk(List<CreditNearbyCompany> items,
|
||||
List<Integer> excelRowNumbers,
|
||||
Integer companyId,
|
||||
Integer parentId,
|
||||
Integer type,
|
||||
Integer tenantId,
|
||||
int mpBatchSize,
|
||||
List<String> errorMessages) {
|
||||
if (CollectionUtils.isEmpty(items)) {
|
||||
return 0;
|
||||
}
|
||||
try {
|
||||
return creditNearbyCompanyService.importUpsertChunk(items, companyId, parentId, type, tenantId, mpBatchSize);
|
||||
} catch (Exception batchException) {
|
||||
// 批量失败时降级为逐行处理,尽量输出可定位的错误信息
|
||||
int successCount = 0;
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
CreditNearbyCompany item = items.get(i);
|
||||
int excelRowNumber = (excelRowNumbers != null && i < excelRowNumbers.size()) ? excelRowNumbers.get(i) : -1;
|
||||
try {
|
||||
boolean saved = creditNearbyCompanyService.save(item);
|
||||
if (!saved) {
|
||||
CreditNearbyCompany existing = creditNearbyCompanyService.lambdaQuery()
|
||||
.eq(!ImportHelper.isBlank(item.getCode()), CreditNearbyCompany::getCode, item.getCode())
|
||||
.eq(ImportHelper.isBlank(item.getCode()), CreditNearbyCompany::getName, item.getName())
|
||||
.eq(companyId != null, CreditNearbyCompany::getCompanyId, companyId)
|
||||
.eq(parentId != null, CreditNearbyCompany::getParentId, parentId)
|
||||
.eq(type != null, CreditNearbyCompany::getType, type)
|
||||
.eq(item.getCompanyId() != null, CreditNearbyCompany::getCompanyId, item.getCompanyId())
|
||||
.eq(item.getParentId() != null, CreditNearbyCompany::getParentId, item.getParentId())
|
||||
.eq(item.getType() != null, CreditNearbyCompany::getType, item.getType())
|
||||
.eq(item.getTenantId() != null, CreditNearbyCompany::getTenantId, item.getTenantId())
|
||||
.one();
|
||||
if (existing != null) {
|
||||
item.setId(existing.getId());
|
||||
@@ -227,22 +283,20 @@ public class CreditNearbyCompanyController extends BaseController {
|
||||
successCount++;
|
||||
continue;
|
||||
}
|
||||
errorMessages.add("第" + excelRowNumber + "行:保存失败");
|
||||
if (excelRowNumber > 0) {
|
||||
errorMessages.add("第" + excelRowNumber + "行:保存失败");
|
||||
} else {
|
||||
errorMessages.add("保存失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
int excelRowNumber = i + 1 + usedTitleRows + usedHeadRows;
|
||||
errorMessages.add("第" + excelRowNumber + "行:" + e.getMessage());
|
||||
e.printStackTrace();
|
||||
if (excelRowNumber > 0) {
|
||||
errorMessages.add("第" + excelRowNumber + "行:" + e.getMessage());
|
||||
} else {
|
||||
errorMessages.add(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errorMessages.isEmpty()) {
|
||||
return success("成功导入" + successCount + "条数据", null);
|
||||
} else {
|
||||
return success("导入完成,成功" + successCount + "条,失败" + errorMessages.size() + "条", errorMessages);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return fail("导入失败:" + e.getMessage(), null);
|
||||
return successCount;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user