fix:缓存可用发件邮箱

This commit is contained in:
nieziyan 2024-01-03 09:37:42 +08:00
parent f31f163d5c
commit a5412c684e
4 changed files with 41 additions and 22 deletions

View File

@ -76,10 +76,9 @@ public class StatusAspect {
@Autowired
private IAlarmItemService alarmItemService;
// 新增|修改邮箱服务器信息后 异步更新其状态信息
// 新增邮箱服务器信息后 异步更新其状态信息
@Async
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..)) || " +
"execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..))")
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..))")
public void updateEamilStatus(JoinPoint point){
Object[] args = point.getArgs();
if (ArrayUtil.length(args) == 0) return;
@ -87,6 +86,18 @@ public class StatusAspect {
emailService.status2Redis(email);
}
// 修改邮箱服务器信息后 异步更新其状态信息
// 并更新一个可用的发件服务器缓存到Reids
@Async
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..))")
public void updateEamil(JoinPoint point){
emailService.sender2Redis();
Object[] args = point.getArgs();
if (ArrayUtil.length(args) == 0) return;
SysEmail email = (SysEmail) args[0];
emailService.status2Redis(email);
}
/*
* 新增|修改数据源信息后 异步更新其状态信息
* */

View File

@ -33,4 +33,6 @@ public interface ISysEmailService extends IService<SysEmail> {
void status2Redis(SysEmail email);
String getNameById(String id);
SysEmail sender2Redis();
}

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.*;
@ -45,6 +46,7 @@ import java.util.stream.Collectors;
import static org.jeecg.modules.base.enums.Enabled.ENABLED;
import static org.jeecg.modules.base.enums.Qiye.IS;
@Slf4j
@Service("sysEmailService")
public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> implements ISysEmailService {
@ -152,11 +154,8 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
}
sysEmail.setIsQiye(isQiye(username));
boolean success = updateById(sysEmail);
if (success) {
// 更新邮箱发件服务器到Redis
// updateSender();
if (success)
return Result.OK(Prompt.UPDATE_SUCC);
}
return Result.error(Prompt.UPDATE_ERR);
}
@ -197,7 +196,7 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
if (redisUtil.hasKey(key))
return Result.OK(redisUtil.get(key));
SysEmail sysEmail = updateSender();
SysEmail sysEmail = this.sender2Redis();
return Result.OK(sysEmail);
}
@ -262,6 +261,22 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
return getById(id).getName();
}
@Override
public SysEmail sender2Redis() {
String key = RedisConstant.EMAIL_SENDER;
LambdaQueryWrapper<SysEmail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysEmail::getEmilType, SysMailType.SEND_EMAIL.getEmailType());
wrapper.eq(SysEmail::getEnabled, ENABLED.getValue());
List<SysEmail> emails = this.list(wrapper);
Optional<SysEmail> first = emails.stream().findFirst();
if(!first.isPresent())
return null;
SysEmail sender = first.get();
redisUtil.set(key, sender);
log.info("缓存了可用的发件邮箱到Redis: {}", sender.getUsername());
return sender;
}
/*
* 删除指定id的邮箱服务器的状态值
* */
@ -282,16 +297,4 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
boolean contains = CollUtil.contains(domains, domain);
return contains ? Qiye.IS.getValue() : Qiye.NOT.getValue();
}
private SysEmail updateSender(){
String key = RedisConstant.EMAIL_SENDER;
LambdaQueryWrapper<SysEmail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysEmail::getEmilType, SysMailType.SEND_EMAIL.getEmailType());
wrapper.eq(SysEmail::getEnabled, ENABLED.getValue());
List<SysEmail> emails = this.list(wrapper);
SysEmail sysEmail = emails.stream().findFirst().get();
if (ObjectUtil.isNotNull(sysEmail))
redisUtil.set(key, sysEmail);
return sysEmail;
}
}

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.message.handle.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.sun.mail.smtp.SMTPAddressFailedException;
import lombok.extern.slf4j.Slf4j;
@ -39,10 +40,12 @@ public class EmailPushMsgHandle implements ISendMsgHandle {
@Override
public void sendMessage(MessageDTO messageDTO) {
// 获取邮件发送服务器信息
SysEmail sysEmail = abnormalAlarmClient.getSender().getResult();
SysEmail sender = abnormalAlarmClient.getSender().getResult();
if(ObjectUtil.isNull(sender))
log.error("没有可用的发件邮箱服务");
// 初始化邮件服务
EmailServiceManager emailService = getInstance();
emailService.init(sysEmail);
emailService.init(sender);
// 单独给每个用户发送邮件
/*String toUser = messageDTO.getToUser();
List<String> toUsers = StrUtil.splitTrim(toUser, ",");*/