From 79f0b2852a4ef01c47e19943b68af978a197b5d0 Mon Sep 17 00:00:00 2001 From: Fai Luk Date: Mon, 7 Sep 2026 21:56:05 +0800 Subject: [PATCH] changed the sync of DO1 to 23:00 --- .../fpsms/modules/common/SettingNames.java | 1 + .../common/alert/SchedulerSyncAlertService.kt | 4 ++-- .../scheduler/service/SchedulerService.kt | 22 +++++++++++-------- .../01_update_do1_schedule_to_23.sql | 5 +++++ 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/20260907_do1_2300/01_update_do1_schedule_to_23.sql diff --git a/src/main/java/com/ffii/fpsms/modules/common/SettingNames.java b/src/main/java/com/ffii/fpsms/modules/common/SettingNames.java index 3adac3b..a80a077 100644 --- a/src/main/java/com/ffii/fpsms/modules/common/SettingNames.java +++ b/src/main/java/com/ffii/fpsms/modules/common/SettingNames.java @@ -25,6 +25,7 @@ public abstract class SettingNames { */ public static final String SCHEDULE_M18_PO = "SCHEDULE.m18.po"; + /** Mon–Fri & Sun DO1 time (default 23:00). Saturday uses [SCHEDULE_M18_DO1_SAT]. */ public static final String SCHEDULE_M18_DO1 = "SCHEDULE.m18.do1"; /** Saturday-only DO1 time (default 03:10). Mon–Fri & Sun use [SCHEDULE_M18_DO1] time via a second trigger. */ public static final String SCHEDULE_M18_DO1_SAT = "SCHEDULE.m18.do1.sat"; diff --git a/src/main/java/com/ffii/fpsms/modules/common/alert/SchedulerSyncAlertService.kt b/src/main/java/com/ffii/fpsms/modules/common/alert/SchedulerSyncAlertService.kt index dca5b13..caae5b3 100644 --- a/src/main/java/com/ffii/fpsms/modules/common/alert/SchedulerSyncAlertService.kt +++ b/src/main/java/com/ffii/fpsms/modules/common/alert/SchedulerSyncAlertService.kt @@ -229,10 +229,10 @@ open class SchedulerSyncAlertService( val cron = if (date.dayOfWeek == DayOfWeek.SATURDAY) { settingsService.findByName(SettingNames.SCHEDULE_M18_DO1_SAT).getOrNull()?.value - ?: "0 10 3 ? * SAT" + ?: SchedulerService.DO1_SAT_DEFAULT_CRON } else { settingsService.findByName(SettingNames.SCHEDULE_M18_DO1).getOrNull()?.value - ?: "0 10 19 * * *" + ?: SchedulerService.DO1_DEFAULT_CRON } return scheduledTimeToday(cron, date) } diff --git a/src/main/java/com/ffii/fpsms/modules/common/scheduler/service/SchedulerService.kt b/src/main/java/com/ffii/fpsms/modules/common/scheduler/service/SchedulerService.kt index 875ce4b..de198a6 100644 --- a/src/main/java/com/ffii/fpsms/modules/common/scheduler/service/SchedulerService.kt +++ b/src/main/java/com/ffii/fpsms/modules/common/scheduler/service/SchedulerService.kt @@ -75,6 +75,11 @@ open class SchedulerService( @Value("\${scheduler.sync-alert.enabled:false}") private val syncAlertEnabled: Boolean, ) { companion object { + /** Mon–Fri & Sun DO1 (23:00). Saturday stays on [DO1_SAT_DEFAULT_CRON]. */ + const val DO1_DEFAULT_CRON: String = "0 0 23 * * *" + const val DO1_SAT_DEFAULT_CRON: String = "0 10 3 ? * SAT" + /** DO2 lastModified from yesterday this hour (aligns with weekday/Sun DO1). Sunday uses Sat 03:00. */ + const val DO2_MODIFIED_FROM_HOUR: Int = 23 /** DO2: Spring 6-field cron default and M18 `lastModifyDate` upper bound hour (1pm local). */ const val DO2_MODIFIED_TO_HOUR: Int = 13 const val DO2_DEFAULT_CRON: String = "0 0 13 * * *" @@ -178,18 +183,18 @@ open class SchedulerService( return } - var cronMain = settingsService.findByName(SettingNames.SCHEDULE_M18_DO1).getOrNull()?.value ?: "0 10 19 * * *" + var cronMain = settingsService.findByName(SettingNames.SCHEDULE_M18_DO1).getOrNull()?.value ?: DO1_DEFAULT_CRON if (!isValidCronExpression(cronMain)) { - cronMain = "0 10 19 * * *" + cronMain = DO1_DEFAULT_CRON } val weekdaySunCron = cronToMonFriSunSchedule(cronMain) val mainCron = if (isValidCronExpression(weekdaySunCron)) weekdaySunCron else cronMain scheduledM18Do1 = taskScheduler.schedule({ getM18Dos1() }, CronTrigger(mainCron)) - var cronSat = settingsService.findByName(SettingNames.SCHEDULE_M18_DO1_SAT).getOrNull()?.value ?: "0 10 3 ? * SAT" + var cronSat = settingsService.findByName(SettingNames.SCHEDULE_M18_DO1_SAT).getOrNull()?.value ?: DO1_SAT_DEFAULT_CRON if (!isValidCronExpression(cronSat)) { - cronSat = "0 10 3 ? * SAT" + cronSat = DO1_SAT_DEFAULT_CRON } scheduledM18Do1Sat = taskScheduler.schedule({ getM18Dos1() }, CronTrigger(cronSat)) @@ -743,14 +748,13 @@ open class SchedulerService( val ysd = today.minusDays(1L) val tmr = today.plusDays(1L) - // Default: lastModified from yesterday 19:00 through today's DO2 run hour (1pm; aligns with SCHEDULE.m18.do2). - // On Sunday, yesterday is Saturday: use 03:00 instead so we include DO changed after Sat 03:10 DO1 - // (otherwise Sat 03:00–18:59 would be skipped until a much later sync). + // Default: lastModified from yesterday 23:00 through today's DO2 run hour (1pm; aligns with weekday/Sun DO1). + // On Sunday, yesterday is Saturday: keep 03:00 so we include DO changed after Sat 03:10 DO1. val isSundayDo2 = runDate.dayOfWeek == DayOfWeek.SUNDAY val modifiedFromStart = if (isSundayDo2) { ysd.withHour(3).withMinute(0).withSecond(0) } else { - ysd.withHour(19).withMinute(0).withSecond(0) + ysd.withHour(DO2_MODIFIED_FROM_HOUR).withMinute(0).withSecond(0) } val modifiedDateToEnd = @@ -759,7 +763,7 @@ open class SchedulerService( logger.info( "DO2 modifiedDateFrom={} ({}), modifiedDateTo={}", modifiedFromStart.format(dateTimeStringFormat), - if (isSundayDo2) "Sunday window from Sat 03:00" else "from yesterday 19:00", + if (isSundayDo2) "Sunday window from Sat 03:00" else "from yesterday 23:00", modifiedDateToEnd.format(dateTimeStringFormat), ) diff --git a/src/main/resources/db/changelog/changes/20260907_do1_2300/01_update_do1_schedule_to_23.sql b/src/main/resources/db/changelog/changes/20260907_do1_2300/01_update_do1_schedule_to_23.sql new file mode 100644 index 0000000..26d8c5c --- /dev/null +++ b/src/main/resources/db/changelog/changes/20260907_do1_2300/01_update_do1_schedule_to_23.sql @@ -0,0 +1,5 @@ +--liquibase formatted sql +--changeset fpsms:20260907_do1_schedule_2300 + +-- Mon–Fri & Sun DO1 → 23:00. Saturday SCHEDULE.m18.do1.sat (03:10) is unchanged. +UPDATE `settings` SET `value` = '0 0 23 * * *' WHERE `name` = 'SCHEDULE.m18.do1';