This commit is contained in:
akulikov 2023-01-10 12:55:04 +03:00
parent 16a443b137
commit d70b537364
10 changed files with 352 additions and 245 deletions

View file

@ -0,0 +1,23 @@
package ru.spcex.clearing.reports.reports;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum Destination implements IEnumKey {
BR("BR"), _1C("1C");
private final String key;
Destination(String key) {
this.key = key;
}
@Override
public String getKey() {
return this.key;
}
@Override
public boolean equalsByKey(String key) {
return IEnumKey.super.equalsByKey(key);
}
}

View file

@ -0,0 +1,76 @@
package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
@XStreamAlias("accountBalanceInfo")
public class ReportINACCNT extends AbstractReport {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")
private final String companyClearingCode;
/**
* Дата в формате: dd.MM.yyyy
*/
@XStreamAsAttribute
@XStreamAlias("date")
@XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"})
private final LocalDate date;
/**
* Время в формате: hh:mm:ss
*/
@XStreamAsAttribute
@XStreamAlias("time")
@XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"})
private final LocalTime time;
@XStreamAlias("rows")
private List<Row> rows;
public ReportINACCNT(String companyClearingCode, LocalDate date, LocalTime time) {
super(ReportId.BT16_5,
"0.0.1",
"BT16.5",
"Отчет о денежных средствах на счете внутреннего учета (клиринговом регистре) Участника клиринга");
this.companyClearingCode = companyClearingCode;
this.date = date;
this.time = time;
}
@Override
public String getReportName(LocalDateTime reportDateTime) {
return "INACCNT.%s.%s".formatted(
companyClearingCode,
DATE_TIME_FORMATTER.format(reportDateTime)
);
}
public List<Row> getRows() {
return rows;
}
public void setRows(List<Row> rows) {
this.rows = rows;
}
@XStreamAlias("row")
public record Row(@XStreamAsAttribute @XStreamAlias("id") Long id,
@XStreamAsAttribute @XStreamAlias("clearingHouse") String clearingHouse,
@XStreamAsAttribute @XStreamAlias("company_clearingCode") String companyClearingCode,
@XStreamAsAttribute @XStreamAlias("company_fullName") String companyFullName,
@XStreamAsAttribute @XStreamAlias("accountBalance_account") String accountBalanceAccount,
@XStreamAsAttribute @XStreamAlias("accountBalance_openAccount") String accountBalanceOpenAccount,
@XStreamAsAttribute @XStreamAlias("accountBalance_debitAccount") String accountBalanceDebitAccount,
@XStreamAsAttribute @XStreamAlias("accountBalance_creditAccount") String accountBalanceCreditAccount,
@XStreamAsAttribute @XStreamAlias("accountBalance_closeAccount") String accountBalanceCloseAccount) {
}
}

View file

@ -2,8 +2,11 @@ package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.Destination;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import ru.spcex.platform.enumeration.ClearingMemberCategoryD;
import ru.spcex.platform.enumeration.ClearingStatus;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -12,7 +15,6 @@ import java.util.List;
@XStreamAlias("clearedLiabilities")
public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
@XStreamAsAttribute
@XStreamAlias("destination")
private String destination;
@ -25,61 +27,25 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
private final List<Info_0420315_P1> rows = new ArrayList<>();
public ReportBR_0420315_P1(LocalDate startDate,
LocalDate endDate,
String destination,
String clearingMemberCategory,
String clearingStatus) {
LocalDate endDate) {
super(ReportId.BR_0420315_P1,
"0.0.1",
"0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 1",
startDate,
endDate,
clearingStatus);
this.destination = destination;
this.clearingMemberCategory = clearingMemberCategory;
ClearingStatus.OK.getKey());
this.destination = Destination.BR.getKey();
this.clearingMemberCategory = "%s,%s".formatted(
ClearingMemberCategoryD.I.getKey(),
"V"
);
}
public List<Info_0420315_P1> getRows() {
return rows;
}
@XStreamAlias("row")
public static class Info_0420315_P1 {
@XStreamAlias("company_id")
@XStreamAsAttribute
private String companyId;
@XStreamAlias("company_fullName")
@XStreamAsAttribute
private String companyFullName;
@XStreamAlias("listing_market")
@XStreamAsAttribute
private String listingMarket;
@XStreamAlias("contract_qty")
@XStreamAsAttribute
private String contractQty;
@XStreamAlias("liabilities_amount")
@XStreamAsAttribute
private String liabilitiesAmount;
public Info_0420315_P1(String companyId,
String companyFullName,
String listingMarket,
String contractQty,
String liabilitiesAmount) {
this.companyId = companyId;
this.companyFullName = companyFullName;
this.listingMarket = listingMarket;
this.contractQty = contractQty;
this.liabilitiesAmount = liabilitiesAmount;
}
}
@Override
public String getReportName(LocalDateTime reportDateTime) {
return "REPBR.0420315.P1.%s-%s.%s".formatted(
@ -88,4 +54,12 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
DATE_TIME_FORMATTER.format(reportDateTime)
);
}
@XStreamAlias("row")
public record Info_0420315_P1(@XStreamAlias("company_id") @XStreamAsAttribute String companyId,
@XStreamAlias("company_fullName") @XStreamAsAttribute String companyFullName,
@XStreamAlias("listing_market") @XStreamAsAttribute String listingMarket,
@XStreamAlias("contract_qty") @XStreamAsAttribute String contractQty,
@XStreamAlias("liabilities_amount") @XStreamAsAttribute String liabilitiesAmount) {
}
}

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.Destination;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
@ -10,13 +11,12 @@ import java.time.LocalDateTime;
@XStreamAlias("clearedLiabilitiesTotal")
public class ReportBR_0420315_P2 extends ReportWithPeriod {
@XStreamAlias("rows")
private final Info_0420315_P2 rows;
@XStreamAsAttribute
@XStreamAlias("destination")
private String destination;
@XStreamAlias("total")
private final Info_0420315_P2 total;
public ReportBR_0420315_P2(LocalDate startDate,
LocalDate endDate,
String destination,
@ -28,49 +28,14 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod {
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 2",
startDate,
endDate);
this.destination = destination;
total = new Info_0420315_P2(contractQty, liabilitiesAmount);
this.destination = Destination.BR.getKey();
rows = new Info_0420315_P2(contractQty, liabilitiesAmount);
}
public Info_0420315_P2 getTotal() {
return total;
public Info_0420315_P2 getRows() {
return rows;
}
public static class Info_0420315_P2 {
@XStreamAlias("contract_qty")
@XStreamAsAttribute
private String contractQty;
@XStreamAlias("liabilities_amount")
@XStreamAsAttribute
private String liabilitiesAmount;
public Info_0420315_P2(String contractQty, String liabilitiesAmount) {
this.contractQty = contractQty;
this.liabilitiesAmount = liabilitiesAmount;
}
public String getContractQty() {
return contractQty;
}
public void setContractQty(String contractQty) {
this.contractQty = contractQty;
}
public String getLiabilitiesAmount() {
return liabilitiesAmount;
}
public void setLiabilitiesAmount(String liabilitiesAmount) {
this.liabilitiesAmount = liabilitiesAmount;
}
}
@Override
public String getReportName(LocalDateTime reportDateTime) {
return "REPBR.0420315.P2.%s-%s.%s".formatted(
@ -80,4 +45,8 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod {
);
}
public record Info_0420315_P2(@XStreamAlias("contract_qty") @XStreamAsAttribute String contractQty,
@XStreamAlias("liabilities_amount") @XStreamAsAttribute String liabilitiesAmount) {
}
}

View file

@ -4,6 +4,7 @@ import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import ru.spcex.platform.enumeration.ClearingStatus;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -19,15 +20,15 @@ public class ReportBR_0420318 extends ReportWithClearingStatus {
@XStreamAlias("rows")
private final List<Info_0420318> rows = new ArrayList<>();
public ReportBR_0420318(LocalDate startDate, LocalDate endDate, String clearingStatus, String destination) {
public ReportBR_0420318(LocalDate startDate, LocalDate endDate) {
super(ReportId.BR_0420318,
"0.0.1",
"0420318",
"Сведения о неисполненных обязательствах",
startDate,
endDate,
clearingStatus);
this.destination = destination;
ClearingStatus.FAIL.getKey());
this.destination = "BR";
}
public List<Info_0420318> getRows() {

View file

@ -55,10 +55,7 @@ public class ReportsService {
/* ========= БТ 17.1 ========== */
// todo see ReportDataCollector
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(LocalDate.now(),
LocalDate.now(),
"BR",
"clearingMemberCategory",
"clearingStatus");
LocalDate.now());
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1("companyId",
"companyFullName",
"listingMarket",
@ -95,7 +92,7 @@ public class ReportsService {
/* ========= БТ 17.3 ========== */
ReportBR_0420318 reportBR_0420318 = new ReportBR_0420318(LocalDate.now(), LocalDate.now(), "clearingStatus", "BR");
ReportBR_0420318 reportBR_0420318 = new ReportBR_0420318(LocalDate.now(), LocalDate.now());
ReportBR_0420318.Info_0420318 info_0420318 = new ReportBR_0420318.Info_0420318(
"liabilitiesClaimsAssetsFullName",
"companySymbolsCode",

View file

@ -1,146 +1,142 @@
package ru.spcex.clearing.reports.services.collector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports.services.ReportDataCollector;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.ClearingStatus;
import ru.spcex.platform.enumeration.Market;
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 ru.spcex.platform.utils.time.TimeUtil;
import java.time.Instant;
import java.time.LocalDate;
import java.util.*;
@Component
public class Bt17_1_P1_collector extends ReportDataCollector<ReportBR_0420315_P1> {
protected static final List<String> ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey());
protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey();
private Imdg<Company> companyImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
private Imdg<Listing> listingImdg;
@Autowired
public Bt17_1_P1_collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
}
/**
* @param onMarket Market.mkrs.getKey()
* @param securityId liability.getSecurityId()
* @return
*/
protected Listing findListing(Market onMarket, Long securityId) {
Map qParam = new HashMap<>();
qParam.put("market", onMarket.getKey());
qParam.put("securityId", securityId);
return listingImdg.getSingleObjectByFieldValues(qParam);
}
Collection<LiabilitiesClaimsAssets> searchLiabilitiesClaimsAssets(LocalDate startDate, LocalDate endDate, Long allowClearingStatusId) {
// String ql = String.format("'%s' <= refundDate and refundDate <= '%s' and clearingStatus=%s",
// formatToIMDGInstant(startDate), formatToIMDGInstant(endDate), allowClearingStatusId);
// Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql);
ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi),
pb.equals("clearingStatus", allowClearingStatusId));
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p);
return liabilities;
}
@Override
public ReportBR_0420315_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate,
"BR",
"I,V", // cmc.getClearingMemberCategory()
ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK"
);
final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK"
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(startDate, endDate, allowClearingStatusId);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
company_for:
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
List<LiabilitiesClaimsAssets> liabilitiesOfCompany = companyEntry.getValue();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company != null) {
Collection<ClearingMemberCategory> cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId));
boolean checkCategory = cmcLst.stream()
.anyMatch(cmc -> ALLOW_CLEARING_MEMBER_CATEGORY.contains(cmc.getClearingMemberCategory()));
if (!checkCategory) {
// фильтруются <> I, V
log.trace("Filtered company[{}] ClearingMemberCategory no match: {}",
companyId, cmcLst);
continue company_for;
}
HashSet<String> onMarket = new HashSet<>();
long contractorQty;
double liabilitiesAmount = 0;
{
HashSet<String> collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт
HashSet<Long> onMarketSecurity=new HashSet<>();
for (LiabilitiesClaimsAssets lContract : liabilitiesOfCompany) {
if (!onMarketSecurity.contains(lContract.getSecurityId())) {
Listing listing = findListing(Market.mkrs, lContract.getSecurityId());
if (listing!= null) {
onMarket.add(listing.getMarket());
}
onMarketSecurity.add(lContract.getSecurityId());
}
if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())
&& !collectedToSumm.contains(lContract.getContract())) {
collectedToSumm.add(lContract.getContract());
liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue();
}
}
contractorQty = collectedToSumm.size();
}
String onMarketString = StringUtils.join(onMarket, ",");
if (onMarket.size() != 1) { // Сейчас по коду ожидается один listing.market="MKRS" но потом могут быть несколько
log.warn("Market for companyId[{}]: {}", companyId, onMarketString);
}
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1(company.getId().toString(),
company.getFullName(),
onMarketString,
toString(contractorQty),
toString(liabilitiesAmount));
reportBR_0420315_p1.getRows().add(info_0420315_p1);
}
}
return reportBR_0420315_p1;
}
@Override
public Class<ReportBR_0420315_P1> getReportClass() {
return ReportBR_0420315_P1.class;
}
}
package ru.spcex.clearing.reports.services.collector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1;
import ru.spcex.clearing.reports.services.ReportDataCollector;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.ClearingStatus;
import ru.spcex.platform.enumeration.Market;
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 ru.spcex.platform.utils.time.TimeUtil;
import java.time.Instant;
import java.time.LocalDate;
import java.util.*;
@Component
public class ReportBR_0420315_Collector extends ReportDataCollector<ReportBR_0420315_P1> {
protected static final List<String> ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey());
protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey();
private Imdg<Company> companyImdg;
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
private Imdg<Listing> listingImdg;
@Autowired
public ReportBR_0420315_Collector(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
}
/**
* @param onMarket Market.mkrs.getKey()
* @param securityId liability.getSecurityId()
* @return
*/
protected Listing findListing(Market onMarket, Long securityId) {
Map qParam = new HashMap<>();
qParam.put("market", onMarket.getKey());
qParam.put("securityId", securityId);
return listingImdg.getSingleObjectByFieldValues(qParam);
}
Collection<LiabilitiesClaimsAssets> searchLiabilitiesClaimsAssets(LocalDate startDate, LocalDate endDate, Long allowClearingStatusId) {
// String ql = String.format("'%s' <= refundDate and refundDate <= '%s' and clearingStatus=%s",
// formatToIMDGInstant(startDate), formatToIMDGInstant(endDate), allowClearingStatusId);
// Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql);
ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi),
pb.equals("clearingStatus", allowClearingStatusId));
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p);
return liabilities;
}
@Override
public ReportBR_0420315_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate);
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate);
final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK"
Collection<LiabilitiesClaimsAssets> liabilities = searchLiabilitiesClaimsAssets(startDate, endDate, allowClearingStatusId);
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
company_for:
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
final Long companyId = companyEntry.getKey();
List<LiabilitiesClaimsAssets> liabilitiesOfCompany = companyEntry.getValue();
Company company = companyImdg.getSingleObjectByID(companyId);
if (company != null) {
Collection<ClearingMemberCategory> cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId));
boolean checkCategory = cmcLst.stream()
.anyMatch(cmc -> ALLOW_CLEARING_MEMBER_CATEGORY.contains(cmc.getClearingMemberCategory()));
if (!checkCategory) {
// фильтруются <> I, V
log.trace("Filtered company[{}] ClearingMemberCategory no match: {}",
companyId, cmcLst);
continue company_for;
}
HashSet<String> onMarket = new HashSet<>();
long contractorQty;
double liabilitiesAmount = 0;
{
HashSet<String> collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт
HashSet<Long> onMarketSecurity=new HashSet<>();
for (LiabilitiesClaimsAssets lContract : liabilitiesOfCompany) {
if (!onMarketSecurity.contains(lContract.getSecurityId())) {
Listing listing = findListing(Market.mkrs, lContract.getSecurityId());
if (listing!= null) {
onMarket.add(listing.getMarket());
}
onMarketSecurity.add(lContract.getSecurityId());
}
if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())
&& !collectedToSumm.contains(lContract.getContract())) {
collectedToSumm.add(lContract.getContract());
liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue();
}
}
contractorQty = collectedToSumm.size();
}
String onMarketString = StringUtils.join(onMarket, ",");
if (onMarket.size() != 1) { // Сейчас по коду ожидается один listing.market="MKRS" но потом могут быть несколько
log.warn("Market for companyId[{}]: {}", companyId, onMarketString);
}
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1(company.getId().toString(),
company.getFullName(),
onMarketString,
toString(contractorQty),
toString(liabilitiesAmount));
reportBR_0420315_p1.getRows().add(info_0420315_p1);
}
}
return reportBR_0420315_p1;
}
@Override
public Class<ReportBR_0420315_P1> getReportClass() {
return ReportBR_0420315_P1.class;
}
}

View file

@ -0,0 +1,20 @@
package ru.spcex.clearing.reports.services.collector;
import ru.spcex.clearing.reports.reports.bt_17_3.ReportBR_0420318;
import ru.spcex.clearing.reports.services.ReportDataCollector;
import java.time.LocalDate;
public class ReportBR_0420318_Collector extends ReportDataCollector<ReportBR_0420318> {
@Override
public ReportBR_0420318 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
return null;
}
@Override
public Class<ReportBR_0420318> getReportClass() {
return ReportBR_0420318.class;
}
}

View file

@ -0,0 +1,56 @@
package ru.spcex.clearing.reports.services.collector;
import ru.clearing.classes.statics.data.account.AccountBalance;
import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.ReportINACCNT;
import ru.spcex.clearing.reports.services.ReportDataCollector;
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 ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
import java.time.LocalDate;
import java.util.Collection;
public class ReportINACCNT_Collector extends ReportDataCollector<ReportINACCNT> {
private final Imdg<AccountBalance> accountBalanceImdg;
private final Imdg<Company> companyImdg;
public ReportINACCNT_Collector(ImdgProvider imdgProvider) {
accountBalanceImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_AccountBalance,
AccountBalance.class
);
companyImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_Company,
Company.class
);
}
@Override
public ReportINACCNT collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
String companyClearingCode;
validateDateRange(startDate, endDate);
ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast();
ImdgPredicate accountTypePredicate = builder.or(
builder.equals("accountType", "CLRN"),
builder.equals("accountType", "INFO")
);
Collection<AccountBalance> accountBalances = accountBalanceImdg.getCollectionObjectsByPredicate(accountTypePredicate);
return null;
}
@Override
public Class<ReportINACCNT> getReportClass() {
return ReportINACCNT.class;
}
}

View file

@ -22,7 +22,6 @@ import java.util.stream.Collectors;
public class ReportPA_BT2_B_Collector extends ReportDataCollector<ReportPA_BT2_B> {
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private final Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
public ReportPA_BT2_B_Collector(ImdgProvider imdgProvider) {
@ -30,10 +29,6 @@ public class ReportPA_BT2_B_Collector extends ReportDataCollector<ReportPA_BT2_B
IMDGDistributedNames.Map_LiabilitiesClaimsAssets,
LiabilitiesClaimsAssets.class
);
clearingStatusDictionaryImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_ClearingStatusDictionary,
ClearingStatusDictionary.class
);
clearingMemberCategoryImdg = imdgProvider.getImdg(
IMDGDistributedNames.Map_ClearingMemberCategory,
ClearingMemberCategory.class