Обновил выгрузку ценных бумаг DEPO
This commit is contained in:
parent
bc101f6cb4
commit
8e57cd810e
6 changed files with 125 additions and 115 deletions
|
|
@ -31,10 +31,7 @@ import static ru.spcex.clearing.platform.messaging.domain.Consts.LIM_EXPORTED;
|
|||
public abstract class AbstractExporterService {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
protected final Imdg<Registry> registryImdg;
|
||||
private final List<String> validStatus = List.of(
|
||||
ServiceStatus.Active.getKey(), ServiceStatus.Reopened.getKey()
|
||||
// "ACTV", "ROPN"
|
||||
);
|
||||
private final List<String> validStatus = List.of(ServiceStatus.Active.getKey(), ServiceStatus.Reopened.getKey());
|
||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||
private final DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
private final SFTPConfig.LimGateway gateway;
|
||||
|
|
|
|||
|
|
@ -10,12 +10,15 @@ import ru.spcex.clearing.lim.exporter.config.SFTPConfig;
|
|||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AM_F;
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.DM_T;
|
||||
|
||||
@Service
|
||||
public class MoneyExporterService extends AbstractExporterService {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
|
@ -39,18 +42,10 @@ public class MoneyExporterService extends AbstractExporterService {
|
|||
@Override
|
||||
public Collection<String> getLimFileRows() {
|
||||
log.debug("Started loading and formation of money file lines");
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
List<String> limFileRows = new ArrayList<>();
|
||||
Collection<Registry> registriesA = registryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"registryDesignation", "A",
|
||||
"registryInstrumentType", "M",
|
||||
"registryUnit", "F"
|
||||
));
|
||||
Collection<Registry> registriesD = registryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"registryDesignation", "D",
|
||||
"registryInstrumentType", "M",
|
||||
"registryUnit", "T"
|
||||
));
|
||||
Collection<Registry> registriesA = registryImdg.getCollectionObjectsBySQL(RegistryCodeSqlBuilder.getInstance(AM_F).build());
|
||||
Collection<Registry> registriesD = registryImdg.getCollectionObjectsBySQL(RegistryCodeSqlBuilder.getInstance(DM_T).build());
|
||||
|
||||
Map<String, List<Registry>> byTcrA = registriesA.stream().filter(r -> StringUtils.hasText(r.getTradingClearingRegistry()))
|
||||
.collect(Collectors.groupingBy(Registry::getTradingClearingRegistry));
|
||||
Map<String, List<Registry>> byTcrD = registriesD.stream().filter(r -> StringUtils.hasText(r.getTradingClearingRegistry()))
|
||||
|
|
|
|||
|
|
@ -7,14 +7,21 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.spcex.clearing.lim.exporter.config.LimFormat;
|
||||
import ru.spcex.clearing.lim.exporter.config.SFTPConfig;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.AS_F;
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.DS_T;
|
||||
|
||||
@Service
|
||||
public class SecurityExporterService extends AbstractExporterService {
|
||||
|
|
@ -40,26 +47,35 @@ public class SecurityExporterService extends AbstractExporterService {
|
|||
@Override
|
||||
public Collection<String> getLimFileRows() {
|
||||
log.debug("Started loading and formation of DEPO file lines");
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
List<String> limFileRows = new ArrayList<>();
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"registryDesignation", "A",
|
||||
"registryInstrumentType", "S",
|
||||
"registryUnit", "T"
|
||||
));
|
||||
log.debug("Selected {} registriesA.",
|
||||
registries.size());
|
||||
|
||||
for (Registry registry : registries) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
Function<Registry, ImdgPredicate> prdct = registry -> pb.and(
|
||||
pb.sql(RegistryCodeSqlBuilder.getInstance(DS_T).build()),
|
||||
pb.equals("registryStatus", RegistryStatus.PROC.getKey()),
|
||||
pb.equals("companyId", registry.getCompanyId()),
|
||||
pb.equals("tradingClearingRegistry", registry.getTradingClearingRegistry()),
|
||||
pb.equals("securityId", registry.getSecurityId())
|
||||
);
|
||||
|
||||
List<String> limFileRows = new ArrayList<>();
|
||||
Collection<Registry> registriesA = registryImdg.getCollectionObjectsBySQL(RegistryCodeSqlBuilder.getInstance(AS_F).build());
|
||||
log.debug("Selected {} registriesA.",
|
||||
registriesA.size());
|
||||
|
||||
for (Registry registry : registriesA) {
|
||||
if (checkNotBlocked(registry)) {
|
||||
limFileRows.add(getRow(registry));
|
||||
BigDecimal sumPositive = BigDecimal.ZERO;
|
||||
if(registry.getCompanyId() != null && registry.getTradingClearingRegistry() != null && registry.getSecurityId() != null){
|
||||
sumPositive = sumPositive(registryImdg.getCollectionObjectsByPredicate(prdct.apply(registry)));
|
||||
}
|
||||
limFileRows.add(getRow(registry, sumPositive));
|
||||
}
|
||||
}
|
||||
log.debug("Successfully completed the formation of rows: {} for export DEPO", limFileRows.size());
|
||||
return limFileRows;
|
||||
}
|
||||
|
||||
public String getRow(Registry registry) {
|
||||
public String getRow(Registry registry, BigDecimal sumPositive) {
|
||||
StringBuilder row = new StringBuilder();
|
||||
|
||||
row.append("DEPO: FIRM_ID = ");
|
||||
|
|
@ -72,7 +88,8 @@ public class SecurityExporterService extends AbstractExporterService {
|
|||
row.append(registry.getTradingClearingRegistry());
|
||||
|
||||
row.append("; OPEN_BALANCE = ");
|
||||
row.append(LimFormat.toStringD2(registry.getBalance()));
|
||||
BigDecimal balance = registry.getBalance() != null ? registry.getBalance().subtract(sumPositive) : BigDecimal.ZERO;
|
||||
row.append(LimFormat.toStringD2(balance));
|
||||
|
||||
row.append("; OPEN_LIMIT = 0");
|
||||
|
||||
|
|
@ -83,4 +100,15 @@ public class SecurityExporterService extends AbstractExporterService {
|
|||
|
||||
return row.toString();
|
||||
}
|
||||
|
||||
private BigDecimal sumPositive(Collection<Registry> registries) {
|
||||
if (registries == null || registries.isEmpty()) return BigDecimal.ZERO;
|
||||
BigDecimal result = BigDecimal.ZERO;
|
||||
for (Registry registry : registries) {
|
||||
if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) > 0) {
|
||||
result = result.add(registry.getBalance());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,15 +6,20 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
import org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
||||
|
|
@ -50,4 +55,53 @@ public abstract class AbstractServiceTest {
|
|||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
}
|
||||
|
||||
|
||||
protected Registry getRegistryA(String tradingClearingRegistry, Long securityId, String registryInstrumentType) {
|
||||
Registry registry = new Registry();
|
||||
registry.setTradingCode("1A12323");
|
||||
registry.setBalance(new BigDecimal("10.00"));
|
||||
registry.setTradingClearingRegistry(tradingClearingRegistry);
|
||||
registry.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
registry.setRegistryInstrumentType(registryInstrumentType);
|
||||
registry.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
registry.setClearingCode(clearingCode(registry));
|
||||
registry.setClearingDate(currentDate);
|
||||
registry.setSecuritySymbol("RUB");
|
||||
registry.setSecurityId(securityId);
|
||||
registry.setTradingClearingRegistryId(securityId);
|
||||
registry.setCompanyId(securityId);
|
||||
return registry;
|
||||
}
|
||||
|
||||
protected Registry getRegistryD(String tradingClearingRegistry, Long securityId, String registryInstrumentType) {
|
||||
Registry registry = new Registry();
|
||||
registry.setTradingCode("1A12323");
|
||||
registry.setBalance(new BigDecimal("5.00"));
|
||||
registry.setTradingClearingRegistry(tradingClearingRegistry);
|
||||
registry.setRegistryDesignation(RegistryDesignation.D.getKey());
|
||||
registry.setRegistryInstrumentType(registryInstrumentType);
|
||||
registry.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry.setClearingCode(clearingCode(registry));
|
||||
registry.setClearingDate(currentDate);
|
||||
registry.setSecuritySymbol("RUB");
|
||||
registry.setSecurityId(securityId);
|
||||
registry.setTradingClearingRegistryId(securityId);
|
||||
registry.setCompanyId(securityId);
|
||||
registry.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
return registry;
|
||||
}
|
||||
|
||||
// see clearing-service RegistryUtil:
|
||||
public static String clearingCode(Registry ofRegistry) {
|
||||
return clearingCode(ofRegistry.getRegistryDesignation(), ofRegistry.getRegistryInstrumentType(), ofRegistry.getRegistryCapacity(), ofRegistry.getRegistryUnit());
|
||||
}
|
||||
|
||||
public static String clearingCode(String registryDesignation, String registryInstrumentType, String registryCapacity, String registryUnit) {
|
||||
if (!StringUtils.hasLength(registryDesignation)) registryDesignation = "-";
|
||||
if (!StringUtils.hasLength(registryInstrumentType)) registryInstrumentType = "-";
|
||||
if (!StringUtils.hasLength(registryCapacity)) registryCapacity = "-";
|
||||
if (!StringUtils.hasLength(registryUnit)) registryUnit = "-";
|
||||
return registryDesignation + registryInstrumentType + registryCapacity + registryUnit;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package ru.spcex.clearing.lim.exporter.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.lim.exporter.AbstractServiceTest;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
|
@ -27,12 +27,12 @@ class MoneyExporterServiceTest extends AbstractServiceTest {
|
|||
@Test
|
||||
void getLimFileRows() {
|
||||
clearAllInImdg(tradingClearingRegistryImdg);
|
||||
Registry registryA = getRegistryA(tcrA, securityIdFirst);
|
||||
Registry registryD = getRegistryD(tcrA, securityIdFirst);
|
||||
Registry registryA = getRegistryA(tcrA, securityIdFirst, RegistryInstrumentType.M.getKey());
|
||||
Registry registryD = getRegistryD(tcrA, securityIdFirst, RegistryInstrumentType.M.getKey());
|
||||
registryImdg.insert(registryA);
|
||||
registryImdg.insert(registryD);
|
||||
registryA = getRegistryA(tcrD, securityIdSecond);
|
||||
registryD = getRegistryD(tcrD, securityIdSecond);
|
||||
registryA = getRegistryA(tcrD, securityIdSecond, RegistryInstrumentType.M.getKey());
|
||||
registryD = getRegistryD(tcrD, securityIdSecond, RegistryInstrumentType.M.getKey());
|
||||
registryImdg.insert(registryA);
|
||||
registryImdg.insert(registryD);
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ class MoneyExporterServiceTest extends AbstractServiceTest {
|
|||
|
||||
TradingClearingRegistry tradingClearingRegistry = new TradingClearingRegistry();
|
||||
tradingClearingRegistry.setId(securityIdFirst);
|
||||
tradingClearingRegistry.setStatus("ACTV");
|
||||
tradingClearingRegistry.setStatus(ServiceStatus.Active.getKey());
|
||||
tradingClearingRegistryImdg.insert(tradingClearingRegistry);
|
||||
tradingClearingRegistry.setId(securityIdSecond);
|
||||
tradingClearingRegistryImdg.insert(tradingClearingRegistry);
|
||||
|
|
@ -51,51 +51,4 @@ class MoneyExporterServiceTest extends AbstractServiceTest {
|
|||
assertEquals(2, limFileRows.size());
|
||||
assertTrue(limFileRows.contains(moneyExporterService.getRow(registryA, registryD)));
|
||||
}
|
||||
|
||||
private Registry getRegistryA(String tradingClearingRegistry, Long securityId) {
|
||||
Registry registry = new Registry();
|
||||
registry.setTradingCode("1A12323");
|
||||
registry.setBalance(new BigDecimal("10.00"));
|
||||
registry.setTradingClearingRegistry(tradingClearingRegistry);
|
||||
registry.setRegistryDesignation("A");
|
||||
registry.setRegistryInstrumentType("M");
|
||||
registry.setRegistryUnit("F");
|
||||
registry.setClearingCode(clearingCode(registry));
|
||||
registry.setClearingDate(currentDate);
|
||||
registry.setSecuritySymbol("RUB");
|
||||
registry.setSecurityId(securityId);
|
||||
registry.setTradingClearingRegistryId(securityId);
|
||||
return registry;
|
||||
}
|
||||
|
||||
private Registry getRegistryD(String tradingClearingRegistry, Long securityId) {
|
||||
Registry registry = new Registry();
|
||||
registry.setTradingCode("1A12323");
|
||||
registry.setBalance(new BigDecimal("5.00"));
|
||||
registry.setTradingClearingRegistry(tradingClearingRegistry);
|
||||
registry.setRegistryDesignation("D");
|
||||
registry.setRegistryInstrumentType("M");
|
||||
registry.setRegistryUnit("T");
|
||||
registry.setClearingCode(clearingCode(registry));
|
||||
registry.setClearingDate(currentDate);
|
||||
registry.setSecuritySymbol("RUB");
|
||||
registry.setSecurityId(securityId);
|
||||
registry.setTradingClearingRegistryId(securityId);
|
||||
return registry;
|
||||
}
|
||||
|
||||
|
||||
// see clearing-service ReistryUtil:
|
||||
|
||||
public static String clearingCode(Registry ofRegistry) {
|
||||
return clearingCode(ofRegistry.getRegistryDesignation(), ofRegistry.getRegistryInstrumentType(), ofRegistry.getRegistryCapacity(), ofRegistry.getRegistryUnit());
|
||||
}
|
||||
|
||||
public static String clearingCode(String registryDesignation, String registryInstrumentType, String registryCapacity, String registryUnit) {
|
||||
if (StringUtils.isEmpty(registryDesignation)) registryDesignation = "-";
|
||||
if (StringUtils.isEmpty(registryInstrumentType)) registryInstrumentType = "-";
|
||||
if (StringUtils.isEmpty(registryCapacity)) registryCapacity = "-";
|
||||
if (StringUtils.isEmpty(registryUnit)) registryUnit = "-";
|
||||
return registryDesignation + registryInstrumentType + registryCapacity + registryUnit;
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test;
|
|||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.lim.exporter.AbstractServiceTest;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -11,7 +13,6 @@ import java.util.Collection;
|
|||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static ru.spcex.clearing.lim.exporter.services.MoneyExporterServiceTest.clearingCode;
|
||||
import static ru.spcex.clearing.test.TestUtils.clearAllInImdg;
|
||||
|
||||
class SecurityExporterServiceTest extends AbstractServiceTest {
|
||||
|
|
@ -27,14 +28,14 @@ class SecurityExporterServiceTest extends AbstractServiceTest {
|
|||
@Test
|
||||
void getLimFileRows() {
|
||||
clearAllInImdg(tradingClearingRegistryImdg);
|
||||
Registry registry1 = getRegistry(tcrA, securityIdFirst);
|
||||
Registry registry2 = getRegistry(tcrA, securityIdFirst);
|
||||
registryImdg.insert(registry1);
|
||||
registryImdg.insert(registry2);
|
||||
registry1 = getRegistry(tcrD, securityIdSecond);
|
||||
registry2 = getRegistry(tcrD, securityIdSecond);
|
||||
registryImdg.insert(registry1);
|
||||
registryImdg.insert(registry2);
|
||||
Registry registryA = getRegistryA(tcrA, securityIdFirst, RegistryInstrumentType.S.getKey());
|
||||
Registry registryD = getRegistryD(tcrA, securityIdFirst, RegistryInstrumentType.S.getKey());
|
||||
registryImdg.insert(registryA);
|
||||
registryImdg.insert(registryD);
|
||||
registryA = getRegistryA(tcrD, securityIdSecond, RegistryInstrumentType.S.getKey());
|
||||
registryD = getRegistryD(tcrD, securityIdSecond, RegistryInstrumentType.S.getKey());
|
||||
registryImdg.insert(registryA);
|
||||
registryImdg.insert(registryD);
|
||||
|
||||
SecurityExporterService securityExporterService = new SecurityExporterService(null, kafkaSender, imdgProvider);
|
||||
Collection<String> limFileRows = securityExporterService.getLimFileRows();
|
||||
|
|
@ -42,31 +43,13 @@ class SecurityExporterServiceTest extends AbstractServiceTest {
|
|||
|
||||
TradingClearingRegistry tradingClearingRegistry = new TradingClearingRegistry();
|
||||
tradingClearingRegistry.setId(securityIdFirst);
|
||||
tradingClearingRegistry.setStatus("ACTV");
|
||||
tradingClearingRegistry.setStatus(ServiceStatus.Active.getKey());
|
||||
tradingClearingRegistryImdg.insert(tradingClearingRegistry);
|
||||
tradingClearingRegistry.setId(securityIdSecond);
|
||||
tradingClearingRegistryImdg.insert(tradingClearingRegistry);
|
||||
|
||||
limFileRows = securityExporterService.getLimFileRows();
|
||||
assertEquals(4, limFileRows.size());
|
||||
assertTrue(limFileRows.contains(securityExporterService.getRow(registry1)));
|
||||
assertTrue(limFileRows.contains(securityExporterService.getRow(registry2)));
|
||||
|
||||
}
|
||||
|
||||
private Registry getRegistry(String tradingClearingRegistry, Long securityId) {
|
||||
Registry registry = new Registry();
|
||||
registry.setTradingCode("1A12323");
|
||||
registry.setBalance(new BigDecimal("10.00"));
|
||||
registry.setTradingClearingRegistry(tradingClearingRegistry);
|
||||
registry.setRegistryDesignation("A");
|
||||
registry.setRegistryInstrumentType("S");
|
||||
registry.setRegistryUnit("T");
|
||||
registry.setClearingCode(clearingCode(registry));
|
||||
registry.setClearingDate(currentDate);
|
||||
registry.setSecuritySymbol("RUB");
|
||||
registry.setSecurityId(securityId);
|
||||
registry.setTradingClearingRegistryId(securityId);
|
||||
return registry;
|
||||
assertEquals(2, limFileRows.size());
|
||||
assertTrue(limFileRows.contains(securityExporterService.getRow(registryA, new BigDecimal("5.00"))));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue