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;