listOfPlannerAllToday = getPlannersAllTodayToDate(currentDate);
log.info("For today find {} plannerTemplates satisfying rules", listOfPlannerAllToday.size());
plannerMap.values().stream()
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
index 6f07fde90..53a3b4243 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
@@ -1,12 +1,13 @@
package ru.spcex.clearing.reports.builders;
-import com.opencsv.CSVWriterBuilder;
+import com.opencsv.CSVWriter;
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.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.misc.Session;
@@ -91,23 +92,6 @@ public abstract class CSVReportBuilder {
*/
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();
@@ -118,10 +102,11 @@ public abstract class CSVReportBuilder
{
assert rows != null;
- try (Writer writer = new FileWriter(reportFile)) {
+ try (Writer writer = new FileWriter(reportFile);
+ ICSVWriter icsvWriter = new CustomCSVWriter(writer)) {
CustomStrategy customStrategy = new CustomStrategy<>();
customStrategy.setType(getReportClass());
- StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
+ StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(icsvWriter)
.withMappingStrategy(customStrategy)
.withLineEnd("\n")
.withSeparator(',')
@@ -160,6 +145,24 @@ public abstract class CSVReportBuilder {
return sessionIds.stream().toList();
}
+ static class CustomCSVWriter extends CSVWriter {
+ public CustomCSVWriter(Writer writer) {
+ super(writer);
+ }
+
+ @Override
+ protected void writeNext(String[] nextLine, boolean applyQuotesToAll, Appendable appendable) throws IOException {
+ if (nextLine != null) {
+ for (int i = 0; i < nextLine.length; i++) {
+ if (StringUtils.isEmpty(nextLine[i])) {
+ nextLine[i] = null;
+ }
+ }
+ }
+ super.writeNext(nextLine, applyQuotesToAll, appendable);
+ }
+ }
+
static class CustomStrategy extends ColumnPositionMappingStrategy {
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {
super.generateHeader(bean);
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java
index 5b3031872..cb6699796 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java
@@ -57,6 +57,22 @@ public class KSCommissionTradesReport {
@CsvBindByPosition(position = 10)
private String execStatus;
+ @CsvBindByName(column = "TR_ID")
+ @CsvBindByPosition(position = 11)
+ private Long trId;
+
+ @CsvBindByName(column = "TKR")
+ @CsvBindByPosition(position = 12)
+ private String tkr;
+
+ @CsvBindByName(column = "ACCOUNT")
+ @CsvBindByPosition(position = 13)
+ private String account;
+
+ @CsvBindByName(column = "SESSION_ID")
+ @CsvBindByPosition(position = 14)
+ private Long sessionId;
+
public String getFirmId() {
return firmId;
@@ -145,4 +161,36 @@ public class KSCommissionTradesReport {
public void setAgreementSettlementDate(LocalDate agreementSettlementDate) {
this.agreementSettlementDate = agreementSettlementDate;
}
+
+ public Long getTrId() {
+ return trId;
+ }
+
+ public void setTrId(Long trId) {
+ this.trId = trId;
+ }
+
+ public String getTkr() {
+ return tkr;
+ }
+
+ public void setTkr(String tkr) {
+ this.tkr = tkr;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public Long getSessionId() {
+ return sessionId;
+ }
+
+ public void setSessionId(Long sessionId) {
+ this.sessionId = sessionId;
+ }
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
index cbb29529f..19f333b62 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
@@ -1,6 +1,7 @@
package ru.spcex.clearing.reports.builders.ks;
import org.springframework.stereotype.Component;
+import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.registry.Registry;
@@ -16,12 +17,12 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
-import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
@Component
public class KSCommissionTradesReportBuilder extends CSVReportBuilder {
@@ -30,6 +31,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder registryImdg;
private final Imdg companyImdg;
private final Imdg executionDepositImdg;
+ private final Imdg accountImdg;
private List rows = null;
@@ -37,6 +39,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder 1) log.warn("ExecutionDeposit[exchangeExecutionId = {}].size > 1, use first", registry.getGroupId());
ExecutionDeposit executionDeposit = executionDeposits.iterator().next();
+ String account = null;
+ AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, registry.getAccountType());
+ if (accountType == AccountType.Clrn) {
+ account = registry.getAccount();
+ } else if (accountType == AccountType.Info) {
+ Account accountFromImdg = accountImdg.getFirstObjectByFieldValues(Map.of(
+ "accountType", AccountType.Anlt.getKey(),
+ "companyId", 1L
+ ));
+ account = accountFromImdg.getAccount();
+ }
+
KSCommissionTradesReport ksCommissionTradesReport = new KSCommissionTradesReport();
ksCommissionTradesReport.setFirmId(firmId);
ksCommissionTradesReport.setFirmIdInitiator(firmIdInitiator);
@@ -160,10 +184,14 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder sessionTypeForValue = Set.of(
SessionType.IPOT,
SessionType.TRDT,
@@ -195,21 +197,35 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder groupedRegistry = entry.getValue();
try {
if (groupedRegistry.isEmpty()) {
- log.warn("Empty LS_T and CS_T registries for {}. Registries with id = [{}] was skipped",
- pairRegistryId,
- groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
+ log.warn("Empty LS_T and CS_T registries for {}",
+ pairRegistryId
);
continue;
}
@@ -110,17 +106,17 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder companyImdg;
private final Imdg tradingClearingRegistryImdg;
private final Imdg accountImdg;
+ private final Imdg accountSymbolsImdg;
private List rows = null;
@@ -48,6 +50,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder statusForExecution = new HashMap<>();
executions.forEach(execution -> {
if (Set.of("S", "SELL").contains(execution.getSide())) {
- String status = "";
+ String status = null;
if (execution.getCoverageStatus() != null) {
Long groupId = execution.getExchangeExecutionId();
String coverageStatus = execution.getCoverageStatus().toUpperCase();
@@ -153,7 +156,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder req) throws ValidationException {
Objects.requireNonNull(roleForVerification);
Long requesterId = req.getUserId();
- if (requesterId != null && !userHasRole(requesterId, roleForVerification)) {
- log.trace("User {} has no role to allow this action", requesterId);
- throw new ValidationException(roleVerificationError);
- } else {
+ if (requesterId == null) {
log.trace("Request without userId");
+ } else {
+ if (!userHasRole(requesterId, roleForVerification)) {
+ log.trace("User {} has no role to allow this action", requesterId);
+ throw new ValidationException(roleVerificationError);
+ }
}
}
public RequestInfoUpdate validateRoleAndGetResult(BaseRequest> req) {
Objects.requireNonNull(roleForVerification);
Long requesterId = req.getUserId();
- if (requesterId != null && !userHasRole(requesterId, roleForVerification)) {
- String errMsg = messageResolver.resolve(new EnumMessage(roleVerificationError, requesterId));
- log.info("User {} has no role: {}", requesterId, errMsg);
- return new RequestInfoUpdate()
- .setId(req.getId())
- .setStatus(ru.spcex.clearing.platform.messaging.service.Status.Error)
- .setMessage(errMsg);
- } else {
+ if (requesterId == null) {
log.debug("Request without userId");
+ } else {
+ if (!userHasRole(requesterId, roleForVerification)) {
+ String errMsg = messageResolver.resolve(new EnumMessage(roleVerificationError, requesterId));
+ log.info("User {} has no role: {}", requesterId, errMsg);
+ return new RequestInfoUpdate()
+ .setId(req.getId())
+ .setStatus(ru.spcex.clearing.platform.messaging.service.Status.Error)
+ .setMessage(errMsg);
+ } else {
+ log.trace("Request validateRoleAndGetResult for userId={} success", requesterId);
+ }
}
return null;
}