コード例 #1
0
  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);
  }
コード例 #2
0
  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);
  }