提交 aa1c0486 作者: duanxincheng

用户邮件推送许可优化

父级 e0f9ff7d
...@@ -242,6 +242,7 @@ public class MeetingInfoController { ...@@ -242,6 +242,7 @@ public class MeetingInfoController {
.subMeetingId(meetingInfo.getSubMeetingId()) .subMeetingId(meetingInfo.getSubMeetingId())
.toUserCode(userCode) .toUserCode(userCode)
.toUser(meetingInfo.getHost()) .toUser(meetingInfo.getHost())
.emailPushAccess(meetingInfo.getEmailPushAccess())
.build(); .build();
emailSender.sendEmailWithAttachment(emailPushBuilder); emailSender.sendEmailWithAttachment(emailPushBuilder);
return R.ok("发送纪要邮件成功"); return R.ok("发送纪要邮件成功");
......
...@@ -33,6 +33,11 @@ public class UserDTO { ...@@ -33,6 +33,11 @@ public class UserDTO {
*/ */
private String email; private String email;
/**
* 邮件推送许可(企微表存储)
*/
private Boolean emailPushAccess;
@Override @Override
public String toString() { public String toString() {
return "UserDTO{" + return "UserDTO{" +
......
...@@ -185,8 +185,8 @@ public class EmailSender { ...@@ -185,8 +185,8 @@ public class EmailSender {
if(!pushSwitch){ if(!pushSwitch){
log.info("【邮箱推送】:应用未开启邮件推送功能"); log.info("【邮箱推送】:应用未开启邮件推送功能");
return false;
} }
AtomicInteger retryCount = new AtomicInteger(0); AtomicInteger retryCount = new AtomicInteger(0);
boolean isSent = false; boolean isSent = false;
String toEmail = "test".equals(environment) ? testReceiver : emailPushBuilder.getToEmail(); String toEmail = "test".equals(environment) ? testReceiver : emailPushBuilder.getToEmail();
...@@ -195,10 +195,18 @@ public class EmailSender { ...@@ -195,10 +195,18 @@ public class EmailSender {
String subMeetingId = emailPushBuilder.getSubMeetingId(); String subMeetingId = emailPushBuilder.getSubMeetingId();
Integer meetingInstanceId = emailPushBuilder.getMeetingInstanceId(); Integer meetingInstanceId = emailPushBuilder.getMeetingInstanceId();
String toUserCode = emailPushBuilder.getToUserCode(); String toUserCode = emailPushBuilder.getToUserCode();
String toUser = emailPushBuilder.getToUser(); Boolean emailPushAccess = emailPushBuilder.getEmailPushAccess();
//用户自定义邮件推送许可
if(emailPushAccess){
log.info("用户允许邮件推送,准备推送邮件至{}------", emailPushBuilder.getToEmail());
} else{
log.info("用户关闭了邮件推送,推送终止------");
processLogService.log(meetingId,subMeetingId,"用户关闭了邮件推送,推送终止");
}
if(StringUtils.isEmpty(toEmail)){ if(StringUtils.isEmpty(toEmail)){
log.error("收件邮箱为空,推送失败"); log.error("收件邮箱为空,推送失败");
processLogService.log(meetingId,null,"收件邮箱为空,推送失败。environment->"+environment+",testReceiver->"+testReceiver+",realEmail->"+emailPushBuilder.getToEmail()); processLogService.log(meetingId,subMeetingId,"收件邮箱为空,推送失败。environment->"+environment+",testReceiver->"+testReceiver+",realEmail->"+emailPushBuilder.getToEmail());
return false; return false;
} }
log.info("准备开始邮件推送..."); log.info("准备开始邮件推送...");
......
...@@ -118,6 +118,7 @@ public class EmailPushTask { ...@@ -118,6 +118,7 @@ public class EmailPushTask {
.subMeetingId(meetingInfo.getSubMeetingId()) .subMeetingId(meetingInfo.getSubMeetingId())
.toUserCode(userCode) .toUserCode(userCode)
.toUser(meetingInfo.getHost()) .toUser(meetingInfo.getHost())
.emailPushAccess(meetingInfo.getEmailPushAccess())
.build(); .build();
isSuccess = emailSender.sendEmailWithAttachment(emailPushBuilder); isSuccess = emailSender.sendEmailWithAttachment(emailPushBuilder);
} catch (Exception e) { } catch (Exception e) {
......
...@@ -330,6 +330,7 @@ public class FileProcessTask { ...@@ -330,6 +330,7 @@ public class FileProcessTask {
.subMeetingId(meetingInfo.getSubMeetingId()) .subMeetingId(meetingInfo.getSubMeetingId())
.toUserCode(toUserCode) .toUserCode(toUserCode)
.toUser(meetingInfo.getHost()) .toUser(meetingInfo.getHost())
.emailPushAccess(meetingInfo.getEmailPushAccess())
.build(); .build();
emailPush(emailPushBuilder); emailPush(emailPushBuilder);
isSuccess = true; isSuccess = true;
...@@ -583,27 +584,20 @@ public class FileProcessTask { ...@@ -583,27 +584,20 @@ public class FileProcessTask {
private void emailPush(EmailPush emailPushBuilder) { private void emailPush(EmailPush emailPushBuilder) {
Boolean isPushed; Boolean isPushed;
log.info("开始邮件推送------"); log.info("开始邮件推送------");
if(true){ //邮件推送
log.info("用户允许邮件推送,准备推送邮件至{}------", emailPushBuilder.getToEmail()); try {
//邮件推送
isPushed = emailSender.sendEmailWithAttachment(emailPushBuilder); isPushed = emailSender.sendEmailWithAttachment(emailPushBuilder);
try { } catch (Exception e) {
// isPushed = emailSender.sendEmailWithAttachment(emailPushBuilder); log.error("邮件推送失败: {}", e.getMessage(), e);
} catch (Exception e) { StringWriter sw = new StringWriter();
log.error("邮件推送失败: {}", e.getMessage(), e); PrintWriter pw = new PrintWriter(sw);
StringWriter sw = new StringWriter(); e.printStackTrace(pw);
PrintWriter pw = new PrintWriter(sw); processLogService.log(meetingId,subMeetingId,"【邮件推送】:"+sw.toString());
e.printStackTrace(pw); throw new RuntimeException(e);
processLogService.log(meetingId,subMeetingId,"【邮件推送】:"+sw.toString());
throw new RuntimeException(e);
}
if(isPushed)
processLogService.log(meetingId,subMeetingId,"用户允许邮件推送,推送邮件至"+ emailPushBuilder.getToEmail());
}else{
log.info("用户关闭了邮件推送,推送终止------");
processLogService.log(meetingId,subMeetingId,"用户关闭了邮件推送,推送终止");
isPushed = Boolean.FALSE;
} }
if(isPushed)
processLogService.log(meetingId,subMeetingId,"用户允许邮件推送,推送邮件至"+ emailPushBuilder.getToEmail());
meetingInfoMapper.update(null, meetingInfoMapper.update(null,
new LambdaUpdateWrapper<MeetingInfo>() new LambdaUpdateWrapper<MeetingInfo>()
.eq(MeetingInfo::getMeetingId,meetingId) .eq(MeetingInfo::getMeetingId,meetingId)
......
...@@ -44,6 +44,7 @@ import java.security.SecureRandom; ...@@ -44,6 +44,7 @@ import java.security.SecureRandom;
import java.time.*; import java.time.*;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -256,7 +257,6 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T ...@@ -256,7 +257,6 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
} }
} }
String email;
//判断是否有权限生成纪要 //判断是否有权限生成纪要
boolean generateAccess = accessUserIds.stream().anyMatch(item -> item.getTid().equals(hostId)); boolean generateAccess = accessUserIds.stream().anyMatch(item -> item.getTid().equals(hostId));
if(!generateAccess){ if(!generateAccess){
...@@ -271,14 +271,15 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T ...@@ -271,14 +271,15 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
UserDTO userDTO = accessUserIds.stream().filter(item -> item.getTid().equals(hostId)).findFirst().get(); UserDTO userDTO = accessUserIds.stream().filter(item -> item.getTid().equals(hostId)).findFirst().get();
email = userDTO.getEmail(); String email = userDTO.getEmail();
Boolean emailPushAccess = userDTO.getEmailPushAccess();
//会议基本信息保存 //会议基本信息保存
MeetingInfo meetingItem = MeetingInfo.builder().meetingId(meetingId).meetingCode(meeting.getMeetingCode()) MeetingInfo meetingItem = MeetingInfo.builder().meetingId(meetingId).meetingCode(meeting.getMeetingCode())
.subject(meeting.getSubject()) .subject(meeting.getSubject())
.startTime(mediaStartTime) .startTime(mediaStartTime)
// .endTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(Long.valueOf(meeting.getEndTime())), ZoneId.systemDefault())) // .endTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(Long.valueOf(meeting.getEndTime())), ZoneId.systemDefault()))
.isGenerated(Boolean.FALSE).emailPushAccess(Boolean.TRUE).isPushed(Boolean.FALSE).syncTime(LocalDateTime.now()) .isGenerated(Boolean.FALSE).emailPushAccess(emailPushAccess).isPushed(Boolean.FALSE).syncTime(LocalDateTime.now())
.subMeetingId(subMeetingId).generateRetry(Boolean.FALSE).pushRetry(Boolean.FALSE) .subMeetingId(subMeetingId).generateRetry(Boolean.FALSE).pushRetry(Boolean.FALSE)
.host(hostName) .host(hostName)
.hostUid(hostId) .hostUid(hostId)
...@@ -348,10 +349,10 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T ...@@ -348,10 +349,10 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
//已被直接授权的人员追加进去 //已被直接授权的人员追加进去
accessUserIds.addAll(auths.stream().filter(item -> item.getType().equals(1)).map(CoreModulePermissions::getRelId).collect(Collectors.toList())); accessUserIds.addAll(auths.stream().filter(item -> item.getType().equals(1)).map(CoreModulePermissions::getRelId).collect(Collectors.toList()));
if(!CollectionUtils.isEmpty(accessUserIds)){ if(!CollectionUtils.isEmpty(accessUserIds)){
//查出人员邮箱 //查出人员邮箱+邮件推送许可
List<UserDTO> userEmailList = sysUserSyncMapper.getUserEmail(permissionTenantId); List<UserDTO> userEmailList = sysUserSyncMapper.getUserEmail(permissionTenantId);
Map<String, String> userEmailMap = CollectionUtils.isEmpty(userEmailList) ? new HashMap<>() Map<String, UserDTO> userEmailMap = CollectionUtils.isEmpty(userEmailList) ? new HashMap<>()
: userEmailList.stream().collect(Collectors.toMap(UserDTO::getWid, UserDTO::getEmail,(existing, replacement) -> existing)); : userEmailList.stream().collect(Collectors.toMap(UserDTO::getWid, Function.identity(),(existing, replacement) -> existing));
List<UserDTO> accessUsers = new ArrayList<>(); List<UserDTO> accessUsers = new ArrayList<>();
for (String accessUserId : accessUserIds) { for (String accessUserId : accessUserIds) {
...@@ -359,8 +360,11 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T ...@@ -359,8 +360,11 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
UserDTO accessUser = new UserDTO(); UserDTO accessUser = new UserDTO();
accessUser.setWid(accessUserId); accessUser.setWid(accessUserId);
accessUser.setTid(userIdRelations.get(accessUserId)); accessUser.setTid(userIdRelations.get(accessUserId));
if(userEmailMap.containsKey(accessUserId)) if(userEmailMap.containsKey(accessUserId)){
accessUser.setEmail(userEmailMap.get(accessUserId)); UserDTO emailMsg = userEmailMap.get(accessUserId);
accessUser.setEmail(emailMsg.getEmail());
accessUser.setEmailPushAccess(emailMsg.getEmailPushAccess());
}
accessUsers.add(accessUser); accessUsers.add(accessUser);
} }
} }
......
...@@ -258,6 +258,17 @@ public class WeComServiceImpl extends ServiceImpl<WeComUserMapper, WeComUser> i ...@@ -258,6 +258,17 @@ public class WeComServiceImpl extends ServiceImpl<WeComUserMapper, WeComUser> i
} }
WeComUser weComUser = getOne(new LambdaQueryWrapper<WeComUser>() WeComUser weComUser = getOne(new LambdaQueryWrapper<WeComUser>()
.eq(WeComUser::getUserId, userId)); .eq(WeComUser::getUserId, userId));
//如果咨询窗用户操作的邮件推送许可,这名用户不在企微的授权范围内
// 可以预先保存这位企微人员的信息,同时设置一下推送许可
if(weComUser == null){
WeComUser newUser = WeComUser.builder()
.userId(userId)
.userName(user.getUsername())
.isrepeatName("0")
.emailPushAccess(Boolean.TRUE).build();
save(newUser);
return newUser.getEmailPushAccess();
}
return weComUser.getEmailPushAccess(); return weComUser.getEmailPushAccess();
} }
......
...@@ -43,6 +43,8 @@ public class EmailPush { ...@@ -43,6 +43,8 @@ public class EmailPush {
*/ */
private List<Attachment> attachments; private List<Attachment> attachments;
private Boolean emailPushAccess;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论