http://jira.mfd.msk:8088/browse/CLS-839 добавил логи и тесты

This commit is contained in:
AKurakin 2025-05-07 13:11:34 +03:00
parent 6cad412cdf
commit 6d86fa44f1
3 changed files with 208 additions and 6 deletions

View file

@ -122,13 +122,18 @@ public class AmatAmafChecker extends QueueConsumer implements InitializingBean {
Collection<Registry> otherRegistry = registryImdg.getCollectionObjectsByPredicate(predicate);
log.trace("For Registry.id={} found {} other Registry's by query {}", am_tId, otherRegistry.size(), predicate);
for (Registry otherReg : otherRegistry) {
if (!am_tId.equals(otherReg.getId()))
if (!am_tId.equals(otherReg.getId())) { // always true - предикат выше отфильтрует
checkRegistries.add(am_tRegistry);
}
}
}
}
timer = System.currentTimeMillis() - timer;
log.debug("Select {} Registry and hi's pairs by ID collection. Time {} ms.", checkRegistries.size(), timer);
if (log.isTraceEnabled())
log.trace("Selected registries id: {}",
checkRegistries.stream().map(o->String.valueOf(o.getId()))
.collect(Collectors.joining(",")));
}
// Сверка Registry
@ -174,11 +179,18 @@ public class AmatAmafChecker extends QueueConsumer implements InitializingBean {
BigDecimal am_tSumm = BigDecimal.ZERO;
BigDecimal am_fSumm = BigDecimal.ZERO;
for (Registry r : group.getValue()) {
short accumulated=0;
if (match(RegistryTradingParams.AM_T, r)) {
am_tSumm = am_tSumm.add(BigDecimalUtil.safeBD(r.getBalance()));
accumulated++;
}
if (match(RegistryTradingParams.AM_F, r)) {
am_fSumm = am_fSumm.add(BigDecimalUtil.safeBD(r.getBalance()));
accumulated++;
}
if (accumulated != 1) {
log.warn("Registry {id={}, RegistryCode={}, balance={}} Not match for AM_T/AM_F pattern:",
r.getId(), r.getRegistryCode(), r.getBalance());
}
}
log.trace("Group {} size of {} item: AM_T summ={}, AM_F summ={}",
@ -194,6 +206,11 @@ public class AmatAmafChecker extends QueueConsumer implements InitializingBean {
am_tSumm.subtract(am_fSumm)
);
resultMismatch.add(describe);
log.info("Balance not match (am_tSumm={}, am_fSumm={}) in register group: {}", am_tSumm, am_fSumm,
group.getValue().stream()
.map(r->String.format("id=%d accountType=%s registryCode=%s balance=%s",
r.getId(), r.getAccountType(), r.getRegistryCode(), r.getBalance()))
.collect(Collectors.joining("; ")));
}
}
log.debug("Check result: equalsCount = {}, mismatchCount = {}", equalsCount, mismatchCount);

View file

@ -6,10 +6,7 @@ import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
@ -21,9 +18,10 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class AmatAmafCheckerTest {
ImdgProvider imdgProvider;
AmatAmafChecker instance() {
ImdgProvider imdgProvider = Mockito.mock(ImdgProvider.class);
imdgProvider = Mockito.mock(ImdgProvider.class);
KafkaSender kafkaSender = Mockito.mock(KafkaSender.class);
Producer<String, Object> kafkaProducer = Mockito.mock(Producer.class);
Consumer<String, Object> kafkaQueue = Mockito.mock(Consumer.class);
@ -31,7 +29,7 @@ class AmatAmafCheckerTest {
}
@Test
void checkOnDate() {
void checkRegisters() {
AmatAmafChecker checker = instance();
List<Registry> regSrc = new ArrayList<>();
@ -90,6 +88,137 @@ class AmatAmafCheckerTest {
LocalDateTime.of(2025, 5, 5, 12, 37, 56), errors));
}
@Test
void checkRegisters2() {
AmatAmafChecker checker = instance();
List<Registry> regSrc = new ArrayList<>();
{
Registry reg = new Registry();
reg.setId(842446L);
reg.setAccountType("ANLT");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("T");
reg.setRegistryCode("AMAT");
reg.setAccount("30414810200000000600");
reg.setTradingClearingRegistryId(null);
reg.setTradingClearingRegistry(null);
reg.setSecuritySymbol("RUB");
reg.setBalance(new BigDecimal("233184292.440000000000000000"));
reg.setPlanBalance(new BigDecimal("233084283.440000000000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
}
{
Registry reg = new Registry();
reg.setId(61100000L);
reg.setAccountType("INFO");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("T");
reg.setRegistryCode("AMAT");
reg.setAccount("39911810000000950600");
reg.setTradingClearingRegistryId(61010036L);
reg.setTradingClearingRegistry("0620CAV00001");
reg.setSecuritySymbol("RUB");
reg.setBalance(new BigDecimal("-5351624.2534567800000"));
reg.setPlanBalance(new BigDecimal("-5351630.253456780000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
}
{
Registry reg = new Registry();
reg.setId(61100002L);
reg.setAccountType("INFO");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("F");
reg.setRegistryCode("AMAF");
reg.setAccount("39911810000000950600");
reg.setTradingClearingRegistryId(61010036L);
reg.setTradingClearingRegistry("0620CAV00001");
reg.setSecuritySymbol("RUB");
reg.setBalance(new BigDecimal("-5351624.25345678000000000"));
reg.setPlanBalance(new BigDecimal("0.000000000000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
}
{
Registry reg = new Registry();
reg.setId(61100005L);
reg.setAccountType("INFO");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("F");
reg.setRegistryCode("AMAF");
reg.setAccount("39911156000000250600");
reg.setTradingClearingRegistryId(61010036L);
reg.setTradingClearingRegistry("0620CAV00001");
reg.setSecuritySymbol("CNY");
reg.setBalance(new BigDecimal("207568.000000000000000000"));
reg.setPlanBalance(new BigDecimal("0.000000000000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
}
{
Registry reg = new Registry();
reg.setId(61100003L);
reg.setAccountType("INFO");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("T");
reg.setRegistryCode("AMAT");
reg.setAccount("39911156000000250600");
reg.setTradingClearingRegistryId(61010036L);
reg.setTradingClearingRegistry("0620CAV00001");
reg.setSecuritySymbol("CNY");
reg.setBalance(new BigDecimal("208246.000000000000000000"));
reg.setPlanBalance(new BigDecimal("208246.000000000000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
}
{
Registry reg = new Registry();
reg.setId(61530046L);
reg.setAccountType("INFO");
reg.setRegistryDesignation("A");
reg.setRegistryInstrumentType("M");
reg.setRegistryCapacity("A");
reg.setRegistryUnit("T");
reg.setRegistryCode("AMAT");
reg.setAccount("39911156000000250600");
reg.setTradingClearingRegistryId(61010036L);
reg.setTradingClearingRegistry("0620CAV00001");
reg.setSecuritySymbol("BYN");
reg.setBalance(new BigDecimal("95.000000000000000000"));
reg.setPlanBalance(new BigDecimal("95.000000000000000000"));
reg.setBalanceDimension("MONY");
regSrc.add(reg);
} // 61530048
// All OK
List<String> errors = checker.checkRegisters(regSrc);
// assertEquals(2, errors.size());
assertEquals("Проведена сверка по регистрам AMAT/AMAF.\n" +
"2025.05.05 12:37:56.\n" +
"Результат сверки: по ТКР 0620CAV00001 выявлено расхождение на регистрах AMAT/AMAF по CNY на сумму 678.000000000000000000;" +
" по ТКР 0620CAV00001 выявлено расхождение на регистрах AMAT/AMAF по BYN на сумму 95.000000000000000000;" +
" по ТКР null выявлено расхождение на регистрах AMAT/AMAF по RUB на сумму 233184292.440000000000000000.",
checker.makeErrorMessage(
LocalDateTime.of(2025, 5, 5, 12, 37, 56), errors));
}
@Test
void makeSuccessMessage() {
AmatAmafChecker checker = instance();

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="utility-service" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<!-- <appender-ref ref="TEXT_FILE"/>-->
<!-- <appender-ref ref="JSON_FILE" />-->
</root>
<logger name="ru.spcex" level="trace" additivity="false">
<!-- <appender-ref ref="TEXT_FILE"/>-->
<!-- <appender-ref ref="JSON_FILE" />-->
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>