From 141be8633581cd8563f7b612a43d5d77b47810ab Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Sat, 18 Nov 2023 10:07:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coal/common/CollectionUtils.java | 74 ++++++++++++++++++- .../coal/cronJob/dto/CronJobDto.java | 4 + .../coal/cronJob/entity/CronJobEntity.java | 10 +++ .../coal/cronJob/service/CronJobService.java | 4 +- .../coal/cronJob/service/CronScriptJob.java | 3 +- .../cronJobLog/entity/CronJobLogEntity.java | 2 +- .../loginUser/service/LoginUserService.java | 1 + .../coal/script/service/ScriptService.java | 1 + src/main/resources/application.yaml | 3 + .../resources/scripts/cronJob/demoJob.groovy | 2 +- .../scripts/dict/enum/cronJobDict.groovy | 15 ++++ 11 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/scripts/dict/enum/cronJobDict.groovy diff --git a/src/main/java/cn/lihongjie/coal/common/CollectionUtils.java b/src/main/java/cn/lihongjie/coal/common/CollectionUtils.java index e0d8f6b8..32754e53 100644 --- a/src/main/java/cn/lihongjie/coal/common/CollectionUtils.java +++ b/src/main/java/cn/lihongjie/coal/common/CollectionUtils.java @@ -6,7 +6,9 @@ import lombok.experimental.UtilityClass; import org.apache.commons.lang3.ObjectUtils; +import java.math.BigDecimal; import java.util.*; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; @@ -71,8 +73,9 @@ public class CollectionUtils { .getOrDefault( k, new ArrayList<>( - Collections.singletonList( - (B) null))) + Collections + .singletonList( + null))) .stream() .map(bv -> new Tuple2<>(av, bv)))) .collect(java.util.stream.Collectors.toList()); @@ -104,4 +107,71 @@ public class CollectionUtils { return StreamSupport.stream( a == null ? new ArrayList().spliterator() : a.spliterator(), false); } + + public static void rollingAvg( + List src, + Comparator comparator, + Function getVal, + BiConsumer setAvg) { + rollingAvg(src, comparator, getVal, t -> 1, setAvg); + } + + public static void rollingAvg( + List src, + Comparator comparator, + Function getVal, + Function getWeight, + BiConsumer setAvg) { + + if (org.apache.commons.collections4.CollectionUtils.isEmpty(src)) { + return; + } + List list = src.stream().sorted(comparator).toList(); + + BigDecimal valueSum = BigDecimal.ZERO; + + BigDecimal weightSum = BigDecimal.ZERO; + + int nullCount = 0; + + for (int i = 0; i < list.size(); i++) { + T t = list.get(i); + + BigDecimal value = toBigDecimal(getVal.apply(t)); + BigDecimal weight = toBigDecimal(getWeight.apply(t)); + + if (value != null) { + + valueSum = valueSum.add(value.multiply(weight)); + weightSum = weightSum.add(weight); + } else { + + nullCount++; + } + if (nullCount == i + 1) { + setAvg.accept(t, null); + } else { + + setAvg.accept(t, valueSum.divide(weightSum)); + } + } + } + + public static BigDecimal toBigDecimal(Object o) { + if (o == null) { + return null; + } + + if (o instanceof String s && s.isBlank()) { + return null; + } + if (o instanceof BigDecimal) { + return (BigDecimal) o; + } + if (o instanceof Number) { + return new BigDecimal(o.toString()); + } + + return new BigDecimal(o.toString()); + } } diff --git a/src/main/java/cn/lihongjie/coal/cronJob/dto/CronJobDto.java b/src/main/java/cn/lihongjie/coal/cronJob/dto/CronJobDto.java index 60a419b9..8f45c1e8 100644 --- a/src/main/java/cn/lihongjie/coal/cronJob/dto/CronJobDto.java +++ b/src/main/java/cn/lihongjie/coal/cronJob/dto/CronJobDto.java @@ -9,6 +9,8 @@ import lombok.Data; import org.hibernate.annotations.Comment; +import java.time.LocalDateTime; + @Data public class CronJobDto extends CommonDto { @ManyToOne @@ -22,4 +24,6 @@ public class CronJobDto extends CommonDto { @Comment("quartz trigger id") private String quartzTriggerId; + private LocalDateTime nextFireTime; + private LocalDateTime prevFireTime; } diff --git a/src/main/java/cn/lihongjie/coal/cronJob/entity/CronJobEntity.java b/src/main/java/cn/lihongjie/coal/cronJob/entity/CronJobEntity.java index 8578abd0..8d478e1d 100644 --- a/src/main/java/cn/lihongjie/coal/cronJob/entity/CronJobEntity.java +++ b/src/main/java/cn/lihongjie/coal/cronJob/entity/CronJobEntity.java @@ -9,6 +9,9 @@ import jakarta.persistence.ManyToOne; import lombok.Data; import org.hibernate.annotations.Comment; +import org.hibernate.annotations.Formula; + +import java.time.LocalDateTime; @Data @Entity @@ -26,6 +29,13 @@ public class CronJobEntity extends CommonEntity { @Comment("quartz trigger id") private String quartzTriggerId; + @Formula("(select to_timestamp(t.prev_fire_time/ 1000) from qrtz_triggers t where t.trigger_name = quartz_trigger_id )") + private LocalDateTime prevFireTime; + + + @Formula("(select to_timestamp(t.next_fire_time/ 1000) from qrtz_triggers t where t.trigger_name = quartz_trigger_id )") + private LocalDateTime nextFireTime; + diff --git a/src/main/java/cn/lihongjie/coal/cronJob/service/CronJobService.java b/src/main/java/cn/lihongjie/coal/cronJob/service/CronJobService.java index cad29517..7916bf94 100644 --- a/src/main/java/cn/lihongjie/coal/cronJob/service/CronJobService.java +++ b/src/main/java/cn/lihongjie/coal/cronJob/service/CronJobService.java @@ -95,7 +95,7 @@ public class CronJobService extends BaseService sysConfigService.getConfigVal( Constants.SYSCONFIG_SESSION_TIMEOUT))); this.repository.updateExpireTimeById(newExpireTime, loginDto.getId()); + this.clearCache(loginDto.getId()); log.info("更新会话过期时间: {} from {} to {}", loginDto.getId(), expireTime, newExpireTime); } diff --git a/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java b/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java index 3ee49c90..432febfa 100644 --- a/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java +++ b/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java @@ -213,6 +213,7 @@ class ScriptService extends BaseService { @Cleanup("stop") ListAppender appender = new ListAppender<>(); + appender.setContext(logger.getLoggerContext()); appender.start(); logger.addAppender(appender); script.setProperty( diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 60cb52f5..ca208193 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -48,6 +48,9 @@ spring: org.quartz.jobStore.isClustered: true org.quartz.scheduler.instanceName: MyClusteredScheduler org.quartz.scheduler.instanceId: AUTO + org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate + org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStore + startup-delay: 10s diff --git a/src/main/resources/scripts/cronJob/demoJob.groovy b/src/main/resources/scripts/cronJob/demoJob.groovy index 02547eaf..6806c9da 100644 --- a/src/main/resources/scripts/cronJob/demoJob.groovy +++ b/src/main/resources/scripts/cronJob/demoJob.groovy @@ -1,4 +1,4 @@ -print("hello world") +println("hello world".repeat(1000)) diff --git a/src/main/resources/scripts/dict/enum/cronJobDict.groovy b/src/main/resources/scripts/dict/enum/cronJobDict.groovy new file mode 100644 index 00000000..9048de7d --- /dev/null +++ b/src/main/resources/scripts/dict/enum/cronJobDict.groovy @@ -0,0 +1,15 @@ +package scripts.dict + +import cn.lihongjie.coal.base.dto.CommonQuery +import cn.lihongjie.coal.cronJob.controller.CronJobController +import org.springframework.context.ApplicationContext + +ApplicationContext ioc = ioc + +def controller = ioc.getBean(CronJobController.class) + + + + +return controller.list(new CommonQuery()) +