From 4384c7a4ff603f254091cebde2a91a20b7ede975 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Tue, 10 Mar 2026 16:16:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=B5=81=E6=B0=B4=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=AF=BC=E5=87=BA=E6=A8=A1=E5=9E=8B=E4=B8=8E=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/excel/CcdiBankStatementExcel.java | 47 +++++++++++++++++++ .../service/ICcdiBankStatementService.java | 20 ++++++++ .../impl/CcdiBankStatementServiceImpl.java | 32 +++++++++++++ .../CcdiBankStatementServiceImplTest.java | 33 ++++++++++++- 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/excel/CcdiBankStatementExcel.java diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/excel/CcdiBankStatementExcel.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/excel/CcdiBankStatementExcel.java new file mode 100644 index 0000000..7f536bc --- /dev/null +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/excel/CcdiBankStatementExcel.java @@ -0,0 +1,47 @@ +package com.ruoyi.ccdi.project.domain.excel; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 流水明细导出对象 + * + * @author ruoyi + */ +@Data +public class CcdiBankStatementExcel { + + /** 交易时间 */ + @Excel(name = "交易时间") + private String trxDate; + + /** 本方账户 */ + @Excel(name = "本方账户") + private String leAccountNo; + + /** 本方主体 */ + @Excel(name = "本方主体") + private String leAccountName; + + /** 对方名称 */ + @Excel(name = "对方名称") + private String customerAccountName; + + /** 对方账户 */ + @Excel(name = "对方账户") + private String customerAccountNo; + + /** 摘要 */ + @Excel(name = "摘要") + private String userMemo; + + /** 交易类型 */ + @Excel(name = "交易类型") + private String cashType; + + /** 交易金额 */ + @Excel(name = "交易金额") + private BigDecimal displayAmount; +} diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiBankStatementService.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiBankStatementService.java index 5523571..05ad67f 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiBankStatementService.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiBankStatementService.java @@ -2,9 +2,13 @@ package com.ruoyi.ccdi.project.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.dto.CcdiBankStatementQueryDTO; +import com.ruoyi.ccdi.project.domain.excel.CcdiBankStatementExcel; +import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; +import java.util.List; + /** * 流水明细查询Service接口 * @@ -29,4 +33,20 @@ public interface ICcdiBankStatementService { */ Page selectStatementPage(Page page, CcdiBankStatementQueryDTO queryDTO); + + /** + * 查询导出列表 + * + * @param queryDTO 查询条件 + * @return 导出列表 + */ + List selectStatementListForExport(CcdiBankStatementQueryDTO queryDTO); + + /** + * 查询流水详情 + * + * @param bankStatementId 流水ID + * @return 详情 + */ + CcdiBankStatementDetailVO getStatementDetail(Long bankStatementId); } diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImpl.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImpl.java index 96558d7..5555027 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImpl.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImpl.java @@ -2,6 +2,8 @@ package com.ruoyi.ccdi.project.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.dto.CcdiBankStatementQueryDTO; +import com.ruoyi.ccdi.project.domain.excel.CcdiBankStatementExcel; +import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; import com.ruoyi.ccdi.project.mapper.CcdiBankStatementMapper; @@ -12,6 +14,7 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.Collections; import java.util.stream.Collectors; /** @@ -42,6 +45,22 @@ public class CcdiBankStatementServiceImpl implements ICcdiBankStatementService { return bankStatementMapper.selectStatementPage(page, normalizedQuery); } + @Override + public List selectStatementListForExport(CcdiBankStatementQueryDTO queryDTO) { + CcdiBankStatementQueryDTO normalizedQuery = queryDTO == null ? new CcdiBankStatementQueryDTO() : queryDTO; + normalizeQuery(normalizedQuery); + List rows = bankStatementMapper.selectStatementListForExport(normalizedQuery); + if (rows == null || rows.isEmpty()) { + return Collections.emptyList(); + } + return rows.stream().map(this::toExcel).collect(Collectors.toList()); + } + + @Override + public CcdiBankStatementDetailVO getStatementDetail(Long bankStatementId) { + return bankStatementMapper.selectStatementDetailById(bankStatementId); + } + private void normalizeQuery(CcdiBankStatementQueryDTO queryDTO) { queryDTO.setTransactionStartTime(normalizeText(queryDTO.getTransactionStartTime())); queryDTO.setTransactionEndTime(normalizeText(queryDTO.getTransactionEndTime())); @@ -109,4 +128,17 @@ public class CcdiBankStatementServiceImpl implements ICcdiBankStatementService { .collect(Collectors.toList()); return normalized.isEmpty() ? null : normalized; } + + private CcdiBankStatementExcel toExcel(CcdiBankStatementListVO row) { + CcdiBankStatementExcel excel = new CcdiBankStatementExcel(); + excel.setTrxDate(row.getTrxDate()); + excel.setLeAccountNo(row.getLeAccountNo()); + excel.setLeAccountName(row.getLeAccountName()); + excel.setCustomerAccountName(row.getCustomerAccountName()); + excel.setCustomerAccountNo(row.getCustomerAccountNo()); + excel.setUserMemo(row.getUserMemo()); + excel.setCashType(row.getCashType()); + excel.setDisplayAmount(row.getDisplayAmount()); + return excel; + } } diff --git a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImplTest.java b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImplTest.java index adf9065..fcdf8f2 100644 --- a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImplTest.java +++ b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImplTest.java @@ -2,6 +2,8 @@ package com.ruoyi.ccdi.project.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.dto.CcdiBankStatementQueryDTO; +import com.ruoyi.ccdi.project.domain.excel.CcdiBankStatementExcel; +import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementOptionVO; @@ -12,14 +14,17 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.math.BigDecimal; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.same; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -90,4 +95,30 @@ class CcdiBankStatementServiceImplTest { assertNull(queryDTO.getCounterpartyAccount()); assertNull(queryDTO.getTransactionType()); } + + @Test + void selectStatementListForExport_shouldMapDisplayColumns() { + CcdiBankStatementListVO row = new CcdiBankStatementListVO(); + row.setTrxDate("2024-02-01 10:33:44"); + row.setLeAccountNo("6222"); + row.setLeAccountName("张三"); + row.setDisplayAmount(new BigDecimal("-8.00")); + when(bankStatementMapper.selectStatementListForExport(any())).thenReturn(List.of(row)); + + List result = service.selectStatementListForExport(new CcdiBankStatementQueryDTO()); + + assertEquals(1, result.size()); + assertEquals("6222", result.get(0).getLeAccountNo()); + } + + @Test + void getStatementDetail_shouldDelegateToMapper() { + CcdiBankStatementDetailVO detailVO = new CcdiBankStatementDetailVO(); + detailVO.setBankStatementId(200L); + when(bankStatementMapper.selectStatementDetailById(200L)).thenReturn(detailVO); + + CcdiBankStatementDetailVO result = service.getStatementDetail(200L); + + assertSame(detailVO, result); + } }