新增流水明细查询后端契约与测试骨架

This commit is contained in:
wkc
2026-03-10 16:01:00 +08:00
parent 80337e33b1
commit b498137206
8 changed files with 310 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
package com.ruoyi.ccdi.project.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 流水明细查询DTO
*
* @author ruoyi
*/
@Data
public class CcdiBankStatementQueryDTO {
/** 项目ID */
private Long projectId;
/** 页签类型 */
private String tabType;
/** 交易开始时间 */
private String transactionStartTime;
/** 交易结束时间 */
private String transactionEndTime;
/** 对方名称 */
private String counterpartyName;
/** 对方名称是否匹配空值 */
private Boolean counterpartyNameEmpty;
/** 摘要 */
private String userMemo;
/** 摘要是否匹配空值 */
private Boolean userMemoEmpty;
/** 本方主体 */
private List<String> ourSubjects;
/** 本方银行 */
private List<String> ourBanks;
/** 本方账户 */
private List<String> ourAccounts;
/** 最小金额 */
private BigDecimal amountMin;
/** 最大金额 */
private BigDecimal amountMax;
/** 对方账户 */
private String counterpartyAccount;
/** 对方账户是否匹配空值 */
private Boolean counterpartyAccountEmpty;
/** 交易类型 */
private String transactionType;
/** 交易类型是否匹配空值 */
private Boolean transactionTypeEmpty;
/** 排序字段 */
private String orderBy;
/** 排序方向 */
private String orderDirection;
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 流水明细详情VO
*
* @author ruoyi
*/
@Data
public class CcdiBankStatementDetailVO {
/** 流水ID */
private Long bankStatementId;
/** 项目ID */
private Long projectId;
/** 交易时间 */
private String trxDate;
/** 币种 */
private String currency;
/** 本方账户 */
private String leAccountNo;
/** 本方主体 */
private String leAccountName;
/** 对方名称 */
private String customerAccountName;
/** 对方账户 */
private String customerAccountNo;
/** 对方银行 */
private String customerBank;
/** 对方备注 */
private String customerReference;
/** 摘要 */
private String userMemo;
/** 银行摘要 */
private String bankComments;
/** 银行交易号 */
private String bankTrxNumber;
/** 本方银行 */
private String bank;
/** 交易类型 */
private String cashType;
/** 借方金额 */
private BigDecimal amountDr;
/** 贷方金额 */
private BigDecimal amountCr;
/** 余额 */
private BigDecimal amountBalance;
/** 页面展示金额 */
private BigDecimal displayAmount;
/** 交易标志 */
private String trxFlag;
/** 分类ID */
private Integer trxType;
/** 异常类型 */
private String exceptionType;
/** 是否内部交易 */
private Integer internalFlag;
/** 交易方式 */
private String paymentMethod;
/** 身份证号 */
private String cretNo;
/** 创建时间 */
private Date createDate;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* 流水明细筛选项集合VO
*
* @author ruoyi
*/
@Data
public class CcdiBankStatementFilterOptionsVO {
/** 本方主体选项 */
private List<CcdiBankStatementOptionVO> ourSubjectOptions = new ArrayList<>();
/** 本方银行选项 */
private List<CcdiBankStatementOptionVO> ourBankOptions = new ArrayList<>();
/** 本方账户选项 */
private List<CcdiBankStatementOptionVO> ourAccountOptions = new ArrayList<>();
}

View File

@@ -0,0 +1,41 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* 流水明细列表VO
*
* @author ruoyi
*/
@Data
public class CcdiBankStatementListVO {
/** 流水ID */
private Long bankStatementId;
/** 交易时间 */
private String trxDate;
/** 本方账户 */
private String leAccountNo;
/** 本方主体 */
private String leAccountName;
/** 对方名称 */
private String customerAccountName;
/** 对方账户 */
private String customerAccountNo;
/** 摘要 */
private String userMemo;
/** 交易类型 */
private String cashType;
/** 页面展示金额 */
private BigDecimal displayAmount;
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 流水明细筛选项VO
*
* @author ruoyi
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CcdiBankStatementOptionVO {
/** 展示文案 */
private String label;
/** 实际值 */
private String value;
}

View File

@@ -2,6 +2,7 @@ package com.ruoyi.ccdi.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ccdi.project.domain.entity.CcdiBankStatement;
import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -24,4 +25,6 @@ public interface CcdiBankStatementMapper extends BaseMapper<CcdiBankStatement> {
int deleteByProjectIdAndBatchId(@Param("projectId") Long projectId,
@Param("batchId") Integer batchId);
CcdiBankStatementFilterOptionsVO selectFilterOptions(@Param("projectId") Long projectId);
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.ccdi.project.service;
import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO;
/**
* 流水明细查询Service接口
*
* @author ruoyi
*/
public interface ICcdiBankStatementService {
/**
* 查询项目级筛选项
*
* @param projectId 项目ID
* @return 筛选项
*/
CcdiBankStatementFilterOptionsVO getFilterOptions(Long projectId);
}

View File

@@ -0,0 +1,36 @@
package com.ruoyi.ccdi.project.service.impl;
import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementFilterOptionsVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementOptionVO;
import com.ruoyi.ccdi.project.mapper.CcdiBankStatementMapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class CcdiBankStatementServiceImplTest {
@InjectMocks
private CcdiBankStatementServiceImpl service;
@Mock
private CcdiBankStatementMapper bankStatementMapper;
@Test
void getFilterOptions_shouldReturnProjectWideOptions() {
CcdiBankStatementFilterOptionsVO options = new CcdiBankStatementFilterOptionsVO();
options.setOurSubjectOptions(List.of(new CcdiBankStatementOptionVO("主体A", "主体A")));
when(bankStatementMapper.selectFilterOptions(100L)).thenReturn(options);
CcdiBankStatementFilterOptionsVO result = service.getFilterOptions(100L);
assertEquals(1, result.getOurSubjectOptions().size());
}
}