diff --git a/clearing-parent/imdg/pom.xml b/clearing-parent/imdg/pom.xml
index cb06f2437..24a1cef03 100644
--- a/clearing-parent/imdg/pom.xml
+++ b/clearing-parent/imdg/pom.xml
@@ -75,6 +75,16 @@
ru.spcex.platform
platform-enum
+
+ ru.spcex.clearing
+ cleaning-builders
+ SPCEX-1.0.0.0
+ compile
+
+
+ ru.spcex.clearing
+ clearing-validation
+
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java
index ed760d9c4..f6e601f92 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java
@@ -24,7 +24,7 @@ public class HazelcastConfiguration {
this.hzSettings = imdgSettings.getHazelcast();
}
- @Bean
+ @Bean("hazelcastInstanceImdg")
public HazelcastInstance hazelcastServerInstance(Config config) {
return Hazelcast.newHazelcastInstance(config);
}
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 81e9c8dc8..40eea61ce 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
@@ -8,18 +8,15 @@ 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.platform.enumeration.DayStatus;
-import ru.spcex.platform.enumeration.Parent;
+import ru.spcex.clearing.scheduler.PlannerAllTodayBuilder;
import ru.spcex.platform.enumeration.Status;
import java.time.DayOfWeek;
import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
import static ru.spcex.clearing.imdg.IMDGDistributedNames.*;
+import static ru.spcex.clearing.scheduler.ISchedulerChecker.*;
@Service
public class PlannerAllTodayMaker {
@@ -37,7 +34,7 @@ public class PlannerAllTodayMaker {
plannerTemplateMap = hazelcastInstance.getMap(Map_PlannerTemplate);
plannerAllTodayMap = hazelcastInstance.getMap(Map_PlannerAllToday);
}
-
+
public void makeSchedulerAllTodayMap() {
LocalDate currentDate = LocalDate.now();
List listOfPlannerAllToday = new ArrayList<>();
@@ -45,17 +42,15 @@ public class PlannerAllTodayMaker {
if (!plannerMap.isEmpty()) listOfPlannerAllToday.addAll(getPlannersAllTodayToDate(currentDate));
plannerMap.values().stream()
- .filter(x -> x.getTaskStatus() != null)
- .filter((x) -> x.getClearingDate() == null || x.getClearingDate().isEqual(currentDate)).forEach((x) -> {
- if (x.getTaskStatus().equalsIgnoreCase(Status.Active.getKey())) {
- listOfPlannerAllToday.add(createPlannerAllTodayFromPlanner(x));
- }
+ .filter(x -> isValidPlanner(x, currentDate)).forEach((planner) -> {
+ if (planner.getTaskStatus().equalsIgnoreCase(Status.Active.getKey())) {
+ listOfPlannerAllToday.add(PlannerAllTodayBuilder.builder().append(planner).build());
+ }
- if (x.getTaskStatus().equalsIgnoreCase(Status.Cancel.getKey()) || x.getTaskStatus().equalsIgnoreCase(Status.Blocked.getKey())) {
- listOfPlannerAllToday.removeIf((allToday) -> x.getTaskTime().equals(allToday.getTaskTime()) &&
- x.getTask().equalsIgnoreCase(allToday.getTask()));
- }
- });
+ if (planner.getTaskStatus().equalsIgnoreCase(Status.Cancel.getKey()) || planner.getTaskStatus().equalsIgnoreCase(Status.Blocked.getKey())) {
+ listOfPlannerAllToday.removeIf((allToday) -> needRemoveByPlanner(planner, allToday));
+ }
+ });
for (PlannerAllToday plannerAllToday : listOfPlannerAllToday) {
plannerAllToday.setId(hazelcastInstance.getIdGenerator(MAP_SEQUENCE_NAME).newId());
plannerAllTodayMap.put(plannerAllToday.getId(), plannerAllToday);
@@ -63,55 +58,29 @@ public class PlannerAllTodayMaker {
}
private List getPlannersAllTodayToDate(LocalDate currentDate) {
- boolean weekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(currentDate.getDayOfWeek());
List res = new ArrayList<>();
- if (clearingCalendarMap == null || clearingCalendarMap.isEmpty()) {
- if (!weekend) {
- for (PlannerTemplate plannerTemplate : plannerTemplateMap.values()) {
- res.add(createPlannerAllTodayFromPlannerTemplate(plannerTemplate));
- }
+
+ if (needAddFromPlannerTemplate(currentDate, clearingCalendarMap.values())){
+ for (PlannerTemplate plannerTemplate : plannerTemplateMap.values()) {
+ 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 = clearingCalendarMap.values().stream()
- .filter((calendar) -> calendar.getClearingDate().isEqual(currentDate))
+ Optional clearingCalendarOptional = clearingCalendar.stream()
+ .filter((calendar) -> calendar.getClearingDate() != null && calendar.getClearingDate().isEqual(currentDate))
.findFirst();
if (clearingCalendarOptional.isPresent()) {
ClearingCalendar calendar = clearingCalendarOptional.get();
- if (calendar.getDayStatus().equalsIgnoreCase(DayStatus.Workday.getKey())) {
- if (calendar.getCompanyId() != null && calendar.getCompanyId() != 0) {
- for (PlannerTemplate plannerTemplate : plannerTemplateMap.values()) {
- res.add(createPlannerAllTodayFromPlannerTemplate(plannerTemplate));
- }
- }
- }
- }
+ return isValidWorkday(calendar, isWeekend);
+ } else return !isWeekend;
}
-
- return res;
}
-
- private PlannerAllToday createPlannerAllTodayFromPlanner(Planner planner) {
- PlannerAllToday res = new PlannerAllToday();
- res.setTask(planner.getTask());
- res.setTaskTime(planner.getTaskTime());
- res.setClearingDate(planner.getClearingDate());
- res.setMarket(planner.getMarket());
- res.setTaskStatus(planner.getTaskStatus());
- res.setCompanyId(planner.getCompanyId());
- res.setSecurityId(planner.getSecurityId());
- res.setParent(Parent.Planner.getKey());
- res.setParentId(planner.getId());
- return res;
- }
-
- private PlannerAllToday createPlannerAllTodayFromPlannerTemplate(PlannerTemplate plannerTemplate) {
- PlannerAllToday res = new PlannerAllToday();
- res.setTask(plannerTemplate.getTask());
- res.setTaskTime(plannerTemplate.getTaskTime());
- res.setTaskStatus(plannerTemplate.getTaskStatus());
- res.setParent(Parent.Template.getKey());
- res.setParentId(plannerTemplate.getId());
- return res;
- }
-
}
diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/config/TestConfiguration.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/config/TestConfiguration.java
index 39c46e355..02890c364 100644
--- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/config/TestConfiguration.java
+++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/config/TestConfiguration.java
@@ -6,6 +6,7 @@ import com.hazelcast.core.HazelcastInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -16,6 +17,7 @@ import org.springframework.context.annotation.Import;
public class TestConfiguration {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
+ @Qualifier("hazelcastInstanceImdg")
private HazelcastInstance hazelcastInstance;
@Autowired
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
new file mode 100644
index 000000000..99a0d9cab
--- /dev/null
+++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java
@@ -0,0 +1,111 @@
+package ru.spcex.clearing.imdg.services;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+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.spcex.clearing.imdg.config.TestConfiguration;
+import ru.spcex.platform.enumeration.DayStatus;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.Collections;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static ru.spcex.clearing.scheduler.ISchedulerChecker.*;
+
+@ExtendWith(SpringExtension.class)
+@ContextConfiguration(classes = {
+ TestConfiguration.class
+ })
+class PlannerAllTodayMakerTest {
+ @Autowired
+ TestConfiguration testConfig;
+
+ private final LocalDate weekendDate = LocalDate.of(2023, 4, 16);
+ private final LocalDate workDate = LocalDate.of(2023, 4, 14);
+
+ @BeforeAll
+ static void setProperty() {
+ Path path = Paths.get("src", "main", "resources");
+ String currentPath = path.toAbsolutePath().toString();
+ System.setProperty("spring.config.location", currentPath);
+ }
+
+ @Test
+ void needAddFromPlannerTemplate() {
+ PlannerAllTodayMaker plannerAllTodayMaker = new PlannerAllTodayMaker(testConfig.getHazelcastInstance());
+ assertFalse(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, null));
+ assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, null));
+ ClearingCalendar clearingCalendar = new ClearingCalendar();
+ assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Collections.singleton(clearingCalendar)));
+ clearingCalendar.setClearingDate(workDate);
+ clearingCalendar.setDayStatus(DayStatus.Workday.getKey());
+ assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(workDate, Collections.singleton(clearingCalendar)));
+ clearingCalendar.setClearingDate(weekendDate);
+ clearingCalendar.setDayStatus(DayStatus.Workday.getKey());
+ assertFalse(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Collections.singleton(clearingCalendar)));
+ clearingCalendar.setCompanyId(11L);
+ assertTrue(plannerAllTodayMaker.needAddFromPlannerTemplate(weekendDate, Collections.singleton(clearingCalendar)));
+ }
+
+ @Test
+ void isValidWorkdayTest() {
+ ClearingCalendar clearingCalendar = new ClearingCalendar();
+ assertFalse(isValidWorkday(clearingCalendar, true));
+ clearingCalendar.setDayStatus(DayStatus.Workday.getKey());
+ assertFalse(isValidWorkday(clearingCalendar, true));
+ clearingCalendar.setDayStatus(DayStatus.DayOff.getKey());
+ assertFalse(isValidWorkday(clearingCalendar, true));
+ assertFalse(isValidWorkday(clearingCalendar, false));
+ clearingCalendar.setDayStatus(DayStatus.Workday.getKey());
+ assertTrue(isValidWorkday(clearingCalendar, false));
+ assertFalse(isValidWorkday(clearingCalendar, true));
+ clearingCalendar.setCompanyId(1L);
+ assertTrue(isValidWorkday(clearingCalendar, true));
+ }
+
+ @Test
+ void needRemoveByPlannerTest() {
+ PlannerAllToday plannerAllToday = new PlannerAllToday();
+ Planner planner = new Planner();
+ LocalTime localTime = LocalTime.now();
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ planner.setTaskTime(localTime);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ plannerAllToday.setTaskTime(localTime);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ planner.setCompanyId(1L);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ plannerAllToday.setCompanyId(1L);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ planner.setSecurityId(1L);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ plannerAllToday.setSecurityId(1L);
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ plannerAllToday.setTask("1L");
+ assertFalse(needRemoveByPlanner(planner, plannerAllToday));
+ planner.setTask("1L");
+ assertTrue(needRemoveByPlanner(planner, plannerAllToday));
+ }
+
+ @Test
+ void isValidPlannerTest() {
+ Planner planner = new Planner();
+ assertFalse(isValidPlanner(planner, weekendDate));
+ planner.setTaskStatus("ACTV");
+ assertTrue(isValidPlanner(planner, weekendDate));
+ planner.setClearingDate(workDate);
+ assertFalse(isValidPlanner(planner, weekendDate));
+ planner.setClearingDate(weekendDate);
+ assertTrue(isValidPlanner(planner, weekendDate));
+ }
+}
\ No newline at end of file