SDF57 processing
This commit is contained in:
parent
c425431f4f
commit
3e09c017c3
4 changed files with 28 additions and 46 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue