From 9179e15682345712f17caa97816d1ff06a1b619d Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Mon, 16 Mar 2026 14:36:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E6=89=93=E9=80=9A?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E5=88=A0=E9=99=A4=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E4=B8=BB=E9=93=BE=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CcdiFileUploadServiceImpl.java | 28 ++++++++++++++- .../impl/CcdiFileUploadServiceImplTest.java | 34 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) 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 4e174e7c..b8c034d1 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 @@ -18,6 +18,7 @@ import com.ruoyi.lsfx.constants.LsfxConstants; import com.ruoyi.lsfx.domain.request.FetchInnerFlowRequest; import com.ruoyi.lsfx.domain.request.GetBankStatementRequest; import com.ruoyi.lsfx.domain.request.GetFileUploadStatusRequest; +import com.ruoyi.lsfx.domain.request.DeleteFilesRequest; import com.ruoyi.lsfx.domain.response.*; import jakarta.annotation.Resource; import lombok.Data; @@ -209,7 +210,26 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService { @Override public String deleteFileUploadRecord(Long id, Long operatorUserId) { - throw new UnsupportedOperationException("暂未实现删除上传记录"); + CcdiFileUploadRecord record = recordMapper.selectById(id); + validateDeleteRecord(record); + + DeleteFilesRequest request = new DeleteFilesRequest(); + request.setGroupId(record.getLsfxProjectId()); + request.setLogIds(new Integer[]{record.getLogId()}); + request.setUserId(toUploadUserId(operatorUserId)); + + DeleteFilesResponse response = lsfxClient.deleteFiles(request); + if (response == null || Boolean.FALSE.equals(response.getSuccessResponse())) { + throw new RuntimeException("流水分析平台删除文件失败"); + } + + bankStatementMapper.deleteByProjectIdAndBatchId(record.getProjectId(), record.getLogId()); + + CcdiFileUploadRecord update = new CcdiFileUploadRecord(); + update.setId(record.getId()); + update.setFileStatus("deleted"); + recordMapper.updateById(update); + return "删除成功"; } @Override @@ -866,6 +886,12 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService { bankStatementMapper.deleteByProjectIdAndBatchId(projectId, logId); } + private void validateDeleteRecord(CcdiFileUploadRecord record) { + if (record == null) { + throw new RuntimeException("上传记录不存在"); + } + } + private Integer toUploadUserId(Long userId) { if (userId == null) { throw new IllegalArgumentException("当前登录用户ID不能为空"); 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 a2186c29..099d39fa 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 @@ -12,6 +12,7 @@ import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper; import com.ruoyi.lsfx.client.LsfxAnalysisClient; import com.ruoyi.lsfx.domain.request.GetBankStatementRequest; import com.ruoyi.lsfx.domain.response.CheckParseStatusResponse; +import com.ruoyi.lsfx.domain.response.DeleteFilesResponse; import com.ruoyi.lsfx.domain.response.FetchInnerFlowResponse; import com.ruoyi.lsfx.domain.response.GetBankStatementResponse; import com.ruoyi.lsfx.domain.response.GetFileUploadStatusResponse; @@ -47,6 +48,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; 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.doAnswer; import static org.mockito.Mockito.verify; @@ -255,6 +257,32 @@ class CcdiFileUploadServiceImplTest { ); } + @Test + void deleteFileUploadRecord_shouldDeletePlatformFileBankStatementsAndMarkDeleted() { + CcdiFileUploadRecord record = buildRecord(); + record.setProjectId(PROJECT_ID); + record.setLsfxProjectId(LSFX_PROJECT_ID); + record.setLogId(LOG_ID); + record.setFileStatus("parsed_success"); + + when(recordMapper.selectById(RECORD_ID)).thenReturn(record); + when(lsfxClient.deleteFiles(any())).thenReturn(buildDeleteFilesResponse()); + + String result = service.deleteFileUploadRecord(RECORD_ID, 9527L); + + assertEquals("删除成功", result); + verify(lsfxClient).deleteFiles(argThat(request -> + request.getGroupId().equals(LSFX_PROJECT_ID) + && request.getUserId().equals(9527) + && request.getLogIds().length == 1 + && request.getLogIds()[0].equals(LOG_ID) + )); + verify(bankStatementMapper).deleteByProjectIdAndBatchId(PROJECT_ID, LOG_ID); + verify(recordMapper).updateById(org.mockito.ArgumentMatchers.argThat(item -> + RECORD_ID.equals(item.getId()) && "deleted".equals(item.getFileStatus()) + )); + } + // @Test // void processPullBankInfoAsync_shouldMarkParsedFailedWhenFetchInnerFlowThrows() { // when(lsfxClient.fetchInnerFlow(any())).thenThrow(new RuntimeException("fetch inner flow failed")); @@ -493,6 +521,12 @@ class CcdiFileUploadServiceImplTest { return response; } + private DeleteFilesResponse buildDeleteFilesResponse() { + DeleteFilesResponse response = new DeleteFilesResponse(); + response.setSuccessResponse(Boolean.TRUE); + return response; + } + private GetFileUploadStatusResponse buildParsedSuccessStatusResponse(String uploadFileName) { GetFileUploadStatusResponse response = buildParsedSuccessStatusResponse(); response.getData().getLogs().get(0).setUploadFileName(uploadFileName);