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