需求背景:
在对接第三方系统(例OA),不同业务表单,在OA最终审批完成后,需要不同的业务实现类,实现OA审批通过或驳回后的业务逻辑。
方案:由于OA回调的接口统一,只需要返回OA单号+OA审批状态+业务类型编码,所以使用Spring内部广播通知机制实现,具体业务通过监听机,监听对应的业务类型,实现OA最终状态后的业务逻辑处理。
第一步:创建OaEvent
/**
* oa表单回调事件
*/
@Getter
@Setter
public class OaEvent extends ApplicationEvent {
/**oa单号*/
private String oaNum;
/**1-审批通过,-1-审批驳回*/
private Integer status;
/**
* @param source 业务类型唯一标识
* @param oaNum oa单号
* @param status 审批状态
*/
public OaEvent(Object source, String oaNum, Integer status) {
super(source);
this.oaNum = oaNum;
this.status = status;
}
}
第二步:发送OA审批状态回调事件
OaEvent event = new OaEvent("oa.sys.from.add", "123456", 1);
publisher.publishEvent(event);
第三步:创建监听,接收OaEvent事件,备注:@EventListener(classes = {OaEvent.class}, condition = "#root.event.source == 'oa.sys.from.add'") // classes-监听指定的实现ApplicationEvent.class的事件类,condition-通过条件填写
@Async //spring 事件机制默认为同步,只有加上@Async,监听才是异步执行
@EventListener(classes = {OaEvent.class}, condition = "#root.event.source == 'oa.sys.from.add'") // classes-监听指定的实现ApplicationEvent.class的事件类,condition-通过条件填写
protected void listenOaEvent(OaEvent event) {
//处理对应的业务逻辑
System.out.println(JSON.toJSONString(event));
}