Search in sources :

Example 1 with Receiver

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());
}
Also used : LogUtil(io.metersphere.commons.utils.LogUtil) NotificationConstants(io.metersphere.commons.constants.NotificationConstants) URL(java.net.URL) UserService(io.metersphere.service.UserService) ApiAutomationService(io.metersphere.api.service.ApiAutomationService) TestCaseReview(io.metersphere.base.domain.TestCaseReview) ApiDefinitionService(io.metersphere.api.service.ApiDefinitionService) StringUtils(org.apache.commons.lang3.StringUtils) CollectionUtils(org.apache.commons.collections4.CollectionUtils) StringSubstitutor(org.apache.commons.text.StringSubstitutor) ArrayList(java.util.ArrayList) ApiTestCaseService(io.metersphere.api.service.ApiTestCaseService) JSONArray(com.alibaba.fastjson.JSONArray) TestPlanService(io.metersphere.track.service.TestPlanService) Map(java.util.Map) TestCaseService(io.metersphere.track.service.TestCaseService) PerformanceTestService(io.metersphere.performance.service.PerformanceTestService) TestCaseReviewService(io.metersphere.track.service.TestCaseReviewService) Receiver(io.metersphere.notice.domain.Receiver) Resource(javax.annotation.Resource) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) JSON(com.alibaba.fastjson.JSON) NoticeConstants(io.metersphere.commons.constants.NoticeConstants) MessageDetail(io.metersphere.notice.domain.MessageDetail) UserDetail(io.metersphere.notice.domain.UserDetail) JSONObject(com.alibaba.fastjson.JSONObject) Lazy(org.springframework.context.annotation.Lazy) DateFormatUtils(org.apache.commons.lang3.time.DateFormatUtils) JSONObject(com.alibaba.fastjson.JSONObject) ArrayList(java.util.ArrayList) JSONArray(com.alibaba.fastjson.JSONArray) Receiver(io.metersphere.notice.domain.Receiver) JSONObject(com.alibaba.fastjson.JSONObject) ArrayList(java.util.ArrayList) List(java.util.List)

Example 2 with Receiver

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);
}
Also used : JavaMailSenderImpl(org.springframework.mail.javamail.JavaMailSenderImpl) MimeMessage(javax.mail.internet.MimeMessage) ArrayList(java.util.ArrayList) Receiver(io.metersphere.notice.domain.Receiver) MimeMessageHelper(org.springframework.mail.javamail.MimeMessageHelper)

Example 3 with Receiver

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;
}
Also used : LogUtil(io.metersphere.commons.utils.LogUtil) NotificationConstants(io.metersphere.commons.constants.NotificationConstants) URL(java.net.URL) UserService(io.metersphere.service.UserService) ApiAutomationService(io.metersphere.api.service.ApiAutomationService) TestCaseReview(io.metersphere.base.domain.TestCaseReview) ApiDefinitionService(io.metersphere.api.service.ApiDefinitionService) StringUtils(org.apache.commons.lang3.StringUtils) CollectionUtils(org.apache.commons.collections4.CollectionUtils) StringSubstitutor(org.apache.commons.text.StringSubstitutor) ArrayList(java.util.ArrayList) ApiTestCaseService(io.metersphere.api.service.ApiTestCaseService) JSONArray(com.alibaba.fastjson.JSONArray) TestPlanService(io.metersphere.track.service.TestPlanService) Map(java.util.Map) TestCaseService(io.metersphere.track.service.TestCaseService) PerformanceTestService(io.metersphere.performance.service.PerformanceTestService) TestCaseReviewService(io.metersphere.track.service.TestCaseReviewService) Receiver(io.metersphere.notice.domain.Receiver) Resource(javax.annotation.Resource) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) JSON(com.alibaba.fastjson.JSON) NoticeConstants(io.metersphere.commons.constants.NoticeConstants) MessageDetail(io.metersphere.notice.domain.MessageDetail) UserDetail(io.metersphere.notice.domain.UserDetail) JSONObject(com.alibaba.fastjson.JSONObject) Lazy(org.springframework.context.annotation.Lazy) DateFormatUtils(org.apache.commons.lang3.time.DateFormatUtils) TestCaseReview(io.metersphere.base.domain.TestCaseReview) ArrayList(java.util.ArrayList) Receiver(io.metersphere.notice.domain.Receiver)

Example 4 with Receiver

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);
    }
}
Also used : DefaultDingTalkClient(com.dingtalk.api.DefaultDingTalkClient) Receiver(io.metersphere.notice.domain.Receiver) DefaultDingTalkClient(com.dingtalk.api.DefaultDingTalkClient) DingTalkClient(com.dingtalk.api.DingTalkClient) UserDetail(io.metersphere.notice.domain.UserDetail) OapiRobotSendRequest(com.dingtalk.api.request.OapiRobotSendRequest) ApiException(com.taobao.api.ApiException)

Example 5 with Receiver

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);
    });
}
Also used : Receiver(io.metersphere.notice.domain.Receiver) Notification(io.metersphere.base.domain.Notification)

Aggregations

Receiver (io.metersphere.notice.domain.Receiver)7 UserDetail (io.metersphere.notice.domain.UserDetail)5 IOException (java.io.IOException)3 ArrayList (java.util.ArrayList)3 JSON (com.alibaba.fastjson.JSON)2 JSONArray (com.alibaba.fastjson.JSONArray)2 JSONObject (com.alibaba.fastjson.JSONObject)2 ApiAutomationService (io.metersphere.api.service.ApiAutomationService)2 ApiDefinitionService (io.metersphere.api.service.ApiDefinitionService)2 ApiTestCaseService (io.metersphere.api.service.ApiTestCaseService)2 TestCaseReview (io.metersphere.base.domain.TestCaseReview)2 NoticeConstants (io.metersphere.commons.constants.NoticeConstants)2 NotificationConstants (io.metersphere.commons.constants.NotificationConstants)2 LogUtil (io.metersphere.commons.utils.LogUtil)2 MessageDetail (io.metersphere.notice.domain.MessageDetail)2 PerformanceTestService (io.metersphere.performance.service.PerformanceTestService)2 UserService (io.metersphere.service.UserService)2 TestCaseReviewService (io.metersphere.track.service.TestCaseReviewService)2 TestCaseService (io.metersphere.track.service.TestCaseService)2 TestPlanService (io.metersphere.track.service.TestPlanService)2