This commit is contained in:
AKurakin 2023-09-11 12:55:57 +03:00
parent 8e73a2eced
commit f0a090b00c
10 changed files with 68 additions and 19 deletions

View file

@ -50,9 +50,11 @@ public class SecurityRequestAdapter {
ListingNewRequest listingNewRequest = new ListingNewRequest();
String code = incomeListing.getCode();
listingNewRequest.setMarket(code);
if (!TextUtil.isEmpty(code)) {
listingNewRequest.setSymbolCode(code.substring(0, Math.min(7, code.length())));
}
// if (!TextUtil.isEmpty(code)) {
// listingNewRequest.setSymbolCode(code.substring(0, Math.min(7, code.length())));
// }
listingNewRequest.setSymbolCode(incomeListing.getSymbolName());
listingNewRequest.setSymbolName(incomeListing.getSymbolName());
listingNewRequest.setLotSize(incomeListing.getLotSize());
listingNewRequest.setTradingCurrency(incomeListing.getTradingCurrency());
listingNewRequest.setWorkflowStatus(incomeListing.getWorkflowStatus());
@ -73,6 +75,7 @@ public class SecurityRequestAdapter {
fixedIncomeCashFlowNewRequest.setAccruedCoupon(nominal.getAccruedCoupon());
fixedIncomeCashFlowNewRequest.setNominalValue(nominal.getNominal());
fixedIncomeCashFlowNewRequest.setNumber(nominal.getCouponNumber());
fixedIncomeCashFlowNewRequest.setValueDate(nominal.getDate());
return fixedIncomeCashFlowNewRequest;
}
}

View file

@ -17,6 +17,7 @@ import ru.spcex.platform.utils.validation.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
@ -46,7 +47,10 @@ public class FixedIncomeCashFlowValidationConfig {
IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class
);
Long securityId = Long.valueOf(securitySymbol);
Collection<FixedIncomeCashFlow> fixedIncomeCashFlows = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(Map.of("securityId", securityId));
HashMap<String, Long> query = new HashMap<>();
query.put("securityId", securityId);
query.put("number", fixedIncomeCashFlowNewRequest.getNumber());
Collection<FixedIncomeCashFlow> fixedIncomeCashFlows = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(query);
if (!fixedIncomeCashFlows.isEmpty()) return SecuritiesError.CouponPeriodAlreadyExists;
return null;
}),

View file

@ -107,7 +107,12 @@ public class CouponPeriodService extends QueueConsumer implements InitializingBe
CouponPeriod couponPeriod = couponPeriodImdg.getSingleObjectByID(req.getId());
if (req.getCouponRate() != null) couponPeriod.setCouponRate(req.getCouponRate());
if (req.getNumber() != null) couponPeriod.setNumber(req.getNumber());
if (req.getNumber() != null) {
if (!req.getNumber().equals(couponPeriod.getNumber())) {
log.warn("For couponPeriod[{}].number={} change to {}", couponPeriod.getId(), couponPeriod.getNumber(), req.getNumber());
}
couponPeriod.setNumber(req.getNumber());
}
if (req.getPeriodEndDate() != null) couponPeriod.setPeriodEndDate(req.getPeriodEndDate());
if (req.getPeriodStartDate() != null) couponPeriod.setPeriodStartDate(req.getPeriodStartDate());
couponPeriodImdg.update(couponPeriod);

View file

@ -358,7 +358,10 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
log.error("Not a number \"{}\": {}", byRequest.getSecuritySymbol(), nan.toString());
return null;
}
FixedIncomeCashFlow existFixedIncomeCashFlow = fixedIncomeCashFlowImdg.getFirstObjectByFieldValues(Map.of("securityId", securityId));
Map<String, Long> query = new HashMap<>();
query.put("securityId", securityId);
query.put("number", byRequest.getNumber());
FixedIncomeCashFlow existFixedIncomeCashFlow = fixedIncomeCashFlowImdg.getFirstObjectByFieldValues(query);
if (existFixedIncomeCashFlow == null)
log.trace("FixedIncomeCashFlow not found by securityId={}", securityId);
else
@ -419,6 +422,7 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
updateRequest.setTradingCurrency(newRequest.getTradingCurrency());
updateRequest.setWorkflowStatus(newRequest.getWorkflowStatus());
updateRequest.setSymbolCode(newRequest.getSymbolCode());
updateRequest.setSymbolName(newRequest.getSymbolName());
return updateRequest;
}

View file

@ -110,9 +110,15 @@ public class ListingService extends QueueConsumer implements InitializingBean {
if (req.getSymbolCode() != null) {
listing.setSymbolCode(req.getSymbolCode()); // listing.setSymbolCode(req.getSymbolCode());
} else {
listing.setSymbolCode(security.getSecuritySymbol());
if (security != null)
listing.setSymbolCode(security.getSecuritySymbol());
}
if (req.getSymbolName() != null) {
listing.setSymbolName(req.getSymbolName()); // api-gateway
} else {
if (security != null)
listing.setSymbolName(security.getFullName()); // req.getSymbolName
}
listing.setSymbolName(security.getFullName()); // req.getSymbolName
listing.setTradingCurrency(req.getTradingCurrency());
if (StringUtils.isEmpty(req.getWorkflowStatus())) {
listing.setWorkflowStatus(WorkflowStatus.Active.getKey());
@ -151,8 +157,8 @@ public class ListingService extends QueueConsumer implements InitializingBean {
listing.setUpdated(Instant.now());
listing.setLotSize(req.getLotSize());
if (req.getSymbolCode()!=null) listing.setSymbolCode(req.getSymbolCode());
//if (req.getSymbolName!=null) listing.setSymbolName(req.getSymbolName);
if (req.getSymbolCode() != null) listing.setSymbolCode(req.getSymbolCode());
if (req.getSymbolName() != null) listing.setSymbolName(req.getSymbolName());
listing.setTradingCurrency(req.getTradingCurrency());
if (StringUtils.isNotEmpty(req.getWorkflowStatus())) {
listing.setWorkflowStatus(req.getWorkflowStatus());

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@ -21,8 +22,10 @@ public enum CouponPeriodNewValidationRule implements IValidationRule<ImdgValidat
return of(SecuritiesError.RequiredFieldIsEmpty, "securityId");
}
Imdg<SpcexObjectBase> imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_CouponPeriod, SpcexObjectBase.class);
SpcexObjectBase couponPeriod = imdgDictionary.getFirstObjectByFieldValues(Map.of(
"securityId", action.getSecurityId()));
HashMap<String, Long> fields = new HashMap<>();
fields.put("securityId", action.getSecurityId());
fields.put("number", action.getNumber()); // may be null, but never
SpcexObjectBase couponPeriod = imdgDictionary.getFirstObjectByFieldValues(fields);
if (couponPeriod != null) {
return of(SecuritiesError.CouponPeriodAlreadyExists, "securityId");
}

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@ -21,10 +22,12 @@ public enum CouponPeriodUpdateValidationRule implements IValidationRule<ImdgVali
return of(SecuritiesError.RequiredFieldIsEmpty, "securityId");
}
Imdg<SpcexObjectBase> imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_CouponPeriod, SpcexObjectBase.class);
SpcexObjectBase currency = imdgDictionary.getFirstObjectByFieldValues(Map.of(
"securityId", action.getSecurityId()));
if (currency == null) {
return of(SecuritiesError.CouponPeriodNotFound, "securityId");
HashMap<String, Long> query = new HashMap<>();
query.put("securityId", action.getSecurityId());
query.put("number", action.getNumber());
SpcexObjectBase cPeriod = imdgDictionary.getFirstObjectByFieldValues(query);
if (cPeriod == null) {
return of(SecuritiesError.CouponPeriodNotFound, "securityId=" + action.getSecurityId() + " and number=" + action.getNumber());
}
return empty();
}

View file

@ -22,6 +22,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest {
private static final MatcherFactory.Matcher<CouponPeriod> COUPON_PERIOD_MATCHER = usingIgnoringFieldsComparator();
private final long ID = currentId.getAndIncrement();
private final long securityId = 3123L;
private final long number = 30200L;
private final int PARTITION = 0;
private final String countryCode = "countryCode";
private final String currencyCode = "currencyCode";
@ -82,7 +83,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest {
final CouponPeriod existCouponPeriod = new CouponPeriod();
existCouponPeriod.setSecurityId(securityId);
existCouponPeriod.setCouponRate(BigDecimal.ZERO);
existCouponPeriod.setNumber(Long.MIN_VALUE);
existCouponPeriod.setNumber(number);
existCouponPeriod.setPeriodEndDate(LocalDate.ofEpochDay(0));
existCouponPeriod.setPeriodStartDate(LocalDate.ofEpochDay(0));
Long id = couponPeriodImdg.insert(existCouponPeriod);
@ -93,7 +94,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest {
final CouponPeriod predictableCoupon = new CouponPeriod();
predictableCoupon.setSecurityId(securityId);
predictableCoupon.setCouponRate(BigDecimal.TEN);
predictableCoupon.setNumber(Long.MAX_VALUE);
predictableCoupon.setNumber(number);
predictableCoupon.setPeriodEndDate(testStartDate);
predictableCoupon.setPeriodStartDate(testEndDate);
@ -101,7 +102,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest {
predictableCoupon.setPeriodEndDate(LocalDate.now());
request.setId(id);
request.setCouponRate(BigDecimal.TEN);
request.setNumber(Long.MAX_VALUE);
request.setNumber(number);
request.setSecurityId(securityId);
request.setPeriodEndDate(testStartDate);
request.setPeriodStartDate(testEndDate);

View file

@ -17,6 +17,8 @@ public class ListingNewRequest {
private String workflowStatus;
@JsonProperty
private String symbolCode;
@JsonProperty
private String symbolName;
public Long getSecurityId() {
return securityId;
@ -65,4 +67,12 @@ public class ListingNewRequest {
public void setSymbolCode(String symbolCode) {
this.symbolCode = symbolCode;
}
public String getSymbolName() {
return symbolName;
}
public void setSymbolName(String symbolName) {
this.symbolName = symbolName;
}
}

View file

@ -20,6 +20,8 @@ public class ListingUpdateRequest implements WithId {
private String workflowStatus;
@JsonProperty
private String symbolCode;
@JsonProperty
private String symbolName;
@Override
public Long getId() {
@ -77,4 +79,12 @@ public class ListingUpdateRequest implements WithId {
public void setSymbolCode(String symbolCode) {
this.symbolCode = symbolCode;
}
public String getSymbolName() {
return symbolName;
}
public void setSymbolName(String symbolName) {
this.symbolName = symbolName;
}
}