package jnpf.elnEntity.formula; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Version; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Data; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.io.Serializable; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.Date; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @Data @TableName(value = "eln_template_formula_binding", autoResultMap = true) public class ElnTemplateFormulaBindingEntity implements Serializable { private static final long serialVersionUID = 1L; @TableId("f_id") private String id; @TableField("muban_id") private String mubanId; @TableField("gongshi_dingyi_id") private String gongshiDingyiId; @TableField("gongshi_banben_id") private String gongshiBanbenId; @TableField(value = "canshu_yingshe", jdbcType = JdbcType.OTHER, typeHandler = ParameterMappingTypeHandler.class) private Map canshuYingshe = new LinkedHashMap<>(); @TableField("jieguo_bangding_id") private String jieguoBangdingId; @TableField("bangding_zhuangtai") private String bangdingZhuangtai; @TableField("tuopu_xuhao") private Integer tuopuXuhao; @TableField("caozuo_bianma") private String caozuoBianma; @TableField(value = "jieguo_suo_kuaizhao", jdbcType = JdbcType.OTHER, typeHandler = ControlSnapshotListTypeHandler.class) private List jieguoSuoKuaizhao = new ArrayList<>(); @TableField("laiyuan_gongshi_bangding_id") private String laiyuanGongshiBangdingId; @TableField("daoqi_shijian") private Date daoqiShijian; @TableField("zhuangtai_yuanyin") private String zhuangtaiYuanyin; @TableField("f_tenant_id") private String fTenantId; @Version @TableField("f_version") private Integer fVersion; @TableField(value = "f_creator_user_id", fill = FieldFill.INSERT) private String fCreatorUserId; @TableField(value = "f_creator_time", fill = FieldFill.INSERT) private Date fCreatorTime; @TableField(value = "f_last_modify_user_id", fill = FieldFill.INSERT_UPDATE) private String fLastModifyUserId; @TableField(value = "f_last_modify_time", fill = FieldFill.INSERT_UPDATE) private Date fLastModifyTime; @TableField("f_delete_user_id") private String fDeleteUserId; @TableField("f_delete_time") private Date fDeleteTime; @TableField("f_delete_mark") private Integer fDeleteMark; public static final class ParameterMappingTypeHandler extends BaseTypeHandler> { private static final ObjectMapper MAPPER = new ObjectMapper(); private static final TypeReference> TYPE = new TypeReference>() { }; @Override public void setNonNullParameter(PreparedStatement statement, int index, Map parameter, JdbcType jdbcType) throws SQLException { try { statement.setObject(index, MAPPER.writeValueAsString(parameter), Types.OTHER); } catch (Exception ex) { throw new SQLException("公式参数映射序列化失败", ex); } } @Override public Map getNullableResult(ResultSet rs, String name) throws SQLException { return parse(rs.getString(name)); } @Override public Map getNullableResult(ResultSet rs, int index) throws SQLException { return parse(rs.getString(index)); } @Override public Map getNullableResult(CallableStatement cs, int index) throws SQLException { return parse(cs.getString(index)); } private static Map parse(String json) throws SQLException { if (json == null) return null; try { return MAPPER.readValue(json, TYPE); } catch (Exception ex) { throw new SQLException("公式参数映射解析失败", ex); } } } public static final class ControlSnapshotListTypeHandler extends BaseTypeHandler> { private static final ObjectMapper MAPPER = new ObjectMapper(); private static final TypeReference> TYPE = new TypeReference>() { }; @Override public void setNonNullParameter(PreparedStatement statement, int index, List parameter, JdbcType jdbcType) throws SQLException { try { statement.setObject(index, MAPPER.writeValueAsString(parameter), Types.OTHER); } catch (Exception ex) { throw new SQLException("公式结果锁快照序列化失败", ex); } } @Override public List getNullableResult(ResultSet rs, String name) throws SQLException { return parse(rs.getString(name)); } @Override public List getNullableResult(ResultSet rs, int index) throws SQLException { return parse(rs.getString(index)); } @Override public List getNullableResult(CallableStatement cs, int index) throws SQLException { return parse(cs.getString(index)); } private static List parse(String json) throws SQLException { if (json == null) return new ArrayList<>(); try { return MAPPER.readValue(json, TYPE); } catch (Exception ex) { throw new SQLException("公式结果锁快照解析失败", ex); } } } }