补齐第一期流水模型参数映射
This commit is contained in:
@@ -24,13 +24,18 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
@Component
|
@Component
|
||||||
public class BankTagRuleConfigResolver {
|
public class BankTagRuleConfigResolver {
|
||||||
|
|
||||||
private static final Map<String, Set<String>> RULE_PARAM_MAPPING = Map.of(
|
private static final Map<String, Set<String>> RULE_PARAM_MAPPING = Map.ofEntries(
|
||||||
"SINGLE_LARGE_INCOME", Set.of("SINGLE_TRANSACTION_AMOUNT"),
|
Map.entry("SINGLE_LARGE_INCOME", Set.of("SINGLE_TRANSACTION_AMOUNT")),
|
||||||
"CUMULATIVE_INCOME", Set.of("CUMULATIVE_TRANSACTION_AMOUNT"),
|
Map.entry("CUMULATIVE_INCOME", Set.of("CUMULATIVE_TRANSACTION_AMOUNT")),
|
||||||
"ANNUAL_TURNOVER", Set.of("ANNUAL_TURNOVER"),
|
Map.entry("ANNUAL_TURNOVER", Set.of("ANNUAL_TURNOVER")),
|
||||||
"LARGE_CASH_DEPOSIT", Set.of("LARGE_CASH_DEPOSIT"),
|
Map.entry("LARGE_CASH_DEPOSIT", Set.of("LARGE_CASH_DEPOSIT")),
|
||||||
"FREQUENT_CASH_DEPOSIT", Set.of("LARGE_CASH_DEPOSIT", "FREQUENT_CASH_DEPOSIT"),
|
Map.entry("FREQUENT_CASH_DEPOSIT", Set.of("LARGE_CASH_DEPOSIT", "FREQUENT_CASH_DEPOSIT")),
|
||||||
"LARGE_TRANSFER", Set.of("FREQUENT_TRANSFER")
|
Map.entry("LARGE_TRANSFER", Set.of("FREQUENT_TRANSFER")),
|
||||||
|
Map.entry("FOREX_BUY_AMT", Set.of("SINGLE_PURCHASE_AMOUNT")),
|
||||||
|
Map.entry("FOREX_SELL_AMT", Set.of("SINGLE_SETTLEMENT_AMOUNT")),
|
||||||
|
Map.entry("WITHDRAW_CNT", Set.of("WITHDRAW_CNT")),
|
||||||
|
Map.entry("STOCK_TFR_LARGE", Set.of("STOCK_TFR_LARGE")),
|
||||||
|
Map.entry("LARGE_STOCK_TRADING", Set.of("STOCK_TFR_LARGE"))
|
||||||
);
|
);
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
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;
|
||||||
@@ -130,6 +131,38 @@ class BankTagRuleConfigResolverTest {
|
|||||||
assertEquals("8888", config.getThresholdValue("ANNUAL_TURNOVER"));
|
assertEquals("8888", config.getThresholdValue("ANNUAL_TURNOVER"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolve_shouldMapPhaseOneThresholdRulesToUppercaseParamCodes() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
project.setConfigType("default");
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
|
||||||
|
assertSingleThresholdRule("SUSPICIOUS_FOREIGN_EXCHANGE", "FOREX_BUY_AMT",
|
||||||
|
"SINGLE_PURCHASE_AMOUNT", "50000");
|
||||||
|
assertSingleThresholdRule("SUSPICIOUS_FOREIGN_EXCHANGE", "FOREX_SELL_AMT",
|
||||||
|
"SINGLE_SETTLEMENT_AMOUNT", "60000");
|
||||||
|
assertSingleThresholdRule("ABNORMAL_BEHAVIOR", "WITHDRAW_CNT",
|
||||||
|
"WITHDRAW_CNT", "3");
|
||||||
|
assertSingleThresholdRule("ABNORMAL_BEHAVIOR", "STOCK_TFR_LARGE",
|
||||||
|
"STOCK_TFR_LARGE", "1000000");
|
||||||
|
assertSingleThresholdRule("ABNORMAL_BEHAVIOR", "LARGE_STOCK_TRADING",
|
||||||
|
"STOCK_TFR_LARGE", "1000000");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolve_shouldKeepEmptyThresholdsForPhaseOneRulesWithoutParams() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
project.setConfigType("default");
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
|
||||||
|
assertRuleHasNoThresholds("SUSPICIOUS_GAMBLING", "GAMBLING_SENSITIVE_KEYWORD");
|
||||||
|
assertRuleHasNoThresholds("SUSPICIOUS_RELATION", "SPECIAL_AMOUNT_TRANSACTION");
|
||||||
|
assertRuleHasNoThresholds("SUSPICIOUS_PART_TIME", "SUSPICIOUS_INCOME_KEYWORD");
|
||||||
|
assertRuleHasNoThresholds("SUSPICIOUS_PURCHASE", "LARGE_PURCHASE_TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
private CcdiModelParam buildParam(String paramCode, String paramValue) {
|
private CcdiModelParam buildParam(String paramCode, String paramValue) {
|
||||||
CcdiModelParam param = new CcdiModelParam();
|
CcdiModelParam param = new CcdiModelParam();
|
||||||
param.setProjectId(0L);
|
param.setProjectId(0L);
|
||||||
@@ -138,4 +171,42 @@ class BankTagRuleConfigResolverTest {
|
|||||||
param.setParamValue(paramValue);
|
param.setParamValue(paramValue);
|
||||||
return param;
|
return param;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void assertSingleThresholdRule(String modelCode, String ruleCode, String paramCode, String paramValue) {
|
||||||
|
when(modelParamMapper.selectByProjectAndModel(0L, modelCode)).thenReturn(List.of(
|
||||||
|
buildParam(modelCode, paramCode, paramValue)
|
||||||
|
));
|
||||||
|
|
||||||
|
CcdiBankTagRule ruleMeta = new CcdiBankTagRule();
|
||||||
|
ruleMeta.setModelCode(modelCode);
|
||||||
|
ruleMeta.setRuleCode(ruleCode);
|
||||||
|
ruleMeta.setIndicatorCode(paramCode);
|
||||||
|
|
||||||
|
BankTagRuleExecutionConfig config = resolver.resolve(40L, ruleMeta);
|
||||||
|
|
||||||
|
assertEquals(Map.of(paramCode, paramValue), config.getThresholdValues());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertRuleHasNoThresholds(String modelCode, String ruleCode) {
|
||||||
|
when(modelParamMapper.selectByProjectAndModel(0L, modelCode)).thenReturn(List.of(
|
||||||
|
buildParam(modelCode, "IGNORED_PARAM", "999")
|
||||||
|
));
|
||||||
|
|
||||||
|
CcdiBankTagRule ruleMeta = new CcdiBankTagRule();
|
||||||
|
ruleMeta.setModelCode(modelCode);
|
||||||
|
ruleMeta.setRuleCode(ruleCode);
|
||||||
|
|
||||||
|
BankTagRuleExecutionConfig config = resolver.resolve(40L, ruleMeta);
|
||||||
|
|
||||||
|
assertTrue(config.getThresholdValues().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiModelParam buildParam(String modelCode, String paramCode, String paramValue) {
|
||||||
|
CcdiModelParam param = new CcdiModelParam();
|
||||||
|
param.setProjectId(0L);
|
||||||
|
param.setModelCode(modelCode);
|
||||||
|
param.setParamCode(paramCode);
|
||||||
|
param.setParamValue(paramValue);
|
||||||
|
return param;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user