From 768dc8bc1aeb2d5a20c68ee6a73291b5c84857ca Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Thu, 14 Apr 2022 19:53:00 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=99=BB=E5=BD=95=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xjs/business/warning/RemoteMailFeign.java | 7 ++ .../xjs/business/warning/domain/MailBean.java | 77 +++++++++++++++++++ .../warning/factory/RemoteMailFactory.java | 8 ++ .../com/ruoyi/auth/RuoYiAuthApplication.java | 7 +- .../ruoyi/auth/annotation/LoginAspect.java | 14 ++++ .../java/com/ruoyi/auth/aop/LoginAspect.java | 56 ++++++++++++++ .../ruoyi/auth/service/SysLoginService.java | 9 ++- .../com/xjs/controller/MailController.java | 14 +++- .../java/com/xjs/service/MailService.java | 8 ++ .../com/xjs/service/impl/MailServiceImpl.java | 5 ++ 10 files changed, 198 insertions(+), 7 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/MailBean.java create mode 100644 ruoyi-auth/src/main/java/com/ruoyi/auth/annotation/LoginAspect.java create mode 100644 ruoyi-auth/src/main/java/com/ruoyi/auth/aop/LoginAspect.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteMailFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteMailFeign.java index 950c3545..aa5d73af 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteMailFeign.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteMailFeign.java @@ -1,9 +1,13 @@ package com.xjs.business.warning; import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.xjs.business.warning.domain.MailBean; import com.xjs.business.warning.factory.RemoteMailFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; /** * 远程调用预警服务邮件feign @@ -17,4 +21,7 @@ public interface RemoteMailFeign { @GetMapping("mail/send-weather-mail") void sendWeatherMailForRPC(); + + @PostMapping("mail/sendMail") + R sendMail(@RequestBody MailBean mailBean); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/MailBean.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/MailBean.java new file mode 100644 index 00000000..f64f296a --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/MailBean.java @@ -0,0 +1,77 @@ +package com.xjs.business.warning.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 邮箱发送实体 + * + * @author xiejs + * @since 2022-04-13 + */ +@Data +public class MailBean implements Serializable { + + private static final long serialVersionUID = -2116367492649751917L; + + /** + * 邮件接收人 + */ + private String recipient; + /** + * 邮件主题 + */ + private String subject; + /** + * 邮件内容 + */ + private String content; + + /** + * 用户名称 + */ + private String userName; + + /** + * 附件地址 + */ + private String absolutePath; + + /** + * 邮件发送类型 + */ + private MailType mailType; + + /** + * 内部类-邮件发送类型 + */ + public enum MailType { + SIMPLE(1, "文本邮件"), + HTML(2, "HTML邮件"), + ATTACHMENT(3, "附件邮件"), + INLINE(4, "静态资源邮件"), + TEMPLATE(5, "模板邮件"); + + + private final int code; + private final String msg; + + MailType(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public int getCode() { + return code; + } + + public String getMsg() { + return msg; + } + + } + +} + + diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteMailFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteMailFactory.java index 1740a6ef..ff929a54 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteMailFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteMailFactory.java @@ -1,6 +1,8 @@ package com.xjs.business.warning.factory; +import com.ruoyi.common.core.domain.R; import com.xjs.business.warning.RemoteMailFeign; +import com.xjs.business.warning.domain.MailBean; import lombok.extern.log4j.Log4j2; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; @@ -19,6 +21,12 @@ public class RemoteMailFactory implements FallbackFactory { @Override public void sendWeatherMailForRPC() { } + + @Override + public R sendMail(MailBean mailBean) { + log.error("远程发送邮件调用异常:"+cause.getMessage()); + return R.fail("远程发送邮件调用异常:"+cause.getMessage()); + } }; } } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java index 00a499df..89c61a14 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java @@ -4,14 +4,19 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import com.ruoyi.common.security.annotation.EnableRyFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScans; +import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * 认证授权中心 - * + * * @author ruoyi */ @EnableRyFeignClients @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) +@EnableAspectJAutoProxy +@ComponentScans( {@ComponentScan("com.ruoyi"),@ComponentScan("com.xjs")} ) public class RuoYiAuthApplication { public static void main(String[] args) diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/annotation/LoginAspect.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/annotation/LoginAspect.java new file mode 100644 index 00000000..09eb315a --- /dev/null +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/annotation/LoginAspect.java @@ -0,0 +1,14 @@ +package com.ruoyi.auth.annotation; + +import java.lang.annotation.*; + +/** + * 登录切面注解 + * @author xiejs + * @since 2022-04-14 + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LoginAspect { +} diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/aop/LoginAspect.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/aop/LoginAspect.java new file mode 100644 index 00000000..b569eb85 --- /dev/null +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/aop/LoginAspect.java @@ -0,0 +1,56 @@ +package com.ruoyi.auth.aop; + +import com.ruoyi.system.api.model.LoginUser; +import com.xjs.business.warning.RemoteMailFeign; +import com.xjs.business.warning.domain.MailBean; +import lombok.extern.log4j.Log4j2; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 登录切面类 + * + * @author xiejs + * @since 2022-04-14 + */ +@Log4j2 +@Component +@Aspect +public class LoginAspect { + + @Autowired + private RemoteMailFeign remoteMailFeign; + + /** + * 声明AOP签名 + */ + @Pointcut("@annotation(com.ruoyi.auth.annotation.LoginAspect)") + public void pointcut() { + } + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(loginAspect)", returning = "obj") + public void doAfterReturning(JoinPoint joinPoint, com.ruoyi.auth.annotation.LoginAspect loginAspect, Object obj) { + + MailBean mailBean = new MailBean(); + + LoginUser loginUser = (LoginUser) obj; + mailBean.setSubject("上线提醒"); + mailBean.setMailType(MailBean.MailType.HTML); + mailBean.setRecipient(loginUser.getSysUser().getEmail()); + mailBean.setContent("

" + loginUser.getSysUser().getNickName() + "上线啦

" + + "\"头像\"" + + "

当前IP地址:" + loginUser.getSysUser().getLoginIp() + "

"); + + remoteMailFeign.sendMail(mailBean); + } + +} diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 07156374..260b1d23 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.ruoyi.auth.service; +import com.ruoyi.auth.annotation.LoginAspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.Constants; @@ -20,7 +21,8 @@ import com.ruoyi.system.api.model.LoginUser; /** * 登录校验方法
- * 新增功能统计用户登录次数 + * 新增功能统计用户登录次数
+ * 新增登录邮件推送 * @since 2022-01-21 11:22:16 * @author ruoyi,xjs */ @@ -36,6 +38,7 @@ public class SysLoginService /** * 登录 */ + @LoginAspect public LoginUser login(String username, String password) { // 用户名或密码为空 错误 @@ -141,7 +144,7 @@ public class SysLoginService /** * 记录登录信息 - * + * * @param username 用户名 * @param status 状态 * @param message 消息内容 @@ -164,4 +167,4 @@ public class SysLoginService } remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); } -} \ No newline at end of file +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/MailController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/MailController.java index 9d405b89..96cf8d2f 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/MailController.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/MailController.java @@ -1,12 +1,12 @@ package com.xjs.controller; +import com.ruoyi.common.core.domain.R; +import com.xjs.domain.mall.MailBean; import com.xjs.service.MailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 邮件服务控制器 @@ -29,4 +29,12 @@ public class MailController { mailService.sendWeatherMail(); } + + @PostMapping("/sendMail") + @ApiOperation("发送邮件ForRPC") + public R sendMail(@RequestBody MailBean mailBean) { + mailService.sendMail(mailBean); + return R.ok(); + } + } diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/MailService.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/MailService.java index 86012c05..6c8932e7 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/MailService.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/MailService.java @@ -1,5 +1,7 @@ package com.xjs.service; +import com.xjs.domain.mall.MailBean; + /** * 邮件发送service接口 * @author xiejs @@ -13,4 +15,10 @@ public interface MailService { */ Boolean sendWeatherMail(); + /** + * 发送邮件 + * @param mailBean 邮件对象 + */ + void sendMail(MailBean mailBean); + } diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/MailServiceImpl.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/MailServiceImpl.java index 0a26c6ca..4e3adb6e 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/MailServiceImpl.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/MailServiceImpl.java @@ -62,5 +62,10 @@ public class MailServiceImpl implements MailService { return false; } + @Override + public void sendMail(MailBean mailBean) { + mailServer.sendMail(mailBean); + } + }