Поправил существующий серис, валидаторы, тесты для plannerTemplate .
This commit is contained in:
parent
eae197cef9
commit
6b2acb66e7
4 changed files with 274 additions and 13 deletions
|
|
@ -21,6 +21,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
@ -43,10 +44,11 @@ public class PlannerValidationConfig {
|
||||||
PlannerNewRequest::getTask,
|
PlannerNewRequest::getTask,
|
||||||
IMDGDistributedNames.Map_TaskDictionary,
|
IMDGDistributedNames.Map_TaskDictionary,
|
||||||
TaskDictionary.class),
|
TaskDictionary.class),
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
|
||||||
PlannerNewRequest::getTaskTime),
|
|
||||||
DateNotBeforeRule.instance("clearingDate",
|
DateNotBeforeRule.instance("clearingDate",
|
||||||
PlannerNewRequest::getClearingDate),
|
PlannerNewRequest::getClearingDate),
|
||||||
|
TimeNotBeforeRule.instance("taskTime",
|
||||||
|
PlannerNewRequest::getTaskTime,
|
||||||
|
LocalDate.now().equals(plannerNewRequest.getClearingDate())),
|
||||||
EnumPresentRule.instance("market",
|
EnumPresentRule.instance("market",
|
||||||
PlannerNewRequest::getMarket,
|
PlannerNewRequest::getMarket,
|
||||||
Market.values(),
|
Market.values(),
|
||||||
|
|
@ -78,6 +80,7 @@ public class PlannerValidationConfig {
|
||||||
context.setValidatedObject(plannerUpdateRequest);
|
context.setValidatedObject(plannerUpdateRequest);
|
||||||
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||||
addImdg.accept(IMDGDistributedNames.Map_TaskDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_TaskDictionary);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Planner);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_TaskStatusDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_TaskStatusDictionary);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Company);
|
addImdg.accept(IMDGDistributedNames.Map_Company);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Security);
|
addImdg.accept(IMDGDistributedNames.Map_Security);
|
||||||
|
|
@ -94,7 +97,8 @@ public class PlannerValidationConfig {
|
||||||
false),
|
false),
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
TimeNotBeforeRule.instance("taskTime",
|
||||||
PlannerUpdateRequest::getTaskTime,
|
PlannerUpdateRequest::getTaskTime,
|
||||||
false),
|
false,
|
||||||
|
LocalDate.now().equals(plannerUpdateRequest.getClearingDate())),
|
||||||
DateNotBeforeRule.instance("clearingDate",
|
DateNotBeforeRule.instance("clearingDate",
|
||||||
PlannerUpdateRequest::getClearingDate,
|
PlannerUpdateRequest::getClearingDate,
|
||||||
false),
|
false),
|
||||||
|
|
@ -126,10 +130,12 @@ public class PlannerValidationConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean("plannerDeleteRequestValidator")
|
@Bean("plannerDeleteRequestValidator")
|
||||||
public Function<CommonDeleteRequest, IValidator> plannerDeleteRequestValidator() {
|
public Function<CommonDeleteRequest, IValidator> plannerDeleteRequestValidator(Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation) {
|
||||||
return plannerDeleteRequest -> {
|
return plannerDeleteRequest -> {
|
||||||
ImdgValidationContext<CommonDeleteRequest> context = new ImdgValidationContext<>();
|
ImdgValidationContext<CommonDeleteRequest> context = new ImdgValidationContext<>();
|
||||||
context.setValidatedObject(plannerDeleteRequest);
|
context.setValidatedObject(plannerDeleteRequest);
|
||||||
|
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Planner);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
IdPresentRule.instance("id",
|
IdPresentRule.instance("id",
|
||||||
CommonDeleteRequest::getId,
|
CommonDeleteRequest::getId,
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,26 @@
|
||||||
package ru.spcex.clearing.scheduler.config.validation;
|
package ru.spcex.clearing.scheduler.config.validation;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.Planner;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.platform.dictionary.DayStatusDictionary;
|
import ru.clearing.platform.dictionary.DayStatusDictionary;
|
||||||
import ru.clearing.platform.dictionary.TaskDictionary;
|
import ru.clearing.platform.dictionary.TaskDictionary;
|
||||||
import ru.clearing.platform.dictionary.TaskStatusDictionary;
|
import ru.clearing.platform.dictionary.TaskStatusDictionary;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.scheduler.error.ValidationError;
|
||||||
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
|
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.enumeration.UserRole;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -24,6 +34,9 @@ public class ValidationConfig {
|
||||||
final Map<String, Imdg<? extends SpcexObjectBase>> imdg = new HashMap<>();
|
final Map<String, Imdg<? extends SpcexObjectBase>> imdg = new HashMap<>();
|
||||||
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass));
|
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass));
|
||||||
addImdg.accept(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class);
|
addImdg.accept(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_PlannerTemplate, PlannerTemplate.class);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Planner, Planner.class);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class);
|
addImdg.accept(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Security, Security.class);
|
addImdg.accept(IMDGDistributedNames.Map_Security, Security.class);
|
||||||
|
|
@ -31,4 +44,15 @@ public class ValidationConfig {
|
||||||
return imdg;
|
return imdg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean("validationHelper")
|
||||||
|
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
|
public ValidationHelper validationHelper(IMessageResolver messageResolver) {
|
||||||
|
return new ValidationHelper(messageResolver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("userRoleVerificationBean")
|
||||||
|
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
|
public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) {
|
||||||
|
return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ValidationError.UserVerifyDenial);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.PlannerAllToday;
|
||||||
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
|
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
|
@ -17,19 +19,32 @@ import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateN
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateUpdateRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
|
import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder;
|
||||||
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
|
import ru.spcex.platform.enumeration.DayStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
|
import java.time.DayOfWeek;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static ru.spcex.clearing.scheduler.ISchedulerChecker.isValidWorkday;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class PlannerTemplateService extends QueueConsumer implements InitializingBean {
|
public class PlannerTemplateService extends QueueConsumer implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final Imdg<PlannerTemplate> plannerTemplateMap;
|
private final Imdg<PlannerTemplate> plannerTemplateMap;
|
||||||
|
private final Imdg<PlannerAllToday> plannerAllTodayMap;
|
||||||
|
private final Imdg<ClearingCalendar> clearingCalendarMap;
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
|
private final UserRoleVerification userRoleVerification;
|
||||||
private final Function<CommonDeleteRequest, IValidator> plannerTemplateDeleteRequestValidation;
|
private final Function<CommonDeleteRequest, IValidator> plannerTemplateDeleteRequestValidation;
|
||||||
private final Function<PlannerTemplateNewRequest, IValidator> plannerTemplateNewRequestValidation;
|
private final Function<PlannerTemplateNewRequest, IValidator> plannerTemplateNewRequestValidation;
|
||||||
private final Function<PlannerTemplateUpdateRequest, IValidator> plannerTemplateUpdateRequestValidation;
|
private final Function<PlannerTemplateUpdateRequest, IValidator> plannerTemplateUpdateRequestValidation;
|
||||||
|
|
@ -38,11 +53,15 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin
|
||||||
public PlannerTemplateService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer,
|
public PlannerTemplateService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
|
@Qualifier("userRoleVerificationBean") UserRoleVerification userRoleVerification,
|
||||||
@Qualifier("plannerTemplateDeleteRequestValidator") Function<CommonDeleteRequest, IValidator> plannerTemplateDeleteRequestValidator,
|
@Qualifier("plannerTemplateDeleteRequestValidator") Function<CommonDeleteRequest, IValidator> plannerTemplateDeleteRequestValidator,
|
||||||
@Qualifier("plannerTemplateNewRequestValidator") Function<PlannerTemplateNewRequest, IValidator> plannerTemplateNewRequestValidator,
|
@Qualifier("plannerTemplateNewRequestValidator") Function<PlannerTemplateNewRequest, IValidator> plannerTemplateNewRequestValidator,
|
||||||
@Qualifier("plannerTemplateUpdateRequestValidator") Function<PlannerTemplateUpdateRequest, IValidator> plannerTemplateUpdateRequestValidator) {
|
@Qualifier("plannerTemplateUpdateRequestValidator") Function<PlannerTemplateUpdateRequest, IValidator> plannerTemplateUpdateRequestValidator) {
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.plannerTemplateMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerTemplate, PlannerTemplate.class);
|
this.plannerTemplateMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerTemplate, PlannerTemplate.class);
|
||||||
|
this.plannerAllTodayMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class);
|
||||||
|
this.clearingCalendarMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class);
|
||||||
|
this.userRoleVerification = userRoleVerification;
|
||||||
this.plannerTemplateDeleteRequestValidation = plannerTemplateDeleteRequestValidator;
|
this.plannerTemplateDeleteRequestValidation = plannerTemplateDeleteRequestValidator;
|
||||||
this.plannerTemplateNewRequestValidation = plannerTemplateNewRequestValidator;
|
this.plannerTemplateNewRequestValidation = plannerTemplateNewRequestValidator;
|
||||||
this.plannerTemplateUpdateRequestValidation = plannerTemplateUpdateRequestValidator;
|
this.plannerTemplateUpdateRequestValidation = plannerTemplateUpdateRequestValidator;
|
||||||
|
|
@ -52,40 +71,51 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
callback(PlannerTemplateNewRequest.class)
|
callback(PlannerTemplateNewRequest.class)
|
||||||
.setFunction(this::newTimetable)
|
.setFunction(this::newPlannerTemplate)
|
||||||
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_NEW, callbacks::put);
|
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_NEW, callbacks::put);
|
||||||
callback(PlannerTemplateUpdateRequest.class)
|
callback(PlannerTemplateUpdateRequest.class)
|
||||||
.setFunction(this::updateTimetable)
|
.setFunction(this::updatePlannerTemplate)
|
||||||
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_UPDATE, callbacks::put);
|
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_UPDATE, callbacks::put);
|
||||||
callback(CommonDeleteRequest.class)
|
callback(CommonDeleteRequest.class)
|
||||||
.setFunction(this::deleteTimetable)
|
.setFunction(this::deletePlannerTemplate)
|
||||||
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_DELETE, callbacks::put);
|
.forDestination(Consts.DESTINATION_PLANNER_TEMPLATE_DELETE, callbacks::put);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
private RequestInfoUpdate newTimetable(BaseRequest<PlannerTemplateNewRequest> userRequest) {
|
private RequestInfoUpdate newPlannerTemplate(BaseRequest<PlannerTemplateNewRequest> userRequest) {
|
||||||
PlannerTemplateNewRequest req = userRequest.getRequestPayload();
|
PlannerTemplateNewRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("PlannerTemplateNewRequest received");
|
log.debug("PlannerTemplateNewRequest received");
|
||||||
RequestInfoUpdate requestInfoUpdate = validate(userRequest, plannerTemplateNewRequestValidation, messageResolver);
|
|
||||||
|
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
requestInfoUpdate = validate(userRequest, plannerTemplateNewRequestValidation, messageResolver);
|
||||||
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
PlannerTemplate plannerTemplate = new PlannerTemplate();
|
PlannerTemplate plannerTemplate = new PlannerTemplate();
|
||||||
Instant created = Instant.now();
|
Instant created = Instant.now();
|
||||||
plannerTemplate.setCreated(created);
|
plannerTemplate.setCreated(created);
|
||||||
|
plannerTemplate.setUpdated(created);
|
||||||
plannerTemplate.setTask(req.getTask());
|
plannerTemplate.setTask(req.getTask());
|
||||||
plannerTemplate.setTaskTime(req.getTaskTime());
|
plannerTemplate.setTaskTime(req.getTaskTime());
|
||||||
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
||||||
plannerTemplate.setCompanyId(req.getCompanyId());
|
plannerTemplate.setCompanyId(req.getCompanyId());
|
||||||
plannerTemplate.setSecurityId(req.getSecurityId());
|
plannerTemplate.setSecurityId(req.getSecurityId());
|
||||||
plannerTemplateMap.insert(plannerTemplate);
|
plannerTemplateMap.insert(plannerTemplate);
|
||||||
|
|
||||||
|
if (todayWorkDay()) plannerAllTodayMap.insert(PlannerAllTodayBuilder.builder().append(plannerTemplate).build());
|
||||||
log.debug("successfully processed, new id {}", plannerTemplate.getId());
|
log.debug("successfully processed, new id {}", plannerTemplate.getId());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RequestInfoUpdate updateTimetable(BaseRequest<PlannerTemplateUpdateRequest> userRequest) {
|
private RequestInfoUpdate updatePlannerTemplate(BaseRequest<PlannerTemplateUpdateRequest> userRequest) {
|
||||||
PlannerTemplateUpdateRequest req = userRequest.getRequestPayload();
|
PlannerTemplateUpdateRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("PlannerTemplateUpdateRequest received");
|
log.debug("PlannerTemplateUpdateRequest received");
|
||||||
RequestInfoUpdate requestInfoUpdate = validate(userRequest, plannerTemplateUpdateRequestValidation, messageResolver);
|
|
||||||
|
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
requestInfoUpdate = validate(userRequest, plannerTemplateUpdateRequestValidation, messageResolver);
|
||||||
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
||||||
Instant updated = Instant.now();
|
Instant updated = Instant.now();
|
||||||
plannerTemplate.setUpdated(updated);
|
plannerTemplate.setUpdated(updated);
|
||||||
|
|
@ -95,17 +125,47 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin
|
||||||
plannerTemplate.setCompanyId(req.getCompanyId());
|
plannerTemplate.setCompanyId(req.getCompanyId());
|
||||||
plannerTemplate.setSecurityId(req.getSecurityId());
|
plannerTemplate.setSecurityId(req.getSecurityId());
|
||||||
plannerTemplateMap.update(plannerTemplate);
|
plannerTemplateMap.update(plannerTemplate);
|
||||||
|
|
||||||
|
if (todayWorkDay()) {
|
||||||
|
PlannerAllToday planner = PlannerAllTodayBuilder.builder().append(plannerTemplate).build();
|
||||||
|
PlannerAllToday plannerAllToday = plannerAllTodayMap.getSingleObjectBySQL(String.format("parentId = %s", plannerTemplate.getId()));
|
||||||
|
if (plannerAllToday != null) planner.setId(plannerAllToday.getId());
|
||||||
|
plannerAllTodayMap.insert(planner);
|
||||||
|
}
|
||||||
log.debug("successfully processed, new id {}", plannerTemplate.getId());
|
log.debug("successfully processed, new id {}", plannerTemplate.getId());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RequestInfoUpdate deleteTimetable(BaseRequest<CommonDeleteRequest> userRequest) {
|
private RequestInfoUpdate deletePlannerTemplate(BaseRequest<CommonDeleteRequest> userRequest) {
|
||||||
CommonDeleteRequest req = userRequest.getRequestPayload();
|
CommonDeleteRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("CommonDeleteRequest received id = {}", req.getId());
|
log.debug("CommonDeleteRequest received id = {}", req.getId());
|
||||||
RequestInfoUpdate requestInfoUpdate = validate(userRequest, plannerTemplateDeleteRequestValidation, messageResolver);
|
|
||||||
|
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
requestInfoUpdate = validate(userRequest, plannerTemplateDeleteRequestValidation, messageResolver);
|
||||||
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
||||||
|
|
||||||
|
if (todayWorkDay()) {
|
||||||
|
PlannerAllToday plannerAllToday = plannerAllTodayMap.getSingleObjectBySQL(String.format("parentId = %s", plannerTemplate.getId()));
|
||||||
|
if (plannerAllToday != null) plannerAllTodayMap.delete(plannerAllToday);
|
||||||
|
}
|
||||||
plannerTemplateMap.delete(plannerTemplate);
|
plannerTemplateMap.delete(plannerTemplate);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean todayWorkDay() {
|
||||||
|
LocalDate currentDate = LocalDate.now();
|
||||||
|
boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek());
|
||||||
|
//проверим есть ли другие записи clearingCalendar с таким же clearingDate, если они актуальные ничего не удаляем
|
||||||
|
Collection<ClearingCalendar> clearingCalendars = clearingCalendarMap.getCollectionObjectsByFieldValues(Map.of("dayStatus", DayStatus.Workday.getKey(),
|
||||||
|
"clearingDate", currentDate));
|
||||||
|
if (clearingCalendars != null && !clearingCalendars.isEmpty()) {
|
||||||
|
for (ClearingCalendar calendar : clearingCalendars) {
|
||||||
|
if (isValidWorkday(calendar, isWeekend)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,171 @@
|
||||||
|
package ru.specx.clearing.scheduler.service;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.Planner;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.PlannerAllToday;
|
||||||
|
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.schedule.PlannerNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerUpdateRequest;
|
||||||
|
import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder;
|
||||||
|
import ru.spcex.clearing.scheduler.service.PlannerService;
|
||||||
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
|
import ru.spcex.platform.enumeration.Status;
|
||||||
|
import ru.specx.clearing.scheduler.AbstractServiceTest;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.*;
|
||||||
|
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
||||||
|
|
||||||
|
class PlannerServiceTest extends AbstractServiceTest {
|
||||||
|
protected static final MatcherFactory.Matcher<Planner> PLANNER_MATCHER = usingIgnoringFieldsComparator("created", "updated");
|
||||||
|
private static final int PARTITION = 0;
|
||||||
|
private static final String TOPIC_PLANNER_NEW = Consts.DESTINATION_PLANNER_NEW;
|
||||||
|
private static final String TOPIC_PLANNER_UPDATE = Consts.DESTINATION_PLANNER_UPDATE;
|
||||||
|
private static final String TOPIC_PLANNER_DELETE = Consts.DESTINATION_PLANNER_DELETE;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PlannerService plannerService;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void prepare(){
|
||||||
|
clearAllInImdg(plannerAllTodayImdg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link PlannerService#newPlanner(BaseRequest)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет создание сущности {@link ru.clearing.classes.statics.data.scheduler.Planner} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
|
* Входной запрос {@link PlannerNewRequest}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void newPlanner() {
|
||||||
|
//ARRANGE
|
||||||
|
Long ID = currentID.getAndIncrement();
|
||||||
|
Planner planner = getPlanner(newCompanyId);
|
||||||
|
|
||||||
|
PlannerNewRequest plannerNewRequest = new PlannerNewRequest();
|
||||||
|
plannerNewRequest.setTask(planner.getTask());
|
||||||
|
plannerNewRequest.setTaskTime(planner.getTaskTime());
|
||||||
|
plannerNewRequest.setTaskStatus(planner.getTaskStatus());
|
||||||
|
plannerNewRequest.setClearingDate(planner.getClearingDate());
|
||||||
|
plannerNewRequest.setMarket(planner.getMarket());
|
||||||
|
plannerNewRequest.setCompanyId(planner.getCompanyId());
|
||||||
|
plannerNewRequest.setSecurityId(planner.getSecurityId());
|
||||||
|
|
||||||
|
//ACT
|
||||||
|
String jsonString = getJsonStringForUpdate(plannerNewRequest, ID);
|
||||||
|
addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_NEW, PARTITION, 0, jsonString);
|
||||||
|
|
||||||
|
//ASSERT
|
||||||
|
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
|
||||||
|
|
||||||
|
Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId()));
|
||||||
|
planner.setId(plannerReq.getId());
|
||||||
|
PLANNER_MATCHER.assertMatch(plannerReq, planner);
|
||||||
|
checkPlannerAllTodayByPlanner(planner);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link PlannerService#updatePlanner(BaseRequest)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет создание сущности {@link ru.clearing.classes.statics.data.scheduler.Planner} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
|
* Входной запрос {@link PlannerUpdateRequest}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void updateScheduler() {
|
||||||
|
//ARRANGE
|
||||||
|
Planner planner = getPlanner(newCompanyId);
|
||||||
|
plannerImdg.insert(planner);
|
||||||
|
planner.setCompanyId(updateCompanyId);
|
||||||
|
|
||||||
|
PlannerUpdateRequest plannerUpdateRequest = new PlannerUpdateRequest();
|
||||||
|
plannerUpdateRequest.setId(planner.getId());
|
||||||
|
plannerUpdateRequest.setTask(planner.getTask());
|
||||||
|
plannerUpdateRequest.setTaskTime(planner.getTaskTime());
|
||||||
|
plannerUpdateRequest.setTaskStatus(planner.getTaskStatus());
|
||||||
|
plannerUpdateRequest.setClearingDate(planner.getClearingDate());
|
||||||
|
plannerUpdateRequest.setMarket(planner.getMarket());
|
||||||
|
plannerUpdateRequest.setCompanyId(planner.getCompanyId());
|
||||||
|
plannerUpdateRequest.setSecurityId(planner.getSecurityId());
|
||||||
|
|
||||||
|
//ACT
|
||||||
|
String jsonString = getJsonStringForUpdate(plannerUpdateRequest, planner.getId());
|
||||||
|
addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_UPDATE, PARTITION, 0, jsonString);
|
||||||
|
|
||||||
|
//ASSERT
|
||||||
|
waitingWhenAddedRecordAndCheckIt(planner.getId(), mockProducer, producerRecord);
|
||||||
|
|
||||||
|
Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId()));
|
||||||
|
planner.setId(plannerReq.getId());
|
||||||
|
PLANNER_MATCHER.assertMatch(plannerReq, planner);
|
||||||
|
checkPlannerAllTodayByPlanner(planner);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link PlannerService#deletePlanner(BaseRequest)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет удаление сущности {@link ru.clearing.classes.statics.data.scheduler.Planner} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
|
* Входной запрос {@link CommonDeleteRequest}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void deletePlanner(){
|
||||||
|
//ARRANGE
|
||||||
|
clearAllInImdg(plannerImdg);
|
||||||
|
Planner planner = getPlanner(deleteCompanyId);
|
||||||
|
plannerImdg.insert(planner);
|
||||||
|
|
||||||
|
long plannerId = planner.getId();
|
||||||
|
|
||||||
|
plannerAllTodayImdg.insert(PlannerAllTodayBuilder.builder().append(planner).build());
|
||||||
|
|
||||||
|
CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest();
|
||||||
|
commonDeleteRequest.setId(plannerId);
|
||||||
|
|
||||||
|
//ACT
|
||||||
|
String jsonString = getJsonStringForDelete(commonDeleteRequest, plannerId);
|
||||||
|
addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_DELETE, PARTITION, 0, jsonString);
|
||||||
|
|
||||||
|
//ASSERT
|
||||||
|
waitingWhenAddedRecordAndCheckIt(plannerId, mockProducer, producerRecord);
|
||||||
|
|
||||||
|
Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId()));
|
||||||
|
assertNull(plannerReq);
|
||||||
|
PlannerAllToday plannerAllTodayRes = plannerAllTodayImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId()));
|
||||||
|
assertNull(plannerAllTodayRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link PlannerService#cudPlannerAllToday(Planner)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет добавление, обновление, удаление сущности {@link ru.clearing.classes.statics.data.scheduler.PlannerAllToday} в Hazelcast.<br>
|
||||||
|
* Входной запрос {@link Planner}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void cudPlannerAllToday(){
|
||||||
|
//проверка добавления
|
||||||
|
Planner planner = getPlanner(newCompanyId);
|
||||||
|
plannerService.cudPlannerAllToday(planner);
|
||||||
|
checkPlannerAllTodayByPlanner(planner);
|
||||||
|
|
||||||
|
//проверка обновления
|
||||||
|
planner.setCompanyId(updateCompanyId);
|
||||||
|
plannerService.cudPlannerAllToday(planner);
|
||||||
|
checkPlannerAllTodayByPlanner(planner);
|
||||||
|
|
||||||
|
//проверка удаления всех PlannerAllToday
|
||||||
|
planner.setTaskStatus(Status.Cancel.getKey());
|
||||||
|
plannerAllTodayImdg.insert(PlannerAllTodayBuilder.builder().append(planner).build());
|
||||||
|
plannerService.cudPlannerAllToday(planner);
|
||||||
|
PlannerAllToday plannerAllTodayRes = plannerAllTodayImdg.getSingleObjectBySQL(String.format("parentId = %s", planner.getId()));
|
||||||
|
assertNull(plannerAllTodayRes);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue