glj-代码提价冲突解决
This commit is contained in:
commit
b87bd45d62
|
@ -62,4 +62,9 @@ public interface CacheNames {
|
||||||
*/
|
*/
|
||||||
String USER_FAIL_KEY = "blade:user::blade:fail:";
|
String USER_FAIL_KEY = "blade:user::blade:fail:";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮箱修改密码验证码key
|
||||||
|
*/
|
||||||
|
String EMAIL_FORGET_KEY = "blade:auth::blade:email:forget:";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ public interface CommonConstant {
|
||||||
* 默认密码
|
* 默认密码
|
||||||
*/
|
*/
|
||||||
String DEFAULT_PASSWORD = "123456";
|
String DEFAULT_PASSWORD = "123456";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认密码参数值
|
* 默认密码参数值
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -169,5 +169,17 @@ public class DisasterInfo implements Serializable {
|
||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String allocation;
|
private String allocation;
|
||||||
|
/**
|
||||||
|
* 拒绝标题
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String refuseTitle;
|
||||||
|
/**
|
||||||
|
* 拒绝理由
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String refuseReason;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,6 @@ import org.springframework.cloud.client.SpringCloudApplication;
|
||||||
@SpringCloudApplication
|
@SpringCloudApplication
|
||||||
public class VoRdmApplication {
|
public class VoRdmApplication {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
BladeApplication.run(CommonConstant.KN_VORDM_MODULE_NAME, VoRdmApplication.class, args);
|
BladeApplication.run("yyhouc-"+CommonConstant.KN_VORDM_MODULE_NAME, VoRdmApplication.class, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
package com.kening.vordm.controller;
|
package com.kening.vordm.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.kening.vordm.entity.Administrator;
|
import com.kening.vordm.entity.Administrator;
|
||||||
import com.kening.vordm.service.AdministratorService;
|
import com.kening.vordm.service.AdministratorService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springblade.core.cache.utils.CacheUtil;
|
||||||
import org.springblade.core.mp.support.Condition;
|
import org.springblade.core.mp.support.Condition;
|
||||||
import org.springblade.core.mp.support.Query;
|
import org.springblade.core.mp.support.Query;
|
||||||
import org.springblade.core.secure.BladeUser;
|
import org.springblade.core.secure.BladeUser;
|
||||||
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.api.R;
|
||||||
import org.springblade.core.tool.utils.DigestUtil;
|
import org.springblade.core.tool.utils.DigestUtil;
|
||||||
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.Func;
|
||||||
|
import org.springframework.http.HttpRequest;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 后台管理系统-chief管理员管理控制器
|
* 后台管理系统-chief管理员管理控制器
|
||||||
* @author liyuchen
|
* @author liyuchen
|
||||||
|
@ -47,6 +52,7 @@ public class AdministratorController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
public R<Boolean> add(@RequestBody Administrator administrator){
|
public R<Boolean> add(@RequestBody Administrator administrator){
|
||||||
|
CacheUtil.clear(USER_CACHE);
|
||||||
return R.status(service.saveChiefAdmin(administrator));
|
return R.status(service.saveChiefAdmin(administrator));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +63,7 @@ public class AdministratorController {
|
||||||
*/
|
*/
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
public R<Boolean> update(@RequestBody Administrator administrator){
|
public R<Boolean> update(@RequestBody Administrator administrator){
|
||||||
|
CacheUtil.clear(USER_CACHE);
|
||||||
return R.status(service.updateById(administrator));
|
return R.status(service.updateById(administrator));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,4 +76,53 @@ public class AdministratorController {
|
||||||
public R<Boolean> delete(@RequestParam String ids){
|
public R<Boolean> delete(@RequestParam String ids){
|
||||||
return R.status(service.deleteLogic(Func.toLongList(ids)));
|
return R.status(service.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 重置密码前发送邮件验证码
|
||||||
|
*/
|
||||||
|
@GetMapping("/sendEmailCode")
|
||||||
|
public R<Boolean> sendEmailCode(@RequestParam String email,@RequestParam String tenantId){
|
||||||
|
return R.data(service.sendEmailCode(email,tenantId));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 验证账号或邮箱是否存在
|
||||||
|
*/
|
||||||
|
@GetMapping("/checkAccountOrEmail")
|
||||||
|
public R<Boolean> checkAccountOrEmail(@RequestParam String email,@RequestParam String tenantId ){
|
||||||
|
return R.data(service.checkAccountOrEmail(email,tenantId));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 修改密码
|
||||||
|
*/
|
||||||
|
@PutMapping("/updatePassword")
|
||||||
|
public R<Boolean> updatePassword(@RequestParam String email,@RequestParam String newPassword,@RequestParam String tenantId,@RequestParam String code){
|
||||||
|
CacheUtil.clear(USER_CACHE);
|
||||||
|
return R.data(service.updatePassword(email,newPassword,tenantId,code));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 根据账号验证传入的密码是否正确
|
||||||
|
*/
|
||||||
|
@GetMapping("/checkPassword")
|
||||||
|
public R<Boolean> checkPassword(@RequestParam String account,@RequestParam String tenantId,@RequestParam String password){
|
||||||
|
Administrator administrator = service.getOne(Wrappers.<Administrator>query().lambda().eq(Administrator::getAccount,account).eq(Administrator::getTenantId,tenantId));
|
||||||
|
if(administrator == null){
|
||||||
|
return R.data(false);
|
||||||
|
}
|
||||||
|
return R.data(administrator.getPassword().equals(DigestUtil.encrypt(password)));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 根据老密码修改密码
|
||||||
|
*/
|
||||||
|
@PutMapping("/updatePasswordByOldPassword")
|
||||||
|
public R<Boolean> updatePasswordByOldPassword(@RequestParam String account,@RequestParam String tenantId,@RequestParam String oldPassword,@RequestParam String newPassword){
|
||||||
|
CacheUtil.clear(USER_CACHE);
|
||||||
|
Administrator administrator = service.getOne(Wrappers.<Administrator>query().lambda().eq(Administrator::getAccount,account).eq(Administrator::getTenantId,tenantId));
|
||||||
|
if(administrator == null){
|
||||||
|
return R.data(false);
|
||||||
|
}
|
||||||
|
if(administrator.getPassword().equals(DigestUtil.encrypt(oldPassword))){
|
||||||
|
administrator.setPassword(DigestUtil.encrypt(newPassword));
|
||||||
|
return R.data(service.updateById(administrator));
|
||||||
|
}
|
||||||
|
return R.data(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.kening.vordm.controller;
|
package com.kening.vordm.controller;
|
||||||
|
|
||||||
|
import cn.hutool.crypto.digest.MD5;
|
||||||
|
import com.alibaba.nacos.common.utils.MD5Utils;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||||
|
@ -15,6 +17,8 @@ import org.springblade.core.mp.support.Query;
|
||||||
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.api.R;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -99,5 +103,30 @@ public class CrawlInfoController {
|
||||||
List<CrawlInfo> list = crawlInfoService.list(Wrappers.<CrawlInfo>query().lambda().eq(CrawlInfo::getDisasterId, disasterId).notIn(CrawlInfo::getType, "1","2","3","4"));
|
List<CrawlInfo> list = crawlInfoService.list(Wrappers.<CrawlInfo>query().lambda().eq(CrawlInfo::getDisasterId, disasterId).notIn(CrawlInfo::getType, "1","2","3","4"));
|
||||||
return R.data(list);
|
return R.data(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String key = encrypt("^RUWY6@d&%hVf5qYY9basW21KIaBmuER");
|
||||||
|
long time = System.currentTimeMillis()/1000;
|
||||||
|
System.out.println(time+"-"+encrypt((key+time)));
|
||||||
|
}
|
||||||
|
public static String encrypt(String plaintext) {
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||||
|
md.update(plaintext.getBytes());
|
||||||
|
byte[] bytes = md.digest();
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
for (byte b : bytes) {
|
||||||
|
String hex = Integer.toHexString(b & 0xff);
|
||||||
|
if (hex.length() == 1) {
|
||||||
|
result.append("0");
|
||||||
|
}
|
||||||
|
result.append(hex);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.kening.vordm.controller;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
|
@ -337,14 +338,32 @@ public class DisasterInfoController {
|
||||||
private final AdministratorService administratorService;
|
private final AdministratorService administratorService;
|
||||||
@PostMapping("review")
|
@PostMapping("review")
|
||||||
public R<Boolean> review(@RequestBody DisasterInfo disasterInfo) {
|
public R<Boolean> review(@RequestBody DisasterInfo disasterInfo) {
|
||||||
|
//审核邮件实例化
|
||||||
|
Email email = new Email();
|
||||||
|
//查询邮箱
|
||||||
|
QueryWrapper<GuestInfo> qw = new QueryWrapper<>();
|
||||||
|
qw.apply("id = (select sponsor_id from guest_manage_disaster_ref where disaster_id = {0})", disasterInfo.getId());
|
||||||
|
GuestInfo guestInfo = guestInfoService.getOne(qw);
|
||||||
|
email.setTos(new String[]{ guestInfo.getEmail()});
|
||||||
//审批通过 响应状态,0未审批,1审批未通过。2审批通过并正在响应,3审批通过并且响应完成
|
//审批通过 响应状态,0未审批,1审批未通过。2审批通过并正在响应,3审批通过并且响应完成
|
||||||
if (disasterInfo.getRespondStatus() == 2) {
|
if (disasterInfo.getRespondStatus() == 2) {
|
||||||
String numbering = serialNumberService.generateNumbering(disasterInfo.getDisasterType());
|
String numbering = serialNumberService.generateNumbering(disasterInfo.getDisasterType());
|
||||||
disasterInfo.setVordmId(numbering);
|
disasterInfo.setVordmId(numbering);
|
||||||
disasterInfo.setRespondTime(new Date());
|
disasterInfo.setRespondTime(new Date());
|
||||||
|
email.setSubject("Your disaster response application has been approved!");
|
||||||
|
email.setText("Your disaster response application has been approved!");
|
||||||
|
}else{
|
||||||
|
email.setSubject(disasterInfo.getRefuseTitle());
|
||||||
|
email.setText(disasterInfo.getRefuseReason());
|
||||||
}
|
}
|
||||||
Boolean flag = disasterInfoService.updateById(disasterInfo);
|
// Boolean flag = disasterInfoService.updateById(disasterInfo);
|
||||||
return R.data(flag);
|
//保证数据在更新完后发送邮件。防止数据更新失败,邮件发送成功
|
||||||
|
try {
|
||||||
|
emailService.sendMimeMessage(email);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return R.fail("发送失败");
|
||||||
|
}
|
||||||
|
return R.data(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final EmailService emailService;
|
private final EmailService emailService;
|
||||||
|
|
|
@ -23,4 +23,10 @@ public interface AdministratorService extends BaseService<Administrator> {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean saveChiefAdmin(Administrator administrator);
|
boolean saveChiefAdmin(Administrator administrator);
|
||||||
|
|
||||||
|
boolean sendEmailCode(String email,String tenantId);
|
||||||
|
|
||||||
|
boolean checkAccountOrEmail(String email ,String tenantId);
|
||||||
|
|
||||||
|
boolean updatePassword(String email, String newPassword, String tenantId, String code);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ public interface EmailService {
|
||||||
void sendMimeMessage(Email email) throws MessagingException;
|
void sendMimeMessage(Email email) throws MessagingException;
|
||||||
|
|
||||||
void sendTemplate(Email email) throws MessagingException;
|
void sendTemplate(Email email) throws MessagingException;
|
||||||
|
void sendTemplate(Email email,String template) throws MessagingException;
|
||||||
|
|
||||||
R sendUserPasswordEmail(UserVo userVo) throws MessagingException;
|
R sendUserPasswordEmail(UserVo userVo) throws MessagingException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
package com.kening.vordm.service.impl;
|
package com.kening.vordm.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
import com.kening.vordm.entity.Administrator;
|
import com.kening.vordm.entity.Administrator;
|
||||||
import com.kening.vordm.entity.Email;
|
import com.kening.vordm.entity.Email;
|
||||||
import com.kening.vordm.mapper.AdministratorMapper;
|
import com.kening.vordm.mapper.AdministratorMapper;
|
||||||
import com.kening.vordm.service.AdministratorService;
|
import com.kening.vordm.service.AdministratorService;
|
||||||
import com.kening.vordm.service.EmailService;
|
import com.kening.vordm.service.EmailService;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springblade.common.cache.CacheNames;
|
||||||
import org.springblade.core.mp.base.BaseServiceImpl;
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
||||||
|
import org.springblade.core.redis.cache.BladeRedis;
|
||||||
import org.springblade.core.tool.utils.DigestUtil;
|
import org.springblade.core.tool.utils.DigestUtil;
|
||||||
|
import org.springblade.core.tool.utils.StringUtil;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -32,6 +34,8 @@ public class AdministratorServiceImpl extends BaseServiceImpl<AdministratorMappe
|
||||||
|
|
||||||
private final EmailService emailService;
|
private final EmailService emailService;
|
||||||
|
|
||||||
|
private final BladeRedis bladeRedis;
|
||||||
|
|
||||||
|
|
||||||
@Value("${mail.home.link}")
|
@Value("${mail.home.link}")
|
||||||
private String link;
|
private String link;
|
||||||
|
@ -110,4 +114,82 @@ public class AdministratorServiceImpl extends BaseServiceImpl<AdministratorMappe
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendEmailCode(String email ,String tenantId) {
|
||||||
|
//查询用户是否存在 条件邮箱加租户id
|
||||||
|
Administrator admin = getOne(Wrappers.<Administrator>lambdaQuery().eq(Administrator::getEmail,email).eq(Administrator::getTenantId,tenantId));
|
||||||
|
if(admin==null){
|
||||||
|
throw new RuntimeException("The email is not registered");
|
||||||
|
}
|
||||||
|
|
||||||
|
//随机生成6位数验证码
|
||||||
|
String code = String.valueOf((int)((Math.random()*9+1)*100000));
|
||||||
|
//将验证码存入redis ,有效期10分钟
|
||||||
|
Duration duration = Duration.ofMinutes(10);
|
||||||
|
bladeRedis.setEx(CacheNames.EMAIL_FORGET_KEY +email,code,duration);
|
||||||
|
try {
|
||||||
|
//设置标题
|
||||||
|
String subject = "Verification code";
|
||||||
|
//设置要填充模板的参数
|
||||||
|
Map<String, Object> dataMap = new HashMap<>();
|
||||||
|
dataMap.put("code", code);
|
||||||
|
dataMap.put("account",admin.getAccount());
|
||||||
|
dataMap.put("email",admin.getEmail());
|
||||||
|
Email emailObj = new Email();
|
||||||
|
emailObj.setSubject(subject);
|
||||||
|
emailObj.setHtmlText(true);
|
||||||
|
emailObj.setTos(new String[]{email});
|
||||||
|
emailObj.setDataMap(dataMap);
|
||||||
|
emailService.sendTemplate(emailObj, "forgotPassword");
|
||||||
|
log.info("邮件发送成功");
|
||||||
|
return true;
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("发送邮件失败:{}",e);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkAccountOrEmail(String email,String tenantId) {
|
||||||
|
//查询用户是否存在
|
||||||
|
Administrator admin = getOne(Wrappers.<Administrator>lambdaQuery().eq(Administrator::getEmail,email).eq(Administrator::getTenantId,tenantId));
|
||||||
|
return admin!=null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean updatePassword(String email, String newPassword, String tenantId, String code) {
|
||||||
|
//首先根据邮箱、租户id查询用户是否存在
|
||||||
|
Administrator admin = getOne(Wrappers.<Administrator>lambdaQuery().eq(Administrator::getEmail,email).eq(Administrator::getTenantId,tenantId));
|
||||||
|
if(admin==null){
|
||||||
|
throw new RuntimeException("The email is not registered");
|
||||||
|
}
|
||||||
|
//判断验证码是否为空
|
||||||
|
if(StringUtil.isBlank(code)){
|
||||||
|
throw new RuntimeException("Verification code cannot be empty");
|
||||||
|
}
|
||||||
|
//校验验证码是否正确
|
||||||
|
String codeRedis = bladeRedis.get(CacheNames.EMAIL_FORGET_KEY + email);
|
||||||
|
//如果codeRedis 验证码为空返回请发送验证码提示
|
||||||
|
if(StringUtil.isBlank(codeRedis)){
|
||||||
|
throw new RuntimeException("Please send the verification code first");
|
||||||
|
}
|
||||||
|
//将redis中的验证码设置为-100,并且超时时间为50秒
|
||||||
|
bladeRedis.setEx(CacheNames.EMAIL_FORGET_KEY + email,"-100",Duration.ofSeconds(50));
|
||||||
|
//判断当前验证码是否为-100,如果是-100则提示验证码已过期
|
||||||
|
if("-100".equals(codeRedis)){
|
||||||
|
throw new RuntimeException("Verification code has expired");
|
||||||
|
}
|
||||||
|
if(!code.equals(codeRedis)){
|
||||||
|
throw new RuntimeException("Verification code error");
|
||||||
|
}
|
||||||
|
//修改密码
|
||||||
|
admin.setPassword(DigestUtil.encrypt(newPassword));
|
||||||
|
if(updateById(admin)){
|
||||||
|
//删除redis中的验证码
|
||||||
|
bladeRedis.del(CacheNames.EMAIL_FORGET_KEY + email);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,11 @@ public class EmailServiceImpl implements EmailService {
|
||||||
javaMailSender.send(buildTemplateMail(email));
|
javaMailSender.send(buildTemplateMail(email));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendTemplate(Email email, String template) throws MessagingException {
|
||||||
|
javaMailSender.send(buildTemplateMail(email,template));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public R sendUserPasswordEmail(UserVo userVo) throws MessagingException {
|
public R sendUserPasswordEmail(UserVo userVo) throws MessagingException {
|
||||||
//通过邮箱判断当前用户是否存在
|
//通过邮箱判断当前用户是否存在
|
||||||
|
@ -97,6 +102,33 @@ public class EmailServiceImpl implements EmailService {
|
||||||
helper.setText(templateContent, true);
|
helper.setText(templateContent, true);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 构建模板邮件
|
||||||
|
* @param email
|
||||||
|
* @return
|
||||||
|
* @throws MessagingException
|
||||||
|
*/
|
||||||
|
public MimeMessage buildTemplateMail(Email email,String template) throws MessagingException {
|
||||||
|
//模板数据内容
|
||||||
|
Context context = new Context();
|
||||||
|
//插入模板数据
|
||||||
|
for (Map.Entry<String, Object> entry : email.getDataMap().entrySet()) {
|
||||||
|
context.setVariable(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
//使用的模板
|
||||||
|
String templateContent = templateEngine.process(template, context);
|
||||||
|
MimeMessage message = javaMailSender.createMimeMessage();
|
||||||
|
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|
||||||
|
//发送人
|
||||||
|
helper.setFrom(from);
|
||||||
|
//收件人
|
||||||
|
helper.setTo(email.getTos());
|
||||||
|
//主题
|
||||||
|
helper.setSubject(email.getSubject());
|
||||||
|
//发送内容
|
||||||
|
helper.setText(templateContent, true);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建邮件发送内容
|
* 构建邮件发送内容
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>邮件模板</title>
|
||||||
|
<style type="text/css">
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #ECECEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 800px;
|
||||||
|
margin: 50px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
height: 80px;
|
||||||
|
background-color: #49bcff;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
padding-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header h2 {
|
||||||
|
padding-top: 25px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
background-color: #fff;
|
||||||
|
padding-left: 30px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content h2 {
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content p {
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
padding: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer p {
|
||||||
|
color: #747474;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--您好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持!
|
||||||
|
<a href="#" th:href="@{http://www.baidu.com/register/{id}(id=${id})}">激活账号</a>-->
|
||||||
|
<div class="container">
|
||||||
|
<div class="content">
|
||||||
|
<h2>Hello, you are about to change your password!</h2>
|
||||||
|
<h3>Please do not disclose the verification code. His effective time is 10 minutes!</h3>
|
||||||
|
<p>Your account number:<b><span th:text="${account}"></span></b></p>
|
||||||
|
<p>Your Email:<b><span th:text="${email}"></span></b></p>
|
||||||
|
<p>Your verification code:<b><span th:text="${code}"></span></b></p>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<p>This is system mail, please do not reply</p>
|
||||||
|
<p>Please take good care of your information to avoid misappropriation</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue