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 @Autowired
private IAlarmItemService alarmItemService; private IAlarmItemService alarmItemService;
// 新增|修改邮箱服务器信息后 异步更新其状态信息 // 新增邮箱服务器信息后 异步更新其状态信息
@Async @Async
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..)) || " + @AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..))")
"execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..))")
public void updateEamilStatus(JoinPoint point){ public void updateEamilStatus(JoinPoint point){
Object[] args = point.getArgs(); Object[] args = point.getArgs();
if (ArrayUtil.length(args) == 0) return; if (ArrayUtil.length(args) == 0) return;
@ -87,6 +86,18 @@ public class StatusAspect {
emailService.status2Redis(email); 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); void status2Redis(SysEmail email);
String getNameById(String id); 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK; import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.QueryRequest; import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.*; 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.Enabled.ENABLED;
import static org.jeecg.modules.base.enums.Qiye.IS; import static org.jeecg.modules.base.enums.Qiye.IS;
@Slf4j
@Service("sysEmailService") @Service("sysEmailService")
public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> implements ISysEmailService { 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)); sysEmail.setIsQiye(isQiye(username));
boolean success = updateById(sysEmail); boolean success = updateById(sysEmail);
if (success) { if (success)
// 更新邮箱发件服务器到Redis
// updateSender();
return Result.OK(Prompt.UPDATE_SUCC); return Result.OK(Prompt.UPDATE_SUCC);
}
return Result.error(Prompt.UPDATE_ERR); return Result.error(Prompt.UPDATE_ERR);
} }
@ -197,7 +196,7 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
if (redisUtil.hasKey(key)) if (redisUtil.hasKey(key))
return Result.OK(redisUtil.get(key)); return Result.OK(redisUtil.get(key));
SysEmail sysEmail = updateSender(); SysEmail sysEmail = this.sender2Redis();
return Result.OK(sysEmail); return Result.OK(sysEmail);
} }
@ -262,6 +261,22 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
return getById(id).getName(); 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的邮箱服务器的状态值 * 删除指定id的邮箱服务器的状态值
* */ * */
@ -282,16 +297,4 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailMapper, SysEmail> i
boolean contains = CollUtil.contains(domains, domain); boolean contains = CollUtil.contains(domains, domain);
return contains ? Qiye.IS.getValue() : Qiye.NOT.getValue(); 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; package org.jeecg.modules.message.handle.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.sun.mail.smtp.SMTPAddressFailedException; import com.sun.mail.smtp.SMTPAddressFailedException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -39,10 +40,12 @@ public class EmailPushMsgHandle implements ISendMsgHandle {
@Override @Override
public void sendMessage(MessageDTO messageDTO) { public void sendMessage(MessageDTO messageDTO) {
// 获取邮件发送服务器信息 // 获取邮件发送服务器信息
SysEmail sysEmail = abnormalAlarmClient.getSender().getResult(); SysEmail sender = abnormalAlarmClient.getSender().getResult();
if(ObjectUtil.isNull(sender))
log.error("没有可用的发件邮箱服务");
// 初始化邮件服务 // 初始化邮件服务
EmailServiceManager emailService = getInstance(); EmailServiceManager emailService = getInstance();
emailService.init(sysEmail); emailService.init(sender);
// 单独给每个用户发送邮件 // 单独给每个用户发送邮件
/*String toUser = messageDTO.getToUser(); /*String toUser = messageDTO.getToUser();
List<String> toUsers = StrUtil.splitTrim(toUser, ",");*/ List<String> toUsers = StrUtil.splitTrim(toUser, ",");*/