目前是按应用划分了不同的模块,应用模块主要是在/applications
下面。
如果应用A与应用B之间需要关联处理,通常是可以由应用A抽离出api接口,给应用B
去调用,针对强耦合的场景是可以这样做的。但是有些场景,是存在一定的变数,因此
不能把应用之间的关联处理耦合在一起。这样的场景,可以通过监听事件的方式来扩展。
// 发布事件
SpringContextHolder.getContext().publishEvent(new Event());
// 标准的业务操作事件
BizOperationEvent.save(baseDTO).publish();
BizOperationEvent.update(baseDTO).publish();
......
// 监听事件
@EventListener(Event.class)
public void onEvent(Event event) {
// do something
}
在oa模块的通知公告审核通过后,给企业微信发送全员消息
通知公告审核的业务,所在模块是/applications/app-oa/app-oa-service
,
代码在com.usoftchina.saas.oa.service.impl.NotifyServiceImpl.singleAudit
,
企业微信的扩展模块是/external/ext-qywx/ext-qywx-service
,
因为单据审核之后都会发布BizOperationEvent
事件,因此可以监听该事件来扩展通知公告的
审核业务,代码在com.usoftchina.saas.qywx.listener.NotifyAuditedListener.onBizAuditEvent
@Async
@EventListener(value = BizOperationEvent.class, condition = "#event.operation.name=='AUDIT' && #event.bizType=='Notify'")
public void onBizAuditEvent(BizOperationEvent event) throws Exception{
NotifyDTO dto = notifyApi.getById(event.getBizId());
messageSdk.send(...);
}
这样处理的好处是显而易见的,如果将来不用企业微信的功能了,直接去掉/external/ext-qywx/ext-qywx-service
模块即可,
对oa模块没任何影响。
给所有的操作都加上日志记录
因为单据每个操作之后都会发布BizOperationEvent
事件,因此可以监听该事件来扩展日志功能,
扩展模块是/base/base-biz/base-biz-service
,
代码在com.usoftchina.saas.biz.listener.MessageLogListener.onBizEvent
@EventListener(BizOperationEvent.class)
@Async
public void onBizEvent(BizOperationEvent event) {
messageLogService.log(event);
}