From 56d4fe5b841d60b836b420c555cb98d2bd1e22b2 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Tue, 17 Mar 2026 15:01:42 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E8=A1=A5=E5=85=85=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=8F=82=E6=95=B0=E8=A7=A3=E6=9E=90=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BankTagRuleConfigResolver.java | 15 +++++++ .../impl/BankTagRuleConfigResolverTest.java | 41 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java index 059826d5..c07543a6 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java @@ -14,10 +14,13 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; /** * 流水标签规则执行参数解析器 */ +@Slf4j @Component public class BankTagRuleConfigResolver { @@ -61,11 +64,23 @@ public class BankTagRuleConfigResolver { Map thresholdValues = new LinkedHashMap<>(); Set requiredParamCodes = RULE_PARAM_MAPPING.getOrDefault(ruleMeta.getRuleCode(), Set.of()); + log.info("【流水标签】解析规则参数: projectId={}, effectiveProjectId={}, ruleCode={}, requiredParams={}", + projectId, effectiveProjectId, ruleMeta.getRuleCode(), requiredParamCodes); for (CcdiModelParam param : params) { if (requiredParamCodes.contains(param.getParamCode())) { thresholdValues.put(param.getParamCode(), param.getParamValue()); } } + log.debug("【流水标签】规则参数解析结果: projectId={}, ruleCode={}, thresholdValues={}", + projectId, ruleMeta.getRuleCode(), thresholdValues); + + Set missingParamCodes = requiredParamCodes.stream() + .filter(code -> !thresholdValues.containsKey(code)) + .collect(Collectors.toSet()); + if (!missingParamCodes.isEmpty()) { + log.warn("【流水标签】规则参数缺失: projectId={}, ruleCode={}, missingParams={}", + projectId, ruleMeta.getRuleCode(), missingParamCodes); + } BankTagRuleExecutionConfig config = new BankTagRuleExecutionConfig(); config.setProjectId(projectId); diff --git a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolverTest.java b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolverTest.java index b2d51553..619eb8ad 100644 --- a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolverTest.java +++ b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolverTest.java @@ -1,5 +1,8 @@ package com.ruoyi.ccdi.project.service.impl; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.read.ListAppender; import com.ruoyi.ccdi.project.domain.CcdiModelParam; import com.ruoyi.ccdi.project.domain.CcdiProject; import com.ruoyi.ccdi.project.domain.entity.CcdiBankTagRule; @@ -11,10 +14,12 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.slf4j.LoggerFactory; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -49,6 +54,42 @@ class BankTagRuleConfigResolverTest { assertEquals("1111", config.getThresholdValue("SINGLE_TRANSACTION_AMOUNT")); } + @Test + void resolve_shouldLogThresholdSourceAndMissingParams() { + CcdiProject project = new CcdiProject(); + project.setProjectId(40L); + project.setConfigType("default"); + when(projectMapper.selectById(40L)).thenReturn(project); + when(modelParamMapper.selectByProjectAndModel(0L, "LARGE_TRANSACTION")).thenReturn(List.of( + buildParam("LARGE_CASH_DEPOSIT", "50000") + )); + + CcdiBankTagRule ruleMeta = new CcdiBankTagRule(); + ruleMeta.setModelCode("LARGE_TRANSACTION"); + ruleMeta.setRuleCode("FREQUENT_CASH_DEPOSIT"); + + Logger logger = (Logger) LoggerFactory.getLogger(BankTagRuleConfigResolver.class); + ListAppender logAppender = new ListAppender<>(); + logAppender.start(); + logger.addAppender(logAppender); + + try { + resolver.resolve(40L, ruleMeta); + + assertTrue(logAppender.list.stream().map(ILoggingEvent::getFormattedMessage) + .anyMatch(message -> message.contains("解析规则参数") + && message.contains("projectId=40") + && message.contains("effectiveProjectId=0") + && message.contains("FREQUENT_CASH_DEPOSIT"))); + assertTrue(logAppender.list.stream().map(ILoggingEvent::getFormattedMessage) + .anyMatch(message -> message.contains("规则参数缺失") + && message.contains("projectId=40") + && message.contains("FREQUENT_CASH_DEPOSIT"))); + } finally { + logger.detachAppender(logAppender); + } + } + private CcdiModelParam buildParam(String paramCode, String paramValue) { CcdiModelParam param = new CcdiModelParam(); param.setProjectId(0L);