fix(消息通知): 修复除站内通知外其余方式发送通知禁用用户可以收到问题
--bug=1044171 --user=郭雨琦 https://www.tapd.cn/55049933/bugtrace/bugs/view/1155049933001044171
This commit is contained in:
parent
26a39e3f24
commit
7f4983b72a
|
@ -35,6 +35,10 @@ public interface ExtSystemProjectMapper {
|
|||
List<UserExtendDTO> getMemberByProjectId(@Param("projectId") String projectId, @Param("keyword") String keyword);
|
||||
|
||||
List<User> getProjectMemberByUserId(@Param("projectId") String projectId, @Param("userIds") List<String> userIds);
|
||||
|
||||
List<User> getEnableProjectMemberByUserId(@Param("projectId") String projectId, @Param("userIds") List<String> userIds);
|
||||
|
||||
|
||||
List<OptionDTO> getSystemProject(@Param("keyword") String keyword);
|
||||
|
||||
}
|
||||
|
|
|
@ -224,6 +224,22 @@
|
|||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="getEnableProjectMemberByUserId" resultType="io.metersphere.system.domain.User">
|
||||
select distinct u.* from user_role_relation urr join `user` u on urr.user_id = u.id
|
||||
where
|
||||
u.deleted = 0 and u.enable = 1
|
||||
<if test="projectId != null and projectId != ''">
|
||||
and urr.source_id = #{projectId}
|
||||
</if>
|
||||
<if test="userIds != null and userIds.size > 0 ">
|
||||
and u.id in
|
||||
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
|
||||
#{userId}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="getSystemProject" resultType="io.metersphere.system.dto.sdk.OptionDTO">
|
||||
select id, name
|
||||
from project
|
||||
|
|
|
@ -189,7 +189,7 @@ public abstract class AbstractNoticeSender implements NoticeSender {
|
|||
// 去重复
|
||||
List<String> userIds = toUsers.stream().map(Receiver::getUserId).toList();
|
||||
LogUtils.info("userIds: ", JSON.toJSONString(userIds));
|
||||
List<User> users = getUsers(userIds, messageDetail.getProjectId());
|
||||
List<User> users = getUsers(userIds, messageDetail.getProjectId(), false);
|
||||
List<String> realUserIds = users.stream().map(User::getId).distinct().toList();
|
||||
return toUsers.stream().filter(t -> realUserIds.contains(t.getUserId())).distinct().toList();
|
||||
}
|
||||
|
@ -336,9 +336,13 @@ public abstract class AbstractNoticeSender implements NoticeSender {
|
|||
return receivers;
|
||||
}
|
||||
|
||||
protected List<User> getUsers(List<String> userIds, String projectId) {
|
||||
protected List<User> getUsers(List<String> userIds, String projectId, boolean enable) {
|
||||
if (CollectionUtils.isNotEmpty(userIds)) {
|
||||
if (enable) {
|
||||
return extSystemProjectMapper.getEnableProjectMemberByUserId(projectId, userIds);
|
||||
} else {
|
||||
return extSystemProjectMapper.getProjectMemberByUserId(projectId, userIds);
|
||||
}
|
||||
} else {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ public class DingCustomNoticeSender extends AbstractNoticeSender {
|
|||
.map(Receiver::getUserId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId());
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId(), true);
|
||||
List<String> mobileList = users.stream().map(User::getPhone).toList();
|
||||
|
||||
LogUtils.info("钉钉自定义机器人收件人: {}", userIds);
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.aliyun.teaopenapi.models.Config;
|
|||
import com.aliyun.teautil.Common;
|
||||
import com.aliyun.teautil.models.RuntimeOptions;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import io.metersphere.system.domain.User;
|
||||
import io.metersphere.system.notice.MessageDetail;
|
||||
import io.metersphere.system.notice.NoticeModel;
|
||||
import io.metersphere.system.notice.Receiver;
|
||||
|
@ -17,6 +18,7 @@ import org.apache.commons.collections4.CollectionUtils;
|
|||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class DingEnterPriseNoticeSender extends AbstractNoticeSender {
|
||||
|
@ -99,6 +101,15 @@ public class DingEnterPriseNoticeSender extends AbstractNoticeSender {
|
|||
if (CollectionUtils.isEmpty(receivers)) {
|
||||
return;
|
||||
}
|
||||
List<String> userIds = receivers.stream()
|
||||
.map(Receiver::getUserId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId(), true);
|
||||
if (CollectionUtils.isEmpty(users)) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
sendDing(messageDetail, context);
|
||||
LogUtils.debug("发送钉钉内部机器人结束");
|
||||
|
|
|
@ -27,7 +27,7 @@ public class LarkNoticeSender extends AbstractNoticeSender {
|
|||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId());
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId(), true);
|
||||
List<String> collect = users.stream()
|
||||
.map(ud -> "<at email=\"" + ud.getEmail() + "\">" + ud.getName() + "</at>")
|
||||
.toList();
|
||||
|
|
|
@ -42,7 +42,7 @@ public class MailNoticeSender extends AbstractNoticeSender {
|
|||
.map(Receiver::getUserId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
String[] users = super.getUsers(userIds, projectId).stream()
|
||||
String[] users = super.getUsers(userIds, projectId, true).stream()
|
||||
.map(User::getEmail)
|
||||
.distinct()
|
||||
.toArray(String[]::new);
|
||||
|
|
|
@ -25,7 +25,7 @@ public class WeComNoticeSender extends AbstractNoticeSender {
|
|||
.map(Receiver::getUserId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId());
|
||||
List<User> users = super.getUsers(userIds, messageDetail.getProjectId(), true);
|
||||
List<String> mobileList = users.stream().map(User::getPhone).toList();
|
||||
LogUtils.info("企业微信收件人: {}", userIds);
|
||||
WeComClient.send(messageDetail.getWebhook(), subjectText + ": \n" + context, mobileList);
|
||||
|
|
Loading…
Reference in New Issue