// 取得需要发送订阅的用户名单 private List<Actor> findActors(List<Actor> actors, List<Actor> _actors) { if (actors == null) actors = new ArrayList<Actor>(); // 声明部门 单位 岗位下的用户临时变量 List<Actor> juniorActors; for (Actor actor : _actors) { // 用户 if (actor.getType() == Actor.TYPE_USER) { if (!actors.contains(actor)) { actors.add(actor); } } else if (actor.getType() == Actor.TYPE_GROUP) { // 岗位 juniorActors = this.actorService.findFollower( actor.getId(), new Integer[] {ActorRelation.TYPE_BELONG}, new Integer[] {Actor.TYPE_USER}); // 递归处理 if (juniorActors != null && juniorActors.size() > 0) findActors(actors, juniorActors); } else { // 部门 或 单位 juniorActors = this.actorService.findDescendantUser( actor.getId(), new Integer[] {BCConstants.STATUS_ENABLED}, Actor.TYPE_UNIT, Actor.TYPE_DEPARTMENT); // 递归处理 if (juniorActors != null && juniorActors.size() > 0) findActors(actors, juniorActors); } } return actors; }
@Override protected Condition getGridSpecalCondition() { AndCondition ac = new AndCondition(); // 查找当前登录用户条件 SystemContext context = (SystemContext) this.getContext(); // 当前用户 Actor actor = context.getUser(); // 定义id集合 List<Long> ids = new ArrayList<Long>(); // 查找属于当前用户 ids.add(actor.getId()); // 查找拥有的上级订阅 List<Actor> uppers = this.actorService.findAncestorOrganization( actor.getId(), new Integer[] {Actor.TYPE_GROUP, Actor.TYPE_DEPARTMENT, Actor.TYPE_UNIT}); for (Actor upper : uppers) { ids.add(upper.getId()); } // 使用in条件 ac.add(new InCondition("e.aid", ids)); // 不显示草稿的 ac.add(new NotEqualsCondition("s.status_", -1)); return ac; }
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); }