实现第二期资产比对规则真实SQL
This commit is contained in:
@@ -478,32 +478,176 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<select id="selectHouseRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
<select id="selectHouseRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
||||||
select
|
select
|
||||||
bs.bank_statement_id AS bankStatementId,
|
trade.bankStatementId AS bankStatementId,
|
||||||
bs.group_id AS groupId,
|
trade.groupId AS groupId,
|
||||||
bs.batch_id AS logId,
|
trade.logId AS logId,
|
||||||
'占位SQL,待补充真实规则' AS reasonDetail
|
CONCAT(
|
||||||
from ccdi_bank_statement bs
|
'购房交易金额 ', CAST(trade.amountDr AS CHAR),
|
||||||
where 1 = 0
|
' 元,对手方“', IFNULL(trade.customerAccountName, ''),
|
||||||
|
'”,证件号 ', trade.personId, ' 名下无房产登记'
|
||||||
|
) AS reasonDetail
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
staff.id_card AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) > 0
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '(购|买).*房|房款|首付'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '房地产|置业|置地|地产|房产|不动产|链家|贝壳|我爱我家|房管局'
|
||||||
|
)
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
relation.relation_cert_no AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_staff_fmy_relation relation on relation.relation_cert_no = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and relation.status = 1
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) > 0
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '(购|买).*房|房款|首付'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '房地产|置业|置地|地产|房产|不动产|链家|贝壳|我爱我家|房管局'
|
||||||
|
)
|
||||||
|
) trade
|
||||||
|
left join (
|
||||||
|
select distinct
|
||||||
|
asset.person_id AS personId
|
||||||
|
from ccdi_asset_info asset
|
||||||
|
where asset.asset_main_type = '房产'
|
||||||
|
and asset.asset_sub_type = '住宅'
|
||||||
|
and asset.asset_status = '正常'
|
||||||
|
) asset
|
||||||
|
on asset.personId = trade.personId
|
||||||
|
where asset.personId is null
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectPropertyFeeRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
<select id="selectPropertyFeeRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
||||||
select
|
select
|
||||||
bs.bank_statement_id AS bankStatementId,
|
trade.bankStatementId AS bankStatementId,
|
||||||
bs.group_id AS groupId,
|
trade.groupId AS groupId,
|
||||||
bs.batch_id AS logId,
|
trade.logId AS logId,
|
||||||
'占位SQL,待补充真实规则' AS reasonDetail
|
CONCAT(
|
||||||
from ccdi_bank_statement bs
|
'物业缴费金额 ', CAST(trade.amountDr AS CHAR),
|
||||||
where 1 = 0
|
' 元,对手方“', IFNULL(trade.customerAccountName, ''),
|
||||||
|
'”,证件号 ', trade.personId, ' 名下无房产登记'
|
||||||
|
) AS reasonDetail
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
staff.id_card AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) > 0
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '物业|物业费|管理费|物业服务|综合服务'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '物业|小区|花园|苑|中心|大厦|业委会|业主委员会|置业|房地产|服务中心|管理处|社区'
|
||||||
|
)
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
relation.relation_cert_no AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_staff_fmy_relation relation on relation.relation_cert_no = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and relation.status = 1
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) > 0
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '物业|物业费|管理费|物业服务|综合服务'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '物业|小区|花园|苑|中心|大厦|业委会|业主委员会|置业|房地产|服务中心|管理处|社区'
|
||||||
|
)
|
||||||
|
) trade
|
||||||
|
left join (
|
||||||
|
select distinct
|
||||||
|
asset.person_id AS personId
|
||||||
|
from ccdi_asset_info asset
|
||||||
|
where asset.asset_main_type = '房产'
|
||||||
|
and asset.asset_sub_type = '住宅'
|
||||||
|
and asset.asset_status = '正常'
|
||||||
|
) asset
|
||||||
|
on asset.personId = trade.personId
|
||||||
|
where asset.personId is null
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectTaxAssetRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
<select id="selectTaxAssetRegistrationMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
||||||
select
|
select
|
||||||
bs.bank_statement_id AS bankStatementId,
|
trade.bankStatementId AS bankStatementId,
|
||||||
bs.group_id AS groupId,
|
trade.groupId AS groupId,
|
||||||
bs.batch_id AS logId,
|
trade.logId AS logId,
|
||||||
'占位SQL,待补充真实规则' AS reasonDetail
|
CONCAT(
|
||||||
from ccdi_bank_statement bs
|
'税费支出金额 ', CAST(trade.amountDr AS CHAR),
|
||||||
where 1 = 0
|
' 元,对手方“', IFNULL(trade.customerAccountName, ''),
|
||||||
|
'”,证件号 ', trade.personId, ' 名下无房产登记'
|
||||||
|
) AS reasonDetail
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
staff.id_card AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) >= 5000
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '税务|缴税|税款'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '税务|税务局|国库|国家金库|财政'
|
||||||
|
)
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
relation.relation_cert_no AS personId,
|
||||||
|
bs.bank_statement_id AS bankStatementId,
|
||||||
|
bs.group_id AS groupId,
|
||||||
|
bs.batch_id AS logId,
|
||||||
|
IFNULL(bs.AMOUNT_DR, 0) AS amountDr,
|
||||||
|
bs.CUSTOMER_ACCOUNT_NAME AS customerAccountName
|
||||||
|
from ccdi_bank_statement bs
|
||||||
|
inner join ccdi_staff_fmy_relation relation on relation.relation_cert_no = bs.cret_no
|
||||||
|
where bs.project_id = #{projectId}
|
||||||
|
and relation.status = 1
|
||||||
|
and IFNULL(bs.AMOUNT_DR, 0) >= 5000
|
||||||
|
and (
|
||||||
|
IFNULL(bs.USER_MEMO, '') REGEXP '税务|缴税|税款'
|
||||||
|
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '税务|税务局|国库|国家金库|财政'
|
||||||
|
)
|
||||||
|
) trade
|
||||||
|
left join (
|
||||||
|
select distinct
|
||||||
|
asset.person_id AS personId
|
||||||
|
from ccdi_asset_info asset
|
||||||
|
where asset.asset_main_type = '房产'
|
||||||
|
and asset.asset_sub_type = '住宅'
|
||||||
|
and asset.asset_status = '正常'
|
||||||
|
) asset
|
||||||
|
on asset.personId = trade.personId
|
||||||
|
where asset.personId is null
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectIncomeAssetMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
<select id="selectIncomeAssetMismatchStatements" resultMap="BankTagStatementHitResultMap">
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import java.util.List;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertAll;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
@@ -90,7 +91,7 @@ class CcdiBankTagAnalysisMapperXmlTest {
|
|||||||
void placeholderRules_shouldUseEmptyResultSqlTemplate() throws Exception {
|
void placeholderRules_shouldUseEmptyResultSqlTemplate() throws Exception {
|
||||||
String xml = readXml(RESOURCE);
|
String xml = readXml(RESOURCE);
|
||||||
assertTrue(xml.contains("占位SQL,待补充真实规则"));
|
assertTrue(xml.contains("占位SQL,待补充真实规则"));
|
||||||
assertEquals(16, countMatches(xml, "where 1 = 0"));
|
assertEquals(13, countMatches(xml, "where 1 = 0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -116,6 +117,17 @@ class CcdiBankTagAnalysisMapperXmlTest {
|
|||||||
assertTrue(!selectSql.contains("where 1 = 0"));
|
assertTrue(!selectSql.contains("where 1 = 0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void assetRegistrationMismatchRules_shouldUseRealSqlAndAssetTable() throws Exception {
|
||||||
|
String xml = readXml(RESOURCE);
|
||||||
|
|
||||||
|
assertAll(
|
||||||
|
() -> assertStatementRuleUsesAssetTable(xml, "selectHouseRegistrationMismatchStatements"),
|
||||||
|
() -> assertStatementRuleUsesAssetTable(xml, "selectPropertyFeeRegistrationMismatchStatements"),
|
||||||
|
() -> assertStatementRuleUsesAssetTable(xml, "selectTaxAssetRegistrationMismatchStatements")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void analysisMapperXml_shouldBeWellFormed() throws Exception {
|
void analysisMapperXml_shouldBeWellFormed() throws Exception {
|
||||||
String xml = readXml(RESOURCE);
|
String xml = readXml(RESOURCE);
|
||||||
@@ -149,4 +161,14 @@ class CcdiBankTagAnalysisMapperXmlTest {
|
|||||||
assertTrue(matcher.find(), () -> "未找到 select: " + selectId);
|
assertTrue(matcher.find(), () -> "未找到 select: " + selectId);
|
||||||
return matcher.group();
|
return matcher.group();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void assertStatementRuleUsesAssetTable(String xml, String selectId) {
|
||||||
|
String selectSql = extractSelectSql(xml, selectId);
|
||||||
|
assertTrue(selectSql.contains("ccdi_asset_info"), () -> selectId + " 缺少 ccdi_asset_info");
|
||||||
|
assertTrue(selectSql.contains("AS bankStatementId"), () -> selectId + " 缺少 bankStatementId");
|
||||||
|
assertTrue(selectSql.contains("AS groupId"), () -> selectId + " 缺少 groupId");
|
||||||
|
assertTrue(selectSql.contains("AS logId"), () -> selectId + " 缺少 logId");
|
||||||
|
assertTrue(selectSql.contains("reasonDetail"), () -> selectId + " 缺少 reasonDetail");
|
||||||
|
assertTrue(!selectSql.contains("where 1 = 0"), () -> selectId + " 仍是占位 SQL");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user