From 3e09c017c39ed65a134719fb3ed9dd0d4e9f94d2 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 11:40:18 +0300 Subject: [PATCH] SDF57 processing --- .../clearing/config/SdfExecutorsConfig.java | 3 +-- .../service/executors/Sdf04Executor.java | 27 +++++-------------- .../service/executors/Sdf13Executor.java | 25 +++++------------ .../service/executors/Sdf57Executor.java | 19 +++++++++---- 4 files changed, 28 insertions(+), 46 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/SdfExecutorsConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/SdfExecutorsConfig.java index 03fe117b0..7058e98d2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/SdfExecutorsConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/SdfExecutorsConfig.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.clearing.service.executors.*; -import ru.spcex.clearing.service.executors.SdfLegacyExecutor; import ru.spcex.platform.enumeration.SdfTable; import java.util.HashMap; @@ -13,7 +12,7 @@ import java.util.Map; public class SdfExecutorsConfig { @Bean("sdfExecutors") - public Map> executorsMap(SdfLegacyExecutor sdf01Executor, + public Map> executorsMap(Sdf01Executor sdf01Executor, Sdf57Executor sdf57Executor, Sdf04Executor sdf04Executor, Sdf13Executor sdf13Executor) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java index a14733a95..97819dd3b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java @@ -19,7 +19,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.math.BigDecimal; import java.util.Collection; -import java.util.Collections; @Service public class Sdf04Executor extends AbstractExecutor { @@ -54,25 +53,21 @@ public class Sdf04Executor extends AbstractExecutor { for (SDf04 sdf04 : sdf) { //обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент log.debug("Process sdf04 record; sdf04.id: {}", sdf04.getId()); - Collection fullNames = Collections.emptyList(); //fixme что значит registry.fullName=sDf04.(sbanknam1, sbanknam2 и т.д.) - Collection registries = selectRegistryForSDF04(sdf04.getC_acc_cred(), fullNames); + Collection registries = selectRegistryForSDF04(sdf04.getC_acc_cred()); registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sdf04.getPay_val()))); } return result; } - protected Collection selectRegistryForSDF04(String account, Collection fullNames) { + protected Collection selectRegistryForSDF04(String account) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicate query = pb.and( pb.and( pb.equals("registryDesignation", RegistryDesignation.A.getKey()), pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()), - pb.or(pb.equals("registryUnit", RegistryUnit.F.getKey()), - pb.equals("registryUnit", RegistryUnit.B.getKey())) + pb.equals("registryUnit", RegistryUnit.B.getKey()) ), pb.equals("account", account) -// , -// pb.in("fullName", fullNames.toArray(new String[fullNames.size()])) ); Collection result = registryImdg.getCollectionObjectsByPredicate(query); @@ -81,18 +76,8 @@ public class Sdf04Executor extends AbstractExecutor { } boolean unlockRegistry(Registry registry, BigDecimal value) { - if (RegistryUnit.F.equalsByKey(registry.getRegistryUnit())) { - if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); - registry.setBalance(registry.getBalance().add(value)); - return true; - } else if (RegistryUnit.B.equalsByKey(registry.getRegistryUnit())) { - if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); - registry.setBalance(registry.getBalance().subtract(value)); - return true; - } else { - log.warn("For registry {} registryUnit={} unlock operation not implemented.", - registry.getId(), registry.getRegistryUnit()); - return false; - } + if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); + registry.setBalance(registry.getBalance().subtract(value)); + return true; } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java index 688e17d14..b4d3e48ee 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java @@ -20,6 +20,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.math.BigDecimal; import java.util.Collection; +import java.util.Map; @Service public class Sdf13Executor extends AbstractExecutor { @@ -64,8 +65,7 @@ public class Sdf13Executor extends AbstractExecutor { } protected SDf12 selectSdf12bySdf13(SDf13 sDf13) { - SDf12 sdf12 = sdf12Imdg.getSingleObjectByID(sDf13.getId()); - log.trace("Selected sdf12 by sdf13"); + SDf12 sdf12 = sdf12Imdg.getSingleObjectByFieldValues(Map.of("outDocument", sDf13.getInDocument())); return sdf12; } @@ -74,9 +74,8 @@ public class Sdf13Executor extends AbstractExecutor { ImdgPredicate query = pb.and( pb.and( pb.equals("registryDesignation", RegistryDesignation.A.getKey()), - pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()), - pb.or(pb.equals("registryUnit", RegistryUnit.F.getKey()), - pb.equals("registryUnit", RegistryUnit.B.getKey())) + pb.equals("registryInstrumentType", RegistryInstrumentType.S.getKey()), + pb.equals("registryUnit", RegistryUnit.B.getKey()) ), pb.equals("account", account), pb.equals("securityCode", securityCode) @@ -88,18 +87,8 @@ public class Sdf13Executor extends AbstractExecutor { } boolean unlockRegistry(Registry registry, BigDecimal value) { - if (RegistryUnit.F.equalsByKey(registry.getRegistryUnit())) { - if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); - registry.setBalance(registry.getBalance().add(value)); - return true; - } else if (RegistryUnit.B.equalsByKey(registry.getRegistryUnit())) { - if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); - registry.setBalance(registry.getBalance().subtract(value)); - return true; - } else { - log.warn("For registry {} registryUnit={} unlock operation not implemented.", - registry.getId(), registry.getRegistryUnit()); - return false; - } + if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); + registry.setBalance(registry.getBalance().subtract(value)); + return true; } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index 436d49273..58489e65b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -169,14 +169,20 @@ public class Sdf57Executor extends AbstractExecutor { }; Consumer create = (dsgn) -> { Registry registry = createRegistryByStatement(stmt, company, account, dsgn); - Registry registryF = registry.clone(); - registryF.setRegistryUnit(RegistryUnit.F.getKey()); - registryF.setRegistryCode(RegistryUtil.clearingCode(registryF)); - registryF.setId(imdgProvider.getImdgIdGenerator().nextId()); + Registry registryB = registry.clone(); registryB.setRegistryUnit(RegistryUnit.B.getKey()); registryB.setRegistryCode(RegistryUtil.clearingCode(registryB)); registryB.setId(imdgProvider.getImdgIdGenerator().nextId()); + registryB.setBalance(BigDecimal.ZERO); + registryB.setDebit(BigDecimal.ZERO); + + Registry registryF = registry.clone(); + registryF.setRegistryUnit(RegistryUnit.F.getKey()); + registryF.setRegistryCode(RegistryUtil.clearingCode(registryF)); + registryF.setBalance(registry.getBalance().subtract(registryB.getBalance())); + registryF.setId(imdgProvider.getImdgIdGenerator().nextId()); + registryImdg.insert(registry); registryImdg.insert(registryF); registryImdg.insert(registryB); @@ -283,7 +289,10 @@ public class Sdf57Executor extends AbstractExecutor { //= текущее значение registry.balance - statement.amount switch (inOutDirection) { case in -> rgs.setBalance(statement.getAmount()); - case out -> rgs.setBalance(statement.getAmount().negate()); + case out -> { + rgs.setBalance(statement.getAmount().negate()); + rgs.setDebit(statement.getAmount()); + } } rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки //fixme !rgs.setSettlementCode();