Procházet zdrojové kódy

[M18 Scheduler] Update Scheduler

master
cyril.tsui před 3 týdny
rodič
revize
5a3c9fe7ce
4 změnil soubory, kde provedl 68 přidání a 15 odebrání
  1. +49
    -15
      src/main/java/com/ffii/fpsms/m18/service/M18SchedulerService.kt
  2. +10
    -0
      src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt
  3. +5
    -0
      src/main/java/com/ffii/fpsms/modules/common/SettingNames.java
  4. +4
    -0
      src/main/resources/db/changelog/changes/20250731_01_cyril/01_insert_schedule_setting.sql

+ 49
- 15
src/main/java/com/ffii/fpsms/m18/service/M18SchedulerService.kt Zobrazit soubor

@@ -2,41 +2,75 @@ package com.ffii.fpsms.m18.service

import com.ffii.core.utils.JwtTokenUtil
import com.ffii.fpsms.m18.web.models.M18CommonRequest
//import jakarta.annotation.PostConstruct
import com.ffii.fpsms.modules.common.SettingNames
import com.ffii.fpsms.modules.settings.service.SettingsService
import jakarta.annotation.PostConstruct
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.scheduling.TaskScheduler
//import org.springframework.scheduling.annotation.Async
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.scheduling.support.CronTrigger
import org.springframework.stereotype.Service
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
//import java.util.concurrent.ScheduledFuture
//import kotlin.concurrent.Volatile
import java.util.concurrent.ScheduledFuture
import kotlin.concurrent.Volatile
import kotlin.jvm.optionals.getOrNull

@Service
open class M18SchedulerService(
val m18PurchaseOrderService: M18PurchaseOrderService,
val m18DeliveryOrderService: M18DeliveryOrderService,
val m18MasterDataService: M18MasterDataService,
val settingsService: SettingsService,
val taskScheduler: TaskScheduler,
) {
var logger: Logger = LoggerFactory.getLogger(JwtTokenUtil::class.java)
val dataStringFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd")

// @Volatile
// var scheduledM18Po: ScheduledFuture<*>? = null
//
// @PostConstruct
// fun init() {
//
// }
//
// fun scheduleM18PoTask() {
// scheduledM18Po?.cancel(false)
// }
@Volatile
var scheduledM18Po: ScheduledFuture<*>? = null

fun isValidCronExpression(cronExpression: String): Boolean {
return try {
CronTrigger(cronExpression)
true
} catch (e: IllegalArgumentException) {
false
}
}
@PostConstruct
fun init() {
scheduleM18PoTask()
}

fun scheduleM18PoTask() {
val defaultCronExpression = "0 0 2 * * *";
scheduledM18Po?.cancel(false)

var cron = settingsService.findByName(SettingNames.SCHEDULE_M18_PO).getOrNull()?.value ?: defaultCronExpression;

if (!isValidCronExpression(cron)) {
cron = defaultCronExpression
}
scheduledM18Po = taskScheduler.schedule(
{
// testTask();
getM18Pos()
},
CronTrigger(cron)
)
println("Cron: $cron")
}

fun testTask() {
println("Test: ${LocalDateTime.now()}")
}

// @Async
// @Scheduled(cron = "0 0 2 * * *") // (SS/MM/HH/DD/MM/YY)
@Scheduled(cron = "0 0 2 * * *") // (SS/MM/HH/DD/MM/YY)
// @Scheduled(cron = "0 0 2 * * *") // (SS/MM/HH/DD/MM/YY)
open fun getM18Pos() {
val currentTime = LocalDateTime.now()
val today = currentTime.toLocalDate().atStartOfDay()


+ 10
- 0
src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt Zobrazit soubor

@@ -4,6 +4,7 @@ import com.ffii.core.utils.JwtTokenUtil
import com.ffii.fpsms.m18.M18Config
import com.ffii.fpsms.m18.service.*
import com.ffii.fpsms.m18.web.models.M18CommonRequest
import com.ffii.fpsms.modules.common.SettingNames
import com.ffii.fpsms.modules.master.entity.ItemUom
import com.ffii.fpsms.modules.master.entity.Items
import com.ffii.fpsms.modules.master.entity.ShopRepository
@@ -11,6 +12,7 @@ import com.ffii.fpsms.modules.master.enums.ShopType
import com.ffii.fpsms.modules.master.service.ItemUomService
import com.ffii.fpsms.modules.master.service.ItemsService
import com.ffii.fpsms.modules.master.service.ShopService
import com.ffii.fpsms.modules.settings.service.SettingsService
import jakarta.validation.Valid
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@@ -30,6 +32,7 @@ class M18TestController (
private val m18PurchaseQuotationService: M18PurchaseQuotationService,
private val m18DeliveryOrderService: M18DeliveryOrderService,
val m18SchedulerService: M18SchedulerService,
private val settingsService: SettingsService,
) {
var logger: Logger = LoggerFactory.getLogger(JwtTokenUtil::class.java)

@@ -59,6 +62,13 @@ class M18TestController (
fun test4(): Any {
return m18SchedulerService.getM18Pos();
}
// --------------------------------------------- Scheduler --------------------------------------------- ///
@GetMapping("/schedule/po") //
fun schedulePo(@RequestParam @Valid newCron: String) {
settingsService.update(SettingNames.SCHEDULE_M18_PO, newCron);
m18SchedulerService.scheduleM18PoTask()
}

// --------------------------------------------- Master Data --------------------------------------------- ///
@GetMapping("/all")
fun m18All() {


+ 5
- 0
src/main/java/com/ffii/fpsms/modules/common/SettingNames.java Zobrazit soubor

@@ -20,6 +20,11 @@ public abstract class SettingNames {
/** Define the system modules (authorities.module) */
public static final String SYS_ROLE_MODULES = "SYS.modules";

/*
* Schedule settings
*/
public static final String SCHEDULE_M18_PO = "SCHEDULE.m18.po";

/*
* Mail settings
*/


+ 4
- 0
src/main/resources/db/changelog/changes/20250731_01_cyril/01_insert_schedule_setting.sql Zobrazit soubor

@@ -0,0 +1,4 @@
-- liquibase formatted sql
-- changeset cyril:insert_schedule_setting

INSERT INTO `settings` (`name`, `value`, `category`, `type`) VALUES ('SCHEDULE.m18.po', '0 0 2 * * *', 'SCHEDULE', 'string');

Načítá se…
Zrušit
Uložit