use of io.metersphere.notice.domain.Receiver in project metersphere by metersphere.
the class AbstractNoticeSender method getRealUserIds.
private List<Receiver> getRealUserIds(MessageDetail messageDetail, NoticeModel noticeModel, String event) {
List<Receiver> toUsers = new ArrayList<>();
Map<String, Object> paramMap = noticeModel.getParamMap();
for (String userId : messageDetail.getUserIds()) {
switch(userId) {
case NoticeConstants.RelatedUser.EXECUTOR:
if (StringUtils.equals(NoticeConstants.Event.CREATE, event)) {
List<String> relatedUsers = (List<String>) paramMap.get("userIds");
if (CollectionUtils.isNotEmpty(relatedUsers)) {
List<Receiver> receivers = relatedUsers.stream().map(u -> new Receiver(u, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
toUsers.addAll(receivers);
}
}
break;
case NoticeConstants.RelatedUser.CREATOR:
String creator = (String) paramMap.get("creator");
String createUser = (String) paramMap.get("createUser");
String createUserId = (String) paramMap.get("createUserId");
String userId1 = (String) paramMap.get("userId");
if (StringUtils.isNotBlank(userId1)) {
toUsers.add(new Receiver(userId1, NotificationConstants.Type.SYSTEM_NOTICE.name()));
} else if (StringUtils.isNotBlank(creator)) {
toUsers.add(new Receiver(creator, NotificationConstants.Type.SYSTEM_NOTICE.name()));
} else if (StringUtils.isNotBlank(createUser)) {
toUsers.add(new Receiver(createUser, NotificationConstants.Type.SYSTEM_NOTICE.name()));
} else if (StringUtils.isNotBlank(createUserId)) {
toUsers.add(new Receiver(createUserId, NotificationConstants.Type.SYSTEM_NOTICE.name()));
}
break;
case NoticeConstants.RelatedUser.MAINTAINER:
if (StringUtils.equals(NoticeConstants.Event.COMMENT, event)) {
List<String> relatedUsers = (List<String>) paramMap.get("userIds");
if (CollectionUtils.isNotEmpty(relatedUsers)) {
List<Receiver> receivers = relatedUsers.stream().map(u -> new Receiver(u, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
toUsers.addAll(receivers);
}
}
break;
case NoticeConstants.RelatedUser.FOLLOW_PEOPLE:
toUsers.addAll(handleFollows(messageDetail, noticeModel));
break;
case NoticeConstants.RelatedUser.PROCESSOR:
String customFields = (String) paramMap.get("customFields");
JSONArray array = JSON.parseArray(customFields);
for (Object o : array) {
JSONObject jsonObject = JSON.parseObject(o.toString());
if (StringUtils.equals(jsonObject.getString("name"), "处理人")) {
String processor = jsonObject.getString("value");
toUsers.add(new Receiver(processor, NotificationConstants.Type.SYSTEM_NOTICE.name()));
break;
}
}
break;
default:
toUsers.add(new Receiver(userId, NotificationConstants.Type.MENTIONED_ME.name()));
break;
}
}
// 去重复
return toUsers.stream().distinct().collect(Collectors.toList());
}
use of io.metersphere.notice.domain.Receiver in project metersphere by metersphere.
the class MailNoticeSender method sendExternalMail.
public void sendExternalMail(String context, NoticeModel noticeModel) throws MessagingException {
LogUtil.debug("发送邮件开始 ");
JavaMailSenderImpl javaMailSender = mailService.getMailSender();
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
if (javaMailSender.getUsername().contains("@")) {
helper.setFrom(javaMailSender.getUsername());
} else {
String mailHost = javaMailSender.getHost();
String domainName = mailHost.substring(mailHost.indexOf(".") + 1, mailHost.length());
helper.setFrom(javaMailSender.getUsername() + "@" + domainName);
}
LogUtil.debug("发件人地址" + javaMailSender.getUsername());
LogUtil.debug("helper" + helper);
helper.setSubject(noticeModel.getSubject());
List<String> userIds = noticeModel.getReceivers().stream().map(Receiver::getUserId).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(userIds)) {
return;
}
List<String> recipients = new ArrayList<>();
if (CollectionUtils.isNotEmpty(noticeModel.getRecipients())) {
recipients = noticeModel.getRecipients().stream().map(Receiver::getUserId).distinct().collect(Collectors.toList());
}
String[] users = userIds.stream().distinct().toArray(String[]::new);
LogUtil.info("收件人地址: {}", userIds);
helper.setText(context, true);
helper.setTo(users);
if (CollectionUtils.isNotEmpty(recipients)) {
String[] ccArr = recipients.stream().distinct().toArray(String[]::new);
helper.setCc(ccArr);
}
javaMailSender.send(mimeMessage);
}
use of io.metersphere.notice.domain.Receiver in project metersphere by metersphere.
the class AbstractNoticeSender method handleFollows.
private List<Receiver> handleFollows(MessageDetail messageDetail, NoticeModel noticeModel) {
List<Receiver> receivers = new ArrayList<>();
String id = (String) noticeModel.getParamMap().get("id");
String taskType = messageDetail.getTaskType();
switch(taskType) {
case NoticeConstants.TaskType.TEST_PLAN_TASK:
receivers = testPlanService.getPlanFollow(id).stream().map(user -> new Receiver(user.getId(), NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
break;
case NoticeConstants.TaskType.REVIEW_TASK:
TestCaseReview request = new TestCaseReview();
request.setId(id);
receivers = testCaseReviewService.getFollowByReviewId(request).stream().map(user -> new Receiver(user.getId(), NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
break;
case NoticeConstants.TaskType.API_AUTOMATION_TASK:
receivers = apiAutomationService.getFollows(id).stream().map(userId -> new Receiver(userId, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
break;
case NoticeConstants.TaskType.API_DEFINITION_TASK:
receivers = apiDefinitionService.getFollows(id).stream().map(userId -> new Receiver(userId, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
List<Receiver> caseFollows = apiTestCaseService.getFollows(id).stream().map(userId -> new Receiver(userId, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
receivers.addAll(caseFollows);
break;
case NoticeConstants.TaskType.PERFORMANCE_TEST_TASK:
receivers = performanceTestService.getFollows(id).stream().map(userId -> new Receiver(userId, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
break;
case NoticeConstants.TaskType.TRACK_TEST_CASE_TASK:
receivers = testCaseService.getFollows(id).stream().map(userId -> new Receiver(userId, NotificationConstants.Type.SYSTEM_NOTICE.name())).collect(Collectors.toList());
break;
default:
break;
}
LogUtil.info("FOLLOW_PEOPLE: {}", receivers);
return receivers;
}
use of io.metersphere.notice.domain.Receiver in project metersphere by metersphere.
the class DingNoticeSender method sendNailRobot.
public void sendNailRobot(MessageDetail messageDetail, NoticeModel noticeModel, String context) {
List<Receiver> receivers = noticeModel.getReceivers();
DingTalkClient client = new DefaultDingTalkClient(messageDetail.getWebhook());
OapiRobotSendRequest request = new OapiRobotSendRequest();
request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("消息通知: \n" + context);
request.setText(text);
if (CollectionUtils.isNotEmpty(receivers)) {
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
List<String> userIds = receivers.stream().map(Receiver::getUserId).distinct().collect(Collectors.toList());
List<String> phoneList = super.getUserDetails(userIds).stream().map(UserDetail::getPhone).distinct().collect(Collectors.toList());
if (!CollectionUtils.isEmpty(phoneList)) {
LogUtil.info("钉钉收件人地址: {}", userIds);
at.setAtMobiles(phoneList);
request.setAt(at);
}
}
try {
client.execute(request);
} catch (ApiException e) {
LogUtil.error(e.getMessage(), e);
}
}
use of io.metersphere.notice.domain.Receiver in project metersphere by metersphere.
the class InSiteNoticeSender method sendAnnouncement.
public void sendAnnouncement(MessageDetail messageDetail, NoticeModel noticeModel, String context) {
List<Receiver> receivers = noticeModel.getReceivers();
// 排除自己
if (noticeModel.isExcludeSelf()) {
receivers.removeIf(u -> StringUtils.equals(u.getUserId(), noticeModel.getOperator()));
}
if (CollectionUtils.isEmpty(receivers)) {
return;
}
LogUtil.info("发送站内通知: {}", receivers);
receivers.forEach(receiver -> {
Map<String, Object> paramMap = noticeModel.getParamMap();
Notification notification = new Notification();
notification.setTitle(noticeModel.getSubject());
notification.setContent(JSON.toJSONString(paramMap));
notification.setOperator(noticeModel.getOperator());
notification.setOperation(noticeModel.getEvent());
notification.setResourceId((String) paramMap.get("id"));
notification.setResourceType(messageDetail.getTaskType());
//
if (paramMap.get("name") != null) {
notification.setResourceName((String) paramMap.get("name"));
}
if (paramMap.get("title") != null) {
notification.setResourceName((String) paramMap.get("title"));
}
notification.setType(receiver.getType());
notification.setStatus(NotificationConstants.Status.UNREAD.name());
notification.setCreateTime(System.currentTimeMillis());
notification.setReceiver(receiver.getUserId());
notificationService.sendAnnouncement(notification);
});
}
Aggregations