From 275fc7a2646036482b7265fd1d3b93b9256cf6d9 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Mon, 16 Mar 2026 14:38:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95:=20=E8=A1=A5=E9=BD=90?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E5=88=A0=E9=99=A4=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E4=B8=8E=E5=A4=B1=E8=B4=A5=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CcdiFileUploadServiceImpl.java | 12 ++++++++ .../impl/CcdiFileUploadServiceImplTest.java | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java index b8c034d1..d6f17a43 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java @@ -890,6 +890,18 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService { if (record == null) { throw new RuntimeException("上传记录不存在"); } + if (!"parsed_success".equals(record.getFileStatus())) { + if ("deleted".equals(record.getFileStatus())) { + throw new RuntimeException("文件已删除,请勿重复操作"); + } + throw new RuntimeException("仅支持删除解析成功文件"); + } + if (record.getLsfxProjectId() == null) { + throw new RuntimeException("缺少流水分析项目ID"); + } + if (record.getLogId() == null) { + throw new RuntimeException("缺少文件logId"); + } } private Integer toUploadUserId(Long userId) { diff --git a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java index 099d39fa..cccfaef6 100644 --- a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java +++ b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java @@ -50,6 +50,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -283,6 +284,35 @@ class CcdiFileUploadServiceImplTest { )); } + @Test + void deleteFileUploadRecord_shouldRejectNonParsedSuccessStatus() { + CcdiFileUploadRecord record = buildRecord(); + record.setFileStatus("parsed_failed"); + when(recordMapper.selectById(RECORD_ID)).thenReturn(record); + + RuntimeException exception = assertThrows(RuntimeException.class, + () -> service.deleteFileUploadRecord(RECORD_ID, 9527L)); + + assertTrue(exception.getMessage().contains("仅支持删除解析成功文件")); + } + + @Test + void deleteFileUploadRecord_shouldStopWhenLsfxDeleteFails() { + CcdiFileUploadRecord record = buildRecord(); + record.setFileStatus("parsed_success"); + record.setLogId(LOG_ID); + record.setLsfxProjectId(LSFX_PROJECT_ID); + when(recordMapper.selectById(RECORD_ID)).thenReturn(record); + when(lsfxClient.deleteFiles(any())).thenThrow(new RuntimeException("lsfx delete failed")); + + assertThrows(RuntimeException.class, () -> service.deleteFileUploadRecord(RECORD_ID, 9527L)); + + verify(bankStatementMapper, never()).deleteByProjectIdAndBatchId(any(), any()); + verify(recordMapper, never()).updateById(org.mockito.ArgumentMatchers.argThat(item -> + "deleted".equals(item.getFileStatus()) + )); + } + // @Test // void processPullBankInfoAsync_shouldMarkParsedFailedWhenFetchInnerFlowThrows() { // when(lsfxClient.fetchInnerFlow(any())).thenThrow(new RuntimeException("fetch inner flow failed"));