ialbert 2025-05-05 18:44:46 +03:00
parent 316871b5c7
commit 4eb63277e0
3 changed files with 44 additions and 0 deletions

View file

@ -4,12 +4,15 @@ import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
@ -36,6 +39,7 @@ import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.notification.NotificationSender; import ru.spcex.clearing.notification.NotificationSender;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ReviseAmatRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
@ -207,6 +211,11 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
.toArray(new String[0])) .toArray(new String[0]))
)) != null; )) != null;
sdf = sdf.stream().sorted(Comparator.comparing(SpcexObjectBase::getId)).toList(); sdf = sdf.stream().sorted(Comparator.comparing(SpcexObjectBase::getId)).toList();
final Set<Long> gvtfIds = new HashSet<>();
Consumer<Registry> acceptAMAT_Gvtf = (amat) -> {
boolean isAmat = RegistryManager.equalsByCode(RegistryTradingParams.AMAT, amat);
if (isAmat) gvtfIds.add(amat.getId());
};
for (SDf57 sdf57 : sdf) { for (SDf57 sdf57 : sdf) {
IValidator validator = sDf57Validator.apply(sdf57); IValidator validator = sDf57Validator.apply(sdf57);
Optional<EnumMessage> error = validator.tillFirstError(); Optional<EnumMessage> error = validator.tillFirstError();
@ -308,6 +317,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
registryB.getId()); registryB.getId());
return new AssetTrio(registryF, registryB, registry); return new AssetTrio(registryF, registryB, registry);
}); });
acceptAMAT_Gvtf.accept(asts.a__t());
InOutDirection direction = IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection()); InOutDirection direction = IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection());
boolean dm_tWasCreated = false; boolean dm_tWasCreated = false;
if (!StringUtils.isEmpty(stmt.getContract()) && InOutDirection.in.equals(direction)) { if (!StringUtils.isEmpty(stmt.getContract()) && InOutDirection.in.equals(direction)) {
@ -522,6 +532,9 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
statementDeb.map(stmt -> new StmtCmpAcc(stmt, companyDeb, accountDeb)).ifPresent(registersUpdate); statementDeb.map(stmt -> new StmtCmpAcc(stmt, companyDeb, accountDeb)).ifPresent(registersUpdate);
statementCred.map(stmt -> new StmtCmpAcc(stmt, companyCred, accountCred)).ifPresent(registersUpdate); statementCred.map(stmt -> new StmtCmpAcc(stmt, companyCred, accountCred)).ifPresent(registersUpdate);
} }
if (!gvtfIds.isEmpty()) {
kafka.sendRequestToQueue(Task.GVTF.topic(), gvtfRequest(gvtfIds));
}
if (sessionIsNeededFlag.get()) { if (sessionIsNeededFlag.get()) {
if (!timeService.timeForXdep()) { if (!timeService.timeForXdep()) {
EnumMessage err = new EnumMessage(ClearingError.XdepTimeIntervalNotMatch); EnumMessage err = new EnumMessage(ClearingError.XdepTimeIntervalNotMatch);
@ -718,6 +731,14 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
r.setUpdated(Instant.now()); r.setUpdated(Instant.now());
} }
private ReviseAmatRequest gvtfRequest(Set<Long> amatIds) {
ReviseAmatRequest payload = new ReviseAmatRequest();
ArrayList<Long> ids = new ArrayList<>(amatIds.size());
ids.addAll(amatIds);
payload.setAmatIds(ids);
return payload;
}
private static class RegistrySearch { private static class RegistrySearch {
private final ImdgPredicateBuilder pb; private final ImdgPredicateBuilder pb;
private final Imdg<Registry> registryImdg; private final Imdg<Registry> registryImdg;

View file

@ -122,6 +122,7 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation,
public final static RegistryTradingParams D__I; public final static RegistryTradingParams D__I;
public final static RegistryTradingParams D__V; public final static RegistryTradingParams D__V;
public final static RegistryTradingParams _S_T; public final static RegistryTradingParams _S_T;
public final static RegistryTradingParams AMAT;
static { static {
OS_T = new RegistryTradingParams(RegistryDesignation.O, OS_T = new RegistryTradingParams(RegistryDesignation.O,
@ -269,6 +270,10 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation,
RegistryInstrumentType.S, RegistryInstrumentType.S,
null, null,
RegistryUnit.T); RegistryUnit.T);
AMAT = new RegistryTradingParams(RegistryDesignation.A,
RegistryInstrumentType.M,
RegistryCapacity.A,
RegistryUnit.T);
} }
} }

View file

@ -0,0 +1,18 @@
package ru.spcex.clearing.platform.messaging.domain.cud.balance;
import java.util.Collections;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class ReviseAmatRequest {
@JsonProperty
private List<Long> amatIds = Collections.emptyList();
public List<Long> getAmatIds() {
return amatIds;
}
public void setAmatIds(List<Long> amatIds) {
this.amatIds = amatIds;
}
}