feat(mms-mapping): 添加ICD校验结果保存功能支持文件上传

- 在CsIcdPathController中添加POST接口支持multipart表单上传ICD文件
- 实现saveIcdCheckResultWithFile方法处理文件上传和校验结果保存
- 添加fillIcdFile方法处理ICD文件内容填充到参数对象
- 在CsIcdPathPO中将Icd_Content字段重命名为Icd并使用JsonNodeTypeHandler处理JSON转换
- 更新resultMap配置使用新的字段映射关系
- 修改ICD一致性校验服务的日志记录和校验逻辑
- 移除自动修正映射差异的功能,只保留一致性检查
- 优化测试用例验证ICD校验结果保存和文件上传功能
This commit is contained in:
2026-06-16 13:25:12 +08:00
parent fd6e5097d7
commit 7fb4c8e78a
14 changed files with 422 additions and 147 deletions

View File

@@ -3,8 +3,28 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.gather.device.types.mapper.CsDevTypeMapper">
<resultMap id="DeviceTypeVOResultMap"
type="com.njcn.gather.device.types.pojo.vo.DeviceTypeVO">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="icdId" property="icdId"/>
<result column="icdName" property="icdName"/>
<result column="icdPath" property="icdPath"/>
<result column="icdResult" property="icdResult"/>
<result column="icdMsg" property="icdMsg"
typeHandler="com.njcn.gather.device.types.typehandler.JsonNodeTypeHandler"/>
<result column="power" property="power"/>
<result column="devVolt" property="devVolt"/>
<result column="devCurr" property="devCurr"/>
<result column="devChns" property="devChns"/>
<result column="waveCmd" property="waveCmd"/>
<result column="reportName" property="reportName"/>
<result column="canCheckIcd" property="canCheckIcd"/>
<result column="canCheckPqdif" property="canCheckPqdif"/>
</resultMap>
<select id="selectDeviceTypeCheckList"
resultType="com.njcn.gather.device.types.pojo.vo.DeviceTypeVO">
resultMap="DeviceTypeVOResultMap">
SELECT
d.id AS id,
d.name AS name,

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.device.types.pojo.vo;
import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -29,8 +30,8 @@ public class DeviceTypeVO {
@ApiModelProperty("ICD校验结论0-否1-是")
private Integer icdResult;
@ApiModelProperty("ICD校验结论描述")
private String icdMsg;
@ApiModelProperty("ICD校验结论详情JSON")
private JsonNode icdMsg;
@ApiModelProperty("功率字典code不带单位单位由前端展示")
private String power;

View File

@@ -0,0 +1,51 @@
package com.njcn.gather.device.types.typehandler;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 将 ICD 校验详情 JSON 映射为结构化对象。
*/
public class JsonNodeTypeHandler extends BaseTypeHandler<JsonNode> {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override
public void setNonNullParameter(PreparedStatement ps, int i, JsonNode parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, parameter.toString());
}
@Override
public JsonNode getNullableResult(ResultSet rs, String columnName) throws SQLException {
return parse(rs.getString(columnName));
}
@Override
public JsonNode getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return parse(rs.getString(columnIndex));
}
@Override
public JsonNode getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return parse(cs.getString(columnIndex));
}
private JsonNode parse(String value) throws SQLException {
if (value == null || value.trim().isEmpty()) {
return null;
}
try {
return OBJECT_MAPPER.readTree(value);
} catch (Exception ex) {
throw new SQLException("解析JSON字段失败", ex);
}
}
}