diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java index 82e9862af..a41698909 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java @@ -12,11 +12,14 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.enumeration.Task; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; +import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; + public class LauncherService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg launcherMap; @@ -41,6 +44,9 @@ public class LauncherService extends QueueConsumer implements InitializingBean { log.debug("LauncherCommandRequest received"); Instant created = Instant.now(); Launcher launcher = new Launcher(); + if (getEnumByKey(Task.class, req.getTaskName()) == null) { + throw new IllegalStateException("Illegal task name:\t" + req.getTaskName()); + } launcher.setTask(req.getTaskName()); launcher.setSenderId(req.getUserId()); launcher.setCreated(created); diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java index 4db6e99b2..ee5b53975 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java @@ -1,23 +1,25 @@ package ru.spcex.clearing.scheduler.service; import com.hazelcast.core.EntryEvent; -import com.hazelcast.core.HazelcastInstance; -import com.hazelcast.core.IMap; import com.hazelcast.map.listener.EntryAddedListener; import com.hazelcast.map.listener.EntryRemovedListener; import com.hazelcast.map.listener.EntryUpdatedListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.lang.NonNull; import org.springframework.scheduling.TaskScheduler; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.scheduler.Launcher; import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; import ru.spcex.platform.enumeration.Status; import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; +import java.time.*; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -26,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.stream.Collectors; +import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_Launcher; import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_PlannerAllToday; import static ru.spcex.platform.enumeration.Status.*; import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; @@ -34,37 +37,41 @@ import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; * Планировщик задач, расписание берёт из Hazelcast map. *

*/ -public abstract class TaskManager implements EntryAddedListener, +@Service("userReportTask") +@Lazy +public class TaskManager implements EntryAddedListener, EntryUpdatedListener, EntryRemovedListener, InitializingBean { private static final Logger log = LoggerFactory.getLogger(TaskManager.class); + private final TaskScheduler taskScheduler; + private final ImdgProvider imdgProvider; + private Imdg launcherMap; + private Imdg plannerAllTodayMap; + private ConcurrentHashMap scheduledJobs; - protected HazelcastInstance hazelcastInstance; - protected IMap plannerAllTodayMapStore; - protected TaskScheduler taskScheduler; - - protected ConcurrentHashMap scheduledJobs; - - protected TaskManager(TaskScheduler taskScheduler, HazelcastInstance hazelcastInstance) { + @Autowired + TaskManager(TaskScheduler taskScheduler, + ImdgProvider imdgProvider) { this.taskScheduler = taskScheduler; - this.hazelcastInstance = hazelcastInstance; + this.imdgProvider = imdgProvider; } - private static LocalDateTime dateOldTypeConvert(Date oldDate) { + private static LocalDateTime dateOldTypeConvert(@NonNull Date oldDate) { return LocalDateTime.ofInstant(oldDate.toInstant(), ZoneId.systemDefault()); } - private static LocalDate dateTypeConvert(Date oldDate) { + private static LocalDate dateTypeConvert(@NonNull Date oldDate) { return dateOldTypeConvert(oldDate).toLocalDate(); } - private static LocalTime timeTypeConvert(Date oldDate) { + private static LocalTime timeTypeConvert(@NonNull Date oldDate) { return dateOldTypeConvert(oldDate).toLocalTime(); } @Override public void afterPropertiesSet() { - plannerAllTodayMapStore = hazelcastInstance.getMap(Map_PlannerAllToday); + this.launcherMap = imdgProvider.getImdg(Map_Launcher, Launcher.class); + this.plannerAllTodayMap = imdgProvider.getImdg(Map_PlannerAllToday, PlannerAllToday.class); scheduledJobs = new ConcurrentHashMap<>(); updateScheduler(); } @@ -88,19 +95,17 @@ public abstract class TaskManager implements EntryAddedListener schedulerAllTodays = plannerAllTodayMapStore.values(); + Collection schedulerAllTodays = plannerAllTodayMap.getAllValues(); Collection sortedSchedulers = schedulerAllTodays.stream().sorted((o1, o2) -> (Active.equalsByKey(o1.getTaskStatus()) && Cancel.equalsByKey(o2.getTaskStatus())) ? -1 : 0) .collect(Collectors.toCollection(ArrayList::new)); @@ -159,16 +164,12 @@ public abstract class TaskManager implements EntryAddedListener doJob(task), LocalDateTime.of(LocalDate.now(), taskTime).atZone(ZoneId.systemDefault()).toInstant()); ScheduledFuture oldFuture = scheduledJobs.put(taskTime, future); if (oldFuture != null && !oldFuture.isCancelled()) { //for synchronization, never @@ -203,10 +204,10 @@ public abstract class TaskManager implements EntryAddedListener