fix CheckSecurityExist stage

This commit is contained in:
akulikov 2023-05-25 19:50:43 +03:00
parent 4749ae9592
commit 9410af7c15
9 changed files with 147 additions and 39 deletions

View file

@ -1,10 +1,16 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
import ru.clearing.classes.statics.data.instrument.issue.CouponPeriod;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.CouponSchedule;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.Nominal;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.InstrumentType;
import ru.spcex.platform.imdg.api.Imdg;
@ -17,10 +23,16 @@ import java.util.Map;
public class CheckSecurityExist extends Stage<ListingsRequestParam> {
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<Listing> listingImdg;
private final Imdg<CouponPeriod> couponPeriodImdg;
private final Imdg<FixedIncomeCashFlow> fixedIncomeCashFlowImdg;
public CheckSecurityExist(ImdgProvider imdgProvider) {
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
couponPeriodImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CouponPeriod, CouponPeriod.class);
fixedIncomeCashFlowImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class);
}
@Override
@ -34,6 +46,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
Map.of("securitySymbol", securitySymbol)
);
if (!fixedIncomeSecurity.isEmpty()) {
// todo log for multiply elements
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(fixedIncomeSecurity.iterator().next().getId());
} else {
@ -44,6 +57,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
Map.of("securitySymbol", securitySymbol)
);
if (!equitySecurity.isEmpty()) {
// todo log for multiply elements
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(equitySecurity.iterator().next().getId());
} else {
@ -51,8 +65,72 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
}
if (incomeSecurity.isAlreadyExist()) {
// todo after answer
for (IncomeListing listing : incomeSecurity.getListingList()) {
if (!incomeSecurity.isAlreadyExist()) {
listing.setAlreadyExist(false);
continue;
}
Collection<Listing> listingFromImdg = listingImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"market", listing.getCode()
)
);
if (listingFromImdg.isEmpty()) {
listing.setAlreadyExist(false);
} else {
// todo log for multiply elements
listing.setAlreadyExist(true);
listing.setMapId(listingFromImdg.iterator().next().getId());
}
}
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
if (!incomeSecurity.isAlreadyExist()) {
couponSchedule.setAlreadyExist(false);
continue;
}
Collection<CouponPeriod> couponPeriodFromImdg = couponPeriodImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"periodStartDate", couponSchedule.getPeriodStartDate(),
"periodEndDate", couponSchedule.getPeriodEndDate()
)
);
if (couponPeriodFromImdg.isEmpty()) {
couponSchedule.setAlreadyExist(false);
} else {
// todo log for multiply elements
couponSchedule.setAlreadyExist(true);
couponSchedule.setMapId(couponPeriodFromImdg.iterator().next().getId());
}
}
for (Nominal nominal : incomeSecurity.getNominalList()) {
if (incomeSecurity.isAlreadyExist()) {
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"valueDate", nominal.getDate()
)
);
if (fixedIncomeCashFlowFromImdg.isEmpty()) {
nominal.setAlreadyExist(false);
} else {
// todo log for multiply elements
nominal.setAlreadyExist(true);
nominal.setMapId(fixedIncomeCashFlowFromImdg.iterator().next().getId());
}
} else {
nominal.setAlreadyExist(false);
}
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate()))
continue;
nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon());
nominal.setCouponNumber(couponSchedule.getCouponNumber());
}
}
}

View file

@ -38,8 +38,8 @@ public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
// todo сделать после выяснения
}
List<Listing> listingList = param.getListingsRequest().getListingList();
for (Listing listing : listingList) {
List<IncomeListing> listingList = param.getListingsRequest().getListingList();
for (IncomeListing listing : listingList) {
UUID listingUUID = listing.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(listingUUID);
if (incomeSecurity == null) {

View file

@ -2,8 +2,8 @@ package ru.spcex.clearing.gatewayapi.logic.listings;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.Listing;
import ru.spcex.platform.enumeration.BondType;
import ru.spcex.platform.enumeration.InstrumentType;
import ru.spcex.platform.enumeration.WorkflowStatus;
@ -43,9 +43,9 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
continue;
}
List<Listing> listingList = incomeSecurity.getListingList();
List<IncomeListing> listingList = incomeSecurity.getListingList();
for (Listing listing : listingList) {
for (IncomeListing listing : listingList) {
workflowStatusStr = listing.getWorkflowStatus();
workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {

View file

@ -21,7 +21,7 @@ public class ListingsRequest extends BaseRequest {
@JsonProperty("listing")
@ApiModelProperty(value = "Список режимов торгов")
private List<Listing> listingList;
private List<IncomeListing> listingList;
@JsonProperty("nominal")
@ApiModelProperty(value = "Список nominal")
@ -67,11 +67,11 @@ public class ListingsRequest extends BaseRequest {
this.currencies = currencies;
}
public List<Listing> getListingList() {
public List<IncomeListing> getListingList() {
return listingList;
}
public void setListingList(List<Listing> listingList) {
public void setListingList(List<IncomeListing> listingList) {
this.listingList = listingList;
}

View file

@ -9,7 +9,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class CouponSchedule {
public class CouponSchedule extends WithMapId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",

View file

@ -9,7 +9,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class Listing {
public class IncomeListing extends WithMapId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",
@ -120,7 +120,6 @@ public class Listing {
)
private LocalDate endDate;
public UUID getSecurityId() {
return securityId;
}
@ -240,4 +239,5 @@ public class Listing {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}
}

View file

@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class IncomeSecurity {
public class IncomeSecurity extends WithMapId {
@JsonProperty("id")
@ApiModelProperty(
value = "id (uuid)",
@ -174,7 +174,7 @@ public class IncomeSecurity {
@JsonIgnore
private List<Listing> listingList = new ArrayList<>();
private List<IncomeListing> listingList = new ArrayList<>();
@JsonIgnore
private List<CouponSchedule> couponScheduleList = new ArrayList<>();
@ -185,12 +185,6 @@ public class IncomeSecurity {
@JsonIgnore
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
@JsonIgnore
private boolean alreadyExist = false;
@JsonIgnore
private Long mapId;
public UUID getId() {
return id;
}
@ -335,11 +329,11 @@ public class IncomeSecurity {
this.couponFrequency = couponFrequency;
}
public List<Listing> getListingList() {
public List<IncomeListing> getListingList() {
return listingList;
}
public void setListingList(List<Listing> listingList) {
public void setListingList(List<IncomeListing> listingList) {
this.listingList = listingList;
}
@ -367,19 +361,4 @@ public class IncomeSecurity {
this.issuerCompanyList = issuerCompanyList;
}
public boolean isAlreadyExist() {
return alreadyExist;
}
public void setAlreadyExist(boolean alreadyExist) {
this.alreadyExist = alreadyExist;
}
public Long getMapId() {
return mapId;
}
public void setMapId(Long mapId) {
this.mapId = mapId;
}
}

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
@ -9,7 +10,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class Nominal {
public class Nominal extends WithMapId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",
@ -42,6 +43,13 @@ public class Nominal {
)
private Boolean isDeleted;
@JsonIgnore
private Long couponNumber;
@JsonIgnore
private BigDecimal accruedCoupon;
public UUID getSecurityId() {
return securityId;
}
@ -73,4 +81,20 @@ public class Nominal {
public void setDeleted(Boolean deleted) {
isDeleted = deleted;
}
public Long getCouponNumber() {
return couponNumber;
}
public void setCouponNumber(Long couponNumber) {
this.couponNumber = couponNumber;
}
public BigDecimal getAccruedCoupon() {
return accruedCoupon;
}
public void setAccruedCoupon(BigDecimal accruedCoupon) {
this.accruedCoupon = accruedCoupon;
}
}

View file

@ -0,0 +1,27 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
public abstract class WithMapId {
@JsonIgnore
protected Long mapId;
@JsonIgnore
protected boolean alreadyExist = false;
public Long getMapId() {
return mapId;
}
public void setMapId(Long mapId) {
this.mapId = mapId;
}
public boolean isAlreadyExist() {
return alreadyExist;
}
public void setAlreadyExist(boolean alreadyExist) {
this.alreadyExist = alreadyExist;
}
}