From bb69d7a4bdfbb90cde19b3d828f490ab10f2bb43 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期一, 02 二月 2026 15:44:33 +0800
Subject: [PATCH] 库区增加序号

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/AreasTypeHandler.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/AreasTypeHandler.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/AreasTypeHandler.java
new file mode 100644
index 0000000..19ca21a
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/AreasTypeHandler.java
@@ -0,0 +1,115 @@
+package com.vincent.rsf.server.manager.utils;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author chen.lin
+ * @time 2026-02-02
+ * Areas 瀛楁鑷畾涔� TypeHandler
+ * 澶勭悊鏁版嵁搴撳拰 Java 瀵硅薄涔嬮棿鐨勮浆鎹�
+ * 鏀寔涓ょ鏍煎紡锛�
+ * 1. [1, 2, 3] - 绾疘D鏁扮粍锛堝悜鍚庡吋瀹癸級
+ * 2. [{"id": 1, "sort": 1}, {"id": 2, "sort": 2}] - 瀵硅薄鏁扮粍锛堟柊鏍煎紡锛�
+ *
+ */
+@MappedTypes({List.class})
+@MappedJdbcTypes(JdbcType.VARCHAR)
+public class AreasTypeHandler extends BaseTypeHandler<List<Map<String, Object>>> {
+
+    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final TypeReference<List<Object>> LIST_TYPE_REF = new TypeReference<List<Object>>() {};
+
+    /**
+     * 瑙f瀽 JSON 瀛楃涓蹭负 List<Map<String, Object>>
+     */
+    private List<Map<String, Object>> parse(String json) {
+        if (json == null || json.trim().isEmpty()) {
+            return new ArrayList<>();
+        }
+        
+        try {
+            // 鍏堣В鏋愪负 List<Object>
+            List<Object> rawList = OBJECT_MAPPER.readValue(json, LIST_TYPE_REF);
+            
+            if (rawList == null || rawList.isEmpty()) {
+                return new ArrayList<>();
+            }
+            
+            List<Map<String, Object>> result = new ArrayList<>();
+            
+            // 閬嶅巻鎵�鏈夊厓绱犲苟杞崲
+            for (int i = 0; i < rawList.size(); i++) {
+                Object item = rawList.get(i);
+                
+                if (item instanceof Map) {
+                    // 宸茬粡鏄璞℃暟缁勬牸寮� [{"id": 1, "sort": 1}]
+                    @SuppressWarnings("unchecked")
+                    Map<String, Object> map = (Map<String, Object>) item;
+                    result.add(map);
+                } else if (item instanceof Number) {
+                    // 绾疘D鏁扮粍鏍煎紡 [1, 2, 3]锛岃浆鎹负瀵硅薄鏁扮粍
+                    Map<String, Object> area = new HashMap<>();
+                    area.put("id", ((Number) item).intValue());
+                    area.put("sort", i + 1);
+                    result.add(area);
+                }
+                // 蹇界暐鍏朵粬绫诲瀷
+            }
+            
+            return result;
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to parse areas JSON: " + json, e);
+        }
+    }
+
+    /**
+     * 灏� List<Map<String, Object>> 杞崲涓� JSON 瀛楃涓�
+     */
+    private String toJson(List<Map<String, Object>> obj) {
+        if (obj == null) {
+            return null;
+        }
+        try {
+            return OBJECT_MAPPER.writeValueAsString(obj);
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to serialize areas to JSON", e);
+        }
+    }
+
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, List<Map<String, Object>> parameter, JdbcType jdbcType) throws SQLException {
+        ps.setString(i, toJson(parameter));
+    }
+
+    @Override
+    public List<Map<String, Object>> getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        String json = rs.getString(columnName);
+        return parse(json);
+    }
+
+    @Override
+    public List<Map<String, Object>> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        String json = rs.getString(columnIndex);
+        return parse(json);
+    }
+
+    @Override
+    public List<Map<String, Object>> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        String json = cs.getString(columnIndex);
+        return parse(json);
+    }
+}

--
Gitblit v1.9.1