fix CheckSecurityExist stage
This commit is contained in:
parent
4749ae9592
commit
9410af7c15
9 changed files with 147 additions and 39 deletions
|
|
@ -1,10 +1,16 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings;
|
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.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.instrument.issue.FixedIncomeSecurity;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Listing;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
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.IncomeSecurity;
|
||||||
|
import ru.spcex.clearing.gatewayapi.request.objects.Nominal;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.enumeration.InstrumentType;
|
import ru.spcex.platform.enumeration.InstrumentType;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
@ -17,10 +23,16 @@ import java.util.Map;
|
||||||
public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
private final Imdg<EquitySecurity> equitySecurityImdg;
|
private final Imdg<EquitySecurity> equitySecurityImdg;
|
||||||
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||||
|
private final Imdg<Listing> listingImdg;
|
||||||
|
private final Imdg<CouponPeriod> couponPeriodImdg;
|
||||||
|
private final Imdg<FixedIncomeCashFlow> fixedIncomeCashFlowImdg;
|
||||||
|
|
||||||
public CheckSecurityExist(ImdgProvider imdgProvider) {
|
public CheckSecurityExist(ImdgProvider imdgProvider) {
|
||||||
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
||||||
fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.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
|
@Override
|
||||||
|
|
@ -34,6 +46,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
Map.of("securitySymbol", securitySymbol)
|
Map.of("securitySymbol", securitySymbol)
|
||||||
);
|
);
|
||||||
if (!fixedIncomeSecurity.isEmpty()) {
|
if (!fixedIncomeSecurity.isEmpty()) {
|
||||||
|
// todo log for multiply elements
|
||||||
incomeSecurity.setAlreadyExist(true);
|
incomeSecurity.setAlreadyExist(true);
|
||||||
incomeSecurity.setMapId(fixedIncomeSecurity.iterator().next().getId());
|
incomeSecurity.setMapId(fixedIncomeSecurity.iterator().next().getId());
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -44,6 +57,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
Map.of("securitySymbol", securitySymbol)
|
Map.of("securitySymbol", securitySymbol)
|
||||||
);
|
);
|
||||||
if (!equitySecurity.isEmpty()) {
|
if (!equitySecurity.isEmpty()) {
|
||||||
|
// todo log for multiply elements
|
||||||
incomeSecurity.setAlreadyExist(true);
|
incomeSecurity.setAlreadyExist(true);
|
||||||
incomeSecurity.setMapId(equitySecurity.iterator().next().getId());
|
incomeSecurity.setMapId(equitySecurity.iterator().next().getId());
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -51,8 +65,72 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (incomeSecurity.isAlreadyExist()) {
|
for (IncomeListing listing : incomeSecurity.getListingList()) {
|
||||||
// todo after answer
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
|
||||||
// todo сделать после выяснения
|
// todo сделать после выяснения
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Listing> listingList = param.getListingsRequest().getListingList();
|
List<IncomeListing> listingList = param.getListingsRequest().getListingList();
|
||||||
for (Listing listing : listingList) {
|
for (IncomeListing listing : listingList) {
|
||||||
UUID listingUUID = listing.getSecurityId();
|
UUID listingUUID = listing.getSecurityId();
|
||||||
IncomeSecurity incomeSecurity = securityMap.get(listingUUID);
|
IncomeSecurity incomeSecurity = securityMap.get(listingUUID);
|
||||||
if (incomeSecurity == null) {
|
if (incomeSecurity == null) {
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ package ru.spcex.clearing.gatewayapi.logic.listings;
|
||||||
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
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.IncomeSecurity;
|
||||||
import ru.spcex.clearing.gatewayapi.request.objects.Listing;
|
|
||||||
import ru.spcex.platform.enumeration.BondType;
|
import ru.spcex.platform.enumeration.BondType;
|
||||||
import ru.spcex.platform.enumeration.InstrumentType;
|
import ru.spcex.platform.enumeration.InstrumentType;
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
|
|
@ -43,9 +43,9 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Listing> listingList = incomeSecurity.getListingList();
|
List<IncomeListing> listingList = incomeSecurity.getListingList();
|
||||||
|
|
||||||
for (Listing listing : listingList) {
|
for (IncomeListing listing : listingList) {
|
||||||
workflowStatusStr = listing.getWorkflowStatus();
|
workflowStatusStr = listing.getWorkflowStatus();
|
||||||
workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
|
workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
|
||||||
if (workflowStatus == null) {
|
if (workflowStatus == null) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class ListingsRequest extends BaseRequest {
|
||||||
|
|
||||||
@JsonProperty("listing")
|
@JsonProperty("listing")
|
||||||
@ApiModelProperty(value = "Список режимов торгов")
|
@ApiModelProperty(value = "Список режимов торгов")
|
||||||
private List<Listing> listingList;
|
private List<IncomeListing> listingList;
|
||||||
|
|
||||||
@JsonProperty("nominal")
|
@JsonProperty("nominal")
|
||||||
@ApiModelProperty(value = "Список nominal")
|
@ApiModelProperty(value = "Список nominal")
|
||||||
|
|
@ -67,11 +67,11 @@ public class ListingsRequest extends BaseRequest {
|
||||||
this.currencies = currencies;
|
this.currencies = currencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Listing> getListingList() {
|
public List<IncomeListing> getListingList() {
|
||||||
return listingList;
|
return listingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setListingList(List<Listing> listingList) {
|
public void setListingList(List<IncomeListing> listingList) {
|
||||||
this.listingList = listingList;
|
this.listingList = listingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class CouponSchedule {
|
public class CouponSchedule extends WithMapId {
|
||||||
@JsonProperty("security_id")
|
@JsonProperty("security_id")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
value = "Ссылка на security",
|
value = "Ссылка на security",
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Listing {
|
public class IncomeListing extends WithMapId {
|
||||||
@JsonProperty("security_id")
|
@JsonProperty("security_id")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
value = "Ссылка на security",
|
value = "Ссылка на security",
|
||||||
|
|
@ -120,7 +120,6 @@ public class Listing {
|
||||||
)
|
)
|
||||||
private LocalDate endDate;
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
|
||||||
public UUID getSecurityId() {
|
public UUID getSecurityId() {
|
||||||
return securityId;
|
return securityId;
|
||||||
}
|
}
|
||||||
|
|
@ -240,4 +239,5 @@ public class Listing {
|
||||||
public void setEndDate(LocalDate endDate) {
|
public void setEndDate(LocalDate endDate) {
|
||||||
this.endDate = endDate;
|
this.endDate = endDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class IncomeSecurity {
|
public class IncomeSecurity extends WithMapId {
|
||||||
@JsonProperty("id")
|
@JsonProperty("id")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
value = "id (uuid)",
|
value = "id (uuid)",
|
||||||
|
|
@ -174,7 +174,7 @@ public class IncomeSecurity {
|
||||||
|
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private List<Listing> listingList = new ArrayList<>();
|
private List<IncomeListing> listingList = new ArrayList<>();
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private List<CouponSchedule> couponScheduleList = new ArrayList<>();
|
private List<CouponSchedule> couponScheduleList = new ArrayList<>();
|
||||||
|
|
@ -185,12 +185,6 @@ public class IncomeSecurity {
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
|
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
private boolean alreadyExist = false;
|
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
private Long mapId;
|
|
||||||
|
|
||||||
public UUID getId() {
|
public UUID getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
@ -335,11 +329,11 @@ public class IncomeSecurity {
|
||||||
this.couponFrequency = couponFrequency;
|
this.couponFrequency = couponFrequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Listing> getListingList() {
|
public List<IncomeListing> getListingList() {
|
||||||
return listingList;
|
return listingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setListingList(List<Listing> listingList) {
|
public void setListingList(List<IncomeListing> listingList) {
|
||||||
this.listingList = listingList;
|
this.listingList = listingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -367,19 +361,4 @@ public class IncomeSecurity {
|
||||||
this.issuerCompanyList = issuerCompanyList;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.spcex.clearing.gatewayapi.request.objects;
|
package ru.spcex.clearing.gatewayapi.request.objects;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
@ -9,7 +10,7 @@ import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Nominal {
|
public class Nominal extends WithMapId {
|
||||||
@JsonProperty("security_id")
|
@JsonProperty("security_id")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
value = "Ссылка на security",
|
value = "Ссылка на security",
|
||||||
|
|
@ -42,6 +43,13 @@ public class Nominal {
|
||||||
)
|
)
|
||||||
private Boolean isDeleted;
|
private Boolean isDeleted;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
private Long couponNumber;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
private BigDecimal accruedCoupon;
|
||||||
|
|
||||||
|
|
||||||
public UUID getSecurityId() {
|
public UUID getSecurityId() {
|
||||||
return securityId;
|
return securityId;
|
||||||
}
|
}
|
||||||
|
|
@ -73,4 +81,20 @@ public class Nominal {
|
||||||
public void setDeleted(Boolean deleted) {
|
public void setDeleted(Boolean deleted) {
|
||||||
isDeleted = 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue