diff --git a/pear-common/pom.xml b/pear-common/pom.xml
index d6b159167cc09bab7f60aa87d5eb606f689bd0bb..979bfc3321b1516925558e872b2f9132434ccc57 100644
--- a/pear-common/pom.xml
+++ b/pear-common/pom.xml
@@ -84,6 +84,12 @@
org.springframework.boot
spring-boot-starter-data-redis
+
+
+
+ cn.hutool
+ hutool-all
+
diff --git a/pear-common/src/main/java/com/pearadmin/common/config/MailConfig.java b/pear-common/src/main/java/com/pearadmin/common/config/MailConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..377f30e3b381d0c938ce8f439d06961a41bded37
--- /dev/null
+++ b/pear-common/src/main/java/com/pearadmin/common/config/MailConfig.java
@@ -0,0 +1,39 @@
+package com.pearadmin.common.config;
+
+import cn.hutool.extra.mail.Mail;
+import cn.hutool.extra.mail.MailAccount;
+import com.pearadmin.common.config.proprety.MailProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.Resource;
+import java.nio.charset.Charset;
+
+/**
+ * @Author: Heiky
+ * @Date: 2021/1/14 9:14
+ * @Description:
+ */
+
+@Configuration
+@EnableConfigurationProperties(MailProperties.class)
+public class MailConfig {
+
+ @Resource
+ private MailProperties mailProperties;
+
+ @Bean
+ public MailAccount mailAccount() {
+ MailAccount mailAccount = new MailAccount();
+ mailAccount.setHost(mailProperties.getHost());
+ mailAccount.setPort(mailProperties.getPort());
+ mailAccount.setAuth(true);
+ mailAccount.setFrom(mailProperties.getFrom());
+ mailAccount.setUser(mailProperties.getUser());
+ mailAccount.setPass(mailProperties.getPass());
+ mailAccount.setCharset(Charset.forName("UTF-8"));
+ return mailAccount;
+ }
+
+}
diff --git a/pear-common/src/main/java/com/pearadmin/common/config/proprety/MailProperties.java b/pear-common/src/main/java/com/pearadmin/common/config/proprety/MailProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..9cef0e55ad87c04371282f2b5885d8b044b94d57
--- /dev/null
+++ b/pear-common/src/main/java/com/pearadmin/common/config/proprety/MailProperties.java
@@ -0,0 +1,26 @@
+package com.pearadmin.common.config.proprety;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+
+/**
+ * Describe: 邮箱配置类
+ * Author: Heiky
+ * CreateTime: 2021/1/13 17:52
+ */
+@Data
+@ConfigurationProperties("pear.mail")
+public class MailProperties {
+
+ private String host;
+
+ private Integer port;
+
+ private String from;
+
+ private String user;
+
+ private String pass;
+
+}
diff --git a/pear-common/src/main/java/com/pearadmin/common/web/base/BaseDomain.java b/pear-common/src/main/java/com/pearadmin/common/web/base/BaseDomain.java
index 08aa3f2d41a2b885c4ad8b548b5b892f0124890a..4b40eeb7846fdd16ad80caf1710c1bf53e732441 100644
--- a/pear-common/src/main/java/com/pearadmin/common/web/base/BaseDomain.java
+++ b/pear-common/src/main/java/com/pearadmin/common/web/base/BaseDomain.java
@@ -34,12 +34,12 @@ public class BaseDomain implements Serializable {
private LocalDateTime updateTime;
/**
- * 修改时间
+ * 修改人
* */
private String updateBy;
/**
- * 修改名称
+ * 修改人名称
* */
private String updateName;
diff --git a/pear-entrance/src/main/java/com/pearadmin/secure/support/SecurePermissionSupport.java b/pear-entrance/src/main/java/com/pearadmin/secure/support/SecurePermissionSupport.java
index b25c90336b30a50942d0a45fe9ce3c4d04fa52b6..ea83342f10745d38cfaf86dcfeb0a1ce1027e981 100644
--- a/pear-entrance/src/main/java/com/pearadmin/secure/support/SecurePermissionSupport.java
+++ b/pear-entrance/src/main/java/com/pearadmin/secure/support/SecurePermissionSupport.java
@@ -6,6 +6,7 @@ import com.pearadmin.system.domain.SysUser;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
+
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashSet;
@@ -16,7 +17,7 @@ import java.util.Set;
* Describe: 自定义 Security 权限注解实现
* Author: 就 眠 仪 式
* CreateTime: 2019/10/23
- * */
+ */
@Component
public class SecurePermissionSupport implements PermissionEvaluator {
@@ -27,28 +28,27 @@ public class SecurePermissionSupport implements PermissionEvaluator {
* Describe: 自定义 Security 权限认证 @hasPermission
* Param: Authentication
* Return Boolean
- * */
+ */
@Override
- public boolean hasPermission(Authentication authentication, Object o, Object o1)
- {
+ public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
SysUser securityUserDetails = (SysUser) authentication.getPrincipal();
if (securityProperty.isSuperAuthOpen() && securityProperty.getSuperAdmin().equals(securityUserDetails.getUsername())) {
return true;
}
List powerList = securityUserDetails.getPowerList();
Set permissions = new HashSet<>();
- for (SysPower sysPower :powerList) {
+ for (SysPower sysPower : powerList) {
permissions.add(sysPower.getPowerCode());
}
- if(permissions.contains(o1)){
+ if (permissions.contains(permission)) {
return true;
- }else{
+ } else {
return false;
}
}
@Override
- public boolean hasPermission(Authentication authentication, Serializable serializable, String s, Object o) {
+ public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
return false;
}
}
diff --git a/pear-entrance/src/main/resources/application.yml b/pear-entrance/src/main/resources/application.yml
index f87275e873499839664d90124720c5fe79ccd1d5..17f42e2eb4de7dda28eb28d1b222c31e12f7ea37 100644
--- a/pear-entrance/src/main/resources/application.yml
+++ b/pear-entrance/src/main/resources/application.yml
@@ -31,31 +31,31 @@ mybatis:
# Pear 插 件 配 置 信 息
pear:
- # Document 配 置 信 息
+ # Document 配 置 信 息
swagger:
- # 文 档 标 题
+ # 文 档 标 题
title: Pear Admin API
- # 是 否 开 启
+ # 是 否 开 启
enable: true
- # 描 述 信 息
+ # 描 述 信 息
describe: 企 业 快 速 开 发 平 台
- # 扫 包 路 径
+ # 扫 包 路 径
scan-package: com.pearadmin
- # 协 议
- licence: apache
- # 协 议 地 址
+ # 协 议
+ licence: MIT
+ # 协 议 地 址
licence-url: https://gitee.com/pear_community
- # 组 织 信 息
+ # 组 织 信 息
terms-of-service-url: https://gitee.com/pear_community
- # 版 本 信 息
+ # 版 本 信 息
version: Release 2.0.0
- # 扩 展 信 息
+ # 扩 展 信 息
contact:
- # 作 者
+ # 作 者
name: 就 眠 仪 式
- # 连 接
+ # 连 接
url: www.pearadmin.cn
- # 邮 箱
+ # 邮 箱
email: Jmys1992@gmail.com
# 权 限 配 置
security:
@@ -83,6 +83,13 @@ pear:
windows-path: D:\home\uploads\
# linux 上传路径
linux-path: /home/uploads/
+ # 邮 箱 配 置
+ mail:
+ host:
+ port:
+ from:
+ user:
+ pass:
# Page Helper
pagehelper:
diff --git a/pear-entrance/src/main/resources/templates/system/mail/add.html b/pear-entrance/src/main/resources/templates/system/mail/add.html
new file mode 100644
index 0000000000000000000000000000000000000000..a734344744918b062e9486ba47c30c0c786195b3
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/mail/add.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/mail/main.html b/pear-entrance/src/main/resources/templates/system/mail/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..5cdba694334975963471f00b5f01184cf0c499c8
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/mail/main.html
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/SysMailController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/SysMailController.java
new file mode 100644
index 0000000000000000000000000000000000000000..32bf92392796e9ac30aca501eaab58b094f51d8e
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/SysMailController.java
@@ -0,0 +1,98 @@
+package com.pearadmin.system.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.constant.ControllerConstant;
+import com.pearadmin.common.tools.string.StringUtil;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import com.pearadmin.system.domain.SysMail;
+import com.pearadmin.system.service.ISysMailService;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+
+/**
+ * @Author: Heiky
+ * @Date: 2021/1/13 15:34
+ * @Description:
+ */
+@RestController
+@RequestMapping(ControllerConstant.API_SYSTEM_PREFIX + "mail")
+@Api(value = "邮件controller", tags = {"邮件操作接口"})
+public class SysMailController extends BaseController {
+
+ /**
+ * 基 础 路 径
+ */
+ private String MODULE_PATH = "system/mail/";
+
+ @Resource
+ private ISysMailService sysMailService;
+
+ /**
+ * Describe: 邮件管理页面
+ * Return: ModelAndView
+ */
+ @GetMapping("/main")
+ public ModelAndView main() {
+ return JumpPage(MODULE_PATH + "main");
+ }
+
+ /**
+ * Describe: 邮件列表数据
+ * Param: PageDomain
+ * Return: 邮件列表
+ */
+ @GetMapping("/data")
+ public ResultTable data(SysMail sysMail, PageDomain pageDomain) {
+ PageInfo page = sysMailService.page(sysMail, pageDomain);
+ return pageTable(page.getList(), page.getTotal());
+ }
+
+ /**
+ * Describe: 邮件发送
+ * Return: ModelAndView
+ */
+ @GetMapping("/add")
+ public ModelAndView add() {
+ return JumpPage(MODULE_PATH + "add");
+ }
+
+ /**
+ * Describe: 邮件保存和发送
+ * Param: SysMail
+ * Return: 操作结果
+ */
+ @PostMapping("/save")
+ public Result save(@RequestBody SysMail sysMail) {
+ return decide(sysMailService.save(sysMail));
+ }
+
+ /**
+ * Describe: 删除邮件
+ * Param: String
+ * Return: 操作结果
+ */
+ @DeleteMapping("/remove/{mailId}")
+ public Result remove(@PathVariable String mailId) {
+ return decide(sysMailService.removeById(mailId));
+ }
+
+ /**
+ * Describe: 批量删除邮件
+ * Param: String
+ * Return: 操作结果
+ */
+ @DeleteMapping("/batchRemove/{ids}")
+ public Result batchRemove(@PathVariable String ids) {
+ ArrayList idList = CollectionUtil.newArrayList(StringUtil.split(ids, ","));
+ return decide(sysMailService.removeByIds(idList));
+ }
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/SysMail.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/SysMail.java
new file mode 100644
index 0000000000000000000000000000000000000000..968fa2613618a7dfb4c2f9e51420380ba4a7fda1
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/SysMail.java
@@ -0,0 +1,50 @@
+package com.pearadmin.system.domain;
+
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * Describe: 邮 件 发 送 实 体
+ * Author: Heiky
+ * CreateTime: 2021/1/13
+ */
+@Data
+@Alias("SysMail")
+public class SysMail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 邮件id
+ */
+ private String mailId;
+
+ /**
+ * 接收人(邮箱)
+ */
+ private String receiver;
+
+ /**
+ * 邮件主体
+ */
+ private String subject;
+
+ /**
+ * 邮件正文
+ */
+ private String content;
+
+ /**
+ * 发送人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/SysMailMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/SysMailMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..99f6d45d6a5980d9c2b2a01bc2dd48957a9f2cf5
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/SysMailMapper.java
@@ -0,0 +1,49 @@
+package com.pearadmin.system.mapper;
+
+import com.pearadmin.system.domain.SysMail;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Describe: 邮件服务持久层接口
+ * Author: Heiky
+ * CreateTime: 2021/1/13 14:51
+ */
+@Mapper
+public interface SysMailMapper {
+
+ /**
+ * 保存邮件
+ *
+ * @param sysMail
+ * @return integer
+ */
+ Integer insert(SysMail sysMail);
+
+ /**
+ * 根据条件查询邮件列表
+ *
+ * @param sysMail
+ * @return list
+ */
+ List selectList(SysMail sysMail);
+
+ /**
+ * 根据id删除邮件
+ *
+ * @param id
+ * @return 操作结果
+ */
+ Integer deleteById(@Param("mailId") String id);
+
+ /**
+ * 批量删除邮件
+ *
+ * @param ids
+ * @return
+ */
+ Integer deleteByIds(List ids);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/SysMailMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/SysMailMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9fdee74cf20ef36ef44dcff5279ec167459268fd
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/SysMailMapper.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into sys_mail
+
+
+ mail_id,
+
+
+ receiver,
+
+
+ subject,
+
+
+ content,
+
+
+ create_by,
+
+
+ create_time,
+
+
+
+
+ #{mailId},
+
+
+ #{receiver},
+
+
+ #{subject},
+
+
+ #{content},
+
+
+ #{createBy},
+
+
+ #{createTime},
+
+
+
+
+
+
+
+ delete from sys_mail
+
+ 1 = 0
+
+ or mail_id = #{mailId}
+
+
+
+
+
+ delete from sys_mail
+
+ 1 = 0
+
+ or mail_id in
+
+ #{id}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ISysMailService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ISysMailService.java
new file mode 100644
index 0000000000000000000000000000000000000000..119d1b61668e8f63fbcde3c4749cbf99ba21551c
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ISysMailService.java
@@ -0,0 +1,60 @@
+package com.pearadmin.system.service;
+
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.system.domain.SysMail;
+
+import java.util.List;
+
+/**
+ * Describe: 邮件服务接口类
+ * Author: Heiky
+ * CreateTime: 2021/1/13 15:21
+ */
+public interface ISysMailService {
+
+ /**
+ * Describe: 邮件保存
+ * Param: sysMail
+ * Return: 操作结果
+ */
+ Integer save(SysMail sysMail);
+
+ /**
+ * Describe: 根据条件查询邮件列表数据
+ * Param: sysMail
+ * Return: 返回邮件列表数据
+ */
+ List list(SysMail sysMail);
+
+ /**
+ * Describe: 根据条件查询邮件列表数据 分页
+ * Param: sysMail
+ * Return: 返回分页邮件列表数据
+ */
+ PageInfo page(SysMail sysMail, PageDomain pageDomain);
+
+ /**
+ * Describe: 发送邮件
+ * Param: sysMail
+ * Return: 操作结果
+ */
+ Boolean sendMail(SysMail sysMail);
+
+ /**
+ * Describe: 删除邮件
+ * Param: String
+ * Return: 操作结果
+ */
+ Integer removeById(String id);
+
+ /**
+ * 批量删除邮件
+ *
+ * @param ids
+ * @return
+ */
+ Integer removeByIds(List ids);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/ISysMailServiceImpl.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/ISysMailServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..beccf2373ae60ea3446fc784d8f22dc03a9a8a93
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/ISysMailServiceImpl.java
@@ -0,0 +1,82 @@
+package com.pearadmin.system.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.mail.MailAccount;
+import cn.hutool.extra.mail.MailUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.tools.secure.SecurityUtil;
+import com.pearadmin.common.tools.sequence.SequenceUtil;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.system.domain.SysMail;
+import com.pearadmin.system.domain.SysUser;
+import com.pearadmin.system.mapper.SysMailMapper;
+import com.pearadmin.system.service.ISysMailService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: Heiky
+ * @Date: 2021/1/13 15:24
+ * @Description:
+ */
+
+@Service
+public class ISysMailServiceImpl implements ISysMailService {
+
+ @Resource
+ private SysMailMapper sysMailMapper;
+
+ @Resource
+ private MailAccount mailAccount;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer save(SysMail sysMail) {
+ if (sendMail(sysMail)) {
+ sysMail.setMailId(SequenceUtil.makeStringId());
+ sysMail.setCreateBy(((SysUser) SecurityUtil.currentUser().getPrincipal()).getUsername());
+ return sysMailMapper.insert(sysMail);
+ } else {
+ return 0;
+ }
+ }
+
+ @Override
+ public List list(SysMail sysMail) {
+ return sysMailMapper.selectList(sysMail);
+ }
+
+ @Override
+ public PageInfo page(SysMail sysMail, PageDomain pageDomain) {
+ PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit());
+ List sysMails = sysMailMapper.selectList(sysMail);
+ return new PageInfo<>(sysMails);
+ }
+
+ @Override
+ public Boolean sendMail(SysMail sysMail) {
+ ArrayList tos = CollectionUtil.newArrayList(StrUtil.split(sysMail.getReceiver(), ";"));
+ String send = MailUtil.send(mailAccount, tos,
+ ObjectUtil.isEmpty(sysMail.getSubject()) ? null : sysMail.getSubject(), sysMail.getContent(), false);
+ return ObjectUtil.isNotEmpty(send);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer removeById(String id) {
+ return sysMailMapper.deleteById(id);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer removeByIds(List ids) {
+ return sysMailMapper.deleteByIds(ids);
+ }
+}