http://jira.mfd.msk:8088/browse/CLS-839 добавил логи и тесты
This commit is contained in:
parent
6cad412cdf
commit
6d86fa44f1
3 changed files with 208 additions and 6 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Add table
Reference in a new issue