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 bf4b589..675f16b 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 @@ -316,8 +316,23 @@ open class SchedulerService( } private fun markDo1CatchUpDone(dDate: LocalDate) { - val updated = (getDo1CatchUpDoneDDateSet() + dDate.toString()).sorted() - settingsService.update(SettingNames.SCHEDULE_M18_DO1_CATCHUP_DONE_DDATE, updated.joinToString(",")) + try { + val name = SettingNames.SCHEDULE_M18_DO1_CATCHUP_DONE_DDATE + val updated = (getDo1CatchUpDoneDDateSet() + dDate.toString()).sorted().joinToString(",") + val existing = settingsService.findByName(name).orElse(null) + if (existing != null) { + settingsService.update(name, updated) + } else { + val setting = Settings() + setting.name = name + setting.value = updated + setting.category = "SCHEDULE" + setting.type = Settings.TYPE_STRING + settingsService.save(setting) + } + } catch (e: Exception) { + logger.error("Failed to persist DO1 catch-up done marker for dDate={}: {}", dDate, e.message, e) + } } open fun runDo1CatchUp(dDate: LocalDate, skipExistingDo: Boolean = true) { @@ -334,11 +349,12 @@ open class SchedulerService( } try { getM18Dos1ForDDate(dDate, syncType = "DO1_CATCHUP", skipExistingDo = skipExistingDo) - markDo1CatchUpDone(dDate) - logger.info("DO1 catch-up completed for dDate={}", dDate) } catch (e: Exception) { - logger.error("DO1 catch-up failed for dDate={}: {}", dDate, e.message, e) + logger.error("DO1 catch-up sync failed for dDate={}: {}", dDate, e.message, e) + return } + markDo1CatchUpDone(dDate) + logger.info("DO1 catch-up completed for dDate={}", dDate) } // Scheduler diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index bf54567..9c416c6 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -46,7 +46,7 @@ scheduler: enabled: true skipExistingDo: true dDate: "2026-06-17" - runAt: "2026-06-17T11:30:00" + runAt: "2026-06-17T11:45:00" do1CatchUp2: enabled: true skipExistingDo: true diff --git a/src/main/resources/db/changelog/changes/20260617_do1_catchup_done_setting/01_insert_do1_catchup_done_setting.sql b/src/main/resources/db/changelog/changes/20260617_do1_catchup_done_setting/01_insert_do1_catchup_done_setting.sql new file mode 100644 index 0000000..94e6e1c --- /dev/null +++ b/src/main/resources/db/changelog/changes/20260617_do1_catchup_done_setting/01_insert_do1_catchup_done_setting.sql @@ -0,0 +1,9 @@ +--liquibase formatted sql +--changeset fpsms:20260617_do1_catchup_done_setting + +INSERT INTO `settings` (`name`, `value`, `category`, `type`) +SELECT 'SCHEDULE.m18.do1.catchup.doneDDate', '', 'SCHEDULE', 'string' +FROM DUAL +WHERE NOT EXISTS ( + SELECT 1 FROM `settings` WHERE `name` = 'SCHEDULE.m18.do1.catchup.doneDDate' +);