9-通用放行配置
以前使用放行的场景较少,统一在放行菜单中进行放行配置,然后在相应模块中添加功能,随着模块增加需要不断增加原表字段。为了提高可移植性和扩展性,做一个通用的放行配置。
1.设计思路
目的是为了使用一张统一的表,但是不再需要按 照模块来新增字段,采用key-value的设计模式,放行配置存储为json格式即可,按照模块设计唯一key,存储不同的放行配置。
考虑实际业务场景,放行配置和放行记录进行剥离,放行记录单独存储,同样采用key-value的方式,方便后期对记录的维护和追溯。
1.1.放行配置
ID | 模块 | 类型 | 放行配置json数据 | 放行人 | 放行原因 | 允许放行次数 | 放行有效时间 | 已放行此处 |
---|
还有一个condition字段,存储放行条件,这才是唯一key,模块+类型是进行业务区分,🎫 清洗板+清洗板放行,或者是清洗板+清洗烘烤,按照模块+类型区分,conditon则根据实际开发场景进行设计,需要唯一。
1.2.放行记录
ID | 关联ID | 模块 | 类型 | 放行配置json | 放行人 | 放行原因 | 执行人 | 执行时间 | 执行json(放行记录json) |
---|
放行配置提前配,触发放行条件,且成功的时候生成放行记录,关联ID为放行配置的ID,用来关联数据,同时需要记录本次放行的一个参数情况(json)。
2.实体设计
2.1.新增字段
原有实体类RepairReleaseRecord新增字段:
@ApiModelProperty(value = "模块名")
private String module;
@Lob
@Basic(fetch = FetchType.LAZY)
@MetaData("放行参数")
private String jsonData;
@ApiModelProperty(value = "放行条件")
private String condition;
@ApiModelProperty(value = "允许放行的次数")
private String releaseLimit;
@ApiModelProperty(value = "已放行的次数")
private String releaseNum;
@ApiModelProperty("放行的有效时间")
private String limitTime;
类型沿 用原来的limitType字段即可。
2.2.Json格式
需要确定好Json格式,要求后续开发者按照这个格式来传List进行接收,确保每次存入数据库的json参数格式一致。
要求: 前端需要动态构建放行配置和放行记录表单,所以JSON中需要包含字段名,值,以及字段的中文描述。
public class ReleaseJson implements Serializable {
private static final long serialVersionUID = 1L;
String desc;
String key;
String value;
}
- desc:字段描述
- key:字段名
- value:值
💁♂️ 其中这三个字段需要根据放行记录和放行配置进行区分,连两者都使用这个JSON格式存储,但是前缀区分,con-xxx为放行配置,re-xxx为放行记录
2.3.放行记录
public class ReleaseRecord extends BaseNativeEntity {
@MetaData("工厂")
private String site;
@MetaData("放行原因")
private String releaseReason;
@MetaData("放行人")
private String releasePerson;
@MetaData("模块类型")
private String module;
@MetaData("管控类型")
private String limitType;
@MetaData("放行条件")
private String condition;
@Lob
@Basic(fetch = FetchType.LAZY)
@MetaData("放行参数")
@Column(name = "JSON_DATA", columnDefinition="CLOB")
private String jsonData;
@MetaData("执行人")
private String operator;
@MetaData("执行时间")
private String operateTime;
@MetaData("关联ID")
private String corId;
@Lob
@MetaData("执行的JSON数据")
@Basic(fetch = FetchType.LAZY)
private String reJson;
}
记录JSON的数据字段采用CLOB,否则过长会出现数据库操作问题
3.前端动态设计
⚠️ 前端表单要求根据模块+类型动态渲染表单字段,上述说到JSON格式中按照con和re进行放行记录和放行配置数据的区分,JSON中也存储中字段描述解释和字段名。
个人对前端不精通,直接上代码: