diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/scheduler/ISchedulerChecker.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/scheduler/ISchedulerChecker.java index 5e5dc4d2a..2bc665aa5 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/scheduler/ISchedulerChecker.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/scheduler/ISchedulerChecker.java @@ -23,7 +23,7 @@ public class ISchedulerChecker { /** * @param isWeekend тек.день=СБ-ВС
*/ - public static boolean isValidWorkday(ClearingCalendar clearingCalendar, boolean isWeekend) { + public static boolean isWorkDayByTradingCalendar(ClearingCalendar clearingCalendar, boolean isWeekend) { if (clearingCalendar.getDayStatus() != null && clearingCalendar.getDayStatus().equalsIgnoreCase(DayStatus.Workday.getKey())) { if (isWeekend) { return clearingCalendar.getCompanyId() != null && clearingCalendar.getCompanyId() != 0; @@ -31,4 +31,9 @@ public class ISchedulerChecker { } return false; } + + public static boolean isWorkDayByTradingCalendar(ClearingCalendar clearingCalendar) { + return clearingCalendar.getDayStatus() != null && + clearingCalendar.getDayStatus().equalsIgnoreCase(DayStatus.Workday.getKey()); + } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMaker.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMaker.java index 93109098f..c418c0a4e 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMaker.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMaker.java @@ -2,8 +2,6 @@ package ru.spcex.clearing.imdg.services; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; -import com.hazelcast.query.Predicate; -import com.hazelcast.query.Predicates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,15 +11,21 @@ import ru.clearing.classes.statics.data.scheduler.ClearingCalendar; import ru.clearing.classes.statics.data.scheduler.Planner; import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; +import ru.spcex.clearing.scheduler.ISchedulerChecker; import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder; import ru.spcex.platform.enumeration.Status; import java.time.DayOfWeek; import java.time.LocalDate; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; import static ru.spcex.clearing.imdg.IMDGDistributedNames.*; -import static ru.spcex.clearing.scheduler.ISchedulerChecker.*; +import static ru.spcex.clearing.scheduler.ISchedulerChecker.isValidPlanner; +import static ru.spcex.clearing.scheduler.ISchedulerChecker.needRemoveByPlanner; @Service public class PlannerAllTodayMaker { @@ -66,46 +70,25 @@ public class PlannerAllTodayMaker { log.info("Created {} plannerAllTodays", plannerAllTodayMap.size()); } - private PlannerAllToday getFirstObjectByFieldValues(Map> conditions) { - Predicate[] predicates = new Predicate[conditions.size()]; - final int[] i = {0}; - conditions.forEach((key, value) -> { - predicates[i[0]] = Predicates.equal(key, value); - i[0]++; - }); - Predicate and = Predicates.and(predicates); - Set> found = plannerAllTodayMap.entrySet(and); - Iterator> allFoundByCondition = found.iterator(); - if (allFoundByCondition.hasNext()) { - return allFoundByCondition.next().getValue(); - } else { - return null; - } - } - private List getPlannersAllTodayToDate(LocalDate currentDate) { List res = new ArrayList<>(); + Optional clearingCalendarOnDate = clearingCalendarMap.values().stream() + .filter((calendar) -> calendar.getClearingDate() != null && calendar.getClearingDate().isEqual(currentDate)) + .findFirst(); - if (needAddFromPlannerTemplate(currentDate, clearingCalendarMap.values())) { - plannerTemplateMap.values().stream().filter(plannerTemplate -> Status.Active.equalsByKey(plannerTemplate.getTaskStatus())) + if (needAddFromPlannerTemplate(currentDate, clearingCalendarOnDate)) { + AtomicReference companyId = new AtomicReference<>(); + clearingCalendarOnDate.ifPresent(clearingCalendar -> companyId.set(clearingCalendar.getCompanyId())); + plannerTemplateMap.values().stream().filter( + plannerTemplate -> Status.Active.equalsByKey(plannerTemplate.getTaskStatus()) && + (companyId.get() == null || companyId.get().equals(plannerTemplate.getCompanyId()))) .forEach(plannerTemplate -> res.add(PlannerAllTodayBuilder.builder().append(plannerTemplate).build())); } return res; } - public boolean needAddFromPlannerTemplate(LocalDate currentDate, Collection clearingCalendar) { - boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek()); - - if (clearingCalendar == null || clearingCalendar.isEmpty()) { - return !isWeekend; - } else { - Optional clearingCalendarOptional = clearingCalendar.stream() - .filter((calendar) -> calendar.getClearingDate() != null && calendar.getClearingDate().isEqual(currentDate)) - .findFirst(); - if (clearingCalendarOptional.isPresent()) { - ClearingCalendar calendar = clearingCalendarOptional.get(); - return isValidWorkday(calendar, isWeekend); - } else return !isWeekend; - } + public boolean needAddFromPlannerTemplate(LocalDate currentDate, Optional clearingCalendar) { + boolean isWorkDay = !Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek()); + return clearingCalendar.map(ISchedulerChecker::isWorkDayByTradingCalendar).orElse(isWorkDay); } } diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java index 761f855f0..e3c3ce894 100644 --- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java +++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java @@ -18,7 +18,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDate; import java.time.LocalTime; -import java.util.Collections; +import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -54,31 +54,31 @@ class PlannerAllTodayMakerTest { assertFalse(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, null)); assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, null)); ClearingCalendar clearingCalendar = new ClearingCalendar(); - assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Collections.singleton(clearingCalendar))); + assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Optional.of(clearingCalendar))); clearingCalendar.setClearingDate(workDate); clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); - assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Collections.singleton(clearingCalendar))); + assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Optional.of(clearingCalendar))); clearingCalendar.setClearingDate(weekendDate); clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); - assertFalse(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Collections.singleton(clearingCalendar))); + assertFalse(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Optional.of(clearingCalendar))); clearingCalendar.setCompanyId(11L); - assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Collections.singleton(clearingCalendar))); + assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Optional.of(clearingCalendar))); } @Test void isValidWorkdayTest() { ClearingCalendar clearingCalendar = new ClearingCalendar(); - assertFalse(isValidWorkday(clearingCalendar, true)); + assertFalse(isWorkDayByTradingCalendar(clearingCalendar, true)); clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); - assertFalse(isValidWorkday(clearingCalendar, true)); + assertFalse(isWorkDayByTradingCalendar(clearingCalendar, true)); clearingCalendar.setDayStatus(DayStatus.DayOff.getKey()); - assertFalse(isValidWorkday(clearingCalendar, true)); - assertFalse(isValidWorkday(clearingCalendar, false)); + assertFalse(isWorkDayByTradingCalendar(clearingCalendar, true)); + assertFalse(isWorkDayByTradingCalendar(clearingCalendar, false)); clearingCalendar.setDayStatus(DayStatus.Workday.getKey()); - assertTrue(isValidWorkday(clearingCalendar, false)); - assertFalse(isValidWorkday(clearingCalendar, true)); + assertTrue(isWorkDayByTradingCalendar(clearingCalendar, false)); + assertFalse(isWorkDayByTradingCalendar(clearingCalendar, true)); clearingCalendar.setCompanyId(1L); - assertTrue(isValidWorkday(clearingCalendar, true)); + assertTrue(isWorkDayByTradingCalendar(clearingCalendar, true)); } @Test diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java index 87c5db89a..31dc9c814 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java @@ -36,7 +36,7 @@ import java.util.Collection; import java.util.Map; import java.util.function.Function; -import static ru.spcex.clearing.scheduler.ISchedulerChecker.isValidWorkday; +import static ru.spcex.clearing.scheduler.ISchedulerChecker.isWorkDayByTradingCalendar; import static ru.spcex.clearing.scheduler.config.PlannerQueueConfig.addToPlannerQueue; @Service @@ -150,7 +150,7 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi if (clearingCalendar.getClearingDate() == null || !clearingCalendar.getClearingDate().equals(currentDate)) return; boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek()); - if (isValidWorkday(clearingCalendar, isWeekend)) { + if (isWorkDayByTradingCalendar(clearingCalendar, isWeekend)) { for (PlannerTemplate plannerTemplate : plannerTemplateMap.getAllValues()) { PlannerAllToday plannerAllToday = plannerAllTodayMap.getFirstObjectBySQL(String.format("parentId = %s", plannerTemplate.getId())); if (plannerAllToday == null) { @@ -172,7 +172,7 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi for (ClearingCalendar calendar : clearingCalendars) { //если будет хоть один валидные ClearingCalendar на сегодня на основании которого(и plannerTemplate -ов) могли быть созданы PlannerAllToday //ничего проверять\удалять дальше не будем - if (isValidWorkday(calendar, isWeekend)) return; + if (isWorkDayByTradingCalendar(calendar, isWeekend)) return; } } //удалим все PlannerAllToday созданные на основании plannerTemplate кроме созданных на основании planner diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java index 62fecb1bc..16a506fbe 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java @@ -35,7 +35,7 @@ import java.util.Collection; import java.util.Map; import java.util.function.Function; -import static ru.spcex.clearing.scheduler.ISchedulerChecker.isValidWorkday; +import static ru.spcex.clearing.scheduler.ISchedulerChecker.isWorkDayByTradingCalendar; import static ru.spcex.clearing.scheduler.config.PlannerQueueConfig.addToPlannerQueue; @Service @@ -183,7 +183,7 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin Collection clearingCalendars = clearingCalendarMap.getCollectionObjectsByFieldValues(Map.of("clearingDate", currentDate)); if (clearingCalendars != null && !clearingCalendars.isEmpty()) { for (ClearingCalendar calendar : clearingCalendars) { - if (isValidWorkday(calendar, isWeekend)) return true; + if (isWorkDayByTradingCalendar(calendar, isWeekend)) return true; } } else return !isWeekend; return false;