From 34961791ca6d802f7bb8055b16771c9d00057f67 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期二, 10 十二月 2024 10:51:42 +0800
Subject: [PATCH] 1. 新增后台任务状态类的自定义序列化类 (解决解决BgTaskStatus类中计算属性runTime无法序列化的问题)2. 新增LocalDateTime类型的时间格式序列化和反序列化类 (解决BgTaskStatus类中LocalDateTime类型无法序列化为正确的时间格式问题)
---
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt | 5 ++
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java | 51 +++++++++++++++++++++++++
src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt | 6 ++
src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java | 30 +++++++++++++++
4 files changed, 91 insertions(+), 1 deletions(-)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
index 60bfcf4..93d036a 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
@@ -1,5 +1,7 @@
package cn.flightfeather.supervision.common.executor
+import cn.flightfeather.supervision.socket.LocalDateTimeAdapter
+import com.google.gson.annotations.JsonAdapter
import java.time.Duration
import java.time.LocalDateTime
@@ -15,12 +17,15 @@
var status: TaskStatus = TaskStatus.WAITING
// 寮�濮嬫椂闂�
+ @JsonAdapter(LocalDateTimeAdapter::class)
var startTime: LocalDateTime? = null
// 缁撴潫鏃堕棿
+ @JsonAdapter(LocalDateTimeAdapter::class)
var endTime: LocalDateTime? = null
// 鍒涘缓鏃堕棿
+ @JsonAdapter(LocalDateTimeAdapter::class)
var createTime: LocalDateTime = LocalDateTime.now()
// 杩愯鏃堕暱锛堢锛�
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java
new file mode 100644
index 0000000..b3afd37
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java
@@ -0,0 +1,51 @@
+package cn.flightfeather.supervision.common.executor;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * BgTaskStatus绫荤殑鑷畾涔夊簭鍒楀寲绫� 瑙e喅浜嗚绠楀睘鎬ф棤娉曞簭鍒楀寲鐨勯棶棰�
+ * by hc 2024.12.10
+ */
+public class BgTaskStatusJsonSerializer implements JsonSerializer<BgTaskStatus> {
+
+ @Override
+ public JsonElement serialize(BgTaskStatus bgTaskStatus, Type typeOfSrc, JsonSerializationContext context) {
+ JsonObject jsonObject = new JsonObject();
+ // 搴忓垪鍖杢ype
+ jsonObject.addProperty("type", String.valueOf(bgTaskStatus.getType()));
+ // 搴忓垪鍖杋d
+ jsonObject.addProperty("id", bgTaskStatus.getId());
+ // 搴忓垪鍖杗ame
+ jsonObject.addProperty("name", bgTaskStatus.getName());
+ // 搴忓垪鍖杝tatus
+ jsonObject.addProperty("status", bgTaskStatus.getStatus().ordinal());
+ // 搴忓垪鍖杝tartTime
+ jsonObject.addProperty("startTime", formatLocalDateTime(bgTaskStatus.getStartTime()));
+ // 搴忓垪鍖杄ndTime
+ jsonObject.addProperty("endTime", formatLocalDateTime(bgTaskStatus.getEndTime()));
+ // 搴忓垪鍖朿reateTime
+ jsonObject.addProperty("createTime", formatLocalDateTime(bgTaskStatus.getCreateTime()));
+ // 搴忓垪鍖� 璁$畻灞炴�unTime
+ jsonObject.addProperty("runTime", bgTaskStatus.getRunTime());
+ // 搴忓垪鍖杄xtra
+ if (bgTaskStatus.getExtra() != null) {
+ jsonObject.add("extra", context.serialize(bgTaskStatus.getExtra()));
+ }
+ return jsonObject;
+ }
+
+ private String formatLocalDateTime(LocalDateTime localDateTime) {
+ // 濡傛灉LocalDateTime涓簄ull锛屽垯杩斿洖null
+ if (localDateTime == null) {
+ return null;
+ }
+ // 鏍煎紡鍖朙ocalDateTime
+ return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime);
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt b/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
index f749e00..247b3a2 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
@@ -1,9 +1,13 @@
package cn.flightfeather.supervision.common.utils
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
+import cn.flightfeather.supervision.common.executor.BgTaskStatusJsonSerializer
import com.google.gson.Gson
import com.google.gson.GsonBuilder
object JsonUtil {
- val gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
+ val gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")
+ .registerTypeAdapter(BgTaskStatus::class.java, BgTaskStatusJsonSerializer())
+ .create()
}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java b/src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java
new file mode 100644
index 0000000..dedbf00
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java
@@ -0,0 +1,30 @@
+package cn.flightfeather.supervision.socket;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * LocalDateTime绫诲瀷鐨勬椂闂存牸寮忓簭鍒楀寲鍜屽弽搴忓垪鍖栫被
+ * by hc 2024.12.6
+ */
+public class LocalDateTimeAdapter implements JsonDeserializer<LocalDateTime>, JsonSerializer<LocalDateTime> {
+ private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ @Override
+ public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
+ return new JsonPrimitive(dateTimeFormatter.format(src));
+ }
+
+ @Override
+ public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ try {
+ return LocalDateTime.parse(json.getAsString(), dateTimeFormatter);
+ } catch (Exception e) {
+ throw new JsonParseException(e);
+ }
+ }
+}
+
--
Gitblit v1.9.3