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

This commit is contained in:
ialbert 2024-10-11 15:46:20 +03:00
commit d9c46c3ec5
5 changed files with 127 additions and 28 deletions

View file

@ -342,7 +342,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
infoCounter = new AtomicLong(1);
log.debug("No account information on map. n={}", infoCounter.get());
} else {
Pattern accPattern = Pattern.compile("39911%s([0-9]{8})7000".formatted(idWithTrailingZero));
Pattern accPattern = Pattern.compile("39911%s([0-9]{8})\\d{4}".formatted(idWithTrailingZero));
int maxN = 1;
int parsedCount = 0;
String lastAccount = null; // for debug

View file

@ -25,7 +25,7 @@ public class JsConfigController {
@ApiOperation(value = "get js config.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(path = "/spcex.config.js", method = RequestMethod.GET)
@RequestMapping(path = "/spcexConfig.js", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> getJsConfig() {
Map<String, Object> result = new HashMap<>();

View file

@ -22,3 +22,5 @@ clearing-service.kafka-producer.buffer-memory=33554432
clearing-service.session-stage.inspection-gateway-timeout=60
clearing-service.scheduler.check-payment-instruction=*/5 * * * * *
clearing-service.balance-check-omt=false

View file

@ -4,7 +4,10 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -69,40 +72,85 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder<EmptyParams, KS
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(
pb.and(
registryPredicate,
pb.equals("settlementDate", now)
pb.or(
pb.equals("settlementDate", now),
pb.equals("settlementDate", now.plusDays(1))
)
)
);
for (Registry registry : registries) {
Map<SecuritySymbolSettlementDateTKR, List<Registry>> groupedRegistries = registries.stream()
.collect(
Collectors.groupingBy(
registry -> new SecuritySymbolSettlementDateTKR(
registry.getSecuritySymbol(),
registry.getSettlementDate(),
registry.getTradingClearingRegistry()
),
HashMap::new,
Collectors.toList()
)
);
for (Map.Entry<SecuritySymbolSettlementDateTKR, List<Registry>> entry : groupedRegistries.entrySet()) {
SecuritySymbolSettlementDateTKR securitySymbolSettlementDateTKR = entry.getKey();
List<Registry> registriesForTKR = entry.getValue();
Registry sampleRegistry = registriesForTKR.iterator().next();
for (Registry registry : registriesForTKR) {
if (!sampleRegistry.getTradingCode().equalsIgnoreCase(registry.getTradingCode())) {
log.warn(
"For group registries (security_symbol: {}, settlement_date: {}, tkr: {}) " +
"found registry with another trading_code (expected: {}, actual: {}). Use {} for report",
sampleRegistry.getSecuritySymbol(),
sampleRegistry.getSettlementDate(),
sampleRegistry.getTradingClearingRegistry(),
sampleRegistry.getTradingCode(),
registry.getTradingCode(),
sampleRegistry.getTradingCode()
);
}
}
for (DataTypes dataType : DataTypes.values()) {
KSRepLccNettoReport ksRepLccNettoReport = new KSRepLccNettoReport();
ksRepLccNettoReport.setFirmId(registry.getTradingCode());
ksRepLccNettoReport.setTkr(registry.getTradingClearingRegistry());
ksRepLccNettoReport.setCurrencyId(registry.getSecuritySymbol());
ksRepLccNettoReport.setDate(now);
RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
RegistryDesignation designation = IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation());
ksRepLccNettoReport.setFirmId(sampleRegistry.getTradingCode());
ksRepLccNettoReport.setTkr(sampleRegistry.getTradingClearingRegistry());
ksRepLccNettoReport.setCurrencyId(sampleRegistry.getSecuritySymbol());
ksRepLccNettoReport.setDate(securitySymbolSettlementDateTKR.settlementDate);
BigDecimal debit = BigDecimal.ZERO;
BigDecimal credit = BigDecimal.ZERO;
if (dataType == DataTypes.FX_OBLIG) {
if (status == RegistryStatus.PROC || status == RegistryStatus.MNG) {
if (designation == RegistryDesignation.O)
debit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO;
if (designation == RegistryDesignation.T)
credit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO;
}
} else if (dataType == DataTypes.PR_NETTOSUM) {
if (status == RegistryStatus.CLRD) {
if (designation == RegistryDesignation.O)
debit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO;
if (designation == RegistryDesignation.T)
credit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO;
}
} else if (dataType == DataTypes.FX_DEBT) {
if (designation == RegistryDesignation.A) {
if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
debit = registry.getBalance();
for (Registry registry : registriesForTKR) {
RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
RegistryDesignation designation = IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation());
if (dataType == DataTypes.FX_OBLIG) {
if (status == RegistryStatus.PROC || status == RegistryStatus.MNG) {
if (designation == RegistryDesignation.O) {
debit = debit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO);
}
if (designation == RegistryDesignation.T) {
credit = credit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO);
}
}
} else if (dataType == DataTypes.PR_NETTOSUM) {
if (!registry.getSettlementDate().equals(now)) continue;
if (status == RegistryStatus.CLRD) {
if (designation == RegistryDesignation.O) {
debit = debit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO);
}
if (designation == RegistryDesignation.T) {
credit = credit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO);
}
}
} else if (dataType == DataTypes.FX_DEBT) {
if (!registry.getSettlementDate().equals(now)) continue;
if (designation == RegistryDesignation.A) {
if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) < 0) {
debit = debit.add(registry.getBalance());
}
}
}
}
if (!ksRepLccNettoReport.getDate().equals(now) && dataType != DataTypes.FX_OBLIG) continue;
ksRepLccNettoReport.setDataType(dataType.value);
ksRepLccNettoReport.setDebit(debit);
ksRepLccNettoReport.setCredit(credit);
@ -123,4 +171,51 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder<EmptyParams, KS
this.value = value;
}
}
private static class SecuritySymbolSettlementDateTKR {
private final String securitySymbol;
private final LocalDate settlementDate;
private final String tradingClearingRegistry;
private SecuritySymbolSettlementDateTKR(String securitySymbol, LocalDate settlementDate, String tradingClearingRegistry) {
this.securitySymbol = securitySymbol;
this.settlementDate = settlementDate;
this.tradingClearingRegistry = tradingClearingRegistry;
}
public String getSecuritySymbol() {
return securitySymbol;
}
public LocalDate getSettlementDate() {
return settlementDate;
}
public String getTradingClearingRegistry() {
return tradingClearingRegistry;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SecuritySymbolSettlementDateTKR that = (SecuritySymbolSettlementDateTKR) o;
if (getSecuritySymbol() != null ? !getSecuritySymbol().equals(that.getSecuritySymbol()) : that.getSecuritySymbol() != null)
return false;
if (getSettlementDate() != null ? !getSettlementDate().equals(that.getSettlementDate()) : that.getSettlementDate() != null)
return false;
return getTradingClearingRegistry() != null ? getTradingClearingRegistry().equals(that.getTradingClearingRegistry()) : that.getTradingClearingRegistry() == null;
}
@Override
public int hashCode() {
int result = getSecuritySymbol() != null ? getSecuritySymbol().hashCode() : 0;
result = 31 * result + (getSettlementDate() != null ? getSettlementDate().hashCode() : 0);
result = 31 * result + (getTradingClearingRegistry() != null ? getTradingClearingRegistry().hashCode() : 0);
return result;
}
}
}

View file

@ -261,6 +261,8 @@ public class TradeImporterService {
sTrades.setSettleCurrency(resultSet.getObject("SettleCurrency", String.class));
sTrades.setTradeTimeMs(resultSet.getObject("TradeTimeMs", Long.class));
sTrades.setBankAccId(resultSet.getObject("BankAccId", String.class));
sTrades.setKind(resultSet.getObject("Kind", String.class));
sTrades.setLinkedTrade(resultSet.getObject("LinkedTrade", Long.class));
return sTrades;
}