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