cls-283 base service
This commit is contained in:
parent
eed1e94f07
commit
0022cb6b22
10 changed files with 306 additions and 1 deletions
|
|
@ -93,6 +93,14 @@
|
|||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>security-util</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-validation</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
package ru.spcex.clearing.reports.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.reports.errors.ReportError;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.clearing.util.services.IMDGMessageResolver;
|
||||
import ru.spcex.platform.enumeration.UserRole;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
@Configuration
|
||||
public class BeanConfiguration {
|
||||
@Bean
|
||||
public IMessageResolver messageResolver(ImdgProvider imdgProvider) {
|
||||
return new IMDGMessageResolver(imdgProvider);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||
public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) {
|
||||
return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ReportError.UserVerifyDenial);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
package ru.spcex.clearing.reports.config.validation;
|
||||
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromExecution;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry;
|
||||
import ru.spcex.clearing.reports.errors.ReportError;
|
||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||
import ru.spcex.clearing.validation.common.rules.EnumPresentRule;
|
||||
import ru.spcex.clearing.validation.common.rules.FieldRequiredRule;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
@Configuration
|
||||
public class ValidationConfig {
|
||||
|
||||
@Bean("imdgForValidation")
|
||||
public Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation(ImdgProvider imdgProvider) {
|
||||
final Map<String, Imdg<? extends SpcexObjectBase>> imdg = new HashMap<>();
|
||||
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass));
|
||||
|
||||
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
||||
|
||||
return imdg;
|
||||
}
|
||||
|
||||
@Bean("validationHelper")
|
||||
public ValidationHelper validationHelper(IMessageResolver messageResolver) {
|
||||
return new ValidationHelper(messageResolver);
|
||||
}
|
||||
|
||||
@Bean("reportRequestFromExecutionValidator")
|
||||
public Function<ReportRequestFromExecution, IValidator> reportRequestFromExecutionValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
) {
|
||||
return reportRequestFromExecution -> {
|
||||
ImdgValidationContext<ReportRequestFromExecution> context = new ImdgValidationContext<>();
|
||||
context.setValidatedObject(reportRequestFromExecution);
|
||||
|
||||
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||
// todo add dictionary for check reportId
|
||||
|
||||
return new ValidatorImpl<>(context,
|
||||
EnumPresentRule.instance("reportId",
|
||||
ReportRequestFromExecution::getReportId,
|
||||
new ReportType[]{
|
||||
ReportType.OPERATIONAL_LIABILITIES_CLAIMS,
|
||||
ReportType.SUMMARY_LIABILITIES_CLAIMS,
|
||||
ReportType.PERIOD_LIABILITIES_CLAIMS,
|
||||
ReportType.EXECUTED_DEAL_REPORT,
|
||||
ReportType.UNFULFILLED_DEAL_REPORT
|
||||
},
|
||||
ReportError.WrongFieldValue,
|
||||
ReportError.RequiredFieldEmpty),
|
||||
FieldRequiredRule.instance("sessionId",
|
||||
ReportRequestFromExecution::getSessionId,
|
||||
ReportError.RequiredFieldEmpty)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
@Bean("reportRequestFromRegistryValidator")
|
||||
public Function<ReportRequestFromRegistry, IValidator> reportRequestFromRegistryValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
) {
|
||||
return reportRequestFromRegistry -> {
|
||||
ImdgValidationContext<ReportRequestFromRegistry> context = new ImdgValidationContext<>();
|
||||
context.setValidatedObject(reportRequestFromRegistry);
|
||||
|
||||
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||
// todo add dictionary for check reportId
|
||||
|
||||
return new ValidatorImpl<>(context,
|
||||
EnumPresentRule.instance("reportId",
|
||||
ReportRequestFromRegistry::getReportId,
|
||||
new ReportType[]{
|
||||
ReportType.OPERATIONAL_MONEY_CHANGE,
|
||||
ReportType.SUMMARY_L_MONEY_CHANGE,
|
||||
ReportType.PERIOD_MONEY_CHANGE
|
||||
},
|
||||
ReportError.WrongFieldValue,
|
||||
ReportError.RequiredFieldEmpty)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package ru.spcex.clearing.reports.errors;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
|
||||
|
||||
// todo codes
|
||||
public enum ReportError implements IErrorEnumId {
|
||||
InternalError(99000L),
|
||||
UserVerifyDenial(99001L),
|
||||
RequiredFieldEmpty(99002L),
|
||||
WrongFieldValue(99004L),
|
||||
;
|
||||
|
||||
private final Long id;
|
||||
|
||||
ReportError(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
package ru.spcex.clearing.reports.services;
|
||||
|
||||
import org.apache.kafka.clients.consumer.Consumer;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromExecution;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
@Service
|
||||
public class ReportService extends QueueConsumer implements InitializingBean {
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final IMessageResolver messageResolver;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final ValidationHelper validationHelper;
|
||||
private final Function<ReportRequestFromExecution, IValidator> reportRequestFromExecutionValidator;
|
||||
private final Function<ReportRequestFromRegistry, IValidator> reportRequestFromRegistryValidator;
|
||||
|
||||
public ReportService(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaResponseQueue,
|
||||
ImdgProvider imdgProvider,
|
||||
IMessageResolver messageResolver,
|
||||
UserRoleVerification userRoleVerification,
|
||||
ValidationHelper validationHelper,
|
||||
@Qualifier("reportRequestFromExecutionValidator")
|
||||
Function<ReportRequestFromExecution, IValidator> reportRequestFromExecutionValidator,
|
||||
@Qualifier("reportRequestFromRegistryValidator")
|
||||
Function<ReportRequestFromRegistry, IValidator> reportRequestFromRegistryValidator) {
|
||||
super(kafkaQueue, kafkaResponseQueue);
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.messageResolver = messageResolver;
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.validationHelper = validationHelper;
|
||||
this.reportRequestFromExecutionValidator = reportRequestFromExecutionValidator;
|
||||
this.reportRequestFromRegistryValidator = reportRequestFromRegistryValidator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
callback(ReportRequestFromRegistry.class)
|
||||
.setConsumer(this::createReportFromRegistry)
|
||||
.forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_REGISTRY, callbacks::put);
|
||||
callback(ReportRequestFromExecution.class)
|
||||
.setConsumer(this::createReportFromExecution)
|
||||
.forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_EXECUTION, callbacks::put);
|
||||
}
|
||||
|
||||
public RequestInfoUpdate createReportFromRegistry(BaseRequest<ReportRequestFromRegistry> userRequest) {
|
||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromRegistryValidator);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public RequestInfoUpdate createReportFromExecution(BaseRequest<ReportRequestFromExecution> userRequest) {
|
||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromExecutionValidator);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package ru.spcex.platform.enumeration;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
/**
|
||||
* Идентификатор отчета
|
||||
* todo сделать для них dictionary
|
||||
*/
|
||||
public enum ReportType implements IEnumKey {
|
||||
OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
|
||||
OPERATIONAL_MONEY_CHANGE("operational_money_change"),
|
||||
SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"),
|
||||
SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"), // todo check typo
|
||||
PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"),
|
||||
PERIOD_MONEY_CHANGE("period_money_change"),
|
||||
EXECUTED_DEAL_REPORT("executed_deal_report"),
|
||||
UNFULFILLED_DEAL_REPORT("unfulfilled_deal_report"),
|
||||
;
|
||||
|
||||
private final String key;
|
||||
|
||||
ReportType(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
|
@ -69,6 +69,9 @@ public interface Consts {
|
|||
String DESTINATION_BANK_ACCOUNT_UPDATE = "bank-account-update";
|
||||
String DESTINATION_BANK_ACCOUNT_NEW = "bank-account-new";
|
||||
|
||||
String DESTINATION_CREATE_REPORT_FROM_REGISTRY = "destination-create-report-from-registry";
|
||||
String DESTINATION_CREATE_REPORT_FROM_EXECUTION = "destination-create-report-from-execution";
|
||||
|
||||
@Deprecated
|
||||
String ACCOUNT_NEW_SDF01 = "account-new-sdf01";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.reports;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
|
||||
/**
|
||||
* Запрос отчёта (без параметров) report-service
|
||||
|
|
@ -8,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||
public class ReportRequest {
|
||||
/**
|
||||
* Идентификатор отчёта
|
||||
* см. {@link ru.spcex.clearing.reports.reports.ReportsEnum}
|
||||
* см. {@link ReportType}
|
||||
*/
|
||||
@JsonProperty
|
||||
protected String reportId;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.reports;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
/**
|
||||
* Запрос на построение отчета на основе ExecutionDeposit/Fond
|
||||
*/
|
||||
public class ReportRequestFromExecution extends ReportRequest {
|
||||
/**
|
||||
* Идентификатор сессии
|
||||
*/
|
||||
@JsonProperty
|
||||
protected Long sessionId;
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(Long sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.reports;
|
||||
|
||||
/**
|
||||
* Запрос на построение отчета на основе Registry
|
||||
*/
|
||||
public class ReportRequestFromRegistry extends ReportRequest {
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue