akulikov 2023-10-04 17:52:19 +03:00
parent c10e41b29e
commit a9ef98f4da
9 changed files with 63 additions and 31 deletions

View file

@ -2,11 +2,11 @@ package ru.spcex.clearing.reports.builders.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.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.bean.ExecutedDealReport;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
@ -14,29 +14,23 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilder<P, ExecutedDealReport> {
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
protected final Imdg<ExecutionFond> executionFondImdg;
protected final Imdg<Session> sessionImdg;
private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
protected final Imdg<Company> companyImdg;
protected final ReportsServiceSettings reportsServiceSettings;
private final String[] headers = {
"securityId", "tradeNo", "tradeDate", "tradeTime",
"settleDate", "settleCode", "price", "quanity", "value"
};
private List<ExecutedDealReport> lines = null;
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) {
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider, ReportsServiceSettings reportsServiceSettings) {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
this.reportsServiceSettings = reportsServiceSettings;
}
@Override

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.builders.bp;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.CoverageStatus;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.ReportKeys;
@ -16,8 +17,9 @@ import java.util.Collection;
@Component
public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) {
super(imdgProvider);
public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider,
ReportsServiceSettings reportsServiceSettings) {
super(imdgProvider, reportsServiceSettings);
}
@Override
@ -42,7 +44,8 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild
pb.equals("side", Side.SELL.getKey()),
pb.equals("side", MoneyFlowSide.SELL.getKey())
),
pb.equals("coverageStatus", CoverageStatus.ALWD)
pb.equals("coverageStatus", CoverageStatus.ALWD),
pb.in("market", reportsServiceSettings.getBfxClassCodes().toArray(new String[0]))
)
);
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.builders.bp;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.CoverageStatus;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.ReportKeys;
@ -16,8 +17,9 @@ import java.util.Collection;
@Component
public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) {
super(imdgProvider);
public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider,
ReportsServiceSettings reportsServiceSettings) {
super(imdgProvider, reportsServiceSettings);
}
@Override
@ -42,7 +44,8 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild
pb.equals("side", Side.SELL.getKey()),
pb.equals("side", MoneyFlowSide.SELL.getKey())
),
pb.equals("coverageStatus", CoverageStatus.ALWD)
pb.equals("coverageStatus", CoverageStatus.ALWD),
pb.in("market", reportsServiceSettings.getBfxClassCodes().toArray(new String[0]))
)
);
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.builders.bp;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.Side;
@ -15,8 +16,9 @@ import java.util.Collection;
@Component
public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) {
super(imdgProvider);
public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider,
ReportsServiceSettings reportsServiceSettings) {
super(imdgProvider, reportsServiceSettings);
}
@Override
@ -38,7 +40,8 @@ public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuild
pb.or(
pb.equals("side", Side.SELL.getKey()),
pb.equals("side", MoneyFlowSide.SELL.getKey())
)
),
pb.in("market", reportsServiceSettings.getBfxClassCodes().toArray(new String[0]))
)
);
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.builders.bp;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.Allowed;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.ReportKeys;
@ -16,8 +17,9 @@ import java.util.Collection;
@Component
public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) {
super(imdgProvider);
public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider,
ReportsServiceSettings reportsServiceSettings) {
super(imdgProvider, reportsServiceSettings);
}
@Override
@ -40,7 +42,8 @@ public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuild
pb.or(
pb.equals("side", Side.SELL.getKey()),
pb.equals("side", MoneyFlowSide.SELL.getKey())
)
),
pb.in("market", reportsServiceSettings.getBfxClassCodes().toArray(new String[0]))
)
);
}

View file

@ -3,12 +3,11 @@ package ru.spcex.clearing.reports.builders.bp;
import org.springframework.stereotype.Component;
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.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.builders.bean.UnfulfilledDealReport;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -23,14 +22,12 @@ import java.util.List;
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam, UnfulfilledDealReport> {
private final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
private final Imdg<Session> sessionImdg;
private final ReportsServiceSettings reportsServiceSettings;
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider, ReportsServiceSettings reportsServiceSettings) {
this.reportsServiceSettings = reportsServiceSettings;
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
}
private List<UnfulfilledDealReport> rows = null;
@ -69,7 +66,8 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
pb.or(
pb.equals("side", Side.SELL.getKey()),
pb.equals("side", MoneyFlowSide.SELL.getKey())
)
),
pb.in("market", reportsServiceSettings.getBfxClassCodes().toArray(new String[0]))
);
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate);
log.debug("Found {} ExecutionFond by query: {}", executionFonds.size(), predicate);

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.reports.config.settings;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@ -7,6 +8,8 @@ import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
import java.util.List;
@Component
@PropertySource("file:${spring.config.location}/application.properties")
@ConfigurationProperties("reports-service")
@ -17,6 +20,10 @@ public class ReportsServiceSettings {
private Store reportsStore;
private Store notificationsStore;
@Value("#{'${reports-service.reports.bfx-class-codes}'.split('\\s*,\\s*')}")
private List<String> bfxClassCodes;
public HazelcastClientParams getHazelcast() {
return hazelcast;
}
@ -56,4 +63,12 @@ public class ReportsServiceSettings {
public void setNotificationsStore(Store notificationsStore) {
this.notificationsStore = notificationsStore;
}
public List<String> getBfxClassCodes() {
return bfxClassCodes;
}
public void setBfxClassCodes(List<String> bfxClassCodes) {
this.bfxClassCodes = bfxClassCodes;
}
}

View file

@ -32,3 +32,5 @@ reports-service.notifications-store.password=password
reports-service.notifications-store.server-ip=10.230.238.53
reports-service.notifications-store.server-port=2222
reports-service.notifications-store.delete-after-send=true
reports-service.reports.bfx-class-codes=BKVC,SKVC,UKVC,NKVC,DKVC,BMVC,SMVC,UMVC,DMVC,MMVC,BMFC,SMFC,UMFC,DMFC,MMFC,BMMC,SMMC,UMMC,DMMC,MMMC,BMIC,SMIC,UMIC,DMIC,MMIC

View file

@ -31,6 +31,7 @@ import ru.spcex.clearing.reports.config.BeanConfiguration;
import ru.spcex.clearing.reports.config.ReportBuildersConfig;
import ru.spcex.clearing.reports.config.SFTPTestConfig;
import ru.spcex.clearing.reports.config.TestConfig;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
import ru.spcex.clearing.reports.config.validation.ValidationConfig;
import ru.spcex.clearing.test.TestUtils;
import ru.spcex.clearing.test.config.ImdgTestConfig;
@ -157,6 +158,9 @@ public class ReportServiceTest_BP {
@Qualifier("mockProducer")
private Producer<String, Object> producer;
@Autowired
private ReportsServiceSettings reportsServiceSettings;
private static int reportRequestCnt = 0;
private static int reportRequestWithSessionIdCnt = 0;
private static int reportRequestWithSessionIdListCnt = 0;
@ -195,6 +199,7 @@ public class ReportServiceTest_BP {
testExecutionFond.setTradingDate(LocalDate.now().minus(10, ChronoUnit.DAYS));
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
testExecutionFond.setMarket("BKVC");
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
@ -247,6 +252,7 @@ public class ReportServiceTest_BP {
testExecutionFond.setTradingDate(LocalDate.now());
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
testExecutionFond.setMarket("SKVC");
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
@ -296,6 +302,7 @@ public class ReportServiceTest_BP {
testExecutionFond.setSettlementDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey());
testExecutionFond.setMarket("UKVC");
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
@ -346,6 +353,7 @@ public class ReportServiceTest_BP {
testExecutionFond.setSettlementDate(LocalDate.now());
testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS));
testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey());
testExecutionFond.setMarket("NKVC");
executionFondImdg.update(testExecutionFond);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
@ -390,6 +398,7 @@ public class ReportServiceTest_BP {
testExecutionFond.setSessionId(TEST_SESSION_ID_3);
testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey());
testExecutionFond.setMarket("DKVC");
executionFondImdg.update(testExecutionFond);
final String oldSTradeSettleCode = testSTrade.getSettleCode();
@ -468,6 +477,8 @@ public class ReportServiceTest_BP {
private void init() {
ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId();
reportsServiceSettings.setBfxClassCodes(List.of("BKVC", "SKVC", "UKVC", "NKVC", "DKVC"));
Long TEST_EXECUTION_FOND_ID = 888L;
testExecutionFond.setId(TEST_EXECUTION_FOND_ID);
Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L;