Merge branch 'dev' into CLNRWORM

This commit is contained in:
ialbert 2023-08-03 18:00:03 +03:00
commit b1db92425e
38 changed files with 286 additions and 171 deletions

View file

@ -21,22 +21,32 @@ public class SDf06Table extends AbstractTable<SDf06> {
public SDf06 getEntity(Object[] entity) {
SDf06 result = new SDf06();
result.setAccount((String) entity[0]);
if (entity[1] instanceof BigDecimal) {
result.setSum((BigDecimal) entity[1]);
} else if (entity[1] instanceof String) {
result.setSum(new BigDecimal((String) entity[1]));
}
result.setSum(anyNumberToBigDecimal(entity[1]));
result.setMarket((String) entity[2]);
result.setType((String) entity[3]);
result.setDeal((String) entity[4]);
result.setClientN((String) entity[5]);
result.setInn((BigDecimal) entity[6]);
result.setBic((BigDecimal) entity[7]);
result.setInn(anyNumberToBigDecimal(entity[6]));
result.setBic(anyNumberToBigDecimal(entity[7]));
result.setSpec((String) entity[8]);
result.setNumber((BigDecimal) entity[9]);
result.setNumber(anyNumberToBigDecimal(entity[9]));
result.setFileName(filename);
result.setGenerationTime(Instant.now());
result.setGenerationId(fileId);
return result;
}
BigDecimal anyNumberToBigDecimal(Object value) {
if (value == null) return null;
if (value instanceof BigDecimal) {
return (BigDecimal) value;
}
if (value instanceof String) {
return BigDecimal.valueOf(Long.parseLong((String)value));
}
if (value instanceof Number) {
return BigDecimal.valueOf(((Number)value).longValue());
}
throw new IllegalArgumentException("Can not convert to BigDecimal " + value.getClass().getName() + " " + value);
}
}

View file

@ -161,12 +161,15 @@ public abstract class CSVReportBuilder<P, R> {
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) {
CsvNumber csvNumberAnnotation = field.getAnnotation(CsvNumber.class);
String formatValue = csvNumberAnnotation.value();
String writeFormat = csvNumberAnnotation.writeFormat();
csvConverter = new ConverterNumber(BigDecimal.class,
Locale.getDefault().toString(),
Locale.getDefault().toString(),
Locale.getDefault(),
"#0.00",
"#0.00");
formatValue,
writeFormat);
}
return csvConverter;
}

View file

@ -2,48 +2,50 @@ package ru.spcex.clearing.reports.reports;
import ru.clearing.classes.statics.data.registry.Registry;
import java.time.LocalDate;
import java.util.Objects;
public class PairRegistryId {
private Long groupId;
private LocalDate settlementDate;
private String account;
private Long sessionId;
public PairRegistryId() {
}
public PairRegistryId(Registry registry) {
this.groupId = registry.getGroupId();
this.settlementDate = registry.getSettlementDate();
this.account = registry.getAccount();
this.sessionId = registry.getSessionId();
}
public Long getGroupId() {
return groupId;
public String getAccount() {
return account;
}
public void setGroupId(Long groupId) {
this.groupId = groupId;
public void setAccount(String account) {
this.account = account;
}
public LocalDate getSettlementDate() {
return settlementDate;
public Long getSessionId() {
return sessionId;
}
public void setSettlementDate(LocalDate settlementDate) {
this.settlementDate = settlementDate;
}
@Override
public int hashCode() {
return Objects.hash(groupId, settlementDate);
public void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PairRegistryId that = (PairRegistryId) o;
return Objects.equals(groupId, that.groupId) && Objects.equals(settlementDate, that.settlementDate);
if (!(o instanceof PairRegistryId that)) return false;
if (!Objects.equals(account, that.account)) return false;
return Objects.equals(sessionId, that.sessionId);
}
@Override
public int hashCode() {
int result = account != null ? account.hashCode() : 0;
result = 31 * result + (sessionId != null ? sessionId.hashCode() : 0);
return result;
}
}

View file

@ -25,7 +25,7 @@ public class ExecutedDealReport {
@CsvBindByName(column = "TRADETIME")
@CsvBindByPosition(position = 3)
@CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss")
@CsvDate(value = "HH:mm:ss")
private Instant tradeTime;
@CsvBindByName(column = "SETTLEDATE")
@ -39,12 +39,12 @@ public class ExecutedDealReport {
@CsvBindByName(column = "PRICE")
@CsvBindByPosition(position = 6)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
@CsvNumber(value = "#0.000000", writeFormat = "#0.000000")
private BigDecimal price;
@CsvBindByName(column = "QUANTITY")
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
@CsvNumber(value = "#0", writeFormat = "#0")
private BigDecimal quantity;
@CsvBindByName(column = "VALUE")

View file

@ -25,9 +25,9 @@ public class KSCommissionTradesReport {
@CsvBindByPosition(position = 3)
private String agreementNumber;
@CsvBindByName(column = "AGREEMENT_NUMBER_PREFIX")
@CsvBindByName(column = "AGREEMENT_NUMBER_POSTFIX")
@CsvBindByPosition(position = 4)
private String agreementNumberPrefix;
private String agreementNumberPostfix;
@CsvBindByName(column = "AGREEMENT_DATE")
@CsvBindByPosition(position = 5)
@ -39,10 +39,14 @@ public class KSCommissionTradesReport {
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;
@CsvBindByName(column = "SUM_DATE")
@CsvBindByName(column = "REPAYM_DATE")
@CsvBindByPosition(position = 7)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate sumDate;
private LocalDate repaymDate;
@CsvBindByName(column = "EXEC_STATUS")
@CsvBindByPosition(position = 8)
private String execStatus;
public String getFirmId() {
@ -77,12 +81,12 @@ public class KSCommissionTradesReport {
this.agreementNumber = agreementNumber;
}
public String getAgreementNumberPrefix() {
return agreementNumberPrefix;
public String getAgreementNumberPostfix() {
return agreementNumberPostfix;
}
public void setAgreementNumberPrefix(String agreementNumberPrefix) {
this.agreementNumberPrefix = agreementNumberPrefix;
public void setAgreementNumberPostfix(String agreementNumberPrefix) {
this.agreementNumberPostfix = agreementNumberPrefix;
}
public LocalDate getAgreementDate() {
@ -101,11 +105,19 @@ public class KSCommissionTradesReport {
this.sum = sum;
}
public LocalDate getSumDate() {
return sumDate;
public LocalDate getRepaymDate() {
return repaymDate;
}
public void setSumDate(LocalDate sumDate) {
this.sumDate = sumDate;
public void setRepaymDate(LocalDate repaymDate) {
this.repaymDate = repaymDate;
}
public String getExecStatus() {
return execStatus;
}
public void setExecStatus(String execStatus) {
this.execStatus = execStatus;
}
}

View file

@ -18,22 +18,26 @@ public class KSRepCashRegisterSumsReport {
@CsvBindByPosition(position = 1)
private String account;
@CsvBindByName(column = "REGISTER_CODE")
@CsvBindByName(column = "TKR")
@CsvBindByPosition(position = 2)
private String tkr;
@CsvBindByName(column = "REGISTER_CODE")
@CsvBindByPosition(position = 3)
private String registerCode;
@CsvBindByName(column = "ADD_SUM")
@CsvBindByPosition(position = 3)
@CsvBindByPosition(position = 4)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal addSum;
@CsvBindByName(column = "ADD_TIME")
@CsvBindByPosition(position = 4)
@CsvBindByPosition(position = 5)
@CsvDate(value = "HH:mm:ss")
private LocalTime addTime;
@CsvBindByName(column = "ADD_DATE")
@CsvBindByPosition(position = 5)
@CsvBindByPosition(position = 6)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate addDate;
@ -85,4 +89,12 @@ public class KSRepCashRegisterSumsReport {
public void setAddDate(LocalDate addDate) {
this.addDate = addDate;
}
public String getTkr() {
return tkr;
}
public void setTkr(String tkr) {
this.tkr = tkr;
}
}

View file

@ -17,41 +17,45 @@ public class KSRepCashRegistersReport {
@CsvBindByPosition(position = 1)
private String account;
@CsvBindByName(column = "DATE")
@CsvBindByName(column = "TKR")
@CsvBindByPosition(position = 2)
private String tkr;
@CsvBindByName(column = "DATE")
@CsvBindByPosition(position = 3)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "REGISTER_CODE")
@CsvBindByPosition(position = 3)
@CsvBindByPosition(position = 4)
private String registerCode;
@CsvBindByName(column = "REGISTER_NAME")
@CsvBindByPosition(position = 4)
@CsvBindByPosition(position = 5)
private String registerName;
@CsvBindByName(column = "OPEN_BALANCE")
@CsvBindByPosition(position = 5)
@CsvBindByPosition(position = 6)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal openBalance;
@CsvBindByName(column = "CHANGE_BALANCE")
@CsvBindByPosition(position = 6)
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal changeBalance;
@CsvBindByName(column = "ADD_WITHDRAW")
@CsvBindByPosition(position = 7)
@CsvBindByPosition(position = 8)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal addWithdraw;
@CsvBindByName(column = "CLOSE_BALANCE")
@CsvBindByPosition(position = 8)
@CsvBindByPosition(position = 9)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal closeBalance;
@CsvBindByName(column = "REMARKS")
@CsvBindByPosition(position = 9)
@CsvBindByPosition(position = 10)
private String remarks;
@ -134,4 +138,12 @@ public class KSRepCashRegistersReport {
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getTkr() {
return tkr;
}
public void setTkr(String tkr) {
this.tkr = tkr;
}
}

View file

@ -18,26 +18,30 @@ public class KSRepDepoRegisterQuantitiesReport {
@CsvBindByPosition(position = 1)
private String account;
@CsvBindByName(column = "SECURITYID")
@CsvBindByName(column = "TKR")
@CsvBindByPosition(position = 2)
private String tkr;
@CsvBindByName(column = "SECURITYID")
@CsvBindByPosition(position = 3)
private String securityId;
@CsvBindByName(column = "REGISTER_CODE")
@CsvBindByPosition(position = 3)
@CsvBindByPosition(position = 4)
private String registerCode;
@CsvBindByName(column = "ADD_QUANTITY")
@CsvBindByPosition(position = 4)
@CsvBindByPosition(position = 5)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal addQuantity;
@CsvBindByName(column = "ADD_TIME")
@CsvBindByPosition(position = 5)
@CsvBindByPosition(position = 6)
@CsvDate(value = "HH:mm:ss")
private LocalTime addTime;
@CsvBindByName(column = "ADD_DATE")
@CsvBindByPosition(position = 6)
@CsvBindByPosition(position = 7)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate addDate;
@ -97,4 +101,12 @@ public class KSRepDepoRegisterQuantitiesReport {
public void setAddDate(LocalDate addDate) {
this.addDate = addDate;
}
public String getTkr() {
return tkr;
}
public void setTkr(String tkr) {
this.tkr = tkr;
}
}

View file

@ -17,45 +17,49 @@ public class KSRepDepoRegistersReport {
@CsvBindByPosition(position = 1)
private String account;
@CsvBindByName(column = "DATE")
@CsvBindByName(column = "TKR")
@CsvBindByPosition(position = 2)
private String tkr;
@CsvBindByName(column = "DATE")
@CsvBindByPosition(position = 3)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "SECURITYID")
@CsvBindByPosition(position = 3)
@CsvBindByPosition(position = 4)
private String securityId;
@CsvBindByName(column = "REGISTER_CODE")
@CsvBindByPosition(position = 4)
@CsvBindByPosition(position = 5)
private String registerCode;
@CsvBindByName(column = "REGISTER_NAME")
@CsvBindByPosition(position = 5)
@CsvBindByPosition(position = 6)
private String registerName;
@CsvBindByName(column = "OPEN_QUANTITY")
@CsvBindByPosition(position = 6)
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal openQuantity;
@CsvBindByName(column = "CHANGE_QUANTITY")
@CsvBindByPosition(position = 7)
@CsvBindByPosition(position = 8)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal changeQuantity;
@CsvBindByName(column = "ADD_WITHDRAW_DEPO")
@CsvBindByPosition(position = 8)
@CsvBindByPosition(position = 9)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal addWithdrawDepo;
@CsvBindByName(column = "CLOSE_QUANTITY")
@CsvBindByPosition(position = 9)
@CsvBindByPosition(position = 10)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal closeQuantity;
@CsvBindByName(column = "REMARKS")
@CsvBindByPosition(position = 10)
@CsvBindByPosition(position = 11)
private String remarks;
@ -146,4 +150,12 @@ public class KSRepDepoRegistersReport {
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getTkr() {
return tkr;
}
public void setTkr(String tkr) {
this.tkr = tkr;
}
}

View file

@ -29,7 +29,7 @@ public class KSRepTradesReport {
@CsvBindByName(column = "TKR")
@CsvBindByPosition(position = 4)
private Long tkr;
private String tkr;
@CsvBindByName(column = "CASH_LIABILITY")
@CsvBindByPosition(position = 5)
@ -91,11 +91,11 @@ public class KSRepTradesReport {
this.firmId = firmId;
}
public Long getTkr() {
public String getTkr() {
return tkr;
}
public void setTkr(Long tkr) {
public void setTkr(String tkr) {
this.tkr = tkr;
}

View file

@ -48,7 +48,7 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
@Override
public ReportKeys getReportKey() {
return ReportKeys.UNFULFILLED_DEAL_REPORT;
return ReportKeys.KS_BR_PFX65_DEALS;
}
@Override

View file

@ -137,10 +137,11 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
ksCommissionTradesReport.setFirmInitiator(companySymbols.getCompanySymbolValue());
ksCommissionTradesReport.setSecCode(registry.getSecuritySymbol());
ksCommissionTradesReport.setAgreementNumber(agreementNumber);
ksCommissionTradesReport.setAgreementNumberPrefix("");
ksCommissionTradesReport.setAgreementNumberPostfix("");
ksCommissionTradesReport.setAgreementDate(registry.getClearingDate());
ksCommissionTradesReport.setSum(registry.getBalance());
ksCommissionTradesReport.setSumDate(registry.getRefundDate());
ksCommissionTradesReport.setRepaymDate(registry.getRefundDate());
ksCommissionTradesReport.setExecStatus(registry.getRegistryStatus());
rows.add(ksCommissionTradesReport);
} catch (Throwable e) {

View file

@ -71,8 +71,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
pb.equals("accountType", AccountType.Clrn.getKey()),
pb.equals("accountType", AccountType.Info.getKey())
),
pb.notNull("settlementDate"),
pb.notNull("groupId")
pb.notNull("account")
);
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
Map<PairRegistryId, List<Registry>> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new));
@ -82,10 +81,10 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
PairRegistryId pairRegistryId = entry.getKey();
List<Registry> groupedRegistry = entry.getValue();
try {
if (groupedRegistry.size() != 2) {
log.warn("Invalid OM_T and TM_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped",
pairRegistryId.getGroupId(),
pairRegistryId.getSettlementDate(),
if (groupedRegistry.size() > 2 || groupedRegistry.isEmpty()) {
log.warn("Invalid OM_T and TM_T registries for account = {} and session_id = {}. Registries with id = [{}] was skipped",
pairRegistryId.getAccount(),
pairRegistryId.getSessionId(),
groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
);
continue;
@ -93,33 +92,29 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
Registry tmtRegistry = null;
Registry omtRegistry = null;
for (Registry registry : groupedRegistry) {
if (RegistryDesignation.O.equalsByKey(registry.getRegistryDesignation())) omtRegistry = registry;
if (RegistryDesignation.T.equalsByKey(registry.getRegistryDesignation())) tmtRegistry = registry;
Registry registry = null;
for (Registry currRegistry : groupedRegistry) {
registry = currRegistry;
if (RegistryDesignation.O.equalsByKey(currRegistry.getRegistryDesignation())) omtRegistry = currRegistry;
if (RegistryDesignation.T.equalsByKey(currRegistry.getRegistryDesignation())) tmtRegistry = currRegistry;
}
if (tmtRegistry == null || omtRegistry == null) {
log.warn("Invalid TM_T and OM_T registry pair, {} doubled. Registry pair was skipped", tmtRegistry == null ? "OM_T" : "TM_T");
if (tmtRegistry != null && omtRegistry != null && !Objects.equals(tmtRegistry.getTradingCode(), omtRegistry.getTradingCode())) {
log.warn("Invalid TM_T and OM_T registry pair, tradingCode not equals. Registry pair was skipped");
continue;
}
if (!Objects.equals(tmtRegistry.getAccount(), omtRegistry.getAccount()) ||
!Objects.equals(tmtRegistry.getTradingCode(), omtRegistry.getTradingCode())) {
log.warn("Invalid TM_T and OM_T registry pair, account or tradingCode not equals. Registry pair was skipped");
continue;
}
Session session = sessionImdg.getSingleObjectByID(tmtRegistry.getSessionId());
Session session = sessionImdg.getSingleObjectByID(registry.getSessionId());
KSRepCashNettoReport ksRepCashNettoReport = new KSRepCashNettoReport();
ksRepCashNettoReport.setFirmId(tmtRegistry.getTradingCode());
ksRepCashNettoReport.setSessionId(tmtRegistry.getSessionId());
ksRepCashNettoReport.setFirmId(registry.getTradingCode());
ksRepCashNettoReport.setSessionId(registry.getSessionId());
ksRepCashNettoReport.setSessionDate(session != null ? session.getCreated() : null);
ksRepCashNettoReport.setAccount(tmtRegistry.getAccount());
ksRepCashNettoReport.setAccount(registry.getAccount());
ksRepCashNettoReport.setDate(nowDate);
BigDecimal tmtBalance = tmtRegistry.getBalance() != null ? tmtRegistry.getBalance() : BigDecimal.ZERO;
BigDecimal omtBalance = omtRegistry.getBalance() != null ? omtRegistry.getBalance() : BigDecimal.ZERO;
BigDecimal tmtBalance = tmtRegistry != null && tmtRegistry.getBalance() != null ? tmtRegistry.getBalance() : BigDecimal.ZERO;
BigDecimal omtBalance = omtRegistry != null && omtRegistry.getBalance() != null ? omtRegistry.getBalance() : BigDecimal.ZERO;
ksRepCashNettoReport.setValue(tmtBalance.subtract(omtBalance));
rows.add(ksRepCashNettoReport);

View file

@ -105,6 +105,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
ksRepCashRegisterSumsReport.setFirmId(String.valueOf(statement.getAddresseeId()));
ksRepCashRegisterSumsReport.setAccount(statement.getAccount());
ksRepCashRegisterSumsReport.setTkr(registry.getTradingClearingRegistry());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault()));

View file

@ -89,6 +89,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
KSRepCashRegistersReport ksRepCashRegistersReport = new KSRepCashRegistersReport();
ksRepCashRegistersReport.setFirmId(registry.getTradingCode());
ksRepCashRegistersReport.setAccount(registry.getAccount());
ksRepCashRegistersReport.setTkr(registry.getTradingClearingRegistry());
ksRepCashRegistersReport.setDate(nowDate);
ksRepCashRegistersReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegistersReport.setOpenBalance(registry.getOpenBalance());

View file

@ -68,8 +68,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
pb.equals("clearingDate", nowDate),
pb.sql(sql),
pb.equals("accountType", AccountType.Depo.getKey()),
pb.notNull("settlementDate"),
pb.notNull("groupId")
pb.notNull("account")
);
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
@ -79,10 +78,10 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
PairRegistryId pairRegistryId = entry.getKey();
List<Registry> groupedRegistry = entry.getValue();
try {
if (groupedRegistry.size() != 2) {
log.warn("Invalid OS_T and TS_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped",
pairRegistryId.getGroupId(),
pairRegistryId.getSettlementDate(),
if (groupedRegistry.size() > 2 || groupedRegistry.isEmpty()) {
log.warn("Invalid OS_T and TS_T registries for account = {} and sessionId = {}. Registries with id = [{}] was skipped",
pairRegistryId.getAccount(),
pairRegistryId.getSessionId(),
groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
);
continue;
@ -90,36 +89,32 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
Registry tstRegistry = null;
Registry ostRegistry = null;
for (Registry registry : groupedRegistry) {
if (RegistryDesignation.O.equalsByKey(registry.getRegistryDesignation())) ostRegistry = registry;
if (RegistryDesignation.T.equalsByKey(registry.getRegistryDesignation())) tstRegistry = registry;
Registry registry = null;
for (Registry currRegistry : groupedRegistry) {
registry = currRegistry;
if (RegistryDesignation.O.equalsByKey(currRegistry.getRegistryDesignation())) ostRegistry = currRegistry;
if (RegistryDesignation.T.equalsByKey(currRegistry.getRegistryDesignation())) tstRegistry = currRegistry;
}
if (tstRegistry == null || ostRegistry == null) {
log.warn("Invalid TS_T and OS_T registry pair, {} doubled. Registry pair was skipped", tstRegistry == null ? "OS_T" : "TS_T");
continue;
}
if (!Objects.equals(tstRegistry.getTradingCode(), ostRegistry.getTradingCode()) ||
!Objects.equals(tstRegistry.getAccount(), ostRegistry.getAccount()) ||
!Objects.equals(tstRegistry.getSecuritySymbol(), ostRegistry.getSecuritySymbol())) {
if ((tstRegistry != null && ostRegistry != null) &&
(!Objects.equals(tstRegistry.getTradingCode(), ostRegistry.getTradingCode()) ||
!Objects.equals(tstRegistry.getSecuritySymbol(), ostRegistry.getSecuritySymbol()))) {
log.warn("Invalid TS_T and OS_T registry pair, account/tradingCode/securityId not equals. Registry pair was skipped");
continue;
}
KSRepDepoNettoReport ksRepDepoNettoReport = new KSRepDepoNettoReport();
ksRepDepoNettoReport.setFirmId(tstRegistry.getTradingCode());
ksRepDepoNettoReport.setSessionId(tstRegistry.getSessionId());
ksRepDepoNettoReport.setAccount(tstRegistry.getAccount());
ksRepDepoNettoReport.setSecurityId(tstRegistry.getSecuritySymbol());
ksRepDepoNettoReport.setFirmId(registry.getTradingCode());
ksRepDepoNettoReport.setSessionId(registry.getSessionId());
ksRepDepoNettoReport.setAccount(registry.getAccount());
ksRepDepoNettoReport.setSecurityId(registry.getSecuritySymbol());
ksRepDepoNettoReport.setDate(nowDate);
Session session = sessionImdg.getSingleObjectByID(tstRegistry.getSessionId());
Session session = sessionImdg.getSingleObjectByID(registry.getSessionId());
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;
BigDecimal tmtBalance = tstRegistry != null && tstRegistry.getBalance() != null ? tstRegistry.getBalance() : BigDecimal.ZERO;
BigDecimal omtBalance = ostRegistry != null && ostRegistry.getBalance() != null ? ostRegistry.getBalance() : BigDecimal.ZERO;
ksRepDepoNettoReport.setValue(tmtBalance.subtract(omtBalance));
rows.add(ksRepDepoNettoReport);

View file

@ -125,6 +125,7 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
ksRepDepoRegisterQuantitiesReport.setFirmId(String.valueOf(statement.getAddresseeId()));
ksRepDepoRegisterQuantitiesReport.setAccount(statement.getAccount());
ksRepDepoRegisterQuantitiesReport.setTkr(registry.getTradingClearingRegistry());
ksRepDepoRegisterQuantitiesReport.setSecurityId(security.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);

View file

@ -15,6 +15,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
@ -86,6 +87,7 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
KSRepDepoRegistersReport ksRepDepoRegistersReport = new KSRepDepoRegistersReport();
ksRepDepoRegistersReport.setFirmId(registry.getTradingCode());
ksRepDepoRegistersReport.setAccount(registry.getAccount());
ksRepDepoRegistersReport.setTkr(registry.getTradingClearingRegistry());
ksRepDepoRegistersReport.setDate(nowDate);
ksRepDepoRegistersReport.setSecurityId(registry.getSecuritySymbol());
ksRepDepoRegistersReport.setRegisterCode(registry.getRegistryCode());
@ -96,17 +98,13 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getFirstObjectByFieldValues(Map.of("code", registry.getRegistryCode()));
if (registryCodeDescription != null) ksRepDepoRegistersReport.setRegisterName(registryCodeDescription.getName());
if (registry.getSettledCredit() != null) {
if (registry.getSettledDebit() != null)
ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit().subtract(registry.getSettledDebit()));
else ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit());
}
BigDecimal settledCredit = registry.getSettledCredit() != null ? registry.getSettledCredit() : BigDecimal.ZERO;
BigDecimal settledDebit = registry.getSettledDebit() != null ? registry.getSettledDebit() : BigDecimal.ZERO;
ksRepDepoRegistersReport.setChangeQuantity(settledCredit.subtract(settledDebit));
if (registry.getCredit() != null) {
if (registry.getDebit() != null)
ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit().subtract(registry.getDebit()));
else ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit());
}
BigDecimal credit = registry.getCredit() != null ? registry.getCredit() : BigDecimal.ZERO;
BigDecimal debit = registry.getDebit() != null ? registry.getDebit() : BigDecimal.ZERO;
ksRepDepoRegistersReport.setAddWithdrawDepo(credit.subtract(debit));
rows.add(ksRepDepoRegistersReport);
} catch (Throwable e) {

View file

@ -8,6 +8,7 @@ import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.Session;
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.clearing.reports.reports.EmptyParams;
@ -34,6 +35,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
private final Imdg<Registry> registryImdg;
private final Imdg<Market> marketImdg;
private final Imdg<Company> companyImdg;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private List<KSRepTradesReport> rows = null;
@ -44,6 +46,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
}
@Override
@ -93,7 +96,16 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
KSRepTradesReport ksRepTradesReport = new KSRepTradesReport();
ksRepTradesReport.setSessionId(execution.getSessionId());
ksRepTradesReport.setTrId(execution.getId());
ksRepTradesReport.setTkr(execution.getTradingClearingRegistryId());
TradingClearingRegistry registry = tradingClearingRegistryImdg.getSingleObjectByID(execution.getTradingClearingRegistryId());
if (registry == null) {
log.info("Execution id = {} was skipped: trading_clearing_registry for id {} not found",
execution.getId(),
execution.getTradingClearingRegistryId());
continue;
}
ksRepTradesReport.setTkr(registry.getCode());
if (execution.getCompanyId() != null) {
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());

View file

@ -28,6 +28,7 @@ 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;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.Imdg;
@ -265,7 +266,25 @@ public class ReportService extends QueueConsumer implements InitializingBean {
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
sendReportsToGateway(sessionIds, outFiles, null);
Map<File, ReportInfo> outFilesWithReportType_PFX64 = new HashMap<>();
Map<File, ReportInfo> outFilesWithReportType_PFX65 = new HashMap<>();
for (Map.Entry<File, ReportInfo> entry : outFiles.entrySet()) {
File reportFile = entry.getKey();
ReportInfo reportInfo = entry.getValue();
ReportKeys reportKey = IEnumKey.getEnumByKey(ReportKeys.class, reportInfo.reportKey());
if (reportKey == ReportKeys.KS_BR_PFX65_DEALS) {
outFilesWithReportType_PFX65.put(reportFile, reportInfo);
} else if (
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_1 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_2 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_3 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_4
) {
outFilesWithReportType_PFX64.put(reportFile, reportInfo);
}
}
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX64, ReportType.PFX64.getKey());
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX65, ReportType.PFX65.getKey());
sendFilesToSftp(outFiles.keySet());
return null;
}

View file

@ -209,7 +209,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", "SETTLEDATE"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
@ -261,7 +261,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", "SETTLEDATE"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
@ -310,7 +310,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", "SETTLEDATE"));
for (File file : outFolder.listFiles()) {
if (!outFile.getName().equalsIgnoreCase(file.getName())) {
@ -409,7 +409,7 @@ public class ReportServiceTest_BP {
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/unfulfilled_deal_report_expected.csv").getFile());
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX65_DEALS_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE"));
testExecutionFond.setSessionId(oldExecutionFondSessionId);

View file

@ -23,6 +23,7 @@ import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.Session;
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;
@ -85,6 +86,7 @@ public class ReportServiceTest_KS {
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ProfileDocument> profileDocumentImdg;
private Imdg<EquitySecurity> equitySecurityImdg;
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private Long COMPANY_ID;
@Autowired
@ -129,6 +131,7 @@ public class ReportServiceTest_KS {
registry.setRegistryUnit(RegistryUnit.T.getKey());
registry.setUpdated(Instant.now());
registry.setTradingCode("TRADING_CODE");
registry.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY");
registry.setAccount("ACCOUNT");
registry.setAccountType(AccountType.Clrn.getKey());
registry.setOpenBalance(BigDecimal.valueOf(77.777777777));
@ -170,6 +173,7 @@ public class ReportServiceTest_KS {
registry_1.setAccount("ACCOUNT");
registry_1.setAccountType(AccountType.Clrn.getKey());
registry_1.setRegistryCode(RegistryUnit.T.getKey());
registry_1.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY");
registryImdg.insert(registry_1);
Statement statement_1 = new Statement();
@ -222,6 +226,7 @@ public class ReportServiceTest_KS {
registry.setUpdated(Instant.now());
registry.setTradingCode("TRADING_CODE");
registry.setAccount("ACCOUNT");
registry.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY");
registry.setAccountType(AccountType.Depo.getKey());
registry.setOpenBalance(BigDecimal.valueOf(77.777777777));
registry.setSettledCredit(BigDecimal.valueOf(88.88888888));
@ -260,6 +265,7 @@ public class ReportServiceTest_KS {
Registry registry_1 = new Registry();
registry_1.setCompanyId(COMPANY_ID);
registry_1.setAccount("ACCOUNT");
registry_1.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY");
registry_1.setAccountType(AccountType.Depo.getKey());
registry_1.setRegistryCode(RegistryUnit.T.getKey());
registryImdg.insert(registry_1);
@ -307,6 +313,10 @@ public class ReportServiceTest_KS {
ReportRequest reportRequest = new ReportRequest();
reportRequest.setReportId(ReportBuilderType.KS_REP_TRADES.getKey());
TradingClearingRegistry tradingClearingRegistry = new TradingClearingRegistry();
tradingClearingRegistry.setCode("TKR");
Long tkrId = tradingClearingRegistryImdg.insert(tradingClearingRegistry);
Session session_1 = new Session();
session_1.setCreated(Instant.ofEpochMilli(LocalDateTime.of(2023, 6, 30, 0, 0, 0).toEpochSecond(ZoneOffset.UTC)));
Long sessionId_1 = sessionImdg.insert(session_1);
@ -319,7 +329,7 @@ public class ReportServiceTest_KS {
executionFond.setCompanyId(COMPANY_ID);
executionFond.setTradingDate(LocalDate.now());
executionFond.setSessionId(sessionId_1);
executionFond.setTradingClearingRegistryId(666L);
executionFond.setTradingClearingRegistryId(tkrId);
executionFond.setSettlementAmount(BigDecimal.valueOf(8888.888888));
executionFond.setQuantity(BigDecimal.valueOf(123.456789));
executionFond.setExchangeExecutionId(222L);
@ -347,7 +357,7 @@ public class ReportServiceTest_KS {
executionDeposit.setCompanyId(COMPANY_ID);
executionDeposit.setTradingDate(LocalDate.now());
executionDeposit.setSessionId(sessionId_2);
executionDeposit.setTradingClearingRegistryId(666L);
executionDeposit.setTradingClearingRegistryId(tkrId);
executionDeposit.setFirstLegAmount(BigDecimal.valueOf(8888.888888));
executionDeposit.setExchangeExecutionId(222L);
executionDeposit.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC)));
@ -373,6 +383,7 @@ public class ReportServiceTest_KS {
sessionImdg.delete(session_1);
sessionImdg.delete(session_2);
registryImdg.delete(registry);
tradingClearingRegistryImdg.delete(tradingClearingRegistry);
}
@Test
@ -653,7 +664,7 @@ public class ReportServiceTest_KS {
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("SUM_DATE"));
compareCSVFiles(expectedFile, outFile, Arrays.asList("REPAYM_DATE"));
registryImdg.delete(registry);
registryImdg.delete(omtRegistry);
@ -723,6 +734,7 @@ public class ReportServiceTest_KS {
marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
}
private void clearTestDir() throws IOException {

View file

@ -1,2 +1,2 @@
"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"
"test-security-symbol-1","777","22.07.2023","01:22:57","01.08.2023","test-settle-code","1000.000000","7777","7777777.00"

1 SECURITYID TRADENO TRADEDATE TRADETIME SETTLEDATE SETTLECODE PRICE QUANTITY VALUE
2 test-security-symbol-1 777 27.06.2023 22.07.2023 25.08.1994T01:22:57 01:22:57 07.07.2023 01.08.2023 test-settle-code 1000.00 1000.000000 7777.00 7777 7777777.00

View file

@ -1,2 +1,2 @@
"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"
"test-security-symbol-1","777","01.08.2023","01:22:57","01.08.2023","test-settle-code","1000.000000","7777","7777777.00"

1 SECURITYID TRADENO TRADEDATE TRADETIME SETTLEDATE SETTLECODE PRICE QUANTITY VALUE
2 test-security-symbol-1 777 07.07.2023 01.08.2023 25.08.1994T01:22:57 01:22:57 07.07.2023 01.08.2023 test-settle-code 1000.00 1000.000000 7777.00 7777 7777777.00

View file

@ -1,2 +1,2 @@
"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"
"test-security-symbol-1","777","11.08.2023","01:22:57","11.08.2023","test-settle-code","1000.000000","7777","7777777.00"

1 SECURITYID TRADENO TRADEDATE TRADETIME SETTLEDATE SETTLECODE PRICE QUANTITY VALUE
2 test-security-symbol-1 777 17.07.2023 11.08.2023 25.08.1994T01:22:57 01:22:57 17.07.2023 11.08.2023 test-settle-code 1000.00 1000.000000 7777.00 7777 7777777.00

View file

@ -1,2 +1,2 @@
"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"
"test-security-symbol-1","777","11.08.2023","01:22:57","01.08.2023","test-settle-code","1000.000000","7777","7777777.00"

1 SECURITYID TRADENO TRADEDATE TRADETIME SETTLEDATE SETTLECODE PRICE QUANTITY VALUE
2 test-security-symbol-1 777 17.07.2023 11.08.2023 25.08.1994T01:22:57 01:22:57 07.07.2023 01.08.2023 test-settle-code 1000.00 1000.000000 7777.00 7777 7777777.00

View file

@ -0,0 +1,2 @@
"SECURITYID","TRADENO","TRADEDATE","SETTLECODE"
"3007","777","22.07.2023","test-class-code"
1 SECURITYID TRADENO TRADEDATE SETTLECODE
2 3007 777 22.07.2023 test-class-code

View file

@ -1,2 +0,0 @@
SECURITYID,TRADENO,TRADEDATE,SETTLECODE
"3007","777","20.06.2023","test-class-code"
1 SECURITYID TRADENO TRADEDATE SETTLECODE
2 3007 777 20.06.2023 test-class-code

View file

@ -1,2 +1,2 @@
"FIRMID","FIRM_INITIATOR","SECCODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_PREFIX","AGREEMENT_DATE","SUM","SUM_DATE"
"CLEARING_CODE","COMPANY_SYMBOL_VALUE","SECURITY_SYMBOL","SECURITY_SYMBOL/010191/CLEARING_CODE777","","01.01.1991","77.78","18.07.2023"
"FIRMID","FIRM_INITIATOR","SECCODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_POSTFIX","AGREEMENT_DATE","SUM","REPAYM_DATE","EXEC_STATUS"
"CLEARING_CODE","COMPANY_SYMBOL_VALUE","SECURITY_SYMBOL","SECURITY_SYMBOL/010191/CLEARING_CODE777","","01.01.1991","77.78","01.08.2023","OK"

1 FIRMID FIRM_INITIATOR SECCODE AGREEMENT_NUMBER AGREEMENT_NUMBER_PREFIX AGREEMENT_NUMBER_POSTFIX AGREEMENT_DATE SUM SUM_DATE REPAYM_DATE EXEC_STATUS
2 CLEARING_CODE COMPANY_SYMBOL_VALUE SECURITY_SYMBOL SECURITY_SYMBOL/010191/CLEARING_CODE777 01.01.1991 77.78 18.07.2023 01.08.2023 OK

View file

@ -1,2 +1,2 @@
"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",""
"FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS"
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","AM_T","AM_T_NAME","77.78","66.67","66.67","11.11",""

1 FIRMID ACCOUNT TKR DATE REGISTER_CODE REGISTER_NAME OPEN_BALANCE CHANGE_BALANCE ADD_WITHDRAW CLOSE_BALANCE REMARKS
2 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 07.07.2023 01.08.2023 AM_T AM_T_NAME 77.78 66.67 66.67 11.11

View file

@ -1,2 +1,2 @@
"FIRMID","ACCOUNT","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE"
"1","ACCOUNT","T","7777.78","17:00:50","17.07.2023"
"FIRMID","ACCOUNT","TKR","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE"
"1","ACCOUNT","TRADING_CLEARING_REGISTRY","T","7777.78","15:49:30","01.08.2023"

1 FIRMID ACCOUNT TKR REGISTER_CODE ADD_SUM ADD_TIME ADD_DATE
2 1 ACCOUNT TRADING_CLEARING_REGISTRY T 7777.78 17:00:50 15:49:30 17.07.2023 01.08.2023

View file

@ -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","07.07.2023","","AS_T","AS_T_NAME","77.78","66.67","66.67","11.11",""
"FIRMID","ACCOUNT","TKR","DATE","SECURITYID","REGISTER_CODE","REGISTER_NAME","OPEN_QUANTITY","CHANGE_QUANTITY","ADD_WITHDRAW_DEPO","CLOSE_QUANTITY","REMARKS"
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","","AS_T","AS_T_NAME","77.78","66.67","66.67","11.11",""

1 FIRMID ACCOUNT TKR DATE SECURITYID REGISTER_CODE REGISTER_NAME OPEN_QUANTITY CHANGE_QUANTITY ADD_WITHDRAW_DEPO CLOSE_QUANTITY REMARKS
2 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 07.07.2023 01.08.2023 AS_T AS_T_NAME 77.78 66.67 66.67 11.11

View file

@ -1,2 +1,2 @@
"FIRMID","ACCOUNT","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE"
"1","ACCOUNT","value","T","7777.78","18:39:59","17.07.2023"
"FIRMID","ACCOUNT","TKR","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE"
"1","ACCOUNT","TRADING_CLEARING_REGISTRY","value","T","7777.78","15:52:33","01.08.2023"

1 FIRMID ACCOUNT TKR SECURITYID REGISTER_CODE ADD_QUANTITY ADD_TIME ADD_DATE
2 1 ACCOUNT TRADING_CLEARING_REGISTRY value T 7777.78 18:39:59 15:52:33 17.07.2023 01.08.2023

View file

@ -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.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"
"4","20.01.1970T04:09:07","8","TRADING_CODE","TKR","8888.89","","222","","19.01.1970T23:49:58","3"
"3","20.01.1970T12:54:43","5","TRADING_CODE","TKR","8888.89","123.46","222","","19.01.1970T23:49:58","1"

1 SESSION_ID SESSION_DATE TR_ID FIRM_ID TKR CASH_LIABILITY DEPO_LIABILITY TRADE_NUM CLASS_CODE TRADE_DATE STATUS
2 3 4 20.01.1970T04:09:07 6 8 TRADING_CODE 666 TKR 8888.89 222 19.01.1970T23:49:58 3
3 2 3 20.01.1970T12:54:43 4 5 TRADING_CODE 666 TKR 8888.89 123.46 222 19.01.1970T23:49:58 1

View file

@ -13,10 +13,14 @@ import ru.spcex.platform.enumeration.SwtTable;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.io.*;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Collection;
import java.util.Objects;
import java.util.Optional;
import static ru.spcex.clearing.platform.messaging.domain.Consts.JOURNAL_SERVICE;
@ -135,8 +139,8 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
protected void makeSWTData(SWTHeaderData header, Collection<T> records, OutputStream outStream) {
try (PrintWriter out = new PrintWriter(outStream)) {
out.print(header.buildString());
int counter = 1; // нумерация начинается с 1
int totalSize = records.size();
int counter = totalSize == 0 ? 0 : 1; // нумерация начинается с 1
for (T row : records) {
ConvertionContext context = new ConvertionContext(mapClass, counter, totalSize);
String data = convertRecord(row, context);

View file

@ -63,7 +63,8 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
lastHeader20 = record.getOutDocument();
}
stringBuilder.append(":23:").append(record.getDirection()).append(lineSeparator);
stringBuilder.append(":35A:SHS").append(record.getQuantity()).append(lineSeparator);
String quantity = record.getQuantity() == null ? "" : record.getQuantity().split("\\.")[0] + ",";
stringBuilder.append(":35A:SHS").append(quantity).append(lineSeparator);
stringBuilder.append(":35B:ISIN ").append(record.getSecurityCode()).append(lineSeparator);
stringBuilder.append(":82D:").append(record.getDepoCodeSender()).append(lineSeparator);
stringBuilder.append(":87C:").append(record.getDepoCodeAdressee()).append(lineSeparator);
@ -96,7 +97,7 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
@Override
protected void writeFooter(PrintWriter out, Collection<SDf12> records, int counter) {
String footerCheckSum = counter + lineSeparator + records.size() + lineSeparator;
out.print(footerCheckSum);
// String footerCheckSum = counter + lineSeparator + records.size() + lineSeparator;
// out.print(footerCheckSum);
}
}

View file

@ -156,7 +156,8 @@ public class SWTHeaderData {
stringBuilder.append(":23:").append(valFor23Tag).append('\n');
}
if (valFor35ATag != null) {
stringBuilder.append(":35A:SHS").append(valFor35ATag).append('\n');
String val = valFor35ATag.split("\\.")[0] + ",";
stringBuilder.append(":35A:SHS").append(val).append('\n');
}
if (valFor35BTag != null) {
stringBuilder.append(":35B:ISIN ").append(valFor35BTag).append('\n');

View file

@ -7,7 +7,6 @@ public enum ReportKeys implements IEnumKey {
KS_BR_PFX64_INFTYPE_2("KS_BR_PFX64_INFTYPE_2"),
KS_BR_PFX64_INFTYPE_3("KS_BR_PFX64_INFTYPE_3"),
KS_BR_PFX64_INFTYPE_4("KS_BR_PFX64_INFTYPE_4"),
UNFULFILLED_DEAL_REPORT("UNFULFILLED_DEAL_REPORT"),
KS_BR_PFX65_DEALS("KS_BR_PFX65_DEALS"),
KS_REP_CASH_REGISTERS("KS_REP_CASH_REGISTERS"),
KS_REP_CASH_REGISTER_SUMS("KS_REP_CASH_REGISTER_SUMS"),