From a1d1d928893c33fad6694b2503a425ab29af0a15 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 04 三月 2026 14:52:49 +0800
Subject: [PATCH] 云仓WMS接口流程

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java |   64 ++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java
new file mode 100644
index 0000000..025526e
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java
@@ -0,0 +1,64 @@
+package com.vincent.rsf.openApi.entity.params;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * 灏� JSON 鍙嶅簭鍒楀寲涓� Unix 鏃堕棿鎴筹紙绉掞紝Long锛夈��
+ * 鏀寔锛氭暟瀛楋紙绉掓垨姣锛夈�佸瓧绗︿覆 "yyyy-MM-dd HH:mm:ss" 鎴� "yyyy-MM-dd"銆�
+ */
+public class FlexibleTimestampDeserializer extends JsonDeserializer<Long> {
+
+    private static final long MS_THRESHOLD = 10_000_000_000L; // 澶т簬姝や负姣
+    private static final TimeZone DEFAULT_TZ = TimeZone.getTimeZone("GMT+8");
+
+    @Override
+    public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        JsonToken t = p.getCurrentToken();
+        if (t == JsonToken.VALUE_NUMBER_INT || t == JsonToken.VALUE_NUMBER_FLOAT) {
+            long v = p.getLongValue();
+            return v >= MS_THRESHOLD ? v / 1000 : v;
+        }
+        if (t == JsonToken.VALUE_STRING) {
+            String s = p.getText().trim();
+            if (s.isEmpty()) {
+                return null;
+            }
+            try {
+                long v = Long.parseLong(s);
+                return v >= MS_THRESHOLD ? v / 1000 : v;
+            } catch (NumberFormatException ignored) {
+            }
+            try {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                sdf.setTimeZone(DEFAULT_TZ);
+                sdf.setLenient(false);
+                Date d = sdf.parse(s);
+                return d != null ? d.getTime() / 1000 : null;
+            } catch (Exception ignored) {
+            }
+            if (s.length() >= 10 && s.charAt(4) == '-' && s.charAt(7) == '-') {
+                try {
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    sdf.setTimeZone(DEFAULT_TZ);
+                    sdf.setLenient(false);
+                    Date d = sdf.parse(s.substring(0, 10));
+                    return d != null ? d.getTime() / 1000 : null;
+                } catch (Exception ignored) {
+                }
+            }
+            return null;
+        }
+        if (t == JsonToken.VALUE_NULL) {
+            return null;
+        }
+        return (Long) ctxt.handleUnexpectedToken(Long.class, p);
+    }
+}

--
Gitblit v1.9.1