clearing-service http://jira.mfd.msk:8088/browse/CLS-200 Сверка VerificationResult доделал

This commit is contained in:
AKurakin 2023-01-17 11:19:24 +03:00
parent 198daf9e62
commit 06b37a91cb
2 changed files with 52 additions and 17 deletions

View file

@ -118,11 +118,14 @@ public class VerificationResultComponent {
for (VerificationResult rItem : result) {
verificationResultImdg.insert(rItem);
}
vResLst.addAll(result);
} catch (Exception e) {
log.error("Error verification for company {}: {}",
companyId, ExceptionUtils.getStackTrace(e));
}
}
boolean allSuccess = vResLst.stream().allMatch(vr -> ResultStatuses.success.equalsByKey(vr.getGenerationStatus()));
log.debug("Total {} VerificationResult created. {}", vResLst.size(), allSuccess ? "All success." : "Has same mismatch data.");
}
/**
@ -130,10 +133,13 @@ public class VerificationResultComponent {
* @param accountId Account.id by Account.account
* @return new
*/
VerificationResult newVerification(Company forCompany, Long accountId) {
VerificationResult newVerification(Instant now, Company forCompany, Long accountId) {
VerificationResult vResult = new VerificationResult();
vResult.setId(idGenerator.nextId()); // imdg
vResult.setCreated(Instant.now());
if (now == null) {
now = Instant.now();
}
vResult.setCreated(now);
if (forCompany != null) {
vResult.setClearingCode(forCompany.getClearingCode());
}
@ -146,7 +152,8 @@ public class VerificationResultComponent {
protected List<VerificationResult> checkOnCompany(Company forCompany, Collection<SDf01> allSDf01,
Collection<AccountBalance> allAccountBalance,
Collection<Account> allAccount) {
ArrayList<VerificationResult> checks = new ArrayList<>();
final ArrayList<VerificationResult> checks = new ArrayList<>();
final Instant now = Instant.now();
Map<String, Long> indexAccountIdByAccount = new HashMap<>();
for (Account account : allAccount) {
@ -157,7 +164,7 @@ public class VerificationResultComponent {
{ // 1.70 verificationResult
Map<String, SDf01> indexSDf01 = index(allSDf01, SDf01::getAccount);
for (AccountBalance account : allAccountBalance) {
VerificationResult vResult = newVerification(forCompany, indexAccountIdByAccount.get(account.getAccount()));
VerificationResult vResult = newVerification(now, forCompany, indexAccountIdByAccount.get(account.getAccount()));
checks.add(vResult);
SDf01 document = indexSDf01.get(account.getAccount());
@ -205,7 +212,7 @@ public class VerificationResultComponent {
boolean isOk = sDf01Keys.size() == accountKeys.size() &&
sDf01Keys.containsAll(accountKeys) && accountKeys.containsAll(sDf01Keys);
VerificationResult vResult = newVerification(forCompany, null);
VerificationResult vResult = newVerification(now, forCompany, null);
checks.add(vResult);
if (isOk) {
vResult.setResultStatus(ResultStatuses.success.getKey());
@ -221,7 +228,7 @@ public class VerificationResultComponent {
long countSDf01 = allSDf01.stream().filter(sDf01 -> sDf01.getDeal() != null).count();
long countAccount = allAccount.stream().filter(account -> account.getAccount() != null).count();
boolean isOk = countSDf01 == countAccount;
VerificationResult vResult = newVerification(forCompany, null);
VerificationResult vResult = newVerification(now, forCompany, null);
checks.add(vResult);
if (isOk) {
vResult.setResultStatus(ResultStatuses.success.getKey());
@ -281,7 +288,7 @@ public class VerificationResultComponent {
fromSDf01 = fromSDf01.setScale(2, RoundingMode.HALF_UP);
BigDecimal diff = fromBalance.subtract(fromSDf01).setScale(2, RoundingMode.HALF_UP).abs();
VerificationResult vResult = newVerification(forCompany, indexAccountIdByAccount.get(account));
VerificationResult vResult = newVerification(now, forCompany, indexAccountIdByAccount.get(account));
checks.add(vResult);
if (BigDecimal.ZERO.compareTo(diff) == 0) {
vResult.setResultStatus(ResultStatuses.success.getKey());
@ -290,7 +297,7 @@ public class VerificationResultComponent {
}
vResult.setDiffSum(diff);
vResult.setOutExtSum(fromSDf01);
log.trace("for comapny[{}], account \"{}\" summ of fromSDf01={}, of fromBalance={}; result {}",
log.trace("for company[{}], account \"{}\" summ of fromSDf01={}, of fromBalance={}; result {}",
forCompany.getId(), account, fromSDf01, fromBalance, vResult.getResultStatus());
}
}
@ -303,15 +310,6 @@ public class VerificationResultComponent {
return checks;
}
/*
Сумму по остаткам в бизнес-объекте accountBalance - sDf01.remainder = accountBalance.closeBalanceAmount [sDf01.account = accountBalance.account]
2. Расчет контрольных сумм:
2.1 Номера торговых/клиринговых счетов, соответствующие загруженным в КС -sDf01.deal = account.account & accountType=CLRN & accountStatus=UNBL
2.2 Количество торговых/клиринговых счетов, соответствующие загруженным в КС - COUNT[sDf01.deal] = COUNT [account.account]
2.3 Суммарный остаток по счетам - sDf01.remainder = accountBalance.closeBalanceAmount[sDf01.account = accountBalance.account]
3. Сверка остатков по клиринговым счетам СПВБ в бизнес-объекте accountBalance - sDf01.remainder = accountBalance.closeBalanceAmount [sDf01.account = accountBalance.account & accountType=INFO]
*/
<K, V extends WithId> Map<K, V> index(Collection<V> from, Function<V, K> indexFieldExtractor) {
Map<K, V> index = new HashMap<>();

View file

@ -0,0 +1,37 @@
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/clearing-service.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
../logs/clearing-service.%i.log
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>