diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectProgressCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectProgressCO.java index 6891b28..6729712 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectProgressCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectProgressCO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; +import java.util.List; /** * 项目进度管理列表项 @@ -43,4 +44,7 @@ public class EvalProjectProgressCO { @ApiModelProperty("项目进度状态名称:正常/项目临期/项目延期") private String progressStatusName; + + @ApiModelProperty("项目节点") + private List projectNode; } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/JsonStringListTypeHandler.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/JsonStringListTypeHandler.java index 1002edf..e6976b6 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/JsonStringListTypeHandler.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/JsonStringListTypeHandler.java @@ -1,6 +1,6 @@ package org.qinan.safetyeval.infrastructure.handler; -import com.alibaba.fastjson.JSON; +import cn.hutool.json.JSONUtil; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; @@ -27,7 +27,7 @@ public class JsonStringListTypeHandler extends BaseTypeHandler> { @Override public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, JSON.toJSONString(parameter)); + ps.setString(i, JSONUtil.toJsonStr(parameter)); } @Override @@ -49,6 +49,6 @@ public class JsonStringListTypeHandler extends BaseTypeHandler> { if (json == null || json.isEmpty()) { return Collections.emptyList(); } - return JSON.parseArray(json, String.class); + return JSONUtil.toList(json, String.class); } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/ProjectNodeListTypeHandler.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/ProjectNodeListTypeHandler.java new file mode 100644 index 0000000..5032742 --- /dev/null +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/ProjectNodeListTypeHandler.java @@ -0,0 +1,54 @@ +package org.qinan.safetyeval.infrastructure.handler; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.qinan.safetyeval.client.co.institution.EvalProjectNodeItemCO; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collections; +import java.util.List; + +/** + * MyBatis TypeHandler: 在数据库的 varchar/text 列中以 JSON 数组字符串形式存储 List。 + *

+ * 入库: List -> JSON.toJSONString -> String + * 出库: String -> JSON.parseArray -> List + * + * @author safety-eval + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +public class ProjectNodeListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSONUtil.toJsonStr(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return parse(rs.getString(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return parse(rs.getString(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return parse(cs.getString(columnIndex)); + } + + private List parse(String json) { + if (json == null || json.isEmpty()) { + return Collections.emptyList(); + } + return JSONUtil.toList(json, EvalProjectNodeItemCO.class); + } +} diff --git a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml index 54d25b7..b4b7598 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml @@ -3,8 +3,15 @@ + + + +