Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
d9c46c3ec5
5 changed files with 127 additions and 28 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<>();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue