From 8991d915b304b9c45f8ea5b47577b0b9a3b06318 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 30 May 2023 15:28:01 +0300 Subject: [PATCH] =?UTF-8?q?securities-service=20=D0=9F=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20(=D0=B2=D0=B5=D1=80=D0=BD=D1=83?= =?UTF-8?q?=D0=BB)=20listing=20=D1=81=20MoneyMarketSecurityService.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ErrorResolverConfig.java | 4 + .../securities/errors/SecuritiesError.java | 1 + .../cud/MoneyMarketSecurityService.java | 99 ++++++++++++------- .../service/EquitySecurityServiceTest.java | 8 +- .../FixedIncomeSecurityServiceTest.java | 8 +- 5 files changed, 76 insertions(+), 44 deletions(-) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java index 327fe9182..2db39ebce 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java @@ -1,7 +1,11 @@ package ru.spcex.clearing.securities.config; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.clearing.util.services.IMDGMessageResolver; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java index 40d4e0641..cbcdfb91d 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.securities.errors; import ru.spcex.platform.utils.enumeration.IErrorEnumId; public enum SecuritiesError implements IErrorEnumId { + GeneralError(1000L), UserVerifyDenial(1001L), // 'Нет прав на проведение данной операции RequiredFieldIsEmpty(1002L), WrongFieldValue(1004L), diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java index bf555c7da..5fef092b0 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java @@ -20,6 +20,7 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfo; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.clearing.securities.component.ListingBuilder; +import ru.spcex.clearing.securities.errors.SecuritiesError; import ru.spcex.clearing.securities.validation.ValidationProvider; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; @@ -32,9 +33,11 @@ import ru.spcex.platform.imdg.api.ImdgTransaction; import ru.spcex.platform.imdg.validation.Stored; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.log.ExceptionUtils; import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; +import java.util.Map; import java.util.Optional; @Service @@ -99,7 +102,6 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial } private RequestInfoUpdate newMoneyMarket(BaseRequest userRequest) { - ImdgTransaction transaction = imdgProvider.newTransaction(); MoneyMarketSecurityNewRequest req = userRequest.getRequestPayload(); { @@ -136,20 +138,25 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial } else { mms.setWorkflowStatus(req.getWorkflowStatus()); } + ImdgTransaction transaction = imdgProvider.newTransaction(); try { transaction.beginTransaction(); - Imdg moneyMarketSecurityMap = transaction.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); - Imdg listingMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + Imdg moneyMarketSecurityTxMap = transaction.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); + Imdg listingTxMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); //одним скопом выполняем реквест - moneyMarketSecurityMap.insert(mms); -// Listing listing = ListingBuilder.builder() -// .append(mms).append(req).build(); -// listingMap.insert(listing); + moneyMarketSecurityTxMap.insert(mms); + Listing listing = ListingBuilder.builder() + .append(mms).append(req).build(); + listingTxMap.insert(listing); transaction.commitTransaction(); } catch (Throwable e) { + log.error("Error at create security, rollback transaction. {}", ExceptionUtils.getStackTrace(e)); transaction.rollbackTransaction(); -// RequestInfo.update(reqInfo, Status.Error, ExceptionUtils.getStackTrace(e)); -// requestInfoImdg.insert(reqInfo); + String errorMsg = messageResolver.resolve(new EnumMessage(SecuritiesError.GeneralError)); + return new RequestInfoUpdate() + .setId(userRequest.getId()) + .setStatus(Status.Error) + .setMessage(errorMsg); } log.debug("successfully processed, request id {}, new object id {}", userRequest.getId(), mms.getId()); return null; // default success @@ -174,36 +181,52 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial } MoneyMarketSecurity mms = validator.getStored(Stored.PresentById); if (mms == null) log.error("Validator return null stored mms object."); - Instant updateTime = Instant.now(); - mms.setUpdated(updateTime); - mms.setStartDate(req.getStartDate()); - mms.setEndDate(req.getEndDate()); - mms.setNominalValue(req.getNominalValue()); - mms.setLotSize(req.getLotSize()); - mms.setNominalCurrency(req.getNominalCurrency()); - mms.setInstrumentType(req.getInstrumentType()); - mms.setFullName(req.getFullName()); - mms.setShortName(req.getShortName()); - mms.setFullNameEng(req.getFullNameEng()); - mms.setShortNameEng(req.getShortNameEng()); - mms.setSecuritySymbol(req.getSecuritySymbol()); - mms.setTermType(req.getTermType()); - mms.setIsin(req.getIsin()); - mms.setIssuerId(req.getIssuerId()); - mms.setSecurityId(mms.getId()); - mms.setDescription(req.getDescription()); - if (req.getWorkflowStatus() != null) { - mms.setWorkflowStatus(req.getWorkflowStatus()); - } + ImdgTransaction transaction = imdgProvider.newTransaction(); + try { + Instant updateTime = Instant.now(); + mms.setUpdated(updateTime); + mms.setStartDate(req.getStartDate()); + mms.setEndDate(req.getEndDate()); + mms.setNominalValue(req.getNominalValue()); + mms.setLotSize(req.getLotSize()); + mms.setNominalCurrency(req.getNominalCurrency()); + mms.setInstrumentType(req.getInstrumentType()); + mms.setFullName(req.getFullName()); + mms.setShortName(req.getShortName()); + mms.setFullNameEng(req.getFullNameEng()); + mms.setShortNameEng(req.getShortNameEng()); + mms.setSecuritySymbol(req.getSecuritySymbol()); + mms.setTermType(req.getTermType()); + mms.setIsin(req.getIsin()); + mms.setIssuerId(req.getIssuerId()); + mms.setSecurityId(mms.getId()); + mms.setDescription(req.getDescription()); + if (req.getWorkflowStatus() != null) { + mms.setWorkflowStatus(req.getWorkflowStatus()); + } - moneyMarketSecurityMap.update(mms); -// Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", mms.getId())); -// if (listing == null) { -// log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), mms.getId()); -// return null; -// } -// listing = updateListingByMms(mms, listing); -// listingImdg.update(listing); + transaction.beginTransaction(); + Imdg moneyMarketSecurityTxMap = transaction.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); + Imdg listingTxMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + + moneyMarketSecurityTxMap.update(mms); + Listing listing = listingTxMap.getSingleObjectByFieldValues(Map.of("securityId", mms.getId())); + if (listing == null) { + log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), mms.getId()); + return null; + } + listing = updateListingByMms(mms, listing); + listingTxMap.update(listing); + transaction.commitTransaction(); + } catch (Throwable e) { + log.error("Error at update security {}, rollback transaction. {}", req.getId(), ExceptionUtils.getStackTrace(e)); + transaction.rollbackTransaction(); + String errorMsg = messageResolver.resolve(new EnumMessage(SecuritiesError.GeneralError)); + return new RequestInfoUpdate() + .setId(userRequest.getId()) + .setStatus(Status.Error) + .setMessage(errorMsg); + } return null; } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java index 9133689b0..45499c0d3 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.securities.service; import org.apache.kafka.clients.consumer.MockConsumer; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; @@ -62,9 +63,10 @@ public class EquitySecurityServiceTest extends AbstractServiceTest { EQUITY_SECURITY_MATCHER.assertMatch(equityResult, equityPrediction); Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equityPrediction.getId())); - listingPrediction.setId(listingResult.getId()); - listingPrediction.setSecurityId(listingResult.getSecurityId()); - LISTING_MATCHER.assertMatch(listingResult, listingPrediction); + Assertions.assertNull(listingResult); +// listingPrediction.setId(listingResult.getId()); +// listingPrediction.setSecurityId(listingResult.getSecurityId()); +// LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } /** diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java index b9599ce8c..a872e37d0 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.securities.service; import org.apache.kafka.clients.consumer.MockConsumer; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; @@ -63,9 +64,10 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest { FIXED_INCOME_SECURITY_MATCHER.assertMatch(equityResult, fixedIncomePrediction); Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", fixedIncomePrediction.getId())); - listingPrediction.setId(listingResult.getId()); - listingPrediction.setSecurityId(listingResult.getSecurityId()); - LISTING_MATCHER.assertMatch(listingResult, listingPrediction); + Assertions.assertNull(listingResult); +// listingPrediction.setId(listingResult.getId()); +// listingPrediction.setSecurityId(listingResult.getSecurityId()); +// LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } /**