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

This commit is contained in:
ialbert 2023-05-18 13:47:31 +03:00
commit c8725ae10f
105 changed files with 3855 additions and 1614 deletions

View file

@ -0,0 +1,191 @@
package ru.clearing.classes.statics.data.execution;
import ru.clearing.classes.objects.BusinessObject;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
public abstract class ExecutionCommon extends BusinessObject {
protected Long exchangeExecutionId;
protected Instant exchangeExecutionTime;
protected LocalDate tradingDate;
protected Long tradingClearingRegistryId;
protected String market;
protected BigDecimal price;
protected BigDecimal lots;
protected BigDecimal quantity;
protected BigDecimal interestAmount;
protected String side;
protected String settlementCurrency;
protected Long companyId;
protected Long duration;
protected String securityFullName;
protected String securitySymbol;
protected Long securityId;
protected Long counterPartyId;
protected String coverageStatus;
protected Long sessionId;
protected LocalDate clearingDate;
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}
public Long getExchangeExecutionId() {
return exchangeExecutionId;
}
public void setExchangeExecutionId(Long value) {
this.exchangeExecutionId = value;
}
public String getSide() {
return side;
}
public void setSide(String value) {
this.side = value;
}
public String getMarket() {
return market;
}
public void setMarket(String value) {
this.market = value;
}
public LocalDate getTradingDate() {
return tradingDate;
}
public void setTradingDate(LocalDate value) {
this.tradingDate = value;
}
public String getSecuritySymbol() {
return securitySymbol;
}
public void setSecuritySymbol(String value) {
this.securitySymbol = value;
}
public Long getSecurityId() {
return securityId;
}
public void setSecurityId(Long value) {
this.securityId = value;
}
public BigDecimal getInterestAmount() {
return interestAmount;
}
public void setInterestAmount(BigDecimal value) {
this.interestAmount = value;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal value) {
this.price = value;
}
public BigDecimal getLots() {
return lots;
}
public void setLots(BigDecimal value) {
this.lots = value;
}
public BigDecimal getQuantity() {
return quantity;
}
public void setQuantity(BigDecimal value) {
this.quantity = value;
}
public Instant getExchangeExecutionTime() {
return exchangeExecutionTime;
}
public void setExchangeExecutionTime(Instant value) {
this.exchangeExecutionTime = value;
}
public Long getDuration() {
return duration;
}
public void setDuration(Long value) {
this.duration = value;
}
public Long getTradingClearingRegistryId() {
return tradingClearingRegistryId;
}
public void setTradingClearingRegistryId(Long value) {
this.tradingClearingRegistryId = value;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long value) {
this.companyId = value;
}
public Long getCounterPartyId() {
return counterPartyId;
}
public void setCounterPartyId(Long value) {
this.counterPartyId = value;
}
public String getSecurityFullName() {
return securityFullName;
}
public void setSecurityFullName(String value) {
this.securityFullName = value;
}
public String getSettlementCurrency() {
return settlementCurrency;
}
public void setSettlementCurrency(String value) {
this.settlementCurrency = value;
}
public String getCoverageStatus() {
return coverageStatus;
}
public void setCoverageStatus(String value) {
this.coverageStatus = value;
}
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long value) {
this.sessionId = value;
}
}

View file

@ -1,104 +1,20 @@
package ru.clearing.classes.statics.data.execution;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.interfaces.IExecution;
import ru.clearing.classes.ConstSerializable;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
public class ExecutionDeposit extends BusinessObject implements IExecution {
private Long exchangeExecutionId;
private Instant exchangeExecutionTime;
private LocalDate tradingDate;
private Long tradingClearingRegistryId;
private String market;
private BigDecimal price;
private BigDecimal lots;
private BigDecimal quantity;
public class ExecutionDeposit extends ExecutionCommon {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private BigDecimal firstLegAmount;
private BigDecimal secondLegAmount;
private BigDecimal interestAmount;
private String side;
private String settlementCurrency;
private Long companyId;
private Long duration;
private LocalDate firstLegSettlementDate;
private LocalDate secondLegSettlementDate;
private String firstLegSettlementCode;
private String secondLegSettlementCode;
private String securityFullName;
private String securitySymbol;
private Long securityId;
private String contract;
private Long counterPartyId;
private String coverageStatus;
private Long sessionId;
private LocalDate clearingDate;
public Long getExchangeExecutionId() {
return exchangeExecutionId;
}
public void setExchangeExecutionId(Long exchangeExecutionId) {
this.exchangeExecutionId = exchangeExecutionId;
}
public Instant getExchangeExecutionTime() {
return exchangeExecutionTime;
}
public void setExchangeExecutionTime(Instant exchangeExecutionTime) {
this.exchangeExecutionTime = exchangeExecutionTime;
}
public LocalDate getTradingDate() {
return tradingDate;
}
public void setTradingDate(LocalDate tradingDate) {
this.tradingDate = tradingDate;
}
public Long getTradingClearingRegistryId() {
return tradingClearingRegistryId;
}
public void setTradingClearingRegistryId(Long tradingClearingRegistryId) {
this.tradingClearingRegistryId = tradingClearingRegistryId;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public BigDecimal getLots() {
return lots;
}
public void setLots(BigDecimal lots) {
this.lots = lots;
}
public BigDecimal getQuantity() {
return quantity;
}
public void setQuantity(BigDecimal quantity) {
this.quantity = quantity;
}
public BigDecimal getFirstLegAmount() {
return firstLegAmount;
@ -116,46 +32,6 @@ public class ExecutionDeposit extends BusinessObject implements IExecution {
this.secondLegAmount = secondLegAmount;
}
public BigDecimal getInterestAmount() {
return interestAmount;
}
public void setInterestAmount(BigDecimal interestAmount) {
this.interestAmount = interestAmount;
}
public String getSide() {
return side;
}
public void setSide(String side) {
this.side = side;
}
public String getSettlementCurrency() {
return settlementCurrency;
}
public void setSettlementCurrency(String settlementCurrency) {
this.settlementCurrency = settlementCurrency;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public Long getDuration() {
return duration;
}
public void setDuration(Long duration) {
this.duration = duration;
}
public LocalDate getFirstLegSettlementDate() {
return firstLegSettlementDate;
}
@ -188,30 +64,6 @@ public class ExecutionDeposit extends BusinessObject implements IExecution {
this.secondLegSettlementCode = secondLegSettlementCode;
}
public String getSecurityFullName() {
return securityFullName;
}
public void setSecurityFullName(String securityFullName) {
this.securityFullName = securityFullName;
}
public String getSecuritySymbol() {
return securitySymbol;
}
public void setSecuritySymbol(String securitySymbol) {
this.securitySymbol = securitySymbol;
}
public Long getSecurityId() {
return securityId;
}
public void setSecurityId(Long securityId) {
this.securityId = securityId;
}
public String getContract() {
return contract;
}
@ -219,36 +71,4 @@ public class ExecutionDeposit extends BusinessObject implements IExecution {
public void setContract(String contract) {
this.contract = contract;
}
public Long getCounterPartyId() {
return counterPartyId;
}
public void setCounterPartyId(Long counterPartyId) {
this.counterPartyId = counterPartyId;
}
public String getCoverageStatus() {
return coverageStatus;
}
public void setCoverageStatus(String coverageStatus) {
this.coverageStatus = coverageStatus;
}
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
}

View file

@ -2,7 +2,6 @@ package ru.clearing.classes.statics.data.execution;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.interfaces.IExecution;
import java.math.BigDecimal;
import java.time.Instant;
@ -13,252 +12,70 @@ import java.time.LocalDate;
* <p>
* DB table: EXECUTION_FOND
**/
public class ExecutionFond extends BusinessObject implements IExecution {
public class ExecutionFond extends ExecutionCommon {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private LocalDate clearingDate;
private Long exchangeExecutionId;
private String side;
private String market;
private LocalDate tradingDate;
private String securitySymbol;
private Long securityId;
private BigDecimal interestAmount;
private Long exchangeOrderId;
private BigDecimal price;
private BigDecimal settlementAmount;
private BigDecimal lots;
private BigDecimal quantity;
private Instant exchangeExecutionTime;
private Long duration;
private Long tradingClearingRegistryId;
private String comment;
private Long clientCodeId;
private String settlementCode;
private Long companyId;
private Long counterPartyId;
private String securityFullName;
private LocalDate settlementDate;
private String settlementCurrency;
private Instant exchangeExecutionMicroseconds;
private String coverageStatus;
private Long sessionId;
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}
public Long getExchangeExecutionId() {
return exchangeExecutionId;
}
public void setExchangeExecutionId(Long value) {
this.exchangeExecutionId = value;
}
public String getSide() {
return side;
}
public void setSide(String value) {
this.side = value;
}
public String getMarket() {
return market;
}
public void setMarket(String value) {
this.market = value;
}
public LocalDate getTradingDate() {
return tradingDate;
}
public void setTradingDate(LocalDate value) {
this.tradingDate = value;
}
public String getSecuritySymbol() {
return securitySymbol;
}
public void setSecuritySymbol(String value) {
this.securitySymbol = value;
}
public Long getSecurityId() {
return securityId;
}
public void setSecurityId(Long value) {
this.securityId = value;
}
public BigDecimal getInterestAmount() {
return interestAmount;
}
public void setInterestAmount(BigDecimal value) {
this.interestAmount = value;
}
public Long getExchangeOrderId() {
return exchangeOrderId;
}
public void setExchangeOrderId(Long value) {
this.exchangeOrderId = value;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal value) {
this.price = value;
public void setExchangeOrderId(Long exchangeOrderId) {
this.exchangeOrderId = exchangeOrderId;
}
public BigDecimal getSettlementAmount() {
return settlementAmount;
}
public void setSettlementAmount(BigDecimal value) {
this.settlementAmount = value;
}
public BigDecimal getLots() {
return lots;
}
public void setLots(BigDecimal value) {
this.lots = value;
}
public BigDecimal getQuantity() {
return quantity;
}
public void setQuantity(BigDecimal value) {
this.quantity = value;
}
public Instant getExchangeExecutionTime() {
return exchangeExecutionTime;
}
public void setExchangeExecutionTime(Instant value) {
this.exchangeExecutionTime = value;
}
public Long getDuration() {
return duration;
}
public void setDuration(Long value) {
this.duration = value;
}
public Long getTradingClearingRegistryId() {
return tradingClearingRegistryId;
}
public void setTradingClearingRegistryId(Long value) {
this.tradingClearingRegistryId = value;
public void setSettlementAmount(BigDecimal settlementAmount) {
this.settlementAmount = settlementAmount;
}
public String getComment() {
return comment;
}
public void setComment(String value) {
this.comment = value;
public void setComment(String comment) {
this.comment = comment;
}
public Long getClientCodeId() {
return clientCodeId;
}
public void setClientCodeId(Long value) {
this.clientCodeId = value;
public void setClientCodeId(Long clientCodeId) {
this.clientCodeId = clientCodeId;
}
public String getSettlementCode() {
return settlementCode;
}
public void setSettlementCode(String value) {
this.settlementCode = value;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long value) {
this.companyId = value;
}
public Long getCounterPartyId() {
return counterPartyId;
}
public void setCounterPartyId(Long value) {
this.counterPartyId = value;
}
public String getSecurityFullName() {
return securityFullName;
}
public void setSecurityFullName(String value) {
this.securityFullName = value;
public void setSettlementCode(String settlementCode) {
this.settlementCode = settlementCode;
}
public LocalDate getSettlementDate() {
return settlementDate;
}
public void setSettlementDate(LocalDate value) {
this.settlementDate = value;
}
public String getSettlementCurrency() {
return settlementCurrency;
}
public void setSettlementCurrency(String value) {
this.settlementCurrency = value;
public void setSettlementDate(LocalDate settlementDate) {
this.settlementDate = settlementDate;
}
public Instant getExchangeExecutionMicroseconds() {
return exchangeExecutionMicroseconds;
}
public void setExchangeExecutionMicroseconds(Instant value) {
this.exchangeExecutionMicroseconds = value;
public void setExchangeExecutionMicroseconds(Instant exchangeExecutionMicroseconds) {
this.exchangeExecutionMicroseconds = exchangeExecutionMicroseconds;
}
public String getCoverageStatus() {
return coverageStatus;
}
public void setCoverageStatus(String value) {
this.coverageStatus = value;
}
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long value) {
this.sessionId = value;
}
}

View file

@ -40,17 +40,27 @@
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<!-- XML -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.19</version>
</dependency>
<!-- DOC -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.1.0</version>
</dependency>
<!-- CSV -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.2</version>
</dependency>
<!-- IMDG clearing system -->
<dependency>
<groupId>ru.spcex.clearing</groupId>
@ -83,6 +93,24 @@
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>security-util</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>clearing-validation</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>test-clearing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>

View file

@ -1,8 +1,5 @@
package ru.spcex.clearing.reports;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -10,11 +7,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import ru.spcex.clearing.reports.config.ReportCmdParser;
import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT;
import ru.spcex.clearing.reports.services.QCommandExecutor;
import ru.spcex.clearing.reports.services.ReportsServiceCommand;
import ru.spcex.clearing.reports.services.collector.ReportINACCNT_Collector;
import ru.spcex.platform.imdg.api.ImdgProvider;
@SpringBootApplication
public class ReportsServiceApplication {

View file

@ -0,0 +1,33 @@
package ru.spcex.clearing.reports.config;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import ru.spcex.clearing.reports.errors.ReportError;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.util.services.IMDGMessageResolver;
import ru.spcex.clearing.util.services.RequestHelper;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
@Configuration
public class BeanConfiguration {
@Bean
public IMessageResolver messageResolver(ImdgProvider imdgProvider) {
return new IMDGMessageResolver(imdgProvider);
}
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) {
return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ReportError.UserVerifyDenial);
}
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RequestHelper requestHelper(IMessageResolver messageResolver) {
return new RequestHelper(messageResolver, ReportError.InternalError);
}
}

View file

@ -0,0 +1,54 @@
package ru.spcex.clearing.reports.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.reports.reports.*;
import ru.spcex.clearing.reports.reports.bp.*;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Configuration
public class ReportBuildersConfig {
@Bean("reportBuildersWithoutParams")
public Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams(ImdgProvider imdgProvider) {
Map<ReportType, List<CSVReportBuilder<EmptyParams>>> resultMap = new HashMap<>();
resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(new SummaryLiabilitiesClaimsReportBuilder(imdgProvider)));
resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(new SummaryMoneyChangeReportBuilder(imdgProvider)));
return resultMap;
}
@Bean("reportBuildersWithSessionIdParam")
public Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) {
Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> resultMap = new HashMap<>();
resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(new OperationalLiabilitiesClaimsReportBuilder(imdgProvider)));
resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(new OperationalMoneyChangeReportBuilder(imdgProvider)));
resultMap.put(ReportType.EXECUTED_DEAL_REPORT,
List.of(
new ExecutedDealReportBuilder_INFTYPE_1(imdgProvider),
new ExecutedDealReportBuilder_INFTYPE_2(imdgProvider),
new ExecutedDealReportBuilder_INFTYPE_3(imdgProvider),
new ExecutedDealReportBuilder_INFTYPE_4(imdgProvider)
)
);
resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(new UnfulfilledDealReportBuilder(imdgProvider)));
return resultMap;
}
@Bean("reportBuildersWithSessionIdListParam")
public Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) {
Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> resultMap = new HashMap<>();
resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)));
return resultMap;
}
@Bean("reportBuildersWithPeriodParams")
public Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) {
Map<ReportType, List<CSVReportBuilder<PeriodParams>>> resultMap = new HashMap<>();
resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(new PeriodMoneyChangeReportBuilder(imdgProvider)));
return resultMap;
}
}

View file

@ -18,7 +18,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
public class ReportsServiceSettings {
private HazelcastClientParams hazelcast;
private KafkaConsumerSettings kafkaConsumer;
// private KafkaProducerSettings kafkaProducer;
private KafkaProducerSettings kafkaProducer;
private String reportModuleOut;
public HazelcastClientParams getHazelcast() {
@ -37,13 +37,13 @@ public class ReportsServiceSettings {
this.kafkaConsumer = kafkaConsumer;
}
// public KafkaProducerSettings getKafkaProducer() {
// return kafkaProducer;
// }
//
// public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
// this.kafkaProducer = kafkaProducer;
// }
public KafkaProducerSettings getKafkaProducer() {
return kafkaProducer;
}
public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
this.kafkaProducer = kafkaProducer;
}
public String getReportModuleOut() {
return reportModuleOut;

View file

@ -0,0 +1,149 @@
package ru.spcex.clearing.reports.config.validation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.reports.errors.ReportError;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.clearing.validation.common.rules.EndDtAfterStartDtRule;
import ru.spcex.clearing.validation.common.rules.EnumPresentRule;
import ru.spcex.clearing.validation.common.rules.FieldRequiredRule;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.validation.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;
@Configuration
public class ValidationConfig {
@Bean("imdgForValidation")
public Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation(ImdgProvider imdgProvider) {
final Map<String, Imdg<? extends SpcexObjectBase>> imdg = new HashMap<>();
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass));
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
return imdg;
}
@Bean("validationHelper")
public ValidationHelper validationHelper(IMessageResolver messageResolver) {
return new ValidationHelper(messageResolver);
}
@Bean("reportRequestValidator")
public Function<ReportRequest, IValidator> reportRequestValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequest -> {
ImdgValidationContext<ReportRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequest);
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequest::getReportId,
new IEnumKey[]{
ReportType.SUMMARY_LIABILITIES_CLAIMS,
ReportType.SUMMARY_MONEY_CHANGE
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty)
);
};
}
@Bean("reportRequestWithSessionIdValidator")
public Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequestWithSessionId -> {
ImdgValidationContext<ReportRequestWithSessionId> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequestWithSessionId);
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequestWithSessionId::getReportId,
new IEnumKey[]{
ReportType.OPERATIONAL_LIABILITIES_CLAIMS,
ReportType.OPERATIONAL_MONEY_CHANGE,
ReportType.EXECUTED_DEAL_REPORT,
ReportType.UNFULFILLED_DEAL_REPORT
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty),
FieldRequiredRule.instance("sessionId",
ReportRequestWithSessionId::getSessionId,
ReportError.RequiredFieldEmpty,
sessionId -> sessionId > 0 ? null : ReportError.WrongFieldValue)
);
};
}
@Bean("reportRequestWithSessionIdListValidator")
public Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequestWithSessionIdList -> {
ImdgValidationContext<ReportRequestWithSessionIdList> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequestWithSessionIdList);
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequestWithSessionIdList::getReportId,
new IEnumKey[]{
ReportType.PERIOD_LIABILITIES_CLAIMS
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty),
FieldRequiredRule.instance("sessionIdList",
ReportRequestWithSessionIdList::getSessionIdList,
ReportError.RequiredFieldEmpty,
sessionIdList -> {
if (sessionIdList == null || sessionIdList.isEmpty())
return ReportError.WrongFieldValue;
return null;
})
);
};
}
@Bean("reportRequestWithPeriodValidator")
public Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequestWithPeriod -> {
ImdgValidationContext<ReportRequestWithPeriod> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequestWithPeriod);
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequestWithPeriod::getReportId,
new IEnumKey[]{
ReportType.PERIOD_MONEY_CHANGE,
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty),
EndDtAfterStartDtRule.instance("endDate", "startDate",
ReportRequestWithPeriod::getEndDate,
ReportRequestWithPeriod::getStartDate,
ReportError.RequiredFieldEmpty,
ReportError.WrongFieldValue)
);
};
}
}

View file

@ -0,0 +1,22 @@
package ru.spcex.clearing.reports.errors;
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
public enum ReportError implements IErrorEnumId {
InternalError(4000L),
UserVerifyDenial(4001L),
RequiredFieldEmpty(4002L),
WrongFieldValue(4004L),
;
private final Long id;
ReportError(Long id) {
this.id = id;
}
@Override
public Long getId() {
return id;
}
}

View file

@ -10,6 +10,7 @@ import java.time.format.DateTimeFormatter;
/**
* Общая шапка (атрибуты) для всех отчетов
*/
@Deprecated
public abstract class AbstractReport {
protected static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
protected static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss");

View file

@ -0,0 +1,114 @@
package ru.spcex.clearing.reports.reports;
import com.opencsv.CSVWriterBuilder;
import com.opencsv.ICSVWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.platform.enumeration.ReportType;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
* Класс для построения отчетов в формате CSV
*
* @param <P> тип параметров, используемых при построении отчета
*/
public abstract class CSVReportBuilder<P> {
protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder.class);
protected DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
protected DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss");
protected DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
/**
* Метод получения заголовков для CSV отчета
*/
protected abstract String[] getHeaders();
/**
* Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец.
*/
protected abstract List<String[]> getLines();
/**
* Название отчета, используется для формирования имени отчета (без указания формата)
*
* @param params Параметры формирования отчета
*/
protected abstract String getReportFilename(P params);
/**
* Тип отчета по {@link ReportType}
*/
public abstract ReportType getReportType();
/**
* Формирование отчета на основе параметров
*
* @param params Параметры формирования отчета
*/
protected abstract void collect(P params);
/**
* Создает CSVWriter. Если требуется изменить параметры выходного CSV файла, этот метод следует переопределить.
*
* @param file Файл отчета
* @return Созданный CSVWriter
*
* todo check it
*/
protected ICSVWriter createCsvWriter(File file) throws IOException {
Writer writer = new FileWriter(file);
CSVWriterBuilder csvWriterBuilder = new CSVWriterBuilder(writer)
.withLineEnd("\n")
.withSeparator(',')
.withQuoteChar('\"');
return csvWriterBuilder.build();
}
public File createReport(P params, File outFolder) {
assert outFolder != null && outFolder.isDirectory();
File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv"));
collect(params);
String[] headers = getHeaders();
List<String[]> lines = getLines();
assert headers != null;
assert lines != null;
try (ICSVWriter csvWriter = createCsvWriter(reportFile)) {
csvWriter.writeNext(headers, false);
csvWriter.writeAll(lines, true);
} catch (IOException e) {
log.error("Can't create report", e);
return null;
}
return reportFile;
}
protected String normalizeFilenameForOS(String filename) {
if (System.getProperty("os.name").toLowerCase().contains("windows"))
return filename.replace(":", "_");
return filename;
}
public void setDateFormatter(DateTimeFormatter dateFormatter) {
this.dateFormatter = dateFormatter;
}
public void setDateTimeFormatter(DateTimeFormatter dateTimeFormatter) {
this.dateTimeFormatter = dateTimeFormatter;
}
public void setTimeFormatter(DateTimeFormatter timeFormatter) {
this.timeFormatter = timeFormatter;
}
}

View file

@ -0,0 +1,7 @@
package ru.spcex.clearing.reports.reports;
/**
* Класс для формирования отчета без параметров
*/
public class EmptyParams {
}

View file

@ -0,0 +1,27 @@
package ru.spcex.clearing.reports.reports;
import java.time.LocalDate;
/**
* Параметры для формирования отчета на период
*/
public class PeriodParams {
private LocalDate startDate;
private LocalDate endDate;
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}
}

View file

@ -5,6 +5,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
/**
* Идентификаторы отчётов
*/
@Deprecated
public enum ReportId implements IEnumKey {
PA_B("REPPA.B"), PA_IV("REPPA.IV"),
@ -22,8 +23,18 @@ public enum ReportId implements IEnumKey {
BR_0420312_P1("REPBR.0420312_р1-1"), BR_0420312_P2("REPBR.0420312_р1-2"), BR_0420312_P3("REPBR.0420312_р1-3"), BR_0420312_P4("REPBR.0420312_р1-4"),
BR_0420312_P5("REPBR.0420312_р1-5"), BR_0420312_P6("REPBR.0420312_р1-6"), BR_0420312_P7("REPBR.0420312_р1-7"), BR_0420312_P8("REPBR.0420312_р3-1"),
BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3");
BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3"),
OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
OPERATIONAL_MONEY_CHANGE("operational_money_change"),
SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"),
SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"),
PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"),
PERIOD_MONEY_CHANGE("period_money_change"),
EXECUTED_DEAL_REPORT("executed_deal_report"),
UNFULFILLED_DEAL_REPORT("unfulfilled_deal_report"),
;
private final String key;

View file

@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import java.time.LocalDate;
@Deprecated
public abstract class ReportWithClearingStatus extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("clearingStatus")

View file

@ -2,24 +2,23 @@ package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import java.time.LocalDate;
/**
* Шапка для отчётов, содержащих startDate и endDate
*/
@Deprecated
public abstract class ReportWithPeriod extends AbstractReport {
@XStreamAsAttribute
@XStreamAlias("startDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
protected LocalDate startDate;
@XStreamAsAttribute
@XStreamAlias("endDate")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
protected LocalDate endDate;

View file

@ -0,0 +1,18 @@
package ru.spcex.clearing.reports.reports;
import java.util.List;
/**
* Параметры для формирования отчета по списку SessionId
*/
public class SessionIdListParams {
private List<Long> sessionIdList;
public List<Long> getSessionIdList() {
return sessionIdList;
}
public void setSessionIdList(List<Long> sessionIdList) {
this.sessionIdList = sessionIdList;
}
}

View file

@ -0,0 +1,16 @@
package ru.spcex.clearing.reports.reports;
/**
* Параметры для формирования отчета по SessionId
*/
public class SessionIdParam {
private Long sessionId;
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
}

View file

@ -0,0 +1,99 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilder<T> {
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
protected final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
private final String[] headers = {
"id", "securityId", "tradeNo", "tradeDate", "tradeTime",
"settleDate", "settleCode", "price", "quanity", "value"
};
private List<String[]> lines = null;
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
}
@Override
public String[] getHeaders() {
return headers;
}
@Override
protected List<String[]> getLines() {
return lines;
}
@Override
public ReportType getReportType() {
return ReportType.EXECUTED_DEAL_REPORT;
}
protected abstract Collection<ExecutionFond> getExecutionFondsForReport(T params);
@Override
protected void collect(T params) {
Collection<ExecutionFond> executionFonds = getExecutionFondsForReport(params);
lines = new ArrayList<>(executionFonds.size());
for (ExecutionFond executionFond : executionFonds) {
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
STrades sTrade = sTradesImdg.getSingleObjectByFieldValues(
Map.of(
"tradeNum", executionFond.getExchangeExecutionId(),
"operation", executionFond.getSide()
)
);
String id = String.valueOf(executionFond.getId());
String securityId = String.valueOf(executionFond.getSecurityId());
String tradeNo = String.valueOf(executionFond.getExchangeExecutionId());
String tradeDate = dateFormatter.format(executionFond.getTradingDate());
String tradeTime = dateFormatter.format(LocalDate.ofInstant(executionFond.getCreated(), ZoneId.systemDefault()));
String settleDate = dateFormatter.format(executionFond.getSettlementDate());
String settleCode = sTrade != null ? sTrade.getSettleCode() : "";
String quantity = String.valueOf(executionFond.getQuantity());
String value = String.valueOf(executionFond.getSettlementAmount());
String price = String.valueOf(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP));
int valueIdx = 0;
String[] line = new String[getHeaders().length];
line[valueIdx++] = id;
line[valueIdx++] = securityId;
line[valueIdx++] = tradeNo;
line[valueIdx++] = tradeDate;
line[valueIdx++] = tradeTime;
line[valueIdx++] = settleDate;
line[valueIdx++] = settleCode;
line[valueIdx++] = price;
line[valueIdx++] = quantity;
line[valueIdx++] = value;
lines.add(line);
}
}
}

View file

@ -0,0 +1,34 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collection;
public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "KS_BR_PFX64_INFTYPE_1_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
return executionFondImdg.getCollectionObjectsByPredicate(
pb.and(
pb.equals("sessionId", params.getSessionId()),
pb.less("tradingDate", LocalDate.now()),
pb.equals("settlementDate", LocalDate.now())
)
);
}
}

View file

@ -0,0 +1,34 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collection;
public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "KS_BR_PFX64_INFTYPE_2_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
return executionFondImdg.getCollectionObjectsByPredicate(
pb.and(
pb.equals("sessionId", params.getSessionId()),
pb.equals("tradingDate", LocalDate.now()),
pb.equals("settlementDate", LocalDate.now())
)
);
}
}

View file

@ -0,0 +1,28 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collection;
public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "KS_BR_PFX64_INFTYPE_3_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
return executionFondImdg.getCollectionObjectsByPredicate(pb.greater("settlementDate", LocalDate.now()));
}
}

View file

@ -0,0 +1,34 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.Allowed;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collection;
public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "KS_BR_PFX64_INFTYPE_4_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
return executionFondImdg.getCollectionObjectsByPredicate(
pb.and(
pb.equals("coverageStatus", Allowed.DENIED.getKey()),
pb.equals("settlementDate", LocalDate.now())
)
);
}
}

View file

@ -0,0 +1,257 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
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.reports.reports.CSVReportBuilder;
import ru.spcex.platform.enumeration.Allowed;
import ru.spcex.platform.enumeration.Market;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
// todo check typo
public abstract class LiabilitiesClaimsReportBuilder<P> extends CSVReportBuilder<P> {
protected final Imdg<ExecutionFond> executionFondImdg;
protected final Imdg<ExecutionDeposit> executionDepositImdg;
protected final Imdg<Company> companyImdg;
protected final Imdg<Registry> registryImdg;
protected final Imdg<Listing> listingImdg;
protected final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
protected final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
protected final String[] headers = {
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability",
"depo_liability", "cash_netto", "depo_netto"
};
protected List<String[]> lines = null;
public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class
);
this.tradingClearingRegistryImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class
);
}
@Override
public String[] getHeaders() {
return headers;
}
@Override
protected List<String[]> getLines() {
return lines;
}
protected abstract Collection<ExecutionFond> getExecutionFondsForReport(P params);
protected abstract Collection<ExecutionDeposit> getExecutionDepositsForReport(P params);
@Override
protected void collect(P params) {
Collection<ExecutionFond> executionFonds = getExecutionFondsForReport(params);
Collection<ExecutionDeposit> executionDeposits = getExecutionDepositsForReport(params);
List<ExecutionCommon> executions = new ArrayList<>(executionFonds.size() + executionDeposits.size());
executions.addAll(executionFonds);
executions.addAll(executionDeposits);
Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L);
String clearingHouse = clearingHouseCompany.getFullName();
LocalDate nowDate = LocalDate.now();
LocalTime nowTime = LocalTime.now();
lines = new ArrayList<>(executions.size());
for (ExecutionCommon execution : executions) {
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId()));
Collection<Registry> registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", execution.getSessionId())
);
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId()));
FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(
Map.of("securityId", execution.getSecurityId())
);
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID(
execution.getTradingClearingRegistryId()
);
String id = String.valueOf(execution.getId());
String docDate = dateFormatter.format(nowDate);
String docTime = timeFormatter.format(nowTime);
String docName = "Отчет об обязательствах/требованиях Участника клиринга";
String docType = "KS_FIRMID_LIABILITIES";
String firmId = String.valueOf(execution.getCompanyId());
String firName = company.getFullName();
String sessionId = String.valueOf(execution.getSessionId());
String clearingDate = dateFormatter.format(execution.getClearingDate());
String clearingTime = dateFormatter.format(execution.getClearingDate());
String trdAccId = registry.getTradingClearingRegistry();
String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId());
String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAccountId());
String currency = execution.getSettlementCurrency();
String trId = String.valueOf(execution.getExchangeExecutionId());
String securityId = String.valueOf(execution.getSecurityId());
String trBuySell = "";
if (Side.BUY.equalsByKey(execution.getSide()))
trBuySell = "B";
else if (Side.SELL.equalsByKey(execution.getSide()))
trBuySell = "S";
String trDate = dateFormatter.format(execution.getTradingDate());
String trExecDate = "";
String execStatus = "";
String repaymDate = "";
String trPrice = "";
String nominal = "";
String trQuantity = "";
String trValue = "";
String trAccruedInt = "";
String accruedInt = "";
String cashLiability = "";
String depoLiability = "";
if (execution instanceof ExecutionDeposit executionDeposit) {
trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
if (Market.mkrs.equalsByKey(execution.getMarket())) {
String coverageStatus = executionDeposit.getCoverageStatus();
if (Allowed.ALLOWED.equalsByKey(coverageStatus)) execStatus = "Y";
else if (Allowed.DENIED.equalsByKey(coverageStatus)) execStatus = "N";
else execStatus = "W";
repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
trPrice = String.valueOf(executionDeposit.getPrice());
trValue = String.valueOf(executionDeposit.getFirstLegAmount());
cashLiability = String.valueOf(executionDeposit.getFirstLegAmount());
}
} else if (execution instanceof ExecutionFond executionFond) {
trExecDate = dateFormatter.format(executionFond.getSettlementDate());
if (Market.fond.equalsByKey(execution.getMarket())) {
trPrice = String.valueOf(
executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
);
trQuantity = String.valueOf(executionFond.getQuantity());
nominal = String.valueOf(fixedIncomeSecurity.getNominalValue());
trValue = String.valueOf(executionFond.getSettlementAmount());
trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon());
accruedInt = String.valueOf(
fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
);
cashLiability = String.valueOf(executionFond.getSettlementAmount());
depoLiability = String.valueOf(executionFond.getQuantity());
}
}
String lotValue = String.valueOf(listing.getLotSize());
String trLot = String.valueOf(execution.getLots());
String trClrComm = "";
String trExhComm = "";
Registry tm_tRegistry = null;
Registry om_tRegistry = null;
Registry ts_tRegistry = null;
Registry os_tRegistry = null;
for (Registry currRegistry : registriesForSessionId) {
String registryCode = currRegistry.getRegistryCode();
if (registryCode.endsWith("T")) {
if (registryCode.startsWith("TM")) {
if (tm_tRegistry != null && tm_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue;
tm_tRegistry = currRegistry;
}
if (registryCode.startsWith("OM")) {
if (om_tRegistry != null && om_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue;
om_tRegistry = currRegistry;
}
if (registryCode.startsWith("TS")) {
if (ts_tRegistry != null && ts_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue;
ts_tRegistry = currRegistry;
}
if (registryCode.startsWith("OS")) {
if (os_tRegistry != null && os_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue;
os_tRegistry = currRegistry;
}
}
}
String cashNetto = "";
if (tm_tRegistry != null && om_tRegistry != null) {
cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance()));
}
String depoNetto = "";
if (ts_tRegistry != null && os_tRegistry != null) {
depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance()));
}
int valueIdx = 0;
String[] line = new String[getHeaders().length];
line[valueIdx++] = id;
line[valueIdx++] = docDate;
line[valueIdx++] = docTime;
line[valueIdx++] = docName;
line[valueIdx++] = docType;
line[valueIdx++] = clearingHouse;
line[valueIdx++] = firmId;
line[valueIdx++] = firName;
line[valueIdx++] = sessionId;
line[valueIdx++] = clearingDate;
line[valueIdx++] = clearingTime;
line[valueIdx++] = trdAccId;
line[valueIdx++] = account;
line[valueIdx++] = depoAccount;
line[valueIdx++] = currency;
line[valueIdx++] = trId;
line[valueIdx++] = securityId;
line[valueIdx++] = trBuySell;
line[valueIdx++] = trDate;
line[valueIdx++] = trExecDate;
line[valueIdx++] = execStatus;
line[valueIdx++] = repaymDate;
line[valueIdx++] = trPrice;
line[valueIdx++] = nominal;
line[valueIdx++] = lotValue;
line[valueIdx++] = trLot;
line[valueIdx++] = trQuantity;
line[valueIdx++] = trValue;
line[valueIdx++] = trAccruedInt;
line[valueIdx++] = accruedInt;
line[valueIdx++] = trClrComm;
line[valueIdx++] = trExhComm;
line[valueIdx++] = cashLiability;
line[valueIdx++] = depoLiability;
line[valueIdx++] = cashNetto;
line[valueIdx] = depoNetto;
lines.add(line);
}
}
}

View file

@ -0,0 +1,131 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public abstract class MoneyChangeReportBuilder<P> extends CSVReportBuilder<P> {
protected final Imdg<Registry> registryImdg;
protected final Imdg<Company> companyImdg;
protected final Imdg<Listing> listingImdg;
protected final Imdg<Statement> statementImdg;
protected final Imdg<PaymentInstruction> paymentInstructionImdg;
protected final String[] headers = {
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
"account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
"close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time"
};
protected List<String[]> lines = null;
public MoneyChangeReportBuilder(ImdgProvider imdgProvider) {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
}
@Override
public String[] getHeaders() {
return headers;
}
@Override
protected List<String[]> getLines() {
return lines;
}
protected abstract Collection<Registry> getRegistryForReport(P param);
@Override
protected void collect(P params) {
Collection<Registry> registries = getRegistryForReport(params);
Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L);
String clearingHouse = clearingHouseCompany.getFullName();
LocalDate nowDate = LocalDate.now();
LocalTime nowTime = LocalTime.now();
lines = new ArrayList<>(registries.size());
for (Registry registry : registries) {
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", registry.getSecurityId()));
Statement statement = statementImdg.getSingleObjectByFieldValues(Map.of("addresseeId", registry.getCompanyId()));
PaymentInstruction paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues(
Map.of(
"id", registry.getPaymentId(),
"creditLeg_direction", InOutDirection.out.getKey()
)
);
String id = String.valueOf(registry.getId());
String docDate = dateFormatter.format(nowDate);
String docTime = timeFormatter.format(nowTime);
String docName = "Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга";
String docType = "KS_FIRMID_ASSETS";
String firmId = String.valueOf(registry.getCompanyId());
String firName = company.getFullName();
String trdAccId = registry.getTradingClearingRegistry();
String account = String.valueOf(registry.getAccountId());
String currency = listing.getTradingCurrency();
String registryCode = String.valueOf(registry.getId());
String registryName = registry.getRegistryCode();
String openBalance = String.valueOf(registry.getOpenBalance());
String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance()));
String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit()));
String closeBalance = String.valueOf(registry.getCloseBalance());
String remarks = "";
String addSum = String.valueOf(registry.getCredit());
String addTime = dateTimeFormatter.format(LocalDateTime.ofInstant(statement.getCreated(), ZoneId.systemDefault()));
String withdrawSum = String.valueOf(registry.getDebit());
String withdrawTime = dateTimeFormatter.format(LocalDateTime.ofInstant(paymentInstruction.getPaymentDate(), ZoneId.systemDefault()));
int valueIdx = 0;
String[] line = new String[getHeaders().length];
line[valueIdx++] = id;
line[valueIdx++] = docDate;
line[valueIdx++] = docTime;
line[valueIdx++] = docName;
line[valueIdx++] = docType;
line[valueIdx++] = clearingHouse;
line[valueIdx++] = firmId;
line[valueIdx++] = firName;
line[valueIdx++] = trdAccId;
line[valueIdx++] = account;
line[valueIdx++] = currency;
line[valueIdx++] = registryCode;
line[valueIdx++] = registryName;
line[valueIdx++] = openBalance;
line[valueIdx++] = changeBalance;
line[valueIdx++] = addWithdraw;
line[valueIdx++] = closeBalance;
line[valueIdx++] = remarks;
line[valueIdx++] = addSum;
line[valueIdx++] = addTime;
line[valueIdx++] = withdrawSum;
line[valueIdx++] = withdrawTime;
lines.add(line);
}
}
}

View file

@ -0,0 +1,43 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<SessionIdParam> {
public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
return executionFondImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", params.getSessionId())
);
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(SessionIdParam params) {
return executionDepositImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", params.getSessionId())
);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "operational_liabilities_claims.%s".formatted(
dateTimeFormatter.format(LocalDateTime.now())
);
}
@Override
public ReportType getReportType() {
return ReportType.OPERATIONAL_LIABILITIES_CLAIMS;
}
}

View file

@ -0,0 +1,33 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder<SessionIdParam> {
public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<Registry> getRegistryForReport(SessionIdParam param) {
return registryImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", param.getSessionId())
);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "operational_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
}
@Override
public ReportType getReportType() {
return ReportType.OPERATIONAL_MONEY_CHANGE;
}
}

View file

@ -0,0 +1,44 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdListParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<SessionIdListParams> {
public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdListParams params) {
return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
}
@Override
public ReportType getReportType() {
return ReportType.PERIOD_LIABILITIES_CLAIMS;
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdListParams params) {
if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList();
return executionFondImdg.getCollectionObjectsByPredicate(
executionFondImdg.predicateBuilder().in("sessionId", params.getSessionIdList().toArray(new Long[0]))
);
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(SessionIdListParams params) {
if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList();
return executionDepositImdg.getCollectionObjectsByPredicate(
executionDepositImdg.predicateBuilder().in("sessionId", params.getSessionIdList().toArray(new Long[0]))
);
}
}

View file

@ -0,0 +1,43 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDateTime;
import java.util.Collection;
public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<PeriodParams> {
public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<Registry> getRegistryForReport(PeriodParams params) {
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
return registryImdg.getCollectionObjectsByPredicate(
pb.and(
pb.greatEqual("clearingDate", params.getStartDate()),
pb.lessEqual("clearingDate", params.getEndDate())
)
);
}
@Override
public String getReportFilename(PeriodParams params) {
return "period_money_change.%s-%s.%s".formatted(
dateFormatter.format(params.getStartDate()),
dateFormatter.format(params.getEndDate()),
dateTimeFormatter.format(LocalDateTime.now())
);
}
@Override
public ReportType getReportType() {
return ReportType.PERIOD_MONEY_CHANGE;
}
}

View file

@ -0,0 +1,36 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.util.Collection;
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<EmptyParams> {
public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(EmptyParams params) {
return executionFondImdg.getAllValues();
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(EmptyParams params) {
return executionDepositImdg.getAllValues();
}
@Override
protected String getReportFilename(EmptyParams params) {
return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
}
@Override
public ReportType getReportType() {
return ReportType.SUMMARY_LIABILITIES_CLAIMS;
}
}

View file

@ -0,0 +1,31 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.util.Collection;
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<EmptyParams> {
public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<Registry> getRegistryForReport(EmptyParams param) {
return registryImdg.getAllValues();
}
@Override
protected String getReportFilename(EmptyParams params) {
return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
}
@Override
public ReportType getReportType() {
return ReportType.SUMMARY_MONEY_CHANGE;
}
}

View file

@ -0,0 +1,95 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.Allowed;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam> {
private final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
private final String[] headers = {
"id", "securityId", "tradeNo", "tradeDate", "settleCode"
};
private List<String[]> lines = null;
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
}
@Override
public String[] getHeaders() {
return headers;
}
@Override
protected List<String[]> getLines() {
return lines;
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
}
@Override
public ReportType getReportType() {
return ReportType.UNFULFILLED_DEAL_REPORT;
}
@Override
protected void collect(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
ImdgPredicate predicate = pb.and(
pb.equals("sessionId", params.getSessionId()),
pb.equals("coverageStatus", Allowed.DENIED.getKey())
);
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate);
lines = new ArrayList<>(executionFonds.size());
for (ExecutionFond executionFond : executionFonds) {
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
STrades sTrade = sTradesImdg.getSingleObjectByFieldValues(
Map.of(
"settleCode", executionFond.getSettlementCode(),
"operation", executionFond.getSide()
)
);
String id = String.valueOf(executionFond.getId());
String securityId = String.valueOf(executionFond.getSecurityId());
String tradeNo = String.valueOf(executionFond.getExchangeExecutionId());
String tradeDate = dateFormatter.format(executionFond.getTradingDate());
String settleCode = sTrade != null ? sTrade.getClassCode() : null;
int valueIdx = 0;
String[] line = new String[getHeaders().length];
line[valueIdx++] = id;
line[valueIdx++] = securityId;
line[valueIdx++] = tradeNo;
line[valueIdx++] = tradeDate;
line[valueIdx++] = settleCode;
lines.add(line);
}
}
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_12_2;
package ru.spcex.clearing.reports.reports.bt.bt_12_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("netPositionBank")
@Deprecated
public class ReportPA_B extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_12_2;
package ru.spcex.clearing.reports.reports.bt.bt_12_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("netPositionInitiator")
@Deprecated
public class ReportPA_IV extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")

View file

@ -1,12 +1,9 @@
package ru.spcex.clearing.reports.reports.bt_13;
package ru.spcex.clearing.reports.reports.bt.bt_13;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -15,13 +12,14 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("incomingDocuments")
@Deprecated
public class ReportDOCIN extends AbstractReport {
/**
* Дата в формате: dd.MM.yyyy
*/
@XStreamAsAttribute
@XStreamAlias("date")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private final LocalDate date;
/**
@ -29,7 +27,7 @@ public class ReportDOCIN extends AbstractReport {
*/
@XStreamAsAttribute
@XStreamAlias("time")
@XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
private final LocalTime time;
@XStreamAlias("rows")

View file

@ -1,12 +1,9 @@
package ru.spcex.clearing.reports.reports.bt_13;
package ru.spcex.clearing.reports.reports.bt.bt_13;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -15,13 +12,14 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("incomingDocuments")
@Deprecated
public class ReportDOCOUT extends AbstractReport {
/**
* Дата в формате: dd.MM.yyyy
*/
@XStreamAsAttribute
@XStreamAlias("date")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private final LocalDate date;
/**
@ -29,7 +27,7 @@ public class ReportDOCOUT extends AbstractReport {
*/
@XStreamAsAttribute
@XStreamAlias("time")
@XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
private final LocalTime time;
@XStreamAlias("rows")

View file

@ -1,12 +1,9 @@
package ru.spcex.clearing.reports.reports.bt_16_5;
package ru.spcex.clearing.reports.reports.bt.bt_16_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -15,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("accountBalanceInfo")
@Deprecated
public class ReportINACCNT extends AbstractReport {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")
@ -25,7 +23,7 @@ public class ReportINACCNT extends AbstractReport {
*/
@XStreamAsAttribute
@XStreamAlias("date")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private final LocalDate date;
/**
@ -33,7 +31,7 @@ public class ReportINACCNT extends AbstractReport {
*/
@XStreamAsAttribute
@XStreamAlias("time")
@XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
private final LocalTime time;
@XStreamAlias("rows")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_1;
package ru.spcex.clearing.reports.reports.bt.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearedLiabilities")
@Deprecated
public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_1;
package ru.spcex.clearing.reports.reports.bt.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -10,6 +10,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
@XStreamAlias("clearedLiabilitiesTotal")
@Deprecated
public class ReportBR_0420315_P2 extends ReportWithPeriod {
@XStreamAlias("rows")
private Info_0420315_P2 rows;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_2;
package ru.spcex.clearing.reports.reports.bt.bt_17_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingServiceStatus")
@Deprecated
public class ReportBR_0420317 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_3;
package ru.spcex.clearing.reports.reports.bt.bt_17_3;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -13,6 +13,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("unfundedLiabilities")
@Deprecated
public class ReportBR_0420318 extends ReportWithClearingStatus {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_4;
package ru.spcex.clearing.reports.reports.bt.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("accountTransactionLiabilities")
@Deprecated
public class ReportBR_0420314_P1 extends ReportWithClearingStatus {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_4;
package ru.spcex.clearing.reports.reports.bt.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -11,6 +11,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("accountTransactionTurnover")
@Deprecated
public class ReportBR_0420314_P2 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -11,6 +11,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage1")
@Deprecated
public class ReportBR_0420312_P1 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage10")
@Deprecated
public class ReportBR_0420312_P10 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage2")
@Deprecated
public class ReportBR_0420312_P2 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage3")
@Deprecated
public class ReportBR_0420312_P3 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage4")
@Deprecated
public class ReportBR_0420312_P4 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage5")
@Deprecated
public class ReportBR_0420312_P5 extends ReportWithPeriod {
@XStreamAsAttribute

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage6")
@Deprecated
public class ReportBR_0420312_P6 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage7")
@Deprecated
public class ReportBR_0420312_P7 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage8")
@Deprecated
public class ReportBR_0420312_P8 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.reports.bt_17_5;
package ru.spcex.clearing.reports.reports.bt.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
@XStreamAlias("clearingCoverage9")
@Deprecated
public class ReportBR_0420312_P9 extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("destination")

View file

@ -0,0 +1,237 @@
package ru.spcex.clearing.reports.services;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
import ru.spcex.clearing.reports.reports.*;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.validation.IValidator;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@Service
public class ReportService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final UserRoleVerification userRoleVerification;
private final ValidationHelper validationHelper;
private final Function<ReportRequest, IValidator> reportRequestValidator;
private final Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator;
private final Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator;
private final Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator;
private final Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams;
private final Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam;
private final Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam;
private final Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams;
private final File outFolder;
public ReportService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaResponseQueue,
UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
ReportsServiceSettings reportsServiceSettings,
@Qualifier("reportBuildersWithoutParams")
Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams,
@Qualifier("reportBuildersWithSessionIdParam")
Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam,
@Qualifier("reportBuildersWithSessionIdListParam")
Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam,
@Qualifier("reportBuildersWithPeriodParams")
Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams,
@Qualifier("reportRequestValidator")
Function<ReportRequest, IValidator> reportRequestValidator,
@Qualifier("reportRequestWithSessionIdValidator")
Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator,
@Qualifier("reportRequestWithSessionIdListValidator")
Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator,
@Qualifier("reportRequestWithPeriodValidator")
Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator) {
super(kafkaQueue, kafkaResponseQueue);
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.reportRequestValidator = reportRequestValidator;
this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator;
this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator;
this.reportRequestWithPeriodValidator = reportRequestWithPeriodValidator;
this.reportBuildersWithoutParams = reportBuildersWithoutParams;
this.reportBuildersWithSessionIdParam = reportBuildersWithSessionIdParam;
this.reportBuildersWithSessionIdListParam = reportBuildersWithSessionIdListParam;
this.reportBuildersWithPeriodParams = reportBuildersWithPeriodParams;
this.outFolder = new File(reportsServiceSettings.getReportModuleOut());
assert outFolder.isDirectory();
}
@Override
public void afterPropertiesSet() throws Exception {
callback(ReportRequest.class)
.setFunction(this::createReport)
.forDestination(Consts.CREATE_REPORT, callbacks::put);
callback(ReportRequestWithSessionId.class)
.setFunction(this::createReportForSessionId)
.forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID, callbacks::put);
callback(ReportRequestWithSessionIdList.class)
.setFunction(this::createReportForSessionIdList)
.forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put);
callback(ReportRequestWithPeriod.class)
.setFunction(this::createReportForPeriod)
.forDestination(Consts.CREATE_REPORT_FOR_PERIOD, callbacks::put);
init();
}
public RequestInfoUpdate createReport(BaseRequest<ReportRequest> userRequest) {
log.debug("ReportRequest received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
if (requestInfoUpdate != null) return null;
ReportRequest req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<EmptyParams>> builders = reportBuildersWithoutParams.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
for (CSVReportBuilder<EmptyParams> builder : builders) {
File outFile = builder.createReport(new EmptyParams(), outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
return null;
}
public RequestInfoUpdate createReportForSessionId(BaseRequest<ReportRequestWithSessionId> userRequest) {
log.debug("ReportRequestWithSessionId received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithSessionId req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<SessionIdParam>> builders = reportBuildersWithSessionIdParam.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
for (CSVReportBuilder<SessionIdParam> builder : builders) {
SessionIdParam sessionIdParam = new SessionIdParam();
sessionIdParam.setSessionId(req.getSessionId());
File outFile = builder.createReport(sessionIdParam, outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
return null;
}
public RequestInfoUpdate createReportForSessionIdList(BaseRequest<ReportRequestWithSessionIdList> userRequest) {
log.debug("ReportRequestWithSessionIdList received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdListValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithSessionIdList req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<SessionIdListParams>> builders = reportBuildersWithSessionIdListParam.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
for (CSVReportBuilder<SessionIdListParams> builder : builders) {
SessionIdListParams sessionIdListParams = new SessionIdListParams();
sessionIdListParams.setSessionIdList(req.getSessionIdList());
File outFile = builder.createReport(sessionIdListParams, outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
return null;
}
public RequestInfoUpdate createReportForPeriod(BaseRequest<ReportRequestWithPeriod> userRequest) {
log.debug("ReportRequestWithPeriod received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithPeriodValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithPeriod req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<PeriodParams>> builders = reportBuildersWithPeriodParams.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
for (CSVReportBuilder<PeriodParams> builder : builders) {
PeriodParams periodParams = new PeriodParams();
periodParams.setStartDate(req.getStartDate());
periodParams.setEndDate(req.getEndDate());
File outFile = builder.createReport(periodParams, outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
return null;
}
}

View file

@ -5,6 +5,7 @@ import ru.spcex.clearing.reports.reports.AbstractReport;
import java.io.File;
import java.io.IOException;
@Deprecated
public abstract class FileReportBuilder {
protected final Class<? extends AbstractReport> reportClass;

View file

@ -12,6 +12,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
@Deprecated
public class XMLReportBuilder extends FileReportBuilder {
private final Logger log = LoggerFactory.getLogger(getClass());
protected final XStream xStream;

View file

@ -1,10 +1,10 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_12_2;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_B;
import ru.spcex.clearing.reports.reports.bt.bt_12_2.ReportPA_B;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.imdg.api.Imdg;
@ -20,6 +20,7 @@ import java.util.Set;
import java.util.stream.Collectors;
@Component
@Deprecated
public class ReportPA_B_Collector extends ReportWithPeriodCollector<ReportPA_B> {
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;

View file

@ -1,11 +1,11 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_12_2;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_IV;
import ru.spcex.clearing.reports.reports.bt.bt_12_2.ReportPA_IV;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.imdg.api.Imdg;
@ -20,6 +20,7 @@ import java.util.Set;
import java.util.stream.Collectors;
@Component
@Deprecated
public class ReportPA_IV_Collector extends ReportWithPeriodCollector<ReportPA_IV> {
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private final Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;

View file

@ -1,11 +1,11 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_13;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.journal.InDocumentJournal;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_13.ReportDOCIN;
import ru.spcex.clearing.reports.reports.bt.bt_13.ReportDOCIN;
import ru.spcex.clearing.reports.services.SimpleReportCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -17,6 +17,7 @@ import java.time.LocalTime;
import java.util.Collection;
@Component
@Deprecated
public class ReportDOCIN_Collector extends SimpleReportCollector<ReportDOCIN> {
protected final Logger log = LoggerFactory.getLogger(getClass());

View file

@ -1,11 +1,11 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_13;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.journal.OutDocumentJournal;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_13.ReportDOCOUT;
import ru.spcex.clearing.reports.reports.bt.bt_13.ReportDOCOUT;
import ru.spcex.clearing.reports.services.SimpleReportCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -17,6 +17,7 @@ import java.time.LocalTime;
import java.util.Collection;
@Component
@Deprecated
public class ReportDOCOUT_Collector extends SimpleReportCollector<ReportDOCOUT> {
protected final Logger log = LoggerFactory.getLogger(getClass());

View file

@ -1,10 +1,10 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_16_5;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountBalance;
import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT;
import ru.spcex.clearing.reports.reports.bt.bt_16_5.ReportINACCNT;
import ru.spcex.clearing.reports.services.ReportForClearingCodeCollector;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.imdg.api.Imdg;
@ -19,6 +19,7 @@ import java.util.Set;
import java.util.stream.Collectors;
@Component
@Deprecated
public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<ReportINACCNT> {
private final Imdg<AccountBalance> accountBalanceImdg;
private final Imdg<Company> companyImdg;

View file

@ -1,16 +1,17 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_17_1;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports.reports.bt.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.ClearingStatus;
import ru.spcex.platform.enumeration.Market;
@ -22,6 +23,7 @@ import java.time.LocalDate;
import java.util.*;
@Component
@Deprecated
public class ReportBR_0420315_P1_Collector extends ReportWithPeriodCollector<ReportBR_0420315_P1> {
protected static final List<String> ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey());

View file

@ -1,56 +1,57 @@
package ru.spcex.clearing.reports.services.collector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.HashSet;
@Component
public class ReportBR_0420315_P2_collector extends ReportWithPeriodCollector<ReportBR_0420315_P2> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420315_P2_collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
long liabilitiesAmount;
BigDecimal contractorQty = BigDecimal.ZERO;
{
HashSet<String> collectedToSumm = new HashSet<>();
for (LiabilitiesClaimsAssets lContract : liabilities) {
if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())) {
collectedToSumm.add(lContract.getContract());
contractorQty = contractorQty.add(lContract.getLiabilitiesQuantity());
}
}
liabilitiesAmount = collectedToSumm.size();
}
ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate);
reportBR_0420315_p2.setRows(new ReportBR_0420315_P2.Info_0420315_P2(toString(contractorQty),
toString(liabilitiesAmount)));
return reportBR_0420315_p2;
}
@Override
public Class<ReportBR_0420315_P2> getReportClass() {
return ReportBR_0420315_P2.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_1;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_1.ReportBR_0420315_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.HashSet;
@Component
@Deprecated
public class ReportBR_0420315_P2_collector extends ReportWithPeriodCollector<ReportBR_0420315_P2> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420315_P2_collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
long liabilitiesAmount;
BigDecimal contractorQty = BigDecimal.ZERO;
{
HashSet<String> collectedToSumm = new HashSet<>();
for (LiabilitiesClaimsAssets lContract : liabilities) {
if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())) {
collectedToSumm.add(lContract.getContract());
contractorQty = contractorQty.add(lContract.getLiabilitiesQuantity());
}
}
liabilitiesAmount = collectedToSumm.size();
}
ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate);
reportBR_0420315_p2.setRows(new ReportBR_0420315_P2.Info_0420315_P2(toString(contractorQty),
toString(liabilitiesAmount)));
return reportBR_0420315_p2;
}
@Override
public Class<ReportBR_0420315_P2> getReportClass() {
return ReportBR_0420315_P2.class;
}
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_17_2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -6,7 +6,7 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317;
import ru.spcex.clearing.reports.reports.bt.bt_17_2.ReportBR_0420317;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
@ -20,6 +20,7 @@ import java.util.Collection;
import java.util.Map;
@Component
@Deprecated
public class ReportBR_0420317_Collector extends ReportWithPeriodCollector<ReportBR_0420317> {
private Imdg<Company> companyImdg;
private Imdg<Relation> relationImdg;

View file

@ -1,15 +1,16 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_17_3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_3.ReportBR_0420318;
import ru.spcex.clearing.reports.reports.bt.bt_17_3.ReportBR_0420318;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
@ -22,6 +23,7 @@ import java.util.List;
import java.util.Map;
@Component
@Deprecated
public class ReportBR_0420318_Collector extends ReportWithPeriodCollector<ReportBR_0420318> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;

View file

@ -1,99 +1,101 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_4.ReportBR_0420314_P1;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.ClearingStatus;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Map;
/**
* accountTransactionLiabilities
*/
@Component
public class ReportBR_0420314_P1_Collector extends ReportWithPeriodCollector<ReportBR_0420314_P1> {
private Imdg<Company> companyImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey();
@Autowired
public ReportBR_0420314_P1_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420314_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420314_P1 reportBR_0420312P1 = new ReportBR_0420314_P1(startDate, endDate, "BR",
ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK"
);
final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK"
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate, allowClearingStatusId);
for (LiabilitiesClaimsAssets liability: liabilities) {
final Long companyId = liability.getCompanyId();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
Collection<ClearingMemberCategory> cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId));
String cleanMemberCategories = MapUtil.joinMultiString(cmcLst, ClearingMemberCategory::getClearingMemberCategory);
CompanySymbols companySymbolCntr = findSymbol(DocumentTypes.cntr, company.getId());
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1(
toString(company.getClearingCode()),
toString(companySymbolCntr == null? null : companySymbolCntr.getId()),
toString(company.getFullName()),
toString(companySymbolINN == null ? null : companySymbolINN.getCompanySymbolValue()),
toString(companySymbolOGRN == null? null : companySymbolOGRN.getCompanySymbolValue()),
toString(cleanMemberCategories), // может быть несколько, тогда через запятую перечислить
toString(liability.getRefundPaymentId()),
toString(liability.getTradingDate()),
toString(liability.getLiabilitiesQuantity())
);
reportBR_0420312P1.getRows().add(info_0420314P1);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420314_P1> getReportClass() {
return ReportBR_0420314_P1.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_4.ReportBR_0420314_P1;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.ClearingStatus;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Map;
/**
* accountTransactionLiabilities
*/
@Component
@Deprecated
public class ReportBR_0420314_P1_Collector extends ReportWithPeriodCollector<ReportBR_0420314_P1> {
private Imdg<Company> companyImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey();
@Autowired
public ReportBR_0420314_P1_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420314_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420314_P1 reportBR_0420312P1 = new ReportBR_0420314_P1(startDate, endDate, "BR",
ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK"
);
final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK"
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate, allowClearingStatusId);
for (LiabilitiesClaimsAssets liability: liabilities) {
final Long companyId = liability.getCompanyId();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
Collection<ClearingMemberCategory> cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId));
String cleanMemberCategories = MapUtil.joinMultiString(cmcLst, ClearingMemberCategory::getClearingMemberCategory);
CompanySymbols companySymbolCntr = findSymbol(DocumentTypes.cntr, company.getId());
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1(
toString(company.getClearingCode()),
toString(companySymbolCntr == null? null : companySymbolCntr.getId()),
toString(company.getFullName()),
toString(companySymbolINN == null ? null : companySymbolINN.getCompanySymbolValue()),
toString(companySymbolOGRN == null? null : companySymbolOGRN.getCompanySymbolValue()),
toString(cleanMemberCategories), // может быть несколько, тогда через запятую перечислить
toString(liability.getRefundPaymentId()),
toString(liability.getTradingDate()),
toString(liability.getLiabilitiesQuantity())
);
reportBR_0420312P1.getRows().add(info_0420314P1);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420314_P1> getReportClass() {
return ReportBR_0420314_P1.class;
}
}

View file

@ -1,129 +1,131 @@
package ru.spcex.clearing.reports.services.collector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountBalance;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_4.ReportBR_0420314_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* accountTransactionLiabilities
*/
@Component
public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector<ReportBR_0420314_P2> {
private Imdg<Company> companyImdg;
private Imdg<PaymentInstruction> paymentInstructionImdg;
private Imdg<AccountBalance> accountBalanceImdg;
private Imdg<ProfileDocument> profileDocumentImdg;
@Autowired
public ReportBR_0420314_P2_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class);
profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
}
Collection<PaymentInstruction> searchPaymentInstruction(LocalDate startDate, LocalDate endDate) {
ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi));
Collection<PaymentInstruction> paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p);
return paymentInstructionsAll;
}
@Override
public ReportBR_0420314_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420314_P2 reportBR_0420312P2 = new ReportBR_0420314_P2(startDate, endDate,
"", "BR"
);
Collection<PaymentInstruction> paymentInstructionsAll = searchPaymentInstruction(startDate, endDate);
Map<Long, List<PaymentInstruction>> companyIdPyPaymtInstruction =
MapUtil.indexList(paymentInstructionsAll, PaymentInstruction::getSenderId);
for (Map.Entry<Long, List<PaymentInstruction>> entry : companyIdPyPaymtInstruction.entrySet()) {
final Long companyId = entry.getKey();
List<PaymentInstruction> paymentInstructionsByCompany = entry.getValue();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found, id={}", companyId);
continue;
}
ProfileDocument profileDocumentCntr = profileDocumentImdg.getSingleObjectByFieldValues(Map.of(
"companyId", companyId,
"documentType", DocumentTypes.cntr.getKey()
));
AccountBalance accountBalance = accountBalanceImdg.getSingleObjectByFieldValues(Map.of(
"accountType", AccountType.Clrn.getKey(),
"companyId", companyId
));
String documentTypeStr = null;
if (profileDocumentCntr != null) {
documentTypeStr = profileDocumentCntr.getNumber();
if (profileDocumentCntr.getValidFromDate() != null) {
if (StringUtils.isEmpty(documentTypeStr)) {
documentTypeStr = "";
} else {
documentTypeStr += " ";
}
documentTypeStr += toString(profileDocumentCntr.getValidFromDate());
}
}
BigDecimal paymentInstruction_creditLeg_amount = paymentInstructionsByCompany.stream()
.map(PaymentInstruction::getCreditLeg_amount)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
BigDecimal paymentInstructiont_debitLeg_amount = paymentInstructionsByCompany.stream()
.map(PaymentInstruction::getDebitLeg_amount)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
ReportBR_0420314_P2.Info_0420314_P2 info_0420314P2 = new ReportBR_0420314_P2.Info_0420314_P2(
toString(company.getClearingCode()),
toString(documentTypeStr),
toString(accountBalance == null ? null : accountBalance.getOpenBalanceAmount()),
toString(paymentInstruction_creditLeg_amount),
toString(paymentInstructiont_debitLeg_amount),
toString(accountBalance == null ? null : accountBalance.getCloseBalanceAmount())
);
reportBR_0420312P2.getRows().add(info_0420314P2);
}
return reportBR_0420312P2;
}
@Override
public Class<ReportBR_0420314_P2> getReportClass() {
return ReportBR_0420314_P2.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_4;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountBalance;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_4.ReportBR_0420314_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* accountTransactionLiabilities
*/
@Component
@Deprecated
public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector<ReportBR_0420314_P2> {
private Imdg<Company> companyImdg;
private Imdg<PaymentInstruction> paymentInstructionImdg;
private Imdg<AccountBalance> accountBalanceImdg;
private Imdg<ProfileDocument> profileDocumentImdg;
@Autowired
public ReportBR_0420314_P2_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class);
profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
}
Collection<PaymentInstruction> searchPaymentInstruction(LocalDate startDate, LocalDate endDate) {
ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi));
Collection<PaymentInstruction> paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p);
return paymentInstructionsAll;
}
@Override
public ReportBR_0420314_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420314_P2 reportBR_0420312P2 = new ReportBR_0420314_P2(startDate, endDate,
"", "BR"
);
Collection<PaymentInstruction> paymentInstructionsAll = searchPaymentInstruction(startDate, endDate);
Map<Long, List<PaymentInstruction>> companyIdPyPaymtInstruction =
MapUtil.indexList(paymentInstructionsAll, PaymentInstruction::getSenderId);
for (Map.Entry<Long, List<PaymentInstruction>> entry : companyIdPyPaymtInstruction.entrySet()) {
final Long companyId = entry.getKey();
List<PaymentInstruction> paymentInstructionsByCompany = entry.getValue();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found, id={}", companyId);
continue;
}
ProfileDocument profileDocumentCntr = profileDocumentImdg.getSingleObjectByFieldValues(Map.of(
"companyId", companyId,
"documentType", DocumentTypes.cntr.getKey()
));
AccountBalance accountBalance = accountBalanceImdg.getSingleObjectByFieldValues(Map.of(
"accountType", AccountType.Clrn.getKey(),
"companyId", companyId
));
String documentTypeStr = null;
if (profileDocumentCntr != null) {
documentTypeStr = profileDocumentCntr.getNumber();
if (profileDocumentCntr.getValidFromDate() != null) {
if (StringUtils.isEmpty(documentTypeStr)) {
documentTypeStr = "";
} else {
documentTypeStr += " ";
}
documentTypeStr += toString(profileDocumentCntr.getValidFromDate());
}
}
BigDecimal paymentInstruction_creditLeg_amount = paymentInstructionsByCompany.stream()
.map(PaymentInstruction::getCreditLeg_amount)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
BigDecimal paymentInstructiont_debitLeg_amount = paymentInstructionsByCompany.stream()
.map(PaymentInstruction::getDebitLeg_amount)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
ReportBR_0420314_P2.Info_0420314_P2 info_0420314P2 = new ReportBR_0420314_P2.Info_0420314_P2(
toString(company.getClearingCode()),
toString(documentTypeStr),
toString(accountBalance == null ? null : accountBalance.getOpenBalanceAmount()),
toString(paymentInstruction_creditLeg_amount),
toString(paymentInstructiont_debitLeg_amount),
toString(accountBalance == null ? null : accountBalance.getCloseBalanceAmount())
);
reportBR_0420312P2.getRows().add(info_0420314P2);
}
return reportBR_0420312P2;
}
@Override
public Class<ReportBR_0420314_P2> getReportClass() {
return ReportBR_0420314_P2.class;
}
}

View file

@ -1,48 +1,49 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P10;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
public class ReportBR_0420312_P10_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P10> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P10_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P10 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P10 reportBR_0420312P10 = new ReportBR_0420312_P10(startDate, endDate);
ReportBR_0420312_P10.Info_0420312_P10 reportInfo = new ReportBR_0420312_P10.Info_0420312_P10(toString(liabilitiesQuantitySum));
reportBR_0420312P10.getRows().add(reportInfo);
return reportBR_0420312P10;
}
@Override
public Class<ReportBR_0420312_P10> getReportClass() {
return ReportBR_0420312_P10.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P10;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P10_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P10> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P10_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P10 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P10 reportBR_0420312P10 = new ReportBR_0420312_P10(startDate, endDate);
ReportBR_0420312_P10.Info_0420312_P10 reportInfo = new ReportBR_0420312_P10.Info_0420312_P10(toString(liabilitiesQuantitySum));
reportBR_0420312P10.getRows().add(reportInfo);
return reportBR_0420312P10;
}
@Override
public Class<ReportBR_0420312_P10> getReportClass() {
return ReportBR_0420312_P10.class;
}
}

View file

@ -1,83 +1,85 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
public class ReportBR_0420312_P1_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P1> {
private final Imdg<Company> companyImdg;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P1_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(startDate, endDate, "BR");
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory();
ReportBR_0420312_P1.Info_0420312_P1 info_0420312_p1 = new ReportBR_0420312_P1.Info_0420312_P1(
toString(company.getClearingCode()),
toString(companyId),
toString(company.getFullName()),
companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()),
companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()),
toString(company.getProfile().getCountryCode()),
toString(clearingMemberCategory));
reportBR_0420312P1.getRows().add(info_0420312_p1);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420312_P1> getReportClass() {
return ReportBR_0420312_P1.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P1;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
@Deprecated
public class ReportBR_0420312_P1_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P1> {
private final Imdg<Company> companyImdg;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P1_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(startDate, endDate, "BR");
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory();
ReportBR_0420312_P1.Info_0420312_P1 info_0420312_p1 = new ReportBR_0420312_P1.Info_0420312_P1(
toString(company.getClearingCode()),
toString(companyId),
toString(company.getFullName()),
companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()),
companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()),
toString(company.getProfile().getCountryCode()),
toString(clearingMemberCategory));
reportBR_0420312P1.getRows().add(info_0420312_p1);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420312_P1> getReportClass() {
return ReportBR_0420312_P1.class;
}
}

View file

@ -1,61 +1,63 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Component
public class ReportBR_0420312_P2_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P2> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P2_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P2 reportBR_0420312P1 = new ReportBR_0420312_P2(startDate, endDate, "BR");
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
List<LiabilitiesClaimsAssets> companyLiabilities=companyEntry.getValue();
BigDecimal liabilitiesQuantitySum = companyLiabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P2.Info_0420312_P2 info_0420312_p2 = new ReportBR_0420312_P2.Info_0420312_P2(
toString(companyId),
toString(liabilitiesQuantitySum)
);
reportBR_0420312P1.getRows().add(info_0420312_p2);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420312_P2> getReportClass() {
return ReportBR_0420312_P2.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P2;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P2_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P2> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P2_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P2 reportBR_0420312P1 = new ReportBR_0420312_P2(startDate, endDate, "BR");
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
List<LiabilitiesClaimsAssets> companyLiabilities=companyEntry.getValue();
BigDecimal liabilitiesQuantitySum = companyLiabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P2.Info_0420312_P2 info_0420312_p2 = new ReportBR_0420312_P2.Info_0420312_P2(
toString(companyId),
toString(liabilitiesQuantitySum)
);
reportBR_0420312P1.getRows().add(info_0420312_p2);
}
return reportBR_0420312P1;
}
@Override
public Class<ReportBR_0420312_P2> getReportClass() {
return ReportBR_0420312_P2.class;
}
}

View file

@ -1,11 +1,12 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P3;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P3;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -17,6 +18,7 @@ import java.util.Map;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P3_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P3> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;

View file

@ -1,48 +1,49 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P4;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
public class ReportBR_0420312_P4_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P4> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P4_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P4 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P4 reportBR_0420312P4 = new ReportBR_0420312_P4(startDate, endDate);
ReportBR_0420312_P4.Info_0420312_P4 reportInfo = new ReportBR_0420312_P4.Info_0420312_P4(toString(liabilitiesQuantitySum));
reportBR_0420312P4.getRows().add(reportInfo);
return reportBR_0420312P4;
}
@Override
public Class<ReportBR_0420312_P4> getReportClass() {
return ReportBR_0420312_P4.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P4;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P4_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P4> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P4_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P4 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P4 reportBR_0420312P4 = new ReportBR_0420312_P4(startDate, endDate);
ReportBR_0420312_P4.Info_0420312_P4 reportInfo = new ReportBR_0420312_P4.Info_0420312_P4(toString(liabilitiesQuantitySum));
reportBR_0420312P4.getRows().add(reportInfo);
return reportBR_0420312P4;
}
@Override
public Class<ReportBR_0420312_P4> getReportClass() {
return ReportBR_0420312_P4.class;
}
}

View file

@ -1,48 +1,49 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P5;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
public class ReportBR_0420312_P5_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P5> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P5_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P5 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P5 reportBR_0420312P5 = new ReportBR_0420312_P5(startDate, endDate);
ReportBR_0420312_P5.Info_0420312_P5 reportInfo = new ReportBR_0420312_P5.Info_0420312_P5(toString(liabilitiesQuantitySum));
reportBR_0420312P5.getRows().add(reportInfo);
return reportBR_0420312P5;
}
@Override
public Class<ReportBR_0420312_P5> getReportClass() {
return ReportBR_0420312_P5.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P5;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P5_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P5> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P5_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P5 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P5 reportBR_0420312P5 = new ReportBR_0420312_P5(startDate, endDate);
ReportBR_0420312_P5.Info_0420312_P5 reportInfo = new ReportBR_0420312_P5.Info_0420312_P5(toString(liabilitiesQuantitySum));
reportBR_0420312P5.getRows().add(reportInfo);
return reportBR_0420312P5;
}
@Override
public Class<ReportBR_0420312_P5> getReportClass() {
return ReportBR_0420312_P5.class;
}
}

View file

@ -1,48 +1,49 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P6;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
public class ReportBR_0420312_P6_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P6> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P6_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P6 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P6 reportBR_0420312P5 = new ReportBR_0420312_P6(startDate, endDate);
ReportBR_0420312_P6.Info_0420312_P6 reportInfo = new ReportBR_0420312_P6.Info_0420312_P6(toString(liabilitiesQuantitySum));
reportBR_0420312P5.getRows().add(reportInfo);
return reportBR_0420312P5;
}
@Override
public Class<ReportBR_0420312_P6> getReportClass() {
return ReportBR_0420312_P6.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P6;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P6_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P6> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
@Autowired
public ReportBR_0420312_P6_Collector(ImdgProvider imdgProvider) {
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
}
@Override
public ReportBR_0420312_P6 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
BigDecimal liabilitiesQuantitySum = liabilities.stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
ReportBR_0420312_P6 reportBR_0420312P5 = new ReportBR_0420312_P6(startDate, endDate);
ReportBR_0420312_P6.Info_0420312_P6 reportInfo = new ReportBR_0420312_P6.Info_0420312_P6(toString(liabilitiesQuantitySum));
reportBR_0420312P5.getRows().add(reportInfo);
return reportBR_0420312P5;
}
@Override
public Class<ReportBR_0420312_P6> getReportClass() {
return ReportBR_0420312_P6.class;
}
}

View file

@ -1,10 +1,10 @@
package ru.spcex.clearing.reports.services.collector;
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P7;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P7;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -15,6 +15,7 @@ import java.util.Collection;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P7_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P7> {
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;

View file

@ -1,98 +1,100 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.CurrencyCodeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P8;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
public class ReportBR_0420312_P8_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P8> {
private Imdg<Company> companyImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
@Autowired
public ReportBR_0420312_P8_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420312_P8 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P8 reportBR_0420312P8 = new ReportBR_0420312_P8(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory();
List<LiabilitiesClaimsAssets> companyLiabilities = companyEntry.getValue();
Map<String, List<LiabilitiesClaimsAssets>> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency);
for (Map.Entry<String, List<LiabilitiesClaimsAssets>> currencyEntry : indexByCurrency.entrySet()) {
String currencyCode = currencyEntry.getKey();
Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode);
if (currencyId == null) {
log.warn("No currency found for code \"{}\"", currencyEntry.getKey());
}
ReportBR_0420312_P8.Info_0420312_P8 info_0420312_p8 = new ReportBR_0420312_P8.Info_0420312_P8(
toString(currencyId),
toString(companyId),
toString(company.getFullName()),
companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()),
companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()),
toString(company.getProfile().getCountryCode()),
toString(clearingMemberCategory)
);
reportBR_0420312P8.getRows().add(info_0420312_p8);
}
}
return reportBR_0420312P8;
}
@Override
public Class<ReportBR_0420312_P8> getReportClass() {
return ReportBR_0420312_P8.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.CurrencyCodeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P8;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
@Deprecated
public class ReportBR_0420312_P8_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P8> {
private Imdg<Company> companyImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
@Autowired
public ReportBR_0420312_P8_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
}
protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) {
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
"companySymbol", docType.getKey(),
"companyId", companyId
));
return companySymbol;
}
@Override
public ReportBR_0420312_P8 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P8 reportBR_0420312P8 = new ReportBR_0420312_P8(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId());
CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId());
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory();
List<LiabilitiesClaimsAssets> companyLiabilities = companyEntry.getValue();
Map<String, List<LiabilitiesClaimsAssets>> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency);
for (Map.Entry<String, List<LiabilitiesClaimsAssets>> currencyEntry : indexByCurrency.entrySet()) {
String currencyCode = currencyEntry.getKey();
Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode);
if (currencyId == null) {
log.warn("No currency found for code \"{}\"", currencyEntry.getKey());
}
ReportBR_0420312_P8.Info_0420312_P8 info_0420312_p8 = new ReportBR_0420312_P8.Info_0420312_P8(
toString(currencyId),
toString(companyId),
toString(company.getFullName()),
companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()),
companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()),
toString(company.getProfile().getCountryCode()),
toString(clearingMemberCategory)
);
reportBR_0420312P8.getRows().add(info_0420312_p8);
}
}
return reportBR_0420312P8;
}
@Override
public Class<ReportBR_0420312_P8> getReportClass() {
return ReportBR_0420312_P8.class;
}
}

View file

@ -1,80 +1,82 @@
package ru.spcex.clearing.reports.services.collector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.CurrencyCodeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P9;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Component
public class ReportBR_0420312_P9_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P9> {
private Imdg<Company> companyImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
@Autowired
public ReportBR_0420312_P9_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
}
@Override
public ReportBR_0420312_P9 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P9 reportBR_0420312P9 = new ReportBR_0420312_P9(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
List<LiabilitiesClaimsAssets> companyLiabilities = companyEntry.getValue();
Map<String, List<LiabilitiesClaimsAssets>> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency);
for (Map.Entry<String, List<LiabilitiesClaimsAssets>> currencyEntry : indexByCurrency.entrySet()) {
String currencyCode = currencyEntry.getKey();
Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode);
if (currencyId == null) {
log.warn("No currency found for code \"{}\"", currencyEntry.getKey());
}
BigDecimal sumOfLiabilities = currencyEntry.getValue().stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
ReportBR_0420312_P9.Info_0420312_P9 info_0420312_p9 = new ReportBR_0420312_P9.Info_0420312_P9(
toString(currencyId),
toString(companyId),
toString(currencyCode),
toString(sumOfLiabilities)
);
reportBR_0420312P9.getRows().add(info_0420312_p9);
}
}
return reportBR_0420312P9;
}
@Override
public Class<ReportBR_0420312_P9> getReportClass() {
return ReportBR_0420312_P9.class;
}
}
package ru.spcex.clearing.reports.services.collector.bt.bt_17_5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.CurrencyCodeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P9;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.clearing.reports.services.collector.MapUtil;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Component
@Deprecated
public class ReportBR_0420312_P9_Collector extends ReportWithPeriodCollector<ReportBR_0420312_P9> {
private Imdg<Company> companyImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
@Autowired
public ReportBR_0420312_P9_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
}
@Override
public ReportBR_0420312_P9 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420312_P9 reportBR_0420312P9 = new ReportBR_0420312_P9(startDate, endDate);
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company == null) {
log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId);
continue;
}
List<LiabilitiesClaimsAssets> companyLiabilities = companyEntry.getValue();
Map<String, List<LiabilitiesClaimsAssets>> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency);
for (Map.Entry<String, List<LiabilitiesClaimsAssets>> currencyEntry : indexByCurrency.entrySet()) {
String currencyCode = currencyEntry.getKey();
Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode);
if (currencyId == null) {
log.warn("No currency found for code \"{}\"", currencyEntry.getKey());
}
BigDecimal sumOfLiabilities = currencyEntry.getValue().stream()
.map(LiabilitiesClaimsAssets::getLiabilitiesQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO);
ReportBR_0420312_P9.Info_0420312_P9 info_0420312_p9 = new ReportBR_0420312_P9.Info_0420312_P9(
toString(currencyId),
toString(companyId),
toString(currencyCode),
toString(sumOfLiabilities)
);
reportBR_0420312P9.getRows().add(info_0420312_p9);
}
}
return reportBR_0420312P9;
}
@Override
public Class<ReportBR_0420312_P9> getReportClass() {
return ReportBR_0420312_P9.class;
}
}

View file

@ -1,80 +0,0 @@
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import com.thoughtworks.xstream.converters.basic.BooleanConverter;
import com.thoughtworks.xstream.converters.basic.DateConverter;
import java.util.Date;
// without aliases
public class ChildElementForWrite {
@XStreamAlias("childStr") // alias for field name
private String testChildString = "testChildStr";
@XStreamAsAttribute
private Integer testAttributeInt = Integer.MIN_VALUE;
// при использовании настраевомого встроенного конвертора, ему необходимо передать параметры в конструктор
// делается это посредством параметров strings, booleans, nulls.
// т.е. такая запись эквивалентна:
// new DateConverter("MM-yyyy-dd", null)
@XStreamConverter(value = DateConverter.class, strings = {"MM-yyyy-dd"}, nulls = {String[].class})
private Date testDate = new Date();
@XStreamAsAttribute
@XStreamAlias("isBoolean")
@XStreamConverter(value = BooleanConverter.class, booleans = {true}, strings = {"yes", "no"})
private Boolean testYesAttributeBool = Boolean.TRUE;
private Integer testChildInt = Integer.MAX_VALUE;
@XStreamOmitField
private String testIgnoredString = "testIgnore";
public String getTestChildString() {
return testChildString;
}
public void setTestChildString(String testChildString) {
this.testChildString = testChildString;
}
public Integer getTestAttributeInt() {
return testAttributeInt;
}
public void setTestAttributeInt(Integer testAttributeInt) {
this.testAttributeInt = testAttributeInt;
}
public Integer getTestChildInt() {
return testChildInt;
}
public void setTestChildInt(Integer testChildInt) {
this.testChildInt = testChildInt;
}
public String getTestIgnoredString() {
return testIgnoredString;
}
public void setTestIgnoredString(String testIgnoredString) {
this.testIgnoredString = testIgnoredString;
}
public Boolean getTestYesAttributeBool() {
return testYesAttributeBool;
}
public void setTestYesAttributeBool(Boolean testYesAttributeBool) {
this.testYesAttributeBool = testYesAttributeBool;
}
}

View file

@ -1,29 +0,0 @@
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("withAttrsOnly")
public class ElementWithAttributeOnly {
@XStreamAsAttribute
private String attrStr = "attrStr";
@XStreamAsAttribute
private Long attrLong = Long.MIN_VALUE;
public String getAttrStr() {
return attrStr;
}
public void setAttrStr(String attrStr) {
this.attrStr = attrStr;
}
public Long getAttrLong() {
return attrLong;
}
public void setAttrLong(Long attrLong) {
this.attrLong = attrLong;
}
}

View file

@ -1,37 +0,0 @@
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
public class FormattedLocalDateConverter extends AbstractSingleValueConverter {
private final String DEFAULT_PATTERN = "dd.MM.yyyy";
private final DateTimeFormatter formatter;
public FormattedLocalDateConverter() {
formatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN);
}
public FormattedLocalDateConverter(String pattern) {
formatter = DateTimeFormatter.ofPattern(Objects.requireNonNullElse(pattern, DEFAULT_PATTERN));
}
@Override
public boolean canConvert(Class type) {
return LocalDate.class.isAssignableFrom(type);
}
@Override
public Object fromString(String str) {
// not implemented (not used)
return null;
}
@Override
public String toString(Object obj) {
LocalDate date = (LocalDate) obj;
return date != null ? formatter.format(date) : "";
}
}

View file

@ -1,37 +0,0 @@
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
public class FormattedLocalTimeConverter extends AbstractSingleValueConverter {
private final String DEFAULT_PATTERN = "HH:mm:ss";
private final DateTimeFormatter formatter;
public FormattedLocalTimeConverter() {
formatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN);
}
public FormattedLocalTimeConverter(String pattern) {
formatter = DateTimeFormatter.ofPattern(Objects.requireNonNullElse(pattern, DEFAULT_PATTERN));
}
@Override
public boolean canConvert(Class type) {
return LocalTime.class.isAssignableFrom(type);
}
@Override
public Object fromString(String str) {
// not implemented (not used)
return null;
}
@Override
public String toString(Object obj) {
LocalTime date = (LocalTime) obj;
return date != null ? formatter.format(date) : "";
}
}

View file

@ -1,155 +0,0 @@
package ru.spcex.clearing.reports.xml_test;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@XStreamAlias("root") // alias for classname
public class RootElementForWrite {
@XStreamAlias("string") // alias for field
private String testString = "testString";
private BigDecimal testBigDecimal = new BigDecimal("666.666");
private Double testDouble = Double.MAX_VALUE;
private Long testLong = Long.MIN_VALUE;
private Boolean testBoolean = Boolean.FALSE;
private LocalDate testLocalDateDefault = LocalDate.now();
@XStreamConverter(FormattedLocalDateConverter.class)
private LocalDate testLocalDateCustom = LocalDate.now();
private LocalDateTime testLocalDateTime = LocalDateTime.now();
private OffsetDateTime testOffsetDateTime = OffsetDateTime.now();
private Instant testInstant = Instant.now();
@XStreamAlias("namedList")
private List<ChildElementForWrite> testList = new ArrayList<>();
@XStreamImplicit
private List<ChildElementForWrite> testListTwo = Arrays.asList(new ChildElementForWrite(), new ChildElementForWrite());
// can marshal without getter/setter
private ElementWithAttributeOnly elementWithAttributeOnly = new ElementWithAttributeOnly();
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
public BigDecimal getTestBigDecimal() {
return testBigDecimal;
}
public void setTestBigDecimal(BigDecimal testBigDecimal) {
this.testBigDecimal = testBigDecimal;
}
public Double getTestDouble() {
return testDouble;
}
public void setTestDouble(Double testDouble) {
this.testDouble = testDouble;
}
public Long getTestLong() {
return testLong;
}
public void setTestLong(Long testLong) {
this.testLong = testLong;
}
public Boolean getTestBoolean() {
return testBoolean;
}
public void setTestBoolean(Boolean testBoolean) {
this.testBoolean = testBoolean;
}
public LocalDate getTestLocalDate() {
return testLocalDateCustom;
}
public void setTestLocalDate(LocalDate testLocalDate) {
this.testLocalDateCustom = testLocalDate;
}
public LocalDateTime getTestLocalDateTime() {
return testLocalDateTime;
}
public void setTestLocalDateTime(LocalDateTime testLocalDateTime) {
this.testLocalDateTime = testLocalDateTime;
}
public OffsetDateTime getTestOffsetDateTime() {
return testOffsetDateTime;
}
public void setTestOffsetDateTime(OffsetDateTime testOffsetDateTime) {
this.testOffsetDateTime = testOffsetDateTime;
}
public Instant getTestInstant() {
return testInstant;
}
public void setTestInstant(Instant testInstant) {
this.testInstant = testInstant;
}
public List<ChildElementForWrite> getTestList() {
return testList;
}
public void setTestList(List<ChildElementForWrite> testList) {
this.testList = testList;
}
public List<ChildElementForWrite> getTestListTwo() {
return testListTwo;
}
public void setTestListTwo(List<ChildElementForWrite> testListTwo) {
this.testListTwo = testListTwo;
}
public LocalDate getTestLocalDateDefault() {
return testLocalDateDefault;
}
public void setTestLocalDateDefault(LocalDate testLocalDateDefault) {
this.testLocalDateDefault = testLocalDateDefault;
}
public LocalDate getTestLocalDateCustom() {
return testLocalDateCustom;
}
public void setTestLocalDateCustom(LocalDate testLocalDateCustom) {
this.testLocalDateCustom = testLocalDateCustom;
}
}

View file

@ -1,4 +1,6 @@
reports-service.hazelcast.cluster-members=127.0.0.1:5701
reports-service.hazelcast.login=dev
reports-service.hazelcast.password=dev-pass
reports-service.kafka-consumer.bootstrap-servers=localhost:9092
reports-service.kafka-consumer.group-id=dev-group-balance-service
@ -8,16 +10,11 @@ reports-service.kafka-consumer.auto-offset-reset=latest
reports-service.kafka-consumer.linger-ms=1
reports-service.kafka-consumer.buffer-memory=33554432
#reports-service.kafka-producer.bootstrap-servers=localhost:9092
#reports-service.kafka-producer.acks=all
#reports-service.kafka-producer.retries=0
#reports-service.kafka-producer.batch-size=16384
#reports-service.kafka-producer.linger-ms=1
#reports-service.kafka-producer.buffer-memory=33554432
reports-service.hazelcast.cluster-members=127.0.0.1:5701
#,10.200.200.181:5701
reports-service.hazelcast.login=dev
reports-service.hazelcast.password=dev-pass
reports-service.kafka-producer.bootstrap-servers=localhost:9092
reports-service.kafka-producer.acks=all
reports-service.kafka-producer.retries=0
reports-service.kafka-producer.batch-size=16384
reports-service.kafka-producer.linger-ms=1
reports-service.kafka-producer.buffer-memory=33554432
reports-service.ReportModuleOut=./report_out

View file

@ -0,0 +1,17 @@
package ru.spcex.clearing.reports.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
@Configuration
public class TestConfig {
@Bean
public ReportsServiceSettings reportsServiceSettings() {
ReportsServiceSettings reportsServiceSettings = new ReportsServiceSettings();
reportsServiceSettings.setReportModuleOut("out");
return reportsServiceSettings;
}
}

View file

@ -0,0 +1,924 @@
package ru.spcex.clearing.reports.services;
import com.opencsv.CSVParser;
import com.opencsv.CSVParserBuilder;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import com.opencsv.exceptions.CsvValidationException;
import org.apache.commons.io.FileUtils;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.apache.kafka.clients.producer.Producer;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
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 ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.reports.config.BeanConfiguration;
import ru.spcex.clearing.reports.config.ReportBuildersConfig;
import ru.spcex.clearing.reports.config.TestConfig;
import ru.spcex.clearing.reports.config.validation.ValidationConfig;
import ru.spcex.clearing.test.TestUtils;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {
BeanConfiguration.class,
ValidationConfig.class,
ReportService.class,
ImdgTestConfig.class,
KafkaTestConfig.class,
ReportBuildersConfig.class,
TestConfig.class
})
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ReportServiceTest {
private static File outFolder;
private final ExecutionFond testExecutionFond = new ExecutionFond();
private final ExecutionDeposit testExecutionDeposit = new ExecutionDeposit();
private final Registry testRegistry_1 = new Registry();
private final Registry testRegistry_2 = new Registry();
private final Company testCompany_1 = new Company();
private final Company testCompany_2 = new Company();
private final Company testCompanyHouse = new Company();
private final Registry testRegistryForCompanyId_1 = new Registry();
private final Registry testRegistryForCompanyId_2 = new Registry();
private final Registry tm_tRegistry_1 = new Registry();
private final Registry om_tRegistry_1 = new Registry();
private final Registry ts_tRegistry_1 = new Registry();
private final Registry os_tRegistry_1 = new Registry();
private final Registry tm_tRegistry_2 = new Registry();
private final Registry om_tRegistry_2 = new Registry();
private final Registry ts_tRegistry_2 = new Registry();
private final Registry os_tRegistry_2 = new Registry();
private final Listing testListing_1 = new Listing();
private final Listing testListing_2 = new Listing();
private final FixedIncomeSecurity testFixedIncomeSecurity_1 = new FixedIncomeSecurity();
private final FixedIncomeSecurity testFixedIncomeSecurity_2 = new FixedIncomeSecurity();
private final TradingClearingRegistry testTradingClearingRegistry_1 = new TradingClearingRegistry();
private final TradingClearingRegistry testTradingClearingRegistry_2 = new TradingClearingRegistry();
private final PaymentInstruction testPaymentInstruction_1 = new PaymentInstruction();
private final PaymentInstruction testPaymentInstruction_2 = new PaymentInstruction();
private final Statement testStatement_1 = new Statement();
private final Statement testStatement_2 = new Statement();
private final STrades testSTrade = new STrades();
private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L);
private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L);
private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS);
private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS);
private final String TEST_MARKET_1 = Market.fond.getKey();
private final String TEST_MARKET_2 = Market.mkrs.getKey();
private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L);
private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L);
private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L);
private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L);
private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L);
private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L);
private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L);
private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L);
private final String TEST_SIDE_1 = Side.SELL.getKey();
private final String TEST_SIDE_2 = Side.BUY.getKey();
private final String TEST_COVERAGE_STATUS_1 = Allowed.DENIED.getKey();
private final String TEST_COVERAGE_STATUS_2 = Allowed.ALLOWED.getKey();
private final Long TEST_SESSION_ID_1 = 10007L;
private final Long TEST_SESSION_ID_2 = 10008L;
private final Long TEST_SESSION_ID_3 = 10009L;
private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS);
private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS);
private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L);
private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS);
private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS);
private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L);
private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L);
private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS);
private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS);
private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L);
private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L);
private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L);
private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L);
private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L);
private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L);
private final BigDecimal TEST_OPEN_BALANCE_1 = BigDecimal.valueOf(3L);
private final BigDecimal TEST_CLOSE_BALANCE_1 = BigDecimal.valueOf(780L);
private final BigDecimal TEST_OPEN_BALANCE_2 = BigDecimal.valueOf(2L);
private final BigDecimal TEST_CLOSE_BALANCE_2 = BigDecimal.valueOf(890L);
private final BigDecimal TEST_CREDIT_1 = BigDecimal.valueOf(777777L);
private final BigDecimal TEST_CREDIT_2 = BigDecimal.valueOf(999999L);
private final BigDecimal TEST_DEBIT_1 = BigDecimal.valueOf(77777L);
private final BigDecimal TEST_DEBIT_2 = BigDecimal.valueOf(99999L);
private final LocalDate TEST_START_CLEARING_DATE = LocalDate.now();
private final LocalDate TEST_END_CLEARING_DATE = LocalDate.now();
private Imdg<ExecutionFond> executionFondImdg;
private Imdg<ExecutionDeposit> executionDepositImdg;
private Imdg<Company> companyImdg;
private Imdg<Registry> registryImdg;
private Imdg<Listing> listingImdg;
private Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private Imdg<PaymentInstruction> paymentInstructionImdg;
private Imdg<Statement> statementImdg;
private Imdg<STrades> sTradeImdg;
@Autowired
private ReportService reportService;
@Autowired
@Qualifier("hazelcastServiceTest")
private ImdgProvider imdgProvider;
@Autowired
@Qualifier("mockProducer")
private Producer<String, Object> producer;
private static int reportRequestCnt = 0;
private static int reportRequestWithSessionIdCnt = 0;
private static int reportRequestWithSessionIdListCnt = 0;
private static int reportRequestWithPeriodCnt = 0;
@BeforeAll
public static void createTestFolder() {
outFolder = new File("out");
outFolder.mkdir();
}
@AfterAll
public static void deleteTestFolder() throws IOException {
FileUtils.deleteDirectory(outFolder);
}
@Test
@Order(1)
public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws IOException, CsvValidationException {
clearTestDir();
final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId();
final Long oldSessionIdFond = testExecutionFond.getSessionId();
ReportRequestWithSessionId reportRequestWithSessionId = new ReportRequestWithSessionId();
reportRequestWithSessionId.setReportId(ReportType.OPERATIONAL_LIABILITIES_CLAIMS.getKey());
reportRequestWithSessionId.setSessionId(TEST_SESSION_ID_1);
testExecutionDeposit.setSessionId(TEST_SESSION_ID_1);
testExecutionFond.setSessionId(TEST_SESSION_ID_1);
executionDepositImdg.update(testExecutionDeposit);
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithSessionId, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_liabilities_claims_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date"));
testExecutionDeposit.setSessionId(oldSessionIdDeposit);
testExecutionFond.setSessionId(oldSessionIdFond);
executionDepositImdg.update(testExecutionDeposit);
executionFondImdg.update(testExecutionFond);
outFile.delete();
}
@Test
@Order(2)
public void createReportTest_PERIOD_LIABILITIES_CLAIMS() throws CsvValidationException, IOException {
clearTestDir();
ReportRequestWithSessionIdList reportRequestWithPeriod = new ReportRequestWithSessionIdList();
reportRequestWithPeriod.setReportId(ReportType.PERIOD_LIABILITIES_CLAIMS.getKey());
reportRequestWithPeriod.setSessionIdList(Arrays.asList(testExecutionDeposit.getSessionId(), testExecutionFond.getSessionId()));
String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithPeriod, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID_LIST,
reportRequestWithSessionIdListCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_liabilities_claims_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date"));
outFile.delete();
}
@Test
@Order(3)
public void createReportTest_SUMMARY_LIABILITIES_CLAIMS() throws CsvValidationException, IOException {
clearTestDir();
ReportRequest reportRequest = new ReportRequest();
reportRequest.setReportId(ReportType.SUMMARY_LIABILITIES_CLAIMS.getKey());
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT,
reportRequestCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_liabilities_claims_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date"));
outFile.delete();
}
@Test
@Order(4)
public void createReportTest_OPERATIONAL_MONEY_CHANGE() throws CsvValidationException, IOException {
clearTestDir();
final Long oldRegistrySessionId_1 = testRegistry_1.getSessionId();
final Long oldRegistrySessionId_2 = testRegistry_2.getSessionId();
testRegistry_1.setSessionId(TEST_SESSION_ID_3);
testRegistry_2.setSessionId(TEST_SESSION_ID_3);
registryImdg.update(testRegistry_1);
registryImdg.update(testRegistry_2);
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.OPERATIONAL_MONEY_CHANGE.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_money_change_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time"));
testRegistry_1.setSessionId(oldRegistrySessionId_1);
testRegistry_2.setSessionId(oldRegistrySessionId_2);
registryImdg.update(testRegistry_1);
registryImdg.update(testRegistry_2);
outFile.delete();
}
@Test
@Order(5)
public void createReportTest_PERIOD_MONEY_CHANGE() throws CsvValidationException, IOException {
clearTestDir();
ReportRequestWithPeriod reportRequest = new ReportRequestWithPeriod();
reportRequest.setReportId(ReportType.PERIOD_MONEY_CHANGE.getKey());
reportRequest.setStartDate(TEST_START_CLEARING_DATE);
reportRequest.setEndDate(TEST_END_CLEARING_DATE);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_PERIOD,
reportRequestWithPeriodCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_money_change_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time"));
outFile.delete();
}
@Test
@Order(6)
public void createReportTest_SUMMARY_MONEY_CHANGE() throws CsvValidationException, IOException {
clearTestDir();
ReportRequest reportRequest = new ReportRequest();
reportRequest.setReportId(ReportType.SUMMARY_MONEY_CHANGE.getKey());
TestUtils.clearAllInImdg(registryImdg);
registryImdg.insert(testRegistry_1);
registryImdg.insert(testRegistry_2);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT,
reportRequestCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_money_change_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time"));
registryImdg.insert(testRegistryForCompanyId_1);
registryImdg.insert(testRegistryForCompanyId_2);
registryImdg.insert(tm_tRegistry_1);
registryImdg.insert(om_tRegistry_1);
registryImdg.insert(ts_tRegistry_1);
registryImdg.insert(os_tRegistry_1);
registryImdg.insert(tm_tRegistry_2);
registryImdg.insert(om_tRegistry_2);
registryImdg.insert(ts_tRegistry_2);
registryImdg.insert(os_tRegistry_2);
registryImdg.insert(testRegistry_1);
registryImdg.insert(testRegistry_2);
outFile.delete();
}
@Test
@Order(7)
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_1() throws CsvValidationException, IOException {
clearTestDir();
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile());
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
final Long oldExecutionFondSessionId = testExecutionFond.getSessionId();
final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate();
final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate();
final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus();
testExecutionFond.setSessionId(TEST_SESSION_ID_3);
executionFondImdg.update(testExecutionFond);
// TEST INFTYPE_1
testExecutionFond.setTradingDate(LocalDate.now().minus(10, ChronoUnit.DAYS));
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
compareCSVFiles(expectedEmptyFile, file, null);
}
FileUtils.delete(file);
}
testExecutionFond.setSessionId(oldExecutionFondSessionId);
testExecutionFond.setTradingDate(oldExecutionFondTradingDate);
testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate);
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
executionFondImdg.update(testExecutionFond);
}
@Test
@Order(8)
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_2() throws CsvValidationException, IOException {
clearTestDir();
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile());
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
final Long oldExecutionFondSessionId = testExecutionFond.getSessionId();
final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate();
final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate();
final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus();
testExecutionFond.setSessionId(TEST_SESSION_ID_3);
executionFondImdg.update(testExecutionFond);
// TEST INFTYPE_2
testExecutionFond.setTradingDate(LocalDate.now());
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
compareCSVFiles(expectedEmptyFile, file, null);
}
FileUtils.delete(file);
}
testExecutionFond.setSessionId(oldExecutionFondSessionId);
testExecutionFond.setTradingDate(oldExecutionFondTradingDate);
testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate);
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
executionFondImdg.update(testExecutionFond);
}
@Test
@Order(9)
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_3() throws CsvValidationException, IOException {
clearTestDir();
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile());
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
final Long oldExecutionFondSessionId = testExecutionFond.getSessionId();
final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate();
final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate();
final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus();
// TEST INFTYPE_3
testExecutionFond.setSettlementDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
compareCSVFiles(expectedEmptyFile, file, null);
}
FileUtils.delete(file);
}
testExecutionFond.setSessionId(oldExecutionFondSessionId);
testExecutionFond.setTradingDate(oldExecutionFondTradingDate);
testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate);
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
executionFondImdg.update(testExecutionFond);
}
@Test
@Order(10)
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_4() throws CsvValidationException, IOException {
clearTestDir();
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile());
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
final Long oldExecutionFondSessionId = testExecutionFond.getSessionId();
final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate();
final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate();
final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus();
// TEST INFTYPE_4
testExecutionFond.setSessionId(TEST_SESSION_ID_1);
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey());
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
compareCSVFiles(expectedEmptyFile, file, null);
}
FileUtils.delete(file);
}
testExecutionFond.setSessionId(oldExecutionFondSessionId);
testExecutionFond.setTradingDate(oldExecutionFondTradingDate);
testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate);
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
executionFondImdg.update(testExecutionFond);
}
@Test
@Order(11)
public void createReportTest_UNFULFILLED_DEAL_REPORT() throws IOException, CsvValidationException {
clearTestDir();
ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId();
reportRequest.setReportId(ReportType.UNFULFILLED_DEAL_REPORT.getKey());
reportRequest.setSessionId(TEST_SESSION_ID_3);
final Long oldExecutionFondSessionId = testExecutionFond.getSessionId();
final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus();
testExecutionFond.setSessionId(TEST_SESSION_ID_3);
testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey());
executionFondImdg.update(testExecutionFond);
final String oldSTradeSettleCode = testSTrade.getSettleCode();
final String oldSTradeOperation = testSTrade.getOperation();
testSTrade.setSettleCode(testExecutionFond.getSettlementCode());
testSTrade.setOperation(testExecutionFond.getSide());
sTradeImdg.update(testSTrade);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
Consts.CREATE_REPORT_FOR_SESSION_ID,
reportRequestWithSessionIdCnt++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/unfulfilled_deal_report_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate"));
testExecutionFond.setSessionId(oldExecutionFondSessionId);
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
executionFondImdg.update(testExecutionFond);
testSTrade.setSettleCode(oldSTradeSettleCode);
testSTrade.setOperation(oldSTradeOperation);
sTradeImdg.update(testSTrade);
}
private void compareCSVFiles(File expectedFile, File actualFile, List<String> columnsForSkip) throws IOException, CsvValidationException {
if (columnsForSkip == null) columnsForSkip = Collections.emptyList();
CSVParser csvParser = new CSVParserBuilder().withSeparator(',').withQuoteChar('\"').build();
CSVReader expectedCSVReader = new CSVReaderBuilder(new FileReader(expectedFile)).withCSVParser(csvParser).build();
CSVReader actualCSVReader = new CSVReaderBuilder(new FileReader(actualFile)).withCSVParser(csvParser).build();
Map<String, Integer> expectedValueForColumn = new HashMap<>();
Map<String, Integer> actualValueForColumn = new HashMap<>();
String[] expectedHeaders = expectedCSVReader.readNext();
String[] actualHeaders = actualCSVReader.readNext();
assertEquals(expectedHeaders.length, actualHeaders.length);
for (int headerIdx = 0; headerIdx < expectedHeaders.length; headerIdx++) {
String expectedHeader = expectedHeaders[headerIdx];
String actualHeader = actualHeaders[headerIdx];
if (!columnsForSkip.contains(expectedHeader)) expectedValueForColumn.put(expectedHeader, headerIdx);
if (!columnsForSkip.contains(actualHeader)) actualValueForColumn.put(actualHeader, headerIdx);
}
do {
String[] expectedLines = expectedCSVReader.readNext();
String[] actualLines = actualCSVReader.readNext();
if (expectedLines == null || actualLines == null) {
if (expectedLines == null && actualLines == null) {
break;
}
Assertions.fail("expected and actual lines not equal");
}
for (String expectedHeader : expectedValueForColumn.keySet()) {
int expectedIdx = expectedValueForColumn.get(expectedHeader);
int actualIdx = actualValueForColumn.get(expectedHeader);
String expected = expectedLines[expectedIdx];
String actual = actualLines[actualIdx];
assertEquals(expected, actual, expectedHeader);
}
} while (true);
expectedCSVReader.close();
actualCSVReader.close();
}
@PostConstruct
private void init() {
ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId();
Long TEST_EXECUTION_FOND_ID = 888L;
testExecutionFond.setId(TEST_EXECUTION_FOND_ID);
Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L;
testExecutionFond.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_1);
testExecutionFond.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_1);
testExecutionFond.setTradingDate(TEST_TRADING_DATE_1);
Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L;
testExecutionFond.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_1);
testExecutionFond.setMarket(TEST_MARKET_1);
testExecutionFond.setPrice(TEST_PRICE_1);
testExecutionFond.setLots(TEST_LOTS_1);
testExecutionFond.setQuantity(TEST_QUANTITY_1);
testExecutionFond.setInterestAmount(TEST_INTEREST_AMOUNT_1);
testExecutionFond.setSide(TEST_SIDE_1);
String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1";
testExecutionFond.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_1);
Long TEST_COMPANY_ID_1 = 1007L;
testExecutionFond.setCompanyId(TEST_COMPANY_ID_1);
Long TEST_DURATION_1 = 2007L;
testExecutionFond.setDuration(TEST_DURATION_1);
String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1";
testExecutionFond.setSecurityFullName(TEST_SECURITY_FULL_NAME_1);
String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1";
testExecutionFond.setSecuritySymbol(TEST_SECURITY_SYMBOL_1);
Long TEST_SECURITY_ID_1 = 3007L;
testExecutionFond.setSecurityId(TEST_SECURITY_ID_1);
Long TEST_COUNTER_PARTY_ID_1 = 4007L;
testExecutionFond.setCounterPartyId(TEST_COUNTER_PARTY_ID_1);
testExecutionFond.setCoverageStatus(TEST_COVERAGE_STATUS_1);
testExecutionFond.setSessionId(TEST_SESSION_ID_1);
testExecutionFond.setClearingDate(TEST_CLEARING_DATE_1);
Long TEST_EXCHANGE_ORDER_ID = 20007L;
testExecutionFond.setExchangeOrderId(TEST_EXCHANGE_ORDER_ID);
testExecutionFond.setSettlementAmount(TEST_SETTLEMENT_AMOUNT);
String TEST_COMMENT = "test-comment";
testExecutionFond.setComment(TEST_COMMENT);
Long TEST_CLIENT_CODE_ID = 222222L;
testExecutionFond.setClientCodeId(TEST_CLIENT_CODE_ID);
String TEST_SETTLEMENT_CODE = "test-settlement-code";
testExecutionFond.setSettlementCode(TEST_SETTLEMENT_CODE);
testExecutionFond.setSettlementDate(TEST_SETTLEMENT_DATE);
testExecutionFond.setExchangeExecutionMicroseconds(TEST_EXCHANGE_EXECUTION_MICROSECONDS);
testExecutionFond.setCreated(Instant.now());
Long TEST_EXECUTION_DEPOSIT_ID = 777L;
testExecutionDeposit.setId(TEST_EXECUTION_DEPOSIT_ID);
Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L;
testExecutionDeposit.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_2);
testExecutionDeposit.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_2);
testExecutionDeposit.setTradingDate(TEST_TRADING_DATE_2);
Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L;
testExecutionDeposit.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_2);
testExecutionDeposit.setMarket(TEST_MARKET_2);
testExecutionDeposit.setPrice(TEST_PRICE_2);
testExecutionDeposit.setLots(TEST_LOTS_2);
testExecutionDeposit.setQuantity(TEST_QUANTITY_2);
testExecutionDeposit.setInterestAmount(TEST_INTEREST_AMOUNT_2);
testExecutionDeposit.setSide(TEST_SIDE_2);
String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2";
testExecutionDeposit.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_2);
Long TEST_COMPANY_ID_2 = 1008L;
testExecutionDeposit.setCompanyId(TEST_COMPANY_ID_2);
Long TEST_DURATION_2 = 2008L;
testExecutionDeposit.setDuration(TEST_DURATION_2);
String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2";
testExecutionDeposit.setSecurityFullName(TEST_SECURITY_FULL_NAME_2);
String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2";
testExecutionDeposit.setSecuritySymbol(TEST_SECURITY_SYMBOL_2);
Long TEST_SECURITY_ID_2 = 3008L;
testExecutionDeposit.setSecurityId(TEST_SECURITY_ID_2);
Long TEST_COUNTER_PARTY_ID_2 = 4008L;
testExecutionDeposit.setCounterPartyId(TEST_COUNTER_PARTY_ID_2);
testExecutionDeposit.setCoverageStatus(TEST_COVERAGE_STATUS_2);
testExecutionDeposit.setSessionId(TEST_SESSION_ID_2);
testExecutionDeposit.setClearingDate(TEST_CLEARING_DATE_2);
testExecutionDeposit.setFirstLegAmount(TEST_FIRST_LEG_AMOUNT);
testExecutionDeposit.setSecondLegAmount(TEST_SECOND_LEG_AMOUNT);
testExecutionDeposit.setFirstLegSettlementDate(TEST_FIRST_LEG_SETTLEMENT_DATE);
testExecutionDeposit.setSecondLegSettlementDate(TEST_SECOND_LEG_SETTLEMENT_DATE);
String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code";
testExecutionDeposit.setFirstLegSettlementCode(TEST_FIRST_LEG_SETTLEMENT_CODE);
String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code";
testExecutionDeposit.setSecondLegSettlementCode(TEST_SECOND_LEG_SETTLEMENT_CODE);
String TEST_CONTRACT = "test_contract";
testExecutionDeposit.setContract(TEST_CONTRACT);
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
executionFondImdg.insert(testExecutionFond);
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
executionDepositImdg.insert(testExecutionDeposit);
testCompany_1.setWorkflowStatus(WorkflowStatus.Active.getKey());
testCompany_1.setId(TEST_COMPANY_ID_1);
String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1";
testCompany_1.setFullName(TEST_COMPANY_FULLNAME_1);
testCompany_2.setWorkflowStatus(WorkflowStatus.Active.getKey());
testCompany_2.setId(TEST_COMPANY_ID_2);
String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2";
testCompany_2.setFullName(TEST_COMPANY_FULLNAME_2);
testCompanyHouse.setId(1L);
testCompanyHouse.setFullName("COMPANY_HOUSE");
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
companyImdg.insert(testCompany_1);
companyImdg.insert(testCompany_2);
companyImdg.insert(testCompanyHouse);
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
Long TEST_REGISTRY_ID_1 = 999L;
testRegistry_1.setId(TEST_REGISTRY_ID_1);
testRegistry_1.setCompanyId(TEST_COMPANY_ID_1);
testRegistry_1.setSecurityId(TEST_SECURITY_ID_1);
Long TEST_PAYMT_ID_1 = 222L;
testRegistry_1.setPaymentId(TEST_PAYMT_ID_1);
String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1";
testRegistry_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1);
Long TEST_MONEY_ACCOUNT_1 = 11L;
testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1);
String TEST_REGISTRY_CODE_1 = "test-registry-code-1";
testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1);
testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1);
testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1);
testRegistry_1.setCredit(TEST_CREDIT_1);
testRegistry_1.setDebit(TEST_DEBIT_1);
testRegistry_1.setClearingDate(TEST_START_CLEARING_DATE);
testRegistry_1.setUpdated(Instant.now());
Long TEST_REGISTRY_ID_2 = 666L;
testRegistry_2.setId(TEST_REGISTRY_ID_2);
testRegistry_2.setCompanyId(TEST_COMPANY_ID_2);
testRegistry_2.setSecurityId(TEST_SECURITY_ID_2);
Long TEST_PAYMT_ID_2 = 333L;
testRegistry_2.setPaymentId(TEST_PAYMT_ID_2);
String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2";
testRegistry_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2);
Long TEST_MONEY_ACCOUNT_2 = 12L;
testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2);
String TEST_REGISTRY_CODE_2 = "test-registry-code-2";
testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2);
testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2);
testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2);
testRegistry_2.setCredit(TEST_CREDIT_2);
testRegistry_2.setDebit(TEST_DEBIT_2);
testRegistry_2.setClearingDate(TEST_END_CLEARING_DATE);
testRegistry_2.setUpdated(Instant.now());
testRegistryForCompanyId_1.setCompanyId(TEST_COMPANY_ID_1);
testRegistryForCompanyId_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1);
testRegistryForCompanyId_1.setUpdated(Instant.now());
testRegistryForCompanyId_2.setCompanyId(TEST_COMPANY_ID_2);
testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2);
testRegistryForCompanyId_2.setUpdated(Instant.now());
tm_tRegistry_1.setRegistryCode("TM_T");
tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L));
tm_tRegistry_1.setUpdated(Instant.now());
om_tRegistry_1.setRegistryCode("OM_T");
om_tRegistry_1.setBalance(BigDecimal.valueOf(2L));
om_tRegistry_1.setUpdated(Instant.now());
ts_tRegistry_1.setRegistryCode("TS_T");
ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L));
ts_tRegistry_1.setUpdated(Instant.now());
os_tRegistry_1.setRegistryCode("OS_T");
os_tRegistry_1.setBalance(BigDecimal.valueOf(1L));
os_tRegistry_1.setUpdated(Instant.now());
tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
om_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
os_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
tm_tRegistry_2.setRegistryCode("TM_T");
tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L));
tm_tRegistry_2.setUpdated(Instant.now());
om_tRegistry_2.setRegistryCode("OM_T");
om_tRegistry_2.setBalance(BigDecimal.valueOf(2L));
om_tRegistry_2.setUpdated(Instant.now());
ts_tRegistry_2.setRegistryCode("TS_T");
ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L));
ts_tRegistry_2.setUpdated(Instant.now());
os_tRegistry_2.setRegistryCode("OS_T");
os_tRegistry_2.setBalance(BigDecimal.valueOf(1L));
os_tRegistry_2.setUpdated(Instant.now());
tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2);
om_tRegistry_2.setSessionId(TEST_SESSION_ID_2);
ts_tRegistry_2.setSessionId(TEST_SESSION_ID_2);
os_tRegistry_2.setSessionId(TEST_SESSION_ID_2);
registryImdg.insert(testRegistryForCompanyId_1);
registryImdg.insert(testRegistryForCompanyId_2);
registryImdg.insert(tm_tRegistry_1);
registryImdg.insert(om_tRegistry_1);
registryImdg.insert(ts_tRegistry_1);
registryImdg.insert(os_tRegistry_1);
registryImdg.insert(tm_tRegistry_2);
registryImdg.insert(om_tRegistry_2);
registryImdg.insert(ts_tRegistry_2);
registryImdg.insert(os_tRegistry_2);
registryImdg.insert(testRegistry_1);
registryImdg.insert(testRegistry_2);
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
testListing_1.setSecurityId(TEST_SECURITY_ID_1);
testListing_1.setLotSize(TEST_LOT_SIZE_1);
String TEST_TRADING_CURRENCY_1 = "test-trading-currency-1";
testListing_1.setTradingCurrency(TEST_TRADING_CURRENCY_1);
testListing_2.setSecurityId(TEST_SECURITY_ID_2);
testListing_2.setLotSize(TEST_LOT_SIZE_2);
String TEST_TRADING_CURRENCY_2 = "test-trading-currency-2";
testListing_2.setTradingCurrency(TEST_TRADING_CURRENCY_2);
listingImdg.insert(testListing_1);
listingImdg.insert(testListing_2);
testFixedIncomeSecurity_1.setSecurityId(TEST_SECURITY_ID_1);
testFixedIncomeSecurity_1.setNominalValue(TEST_NOMINAL_1);
testFixedIncomeSecurity_1.setCoupon(TEST_COUPON_1);
testFixedIncomeSecurity_2.setSecurityId(TEST_SECURITY_ID_2);
testFixedIncomeSecurity_2.setNominalValue(TEST_NOMINAL_2);
testFixedIncomeSecurity_2.setCoupon(TEST_COUPON_2);
fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_1);
fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_2);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
testTradingClearingRegistry_1.setId(TEST_TRADING_CLEARING_REGISTRY_ID_1);
testTradingClearingRegistry_1.setMoneyAccountId(TEST_MONEY_ACCOUNT_1);
Long TEST_DEPO_ACCOUNT_1 = 13L;
testTradingClearingRegistry_1.setDepoAccountId(TEST_DEPO_ACCOUNT_1);
tradingClearingRegistryImdg.insert(testTradingClearingRegistry_1);
testTradingClearingRegistry_2.setId(TEST_TRADING_CLEARING_REGISTRY_ID_2);
testTradingClearingRegistry_2.setMoneyAccountId(TEST_MONEY_ACCOUNT_2);
Long TEST_DEPO_ACCOUNT_2 = 14L;
testTradingClearingRegistry_2.setDepoAccountId(TEST_DEPO_ACCOUNT_2);
tradingClearingRegistryImdg.insert(testTradingClearingRegistry_2);
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
testStatement_1.setAddresseeId(TEST_COMPANY_ID_1);
testStatement_1.setCreated(Instant.now());
testStatement_2.setAddresseeId(TEST_COMPANY_ID_2);
testStatement_2.setCreated(Instant.now());
statementImdg.insert(testStatement_1);
statementImdg.insert(testStatement_2);
paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
testPaymentInstruction_1.setId(TEST_PAYMT_ID_1);
testPaymentInstruction_1.setCreditLeg_direction(InOutDirection.out.getKey());
testPaymentInstruction_1.setPaymentDate(Instant.now());
testPaymentInstruction_2.setId(TEST_PAYMT_ID_2);
testPaymentInstruction_2.setCreditLeg_direction(InOutDirection.out.getKey());
testPaymentInstruction_2.setPaymentDate(Instant.now());
paymentInstructionImdg.insert(testPaymentInstruction_1);
paymentInstructionImdg.insert(testPaymentInstruction_2);
sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
testSTrade.setTradeNum(testExecutionFond.getExchangeExecutionId());
testSTrade.setOperation(testExecutionFond.getSide());
String TEST_SETTLE_CODE = "test-settle-code";
testSTrade.setSettleCode(TEST_SETTLE_CODE);
String TEST_CLASS_CODE = "test-class-code";
testSTrade.setClassCode(TEST_CLASS_CODE);
sTradeImdg.insert(testSTrade);
}
private void clearTestDir() throws IOException {
FileUtils.deleteDirectory(outFolder);
outFolder.mkdir();
}
}

View file

@ -0,0 +1,2 @@
id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
"888","3007","777","07.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777"
1 id securityId tradeNo tradeDate tradeTime settleDate settleCode price quanity value
2 888 3007 777 07.05.2023 17.05.2023 17.05.2023 test-settle-code 1000 7777 7777777

View file

@ -0,0 +1,2 @@
id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
"888","3007","777","17.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777"
1 id securityId tradeNo tradeDate tradeTime settleDate settleCode price quanity value
2 888 3007 777 17.05.2023 17.05.2023 17.05.2023 test-settle-code 1000 7777 7777777

View file

@ -0,0 +1,2 @@
id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
"888","3007","777","27.05.2023","17.05.2023","27.05.2023","test-settle-code","1000","7777","7777777"
1 id securityId tradeNo tradeDate tradeTime settleDate settleCode price quanity value
2 888 3007 777 27.05.2023 17.05.2023 27.05.2023 test-settle-code 1000 7777 7777777

View file

@ -0,0 +1,2 @@
id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
"888","3007","777","27.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777"
1 id securityId tradeNo tradeDate tradeTime settleDate settleCode price quanity value
2 888 3007 777 27.05.2023 17.05.2023 17.05.2023 test-settle-code 1000 7777 7777777

View file

@ -0,0 +1 @@
id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
1 id securityId tradeNo tradeDate tradeTime settleDate settleCode price quanity value

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto
"888","16.05.2023","20:45:22","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","16.04.2023","16.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","06.05.2023","24.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888"
"777","16.05.2023","20:45:25","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10007","06.04.2023","06.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","26.04.2023","14.05.2023","Y","14.05.2023","88","","34","888","","1","","","","","1","","777","888"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName session_id clearing_date clearing_time trdAccId account depo_account currency tr_id securityId tr_buySell tr_date tr_execDate exec_status repaym_date tr_price nominal lot_value tr_lot tr_quantity tr_value tr_accruedint accruedint tr_clrComm tr_exhComm cash_liability depo_liability cash_netto depo_netto
2 888 16.05.2023 20:45:22 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1007 test-company-fullname-1 10007 16.04.2023 16.04.2023 test-trading-clearing-registry-1 11 13 test-settlement-currency-1 777 3007 S 06.05.2023 24.04.2023 1000 333 12 777 7777 7777777 3333 0 7777777 7777 777 888
3 777 16.05.2023 20:45:25 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1008 test-company-fullname-2 10007 06.04.2023 06.04.2023 test-trading-clearing-registry-2 12 14 test-settlement-currency-2 888 3008 B 26.04.2023 14.05.2023 Y 14.05.2023 88 34 888 1 1 777 888

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time
"999","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:10:50","77777","17.05.2023T12:10:50"
"666","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:10:50","99999","17.05.2023T12:10:50"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName trdAccId account currency registry_code registry_name open_balance change_balance add_withdraw close_balance remarks add_sum add_time withdraw_sum withdraw_time
2 999 17.05.2023 12:10:51 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1007 test-company-fullname-1 test-trading-clearing-registry-1 11 test-trading-currency-1 999 test-registry-code-1 3 777 700000 780 777777 17.05.2023T12:10:50 77777 17.05.2023T12:10:50
3 666 17.05.2023 12:10:51 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1008 test-company-fullname-2 test-trading-clearing-registry-2 12 test-trading-currency-2 666 test-registry-code-2 2 888 900000 890 999999 17.05.2023T12:10:50 99999 17.05.2023T12:10:50

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto
"888","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888"
"777","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023","Y","15.05.2023","88","","34","888","","1","","","","","1","","777","888"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName session_id clearing_date clearing_time trdAccId account depo_account currency tr_id securityId tr_buySell tr_date tr_execDate exec_status repaym_date tr_price nominal lot_value tr_lot tr_quantity tr_value tr_accruedint accruedint tr_clrComm tr_exhComm cash_liability depo_liability cash_netto depo_netto
2 888 17.05.2023 10:51:13 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1007 test-company-fullname-1 10007 17.04.2023 17.04.2023 test-trading-clearing-registry-1 11 13 test-settlement-currency-1 777 3007 S 07.05.2023 25.04.2023 1000 333 12 777 7777 7777777 3333 0 7777777 7777 777 888
3 777 17.05.2023 10:51:13 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1008 test-company-fullname-2 10008 07.04.2023 07.04.2023 test-trading-clearing-registry-2 12 14 test-settlement-currency-2 888 3008 B 27.04.2023 15.05.2023 Y 15.05.2023 88 34 888 1 1 777 888

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time
"999","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:18:01","77777","17.05.2023T12:18:01"
"666","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:18:01","99999","17.05.2023T12:18:01"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName trdAccId account currency registry_code registry_name open_balance change_balance add_withdraw close_balance remarks add_sum add_time withdraw_sum withdraw_time
2 999 17.05.2023 12:18:01 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1007 test-company-fullname-1 test-trading-clearing-registry-1 11 test-trading-currency-1 999 test-registry-code-1 3 777 700000 780 777777 17.05.2023T12:18:01 77777 17.05.2023T12:18:01
3 666 17.05.2023 12:18:01 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1008 test-company-fullname-2 test-trading-clearing-registry-2 12 test-trading-currency-2 666 test-registry-code-2 2 888 900000 890 999999 17.05.2023T12:18:01 99999 17.05.2023T12:18:01

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto
888,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888"
777,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023",Y,"15.05.2023","88","","34","888","","1","","","","","1","","777","888"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName session_id clearing_date clearing_time trdAccId account depo_account currency tr_id securityId tr_buySell tr_date tr_execDate exec_status repaym_date tr_price nominal lot_value tr_lot tr_quantity tr_value tr_accruedint accruedint tr_clrComm tr_exhComm cash_liability depo_liability cash_netto depo_netto
2 888 17.05.2023 10:58:08 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1007 test-company-fullname-1 10007 17.04.2023 17.04.2023 test-trading-clearing-registry-1 11 13 test-settlement-currency-1 777 3007 S 07.05.2023 25.04.2023 1000 333 12 777 7777 7777777 3333 0 7777777 7777 777 888
3 777 17.05.2023 10:58:08 Отчет об обязательствах/требованиях Участника клиринга KS_FIRMID_LIABILITIES COMPANY_HOUSE 1008 test-company-fullname-2 10008 07.04.2023 07.04.2023 test-trading-clearing-registry-2 12 14 test-settlement-currency-2 888 3008 B 27.04.2023 15.05.2023 Y 15.05.2023 88 34 888 1 1 777 888

View file

@ -0,0 +1,3 @@
id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time
"999","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:25:42","77777","17.05.2023T12:25:42"
"666","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:25:42","99999","17.05.2023T12:25:42"
1 id doc_date doc_time doc_name doc_type clearingHouse firmId firName trdAccId account currency registry_code registry_name open_balance change_balance add_withdraw close_balance remarks add_sum add_time withdraw_sum withdraw_time
2 999 17.05.2023 12:25:42 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1007 test-company-fullname-1 test-trading-clearing-registry-1 11 test-trading-currency-1 999 test-registry-code-1 3 777 700000 780 777777 17.05.2023T12:25:42 77777 17.05.2023T12:25:42
3 666 17.05.2023 12:25:42 Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга KS_FIRMID_ASSETS COMPANY_HOUSE 1008 test-company-fullname-2 test-trading-clearing-registry-2 12 test-trading-currency-2 666 test-registry-code-2 2 888 900000 890 999999 17.05.2023T12:25:42 99999 17.05.2023T12:25:42

View file

@ -0,0 +1,2 @@
id,securityId,tradeNo,tradeDate,settleCode
"888","3007","777","07.05.2023","test-class-code"
1 id securityId tradeNo tradeDate settleCode
2 888 3007 777 07.05.2023 test-class-code

View file

@ -135,6 +135,10 @@ public class TestUtils {
return getJsonBaseRequest(accountRequest, id, ActionType.DELETE);
}
public static <T> String getJsonStringForSystem(T request, long id) {
return getJsonBaseRequest(request, id, ActionType.SYSTEM);
}
private static <T> String getJsonBaseRequest(T accountRequest, long id, ActionType actionType) {
BaseRequest<T> baseRequest = new BaseRequest<>();
baseRequest.setRequestPayload(accountRequest);

View file

@ -0,0 +1,31 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
/**
* Идентификатор отчета
* todo сделать для них dictionary
*/
public enum ReportType implements IEnumKey {
OPERATIONAL_LIABILITIES_CLAIMS("operational-liabilities-claims"),
OPERATIONAL_MONEY_CHANGE("operational-money-change"),
SUMMARY_LIABILITIES_CLAIMS("summary-liabilities-claims"),
SUMMARY_MONEY_CHANGE("summary-money-change"),
PERIOD_LIABILITIES_CLAIMS("period-liabilities-claims"),
PERIOD_MONEY_CHANGE("period-money-change"),
EXECUTED_DEAL_REPORT("executed-deal-report"),
UNFULFILLED_DEAL_REPORT("unfulfilled-deal-report"),
;
private final String key;
ReportType(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}

Some files were not shown because too many files have changed in this diff Show more