public void onApplicationEvent(SubscribeEvent event) { Assert.assertNotNull(event); Assert.assertNotNull(event.getCode()); Assert.assertNotNull(event.getSubject()); if (logger.isDebugEnabled()) { logger.debug("eventCode:" + event.getCode()); logger.debug("eventSubject:" + event.getSubject()); logger.debug("eventContent:" + event.getContent()); } // 查找系统中是否 拥有此订阅 Subscribe sb = this.subscribeService.loadByEventCode(event.getCode()); // 声明订阅用户 List<Actor> actors; // 先排除不发送订阅情况 if (sb == null) { if (logger.isDebugEnabled()) logger.debug("Subscribe is null!"); return; } if (sb.getStatus() != BCConstants.STATUS_ENABLED) { if (logger.isDebugEnabled()) logger.debug("Subscribe status is not enabled!"); return; } // 取得需要发送订阅的用户名单 actors = this.findActors(null, this.subscribeActorService.findList2Actor(sb)); if (actors == null || actors.size() == 0) { if (logger.isDebugEnabled()) logger.debug("SubscribeActor size equal 0!"); return; } // 日志记录 OperateLog worklog = new OperateLog(); worklog.setPtype(Subscribe.class.getSimpleName()); worklog.setPid(sb.getId() + ""); worklog.setType(OperateLog.TYPE_WORK); // 工作日志 worklog.setWay(OperateLog.WAY_SYSTEM); worklog.setOperate(OperateLog.OPERATE_CREATE); worklog.setFileDate(Calendar.getInstance()); // 超级管理员 worklog.setAuthor(this.actorHistoryService.loadByCode("admin")); worklog.setUid(this.idGeneratorService.next("WorkLog")); worklog.setSubject("发送订阅:" + event.getSubject()); worklog.setContent(""); // 发送邮件 this.sendEmail(event, actors, worklog); // 保存日志 this.operateLogService.save(worklog); }
private void sendEmail(SubscribeEvent event, List<Actor> actors, OperateLog worklog) { // 工作日志的详细内容 String worklog_content = worklog.getContent(); Email email = new Email(); worklog_content += "发送方式:邮件["; String emailUid = this.idGeneratorService.nexttvak(Email.ATTACH_TYPE); email.setUid(emailUid); email.setStatus(Email.STATUS_SENDED); email.setType(Email.TYPE_NEW); email.setFileDate(Calendar.getInstance()); email.setSendDate(Calendar.getInstance()); email.setSubject(event.getSubject()); worklog_content += "邮件主题: " + event.getSubject(); Map<String, Object> args = new HashMap<String, Object>(); args.put("content", event.getContent()); // 根据事件的CODE 加上 “-EMAIL”后缀 查找模板中是否有配置 自定义的模板 Template custom = this.templateService.loadByCode(event.getCode() + "-EMAIL"); if (custom != null) { email.setContent(this.templateService.format(custom.getCode(), args)); } else { // 使用默认的邮件模板 email.setContent(this.templateService.format("BC-EMAIL-SYSTEMAUTOFORWARD", args)); } worklog_content += ",邮件内容: " + event.getContent(); // 系统管理员发送 Actor admin = this.actorService.loadByCode("admin"); email.setSender(admin); if (event.getAttachs() != null) { for (Attach attach : event.getAttachs()) { // 复制附件 this.attachService.doCopy( attach.getPtype(), attach.getPuid(), Email.ATTACH_TYPE, emailUid, true); } } // 设置发送人 Set<EmailTo> emailTos = new HashSet<EmailTo>(); worklog_content += ",邮件接收人:"; EmailTo et; int i = 0; for (Actor a : actors) { et = new EmailTo(); et.setEmail(email); et.setRead(false); et.setReceiver(a); // 正常发送 et.setType(EmailTo.TYPE_TO); et.setOrderNo(i); emailTos.add(et); if (i > 0) worklog_content += "、"; worklog_content += a.getName(); i++; } worklog_content += "]"; worklog.setContent(worklog_content); email.setTos(emailTos); this.emailService.save(email); }