This commit is contained in:
parent
69c5e63158
commit
075591d2ea
65 changed files with 1457 additions and 2265 deletions
|
|
@ -3,7 +3,9 @@ package ru.spcex.clearing.reports.config;
|
|||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.spcex.clearing.reports.reports.*;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.reports.reports.bp.*;
|
||||
import ru.spcex.clearing.reports.reports.ks.*;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -16,9 +18,7 @@ import java.util.Map;
|
|||
@ComponentScan(basePackages = "ru.spcex.clearing.reports.reports")
|
||||
public class ReportBuildersConfig {
|
||||
@Bean("reportBuildersWithoutParams")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams(
|
||||
SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder,
|
||||
SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder,
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams, ?>>> reportBuildersWithoutParams(
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
|
|
@ -26,9 +26,7 @@ public class ReportBuildersConfig {
|
|||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder));
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams, ?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
|
|
@ -39,9 +37,7 @@ public class ReportBuildersConfig {
|
|||
}
|
||||
|
||||
@Bean("reportBuildersWithSessionIdParam")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam(
|
||||
OperationalLiabilitiesClaimsReportBuilder operationalLiabilitiesClaimsReportBuilder,
|
||||
OperationalMoneyChangeReportBuilder operationalMoneyChangeReportBuilder,
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam, ?>>> reportBuildersWithSessionIdParam(
|
||||
ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1,
|
||||
ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2,
|
||||
ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3,
|
||||
|
|
@ -50,9 +46,7 @@ public class ReportBuildersConfig {
|
|||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(operationalLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.OPERATIONAL_MONEY_CHANGE, List.of(operationalMoneyChangeReportBuilder));
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam, ?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.EXECUTED_DEAL_REPORT,
|
||||
List.of(
|
||||
executedDealReportBuilder_inftype_1,
|
||||
|
|
@ -67,57 +61,8 @@ public class ReportBuildersConfig {
|
|||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersWithSessionIdListParam")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParams(
|
||||
PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdListParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersWithPeriodParams")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams(
|
||||
PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<PeriodParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGREP")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREP(
|
||||
SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder,
|
||||
SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder,
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder,
|
||||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder,
|
||||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder,
|
||||
PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder,
|
||||
PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder));
|
||||
resultMap.put(ReportBuilderType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGREF")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREF(
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREP(
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
|
|
@ -127,7 +72,30 @@ public class ReportBuildersConfig {
|
|||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGREF")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREF(
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder,
|
||||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder,
|
||||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
|
|
@ -140,14 +108,14 @@ public class ReportBuildersConfig {
|
|||
}
|
||||
|
||||
@Bean("reportBuildersForGRET")
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGRET(
|
||||
public Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGRET(
|
||||
ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1,
|
||||
ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2,
|
||||
ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3,
|
||||
ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4,
|
||||
UnfulfilledDealReportBuilder unfulfilledDealReportBuilder
|
||||
) {
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportBuilderType.EXECUTED_DEAL_REPORT,
|
||||
List.of(
|
||||
executedDealReportBuilder_inftype_1,
|
||||
|
|
|
|||
|
|
@ -6,13 +6,10 @@ 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.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
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;
|
||||
|
|
@ -59,8 +56,6 @@ public class ValidationConfig {
|
|||
EnumPresentRule.instance("reportId",
|
||||
ReportRequest::getReportId,
|
||||
new IEnumKey[]{
|
||||
ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS,
|
||||
ReportBuilderType.SUMMARY_MONEY_CHANGE,
|
||||
ReportBuilderType.KS_REP_CASH_REGISTERS,
|
||||
ReportBuilderType.KS_REP_CASH_REGISTER_SUMS,
|
||||
ReportBuilderType.KS_REP_DEPO_REGISTERS,
|
||||
|
|
@ -85,8 +80,6 @@ public class ValidationConfig {
|
|||
EnumPresentRule.instance("reportId",
|
||||
ReportRequestWithSessionId::getReportId,
|
||||
new IEnumKey[]{
|
||||
ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS,
|
||||
ReportBuilderType.OPERATIONAL_MONEY_CHANGE,
|
||||
ReportBuilderType.EXECUTED_DEAL_REPORT,
|
||||
ReportBuilderType.UNFULFILLED_DEAL_REPORT,
|
||||
ReportBuilderType.KS_REP_CASH_NETTO,
|
||||
|
|
@ -102,57 +95,6 @@ public class ValidationConfig {
|
|||
};
|
||||
}
|
||||
|
||||
@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[]{
|
||||
ReportBuilderType.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[]{
|
||||
ReportBuilderType.PERIOD_MONEY_CHANGE,
|
||||
},
|
||||
ReportError.WrongFieldValue,
|
||||
ReportError.RequiredFieldEmpty),
|
||||
EndDtAfterStartDtRule.instance("startDate", "endDate",
|
||||
ReportRequestWithPeriod::getStartDate,
|
||||
ReportRequestWithPeriod::getEndDate,
|
||||
ReportError.RequiredFieldEmpty,
|
||||
ReportError.WrongFieldValue)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
// todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту,
|
||||
// запрос не проверяется: в случае если sessionId не указан отчеты не строятся
|
||||
@Bean("reportRequestGREPValidator")
|
||||
|
|
|
|||
|
|
@ -2,44 +2,41 @@ package ru.spcex.clearing.reports.reports;
|
|||
|
||||
import com.opencsv.CSVWriterBuilder;
|
||||
import com.opencsv.ICSVWriter;
|
||||
import com.opencsv.bean.*;
|
||||
import com.opencsv.exceptions.CsvBadConverterException;
|
||||
import com.opencsv.exceptions.CsvChainedException;
|
||||
import com.opencsv.exceptions.CsvFieldAssignmentException;
|
||||
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.format.datetime.standard.InstantFormatter;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.text.DecimalFormat;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Класс для построения отчетов в формате CSV
|
||||
*
|
||||
* @param <P> тип параметров, используемых при построении отчета
|
||||
*/
|
||||
public abstract class CSVReportBuilder<P> {
|
||||
public abstract class CSVReportBuilder<P, R> {
|
||||
protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder.class);
|
||||
|
||||
protected DecimalFormat df02Format = new DecimalFormat("#0.00");
|
||||
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");
|
||||
protected DateTimeFormatter dateTimeFormatter_YYMMDDHHmmssSSS = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
||||
protected DateTimeFormatter dateFormatter_yyMMdd = DateTimeFormatter.ofPattern("yyMMdd");
|
||||
protected InstantFormatter instantFormatter = new InstantFormatter();
|
||||
|
||||
/**
|
||||
* Метод получения заголовков для CSV отчета
|
||||
*/
|
||||
protected abstract String[] getHeaders();
|
||||
|
||||
/**
|
||||
* Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец.
|
||||
*/
|
||||
protected abstract List<String[]> getLines();
|
||||
protected abstract List<R> getRows();
|
||||
|
||||
/**
|
||||
* Название отчета, используется для формирования имени отчета (без указания формата)
|
||||
|
|
@ -56,7 +53,9 @@ public abstract class CSVReportBuilder<P> {
|
|||
/**
|
||||
* Тип параметров для построения отчетов
|
||||
*/
|
||||
public abstract Class<P> getParamsType();
|
||||
public abstract Class<P> getParamsClass();
|
||||
|
||||
public abstract Class<R> getReportClass();
|
||||
|
||||
/**
|
||||
* Формирование отчета на основе параметров
|
||||
|
|
@ -88,16 +87,29 @@ public abstract class CSVReportBuilder<P> {
|
|||
File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv"));
|
||||
|
||||
collect(params);
|
||||
String[] headers = getHeaders();
|
||||
List<String[]> lines = getLines();
|
||||
List<R> rows = getRows();
|
||||
|
||||
assert headers != null;
|
||||
assert lines != null;
|
||||
assert rows != null;
|
||||
|
||||
try (ICSVWriter csvWriter = createCsvWriter(reportFile)) {
|
||||
csvWriter.writeNext(headers, false);
|
||||
csvWriter.writeAll(lines, true);
|
||||
} catch (IOException e) {
|
||||
try (Writer writer = new FileWriter(reportFile)) {
|
||||
CustomStrategy<R> customStrategy = new CustomStrategy<>();
|
||||
customStrategy.setType(getReportClass());
|
||||
StatefulBeanToCsv<R> sbc = new StatefulBeanToCsvBuilder<R>(writer)
|
||||
.withMappingStrategy(customStrategy)
|
||||
.withLineEnd("\n")
|
||||
.withSeparator(',')
|
||||
.withQuotechar('\"')
|
||||
.build();
|
||||
if (!rows.isEmpty()) sbc.write(rows);
|
||||
else {
|
||||
// Для записи заголовков в пустой файл
|
||||
Constructor<R> constructor = getReportClass().getDeclaredConstructor();
|
||||
R obj = constructor.newInstance();
|
||||
String[] headers = customStrategy.generateHeader(obj);
|
||||
writer.write("\"" + String.join("\",\"", headers) + "\"");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("Can't create report", e);
|
||||
return null;
|
||||
}
|
||||
|
|
@ -111,15 +123,37 @@ public abstract class CSVReportBuilder<P> {
|
|||
return filename;
|
||||
}
|
||||
|
||||
public void setDateFormatter(DateTimeFormatter dateFormatter) {
|
||||
this.dateFormatter = dateFormatter;
|
||||
}
|
||||
static class CustomStrategy<T> extends ColumnPositionMappingStrategy<T> {
|
||||
@Override
|
||||
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {
|
||||
super.generateHeader(bean);
|
||||
String[] headers = new String[this.getFieldMap().values().size()];
|
||||
for (BeanField<T, Integer> field : this.getFieldMap().values()) {
|
||||
CsvBindByPosition positionAnnotation = field.getField().getAnnotation(CsvBindByPosition.class);
|
||||
CsvBindByName nameAnnotation = field.getField().getAnnotation(CsvBindByName.class);
|
||||
headers[positionAnnotation.position()] = nameAnnotation.column();
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
public void setDateTimeFormatter(DateTimeFormatter dateTimeFormatter) {
|
||||
this.dateTimeFormatter = dateTimeFormatter;
|
||||
}
|
||||
@Override
|
||||
public String[] transmuteBean(T bean) throws CsvFieldAssignmentException, CsvChainedException {
|
||||
return super.transmuteBean(bean);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CsvConverter determineConverter(Field field, Class<?> elementType, String locale, String writeLocale, Class<? extends AbstractCsvConverter> customConverter) throws CsvBadConverterException {
|
||||
CsvConverter csvConverter = super.determineConverter(field, elementType, locale, writeLocale, customConverter);
|
||||
if (csvConverter instanceof ConverterNumber && field.getType() == BigDecimal.class) {
|
||||
csvConverter = new ConverterNumber(BigDecimal.class,
|
||||
Locale.getDefault().toString(),
|
||||
Locale.getDefault().toString(),
|
||||
Locale.getDefault(),
|
||||
"#0.00",
|
||||
"#0.00");
|
||||
}
|
||||
return csvConverter;
|
||||
}
|
||||
|
||||
public void setTimeFormatter(DateTimeFormatter timeFormatter) {
|
||||
this.timeFormatter = timeFormatter;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,108 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports;
|
||||
|
||||
import com.opencsv.CSVWriterBuilder;
|
||||
import com.opencsv.ICSVWriter;
|
||||
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
|
||||
import com.opencsv.bean.StatefulBeanToCsv;
|
||||
import com.opencsv.bean.StatefulBeanToCsvBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
||||
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, R> {
|
||||
protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder_.class);
|
||||
protected DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss");
|
||||
/**
|
||||
* Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец.
|
||||
*/
|
||||
protected abstract List<R> getRows();
|
||||
|
||||
/**
|
||||
* Название отчета, используется для формирования имени отчета (без указания формата)
|
||||
*
|
||||
* @param params Параметры формирования отчета
|
||||
*/
|
||||
protected abstract String getReportFilename(P params);
|
||||
|
||||
/**
|
||||
* Тип отчета по {@link ReportBuilderType}
|
||||
*/
|
||||
public abstract ReportBuilderType getReportType();
|
||||
|
||||
/**
|
||||
* Тип параметров для построения отчетов
|
||||
*/
|
||||
public abstract Class<P> getParamsClass();
|
||||
|
||||
public abstract Class<R> getReportClass();
|
||||
|
||||
/**
|
||||
* Формирование отчета на основе параметров
|
||||
*
|
||||
* @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);
|
||||
List<R> lines = getRows();
|
||||
|
||||
assert lines != null;
|
||||
|
||||
try (Writer writer = new FileWriter(reportFile)) {
|
||||
HeaderColumnNameMappingStrategy<R> headerColumnNameMappingStrategy = new HeaderColumnNameMappingStrategy<>();
|
||||
headerColumnNameMappingStrategy.setType(getReportClass());
|
||||
StatefulBeanToCsv<R> sbc = new StatefulBeanToCsvBuilder<R>(writer)
|
||||
.withMappingStrategy(headerColumnNameMappingStrategy)
|
||||
.withLineEnd("\n")
|
||||
.withSeparator(',')
|
||||
.withQuotechar('\"')
|
||||
.build();
|
||||
sbc.write(lines);
|
||||
} catch (Exception 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class ExecutedDealReport {
|
||||
@CsvBindByName(column = "SECURITYID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String securityId;
|
||||
|
||||
@CsvBindByName(column = "TRADENO")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private Long tradeNo;
|
||||
|
||||
@CsvBindByName(column = "TRADEDATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate tradeDate;
|
||||
|
||||
@CsvBindByName(column = "TRADETIME")
|
||||
@CsvBindByPosition(position = 3)
|
||||
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
|
||||
private Instant tradeTime;
|
||||
|
||||
@CsvBindByName(column = "SETTLEDATE")
|
||||
@CsvBindByPosition(position = 4)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate settleDate;
|
||||
|
||||
@CsvBindByName(column = "SETTLECODE")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private String settleCode;
|
||||
|
||||
@CsvBindByName(column = "PRICE")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal price;
|
||||
|
||||
@CsvBindByName(column = "QUANTITY")
|
||||
@CsvBindByPosition(position = 7)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal quantity;
|
||||
|
||||
@CsvBindByName(column = "VALUE")
|
||||
@CsvBindByPosition(position = 8)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal value;
|
||||
|
||||
|
||||
public String getSecurityId() {
|
||||
return securityId;
|
||||
}
|
||||
|
||||
public void setSecurityId(String securityId) {
|
||||
this.securityId = securityId;
|
||||
}
|
||||
|
||||
public Long getTradeNo() {
|
||||
return tradeNo;
|
||||
}
|
||||
|
||||
public void setTradeNo(Long tradeNo) {
|
||||
this.tradeNo = tradeNo;
|
||||
}
|
||||
|
||||
public LocalDate getTradeDate() {
|
||||
return tradeDate;
|
||||
}
|
||||
|
||||
public void setTradeDate(LocalDate tradeDate) {
|
||||
this.tradeDate = tradeDate;
|
||||
}
|
||||
|
||||
public Instant getTradeTime() {
|
||||
return tradeTime;
|
||||
}
|
||||
|
||||
public void setTradeTime(Instant tradeTime) {
|
||||
this.tradeTime = tradeTime;
|
||||
}
|
||||
|
||||
public LocalDate getSettleDate() {
|
||||
return settleDate;
|
||||
}
|
||||
|
||||
public void setSettleDate(LocalDate settleDate) {
|
||||
this.settleDate = settleDate;
|
||||
}
|
||||
|
||||
public String getSettleCode() {
|
||||
return settleCode;
|
||||
}
|
||||
|
||||
public void setSettleCode(String settleCode) {
|
||||
this.settleCode = settleCode;
|
||||
}
|
||||
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(BigDecimal price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public BigDecimal getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
public void setQuantity(BigDecimal quantity) {
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public BigDecimal getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(BigDecimal value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class KSRepCashNettoReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "SESSION_ID")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private Long sessionId;
|
||||
|
||||
@CsvBindByName(column = "SESSION_DATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
|
||||
private Instant sessionDate;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "VALUE")
|
||||
@CsvBindByPosition(position = 4)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal value;
|
||||
|
||||
@CsvBindByName(column = "DATE")
|
||||
@CsvBindByPosition(position = 5)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate date;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(Long sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public Instant getSessionDate() {
|
||||
return sessionDate;
|
||||
}
|
||||
|
||||
public void setSessionDate(Instant sessionDate) {
|
||||
this.sessionDate = sessionDate;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public BigDecimal getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(BigDecimal value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
public class KSRepCashRegisterSumsReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_CODE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
private String registerCode;
|
||||
|
||||
@CsvBindByName(column = "ADD_SUM")
|
||||
@CsvBindByPosition(position = 3)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal addSum;
|
||||
|
||||
@CsvBindByName(column = "ADD_TIME")
|
||||
@CsvBindByPosition(position = 4)
|
||||
private LocalTime addTime;
|
||||
|
||||
@CsvBindByName(column = "ADD_DATE")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private LocalDate addDate;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public String getRegisterCode() {
|
||||
return registerCode;
|
||||
}
|
||||
|
||||
public void setRegisterCode(String registerCode) {
|
||||
this.registerCode = registerCode;
|
||||
}
|
||||
|
||||
public BigDecimal getAddSum() {
|
||||
return addSum;
|
||||
}
|
||||
|
||||
public void setAddSum(BigDecimal addSum) {
|
||||
this.addSum = addSum;
|
||||
}
|
||||
|
||||
public LocalTime getAddTime() {
|
||||
return addTime;
|
||||
}
|
||||
|
||||
public void setAddTime(LocalTime addTime) {
|
||||
this.addTime = addTime;
|
||||
}
|
||||
|
||||
public LocalDate getAddDate() {
|
||||
return addDate;
|
||||
}
|
||||
|
||||
public void setAddDate(LocalDate addDate) {
|
||||
this.addDate = addDate;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class KSRepCashRegistersReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "DATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate date;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_CODE")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String registerCode;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_NAME")
|
||||
@CsvBindByPosition(position = 4)
|
||||
private String registerName;
|
||||
|
||||
@CsvBindByName(column = "OPEN_BALANCE")
|
||||
@CsvBindByPosition(position = 5)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal openBalance;
|
||||
|
||||
@CsvBindByName(column = "CHANGE_BALANCE")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal changeBalance;
|
||||
|
||||
@CsvBindByName(column = "ADD_WITHDRAW")
|
||||
@CsvBindByPosition(position = 7)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal addWithdraw;
|
||||
|
||||
@CsvBindByName(column = "CLOSE_BALANCE")
|
||||
@CsvBindByPosition(position = 8)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal closeBalance;
|
||||
|
||||
@CsvBindByName(column = "REMARKS")
|
||||
@CsvBindByPosition(position = 9)
|
||||
private String remarks;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getRegisterCode() {
|
||||
return registerCode;
|
||||
}
|
||||
|
||||
public void setRegisterCode(String registerCode) {
|
||||
this.registerCode = registerCode;
|
||||
}
|
||||
|
||||
public String getRegisterName() {
|
||||
return registerName;
|
||||
}
|
||||
|
||||
public void setRegisterName(String registerName) {
|
||||
this.registerName = registerName;
|
||||
}
|
||||
|
||||
public BigDecimal getOpenBalance() {
|
||||
return openBalance;
|
||||
}
|
||||
|
||||
public void setOpenBalance(BigDecimal openBalance) {
|
||||
this.openBalance = openBalance;
|
||||
}
|
||||
|
||||
public BigDecimal getChangeBalance() {
|
||||
return changeBalance;
|
||||
}
|
||||
|
||||
public void setChangeBalance(BigDecimal changeBalance) {
|
||||
this.changeBalance = changeBalance;
|
||||
}
|
||||
|
||||
public BigDecimal getAddWithdraw() {
|
||||
return addWithdraw;
|
||||
}
|
||||
|
||||
public void setAddWithdraw(BigDecimal addWithdraw) {
|
||||
this.addWithdraw = addWithdraw;
|
||||
}
|
||||
|
||||
public BigDecimal getCloseBalance() {
|
||||
return closeBalance;
|
||||
}
|
||||
|
||||
public void setCloseBalance(BigDecimal closeBalance) {
|
||||
this.closeBalance = closeBalance;
|
||||
}
|
||||
|
||||
public String getRemarks() {
|
||||
return remarks;
|
||||
}
|
||||
|
||||
public void setRemarks(String remarks) {
|
||||
this.remarks = remarks;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class KSRepDepoNettoReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "SESSION_ID")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private Long sessionId;
|
||||
|
||||
@CsvBindByName(column = "SESSION_DATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
|
||||
private Instant sessionDate;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "SECURITYID")
|
||||
@CsvBindByPosition(position = 4)
|
||||
private String securityId;
|
||||
|
||||
@CsvBindByName(column = "VALUE")
|
||||
@CsvBindByPosition(position = 5)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal value;
|
||||
|
||||
@CsvBindByName(column = "DATE")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate date;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(Long sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public Instant getSessionDate() {
|
||||
return sessionDate;
|
||||
}
|
||||
|
||||
public void setSessionDate(Instant sessionDate) {
|
||||
this.sessionDate = sessionDate;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public String getSecurityId() {
|
||||
return securityId;
|
||||
}
|
||||
|
||||
public void setSecurityId(String securityId) {
|
||||
this.securityId = securityId;
|
||||
}
|
||||
|
||||
public BigDecimal getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(BigDecimal value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
public class KSRepDepoRegisterQuantitiesReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "SECURITYID")
|
||||
@CsvBindByPosition(position = 2)
|
||||
private String securityId;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_CODE")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String registerCode;
|
||||
|
||||
@CsvBindByName(column = "ADD_QUANTITY")
|
||||
@CsvBindByPosition(position = 4)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal addQuantity;
|
||||
|
||||
@CsvBindByName(column = "ADD_TIME")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private LocalTime addTime;
|
||||
|
||||
@CsvBindByName(column = "ADD_DATE")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate addDate;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public String getSecurityId() {
|
||||
return securityId;
|
||||
}
|
||||
|
||||
public void setSecurityId(String securityId) {
|
||||
this.securityId = securityId;
|
||||
}
|
||||
|
||||
public String getRegisterCode() {
|
||||
return registerCode;
|
||||
}
|
||||
|
||||
public void setRegisterCode(String registerCode) {
|
||||
this.registerCode = registerCode;
|
||||
}
|
||||
|
||||
public BigDecimal getAddQuantity() {
|
||||
return addQuantity;
|
||||
}
|
||||
|
||||
public void setAddQuantity(BigDecimal addQuantity) {
|
||||
this.addQuantity = addQuantity;
|
||||
}
|
||||
|
||||
public LocalTime getAddTime() {
|
||||
return addTime;
|
||||
}
|
||||
|
||||
public void setAddTime(LocalTime addTime) {
|
||||
this.addTime = addTime;
|
||||
}
|
||||
|
||||
public LocalDate getAddDate() {
|
||||
return addDate;
|
||||
}
|
||||
|
||||
public void setAddDate(LocalDate addDate) {
|
||||
this.addDate = addDate;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class KSRepDepoRegistersReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "ACCOUNT")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String account;
|
||||
|
||||
@CsvBindByName(column = "DATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate date;
|
||||
|
||||
@CsvBindByName(column = "SECURITYID")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String securityId;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_CODE")
|
||||
@CsvBindByPosition(position = 4)
|
||||
private String registerCode;
|
||||
|
||||
@CsvBindByName(column = "REGISTER_NAME")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private String registerName;
|
||||
|
||||
@CsvBindByName(column = "OPEN_QUANTITY")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal openQuantity;
|
||||
|
||||
@CsvBindByName(column = "CHANGE_QUANTITY")
|
||||
@CsvBindByPosition(position = 7)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal changeQuantity;
|
||||
|
||||
@CsvBindByName(column = "ADD_WITHDRAW_DEPO")
|
||||
@CsvBindByPosition(position = 8)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal addWithdrawDepo;
|
||||
|
||||
@CsvBindByName(column = "CLOSE_QUANTITY")
|
||||
@CsvBindByPosition(position = 9)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal closeQuantity;
|
||||
|
||||
@CsvBindByName(column = "REMARKS")
|
||||
@CsvBindByPosition(position = 10)
|
||||
private String remarks;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getSecurityId() {
|
||||
return securityId;
|
||||
}
|
||||
|
||||
public void setSecurityId(String securityId) {
|
||||
this.securityId = securityId;
|
||||
}
|
||||
|
||||
public String getRegisterCode() {
|
||||
return registerCode;
|
||||
}
|
||||
|
||||
public void setRegisterCode(String registerCode) {
|
||||
this.registerCode = registerCode;
|
||||
}
|
||||
|
||||
public String getRegisterName() {
|
||||
return registerName;
|
||||
}
|
||||
|
||||
public void setRegisterName(String registerName) {
|
||||
this.registerName = registerName;
|
||||
}
|
||||
|
||||
public BigDecimal getOpenQuantity() {
|
||||
return openQuantity;
|
||||
}
|
||||
|
||||
public void setOpenQuantity(BigDecimal openQuantity) {
|
||||
this.openQuantity = openQuantity;
|
||||
}
|
||||
|
||||
public BigDecimal getChangeQuantity() {
|
||||
return changeQuantity;
|
||||
}
|
||||
|
||||
public void setChangeQuantity(BigDecimal changeQuantity) {
|
||||
this.changeQuantity = changeQuantity;
|
||||
}
|
||||
|
||||
public BigDecimal getAddWithdrawDepo() {
|
||||
return addWithdrawDepo;
|
||||
}
|
||||
|
||||
public void setAddWithdrawDepo(BigDecimal addWithdrawDepo) {
|
||||
this.addWithdrawDepo = addWithdrawDepo;
|
||||
}
|
||||
|
||||
public BigDecimal getCloseQuantity() {
|
||||
return closeQuantity;
|
||||
}
|
||||
|
||||
public void setCloseQuantity(BigDecimal closeQuantity) {
|
||||
this.closeQuantity = closeQuantity;
|
||||
}
|
||||
|
||||
public String getRemarks() {
|
||||
return remarks;
|
||||
}
|
||||
|
||||
public void setRemarks(String remarks) {
|
||||
this.remarks = remarks;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class KSRepFirmDetailsReport {
|
||||
@CsvBindByName(column = "FIRMID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "PART_INN")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String partInn;
|
||||
|
||||
@CsvBindByName(column = "PART_KPP")
|
||||
@CsvBindByPosition(position = 2)
|
||||
private String partKpp;
|
||||
|
||||
@CsvBindByName(column = "AGREEMENT_NUMBER")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String agreementNumber;
|
||||
|
||||
@CsvBindByName(column = "AGREEMENT_DATE")
|
||||
@CsvBindByPosition(position = 4)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate agreementDate;
|
||||
|
||||
@CsvBindByName(column = "AGREEMENT_NAME")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private String agreementName;
|
||||
|
||||
@CsvBindByName(column = "FIRM_NAME")
|
||||
@CsvBindByPosition(position = 6)
|
||||
private String firmName;
|
||||
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public String getPartInn() {
|
||||
return partInn;
|
||||
}
|
||||
|
||||
public void setPartInn(String partInn) {
|
||||
this.partInn = partInn;
|
||||
}
|
||||
|
||||
public String getPartKpp() {
|
||||
return partKpp;
|
||||
}
|
||||
|
||||
public void setPartKpp(String partKpp) {
|
||||
this.partKpp = partKpp;
|
||||
}
|
||||
|
||||
public String getAgreementNumber() {
|
||||
return agreementNumber;
|
||||
}
|
||||
|
||||
public void setAgreementNumber(String agreementNumber) {
|
||||
this.agreementNumber = agreementNumber;
|
||||
}
|
||||
|
||||
public LocalDate getAgreementDate() {
|
||||
return agreementDate;
|
||||
}
|
||||
|
||||
public void setAgreementDate(LocalDate agreementDate) {
|
||||
this.agreementDate = agreementDate;
|
||||
}
|
||||
|
||||
public String getAgreementName() {
|
||||
return agreementName;
|
||||
}
|
||||
|
||||
public void setAgreementName(String agreementName) {
|
||||
this.agreementName = agreementName;
|
||||
}
|
||||
|
||||
public String getFirmName() {
|
||||
return firmName;
|
||||
}
|
||||
|
||||
public void setFirmName(String firmName) {
|
||||
this.firmName = firmName;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
package ru.spcex.clearing.reports.reports.bean;
|
||||
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
|
||||
public class KSRepTradesReport {
|
||||
@CsvBindByName(column = "SESSION_ID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private Long sessionId;
|
||||
|
||||
@CsvBindByName(column = "SESSION_DATE")
|
||||
@CsvBindByPosition(position = 1)
|
||||
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
|
||||
private Instant sessionDate;
|
||||
|
||||
@CsvBindByName(column = "TR_ID")
|
||||
@CsvBindByPosition(position = 2)
|
||||
private Long trId;
|
||||
|
||||
@CsvBindByName(column = "FIRM_ID")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String firmId;
|
||||
|
||||
@CsvBindByName(column = "TKR")
|
||||
@CsvBindByPosition(position = 4)
|
||||
private Long tkr;
|
||||
|
||||
@CsvBindByName(column = "CASH_LIABILITY")
|
||||
@CsvBindByPosition(position = 5)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal cashLiability;
|
||||
|
||||
@CsvBindByName(column = "DEPO_LIABILITY")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal depoLiability;
|
||||
|
||||
@CsvBindByName(column = "TRADE_NUM")
|
||||
@CsvBindByPosition(position = 7)
|
||||
private Long tradeNum;
|
||||
|
||||
@CsvBindByName(column = "CLASS_CODE")
|
||||
@CsvBindByPosition(position = 8)
|
||||
private String classCode;
|
||||
|
||||
@CsvBindByName(column = "TRADE_DATE")
|
||||
@CsvBindByPosition(position = 9)
|
||||
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
|
||||
private Instant tradeDate;
|
||||
|
||||
@CsvBindByName(column = "STATUS")
|
||||
@CsvBindByPosition(position = 10)
|
||||
private String status;
|
||||
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(Long sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public Instant getSessionDate() {
|
||||
return sessionDate;
|
||||
}
|
||||
|
||||
public void setSessionDate(Instant sessionDate) {
|
||||
this.sessionDate = sessionDate;
|
||||
}
|
||||
|
||||
public Long getTrId() {
|
||||
return trId;
|
||||
}
|
||||
|
||||
public void setTrId(Long trId) {
|
||||
this.trId = trId;
|
||||
}
|
||||
|
||||
public String getFirmId() {
|
||||
return firmId;
|
||||
}
|
||||
|
||||
public void setFirmId(String firmId) {
|
||||
this.firmId = firmId;
|
||||
}
|
||||
|
||||
public Long getTkr() {
|
||||
return tkr;
|
||||
}
|
||||
|
||||
public void setTkr(Long tkr) {
|
||||
this.tkr = tkr;
|
||||
}
|
||||
|
||||
public BigDecimal getCashLiability() {
|
||||
return cashLiability;
|
||||
}
|
||||
|
||||
public void setCashLiability(BigDecimal cashLiability) {
|
||||
this.cashLiability = cashLiability;
|
||||
}
|
||||
|
||||
public BigDecimal getDepoLiability() {
|
||||
return depoLiability;
|
||||
}
|
||||
|
||||
public void setDepoLiability(BigDecimal depoLiability) {
|
||||
this.depoLiability = depoLiability;
|
||||
}
|
||||
|
||||
public Long getTradeNum() {
|
||||
return tradeNum;
|
||||
}
|
||||
|
||||
public void setTradeNum(Long tradeNum) {
|
||||
this.tradeNum = tradeNum;
|
||||
}
|
||||
|
||||
public String getClassCode() {
|
||||
return classCode;
|
||||
}
|
||||
|
||||
public void setClassCode(String classCode) {
|
||||
this.classCode = classCode;
|
||||
}
|
||||
|
||||
public Instant getTradeDate() {
|
||||
return tradeDate;
|
||||
}
|
||||
|
||||
public void setTradeDate(Instant tradeDate) {
|
||||
this.tradeDate = tradeDate;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,37 +3,34 @@ package ru.spcex.clearing.reports.reports.bean;
|
|||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class UnfulfilledDealReport {
|
||||
|
||||
@CsvBindByName(column = "securityId")
|
||||
@CsvBindByName(column = "SECURITYID")
|
||||
@CsvBindByPosition(position = 0)
|
||||
@CsvNumber("#0")
|
||||
private BigDecimal securityId;
|
||||
private Long securityId;
|
||||
|
||||
@CsvBindByName(column = "tradeNo")
|
||||
@CsvBindByName(column = "TRADENO")
|
||||
@CsvBindByPosition(position = 1)
|
||||
private Long tradeNo;
|
||||
|
||||
@CsvBindByName(column = "tradeDate")
|
||||
@CsvBindByName(column = "TRADEDATE")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate tradeDate;
|
||||
|
||||
@CsvBindByName(column = "settleCode")
|
||||
@CsvBindByName(column = "SETTLECODE")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private String settleCode;
|
||||
|
||||
|
||||
public BigDecimal getSecurityId() {
|
||||
public Long getSecurityId() {
|
||||
return securityId;
|
||||
}
|
||||
|
||||
public void setSecurityId(BigDecimal securityId) {
|
||||
public void setSecurityId(Long securityId) {
|
||||
this.securityId = securityId;
|
||||
}
|
||||
|
||||
|
|
@ -60,4 +57,5 @@ public class UnfulfilledDealReport {
|
|||
public void setSettleCode(String settleCode) {
|
||||
this.settleCode = settleCode;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,21 +5,20 @@ 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.bean.ExecutedDealReport;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
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> {
|
||||
public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilder<P, ExecutedDealReport> {
|
||||
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
||||
protected final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -29,7 +28,7 @@ public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilde
|
|||
"securityId", "tradeNo", "tradeDate", "tradeTime",
|
||||
"settleDate", "settleCode", "price", "quanity", "value"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<ExecutedDealReport> lines = null;
|
||||
|
||||
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) {
|
||||
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
|
|
@ -38,12 +37,7 @@ public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilde
|
|||
}
|
||||
|
||||
@Override
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
protected List<ExecutedDealReport> getRows() {
|
||||
return lines;
|
||||
}
|
||||
|
||||
|
|
@ -52,10 +46,15 @@ public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilde
|
|||
return ReportBuilderType.EXECUTED_DEAL_REPORT;
|
||||
}
|
||||
|
||||
protected abstract Collection<ExecutionFond> getExecutionFondsForReport(T params);
|
||||
@Override
|
||||
public Class<ExecutedDealReport> getReportClass() {
|
||||
return ExecutedDealReport.class;
|
||||
}
|
||||
|
||||
protected abstract Collection<ExecutionFond> getExecutionFondsForReport(P params);
|
||||
|
||||
@Override
|
||||
protected void collect(T params) {
|
||||
protected void collect(P params) {
|
||||
Collection<ExecutionFond> executionFonds = getExecutionFondsForReport(params);
|
||||
|
||||
lines = new ArrayList<>(executionFonds.size());
|
||||
|
|
@ -73,41 +72,20 @@ public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilde
|
|||
)
|
||||
);
|
||||
}
|
||||
ExecutedDealReport executedDealReport = new ExecutedDealReport();
|
||||
|
||||
String securityId = String.valueOf(executionFond.getSecuritySymbol());
|
||||
String tradeNo = String.valueOf(executionFond.getExchangeExecutionId());
|
||||
String tradeDate = "";
|
||||
String tradeTime = "";
|
||||
String settleDate = "";
|
||||
if (executionFond.getTradingDate() != null) {
|
||||
tradeDate = dateFormatter.format(executionFond.getTradingDate());
|
||||
}
|
||||
if (executionFond.getExchangeExecutionTime() != null) {
|
||||
tradeTime = dateFormatter.format(LocalDate.ofInstant(executionFond.getExchangeExecutionTime(), ZoneId.systemDefault()));
|
||||
}
|
||||
if (executionFond.getSettlementDate() != null) {
|
||||
settleDate = dateFormatter.format(executionFond.getSettlementDate());
|
||||
}
|
||||
String settleCode = sTrade != null ? sTrade.getSettleCode() : "";
|
||||
String quantity = executionFond.getQuantity() != null ? String.valueOf(executionFond.getQuantity()) : "";
|
||||
String value = executionFond.getSettlementAmount() != null ? String.valueOf(executionFond.getSettlementAmount()) : "";
|
||||
String price = "";
|
||||
if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null) {
|
||||
price = String.valueOf(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP));
|
||||
}
|
||||
executedDealReport.setSecurityId(executionFond.getSecuritySymbol());
|
||||
executedDealReport.setTradeNo(executionFond.getExchangeExecutionId());
|
||||
executedDealReport.setTradeDate(executionFond.getTradingDate());
|
||||
executedDealReport.setTradeTime(executionFond.getExchangeExecutionTime());
|
||||
executedDealReport.setSettleDate(executionFond.getSettlementDate());
|
||||
executedDealReport.setSettleCode(sTrade != null ? sTrade.getSettleCode() : "");
|
||||
executedDealReport.setQuantity(executionFond.getQuantity());
|
||||
executedDealReport.setValue(executionFond.getSettlementAmount());
|
||||
if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null)
|
||||
executedDealReport.setPrice(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP));
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
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);
|
||||
lines.add(executedDealReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for execution_fond (id = %d), skipped".formatted(executionFond.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuild
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuild
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,296 +0,0 @@
|
|||
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());
|
||||
long reportRowId = 0L;
|
||||
for (ExecutionCommon execution : executions) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
if (execution.getSessionId() == null) {
|
||||
log.warn("On Execution[{}] sessionId was null. Skip in report.", execution.getId());
|
||||
continue;
|
||||
}
|
||||
Registry registry = null;
|
||||
if (execution.getCompanyId() != null) {
|
||||
registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId()));
|
||||
}
|
||||
Collection<Registry> registriesForSessionId = null;
|
||||
if (execution.getSessionId() != null) {
|
||||
registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues(
|
||||
Map.of("sessionId", execution.getSessionId())
|
||||
);
|
||||
}
|
||||
Listing listing = null;
|
||||
FixedIncomeSecurity fixedIncomeSecurity = null;
|
||||
if (execution.getSecurityId() != null) {
|
||||
listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId()));
|
||||
fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(
|
||||
Map.of("securityId", execution.getSecurityId())
|
||||
);
|
||||
}
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID(
|
||||
execution.getTradingClearingRegistryId()
|
||||
);
|
||||
|
||||
if (registry == null) {
|
||||
log.warn("registry not found for companyId={}", execution.getCompanyId());
|
||||
}
|
||||
|
||||
String id = String.valueOf(reportRowId++);
|
||||
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 == null ? null : 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())) {
|
||||
if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null) {
|
||||
trPrice = String.valueOf(
|
||||
executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
}
|
||||
trQuantity = String.valueOf(executionFond.getQuantity());
|
||||
if (fixedIncomeSecurity != null) {
|
||||
nominal = String.valueOf(fixedIncomeSecurity.getNominalValue());
|
||||
if (executionFond.getQuantity() != null) {
|
||||
accruedInt = String.valueOf(
|
||||
fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
}
|
||||
trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon());
|
||||
}
|
||||
trValue = String.valueOf(executionFond.getSettlementAmount());
|
||||
cashLiability = String.valueOf(executionFond.getSettlementAmount());
|
||||
depoLiability = String.valueOf(executionFond.getQuantity());
|
||||
}
|
||||
}
|
||||
|
||||
String lotValue = "";
|
||||
if (listing != null) {
|
||||
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;
|
||||
if (registriesForSessionId != 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);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for execution (id = %d), skipped".formatted(execution.getId()), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
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());
|
||||
long reportRowId = 0L;
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
Listing listing = null;
|
||||
if (registry.getSecurityId() != null) {
|
||||
listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", registry.getSecurityId()));
|
||||
}
|
||||
|
||||
Statement statement = null;
|
||||
if (registry.getCompanyId() != null) {
|
||||
statement = statementImdg.getSingleObjectByFieldValues(Map.of("addresseeId", registry.getCompanyId()));
|
||||
}
|
||||
|
||||
PaymentInstruction paymentInstruction = null;
|
||||
if (registry.getPaymentId() != null) {
|
||||
paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
"id", registry.getPaymentId(),
|
||||
"creditLeg_direction", InOutDirection.out.getKey()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
String id = String.valueOf(reportRowId++);
|
||||
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 != null ? listing.getTradingCurrency() : "";
|
||||
String registryCode = String.valueOf(registry.getId());
|
||||
String registryName = registry.getRegistryCode();
|
||||
String openBalance = String.valueOf(registry.getOpenBalance());
|
||||
String changeBalance = "";
|
||||
if (registry.getCloseBalance() != null && registry.getOpenBalance() != null) {
|
||||
changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance()));
|
||||
}
|
||||
String addWithdraw = "";
|
||||
if (registry.getCredit() != null) {
|
||||
if (registry.getDebit() != null) {
|
||||
addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit()));
|
||||
} else addWithdraw = String.valueOf(registry.getCredit());
|
||||
}
|
||||
String closeBalance = String.valueOf(registry.getCloseBalance());
|
||||
String remarks = "";
|
||||
String addSum = String.valueOf(registry.getCredit());
|
||||
String addTime = "";
|
||||
if (statement != null && statement.getCreated() != null) {
|
||||
addTime = dateTimeFormatter.format(LocalDateTime.ofInstant(statement.getCreated(), ZoneId.systemDefault()));
|
||||
}
|
||||
String withdrawSum = String.valueOf(registry.getDebit());
|
||||
String withdrawTime = "";
|
||||
if (paymentInstruction != null) {
|
||||
withdrawTime = dateTimeFormatter.format(LocalDateTime.ofInstant(paymentInstruction.getPaymentDate(), ZoneId.systemDefault()));
|
||||
} else if (registry.getClearingDate() != null) {
|
||||
withdrawTime = dateTimeFormatter.format(registry.getClearingDate());
|
||||
}
|
||||
|
||||
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);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
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.ReportBuilderType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
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 ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
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 ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.OPERATIONAL_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
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.ReportBuilderType;
|
||||
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.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
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 ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.PERIOD_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdListParams> getParamsType() {
|
||||
return SessionIdListParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdListParams params) {
|
||||
if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList();
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
// todo OR - временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день
|
||||
// пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться
|
||||
ImdgPredicate predicate = pb.or(
|
||||
pb.in("sessionId", params.getSessionIdList().toArray(new Long[0])),
|
||||
pb.equals("clearingDate", LocalDate.now())
|
||||
);
|
||||
return executionFondImdg.getCollectionObjectsByPredicate(predicate);
|
||||
}
|
||||
|
||||
@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]))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<PeriodParams> {
|
||||
|
||||
public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<Registry> getRegistryForReport(PeriodParams params) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.sql(sql),
|
||||
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 ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.PERIOD_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<PeriodParams> getParamsType() {
|
||||
return PeriodParams.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
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.ReportBuilderType;
|
||||
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;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<EmptyParams> {
|
||||
public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(EmptyParams params) {
|
||||
// todo Временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день
|
||||
// пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
return executionFondImdg.getCollectionObjectsByPredicate(pb.equals("clearingDate", LocalDate.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(EmptyParams params) {
|
||||
// todo Временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день
|
||||
// пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться
|
||||
ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder();
|
||||
return executionDepositImdg.getCollectionObjectsByPredicate(pb.equals("clearingDate", LocalDate.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(EmptyParams params) {
|
||||
return "summary_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<EmptyParams> {
|
||||
public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<Registry> getRegistryForReport(EmptyParams param) {
|
||||
// todo отсечение по периоду - временный код, пока не решили как передавать в GREP период.
|
||||
// по изначальной задумке в summary отчет должны включаться все записи.
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build();
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
LocalDate now = LocalDate.now();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("clearingDate", now),
|
||||
pb.lessEqual("clearingDate", now)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(EmptyParams params) {
|
||||
return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.SUMMARY_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ 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.clearing.reports.reports.bean.UnfulfilledDealReport;
|
||||
import ru.spcex.platform.enumeration.Allowed;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
|
|
@ -18,18 +19,17 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
|||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam, UnfulfilledDealReport> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<STrades> sTradesImdg;
|
||||
private final String[] headers = {
|
||||
"securityId", "tradeNo", "tradeDate", "settleCode"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
|
||||
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
|
||||
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
|
|
@ -37,14 +37,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
|
|||
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
private List<UnfulfilledDealReport> rows = null;
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<UnfulfilledDealReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -58,10 +55,15 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<UnfulfilledDealReport> getReportClass() {
|
||||
return UnfulfilledDealReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
@ -71,17 +73,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
|
|||
);
|
||||
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate);
|
||||
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
lines = new ArrayList<>(executionFonds.size());
|
||||
rows = new ArrayList<>(executionFonds.size());
|
||||
for (ExecutionFond executionFond : executionFonds) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(executionFond.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;;
|
||||
|
||||
STrades sTrade = sTradesImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
|
|
@ -90,18 +86,13 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
|
|||
)
|
||||
);
|
||||
|
||||
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;
|
||||
UnfulfilledDealReport unfulfilledDealReport = new UnfulfilledDealReport();
|
||||
unfulfilledDealReport.setSecurityId(executionFond.getSecurityId());
|
||||
unfulfilledDealReport.setTradeNo(executionFond.getExchangeExecutionId());
|
||||
unfulfilledDealReport.setTradeDate(executionFond.getTradingDate());
|
||||
unfulfilledDealReport.setSettleCode(sTrade != null ? sTrade.getClassCode() : null);
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = tradeNo;
|
||||
line[valueIdx++] = tradeDate;
|
||||
line[valueIdx++] = settleCode;
|
||||
lines.add(line);
|
||||
rows.add(unfulfilledDealReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for execution_fond (id = %d), skipped".formatted(executionFond.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,107 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
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.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder_;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.reports.reports.bean.UnfulfilledDealReport;
|
||||
import ru.spcex.platform.enumeration.Allowed;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
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.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class UnfulfilledDealReportBuilder_ extends CSVReportBuilder_<SessionIdParam, UnfulfilledDealReport> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<STrades> sTradesImdg;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
private List<UnfulfilledDealReport> rows = null;
|
||||
|
||||
@Override
|
||||
protected List<UnfulfilledDealReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(SessionIdParam params) {
|
||||
return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReportBuilderType getReportType() {
|
||||
return ReportBuilderType.UNFULFILLED_DEAL_REPORT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<UnfulfilledDealReport> getReportClass() {
|
||||
return UnfulfilledDealReport.class;
|
||||
}
|
||||
|
||||
@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);
|
||||
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
rows = new ArrayList<>(executionFonds.size());
|
||||
for (ExecutionFond executionFond : executionFonds) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(executionFond.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
|
||||
STrades sTrade = sTradesImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
"settleCode", executionFond.getSettlementCode(),
|
||||
"operation", executionFond.getSide()
|
||||
)
|
||||
);
|
||||
|
||||
UnfulfilledDealReport unfulfilledDealReport = new UnfulfilledDealReport();
|
||||
// todo replace to long (example for test)
|
||||
unfulfilledDealReport.setSecurityId(BigDecimal.valueOf(executionFond.getSecurityId()));
|
||||
unfulfilledDealReport.setTradeNo(executionFond.getExchangeExecutionId());
|
||||
unfulfilledDealReport.setTradeDate(executionFond.getTradingDate());
|
||||
unfulfilledDealReport.setSettleCode(sTrade != null ? sTrade.getClassCode() : null);
|
||||
|
||||
rows.add(unfulfilledDealReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for execution_fond (id = %d), skipped".formatted(executionFond.getId()), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.PairRegistryId;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepCashNettoReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
|
|
@ -22,20 +23,16 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
|||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam, KSRepCashNettoReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Session> sessionImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "SESSION_ID", "SESSION_DATE", "ACCOUNT", "VALUE", "DATE"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepCashNettoReport> rows = null;
|
||||
|
||||
public KSRepCashNettoReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -43,13 +40,8 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepCashNettoReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -63,10 +55,15 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepCashNettoReport> getReportClass() {
|
||||
return KSRepCashNettoReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -87,7 +84,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
Map<PairRegistryId, List<Registry>> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new));
|
||||
|
||||
lines = new ArrayList<>(registryMap.size());
|
||||
rows = new ArrayList<>(registryMap.size());
|
||||
for (Map.Entry<PairRegistryId, List<Registry>> entry : registryMap.entrySet()) {
|
||||
PairRegistryId pairRegistryId = entry.getKey();
|
||||
List<Registry> groupedRegistry = entry.getValue();
|
||||
|
|
@ -119,33 +116,20 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
String firmId = tmtRegistry.getTradingCode() != null ? tmtRegistry.getTradingCode() : "";
|
||||
String sessionId = String.valueOf(tmtRegistry.getSessionId());
|
||||
|
||||
Session session = sessionImdg.getSingleObjectByID(tmtRegistry.getSessionId());
|
||||
String sessionDate = "";
|
||||
if (session != null && session.getCreated() != null)
|
||||
sessionDate = dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
|
||||
|
||||
String account = tmtRegistry.getAccount();
|
||||
KSRepCashNettoReport ksRepCashNettoReport = new KSRepCashNettoReport();
|
||||
ksRepCashNettoReport.setFirmId(tmtRegistry.getTradingCode());
|
||||
ksRepCashNettoReport.setSessionId(tmtRegistry.getSessionId());
|
||||
ksRepCashNettoReport.setSessionDate(session != null ? session.getCreated() : null);
|
||||
ksRepCashNettoReport.setAccount(tmtRegistry.getAccount());
|
||||
ksRepCashNettoReport.setDate(nowDate);
|
||||
|
||||
BigDecimal tmtBalance = tmtRegistry.getBalance() != null ? tmtRegistry.getBalance() : BigDecimal.ZERO;
|
||||
BigDecimal omtBalance = omtRegistry.getBalance() != null ? omtRegistry.getBalance() : BigDecimal.ZERO;
|
||||
String value = df02Format.format(tmtBalance.subtract(omtBalance));
|
||||
|
||||
String date = dateFormatter.format(nowDate);
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = sessionId;
|
||||
line[valueIdx++] = sessionDate;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = value;
|
||||
line[valueIdx++] = date;
|
||||
lines.add(line);
|
||||
ksRepCashNettoReport.setValue(tmtBalance.subtract(omtBalance));
|
||||
|
||||
rows.add(ksRepCashNettoReport);
|
||||
} catch (Throwable e) {
|
||||
log.error(
|
||||
"Can't create report row for registries (id = [%s]), row was skipped".formatted(
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepCashRegisterSumsReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -28,14 +29,11 @@ import java.util.List;
|
|||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegisterSumsReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "ACCOUNT", "REGISTER_CODE", "ADD_SUM", "ADD_TIME", "ADD_DATE"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepCashRegisterSumsReport> rows = null;
|
||||
|
||||
public KSRepCashRegisterSumsReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -43,13 +41,8 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepCashRegisterSumsReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -63,10 +56,15 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepCashRegisterSumsReport> getReportClass() {
|
||||
return KSRepCashRegisterSumsReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -84,43 +82,32 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
|
|||
)
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
lines = new ArrayList<>(registries.size());
|
||||
rows = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
String registerCode = registry.getRegistryCode();
|
||||
String addTime = "";
|
||||
String addDate = dateFormatter.format(nowDate);
|
||||
|
||||
// Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry
|
||||
String addSum = "";
|
||||
if (registry.getCredit() != null) {
|
||||
addSum = df02Format.format(registry.getCredit());
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = addSum;
|
||||
line[valueIdx++] = addTime;
|
||||
line[valueIdx++] = addDate;
|
||||
lines.add(line);
|
||||
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
|
||||
ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode());
|
||||
ksRepCashRegisterSumsReport.setAccount(registry.getAccount());
|
||||
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepCashRegisterSumsReport.setAddDate(nowDate);
|
||||
ksRepCashRegisterSumsReport.setAddTime(null);
|
||||
ksRepCashRegisterSumsReport.setAddSum(registry.getCredit());
|
||||
rows.add(ksRepCashRegisterSumsReport);
|
||||
}
|
||||
if (registry.getDebit() != null) {
|
||||
addSum = "-" + df02Format.format(registry.getDebit());
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = addSum;
|
||||
line[valueIdx++] = addTime;
|
||||
line[valueIdx++] = addDate;
|
||||
lines.add(line);
|
||||
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
|
||||
ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode());
|
||||
ksRepCashRegisterSumsReport.setAccount(registry.getAccount());
|
||||
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepCashRegisterSumsReport.setAddDate(nowDate);
|
||||
ksRepCashRegisterSumsReport.setAddTime(null);
|
||||
ksRepCashRegisterSumsReport.setAddSum(registry.getDebit().negate());
|
||||
rows.add(ksRepCashRegisterSumsReport);
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import ru.clearing.platform.dictionary.RegistryCodeDictionary;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepCashRegistersReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -30,15 +31,13 @@ import java.util.Map;
|
|||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegistersReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<RegistryCodeDictionary> registryCodeDictionaryImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "ACCOUNT", "DATE", "REGISTER_CODE", "REGISTER_NAME", "OPEN_BALANCE", "CHANGE_BALANCE", "ADD_WITHDRAW", "CLOSE_BALANCE", "REMARKS"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
|
||||
private List<KSRepCashRegistersReport> rows = null;
|
||||
|
||||
public KSRepCashRegistersReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -46,14 +45,10 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
registryCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryCodeDictionary, RegistryCodeDictionary.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepCashRegistersReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -67,10 +62,15 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepCashRegistersReport> getReportClass() {
|
||||
return KSRepCashRegistersReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -88,55 +88,37 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
)
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
lines = new ArrayList<>(registries.size());
|
||||
rows = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
KSRepCashRegistersReport ksRepCashRegistersReport = new KSRepCashRegistersReport();
|
||||
ksRepCashRegistersReport.setFirmId(registry.getTradingCode());
|
||||
ksRepCashRegistersReport.setAccount(registry.getAccount());
|
||||
ksRepCashRegistersReport.setDate(nowDate);
|
||||
ksRepCashRegistersReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepCashRegistersReport.setOpenBalance(registry.getOpenBalance());
|
||||
ksRepCashRegistersReport.setCloseBalance(registry.getCloseBalance());
|
||||
ksRepCashRegistersReport.setRemarks("");
|
||||
|
||||
String date = dateFormatter.format(nowDate);
|
||||
String registerCode = registry.getRegistryCode();
|
||||
RegistryCodeDictionary registryCodeDictionary = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registry.getRegistryCode()));
|
||||
if (registryCodeDictionary != null) ksRepCashRegistersReport.setRegisterName(registryCodeDictionary.getName());
|
||||
|
||||
String registerName = "";
|
||||
RegistryCodeDictionary registryCodeDictionary = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
if (registryCodeDictionary != null) registerName = registryCodeDictionary.getName();
|
||||
|
||||
String openBalance = registry.getOpenBalance() != null ? df02Format.format(registry.getOpenBalance()) : "";
|
||||
|
||||
String changeBalance = "";
|
||||
if (registry.getSettledCredit() != null) {
|
||||
if (registry.getSettledDebit() != null)
|
||||
changeBalance = df02Format.format(registry.getSettledCredit().subtract(registry.getSettledDebit()));
|
||||
else changeBalance = df02Format.format(registry.getSettledCredit());
|
||||
ksRepCashRegistersReport.setChangeBalance(registry.getSettledCredit().subtract(registry.getSettledDebit()));
|
||||
else ksRepCashRegistersReport.setChangeBalance(registry.getSettledCredit());
|
||||
}
|
||||
|
||||
String addWithdraw = "";
|
||||
if (registry.getCredit() != null) {
|
||||
if (registry.getDebit() != null)
|
||||
addWithdraw = df02Format.format(registry.getCredit().subtract(registry.getDebit()));
|
||||
else addWithdraw = df02Format.format(registry.getCredit());
|
||||
ksRepCashRegistersReport.setAddWithdraw(registry.getCredit().subtract(registry.getDebit()));
|
||||
else ksRepCashRegistersReport.setAddWithdraw(registry.getCredit());
|
||||
}
|
||||
|
||||
String closeBalance = registry.getCloseBalance() != null ? df02Format.format(registry.getCloseBalance()) : "";
|
||||
String remarks = "";
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = date;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = registerName;
|
||||
line[valueIdx++] = openBalance;
|
||||
line[valueIdx++] = changeBalance;
|
||||
line[valueIdx++] = addWithdraw;
|
||||
line[valueIdx++] = closeBalance;
|
||||
line[valueIdx++] = remarks;
|
||||
|
||||
lines.add(line);
|
||||
rows.add(ksRepCashRegistersReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.PairRegistryId;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepDepoNettoReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
|
|
@ -22,20 +23,16 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
|||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam, KSRepDepoNettoReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Session> sessionImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "SESSION_ID", "SESSION_DATE", "ACCOUNT", "SECURITYID", "VALUE", "DATE"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepDepoNettoReport> rows = null;
|
||||
|
||||
public KSRepDepoNettoReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -43,13 +40,8 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepDepoNettoReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -63,10 +55,15 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
public Class<SessionIdParam> getParamsClass() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepDepoNettoReport> getReportClass() {
|
||||
return KSRepDepoNettoReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -84,7 +81,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<PairRegistryId, List<Registry>> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new));
|
||||
lines = new ArrayList<>(registries.size());
|
||||
rows = new ArrayList<>(registries.size());
|
||||
for (Map.Entry<PairRegistryId, List<Registry>> entry : registryMap.entrySet()) {
|
||||
PairRegistryId pairRegistryId = entry.getKey();
|
||||
List<Registry> groupedRegistry = entry.getValue();
|
||||
|
|
@ -118,34 +115,21 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
continue;
|
||||
}
|
||||
|
||||
String firmId = tstRegistry.getTradingCode() != null ? tstRegistry.getTradingCode() : "";
|
||||
String sessionId = String.valueOf(tstRegistry.getSessionId());
|
||||
KSRepDepoNettoReport ksRepDepoNettoReport = new KSRepDepoNettoReport();
|
||||
ksRepDepoNettoReport.setFirmId(tstRegistry.getTradingCode());
|
||||
ksRepDepoNettoReport.setSessionId(tstRegistry.getSessionId());
|
||||
ksRepDepoNettoReport.setAccount(tstRegistry.getAccount());
|
||||
ksRepDepoNettoReport.setSecurityId(tstRegistry.getSecuritySymbol());
|
||||
ksRepDepoNettoReport.setDate(nowDate);
|
||||
|
||||
Session session = sessionImdg.getSingleObjectByID(tstRegistry.getSessionId());
|
||||
String sessionDate = "";
|
||||
if (session != null && session.getCreated() != null)
|
||||
sessionDate = dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
|
||||
|
||||
String account = tstRegistry.getAccount();
|
||||
String securityId = tstRegistry.getSecuritySymbol() != null ? tstRegistry.getSecuritySymbol() : "";
|
||||
if (session != null) ksRepDepoNettoReport.setSessionDate(session.getCreated());
|
||||
|
||||
BigDecimal tmtBalance = tstRegistry.getBalance() != null ? tstRegistry.getBalance() : BigDecimal.ZERO;
|
||||
BigDecimal omtBalance = ostRegistry.getBalance() != null ? ostRegistry.getBalance() : BigDecimal.ZERO;
|
||||
String value = df02Format.format(tmtBalance.subtract(omtBalance));
|
||||
|
||||
String date = dateFormatter.format(nowDate);
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = sessionId;
|
||||
line[valueIdx++] = sessionDate;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = value;
|
||||
line[valueIdx++] = date;
|
||||
lines.add(line);
|
||||
ksRepDepoNettoReport.setValue(tmtBalance.subtract(omtBalance));
|
||||
|
||||
rows.add(ksRepDepoNettoReport);
|
||||
} catch (Throwable e) {
|
||||
log.error(
|
||||
"Can't create report row for registries (id = [%s]), row was skipped".formatted(
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepDepoRegisterQuantitiesReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -28,14 +29,11 @@ import java.util.List;
|
|||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepDepoRegisterQuantitiesReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "ACCOUNT", "SECURITYID", "REGISTER_CODE", "ADD_QUANTITY", "ADD_TIME", "ADD_DATE"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepDepoRegisterQuantitiesReport> rows = null;
|
||||
|
||||
public KSRepDepoRegisterQuantitiesReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -43,13 +41,8 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepDepoRegisterQuantitiesReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -63,10 +56,15 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepDepoRegisterQuantitiesReport> getReportClass() {
|
||||
return KSRepDepoRegisterQuantitiesReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -82,46 +80,34 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
|
|||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
lines = new ArrayList<>(registries.size());
|
||||
rows = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : "";
|
||||
String registerCode = registry.getRegistryCode();
|
||||
String addTime = "";
|
||||
String addDate = dateFormatter.format(nowDate);
|
||||
|
||||
// Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry
|
||||
String addQuantity = "";
|
||||
if (registry.getCredit() != null) {
|
||||
addQuantity = df02Format.format(registry.getCredit());
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = addQuantity;
|
||||
line[valueIdx++] = addTime;
|
||||
line[valueIdx++] = addDate;
|
||||
lines.add(line);
|
||||
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
|
||||
ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode());
|
||||
ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount());
|
||||
ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol());
|
||||
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepDepoRegisterQuantitiesReport.setAddTime(null);
|
||||
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
|
||||
ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getCredit());
|
||||
rows.add(ksRepDepoRegisterQuantitiesReport);
|
||||
}
|
||||
if (registry.getDebit() != null) {
|
||||
addQuantity = "-" + df02Format.format(registry.getDebit());
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = addQuantity;
|
||||
line[valueIdx++] = addTime;
|
||||
line[valueIdx++] = addDate;
|
||||
lines.add(line);
|
||||
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
|
||||
ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode());
|
||||
ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount());
|
||||
ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol());
|
||||
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepDepoRegisterQuantitiesReport.setAddTime(null);
|
||||
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
|
||||
ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getDebit().negate());
|
||||
rows.add(ksRepDepoRegisterQuantitiesReport);
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import ru.clearing.platform.dictionary.RegistryCodeDictionary;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepDepoRegistersReport;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -30,15 +31,12 @@ import java.util.Map;
|
|||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParams, KSRepDepoRegistersReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<RegistryCodeDictionary> registryCodeDictionaryImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "ACCOUNT", "DATE", "SECURITYID", "REGISTER_CODE", "REGISTER_NAME", "OPEN_QUANTITY", "CHANGE_QUANTITY", "ADD_WITHDRAW_DEPO", "CLOSE_QUANTITY", "REMARKS"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepDepoRegistersReport> rows = null;
|
||||
|
||||
public KSRepDepoRegistersReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
|
|
@ -47,13 +45,8 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepDepoRegistersReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -67,10 +60,15 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepDepoRegistersReport> getReportClass() {
|
||||
return KSRepDepoRegistersReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -86,56 +84,38 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
lines = new ArrayList<>(registries.size());
|
||||
rows = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
String date = dateFormatter.format(nowDate);
|
||||
String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : "";
|
||||
String registerCode = registry.getRegistryCode();
|
||||
KSRepDepoRegistersReport ksRepDepoRegistersReport = new KSRepDepoRegistersReport();
|
||||
ksRepDepoRegistersReport.setFirmId(registry.getTradingCode());
|
||||
ksRepDepoRegistersReport.setAccount(registry.getAccount());
|
||||
ksRepDepoRegistersReport.setDate(nowDate);
|
||||
ksRepDepoRegistersReport.setSecurityId(registry.getSecuritySymbol());
|
||||
ksRepDepoRegistersReport.setRegisterCode(registry.getRegistryCode());
|
||||
ksRepDepoRegistersReport.setOpenQuantity(registry.getOpenBalance());
|
||||
ksRepDepoRegistersReport.setCloseQuantity(registry.getCloseBalance());
|
||||
ksRepDepoRegistersReport.setRemarks(null);
|
||||
|
||||
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
String registerName = "";
|
||||
if (registryCodeDescription != null) registerName = registryCodeDescription.getName();
|
||||
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registry.getRegistryCode()));
|
||||
if (registryCodeDescription != null) ksRepDepoRegistersReport.setRegisterName(registryCodeDescription.getName());
|
||||
|
||||
String openQuantity = registry.getOpenBalance() != null ? registry.getOpenBalance().toString() : "";
|
||||
|
||||
String changeQuantity = "";
|
||||
if (registry.getSettledCredit() != null) {
|
||||
if (registry.getSettledDebit() != null)
|
||||
changeQuantity = registry.getSettledCredit().subtract(registry.getSettledDebit()).toString();
|
||||
else changeQuantity = registry.getSettledCredit().toString();
|
||||
ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit().subtract(registry.getSettledDebit()));
|
||||
else ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit());
|
||||
}
|
||||
|
||||
String addWithdrawDepo = "";
|
||||
if (registry.getCredit() != null) {
|
||||
if (registry.getDebit() != null)
|
||||
addWithdrawDepo = registry.getCredit().subtract(registry.getDebit()).toString();
|
||||
else addWithdrawDepo = registry.getCredit().toString();
|
||||
ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit().subtract(registry.getDebit()));
|
||||
else ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit());
|
||||
}
|
||||
|
||||
String closeQuantity = registry.getCloseBalance() != null ? registry.getCloseBalance().toString() : "";
|
||||
String remarks = "";
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = date;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = registerCode;
|
||||
line[valueIdx++] = registerName;
|
||||
line[valueIdx++] = openQuantity;
|
||||
line[valueIdx++] = changeQuantity;
|
||||
line[valueIdx++] = addWithdrawDepo;
|
||||
line[valueIdx++] = closeQuantity;
|
||||
line[valueIdx++] = remarks;
|
||||
|
||||
lines.add(line);
|
||||
rows.add(ksRepDepoRegistersReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import ru.clearing.classes.statics.data.profile.ProfileDocument;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepFirmDetailsReport;
|
||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||
import ru.spcex.platform.enumeration.DocumentTypes;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -24,15 +25,12 @@ import java.util.Map;
|
|||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams, KSRepFirmDetailsReport> {
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<CompanySymbols> companySymbolsImdg;
|
||||
private final Imdg<ProfileDocument> profileDocumentImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"FIRMID", "PART_INN", "PART_KPP", "AGREEMENT_NUMBER", "AGREEMENT_DATE", "AGREEMENT_NAME", "FIRM_NAME"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepFirmDetailsReport> rows = null;
|
||||
|
||||
public KSRepFirmDetailsReportBuilder(ImdgProvider imdgProvider) {
|
||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
|
|
@ -41,13 +39,8 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams>
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepFirmDetailsReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -61,26 +54,28 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams>
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepFirmDetailsReport> getReportClass() {
|
||||
return KSRepFirmDetailsReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
Collection<Company> companies = companyImdg.getCollectionObjectsByFieldValues(Map.of("workflowStatus", WorkflowStatus.Active.getKey()));
|
||||
|
||||
lines = new ArrayList<>(companies.size());
|
||||
rows = new ArrayList<>(companies.size());
|
||||
for (Company company : companies) {
|
||||
try {
|
||||
String firmId = company.getTradingCode() != null ? company.getTradingCode() : "";
|
||||
|
||||
CompanySymbols innCompanySymbol = companySymbolsImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
"companyId", company.getId(),
|
||||
"companySymbol", CompanySymbol.INN.getKey()
|
||||
)
|
||||
);
|
||||
String partInn = innCompanySymbol != null && innCompanySymbol.getCompanySymbolValue() != null ? innCompanySymbol.getCompanySymbolValue() : "";
|
||||
|
||||
CompanySymbols cppCompanySymbol = companySymbolsImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
|
|
@ -88,7 +83,6 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams>
|
|||
"companySymbol", CompanySymbol.CPP.getKey()
|
||||
)
|
||||
);
|
||||
String partKpp = cppCompanySymbol != null && cppCompanySymbol.getCompanySymbolValue() != null ? cppCompanySymbol.getCompanySymbolValue() : "";
|
||||
|
||||
ProfileDocument profileDocument = profileDocumentImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
|
|
@ -96,28 +90,20 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams>
|
|||
"documentType", DocumentTypes.cntr.getKey()
|
||||
)
|
||||
);
|
||||
String agreementNumber = "";
|
||||
String agreementDate = "";
|
||||
String agreementName = "";
|
||||
|
||||
KSRepFirmDetailsReport ksRepFirmDetailsReport = new KSRepFirmDetailsReport();
|
||||
ksRepFirmDetailsReport.setFirmId(company.getTradingCode());
|
||||
ksRepFirmDetailsReport.setPartInn(innCompanySymbol != null ? innCompanySymbol.getCompanySymbolValue() : null);
|
||||
ksRepFirmDetailsReport.setPartKpp(cppCompanySymbol != null ? cppCompanySymbol.getCompanySymbolValue() : null);
|
||||
ksRepFirmDetailsReport.setFirmName(company.getFullName());
|
||||
|
||||
if (profileDocument != null) {
|
||||
agreementNumber = profileDocument.getNumber() != null ? profileDocument.getNumber() : "";
|
||||
agreementDate = profileDocument.getIssueDate() != null ? dateFormatter.format(profileDocument.getIssueDate()) : "";
|
||||
agreementName = profileDocument.getName() != null ? profileDocument.getName() : "";
|
||||
ksRepFirmDetailsReport.setAgreementNumber(profileDocument.getNumber());
|
||||
ksRepFirmDetailsReport.setAgreementDate(profileDocument.getIssueDate());
|
||||
ksRepFirmDetailsReport.setAgreementName(profileDocument.getName());
|
||||
}
|
||||
|
||||
String firmName = company.getFullName() != null ? company.getFullName() : "";
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = partInn;
|
||||
line[valueIdx++] = partKpp;
|
||||
line[valueIdx++] = agreementNumber;
|
||||
line[valueIdx++] = agreementDate;
|
||||
line[valueIdx++] = agreementName;
|
||||
line[valueIdx++] = firmName;
|
||||
|
||||
lines.add(line);
|
||||
rows.add(ksRepFirmDetailsReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for company (id = %d), skipped".formatted(company.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.bean.KSRepTradesReport;
|
||||
import ru.spcex.platform.enumeration.*;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
|
@ -21,23 +22,21 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepTradesReport> {
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Session> sessionImdg;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"SESSION_ID", "SESSION_DATE", "TR_ID", "FIRM_ID", "TKR", "CASH_LIABILITY", "DEPO_LIABILITY", "TRADE_NUM", "CLASS_CODE", "TRADE_DATE", "STATUS"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
private List<KSRepTradesReport> rows = null;
|
||||
|
||||
public KSRepTradesReportBuilder(ImdgProvider imdgProvider) {
|
||||
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
|
|
@ -48,13 +47,8 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
protected List<KSRepTradesReport> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -68,10 +62,15 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
public Class<EmptyParams> getParamsClass() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KSRepTradesReport> getReportClass() {
|
||||
return KSRepTradesReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -88,49 +87,30 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
executions.addAll(executionDeposits);
|
||||
executions.addAll(executionFonds);
|
||||
|
||||
Map<Long, String> tradingCodeForCompanyId = new HashMap<>();
|
||||
Map<Long, String> sessionDateForSessionId = new HashMap<>();
|
||||
lines = new ArrayList<>(executions.size());
|
||||
rows = new ArrayList<>(executions.size());
|
||||
for (ExecutionCommon execution : executions) {
|
||||
try {
|
||||
String sessionId = execution.getSessionId() != null ? String.valueOf(execution.getSessionId()) : "";
|
||||
KSRepTradesReport ksRepTradesReport = new KSRepTradesReport();
|
||||
ksRepTradesReport.setSessionId(execution.getSessionId());
|
||||
ksRepTradesReport.setTrId(execution.getId());
|
||||
ksRepTradesReport.setTkr(execution.getTradingClearingRegistryId());
|
||||
|
||||
String sessionDate = "";
|
||||
if (execution.getSessionId() != null) {
|
||||
sessionDate = sessionDateForSessionId.get(execution.getSessionId());
|
||||
if (sessionDate == null) {
|
||||
Session session = sessionImdg.getSingleObjectByID(execution.getSessionId());
|
||||
sessionDate = session != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault())) : "";
|
||||
sessionDateForSessionId.put(execution.getSessionId(), sessionDate);
|
||||
}
|
||||
}
|
||||
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
|
||||
ksRepTradesReport.setFirmId(company != null ? company.getTradingCode() : null);
|
||||
|
||||
String trId = String.valueOf(execution.getId());
|
||||
Session session = sessionImdg.getSingleObjectByID(execution.getSessionId());
|
||||
ksRepTradesReport.setSessionDate(session != null ? session.getCreated() : null);
|
||||
|
||||
String firmId = "";
|
||||
if (execution.getCompanyId() != null) {
|
||||
firmId = tradingCodeForCompanyId.get(execution.getCompanyId());
|
||||
if (firmId == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
|
||||
firmId = company != null && company.getTradingCode() != null ? company.getTradingCode() : "";
|
||||
tradingCodeForCompanyId.put(execution.getCompanyId(), firmId);
|
||||
}
|
||||
}
|
||||
|
||||
String tkr = execution.getTradingClearingRegistryId() != null ? String.valueOf(execution.getTradingClearingRegistryId()) : "";
|
||||
|
||||
String cashLiability = "";
|
||||
String depoLiability = "";
|
||||
if (execution instanceof ExecutionDeposit executionDeposit) {
|
||||
cashLiability = executionDeposit.getFirstLegAmount() != null ? df02Format.format(executionDeposit.getFirstLegAmount()) : "";
|
||||
ksRepTradesReport.setCashLiability(executionDeposit.getFirstLegAmount());
|
||||
} else if (execution instanceof ExecutionFond executionFond) {
|
||||
cashLiability = executionFond.getSettlementAmount() != null ? df02Format.format(executionFond.getSettlementAmount()) : "";
|
||||
depoLiability = executionFond.getQuantity() != null ? executionFond.getQuantity().toString() : "";
|
||||
ksRepTradesReport.setCashLiability(executionFond.getSettlementAmount());
|
||||
ksRepTradesReport.setDepoLiability(executionFond.getQuantity());
|
||||
}
|
||||
|
||||
String tradeNum = execution.getExchangeExecutionId() != null ? String.valueOf(execution.getExchangeExecutionId()) : "";
|
||||
String classCode = "";
|
||||
String tradeDate = execution.getExchangeExecutionTime() != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(execution.getExchangeExecutionTime(), ZoneId.systemDefault())) : "";
|
||||
ksRepTradesReport.setTradeNum(execution.getExchangeExecutionId());
|
||||
ksRepTradesReport.setClassCode(null);
|
||||
ksRepTradesReport.setTradeDate(execution.getExchangeExecutionTime());
|
||||
|
||||
String status = "";
|
||||
if (execution.getCoverageStatus() != null) {
|
||||
|
|
@ -227,22 +207,9 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
|
||||
}
|
||||
}
|
||||
ksRepTradesReport.setStatus(status);
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = sessionId;
|
||||
line[valueIdx++] = sessionDate;
|
||||
line[valueIdx++] = trId;
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = tkr;
|
||||
line[valueIdx++] = cashLiability;
|
||||
line[valueIdx++] = depoLiability;
|
||||
line[valueIdx++] = tradeNum;
|
||||
line[valueIdx++] = classCode;
|
||||
line[valueIdx++] = tradeDate;
|
||||
line[valueIdx++] = status;
|
||||
|
||||
lines.add(line);
|
||||
rows.add(ksRepTradesReport);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for execution_%s (id = %d), skipped".formatted(execution instanceof ExecutionFond ? "fond" : "deposit", execution.getId()), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,15 +12,15 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.ReportPart;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SendReportRequest;
|
||||
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.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
|
||||
import ru.spcex.clearing.reports.reports.*;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
|
|
@ -30,7 +30,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
|
|
@ -43,19 +42,15 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
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 Function<LauncherCommandRequest, IValidator> reportRequestGREPValidator;
|
||||
private final Function<LauncherCommandRequest, IValidator> reportRequestGRETValidator;
|
||||
private final Function<LauncherCommandRequest, IValidator> reportRequestGREFValidator;
|
||||
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREP;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREF;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGRET;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams, ?>>> reportBuildersWithoutParams;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam, ?>>> reportBuildersWithSessionIdParam;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREP;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREF;
|
||||
private final Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGRET;
|
||||
|
||||
private final File outFolder;
|
||||
|
||||
|
|
@ -67,29 +62,21 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
ReportsServiceSettings reportsServiceSettings,
|
||||
|
||||
@Qualifier("reportBuildersWithoutParams")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams,
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<EmptyParams, ?>>> reportBuildersWithoutParams,
|
||||
@Qualifier("reportBuildersWithSessionIdParam")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam,
|
||||
@Qualifier("reportBuildersWithSessionIdListParam")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam,
|
||||
@Qualifier("reportBuildersWithPeriodParams")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams,
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<SessionIdParam, ?>>> reportBuildersWithSessionIdParam,
|
||||
|
||||
@Qualifier("reportBuildersForGREP")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREP,
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREP,
|
||||
@Qualifier("reportBuildersForGREF")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGREF,
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGREF,
|
||||
@Qualifier("reportBuildersForGRET")
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?>>> reportBuildersForGRET,
|
||||
Map<ReportBuilderType, List<CSVReportBuilder<?, ?>>> reportBuildersForGRET,
|
||||
|
||||
@Qualifier("reportRequestValidator")
|
||||
Function<ReportRequest, IValidator> reportRequestValidator,
|
||||
@Qualifier("reportRequestWithSessionIdValidator")
|
||||
Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator,
|
||||
@Qualifier("reportRequestWithSessionIdListValidator")
|
||||
Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator,
|
||||
@Qualifier("reportRequestWithPeriodValidator")
|
||||
Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator,
|
||||
|
||||
@Qualifier("reportRequestGREPValidator")
|
||||
Function<LauncherCommandRequest, IValidator> reportRequestGREPValidator,
|
||||
|
|
@ -105,12 +92,8 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
this.kafkaSender = kafkaSender;
|
||||
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.reportRequestGREPValidator = reportRequestGREPValidator;
|
||||
this.reportRequestGRETValidator = reportRequestGRETValidator;
|
||||
this.reportRequestGREFValidator = reportRequestGREFValidator;
|
||||
|
|
@ -129,12 +112,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
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);
|
||||
callback(LauncherCommandRequest.class)
|
||||
.setFunction(this::createReportForGREP)
|
||||
.forDestination(Task.createReport_GREP.topic(), callbacks::put);
|
||||
|
|
@ -161,11 +138,11 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
log.debug("Create report type {}...", req.getReportId());
|
||||
|
||||
List<CSVReportBuilder<EmptyParams>> builders = reportBuildersWithoutParams.get(
|
||||
List<CSVReportBuilder<EmptyParams, ?>> builders = reportBuildersWithoutParams.get(
|
||||
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
|
||||
);
|
||||
List<String> outFilenames = new ArrayList<>();
|
||||
for (CSVReportBuilder<EmptyParams> builder : builders) {
|
||||
for (CSVReportBuilder<EmptyParams, ?> builder : builders) {
|
||||
File outFile = builder.createReport(new EmptyParams(), outFolder);
|
||||
if (outFile == null) continue;
|
||||
outFilenames.add(outFile.getAbsolutePath());
|
||||
|
|
@ -196,11 +173,11 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
log.debug("Create report type {}...", req.getReportId());
|
||||
|
||||
List<CSVReportBuilder<SessionIdParam>> builders = reportBuildersWithSessionIdParam.get(
|
||||
List<CSVReportBuilder<SessionIdParam, ?>> builders = reportBuildersWithSessionIdParam.get(
|
||||
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
|
||||
);
|
||||
List<String> outFilenames = new ArrayList<>();
|
||||
for (CSVReportBuilder<SessionIdParam> builder : builders) {
|
||||
for (CSVReportBuilder<SessionIdParam, ?> builder : builders) {
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(req.getSessionId());
|
||||
File outFile = builder.createReport(sessionIdParam, outFolder);
|
||||
|
|
@ -219,81 +196,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
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();
|
||||
|
||||
logUnknownProperties(userRequest);
|
||||
|
||||
log.debug("Create report type {}...", req.getReportId());
|
||||
|
||||
List<CSVReportBuilder<SessionIdListParams>> builders = reportBuildersWithSessionIdListParam.get(
|
||||
IEnumKey.getEnumByKey(ReportBuilderType.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();
|
||||
|
||||
logUnknownProperties(userRequest);
|
||||
|
||||
log.debug("Create report type {}...", req.getReportId());
|
||||
|
||||
List<CSVReportBuilder<PeriodParams>> builders = reportBuildersWithPeriodParams.get(
|
||||
IEnumKey.getEnumByKey(ReportBuilderType.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;
|
||||
}
|
||||
|
||||
public RequestInfoUpdate createReportForGREP(BaseRequest<LauncherCommandRequest> userRequest) {
|
||||
log.debug("GREP task received");
|
||||
|
||||
|
|
@ -342,45 +244,23 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
return null;
|
||||
}
|
||||
|
||||
private Map<String, ReportBuilderType> createReportsForTask(Long sessionId, Collection<List<CSVReportBuilder<?>>> buildersForTask) {
|
||||
private Map<String, ReportBuilderType> createReportsForTask(Long sessionId, Collection<List<CSVReportBuilder<?, ?>>> buildersForTask) {
|
||||
Map<String, ReportBuilderType> outFilenames = new HashMap<>();
|
||||
int cntErrors = 0;
|
||||
LocalDate now = LocalDate.now();
|
||||
for (List<CSVReportBuilder<?>> builders : buildersForTask) {
|
||||
for (CSVReportBuilder<?> builder : builders) {
|
||||
if (builder.getParamsType() == EmptyParams.class) {
|
||||
File outFile = ((CSVReportBuilder<EmptyParams>) builder).createReport(new EmptyParams(), outFolder);
|
||||
for (List<CSVReportBuilder<?, ?>> builders : buildersForTask) {
|
||||
for (CSVReportBuilder<?, ?> builder : builders) {
|
||||
if (builder.getParamsClass() == EmptyParams.class) {
|
||||
File outFile = ((CSVReportBuilder<EmptyParams, ?>) builder).createReport(new EmptyParams(), outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == SessionIdParam.class && sessionId != null) {
|
||||
} else if (builder.getParamsClass() == SessionIdParam.class && sessionId != null) {
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(sessionId);
|
||||
File outFile = ((CSVReportBuilder<SessionIdParam>) builder).createReport(sessionIdParam, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == SessionIdListParams.class && sessionId != null) {
|
||||
SessionIdListParams sessionIdListParams = new SessionIdListParams();
|
||||
sessionIdListParams.setSessionIdList(List.of(sessionId));
|
||||
File outFile = ((CSVReportBuilder<SessionIdListParams>) builder).createReport(sessionIdListParams, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == PeriodParams.class) {
|
||||
PeriodParams periodParams = new PeriodParams();
|
||||
periodParams.setStartDate(now);
|
||||
periodParams.setEndDate(now);
|
||||
File outFile = ((CSVReportBuilder<PeriodParams>) builder).createReport(periodParams, outFolder);
|
||||
File outFile = ((CSVReportBuilder<SessionIdParam, ?>) builder).createReport(sessionIdParam, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
|
|
|
|||
|
|
@ -1,211 +0,0 @@
|
|||
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.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.company.CompanySymbols;
|
||||
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.misc.Session;
|
||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||
import ru.clearing.classes.statics.data.profile.ProfileDocument;
|
||||
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.clearing.platform.dictionary.RegistryCodeDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
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.reports.reports.SessionIdParam;
|
||||
import ru.spcex.clearing.reports.reports.bp.UnfulfilledDealReportBuilder_;
|
||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||
import ru.spcex.platform.enumeration.Allowed;
|
||||
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 javax.annotation.PostConstruct;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
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 PrototypeTest {
|
||||
private static File outFolder;
|
||||
private Imdg<Registry> registryImdg;
|
||||
private Imdg<Company> companyImdg;
|
||||
private Imdg<RegistryCodeDictionary> registryCodeDictionaryImdg;
|
||||
private Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private Imdg<ExecutionFond> executionFondImdg;
|
||||
private Imdg<Session> sessionImdg;
|
||||
private Imdg<CompanySymbols> companySymbolsImdg;
|
||||
private Imdg<ProfileDocument> profileDocumentImdg;
|
||||
|
||||
private Long COMPANY_ID;
|
||||
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
|
||||
@Qualifier("hazelcastServiceTest")
|
||||
private ImdgProvider imdgProvider;
|
||||
|
||||
@Autowired
|
||||
private UnfulfilledDealReportBuilder_ reportBuilder;
|
||||
|
||||
@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 test() throws IOException, CsvValidationException {
|
||||
clearTestDir();
|
||||
|
||||
Company company = new Company();
|
||||
company.setWorkflowStatus(WorkflowStatus.Active.getKey());
|
||||
Long id = companyImdg.insert(company);
|
||||
|
||||
Session session = new Session();
|
||||
Long sessionId = sessionImdg.insert(session);
|
||||
|
||||
ExecutionFond executionFond = new ExecutionFond();
|
||||
executionFond.setSessionId(sessionId);
|
||||
executionFond.setCompanyId(id);
|
||||
executionFond.setCoverageStatus(Allowed.DENIED.getKey());
|
||||
executionFond.setSettlementCode("SETCODE");
|
||||
executionFond.setSide(Side.SELL.getKey());
|
||||
|
||||
STrades sTrades = new STrades();
|
||||
sTrades.setSettleCode("SETCODE");
|
||||
sTrades.setOperation(Side.SELL.getKey());
|
||||
sTrades.setClassCode("test-class-code");
|
||||
sTradeImdg.insert(sTrades);
|
||||
|
||||
executionFond.setSecurityId(3007L);
|
||||
executionFond.setExchangeExecutionId(777L);
|
||||
executionFond.setTradingDate(LocalDate.of(2023, 6, 20));
|
||||
|
||||
executionFondImdg.insert(executionFond);
|
||||
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(sessionId);
|
||||
|
||||
File outFile = reportBuilder.createReport(sessionIdParam, outFolder);
|
||||
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/unfulfilled_deal_report_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Collections.emptyList());
|
||||
}
|
||||
|
||||
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();
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
registryCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryCodeDictionary, RegistryCodeDictionary.class);
|
||||
|
||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
Company company = new Company();
|
||||
company.setWorkflowStatus(WorkflowStatus.Active.getKey());
|
||||
company.setTradingCode("TRADING_CODE");
|
||||
COMPANY_ID = companyImdg.insert(company);
|
||||
|
||||
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
|
||||
sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||
}
|
||||
|
||||
private void clearTestDir() throws IOException {
|
||||
FileUtils.deleteDirectory(outFolder);
|
||||
outFolder.mkdir();
|
||||
}
|
||||
}
|
||||
|
|
@ -26,10 +26,7 @@ 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;
|
||||
|
|
@ -176,193 +173,6 @@ public class ReportServiceTest_BP {
|
|||
|
||||
@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(ReportBuilderType.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/bp/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(ReportBuilderType.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/bp/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(ReportBuilderType.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/bp/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(ReportBuilderType.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/bp/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(ReportBuilderType.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/bp/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(ReportBuilderType.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/bp/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/bp/KS_BR_PFX64_empty_expected.csv").getFile());
|
||||
|
|
@ -397,7 +207,7 @@ public class ReportServiceTest_BP {
|
|||
|
||||
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE"));
|
||||
|
||||
for (File file : outFolder.listFiles()) {
|
||||
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
|
||||
|
|
@ -414,7 +224,7 @@ public class ReportServiceTest_BP {
|
|||
}
|
||||
|
||||
@Test
|
||||
@Order(8)
|
||||
@Order(2)
|
||||
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_2() throws CsvValidationException, IOException {
|
||||
clearTestDir();
|
||||
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile());
|
||||
|
|
@ -449,7 +259,7 @@ public class ReportServiceTest_BP {
|
|||
|
||||
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE"));
|
||||
|
||||
for (File file : outFolder.listFiles()) {
|
||||
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
|
||||
|
|
@ -466,7 +276,7 @@ public class ReportServiceTest_BP {
|
|||
}
|
||||
|
||||
@Test
|
||||
@Order(9)
|
||||
@Order(3)
|
||||
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_3() throws CsvValidationException, IOException {
|
||||
clearTestDir();
|
||||
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile());
|
||||
|
|
@ -498,7 +308,7 @@ public class ReportServiceTest_BP {
|
|||
|
||||
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE"));
|
||||
|
||||
for (File file : outFolder.listFiles()) {
|
||||
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
|
||||
|
|
@ -515,7 +325,7 @@ public class ReportServiceTest_BP {
|
|||
}
|
||||
|
||||
@Test
|
||||
@Order(10)
|
||||
@Order(4)
|
||||
public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_4() throws CsvValidationException, IOException {
|
||||
clearTestDir();
|
||||
File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile());
|
||||
|
|
@ -548,7 +358,7 @@ public class ReportServiceTest_BP {
|
|||
|
||||
File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate"));
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE"));
|
||||
|
||||
for (File file : outFolder.listFiles()) {
|
||||
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
|
||||
|
|
@ -565,7 +375,7 @@ public class ReportServiceTest_BP {
|
|||
}
|
||||
|
||||
@Test
|
||||
@Order(11)
|
||||
@Order(5)
|
||||
public void createReportTest_UNFULFILLED_DEAL_REPORT() throws IOException, CsvValidationException {
|
||||
clearTestDir();
|
||||
|
||||
|
|
@ -598,7 +408,7 @@ public class ReportServiceTest_BP {
|
|||
|
||||
File outFile = outFolder.listFiles()[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/unfulfilled_deal_report_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate"));
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE"));
|
||||
|
||||
testExecutionFond.setSessionId(oldExecutionFondSessionId);
|
||||
testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus);
|
||||
|
|
|
|||
|
|
@ -18,15 +18,9 @@ import ru.clearing.classes.statics.data.company.Company;
|
|||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
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.misc.Session;
|
||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||
import ru.clearing.classes.statics.data.profile.ProfileDocument;
|
||||
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.clearing.platform.dictionary.RegistryCodeDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -85,12 +79,6 @@ public class ReportServiceTest_KS {
|
|||
private Imdg<ProfileDocument> profileDocumentImdg;
|
||||
|
||||
private Long COMPANY_ID;
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
|
||||
"test-security-symbol-1","777","20.06.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777"
|
||||
"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE"
|
||||
"test-security-symbol-1","777","27.06.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
|
||||
"test-security-symbol-1","777","30.06.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777"
|
||||
"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE"
|
||||
"test-security-symbol-1","777","07.07.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
|
||||
"test-security-symbol-1","777","10.07.2023","25.08.1994","10.07.2023","test-settle-code","1000","7777","7777777"
|
||||
"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE"
|
||||
"test-security-symbol-1","777","17.07.2023","25.08.1994T01:22:57","17.07.2023","test-settle-code","1000.00","7777.00","7777777.00"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
|
||||
"test-security-symbol-1","777","10.07.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777"
|
||||
"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE"
|
||||
"test-security-symbol-1","777","17.07.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00"
|
||||
|
|
|
|||
|
|
|
@ -1 +1 @@
|
|||
securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value
|
||||
"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANITY","VALUE"
|
||||
|
|
|
|||
|
|
|
@ -1,3 +0,0 @@
|
|||
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
|
||||
"0","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"
|
||||
"1","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,3 +0,0 @@
|
|||
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
|
||||
"0","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","CM","3","777","700000","780","","777777","17.05.2023T12:10:50","77777","17.05.2023T12:10:50"
|
||||
"1","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","CM","2","888","900000","890","","999999","17.05.2023T12:10:50","99999","17.05.2023T12:10:50"
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
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
|
||||
"0","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"
|
||||
"1","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,3 +0,0 @@
|
|||
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
|
||||
"0","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","CM","3","777","700000","780","","777777","17.05.2023T12:18:01","77777","17.05.2023T12:18:01"
|
||||
"1","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","CM","2","888","900000","890","","999999","17.05.2023T12:18:01","99999","17.05.2023T12:18:01"
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
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
|
||||
0,"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"
|
||||
1,"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,3 +0,0 @@
|
|||
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
|
||||
"0","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","CM","3","777","700000","780","","777777","17.05.2023T12:25:42","77777","17.05.2023T12:25:42"
|
||||
"1","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","CM","2","888","900000","890","","999999","17.05.2023T12:25:42","99999","17.05.2023T12:25:42"
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
FIRMID,SESSION_ID,SESSION_DATE,ACCOUNT,VALUE,DATE
|
||||
"TRADING_CODE","2","20.01.1970T02:49:58","ACCOUNT","22,22","30.06.2023"
|
||||
"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","VALUE","DATE"
|
||||
"TRADING_CODE","2","19.01.1970T23:49:58","ACCOUNT","22.22","07.07.2023"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
FIRMID,ACCOUNT,DATE,REGISTER_CODE,REGISTER_NAME,OPEN_BALANCE,CHANGE_BALANCE,ADD_WITHDRAW,CLOSE_BALANCE,REMARKS
|
||||
"TRADING_CODE","ACCOUNT","30.06.2023","AM_T","AM_T_NAME","77,78","66,67","66,67","11,11",""
|
||||
"FIRMID","ACCOUNT","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS"
|
||||
"TRADING_CODE","ACCOUNT","07.07.2023","AM_T","AM_T_NAME","77.78","66.67","66.67","11.11",""
|
||||
|
|
|
|||
|
|
|
@ -1,3 +1,3 @@
|
|||
FIRMID,ACCOUNT,REGISTER_CODE,ADD_SUM,ADD_TIME,ADD_DATE
|
||||
"TRADING_CODE","ACCOUNT","AM__","44,44","","04.07.2023"
|
||||
"TRADING_CODE","ACCOUNT","AM__","-22,22","","04.07.2023"
|
||||
"FIRMID","ACCOUNT","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE"
|
||||
"TRADING_CODE","ACCOUNT","AM__","44.44","","2023-07-07"
|
||||
"TRADING_CODE","ACCOUNT","AM__","-22.22","","2023-07-07"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
FIRMID,SESSION_ID,SESSION_DATE,ACCOUNT,SECURITYID,VALUE,DATE
|
||||
"TRADING_CODE","2","20.01.1970T02:49:58","ACCOUNT","SECURITY_SYMBOL","22,22","30.06.2023"
|
||||
"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","SECURITYID","VALUE","DATE"
|
||||
"TRADING_CODE","2","19.01.1970T23:49:58","ACCOUNT","SECURITY_SYMBOL","22.22","07.07.2023"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
FIRMID,ACCOUNT,DATE,SECURITYID,REGISTER_CODE,REGISTER_NAME,OPEN_QUANTITY,CHANGE_QUANTITY,ADD_WITHDRAW_DEPO,CLOSE_QUANTITY,REMARKS
|
||||
"TRADING_CODE","ACCOUNT","30.06.2023","","AS_T","AS_T_NAME","77.777777777","66.66666668","66.66666668","11.11111111",""
|
||||
"FIRMID","ACCOUNT","DATE","SECURITYID","REGISTER_CODE","REGISTER_NAME","OPEN_QUANTITY","CHANGE_QUANTITY","ADD_WITHDRAW_DEPO","CLOSE_QUANTITY","REMARKS"
|
||||
"TRADING_CODE","ACCOUNT","07.07.2023","","AS_T","AS_T_NAME","77.78","66.67","66.67","11.11",""
|
||||
|
|
|
|||
|
|
|
@ -1,3 +1,3 @@
|
|||
FIRMID,ACCOUNT,SECURITYID,REGISTER_CODE,ADD_QUANTITY,ADD_TIME,ADD_DATE
|
||||
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44,44","","04.07.2023"
|
||||
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22,22","","04.07.2023"
|
||||
"FIRMID","ACCOUNT","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE"
|
||||
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44.44","","07.07.2023"
|
||||
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22.22","","07.07.2023"
|
||||
|
|
|
|||
|
|
|
@ -1,2 +1,2 @@
|
|||
FIRMID,PART_INN,PART_KPP,AGREEMENT_NUMBER,AGREEMENT_DATE,AGREEMENT_NAME,FIRM_NAME
|
||||
"FIRMID","PART_INN","PART_KPP","AGREEMENT_NUMBER","AGREEMENT_DATE","AGREEMENT_NAME","FIRM_NAME"
|
||||
"TRADING_CODE","INN___","CPP____","NUMBER","01.01.1999","NAME","FULL_NAME"
|
||||
|
|
|
|||
|
|
|
@ -1,3 +1,3 @@
|
|||
SESSION_ID,SESSION_DATE,TR_ID,FIRM_ID,TKR,CASH_LIABILITY,DEPO_LIABILITY,TRADE_NUM,CLASS_CODE,TRADE_DATE,STATUS
|
||||
"3","20.01.1970T07:09:07","6","TRADING_CODE","666","8888,89","","222","","20.01.1970T02:49:58","3"
|
||||
"2","20.01.1970T15:54:43","4","TRADING_CODE","666","8888,89","123.456789","222","","20.01.1970T02:49:58","1"
|
||||
"SESSION_ID","SESSION_DATE","TR_ID","FIRM_ID","TKR","CASH_LIABILITY","DEPO_LIABILITY","TRADE_NUM","CLASS_CODE","TRADE_DATE","STATUS"
|
||||
"3","20.01.1970T04:09:07","6","TRADING_CODE","666","8888.89","","222","","19.01.1970T23:49:58","3"
|
||||
"2","20.01.1970T12:54:43","4","TRADING_CODE","666","8888.89","123.46","222","","19.01.1970T23:49:58","1"
|
||||
|
|
|
|||
|
|
|
@ -7,12 +7,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|||
* todo сделать для них dictionary
|
||||
*/
|
||||
public enum ReportBuilderType 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"),
|
||||
KS_REP_CASH_REGISTERS("ks_rep_cash_registers"),
|
||||
|
|
@ -23,8 +17,6 @@ public enum ReportBuilderType implements IEnumKey {
|
|||
KS_REP_CASH_NETTO("ks_rep_cash_netto"),
|
||||
KS_REP_DEPO_NETTO("ks_rep_depo_netto"),
|
||||
KS_REP_FIRM_DETAILS("ks_rep_firm_details"),
|
||||
|
||||
SIMPLE_REPORT("simple_report")
|
||||
;
|
||||
|
||||
private final String key;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ public enum ReportType implements IEnumKey {
|
|||
PFX65("PFX65"),
|
||||
REPORT_KS_TMP("REPORT_KS_TMP"),
|
||||
REPORT_KS_FINAL("REPORT_KS_FINAL"),
|
||||
|
||||
;
|
||||
|
||||
private final String key;
|
||||
|
|
|
|||
|
|
@ -86,8 +86,6 @@ public interface Consts {
|
|||
String CREATE_NOTIFICATION_NTCR = "create-notification-ntcr";
|
||||
String CREATE_NOTIFICATION_NCMP = "create-notification-ncmp";
|
||||
String CREATE_REPORT_FOR_SESSION_ID = "create-report-for-session-id";
|
||||
String CREATE_REPORT_FOR_SESSION_ID_LIST = "create-report-for-session-id-list";
|
||||
String CREATE_REPORT_FOR_PERIOD = "create-report-for-period";
|
||||
String CREATE_REPORT_FOR_REGISTRY = "create-report-for-registry";
|
||||
|
||||
String ACCOUNT_NEW_SDF01 = "account-new-sdf01";
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue