Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2023-05-26 13:01:27 +03:00
commit ec55bd90cb
4 changed files with 28 additions and 46 deletions

View file

@ -3,7 +3,6 @@ package ru.spcex.clearing.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.service.executors.*; import ru.spcex.clearing.service.executors.*;
import ru.spcex.clearing.service.executors.SdfLegacyExecutor;
import ru.spcex.platform.enumeration.SdfTable; import ru.spcex.platform.enumeration.SdfTable;
import java.util.HashMap; import java.util.HashMap;
@ -13,7 +12,7 @@ import java.util.Map;
public class SdfExecutorsConfig { public class SdfExecutorsConfig {
@Bean("sdfExecutors") @Bean("sdfExecutors")
public Map<SdfTable, AbstractExecutor<?>> executorsMap(SdfLegacyExecutor sdf01Executor, public Map<SdfTable, AbstractExecutor<?>> executorsMap(Sdf01Executor sdf01Executor,
Sdf57Executor sdf57Executor, Sdf57Executor sdf57Executor,
Sdf04Executor sdf04Executor, Sdf04Executor sdf04Executor,
Sdf13Executor sdf13Executor) { Sdf13Executor sdf13Executor) {

View file

@ -19,7 +19,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
@Service @Service
public class Sdf04Executor extends AbstractExecutor<SDf04> { public class Sdf04Executor extends AbstractExecutor<SDf04> {
@ -54,25 +53,21 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
for (SDf04 sdf04 : sdf) { for (SDf04 sdf04 : sdf) {
//обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент //обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент
log.debug("Process sdf04 record; sdf04.id: {}", sdf04.getId()); log.debug("Process sdf04 record; sdf04.id: {}", sdf04.getId());
Collection<String> fullNames = Collections.emptyList(); //fixme что значит registry.fullName=sDf04.(sbanknam1, sbanknam2 и т.д.) Collection<Registry> registries = selectRegistryForSDF04(sdf04.getC_acc_cred());
Collection<Registry> registries = selectRegistryForSDF04(sdf04.getC_acc_cred(), fullNames);
registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sdf04.getPay_val()))); registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sdf04.getPay_val())));
} }
return result; return result;
} }
protected Collection<Registry> selectRegistryForSDF04(String account, Collection<String> fullNames) { protected Collection<Registry> selectRegistryForSDF04(String account) {
ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
ImdgPredicate query = pb.and( ImdgPredicate query = pb.and(
pb.and( pb.and(
pb.equals("registryDesignation", RegistryDesignation.A.getKey()), pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
pb.equals("registryInstrumentType", RegistryInstrumentType.M.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.equals("account", account)
// ,
// pb.in("fullName", fullNames.toArray(new String[fullNames.size()]))
); );
Collection<Registry> result = registryImdg.getCollectionObjectsByPredicate(query); Collection<Registry> result = registryImdg.getCollectionObjectsByPredicate(query);
@ -81,18 +76,8 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
} }
boolean unlockRegistry(Registry registry, BigDecimal value) { boolean unlockRegistry(Registry registry, BigDecimal value) {
if (RegistryUnit.F.equalsByKey(registry.getRegistryUnit())) { if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO);
if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); registry.setBalance(registry.getBalance().subtract(value));
registry.setBalance(registry.getBalance().add(value)); return true;
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;
}
} }
} }

View file

@ -20,6 +20,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.Map;
@Service @Service
public class Sdf13Executor extends AbstractExecutor<SDf13> { public class Sdf13Executor extends AbstractExecutor<SDf13> {
@ -64,8 +65,7 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
} }
protected SDf12 selectSdf12bySdf13(SDf13 sDf13) { protected SDf12 selectSdf12bySdf13(SDf13 sDf13) {
SDf12 sdf12 = sdf12Imdg.getSingleObjectByID(sDf13.getId()); SDf12 sdf12 = sdf12Imdg.getSingleObjectByFieldValues(Map.of("outDocument", sDf13.getInDocument()));
log.trace("Selected sdf12 by sdf13");
return sdf12; return sdf12;
} }
@ -74,9 +74,8 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
ImdgPredicate query = pb.and( ImdgPredicate query = pb.and(
pb.and( pb.and(
pb.equals("registryDesignation", RegistryDesignation.A.getKey()), pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()), pb.equals("registryInstrumentType", RegistryInstrumentType.S.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.equals("account", account),
pb.equals("securityCode", securityCode) pb.equals("securityCode", securityCode)
@ -88,18 +87,8 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
} }
boolean unlockRegistry(Registry registry, BigDecimal value) { boolean unlockRegistry(Registry registry, BigDecimal value) {
if (RegistryUnit.F.equalsByKey(registry.getRegistryUnit())) { if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO);
if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); registry.setBalance(registry.getBalance().subtract(value));
registry.setBalance(registry.getBalance().add(value)); return true;
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;
}
} }
} }

View file

@ -169,14 +169,20 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
}; };
Consumer<RegistryDesignation> create = (dsgn) -> { Consumer<RegistryDesignation> create = (dsgn) -> {
Registry registry = createRegistryByStatement(stmt, company, account, 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(); Registry registryB = registry.clone();
registryB.setRegistryUnit(RegistryUnit.B.getKey()); registryB.setRegistryUnit(RegistryUnit.B.getKey());
registryB.setRegistryCode(RegistryUtil.clearingCode(registryB)); registryB.setRegistryCode(RegistryUtil.clearingCode(registryB));
registryB.setId(imdgProvider.getImdgIdGenerator().nextId()); 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(registry);
registryImdg.insert(registryF); registryImdg.insert(registryF);
registryImdg.insert(registryB); registryImdg.insert(registryB);
@ -283,7 +289,10 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
//= текущее значение registry.balance - statement.amount //= текущее значение registry.balance - statement.amount
switch (inOutDirection) { switch (inOutDirection) {
case in -> rgs.setBalance(statement.getAmount()); 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'ки rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки
//fixme !rgs.setSettlementCode(); //fixme !rgs.setSettlementCode();