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); + } +}