From 02c5b2a176dada276e61f1982b9c3c646b062ce4 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Thu, 20 Apr 2023 11:41:48 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-258=20?= =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D0=BB=20=D0=B2=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=20=D0=A2=D0=97=20PlannerAllTodayMaker=20=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8B=20=D0=BA=20=D0=BD=D0=B5=D0=BC=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clearing-parent/imdg/pom.xml | 10 ++ .../imdg/config/HazelcastConfiguration.java | 2 +- .../imdg/services/PlannerAllTodayMaker.java | 89 +++++--------- .../imdg/config/TestConfiguration.java | 2 + .../services/PlannerAllTodayMakerTest.java | 111 ++++++++++++++++++ 5 files changed, 153 insertions(+), 61 deletions(-) create mode 100644 clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/services/PlannerAllTodayMakerTest.java 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