public abstract class AbstractFlowHandler<T> extends Object
流程处理抽象父类
| 构造器和说明 |
|---|
AbstractFlowHandler() |
| 限定符和类型 | 方法和说明 |
|---|---|
protected void |
afterProcess(T bizEntity)
审批流处理后的回调方法,比如需要持久化到数据库的操作,可以放到此方法中进行
|
protected abstract List<FlowBasic> |
authPermission(List<FlowBasic> currentFlows,
String user)
根据当前用户,一级FlowBasic的handleRoles信息校验权限,返回有权限处理的Flow列表,无权限返回空即可,交给用户在子类中实现
|
protected List<FlowBasic> |
findCurrentFlows(String approvalStatus,
String action,
Long roundId)
获取当前状态下的,当前审批动作时的所有审批环节,单签时只有一个,会签或者并签时会有多个,并签时不包括已经审批完毕的审批环节
|
protected String |
findNextStatus(T bizEntity,
String nextStatus)
如果NEXT STATUS是表达式,需要使用beetl规则引擎工具类解析一下
|
String |
getApprovalStatusField()
获取当前审批状态字段名称,默认为approvalStatus,当一个实体需要同时开启多条审批流是需要返回不同字段作为区分
|
String |
getApprovalStatusJsonField()
获取当前审批状态json字段名称,默认为approvalStatusJson,当一个实体需要同时开启多条审批流是需要返回不同字段作为区分
|
Set<String> |
getApprovedStatus()
获取所有最终审批通过的状态,即所有Last Task为1的next status集合
|
String |
getAroundIdField()
获取当前流程处理器的流程名称,默认为flowAroundId,当一个实体需要同时开启多条审批流是需要返回不同字段作为区分
|
protected abstract String |
getEntityName()
获取当前流程处理器的实体名称
|
FlowRootVo |
getFlowMetaInfoV1(T bizEntity)
获取审批流元数据信息,用于前端流程可视化展示,查询出所有正向流程梳理,即taskOrder大于0,允许非有向无环图的场景,如果是通过规则引擎判断分支的场景需要在nextStatusAlias中配置json字段
|
FlowRootVo |
getFlowMetaInfoV2(T bizEntity)
获取审批流元数据信息,用于前端流程可视化展示,查询出所有正向流程梳理,即taskOrder大于0,按先后排序后返回,必须是有向无环图的场景,如果是通过规则引擎判断分支的场景需要通过业务实体的实际值判断出分支走向,把实际要走过的最终线路返回
|
protected abstract String |
getFlowName()
获取当前流程处理器的流程名称,不同的审批流要使用不同名称进行区分
|
List<FlowLog> |
getHistoryFlowLog(T bizEntity,
boolean currentAround)
获取当前单据的所有历史审批日志,按时间降序排列
|
String |
getIdFiled() |
String |
getInitialStatus()
获取初始提交状态,Task Order为1的记录的prev status
|
String |
getLastAuditByField() |
String |
getLastAuditDateFiled() |
String |
getLastAuditMessageFiled() |
String |
getLastSubmitByField() |
String |
getLastSubmitDateFiled() |
String |
getLastSubmitMessageFiled() |
Set<String> |
getRejectedStatus()
获取所有最终驳回的状态,即所有Last Task为-1的next status集合
|
Set<String> |
getTodoStatus(TodoEnum todoEnum,
Set<String> roles)
获取待办状态
|
void |
initApprovalStatus(T bizEntity)
初始化approvalStatus和approvalStatusJson字段为初始状态值
|
List<FlowBasic> |
process(T bizEntity,
String action,
String comment,
String user,
boolean isSubmit,
boolean isRestart)
流程入口处理方法
|
protected void |
saveFlowLogs(List<FlowBasic> canHandleFlows,
String nextStatus,
String comment,
String user,
Long orderId,
Long flowRoundId) |
protected void |
setAuditField(T bizEntity,
String comment,
String user) |
protected Long |
setFlowRoundId(T bizEntity,
String user,
boolean isSubmit)
判断是否需要新开启一轮新的审批,如果是则新生成一个Round id
当需要记录审批前后单据对象字段值变化情况时,需要子类复写,主要将变化前后的json字符串保存至ChangeRecord字段中
|
protected void |
setSubmitField(T bizEntity,
String comment,
String user) |
protected String |
startProcess(List<FlowBasic> currentFlows,
List<FlowBasic> canHandleFlows,
T bizEntity)
开始处理流程
|
String |
todoSql(Set<String> statusSet,
String prefix)
根据状态集合和APPROVAL_STATUS_JSON字段拼装查询sql语句,如果状态集合为空则直接返回空字符串
|
boolean |
verifyHandleAccess(T bizEntity,
String user)
判断当前用户是否有权限提交或者审批当前单据对象
|
protected void |
verifyParam(T bizEntity,
String action,
String comment,
String user)
默认的校验参数,实际业务如果有特殊要求,可在子类中复写
|
public List<FlowBasic> process(T bizEntity, String action, String comment, String user, boolean isSubmit, boolean isRestart)
bizEntity - 实体对象comment - 提交或者审批意见action - 审批动作,如提交、驳回、通过,根据实际流程配置传入user - 处理用户isSubmit - 是否是提交动作isRestart - 用于判断是否重新开启一个新的审批回合protected void afterProcess(T bizEntity)
bizEntity - 业务实体protected void saveFlowLogs(List<FlowBasic> canHandleFlows, String nextStatus, String comment, String user, Long orderId, Long flowRoundId)
protected String startProcess(List<FlowBasic> currentFlows, List<FlowBasic> canHandleFlows, T bizEntity)
currentFlows - 当前所有可处理环节canHandleFlows - 用户有权限处理的环节bizEntity - 业务实体protected String findNextStatus(T bizEntity, String nextStatus)
bizEntity - 业务实体nextStatus - 下一个状态protected abstract List<FlowBasic> authPermission(List<FlowBasic> currentFlows, String user)
currentFlows - 当前状态下的所有待处理环节user - 当前操作用户protected List<FlowBasic> findCurrentFlows(String approvalStatus, String action, Long roundId)
approvalStatus - 当前状态action - 提交、审批或驳回等roundId - 回合id,用于并签时,通过查询审批日志判断哪些已经审批完成了,过滤掉protected Long setFlowRoundId(T bizEntity, String user, boolean isSubmit)
bizEntity - 业务实体user - 操作用户isSubmit - 是否是提交动作,用于判断是否重新开启一个新的审批回合protected void verifyParam(T bizEntity, String action, String comment, String user)
bizEntity - 业务实体comment - 提交备注或审批意见action - 提交、驳回、通过等user - 操作用户public void initApprovalStatus(T bizEntity)
bizEntity - 业务实体public String getInitialStatus()
public Set<String> getApprovedStatus()
public Set<String> getRejectedStatus()
public boolean verifyHandleAccess(T bizEntity, String user)
bizEntity - 单据实体user - 当前用户public Set<String> getTodoStatus(TodoEnum todoEnum, Set<String> roles)
todoEnum - todoEnumroles - 是否限制按当前用户角色进行限制public String todoSql(Set<String> statusSet, String prefix)
statusSet - 状态集合prefix - 是否限制表前缀,“表名.”public FlowRootVo getFlowMetaInfoV1(T bizEntity)
bizEntity - 业务实体public FlowRootVo getFlowMetaInfoV2(T bizEntity)
bizEntity - 业务实体public List<FlowLog> getHistoryFlowLog(T bizEntity, boolean currentAround)
bizEntity - 单据idcurrentAround - 是否限制为当前审批回合内的日志public String getIdFiled()
public String getLastAuditMessageFiled()
public String getLastAuditByField()
public String getLastAuditDateFiled()
public String getLastSubmitMessageFiled()
public String getLastSubmitByField()
public String getLastSubmitDateFiled()
public String getApprovalStatusField()
public String getApprovalStatusJsonField()
public String getAroundIdField()
protected abstract String getFlowName()
protected abstract String getEntityName()
Copyright © 2020. All rights reserved.