Добавил проверку записей в справочниках, исправил ошибки, исправил тесты.
This commit is contained in:
psemenkov 2023-04-05 16:26:32 +03:00
parent 2f01256a66
commit dec7f44e48
16 changed files with 569 additions and 143 deletions

View file

@ -77,6 +77,23 @@
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0-M1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0-M1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

View file

@ -13,12 +13,13 @@ import ru.spcex.platform.enumeration.Status;
import java.math.BigDecimal;
public class ListingBuilder {
private final String market = Market.mkrs.getKey();
public Listing byNewMms(MoneyMarketSecurity mms, MoneyMarketSecurityNewRequest mmsReq) {
Listing listing = new Listing();
listing.setCreated(mms.getCreated());
listing.setSecurityId(mms.getId());
listing.setLotSize(BigDecimal.valueOf(mmsReq.getLotSize()));
listing.setMarket(Market.mkrs.getKey());
listing.setMarket(market);
listing.setSymbolCode(mms.getSecuritySymbol());
listing.setSymbolName(mms.getFullName());
listing.setTradingCurrency(mms.getNominalCurrency());
@ -41,7 +42,7 @@ public class ListingBuilder {
listing.setCreated(equitySecurity.getCreated());
listing.setSecurityId(equitySecurity.getId());
listing.setLotSize(BigDecimal.valueOf(request.getLotSize()));
listing.setMarket(Market.mkrs.getKey());
listing.setMarket(market);
listing.setSymbolCode(equitySecurity.getSecuritySymbol());
listing.setSymbolName(equitySecurity.getFullName());
// listing.setTradingCurrency(equitySecurity.getNominalCurrency());
@ -54,6 +55,7 @@ public class ListingBuilder {
listing.setSymbolCode(equitySecurity.getSecuritySymbol());
listing.setSymbolName(equitySecurity.getFullName());
listing.setWorkflowStatus(equitySecurity.getWorkflowStatus());
listing.setMarket(market);
listing.setLotSize(equitySecurity.getLotSize());
listing.setUpdated(equitySecurity.getUpdated());
return listing;
@ -64,11 +66,22 @@ public class ListingBuilder {
listing.setCreated(instant.getCreated());
listing.setSecurityId(instant.getId());
listing.setLotSize(BigDecimal.valueOf(request.getLotSize()));
listing.setMarket(Market.mkrs.getKey());
listing.setMarket(market);
listing.setSymbolCode(instant.getSecuritySymbol());
listing.setSymbolName(instant.getFullName());
listing.setTradingCurrency(instant.getNominalCurrency());
listing.setWorkflowStatus(Status.Active.getKey());
return listing;
}
public Listing byFixedIncomeEquity(FixedIncomeSecurity fixedIncomeSecurity, Listing listing) {
listing.setSecurityId(fixedIncomeSecurity.getId());
listing.setSymbolCode(fixedIncomeSecurity.getSecuritySymbol());
listing.setSymbolName(fixedIncomeSecurity.getFullName());
listing.setTradingCurrency(fixedIncomeSecurity.getNominalCurrency());
listing.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus());
listing.setLotSize(fixedIncomeSecurity.getLotSize());
listing.setUpdated(fixedIncomeSecurity.getUpdated());
return listing;
}
}

View file

@ -89,7 +89,7 @@ public class EquitySecurityService extends QueueConsumer implements Initializing
equity.setIssuerId(req.getIssuerId());
equity.setShortNameEng(req.getShortNameEng());
equity.setFullNameEng(req.getFullNameEng());
equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
equity.setWorkflowStatus(req.workflowStatus);
equity.setInstrumentType(req.getInstrumentType());
equity.setSecurityId(equity.getId());
equity.setCreated(Instant.now());
@ -132,7 +132,7 @@ public class EquitySecurityService extends QueueConsumer implements Initializing
equity.setIssuerId(req.getIssuerId());
equity.setShortNameEng(req.getShortNameEng());
equity.setFullNameEng(req.getFullNameEng());
equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
equity.setWorkflowStatus(req.workflowStatus);
equity.setInstrumentType(req.getInstrumentType());
equitySecurityImdg.update(equity);

View file

@ -94,7 +94,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial
fixedIncome.setIssuerId(req.getIssuerId());
fixedIncome.setShortNameEng(req.getShortNameEng());
fixedIncome.setFullNameEng(req.getFullNameEng());
fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
fixedIncome.setWorkflowStatus(req.getWorkflowStatus());
fixedIncome.setInstrumentType(req.getInstrumentType());
fixedIncome.setSecurityId(fixedIncome.getId());
fixedIncome.setCreated(Instant.now());
@ -142,7 +142,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial
fixedIncome.setIssuerId(req.getIssuerId());
fixedIncome.setShortNameEng(req.getShortNameEng());
fixedIncome.setFullNameEng(req.getFullNameEng());
fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
fixedIncome.setWorkflowStatus(req.getWorkflowStatus());
fixedIncome.setInstrumentType(req.getInstrumentType());
fixedIncome.setSecurityId(fixedIncome.getId());
@ -152,13 +152,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial
log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), fixedIncome.getId());
return null;
}
listing.setSecurityId(fixedIncome.getId());
listing.setSymbolCode(fixedIncome.getSecuritySymbol());
listing.setSymbolName(fixedIncome.getFullName());
listing.setTradingCurrency(fixedIncome.getNominalCurrency());
listing.setWorkflowStatus(fixedIncome.getWorkflowStatus());
listing.setLotSize(fixedIncome.getLotSize());
listing.setUpdated(updateTime);
listing = listingBuilder.byFixedIncomeEquity(fixedIncome, listing);
listingImdg.update(listing);
return null;
}
@ -167,7 +161,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial
CommonDeleteRequest req = userRequest.getRequestPayload();
log.debug("CommonDeleteRequest received id = {}", req.getId());
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityDeleteValidator());
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.fixedIncomeDeleteValidator());
if (requestInfoUpdate != null) return requestInfoUpdate;
Instant updateTime = Instant.now();

View file

@ -118,10 +118,11 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial
mms.setSecuritySymbol(req.getSecuritySymbol());
mms.setTermType(req.getTermType());
mms.setIsin(req.getIsin());
mms.setIssuerId(req.getIssuerId());
mms.setSecurityId(mms.getId());
mms.setDescription(req.getDescription());
mms.setCreated(Instant.now());
mms.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
mms.setWorkflowStatus(req.getWorkflowStatus());
try {
transaction.beginTransaction();
Imdg<MoneyMarketSecurity> moneyMarketSecurityMap = transaction.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
@ -171,8 +172,10 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial
mms.setSecuritySymbol(req.getSecuritySymbol());
mms.setTermType(req.getTermType());
mms.setIsin(req.getIsin());
mms.setIssuerId(req.getIssuerId());
mms.setSecurityId(mms.getId());
mms.setDescription(mms.getDescription());
mms.setDescription(req.getDescription());
mms.setWorkflowStatus(req.getWorkflowStatus());
moneyMarketSecurityMap.update(mms);
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", mms.getId()));

View file

@ -0,0 +1,172 @@
package ru.spcex.clearing.securities.service.cud;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.securities.component.ListingBuilder;
import ru.spcex.clearing.securities.validation.ValidationProvider;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.ImdgTransaction;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Map;
@Service
public class СurrencyService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<Listing> listingImdg;
private final ImdgProvider imdgProvider;
private final ImdgId idGenerator;
private final ValidationProvider validation;
private final ValidationHelper validationHelper;
private final ListingBuilder listingBuilder = new ListingBuilder();
@Autowired
public СurrencyService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
ValidationProvider validation,
ValidationHelper validationHelper) {
super(kafkaQueue, kafkaProducer);
this.validation = validation;
this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.imdgProvider = imdgProvider;
this.idGenerator = imdgProvider.getImdgIdGenerator();
this.validationHelper = validationHelper;
}
@Override
public void afterPropertiesSet() {
callback(EquitySecurityNewRequest.class)
.setFunction(this::newEquity)
.forDestination(Consts.DESTINATION_СURRENCY_NEW, callbacks::put);
callback(EquitySecurityUpdateRequest.class)
.setFunction(this::updateEquity)
.forDestination(Consts.DESTINATION_СURRENCY_UPDATE, callbacks::put);
callback(CommonDeleteRequest.class)
.setFunction(this::deleteEquity)
.forDestination(Consts.DESTINATION_СURRENCY_DELETE, callbacks::put);
imdgProvider.waitAvailable();
init();
}
private RequestInfoUpdate newEquity(BaseRequest<EquitySecurityNewRequest> userRequest) {
ImdgTransaction transaction = imdgProvider.newTransaction();
EquitySecurityNewRequest req = userRequest.getRequestPayload();
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityNewValidator());
if (requestInfoUpdate != null) return requestInfoUpdate;
log.debug("EquitySecurityNewRequest received");
EquitySecurity equity = new EquitySecurity();
equity.setId(idGenerator.nextId());
equity.setSecuritySymbol(req.getSecuritySymbol());
equity.setShortName(req.getShortName());
equity.setFullName(req.getFullName());
equity.setIsin(req.getIsin());
equity.setShareType(req.getShareType());
equity.setLotSize(req.getLotSize() != null ? BigDecimal.valueOf(req.getLotSize()) : null);
equity.setIssuerId(req.getIssuerId());
equity.setShortNameEng(req.getShortNameEng());
equity.setFullNameEng(req.getFullNameEng());
equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
equity.setInstrumentType(req.getInstrumentType());
equity.setSecurityId(equity.getId());
equity.setCreated(Instant.now());
try {
transaction.beginTransaction();
Imdg<EquitySecurity> equityImdg = transaction.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
Imdg<Listing> listingMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
//одним скопом выполняем реквест
equityImdg.insert(equity);
Listing listing = listingBuilder.byNewEquity(equity, req);
listingMap.insert(listing);
//и сохраняем обновленный
// reqInfoMap.insert(reqInfo);
transaction.commitTransaction();
} catch (Throwable e) {
transaction.rollbackTransaction();
// RequestInfo.update(reqInfo, Status.Error, ExceptionUtils.getStackTrace(e));
// requestInfoImdg.insert(reqInfo);
}
log.debug("successfully processed, request id {}, new object id {}", userRequest.getId(), equity.getId());
return null; // default success
}
private RequestInfoUpdate updateEquity(BaseRequest<EquitySecurityUpdateRequest> userRequest) {
EquitySecurityUpdateRequest req = userRequest.getRequestPayload();
log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId());
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityUpdateValidator());
if (requestInfoUpdate != null) return requestInfoUpdate;
EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId());
Instant updateTime = Instant.now();
equity.setUpdated(updateTime);
equity.setSecuritySymbol(req.getSecuritySymbol());
equity.setShortName(req.getShortName());
equity.setFullName(req.getFullName());
equity.setIsin(req.getIsin());
equity.setShareType(req.getShareType());
equity.setLotSize(req.getLotSize() != null ? BigDecimal.valueOf(req.getLotSize()) : null);
equity.setIssuerId(req.getIssuerId());
equity.setShortNameEng(req.getShortNameEng());
equity.setFullNameEng(req.getFullNameEng());
equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
equity.setInstrumentType(req.getInstrumentType());
equitySecurityImdg.update(equity);
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId()));
if (listing == null) {
log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId());
return null;
}
listing = listingBuilder.byUpdateEquity(equity, listing);
listingImdg.update(listing);
return null;
}
private RequestInfoUpdate deleteEquity(BaseRequest<CommonDeleteRequest> userRequest) {
CommonDeleteRequest req = userRequest.getRequestPayload();
log.debug("CommonDeleteRequest received id = {}", req.getId());
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityDeleteValidator());
if (requestInfoUpdate != null) return requestInfoUpdate;
Instant updateTime = Instant.now();
EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId());
equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
equity.setUpdated(updateTime);
equitySecurityImdg.update(equity);
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId()));
if (listing == null) {
log.error("CommonDeleteRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId());
return null;
}
listing.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
listing.setUpdated(updateTime);
listingImdg.update(listing);
return null;
}
}

View file

@ -21,12 +21,26 @@ public class ValidationProvider {
private final Imdg<SpcexObjectBase> mmsMap;
private final Imdg<SpcexObjectBase> equityMap;
private final Imdg<SpcexObjectBase> fixedIncomeMap;
private final Imdg<SpcexObjectBase> instrumentTypeDictionaryImdg;
private final Imdg<SpcexObjectBase> workflowStatusDictionaryImdg;
private final Imdg<SpcexObjectBase> termTypeDictionaryImdg;
private final Imdg<SpcexObjectBase> currencyCodeDictionaryImdg;
private final Imdg<SpcexObjectBase> shareTypeDictionaryImdg;
private final Imdg<SpcexObjectBase> bondTypeDictionaryImdg;
private final Imdg<SpcexObjectBase> companyImdg;
public ValidationProvider(ImdgProvider imdgProvider) {
this.mmsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, SpcexObjectBase.class);
this.equityMap = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, SpcexObjectBase.class);
this.fixedIncomeMap = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, SpcexObjectBase.class);
this.instrumentTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, SpcexObjectBase.class);
this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, SpcexObjectBase.class);
this.termTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TermTypeDictionary, SpcexObjectBase.class);
this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, SpcexObjectBase.class);
this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, SpcexObjectBase.class);
this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, SpcexObjectBase.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, SpcexObjectBase.class);
}
public Function<MoneyMarketSecurityNewRequest, IValidator> mmsNewValidator() {
@ -34,11 +48,21 @@ public class ValidationProvider {
ImdgValidationContext<MoneyMarketSecurityNewRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(mmsRequest);
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, mmsMap);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_TermTypeDictionary, termTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg);
return new ValidatorImpl<>(context,
EndDtAfterStartDt.instance(MoneyMarketSecurityNewRequest.class),
new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_MoneyMarketSecurity, SecuritiesError.InstrumentAlreadyExists, MoneyMarketSecurityNewRequest.class),
new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "RATE"),
MmsNewValidationRule.RequiredFieldIsNotEmpty
MmsNewValidationRule.RequiredFieldIsNotEmpty,
new HaveValidCompanyId<>(MoneyMarketSecurityNewRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, MoneyMarketSecurityNewRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, MoneyMarketSecurityNewRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_TermTypeDictionary, MoneyMarketSecurityNewRequest::getTermType, "termType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, MoneyMarketSecurityNewRequest::getNominalCurrency, "nominalCurrency")
);
};
}
@ -48,11 +72,21 @@ public class ValidationProvider {
ImdgValidationContext<MoneyMarketSecurityUpdateRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(mmsRequest);
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, mmsMap);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_TermTypeDictionary, termTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg);
return new ValidatorImpl<>(context,
EndDtAfterStartDt.instance(MoneyMarketSecurityUpdateRequest.class),
new PresentById(IMDGDistributedNames.Map_MoneyMarketSecurity, SecuritiesError.InstrumentNotFound, true),
new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "RATE"),
new WorkflowStatusActv()
new WorkflowStatusActv(),
new HaveValidCompanyId<>(MoneyMarketSecurityUpdateRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, MoneyMarketSecurityUpdateRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, MoneyMarketSecurityUpdateRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_TermTypeDictionary, MoneyMarketSecurityUpdateRequest::getTermType, "termType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, MoneyMarketSecurityUpdateRequest::getNominalCurrency, "nominalCurrency")
);
};
}
@ -74,12 +108,19 @@ public class ValidationProvider {
return equityRequest -> {
ImdgValidationContext<EquitySecurityNewRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(equityRequest);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equityMap);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_ShareTypeDictionary, shareTypeDictionaryImdg);
return new ValidatorImpl<>(context,
new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_EquitySecurity, SecuritiesError.InstrumentAlreadyExists, EquitySecurityNewRequest.class),
new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "EQTY"),
EquityNewValidationRule.RequiredFieldIsNotEmpty
);
EquityNewValidationRule.RequiredFieldIsNotEmpty,
new HaveValidCompanyId<>(EquitySecurityNewRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, EquitySecurityNewRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, EquitySecurityNewRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_ShareTypeDictionary, EquitySecurityNewRequest::getShareType, "shareType"));
};
}
@ -88,11 +129,18 @@ public class ValidationProvider {
ImdgValidationContext<EquitySecurityUpdateRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(equityRequest);
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equityMap);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_ShareTypeDictionary, shareTypeDictionaryImdg);
return new ValidatorImpl<>(context,
new PresentById(IMDGDistributedNames.Map_EquitySecurity, SecuritiesError.InstrumentNotFound, true),
new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "EQTY"),
new WorkflowStatusActv()
);
new WorkflowStatusActv(),
new HaveValidCompanyId<>(EquitySecurityUpdateRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, EquitySecurityUpdateRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, EquitySecurityUpdateRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_ShareTypeDictionary, EquitySecurityUpdateRequest::getShareType, "shareType"));
};
}
@ -113,12 +161,22 @@ public class ValidationProvider {
return equityRequest -> {
ImdgValidationContext<FixedIncomeSecurityNewRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(equityRequest);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_BondTypeDictionary, bondTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg);
return new ValidatorImpl<>(context,
new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentAlreadyExists, FixedIncomeSecurityNewRequest.class),
new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "BOND"),
FixedIncomeNewValidationRule.RequiredFieldIsNotEmpty
);
FixedIncomeNewValidationRule.RequiredFieldIsNotEmpty,
new HaveValidCompanyId<>(FixedIncomeSecurityNewRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, FixedIncomeSecurityNewRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, FixedIncomeSecurityNewRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_BondTypeDictionary, FixedIncomeSecurityNewRequest::getBondType, "bondType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, FixedIncomeSecurityNewRequest::getNominalCurrency, "nominalCurrency")
);
};
}
@ -126,11 +184,22 @@ public class ValidationProvider {
return equityRequest -> {
ImdgValidationContext<FixedIncomeSecurityUpdateRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(equityRequest);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap);
context.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap);
context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_BondTypeDictionary, bondTypeDictionaryImdg);
context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg);
return new ValidatorImpl<>(context,
new PresentById(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentNotFound, true),
new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "BOND"),
new WorkflowStatusActv()
new WorkflowStatusActv(),
new HaveValidCompanyId<>(FixedIncomeSecurityUpdateRequest::getIssuerId, "issuerId"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, FixedIncomeSecurityUpdateRequest::getInstrumentType, "instrumentType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, FixedIncomeSecurityUpdateRequest::getWorkflowStatus, "workflowStatus"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_BondTypeDictionary, FixedIncomeSecurityUpdateRequest::getBondType, "bondType"),
new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, FixedIncomeSecurityUpdateRequest::getNominalCurrency, "nominalCurrency")
);
};
}
@ -139,7 +208,8 @@ public class ValidationProvider {
return equityRequest -> {
ImdgValidationContext<CommonDeleteRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(equityRequest);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap);
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap);
return new ValidatorImpl<>(context,
new PresentById(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentNotFound, true),
new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "BOND"),

View file

@ -0,0 +1,39 @@
package ru.spcex.clearing.securities.validation.rule;
import org.springframework.util.StringUtils;
import ru.spcex.clearing.securities.errors.SecuritiesError;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
public class HaveValidCodeByDictionary<R> implements IValidationRule<ImdgValidationContext<R>> {
String mapName;
String errArg;
Function<R, String> codeGetter;
public HaveValidCodeByDictionary(String mapName, Function<R, String> codeGetter, String errArg) {
this.mapName = mapName;
this.codeGetter = codeGetter;
this.errArg = errArg;
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
R validatedObject = context.getValidatedObject();
String code = codeGetter.apply(validatedObject);
if(!StringUtils.hasText(code)) {
return of(SecuritiesError.RequiredFieldIsEmpty, errArg);
}
Imdg<SpcexObjectBase> imdgDictionary = context.obtainMap(mapName, SpcexObjectBase.class);
SpcexObjectBase dictionary = imdgDictionary.getSingleObjectByFieldValues(Map.of(
"code", code));
if (dictionary == null) {
return of(SecuritiesError.WrongFieldValue, errArg);
}
return empty();
}
}

View file

@ -0,0 +1,35 @@
package ru.spcex.clearing.securities.validation.rule;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.securities.errors.SecuritiesError;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.Optional;
import java.util.function.Function;
public class HaveValidCompanyId<R> implements IValidationRule<ImdgValidationContext<R>> {
Function<R, Long> idGetter;
String errArg;
public HaveValidCompanyId(Function<R, Long> idGetter, String errArg) {
this.idGetter = idGetter;
this.errArg = errArg;
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
R validatedObject = context.getValidatedObject();
Long id = idGetter.apply(validatedObject);
if(id == null) {
return of(SecuritiesError.RequiredFieldIsEmpty, errArg);
}
Imdg<SpcexObjectBase> imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_Company, SpcexObjectBase.class);
SpcexObjectBase dictionary = imdgDictionary.getSingleObjectByID(id);
if (dictionary == null) {
return of(SecuritiesError.WrongFieldValue, errArg);
}
return empty();
}
}

View file

@ -17,15 +17,15 @@ public class IsValidInstrumentTypeFromRequest implements IValidationRule<ImdgVal
this.errorEnum = errorEnum;
this.predictableInstrumentType = predictableInstrumentType;
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<WithInstrumentType> context) {
WithInstrumentType action = context.getValidatedObject();
if (action.getInstrumentType() == null) {
return of(SecuritiesError.RequiredFieldIsEmpty);
} else if (!predictableInstrumentType.equalsIgnoreCase(action.getInstrumentType())){
} else if (!predictableInstrumentType.equalsIgnoreCase(action.getInstrumentType())) {
return of(errorEnum);
}else {
} else {
return empty();
}
}

View file

@ -10,10 +10,12 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity;
import ru.clearing.platform.dictionary.*;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.securities.component.ListingBuilder;
import ru.spcex.clearing.securities.config.ErrorResolverConfig;
@ -52,6 +54,22 @@ public abstract class AbstractServiceTest {
protected Imdg<Listing> listingImdg;
protected Imdg<EquitySecurity> equitySecurityImdg;
protected Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
protected Imdg<InstrumentTypeDictionary> instrumentTypeDictionaryImdg;
protected Imdg<WorkflowStatusDictionary> workflowStatusDictionaryImdg;
protected Imdg<TermTypeDictionary> termTypeDictionaryImdg;
protected Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
protected Imdg<ShareTypeDictionary> shareTypeDictionaryImdg;
protected Imdg<BondTypeDictionary> bondTypeDictionaryImdg;
protected Imdg<Company> companyImdg;
public static String RATE = "RATE";
protected String EQTY = "EQTY";
protected String BOND = "BOND";
protected String shareType = "shareType";
protected String bondType = "bondType";
public static Long issuerId = 13243L;
public static String termType = "TermType";
public static String currencyCode = "RUB";
protected final ListingBuilder listingBuilder = new ListingBuilder();
@Captor
protected ArgumentCaptor<ProducerRecord> producerRecord;
@ -67,7 +85,42 @@ public abstract class AbstractServiceTest {
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
this.instrumentTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, InstrumentTypeDictionary.class);
this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class);
this.termTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TermTypeDictionary, TermTypeDictionary.class);
this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, ShareTypeDictionary.class);
this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, BondTypeDictionary.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
InstrumentTypeDictionary instrumentTypeDictionary = new InstrumentTypeDictionary();
instrumentTypeDictionary.setId(1L);
instrumentTypeDictionary.setCode(RATE);
instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary);
instrumentTypeDictionary.setId(2L);
instrumentTypeDictionary.setCode(EQTY);
instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary);
instrumentTypeDictionary.setId(3L);
instrumentTypeDictionary.setCode(BOND);
instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary);
WorkflowStatusDictionary workflowStatusDictionary = new WorkflowStatusDictionary();
workflowStatusDictionary.setCode(ru.spcex.platform.enumeration.Status.Active.getKey());
workflowStatusDictionaryImdg.insert(workflowStatusDictionary);
TermTypeDictionary termTypeDictionary = new TermTypeDictionary();
termTypeDictionary.setCode(termType);
termTypeDictionaryImdg.insert(termTypeDictionary);
CurrencyCodeDictionary currencyCodeDictionary = new CurrencyCodeDictionary();
currencyCodeDictionary.setCode(currencyCode);
currencyCodeDictionaryImdg.insert(currencyCodeDictionary);
ShareTypeDictionary shareTypeDictionary = new ShareTypeDictionary();
shareTypeDictionary.setCode(shareType);
shareTypeDictionaryImdg.insert(shareTypeDictionary);
BondTypeDictionary bondTypeDictionary = new BondTypeDictionary();
bondTypeDictionary.setCode(bondType);
bondTypeDictionaryImdg.insert(bondTypeDictionary);
Company company = new Company();
company.setId(issuerId);
companyImdg.insert(company);
TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class);
doReturn(future).when(mockProducer).send(producerRecord.capture());
}

View file

@ -49,6 +49,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void testNewEquity(){
clearAllInImdg(equitySecurityImdg);
final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_NEW;
final EquitySecurity equityPrediction = getEquitySecurity();
@ -86,6 +87,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void testUpdateEquity() {
clearAllInImdg(equitySecurityImdg);
final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_UPDATE;
String fullName = "FullNameUpdate";
Double updateLotSize = 12.0;
@ -126,6 +128,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void testDeleteEquity(){
clearAllInImdg(equitySecurityImdg);
final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_DELETE;
final EquitySecurity equityPrediction = getEquitySecurity();
@ -165,13 +168,13 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{
equitySecurity.setShortName("ShortNameNewEquity");
equitySecurity.setFullName("FullNameNewEquity");
equitySecurity.setIsin("Isin");
equitySecurity.setShareType("ShareType");
equitySecurity.setShareType(shareType);
equitySecurity.setLotSize(BigDecimal.valueOf(18.0d));
equitySecurity.setIssuerId(11L);
equitySecurity.setIssuerId(issuerId);
equitySecurity.setShortNameEng("ShortNameNewEquity");
equitySecurity.setFullNameEng("FullNameNewEquity");
equitySecurity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
equitySecurity.setInstrumentType("EQTY");
equitySecurity.setInstrumentType(EQTY);
return equitySecurity;
}

View file

@ -3,15 +3,14 @@ package ru.spcex.clearing.securities.service;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest;
import ru.spcex.clearing.securities.service.cud.FixedIncomeSecurityService;
@ -51,6 +50,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void newFixedIncome(){
clearAllInImdg(fixedIncomeSecurityImdg);
final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_NEW;
final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity();
@ -88,38 +88,38 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void updateFixedIncome() {
// clearAllInImdg(moneyMarketSecurityMap);
// final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE;
// String fullName = "FullNameUpdate";
// Double updateLotSize = 12.0;
//
// final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity();
//
// fixedIncomeSecurityImdg.insert(fixedIncomePrediction);
// fixedIncomePrediction.setFullName(fullName);
// fixedIncomePrediction.setLotSize(BigDecimal.valueOf(updateLotSize));
// final FixedIncomeSecurityUpdateRequest request = getEquitySecurityUpdateRequest(fixedIncomePrediction);
// Listing listingPrediction = new Listing();
// listingPrediction = listingBuilder.byUpdateEquity(fixedIncomePrediction, listingPrediction);
// listingImdg.insert(listingPrediction);
//
// //ACT
// String jsonString = getJsonStringForUPDATE(request, ID);
//
// addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString);
//
// //ASSERT
// waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
//
// EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName()));
// fixedIncomePrediction.setId(equityResult.getId());
// fixedIncomePrediction.setSecurityId(equityResult.getSecurityId());
// 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);
clearAllInImdg(moneyMarketSecurityMap);
final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE;
String fullName = "FullNameUpdate";
Double updateLotSize = 12.0;
final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity();
fixedIncomeSecurityImdg.insert(fixedIncomePrediction);
fixedIncomePrediction.setFullName(fullName);
fixedIncomePrediction.setLotSize(BigDecimal.valueOf(updateLotSize));
final FixedIncomeSecurityUpdateRequest request = getFixedIncomeSecurityUpdateRequest(fixedIncomePrediction);
Listing listingPrediction = new Listing();
listingPrediction = listingBuilder.byFixedIncomeEquity(fixedIncomePrediction, listingPrediction);
listingImdg.insert(listingPrediction);
//ACT
String jsonString = getJsonStringForUPDATE(request, ID);
addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString);
//ASSERT
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName()));
fixedIncomePrediction.setId(equityResult.getId());
fixedIncomePrediction.setSecurityId(equityResult.getSecurityId());
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);
}
/**
@ -130,37 +130,37 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{
*/
@Test
public void deleteFixedIncome(){
// clearAllInImdg(moneyMarketSecurityMap);
// final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_DELETE;
//
// final EquitySecurity equityPrediction = getFixedIncomeSecurity();
// equitySecurityImdg.insert(equityPrediction);
// equityPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
//
// Listing listingPrediction = new Listing();
// listingPrediction = listingBuilder.byUpdateEquity(equityPrediction, listingPrediction);
// listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
//
// CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest();
// commonDeleteRequest.setId(ID);
//
// //ACT
// String jsonString = getJsonStringForDELETE(commonDeleteRequest, ID);
//
// addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString);
//
// //ASSERT
// waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
//
// EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", equityPrediction.getFullName()));
// equityPrediction.setId(equityResult.getId());
// equityPrediction.setSecurityId(equityResult.getSecurityId());
// FIXED_INCOME_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);
clearAllInImdg(moneyMarketSecurityMap);
final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_DELETE;
final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity();
fixedIncomeSecurityImdg.insert(fixedIncomePrediction);
fixedIncomePrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
Listing listingPrediction = new Listing();
listingPrediction = listingBuilder.byFixedIncomeEquity(fixedIncomePrediction, listingPrediction);
listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey());
CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest();
commonDeleteRequest.setId(ID);
//ACT
String jsonString = getJsonStringForDELETE(commonDeleteRequest, ID);
addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString);
//ASSERT
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName()));
fixedIncomePrediction.setId(equityResult.getId());
fixedIncomePrediction.setSecurityId(equityResult.getSecurityId());
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);
}
private FixedIncomeSecurity getFixedIncomeSecurity(){
@ -170,58 +170,63 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{
fixedIncome.setShortName("ShortNameNewEquity");
fixedIncome.setFullName("FullNameNewEquity");
fixedIncome.setIsin("Isin");
fixedIncome.setBondType("BondType");
fixedIncome.setBondType(bondType);
fixedIncome.setLotSize(BigDecimal.valueOf(18.0d));
fixedIncome.setNominalValue(BigDecimal.valueOf(18.0d));
fixedIncome.setNominalCurrency("NominalCurrency");
fixedIncome.setNominalCurrency(currencyCode);
fixedIncome.setMaturityDate(LocalDate.now());
fixedIncome.setCoupon(BigDecimal.valueOf(18.0d));
fixedIncome.setCouponFrequency(9L);
fixedIncome.setIssuerId(11L);
fixedIncome.setIssuerId(issuerId);
fixedIncome.setShortNameEng("ShortNameNewEquity");
fixedIncome.setFullNameEng("FullNameNewEquity");
fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
fixedIncome.setInstrumentType("BOND");
fixedIncome.setInstrumentType(BOND);
fixedIncome.setSecurityId(fixedIncome.getId());
return fixedIncome;
}
private FixedIncomeSecurityNewRequest getFixedIncomeSecurityNewRequest(FixedIncomeSecurity fixedIncomeSecurity){
FixedIncomeSecurityNewRequest equitySecurityNewRequest = new FixedIncomeSecurityNewRequest();
equitySecurityNewRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol());
equitySecurityNewRequest.setShortName(fixedIncomeSecurity.getShortName());
equitySecurityNewRequest.setFullName(fixedIncomeSecurity.getFullName());
equitySecurityNewRequest.setIsin(fixedIncomeSecurity.getIsin());
equitySecurityNewRequest.setBondType(fixedIncomeSecurity.getBondType());
equitySecurityNewRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue());
equitySecurityNewRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue());
equitySecurityNewRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency());
equitySecurityNewRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate());
equitySecurityNewRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue());
equitySecurityNewRequest.setCouponFrequency(9L);
equitySecurityNewRequest.setIssuerId(fixedIncomeSecurity.getIssuerId());
equitySecurityNewRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng());
equitySecurityNewRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng());
equitySecurityNewRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus());
equitySecurityNewRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType());
return equitySecurityNewRequest;
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest();
fixedIncomeSecurityNewRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol());
fixedIncomeSecurityNewRequest.setShortName(fixedIncomeSecurity.getShortName());
fixedIncomeSecurityNewRequest.setFullName(fixedIncomeSecurity.getFullName());
fixedIncomeSecurityNewRequest.setIsin(fixedIncomeSecurity.getIsin());
fixedIncomeSecurityNewRequest.setBondType(fixedIncomeSecurity.getBondType());
fixedIncomeSecurityNewRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue());
fixedIncomeSecurityNewRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue());
fixedIncomeSecurityNewRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency());
fixedIncomeSecurityNewRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate());
fixedIncomeSecurityNewRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue());
fixedIncomeSecurityNewRequest.setCouponFrequency(fixedIncomeSecurity.getCouponFrequency());
fixedIncomeSecurityNewRequest.setIssuerId(fixedIncomeSecurity.getIssuerId());
fixedIncomeSecurityNewRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng());
fixedIncomeSecurityNewRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng());
fixedIncomeSecurityNewRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus());
fixedIncomeSecurityNewRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType());
return fixedIncomeSecurityNewRequest;
}
private EquitySecurityUpdateRequest getEquitySecurityUpdateRequest(EquitySecurity equitySecurity){
EquitySecurityUpdateRequest equitySecurityUpdateRequest = new EquitySecurityUpdateRequest();
equitySecurityUpdateRequest.setId(equitySecurity.getId());
equitySecurityUpdateRequest.setSecuritySymbol(equitySecurity.getSecuritySymbol());
equitySecurityUpdateRequest.setShortName(equitySecurity.getShortName());
equitySecurityUpdateRequest.setFullName(equitySecurity.getFullName());
equitySecurityUpdateRequest.setIsin(equitySecurity.getIsin());
equitySecurityUpdateRequest.setShareType(equitySecurity.getShareType());
equitySecurityUpdateRequest.setLotSize(equitySecurity.getLotSize().doubleValue());
equitySecurityUpdateRequest.setIssuerId(equitySecurity.getIssuerId());
equitySecurityUpdateRequest.setShortNameEng(equitySecurity.getShortNameEng());
equitySecurityUpdateRequest.setFullNameEng(equitySecurity.getFullNameEng());
equitySecurityUpdateRequest.setWorkflowStatus(equitySecurity.getWorkflowStatus());
equitySecurityUpdateRequest.setInstrumentType(equitySecurity.getInstrumentType());
private FixedIncomeSecurityUpdateRequest getFixedIncomeSecurityUpdateRequest(FixedIncomeSecurity fixedIncomeSecurity){
FixedIncomeSecurityUpdateRequest equitySecurityUpdateRequest = new FixedIncomeSecurityUpdateRequest();
equitySecurityUpdateRequest.setId(fixedIncomeSecurity.getId());
equitySecurityUpdateRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol());
equitySecurityUpdateRequest.setShortName(fixedIncomeSecurity.getShortName());
equitySecurityUpdateRequest.setFullName(fixedIncomeSecurity.getFullName());
equitySecurityUpdateRequest.setIsin(fixedIncomeSecurity.getIsin());
equitySecurityUpdateRequest.setBondType(fixedIncomeSecurity.getBondType());
equitySecurityUpdateRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue());
equitySecurityUpdateRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue());
equitySecurityUpdateRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency());
equitySecurityUpdateRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate());
equitySecurityUpdateRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue());
equitySecurityUpdateRequest.setCouponFrequency(fixedIncomeSecurity.getCouponFrequency());
equitySecurityUpdateRequest.setIssuerId(fixedIncomeSecurity.getIssuerId());
equitySecurityUpdateRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng());
equitySecurityUpdateRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng());
equitySecurityUpdateRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus());
equitySecurityUpdateRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType());
return equitySecurityUpdateRequest;
}
}

View file

@ -8,9 +8,11 @@ import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSe
import java.math.BigDecimal;
import java.time.LocalDate;
import static ru.spcex.clearing.securities.service.AbstractServiceTest.*;
class MoneyMarketSecurityFactory {
private String nominalCurrency = "RUB"; // (linked to currencyCode)
private String nominalCurrency = currencyCode; // (linked to currencyCode)
private Long id = 0L;
private Long securityId = 0L;// (linked to security)
private String description = "tsetse";
@ -18,11 +20,12 @@ class MoneyMarketSecurityFactory {
private LocalDate startDate = LocalDate.ofEpochDay(0);
private LocalDate endDate = LocalDate.now();
private BigDecimal nominalValue = BigDecimal.valueOf(1.0);
private String instrumentType = "RATE"; // (linked to instrumentType)
private String instrumentType = RATE; // (linked to instrumentType)
private String fullName = "estat";
private String shortName = "esasdftat";
private String securitySymbol = "sdfafd";
private String termType = "termType";
private String istin = "istin";
private String termType = AbstractServiceTest.termType;
public String getFullName() {
return fullName;
@ -88,7 +91,6 @@ class MoneyMarketSecurityFactory {
moneyMarketSecurity.setId(id);
moneyMarketSecurity.setSecurityId(securityId);
moneyMarketSecurity.setDescription(description);
moneyMarketSecurity.setStartDate(startDate);
moneyMarketSecurity.setEndDate(endDate);
moneyMarketSecurity.setNominalValue(nominalValue);
@ -96,7 +98,11 @@ class MoneyMarketSecurityFactory {
moneyMarketSecurity.setInstrumentType(instrumentType);
moneyMarketSecurity.setFullName(fullName);
moneyMarketSecurity.setShortName(shortName);
moneyMarketSecurity.setShortNameEng(shortName);
moneyMarketSecurity.setFullNameEng(fullName);
moneyMarketSecurity.setIsin(istin);
moneyMarketSecurity.setTermType(termType);
moneyMarketSecurity.setIssuerId(issuerId);
moneyMarketSecurity.setDescription(description);
moneyMarketSecurity.setLotSize(BigDecimal.valueOf(lotSize));
moneyMarketSecurity.setSecuritySymbol(securitySymbol);
@ -118,9 +124,14 @@ class MoneyMarketSecurityFactory {
moneyMarketSecurityUpdateRequest.setInstrumentType(instrumentType);
moneyMarketSecurityUpdateRequest.setFullName(fullName);
moneyMarketSecurityUpdateRequest.setShortName(shortName);
moneyMarketSecurityUpdateRequest.setShortNameEng(shortName);
moneyMarketSecurityUpdateRequest.setFullNameEng(fullName);
moneyMarketSecurityUpdateRequest.setIsin(istin);
moneyMarketSecurityUpdateRequest.setTermType(termType);
moneyMarketSecurityUpdateRequest.setIssuerId(issuerId);
moneyMarketSecurityUpdateRequest.setDescription(description);
moneyMarketSecurityUpdateRequest.setSecuritySymbol(securitySymbol);
moneyMarketSecurityUpdateRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
return moneyMarketSecurityUpdateRequest;
}
@ -142,9 +153,15 @@ class MoneyMarketSecurityFactory {
keyRequest.setInstrumentType(instrumentType);
keyRequest.setFullName(fullName);
keyRequest.setShortName(shortName);
keyRequest.setShortNameEng(shortName);
keyRequest.setFullNameEng(fullName);
keyRequest.setTermType(termType);
keyRequest.setIssuerId(issuerId);
keyRequest.setIsin(istin);
keyRequest.setDescription(description);
keyRequest.setSecuritySymbol(securitySymbol);
keyRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey());
return keyRequest;
}

View file

@ -141,16 +141,17 @@ public class MoneyMarketSecurityServiceTest extends AbstractServiceTest{
clearAllInImdg(moneyMarketSecurityMap);
final String TOPIC = Consts.DESTINATION_MONEY_MARKET_SECURITY_UPDATE;
String updateTermType = "updateTermType";
Double updateLotSize = 12.0;
Double updateLotSize = 112.0;
final MoneyMarketSecurity moneyMarketSecurityPrediction = moneyMarketSecurityFactory
.getMoneyMarketSecurity();
moneyMarketSecurityMap.insert(moneyMarketSecurityPrediction);
moneyMarketSecurityPrediction.setTermType(updateTermType);
moneyMarketSecurityMap.insert(moneyMarketSecurityPrediction);
moneyMarketSecurityPrediction.setTermType(termType);
moneyMarketSecurityPrediction.setLotSize(BigDecimal.valueOf(updateLotSize));
final MoneyMarketSecurityUpdateRequest keyRequest = moneyMarketSecurityFactory
.getMoneyMarketSecurityUpdateRequest();
keyRequest.setTermType(updateTermType);
keyRequest.setTermType(termType);
keyRequest.setLotSize(updateLotSize);
Listing listingPrediction = new Listing();
listingPrediction = listingBuilder.byUpdateMms(moneyMarketSecurityPrediction, listingPrediction);

View file

@ -13,6 +13,10 @@ public interface Consts {
String DESTINATION_FIXED_INCOME_SECURITY_UPDATE = "fixed-income-security-update";
String DESTINATION_FIXED_INCOME_SECURITY_DELETE = "fixed-income-security-delete";
String DESTINATION_СURRENCY_NEW = "currency-new";
String DESTINATION_СURRENCY_UPDATE = "currency-update";
String DESTINATION_СURRENCY_DELETE = "currency-delete";
String DESTINATION_KEY_RATE_NEW = "key-rate-new";
String DESTINATION_KEY_RATE_UPDATE = "key-rate-update";
String DESTINATION_KEY_RATE_DELETE = "key-rate-delete";