Merge branch 'codex/bank-statement-duplicate-check' into dev

# Conflicts:
#	ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java
This commit is contained in:
wkc
2026-03-10 10:47:05 +08:00
5 changed files with 228 additions and 57 deletions

View File

@@ -55,7 +55,7 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
private static class FetchBankStatementResult {
private boolean success;
private int totalCount;
private int savedCount;
private int attemptedCount;
private String errorMessage;
}
@@ -343,6 +343,14 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
return errorMessage.substring(0, MAX_ERROR_MESSAGE_LENGTH);
}
private String trimAccountNo(String value) {
return value == null ? null : value.trim();
}
private void normalizeDedupFields(CcdiBankStatement statement) {
statement.setLeAccountNo(trimAccountNo(statement.getLeAccountNo()));
}
/**
* 异步处理单个文件的完整流程
* 包含:上传 → 轮询解析状态 → 获取结果 → 保存流水数据
@@ -574,14 +582,13 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
if (totalCount == null || totalCount <= 0) {
log.warn("【文件上传】无流水数据需要保存: totalCount={}", totalCount);
result.setSuccess(true);
result.setSavedCount(0);
return result;
}
int pageSize = 1000;
int batchSize = 1000;
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
int totalSaved = 0;
int totalAttempted = 0;
List<CcdiBankStatement> batchList = new ArrayList<>(batchSize);
log.info("【文件上传】获取到总数: totalCount={}", totalCount);
@@ -613,13 +620,14 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
if (statement != null) {
statement.setBatchId(logId);
statement.setProjectId(projectId);
normalizeDedupFields(statement);
batchList.add(statement);
if (batchList.size() >= batchSize) {
int currentBatchSize = batchList.size();
bankStatementMapper.insertBatch(batchList);
totalSaved += batchList.size();
log.debug("【文件上传】批量入流水 {}条, 累计{}条",
batchList.size(), totalSaved);
totalAttempted += currentBatchSize;
log.debug("【文件上传】批量入流水 {}条", currentBatchSize);
batchList.clear();
}
}
@@ -634,14 +642,16 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
}
if (!batchList.isEmpty()) {
int currentBatchSize = batchList.size();
bankStatementMapper.insertBatch(batchList);
totalSaved += batchList.size();
totalAttempted += currentBatchSize;
log.debug("【文件上传】批量插入剩余流水 {}条", batchList.size());
}
log.info("【文件上传】流水数据保存完成: 总共保存{}条", totalSaved);
log.info("【文件上传】流水入库完成: fetchedCount={}, attemptedCount={}",
totalCount, totalAttempted);
result.setSuccess(true);
result.setSavedCount(totalSaved);
result.setAttemptedCount(totalAttempted);
return result;
} catch (Exception e) {
log.error("【文件上传】获取或保存流水数据失败: logId={}", logId, e);

View File

@@ -84,6 +84,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.overrideBsId}, #{item.paymentMethod}, #{item.cretNo}
)
</foreach>
on duplicate key update
bank_statement_id = bank_statement_id
</insert>
<delete id="deleteByProjectIdAndBatchId">