### 说明 目前是按应用划分了不同的模块,应用模块主要是在`/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); } ```