diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankStatementMapper.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankStatementMapper.java index 78f6bd3..f3d0601 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankStatementMapper.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankStatementMapper.java @@ -1,8 +1,12 @@ package com.ruoyi.ccdi.project.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.entity.CcdiBankStatement; +import com.ruoyi.ccdi.project.domain.dto.CcdiBankStatementQueryDTO; +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 org.apache.ibatis.annotations.Param; import java.util.List; @@ -26,5 +30,12 @@ public interface CcdiBankStatementMapper extends BaseMapper { int deleteByProjectIdAndBatchId(@Param("projectId") Long projectId, @Param("batchId") Integer batchId); + Page selectStatementPage(Page page, + @Param("query") CcdiBankStatementQueryDTO query); + + List selectStatementListForExport(@Param("query") CcdiBankStatementQueryDTO query); + + CcdiBankStatementDetailVO selectStatementDetailById(@Param("bankStatementId") Long bankStatementId); + CcdiBankStatementFilterOptionsVO selectFilterOptions(@Param("projectId") Long projectId); } diff --git a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankStatementMapper.xml b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankStatementMapper.xml index da66c4a..d19fe03 100644 --- a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankStatementMapper.xml +++ b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankStatementMapper.xml @@ -59,6 +59,302 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from ccdi_bank_statement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CASE + WHEN bs.TRX_DATE IS NULL OR TRIM(bs.TRX_DATE) = '' THEN NULL + WHEN LENGTH(TRIM(bs.TRX_DATE)) = 10 THEN STR_TO_DATE(CONCAT(TRIM(bs.TRX_DATE), ' 00:00:00'), '%Y-%m-%d %H:%i:%s') + ELSE STR_TO_DATE(TRIM(bs.TRX_DATE), '%Y-%m-%d %H:%i:%s') + END + + + + CASE + WHEN IFNULL(bs.AMOUNT_CR, 0) > 0 THEN IFNULL(bs.AMOUNT_CR, 0) + ELSE 0 - IFNULL(bs.AMOUNT_DR, 0) + END + + + + CASE + WHEN IFNULL(bs.AMOUNT_CR, 0) > 0 THEN IFNULL(bs.AMOUNT_CR, 0) + ELSE IFNULL(bs.AMOUNT_DR, 0) + END + + + + bs.bank_statement_id AS bankStatementId, + bs.TRX_DATE AS trxDate, + bs.LE_ACCOUNT_NO AS leAccountNo, + bs.LE_ACCOUNT_NAME AS leAccountName, + bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName, + bs.CUSTOMER_ACCOUNT_NO AS customerAccountNo, + bs.USER_MEMO AS userMemo, + bs.CASH_TYPE AS cashType, + AS displayAmount + + + + bs.project_id = #{query.projectId} + + AND IFNULL(bs.AMOUNT_CR, 0) > 0 + + + AND IFNULL(bs.AMOUNT_DR, 0) > 0 + + + AND = ]]> + CASE + WHEN LENGTH(TRIM(#{query.transactionStartTime})) = 10 + THEN STR_TO_DATE(CONCAT(TRIM(#{query.transactionStartTime}), ' 00:00:00'), '%Y-%m-%d %H:%i:%s') + ELSE STR_TO_DATE(TRIM(#{query.transactionStartTime}), '%Y-%m-%d %H:%i:%s') + END + + + AND + CASE + WHEN LENGTH(TRIM(#{query.transactionEndTime})) = 10 + THEN STR_TO_DATE(CONCAT(TRIM(#{query.transactionEndTime}), ' 23:59:59'), '%Y-%m-%d %H:%i:%s') + ELSE STR_TO_DATE(TRIM(#{query.transactionEndTime}), '%Y-%m-%d %H:%i:%s') + END + + + AND ( + + bs.CUSTOMER_ACCOUNT_NAME LIKE CONCAT('%', TRIM(#{query.counterpartyName}), '%') + + + OR + + + bs.CUSTOMER_ACCOUNT_NAME IS NULL OR TRIM(bs.CUSTOMER_ACCOUNT_NAME) = '' + + ) + + + AND ( + + bs.USER_MEMO LIKE CONCAT('%', TRIM(#{query.userMemo}), '%') + + + OR + + + bs.USER_MEMO IS NULL OR TRIM(bs.USER_MEMO) = '' + + ) + + + AND bs.LE_ACCOUNT_NAME IN + + #{item} + + + + AND bs.BANK IN + + #{item} + + + + AND bs.LE_ACCOUNT_NO IN + + #{item} + + + + AND = ]]> #{query.amountMin} + + + AND #{query.amountMax} + + + AND ( + + bs.CUSTOMER_ACCOUNT_NO LIKE CONCAT('%', TRIM(#{query.counterpartyAccount}), '%') + + + OR + + + bs.CUSTOMER_ACCOUNT_NO IS NULL OR TRIM(bs.CUSTOMER_ACCOUNT_NO) = '' + + ) + + + AND ( + + bs.CASH_TYPE LIKE CONCAT('%', TRIM(#{query.transactionType}), '%') + + + OR + + + bs.CASH_TYPE IS NULL OR TRIM(bs.CASH_TYPE) = '' + + ) + + + + + + + ORDER BY ASC, bs.bank_statement_id ASC + + + ORDER BY DESC, bs.bank_statement_id DESC + + + ORDER BY ASC, bs.bank_statement_id ASC + + + ORDER BY DESC, bs.bank_statement_id DESC + + + + + + + + + + + + + + + + + + insert into ccdi_bank_statement ( project_id, LE_ID, ACCOUNT_ID, group_id, 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 928ce6f..0312252 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 @@ -1,6 +1,9 @@ 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.vo.CcdiBankStatementFilterOptionsVO; +import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementOptionVO; import com.ruoyi.ccdi.project.mapper.CcdiBankStatementMapper; import org.junit.jupiter.api.Test; @@ -12,6 +15,9 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -33,4 +39,17 @@ class CcdiBankStatementServiceImplTest { assertEquals(1, result.getOurSubjectOptions().size()); } + + @Test + void pageQuery_shouldNormalizeSortFieldAndDirection() { + Page page = new Page<>(1, 10); + CcdiBankStatementQueryDTO queryDTO = new CcdiBankStatementQueryDTO(); + queryDTO.setProjectId(100L); + queryDTO.setOrderBy("amount"); + queryDTO.setOrderDirection("desc"); + + service.selectStatementPage(page, queryDTO); + + verify(bankStatementMapper).selectStatementPage(eq(page), same(queryDTO)); + } }