@Slf4j
@Component
public class ApprovalEventPublisher {
@Autowired
private ApplicationEventPublisher publisher;
@Autowired
private ProApprovalFlowNodeHandlerDomainService nodeHandlerService;
@Autowired
private ProApprovalFlowInstanceDomainService instanceService;
@Autowired
private ProApprovalFlowNodeDomainService nodeService;
/**
* 发布事件
*
* @param event 事件
*/
public void publishEvent(BaseEvent event) {
ProApprovalFlowInstanceDto flowInfo = event.getFlowInfo();
List<ProApprovalFlowNodeHandlerDto> nodeHandlerList =
nodeHandlerService.loadByInstanceAndNodeId(flowInfo.getFlowInstanceId(), flowInfo.getCurrentNode());
event.setCurHandlers(nodeHandlerList);
log.info("bizId : {} instance : {} preNode: {} CurNode: {}", flowInfo.getBizDataId(),
flowInfo.getFlowInstanceId(), flowInfo.getPreNodeCode(), flowInfo.getCurrentNodeCode());
publisher.publishEvent(event);
}
}
@Data
public abstract class BaseEvent {
private ProApprovalFlowInstanceDto flowInfo;
private List<ProApprovalFlowNodeHandlerDto> curHandlers;
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public BaseEvent(ProApprovalFlowInstanceDto flowInfo) {
this.flowInfo = flowInfo;
}
}
public class FinishedEvent extends BaseEvent {
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public FinishedEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}
public class NodeFinishedEvent extends BaseEvent {
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public NodeFinishedEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}
public class PendingEvent extends BaseEvent {
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public PendingEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}
@Getter
@Setter
public class ReferralEvent extends BaseEvent {
/** 转后审批人W3账号,当待办结果为转审时必填 */
private String forwardUser;
/** 转后审批人名称,当待办结果为转审时必填 */
private String forwardUserName;
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public ReferralEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}
public class RejectEvent extends BaseEvent {
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public RejectEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}
public class RevokeEvent extends BaseEvent {
/**
* BaseEvent构造器
*
* @param flowInfo 流程信息
*/
public RevokeEvent(ProApprovalFlowInstanceDto flowInfo) {
super(flowInfo);
}
}