From f0a090b00cc842f63a10c7e5b895558558929aab Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 11 Sep 2023 12:55:57 +0300 Subject: [PATCH] gateway-api securities-service http://jira.mfd.msk:8088/browse/CLS-516 --- .../service/adapter/SecurityRequestAdapter.java | 9 ++++++--- .../FixedIncomeCashFlowValidationConfig.java | 6 +++++- .../service/cud/CouponPeriodService.java | 7 ++++++- .../service/cud/GatewaySecurityService.java | 6 +++++- .../securities/service/cud/ListingService.java | 14 ++++++++++---- .../rule/CouponPeriodNewValidationRule.java | 7 +++++-- .../rule/CouponPeriodUpdateValidationRule.java | 11 +++++++---- .../service/CouponPeriodServiceTest.java | 7 ++++--- .../domain/cud/securitites/ListingNewRequest.java | 10 ++++++++++ .../cud/securitites/ListingUpdateRequest.java | 10 ++++++++++ 10 files changed, 68 insertions(+), 19 deletions(-) diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java index d71ddaf0e..915e84337 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java @@ -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; } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java index 49fe22471..fb306dd93 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java @@ -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 fixedIncomeCashFlows = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(Map.of("securityId", securityId)); + HashMap query = new HashMap<>(); + query.put("securityId", securityId); + query.put("number", fixedIncomeCashFlowNewRequest.getNumber()); + Collection fixedIncomeCashFlows = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(query); if (!fixedIncomeCashFlows.isEmpty()) return SecuritiesError.CouponPeriodAlreadyExists; return null; }), diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CouponPeriodService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CouponPeriodService.java index 3277794cf..a3bc56709 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CouponPeriodService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CouponPeriodService.java @@ -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); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java index 9bed9e6a4..dccda00a6 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java @@ -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 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; } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java index a7b227771..1ba0cd4e8 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java @@ -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()); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodNewValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodNewValidationRule.java index afe42b267..0858ee7d4 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodNewValidationRule.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodNewValidationRule.java @@ -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 imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_CouponPeriod, SpcexObjectBase.class); - SpcexObjectBase couponPeriod = imdgDictionary.getFirstObjectByFieldValues(Map.of( - "securityId", action.getSecurityId())); + HashMap 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"); } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodUpdateValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodUpdateValidationRule.java index e8740699d..a329fa84a 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodUpdateValidationRule.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CouponPeriodUpdateValidationRule.java @@ -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 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 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(); } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java index 20dd04771..0f1105c37 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java @@ -22,6 +22,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest { private static final MatcherFactory.Matcher 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); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java index d0457f2a1..e410563a7 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java @@ -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; + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java index d25e18d76..c8e7ccc24 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java @@ -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; + } }