@Override
public void audit(RealAuth realAuth) {
RealAuth old=realauthMapper.selectByPrimaryKey(realAuth.getId());
Userinfo applier=userinfoService.get(old.getApplier().getId());
if(old!=null && RealAuth.STATE_NORMAL==old.getState()) {
if(!applier.getIsRealAuth() && realAuth.getId().equals(applier.getRealAuthId())) {
old.setRemark(realAuth.getRemark());
old.setAuditor(UserContext.getCurrent());
old.setAuditTime(new Date());
old.setState(realAuth.getState());
realauthMapper.updateByPrimaryKey(old);
if(RealAuth.STATE_AUDIT==realAuth.getState()) {
// 修改成功實(shí)名認(rèn)證成功
applier.addState(BitStatesUtils.OP_REAL_AUTH);
// 實(shí)名認(rèn)證成功后,發(fā)送短信
// 實(shí)名認(rèn)證成功后,發(fā)送郵件
}else {
applier.setRealAuthId(null);
}
userinfoService.update(applier);
}
}
}
上面的代碼,需要在實(shí)名認(rèn)證成功后發(fā)送短信和郵件。但這些事情并不屬于實(shí)名認(rèn)證的事情,而且后續(xù)需求可能更改,不止需要發(fā)短信和郵件可能還要做一些別的事情,一旦需求更改,這里的代碼也要更改。所以盡量將實(shí)名認(rèn)證后需要做的事情和實(shí)名認(rèn)證本身解耦
利用spring的事件監(jiān)聽
1、創(chuàng)建消息對象
@Getter
public class RealAuthSuccessEvent extends ApplicationEvent {
private RealAuth realAuth;
public RealAuthSuccessEvent(Object source, RealAuth realAuth) {
super(source);
this.realAuth = realAuth;
}
}
2、創(chuàng)建監(jiān)聽器
@Service
public class SmsServiceImpl implements ISmsService ,ApplicationListener<RealAuthSuccessEvent>{
@Override
public void onApplicationEvent(RealAuthSuccessEvent event) {
this.realAuthSendSms(event.getRealAuth());
}
private void realAuthSendSms(RealAuth realAuth) {
System.out.println(realAuth.getApplier().getUsername()+"實(shí)名認(rèn)證成功");
}
}
3、發(fā)布消息
@Autowired
private ApplicationContext ctx;
@Override
public void audit(RealAuth realAuth) {
RealAuth old=realauthMapper.selectByPrimaryKey(realAuth.getId());
Userinfo applier=userinfoService.get(old.getApplier().getId());
if(old!=null && RealAuth.STATE_NORMAL==old.getState()) {
if(!applier.getIsRealAuth() && realAuth.getId().equals(applier.getRealAuthId())) {
old.setRemark(realAuth.getRemark());
old.setAuditor(UserContext.getCurrent());
old.setAuditTime(new Date());
old.setState(realAuth.getState());
realauthMapper.updateByPrimaryKey(old);
if(RealAuth.STATE_AUDIT==realAuth.getState()) {
// 修改成功實(shí)名認(rèn)證成功
applier.addState(BitStatesUtils.OP_REAL_AUTH);
// 實(shí)名認(rèn)證成功后,發(fā)布消息
ctx.publishEvent(new RealAuthSuccessEvent(this, realAuth));
}else {
applier.setRealAuthId(null);
}
userinfoService.update(applier);
}
}
}
4、如果需要監(jiān)聽多個(gè)消息對象
@Service
public class SmsServiceImpl implements ISmsService ,ApplicationListener<ApplicationEvent>{
@Override
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof RealAuthSuccessEvent) {
RealAuthSuccessEvent e = (RealAuthSuccessEvent) event;
this.realAuthSendSms(e.getRealAuth());
}
}
private void realAuthSendSms(RealAuth realAuth) {
System.out.println(realAuth.getApplier().getUsername()+"實(shí)名認(rèn)證成功");
}
}

image.png