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.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute; 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.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus; 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.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -12,7 +15,6 @@ import java.util.List;
@XStreamAlias("clearedLiabilities") @XStreamAlias("clearedLiabilities")
public class ReportBR_0420315_P1 extends ReportWithClearingStatus { public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
@XStreamAsAttribute @XStreamAsAttribute
@XStreamAlias("destination") @XStreamAlias("destination")
private String destination; private String destination;
@ -25,61 +27,25 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
private final List<Info_0420315_P1> rows = new ArrayList<>(); private final List<Info_0420315_P1> rows = new ArrayList<>();
public ReportBR_0420315_P1(LocalDate startDate, public ReportBR_0420315_P1(LocalDate startDate,
LocalDate endDate, LocalDate endDate) {
String destination,
String clearingMemberCategory,
String clearingStatus) {
super(ReportId.BR_0420315_P1, super(ReportId.BR_0420315_P1,
"0.0.1", "0.0.1",
"0420315", "0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 1", "Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 1",
startDate, startDate,
endDate, endDate,
clearingStatus); ClearingStatus.OK.getKey());
this.destination = destination; this.destination = Destination.BR.getKey();
this.clearingMemberCategory = clearingMemberCategory; this.clearingMemberCategory = "%s,%s".formatted(
ClearingMemberCategoryD.I.getKey(),
"V"
);
} }
public List<Info_0420315_P1> getRows() { public List<Info_0420315_P1> getRows() {
return rows; 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 @Override
public String getReportName(LocalDateTime reportDateTime) { public String getReportName(LocalDateTime reportDateTime) {
return "REPBR.0420315.P1.%s-%s.%s".formatted( return "REPBR.0420315.P1.%s-%s.%s".formatted(
@ -88,4 +54,12 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
DATE_TIME_FORMATTER.format(reportDateTime) 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.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute; 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.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod; import ru.spcex.clearing.reports.reports.ReportWithPeriod;
@ -10,13 +11,12 @@ import java.time.LocalDateTime;
@XStreamAlias("clearedLiabilitiesTotal") @XStreamAlias("clearedLiabilitiesTotal")
public class ReportBR_0420315_P2 extends ReportWithPeriod { public class ReportBR_0420315_P2 extends ReportWithPeriod {
@XStreamAlias("rows")
private final Info_0420315_P2 rows;
@XStreamAsAttribute @XStreamAsAttribute
@XStreamAlias("destination") @XStreamAlias("destination")
private String destination; private String destination;
@XStreamAlias("total")
private final Info_0420315_P2 total;
public ReportBR_0420315_P2(LocalDate startDate, public ReportBR_0420315_P2(LocalDate startDate,
LocalDate endDate, LocalDate endDate,
String destination, String destination,
@ -28,49 +28,14 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod {
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 2", "Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 2",
startDate, startDate,
endDate); endDate);
this.destination = destination; this.destination = Destination.BR.getKey();
total = new Info_0420315_P2(contractQty, liabilitiesAmount); rows = new Info_0420315_P2(contractQty, liabilitiesAmount);
} }
public Info_0420315_P2 getTotal() { public Info_0420315_P2 getRows() {
return total; 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 @Override
public String getReportName(LocalDateTime reportDateTime) { public String getReportName(LocalDateTime reportDateTime) {
return "REPBR.0420315.P2.%s-%s.%s".formatted( 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 com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.ReportId; import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus; import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import ru.spcex.platform.enumeration.ClearingStatus;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -19,15 +20,15 @@ public class ReportBR_0420318 extends ReportWithClearingStatus {
@XStreamAlias("rows") @XStreamAlias("rows")
private final List<Info_0420318> rows = new ArrayList<>(); 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, super(ReportId.BR_0420318,
"0.0.1", "0.0.1",
"0420318", "0420318",
"Сведения о неисполненных обязательствах", "Сведения о неисполненных обязательствах",
startDate, startDate,
endDate, endDate,
clearingStatus); ClearingStatus.FAIL.getKey());
this.destination = destination; this.destination = "BR";
} }
public List<Info_0420318> getRows() { public List<Info_0420318> getRows() {

View file

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

View file

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