Commit 0c02ac1e by chentianzhong

优化代码和排版

parent 94cc4aa6
......@@ -30,6 +30,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -74,25 +75,25 @@ public class EmailApiController {
AssertUtils.isTrue(businessSystemService.checkSystemInfo(emailVo), "业务系统信息验证不通过");
emailVo.setIp(clientIP);
emailVo.setMethodName("/email/api/sendEmail");
SysLog sysLog = null;
try {
EmailContent content = this.emailPersonService.sendEmailApi(emailVo);
sysLog = sysLogService.insertSysLog(emailVo);
sysLogService.insertSysLog(emailVo);
return ResultVo.success(content.getId());
}catch (Exception e){
emailVo.setExceptionDetails(e.getLocalizedMessage());
sysLog = sysLogService.insertSysLog(emailVo);
SysLog sysLog = sysLogService.insertSysLog(emailVo);
log.error("邮件api接口(兼容旧)失败!!!!!");
log.error(e.getLocalizedMessage(), e);
emailVo.setExceptionDetails(e.getLocalizedMessage());
sysLogService.updateById(sysLog);
return ResultVo.fail(sysLog.getExceptionDetails());
}
return ResultVo.fail(sysLog.getExceptionDetails());
}
@ApiOperation("邮件api接口(兼容旧)")
@ApiOperation("邮件api接口")
@AnonymousPostMapping("emailSend")
public ResultVo emailSend(@RequestBody EmailEditApiVo vo) {
AssertUtils.hasText(vo.getTitle(), "缺少参数title");
......
......@@ -2,8 +2,12 @@ package com.zq.email.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.zq.common.annotation.AnonymousAccess;
......@@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
......@@ -52,8 +57,7 @@ public class EmailAttachController {
private final IEmailAttachService emailAttachService;
private final FileFeignClient fileFeignClient;
@Value("${spring.cloud.config.profile}")
private String profile;
@ApiOperation("获取附件")
@PostMapping
......@@ -64,41 +68,18 @@ public class EmailAttachController {
@ApiOperation("下载附件")
@AnonymousGetMapping("/download/{id}")
public void download(HttpServletRequest request, HttpServletResponse response, @PathVariable("id") String id) {
public void download(HttpServletRequest request, HttpServletResponse response, @PathVariable("id") Long id) {
EmailAttach emailAttach = emailAttachService.getById(id);
AssertUtils.notNull(emailAttach, "获取附件信息失败");
String download = emailAttach.getDownloadPath();
log.info("文件下载地址1111:{}", download);
if (StrUtil.isBlank(download)){
String year = DateUtil.format(emailAttach.getSendTime(), "yyyy");
String yearMonth = DateUtil.format(emailAttach.getSendTime(), "yyyyMM");
String yearMonthDate = DateUtil.format(emailAttach.getSendTime(), "yyyyMMdd");
String path = "/" + year + "/" + yearMonth + "/" + yearMonthDate + "/" + emailAttach.getAttachId() + "/" + emailAttach.getAttachName();
if (profile.equals("product") || profile.equals("test")) {
download = "http://147.1.3.87/attwjsf_email" + path;
}else if (profile.equals("wanpro") || profile.equals("wantest")){
download = "http://172.28.1.159:82/attwjsf_yj" + path;
}
}else{
if (profile.equals("wanpro") || profile.equals("wantest")) {
download.replaceAll("147.2.3.3", "172.28.1.70");
}
}
log.info("文件下载地址2222:{}", download);
String download = emailAttachService.getDownloadPath(emailAttach);
AssertUtils.hasText(download, "下载地址为空");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
OutputStream os = response.getOutputStream();
HttpUtil.download(download, outputStream, true);
byte[] bytes = outputStream.toByteArray();
response.reset();
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition",
"attachment;filename=" + new String(emailAttach.getAttachName().getBytes(StandardCharsets.UTF_8),
StandardCharsets.ISO_8859_1));
response.addHeader("Content-Length", "" + bytes.length);
os.write(bytes);
os.flush();
ServletUtil.write(response, IoUtil.toStream(bytes), "application/octet-stream",
new String(emailAttach.getAttachName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
} catch (Exception e) {
log.error("下载文件失败:" + e.getLocalizedMessage(), e);
AssertUtils.isTrue(false, "网络异常,下载文件失败");
......@@ -109,26 +90,8 @@ public class EmailAttachController {
@ApiOperation("返回附件下载地址")
@GetMapping("/downloadPath/{id}")
public ResultVo downloadPath(@PathVariable("id") String id) {
EmailAttach emailAttach = emailAttachService.getById(id);
AssertUtils.notNull(emailAttach, "获取附件信息失败");
String download = emailAttach.getDownloadPath();
log.info("文件下载地址 downloadPath 1111:{}", download);
if (StrUtil.isBlank(download)) {
String year = DateUtil.format(emailAttach.getSendTime(), "yyyy");
String yearMonth = DateUtil.format(emailAttach.getSendTime(), "yyyyMM");
String yearMonthDate = DateUtil.format(emailAttach.getSendTime(), "yyyyMMdd");
String path = "/" + year + "/" + yearMonth + "/" + yearMonthDate + "/" + emailAttach.getAttachId() + "/" + emailAttach.getAttachName();
if (profile.equals("product") || profile.equals("test")) {
download = "http://147.1.3.87/attwjsf_email" + path;
} else if (profile.equals("wanpro") || profile.equals("wantest")) {
download = "http://172.28.1.159:82/attwjsf_yj" + path;
}
} else {
if (profile.equals("wanpro") || profile.equals("wantest")) {
download.replaceAll("147.2.3.3", "172.28.1.70");
}
}
public ResultVo downloadPath(@PathVariable("id") Long id) {
String download = emailAttachService.getDownloadPath(id);
AssertUtils.hasText(download, "内部错误,获取下载地址空");
return ResultVo.success(download);
}
......@@ -137,50 +100,8 @@ public class EmailAttachController {
@ApiOperation("wps预览")
@GetMapping("/viewFileByWps/{id}")
public ResultVo viewFileByWps(@PathVariable("id") String id) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
EmailAttach emailAttach = emailAttachService.getById(id);
AssertUtils.notNull(emailAttach, "获取附件信息失败");
AssertUtils.notNull(emailAttach.getAttachName(), "附件名称为空");
String suffix = emailAttach.getAttachName().substring(emailAttach.getAttachName().lastIndexOf(".") + 1);
String download = emailAttach.getDownloadPath();
log.info("文件下载地址 downloadPath 1111:{}", download);
if (StrUtil.isBlank(download)) {
String year = DateUtil.format(emailAttach.getSendTime(), "yyyy");
String yearMonth = DateUtil.format(emailAttach.getSendTime(), "yyyyMM");
String yearMonthDate = DateUtil.format(emailAttach.getSendTime(), "yyyyMMdd");
String path = "/" + year + "/" + yearMonth + "/" + yearMonthDate + "/" + emailAttach.getAttachId() + "/" + emailAttach.getAttachName();
if (profile.equals("product") || profile.equals("test")) {
download = "http://147.1.3.87/attwjsf_email" + path;
} else if (profile.equals("wanpro") || profile.equals("wantest")) {
download = "http://172.28.1.159:82/attwjsf_yj" + path;
}
} else {
if (profile.equals("wanpro") || profile.equals("wantest")) {
download.replaceAll("147.2.3.3", "172.28.1.70");
}
}
log.info("文件下载地址 downloadPath 222:{}", download);
AssertUtils.hasText(download, "获取到的下载地址为空");
//调用文件服务wps
FileViewVo viewVo = new FileViewVo();
viewVo.setFileId(IdUtil.fastSimpleUUID());
viewVo.setDownloadPath(download);
viewVo.setFileType(suffix);
viewVo.setFileName(emailAttach.getAttachName());
viewVo.setUserId(String.valueOf(adminContext.getUserId()));
ResultVo<String> resultVo = fileFeignClient.getViewUrlByDownloadPath(viewVo);
log.info("中台返回结果:"+ JSONUtil.toJsonStr(resultVo));
String linkUrl = "";
if (resultVo.isSuccess() && StrUtil.isNotBlank(resultVo.getData())){
linkUrl = resultVo.getData();
}
AssertUtils.hasText(linkUrl, "调用wps组件失败,失败原因("+resultVo.getErrMsg()+")");
return ResultVo.success(linkUrl);
public ResultVo viewFileByWps(@PathVariable("id") Long id) {
return ResultVo.success(emailAttachService.getWpsPreviewUrl(id));
}
......
......@@ -4,7 +4,6 @@ package com.zq.email.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
import com.zq.email.entity.EmailContent;
......@@ -18,16 +17,11 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
/**
......@@ -107,33 +101,13 @@ public class EmailController {
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
AssertUtils.notNull(vo.getContentId(), "缺少参数:contentId");
EmailContent content = emailContentService.getById(vo.getContentId());
AssertUtils.notNull(content, "获取邮件内容失败");
EmailPerson emailPerson = emailPersonService.getByIdAndSendTime(vo.getPersonId(), content.getSendTime());
AssertUtils.notNull(emailPerson, "获取邮件对应人员信息失败");
AssertUtils.isTrue(emailPerson.getUserId().equals(adminContext.getUserId()) , "非本人邮件,不允许阅读");
AssertUtils.notNull(content, "邮件内容读取失败");
EmailPerson emailPerson = emailPersonService.getByContentAndFolderId(content.getId(), content.getSendTime(), vo.getFolderId());
AssertUtils.notNull(emailPerson, "邮件人员信息不匹配");
emailPerson.setEmailContent(content);
return ResultVo.success(emailPerson);
}
// @ApiOperation("回复")
// @PostMapping("reply")
// public ResultVo reply(@RequestBody EmailEditVo vo) {
// AssertUtils.hasText(vo.getTitle(), "缺少参数:title");
// AssertUtils.notNull(vo.getIsSend(), "缺少参数: isSend");
// AssertUtils.isTrue(CollectionUtil.isNotEmpty(vo.getReceiver()) || CollectionUtil.isNotEmpty(vo.getReceiver()), "缺少参数:receiver和 receiveDeptList");
// emailPersonService.emailEditVo(vo);
// return ResultVo.success();
// }
//
// @ApiOperation("转发")
// @PostMapping("forward")
// public ResultVo forward(@RequestBody EmailEditVo vo) {
// AssertUtils.hasText(vo.getTitle(), "缺少参数:title");
// AssertUtils.notNull(vo.getIsSend(), "缺少参数: isSend");
// AssertUtils.isTrue(CollectionUtil.isNotEmpty(vo.getReceiver()) || CollectionUtil.isNotEmpty(vo.getReceiver()), "缺少参数:receiver和 receiveDeptList");
// emailPersonService.emailEditVo(vo);
// return ResultVo.success();
// }
@ApiOperation("收件箱彻底删除")
@PostMapping("delete")
......
......@@ -20,8 +20,8 @@ public interface MessageFeignClient {
* @param param
* @return
*/
@PostMapping("/web/send")
ResultVo sendWebMessage(@RequestBody Map<String, Object> param);
@PostMapping("/web/sendApi")
ResultVo sendApi(@RequestBody Map<String, Object> param);
/**
* 新增待办事宜
......@@ -32,8 +32,8 @@ public interface MessageFeignClient {
* @param params content - 待办内容 - 必传
* @return
*/
@PostMapping("/todo/addToDo")
ResultVo addToDo(@RequestBody Map<String, Object> params);
@PostMapping("/todo/addToDoApi")
ResultVo addToDoApi(@RequestBody Map<String, Object> params);
/**
* 撤回网页消息
......@@ -42,7 +42,7 @@ public interface MessageFeignClient {
* @param params
* @return
*/
@DeleteMapping("/web/delMessageBySystem")
@DeleteMapping("/web/revokeWebBySysInfo")
ResultVo revokeWebBySysInfo(@RequestBody Map<String, Object> params);
/**
......@@ -52,7 +52,7 @@ public interface MessageFeignClient {
* @param params
* @return
*/
@DeleteMapping("/todo/delMessageBySystem")
@DeleteMapping("/todo/revokeTodoBySysInfo")
ResultVo revokeTodoBySysInfo(@RequestBody Map<String, Object> params);
}
......@@ -24,4 +24,9 @@ public interface IEmailAttachService extends IService<EmailAttach> {
List<EmailAttach> findByContentId(Long contentId);
String getDownloadPath(Long id);
String getDownloadPath(EmailAttach emailAttach);
String getWpsPreviewUrl(Long id);
}
......@@ -27,6 +27,8 @@ public interface IEmailContentService extends IService<EmailContent> {
EmailContent saveContentApi(ApiSendEmailVo emailVo, CustomerUserVo data, List<Long> receiveIds);
EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formUser);
void setTaskEmail(EmailTaskVo vo);
void setDegreeEmail(EmailDegreeVo vo);
......@@ -37,5 +39,5 @@ public interface IEmailContentService extends IService<EmailContent> {
List<Long> findRecentlySendEmail(Integer num);
EmailContent saveContent(EmailEditApiVo vo, CustomerUserVo formUser);
}
......@@ -2,6 +2,7 @@ package com.zq.email.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
import com.zq.email.entity.EmailContent;
import com.zq.email.entity.EmailPerson;
......@@ -24,37 +25,61 @@ import java.util.List;
*/
public interface IEmailPersonService extends IService<EmailPerson> {
//邮件分页总数
Integer emailCount(EmailReqVo vo);
//邮件分页列表
Page<EmailPerson> emailPage(EmailReqVo vo);
//写邮件
EmailContent emailEditVo(EmailEditVo vo);
//保存发件人1
EmailPerson saveEmailSender(OnlineUserDto userDto, EmailContent content, Long folderId, Integer isSend);
//保存发件人2
EmailPerson saveEmailSender(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend);
//保存收件人
void saveEmailReceiver(List<CustomerUserVo> receiverList, EmailContent content, Long folderId, Integer isPerson, Integer isSend);
//移动邮件到文件夹
void moveEmailFolder(EmailFolderMoveVo vo);
//邮件接收人列表
List<EmailPerson> findReceiverByContentId(Long contentId);
//邮件接收人列表(包含回复邮件)
List<EmailPerson> findTaskEmailByContentId(Long contentId);
//全部已读
void readAllEmails(Long folderId);
//已读
void readEmail(EmailReadVo vo);
//删除已读(移动到回收站)
void readToBin(Long folderId);
//删除已读(生成EML文件)
MimeMessage emlFile(Long contentId);
//删除所有收件人已删除邮件
void deleteAllReceiverDelete();
//删除所有收件人未读邮件
void deleteAllReceiverUnread();
// 0上一封 1下一封
EmailPerson lastAndAfterEmail(EmailLastAndAfterReqVo vo, Integer type);
//邮件撤回
void recallPerson(EmailSendVo vo);
//邮件撤回(发件箱列表撤回使用,如果该邮件存在收件人已读无法撤回)
void recallEmail(Long contentId);
//回收站恢复(列表)
void resumeEmail(List<Long> personIdList);
Integer searchTotal(EmailSearchReqVo vo);
......@@ -64,13 +89,25 @@ public interface IEmailPersonService extends IService<EmailPerson> {
//当前部门的人员
ResultVo getUserPolice();
//最近联系人
List<CustomerUserVo> recentlyContacts(List<Long> recentlySendEmail);
//
EmailPerson getByIdAndSendTime(Long personId, LocalDateTime sendTime);
//移动邮件到自定义文件夹或回收站
void moveDetailEmailFolder(EmailDetailVo vo);
/**
* 法意接口发送短信
* **/
EmailContent sendEmailApi(ApiSendEmailVo emailVo);
/**
* 其他接口使用
* **/
EmailContent sendEmailApi2(EmailEditApiVo vo);
//根据content和文件夹获取person
EmailPerson getByContentAndFolderId(Long contentId, LocalDateTime sendTime, Long folderId);
}
......@@ -2,6 +2,9 @@ package com.zq.email.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.*;
......@@ -13,8 +16,10 @@ import com.zq.email.mapper.EmailAttachMapper;
import com.zq.email.service.IEmailAttachService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zq.email.vo.EmailEditVo;
import com.zq.email.vo.api.EmailEditApiVo;
import com.zq.email.vo.FileViewVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
......@@ -31,9 +36,12 @@ import java.util.List;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class EmailAttachServiceImpl extends ServiceImpl<EmailAttachMapper, EmailAttach> implements IEmailAttachService {
private final FileFeignClient fileFeignClient;
@Value("${spring.cloud.config.profile}")
private String profile;
@Override
public void saveAttach(EmailEditVo vo, EmailContent content) {
......@@ -92,5 +100,74 @@ public class EmailAttachServiceImpl extends ServiceImpl<EmailAttachMapper, Email
return this.lambdaQuery().eq(EmailAttach::getEmailContentId, contentId).orderByAsc(EmailAttach::getId).list();
}
@Override
public String getDownloadPath(Long id) {
EmailAttach emailAttach = this.getById(id);
AssertUtils.notNull(emailAttach, "获取附件信息失败");
String download = emailAttach.getDownloadPath();
if (StrUtil.isBlank(download)){
String year = DateUtil.format(emailAttach.getSendTime(), "yyyy");
String yearMonth = DateUtil.format(emailAttach.getSendTime(), "yyyyMM");
String yearMonthDate = DateUtil.format(emailAttach.getSendTime(), "yyyyMMdd");
String path = "/" + year + "/" + yearMonth + "/" + yearMonthDate + "/" + emailAttach.getAttachId() + "/" + emailAttach.getAttachName();
if (profile.equals("product") || profile.equals("test")) {
download = "http://147.1.3.87/attwjsf_email" + path;
}else if (profile.equals("wanpro") || profile.equals("wantest")){
download = "http://172.28.1.159:82/attwjsf_yj" + path;
}
}else{
if (profile.equals("wanpro") || profile.equals("wantest")) {
download.replaceAll("147.2.3.3", "172.28.1.70");
}
}
return download;
}
@Override
public String getDownloadPath(EmailAttach emailAttach) {
String download = emailAttach.getDownloadPath();
if (StrUtil.isBlank(download)){
String year = DateUtil.format(emailAttach.getSendTime(), "yyyy");
String yearMonth = DateUtil.format(emailAttach.getSendTime(), "yyyyMM");
String yearMonthDate = DateUtil.format(emailAttach.getSendTime(), "yyyyMMdd");
String path = "/" + year + "/" + yearMonth + "/" + yearMonthDate + "/" + emailAttach.getAttachId() + "/" + emailAttach.getAttachName();
if (profile.equals("product") || profile.equals("test")) {
download = "http://147.1.3.87/attwjsf_email" + path;
}else if (profile.equals("wanpro") || profile.equals("wantest")){
download = "http://172.28.1.159:82/attwjsf_yj" + path;
}
}else{
if (profile.equals("wanpro") || profile.equals("wantest")) {
download.replaceAll("147.2.3.3", "172.28.1.70");
}
}
return download;
}
@Override
public String getWpsPreviewUrl(Long id) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
EmailAttach emailAttach = this.getById(id);
AssertUtils.notNull(emailAttach, "获取附件信息失败");
AssertUtils.hasText(emailAttach.getAttachName(), "附件名称为空");
String downloadPath = this.getDownloadPath(emailAttach);
String suffix = emailAttach.getAttachName().substring(emailAttach.getAttachName().lastIndexOf(".") + 1);
AssertUtils.hasText(suffix, "错误的文件名称("+emailAttach.getAttachName()+"),导致获取文件类型失败");
FileViewVo viewVo = new FileViewVo();
viewVo.setFileId(IdUtil.fastSimpleUUID());
viewVo.setDownloadPath(downloadPath);
viewVo.setFileType(suffix);
viewVo.setFileName(emailAttach.getAttachName());
viewVo.setUserId(String.valueOf(adminContext.getUserId()));
ResultVo<String> resultVo = fileFeignClient.getViewUrlByDownloadPath(viewVo);
log.info("中台预览文件返回结果: {}", JSONUtil.toJsonStr(resultVo));
AssertUtils.isTrue(resultVo.isSuccess() && StrUtil.isNotBlank(resultVo.getData()), "调用wps组件失败:("+resultVo.getErrMsg()+")");
return resultVo.getData();
}
}
......@@ -106,7 +106,7 @@ public class EmailContentServiceImpl extends ServiceImpl<EmailContentMapper, Ema
content.setSendUserEmail(data.getUsername());
content.setSendUserName(data.getNickName());
content.setSendTime(LocalDateTime.now());
content.setIsTask(WhetherEnum.YES.getKey());
content.setIsTask(WhetherEnum.NO.getKey());
content.setSmsRemind(WhetherEnum.NO.getKey());
content.setMessageRemind(WhetherEnum.NO.getKey());
......@@ -123,6 +123,39 @@ public class EmailContentServiceImpl extends ServiceImpl<EmailContentMapper, Ema
}
@Override
public EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formUser) {
EmailContent content = new EmailContent();
content.setTitle(vo.getTitle());
content.setContent(vo.getContent());
content.setDegree(vo.getDegree());
content.setSendUserId(formUser.getUserId());
content.setSendUserEmail(formUser.getUsername());
content.setSendUserName(formUser.getNickName());
content.setSendTime(LocalDateTime.now());
content.setIsTask(vo.getIsTask());
content.setSmsRemind(vo.getIsSmsRemind());
content.setMessageRemind(vo.getIsMessageRemind());
if (CollectionUtil.isNotEmpty(vo.getReceiver())){
StringBuffer r = new StringBuffer();
for (Long userId : vo.getReceiver()) {
r.append(userId).append(",");
}
content.setUserList(r.toString());
}
if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())){
StringBuffer sb = new StringBuffer();
for (Long deptId : vo.getReceiveDeptList()) {
sb.append(deptId).append(",");
}
content.setDeptList(sb.toString());
}
this.saveOrUpdate(content);
return content;
}
@Override
public void setTaskEmail(EmailTaskVo vo) {
this.lambdaUpdate().in(EmailContent::getId, vo.getContentId()).set(EmailContent::getIsTask, vo.getIsTask()).update();
}
......@@ -187,37 +220,4 @@ public class EmailContentServiceImpl extends ServiceImpl<EmailContentMapper, Ema
return list;
}
@Override
public EmailContent saveContent(EmailEditApiVo vo, CustomerUserVo formUser) {
EmailContent content = new EmailContent();
content.setTitle(vo.getTitle());
content.setContent(vo.getContent());
content.setDegree(vo.getDegree());
content.setSendUserId(formUser.getUserId());
content.setSendUserEmail(formUser.getUsername());
content.setSendUserName(formUser.getNickName());
content.setSendTime(LocalDateTime.now());
content.setIsTask(WhetherEnum.YES.getKey());
content.setSmsRemind(WhetherEnum.NO.getKey());
content.setMessageRemind(WhetherEnum.NO.getKey());
if (CollectionUtil.isNotEmpty(vo.getReceiver())){
StringBuffer r = new StringBuffer();
for (Long userId : vo.getReceiver()) {
r.append(userId).append(",");
}
content.setUserList(r.toString());
}
if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())){
StringBuffer sb = new StringBuffer();
for (Long deptId : vo.getReceiveDeptList()) {
sb.append(deptId).append(",");
}
content.setDeptList(sb.toString());
}
this.saveOrUpdate(content);
return content;
}
}
package com.zq.email.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
import com.zq.email.config.MyThreadPoolTaskExecutor;
import com.zq.email.constants.EmailConstant;
import com.zq.email.dto.DeptDto;
import com.zq.email.dto.DeptSimpleDto;
import com.zq.email.dto.Person;
import com.zq.email.dto.SystemInfo;
import com.zq.email.entity.EmailAttach;
import com.zq.email.entity.EmailContent;
import com.zq.email.entity.EmailFolder;
import com.zq.email.entity.EmailPerson;
import com.zq.email.enums.EmailDegreeEnum;
import com.zq.email.enums.EmailFolderEnum;
import com.zq.email.enums.WhetherEnum;
import com.zq.email.feign.AdminFeignClient;
import com.zq.email.feign.MessageFeignClient;
import com.zq.email.mapper.EmailPersonMapper;
import com.zq.email.service.IEmailAttachService;
import com.zq.email.service.IEmailContentService;
......@@ -38,42 +25,18 @@ import com.zq.email.service.IEmailPersonService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zq.email.utils.DateUtils;
import com.zq.email.utils.EmailUtil;
import com.zq.email.utils.MsgUtil;
import com.zq.email.utils.SmsUtil;
import com.zq.email.vo.*;
import com.zq.email.vo.api.ApiSendEmailVo;
import com.zq.email.vo.api.EmailEditApiVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* <p>
......@@ -91,8 +54,8 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
private final IEmailContentService emailContentService;
private final IEmailAttachService emailAttachService;
private final AdminFeignClient adminFeignClient;
private final MessageFeignClient messageFeignClient;
private final SmsUtil smsUtil;
private final MsgUtil msgUtil;
@Override
public Integer emailCount(EmailReqVo vo) {
......@@ -136,8 +99,10 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
queryWrapper.ge(EmailPerson::getSendTime, DateUtils.getRangeStart(vo.getSearchRange()));
queryWrapper.le(EmailPerson::getSendTime, LocalDateTime.now());
}
queryWrapper.orderByDesc(EmailPerson::getSendTime).orderByAsc(EmailPerson::getIsRead);
queryWrapper.orderByAsc(EmailPerson::getIsRead).orderByDesc(EmailPerson::getSendTime);
page = this.page(page, queryWrapper);
if (page!=null && CollectionUtil.isNotEmpty(page.getRecords())){
for (EmailPerson record : page.getRecords()) {
EmailContent byId = this.emailContentService.getById(record.getEmailContentId());
......@@ -150,8 +115,14 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
@Override
public EmailContent emailEditVo(EmailEditVo vo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
//获取代办前端路径
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务,获取业务系统异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
//邮件
EmailContent content = emailContentService.saveContent(vo, adminContext);
if (content !=null) {
......@@ -160,7 +131,8 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
//person,先删除
this.lambdaUpdate().eq(EmailPerson::getEmailContentId, content.getId()).remove();
//发件人
this.saveEmailSender(adminContext, content, vo);
long folderId = vo.getIsSend().equals(WhetherEnum.YES.getKey()) ? EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue() : EmailFolderEnum.FOLDER_OUTBOX.getKey().longValue();
this.saveEmailSender(adminContext, content, folderId, vo.getIsSend());
//vo.getIsSend() == 1就发送
if (vo.getIsSend()!=null && vo.getIsSend().equals(WhetherEnum.YES.getKey())) {
......@@ -173,9 +145,15 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
receiverList.add(receiver);
}
if (CollectionUtil.isNotEmpty(receiverList)){
this.saveEmailReceiver(receiverList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
//发送短信
smsUtil.sendBatchSms(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
//代办
msgUtil.sendMsg(content, receiverList, systemInfo);
}
}
//收件部门人员
List<CustomerUserVo> deptUserList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())) {
......@@ -184,32 +162,17 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
AssertUtils.isTrue(userByDeptId.isSuccess(), "调用admin失败,根据deptId获取人员接口异常");
deptUserList.addAll(userByDeptId.getData());
}
}
if (CollectionUtil.isNotEmpty(receiverList)) {
//增加收件人
this.saveEmailReceiver(receiverList, content, vo);
//短信
if (content.getSmsRemind()!=null && content.getSmsRemind() == 1) {
new Thread(() -> {
smsUtil.sendBatchSms(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}).start();
}
}
if (CollectionUtil.isNotEmpty(deptUserList)) {
//增加收件部门
this.saveEmailReceiveDept(deptUserList, content, vo);
//短信
if (content.getSmsRemind()!=null && content.getSmsRemind() == 1) {
new Thread(() -> {
if (CollectionUtil.isNotEmpty(deptUserList)){
//增加收件人
this.saveEmailReceiver(deptUserList, content, EmailFolderEnum.FOLDER_DEPT_INBOX.getKey().longValue(), WhetherEnum.NO.getKey(), WhetherEnum.YES.getKey());
//短信
smsUtil.sendBatchSms(deptUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}).start();
//代办
msgUtil.sendMsg(content, deptUserList, systemInfo);
}
}
}
}
......@@ -218,6 +181,71 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
}
@Override
public EmailPerson saveEmailSender(OnlineUserDto userDto, EmailContent content, Long folderId, Integer isSend) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userDto.getUserId())
.userEmail(userDto.getUserName())
.userName(userDto.getNickName())
.deptId(userDto.getDeptId())
.courtCode(userDto.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_SEND)
.sendTime(content.getSendTime())
.folderId(folderId)
.isRead(WhetherEnum.YES.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(content.getIsTask())
.isSend(isSend)
.build();
this.save(sender);
return sender;
}
@Override
public EmailPerson saveEmailSender(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_SEND)
.sendTime(content.getSendTime())
.folderId(folderId)
.isRead(WhetherEnum.YES.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(content.getIsTask())
.isSend(isSend)
.build();
this.save(sender);
return sender;
}
@Override
public void saveEmailReceiver(List<CustomerUserVo> receiverList, EmailContent content, Long folderId, Integer isPerson, Integer isSend) {
for (CustomerUserVo userVo : receiverList) {
EmailPerson receivePerson = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_RECEIVE)
.sendTime(content.getSendTime())
.folderId(folderId)
.isRead(WhetherEnum.NO.getKey())
.isPerson(isPerson)
.isTask(content.getIsTask())
.isSend(isSend)
.build();
this.save(receivePerson);
}
}
@Override
public void moveEmailFolder(EmailFolderMoveVo vo) {
List<EmailPerson> list =
this.lambdaQuery()
......@@ -230,21 +258,7 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
person.setOldFolderId(person.getFolderId());
person.setFolderId(vo.getFolderId());
}
this.updateBatchById(list);
// List<EmailPerson> personList = this.lambdaQuery()
// .ge(EmailPerson::getSendTime, DateUtils.getRangeStart(vo.getSearchRange()))
// .le(EmailPerson::getSendTime, LocalDateTime.now())
// .in(EmailPerson::getId, vo.getPersonIdList()).list();
// for (EmailPerson emailPerson : personList) {
// Long folderId = emailPerson.getFolderId();
// LocalDateTime sendTime = emailPerson.getSendTime();
// this.lambdaUpdate().eq(EmailPerson::getSendTime, sendTime)
// .eq(EmailPerson::getId, emailPerson.getId())
// .set(EmailPerson::getFolderId, vo.getFolderId())
// .set(EmailPerson::getOldFolderId, folderId).update();
// }
}
@Override
......@@ -290,8 +304,6 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
@Override
public void readEmail(EmailReadVo vo) {
// List<EmailPerson> personList = new ArrayList<>();
// LocalDateTime rangeStart = DateUtils.getRangeStart(vo.getSearchRange());
this.lambdaUpdate()
.ge(EmailPerson::getSendTime, DateUtils.getRangeStart(vo.getSearchRange()))
.le(EmailPerson::getSendTime, LocalDateTime.now())
......@@ -429,34 +441,17 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
}
}
return null;
}
@Override
public void recallPerson(EmailSendVo vo){
this.lambdaUpdate()
.in(EmailPerson::getId, vo.getPersonIdList())
.set(EmailPerson::getIsSend, vo.getIsSend())
.update();
for (Long id : vo.getPersonIdList()) {
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("businessId", id);
log.info("撤回消息提醒: {}", JSONUtil.toJsonStr(params));
ResultVo resultVo = messageFeignClient.revokeWebBySysInfo(params);
log.info("sendWebMessage: {}" + JSONUtil.toJsonStr(resultVo));
ResultVo resultVo1 = messageFeignClient.revokeTodoBySysInfo(params);
log.info("addToDo: {}" + JSONUtil.toJsonStr(resultVo1));
List<EmailPerson> personList = this.lambdaQuery().in(EmailPerson::getId, vo.getPersonIdList()).list();
for (EmailPerson person : personList) {
person.setIsSend(vo.getIsSend());
this.updateById(person);
msgUtil.revokeMsgByBusinessIdAndReceiverId(person.getEmailContentId(), person.getUserId());
}
}
@Override
......@@ -487,19 +482,7 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_SEND)
.set(EmailPerson::getFolderId, EmailFolderEnum.FOLDER_OUTBOX.getKey())
.set(EmailPerson::getIsSend, WhetherEnum.NO.getKey()).update();
//撤回消息和代办
for (EmailPerson person : personList) {
this.removeById(person.getId()); //删除收件人
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("businessId", person.getId());
log.info("撤回消息提醒: {}", JSONUtil.toJsonStr(params));
ResultVo resultVo = messageFeignClient.revokeWebBySysInfo(params);
log.info("sendWebMessage: {}" + JSONUtil.toJsonStr(resultVo));
ResultVo resultVo1 = messageFeignClient.revokeTodoBySysInfo(params);
log.info("addToDo: {}" + JSONUtil.toJsonStr(resultVo1));
}
msgUtil.revokeMsgByBusinessId(contentId);
}
@Override
......@@ -657,259 +640,154 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
@Override
public EmailContent sendEmailApi(ApiSendEmailVo emailVo) {
Set<CustomerUserVo> toUserList= new LinkedHashSet<>();
//获取代办前端路径
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务,获取业务系统异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
Set<CustomerUserVo> toUserSet = new LinkedHashSet<>();
Set<Long> toUserIds= new LinkedHashSet<>();
ResultVo<CustomerUserVo> fromVo =adminFeignClient.getBypCode(emailVo.getFrom_id());
AssertUtils.isTrue(fromVo.isSuccess() || fromVo.getData()!=null,"找不到发件人的门户信息");
ResultVo<CustomerUserVo> toVo =adminFeignClient.getBypCode(emailVo.getTo_id());
AssertUtils.isTrue(toVo.isSuccess() || toVo.getData()!=null,"找不到收件人1的门户信息");
toUserIds.add(toVo.getData().getUserId());
toUserList.add(toVo.getData());
toUserSet.add(toVo.getData());
if(StrUtil.isNotBlank(emailVo.getTo_id2())){
ResultVo<CustomerUserVo> toVo2 =adminFeignClient.getBypCode(emailVo.getTo_id2());
AssertUtils.isTrue(toVo2.isSuccess() || toVo2.getData()!=null,"找不到收件人2的门户信息");
toUserIds.add(toVo2.getData().getUserId());
toUserList.add(toVo2.getData());
toUserSet.add(toVo2.getData());
}
EmailContent content = emailContentService.saveContentApi(emailVo, fromVo.getData(), new ArrayList<>(toUserIds));
this.saveEmailSenderApi(fromVo.getData(), content);
this.saveEmailSender(fromVo.getData(), content, EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
//增加收件人
EmailEditVo vo = EmailEditVo.builder().isTask(WhetherEnum.NO.getKey())
.isSend(WhetherEnum.YES.getKey()).build();
this.saveEmailReceiver(new ArrayList<>(toUserList), content, vo);
ArrayList<CustomerUserVo> toUserList = new ArrayList<>(toUserSet);
this.saveEmailReceiver(toUserList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
//短信
if (content.getSmsRemind()!=null && content.getSmsRemind() == 1) {
new Thread(() -> {
smsUtil.sendBatchSms(new ArrayList<>(toUserList), "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}).start();
}
smsUtil.sendBatchSms(toUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
//代办
msgUtil.sendMsg(content, toUserList, systemInfo);
return content;
}
@Override
public EmailContent sendEmailApi2(EmailEditApiVo vo) {
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务,获取业务系统异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
CustomerUserVo formUser = adminFeignClient.getUserById(vo.getSender());
AssertUtils.notNull(formUser, "获取发送人失败:(sender="+vo.getSender()+")");
//邮件
EmailContent content = emailContentService.saveContent(vo, formUser);
EmailContent content = emailContentService.saveContentApi2(vo, formUser);
if (content !=null) {
//附件
//person,先删除
this.lambdaUpdate().eq(EmailPerson::getEmailContentId, content.getId()).remove();
//发件人
this.saveEmailSenderApi(formUser, content);
//vo.getIsSend() == 1就发送
this.saveEmailSender(formUser, content,EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
//收件人
List<CustomerUserVo> receiverList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(vo.getReceiver())) {
List<CustomerUserVo> receiverList = new ArrayList<>();
for (Long userId : vo.getReceiver()) {
CustomerUserVo receiver = this.adminFeignClient.getUserById(userId);
AssertUtils.notNull(receiver, "调用admin失败,根据userId获取人员接口异常");
receiverList.add(receiver);
}
if (CollectionUtil.isNotEmpty(receiverList)){
smsUtil.sendBatchSms(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
msgUtil.sendMsg(content, receiverList, systemInfo);
}
}
//收件部门人员
List<CustomerUserVo> deptUserList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())) {
List<CustomerUserVo> deptUserList = new ArrayList<>();
for (Long deptId : vo.getReceiveDeptList()) {
ResultVo<List<CustomerUserVo>> userByDeptId = adminFeignClient.getUserByDeptId(deptId);
AssertUtils.isTrue(userByDeptId.isSuccess(), "调用admin失败,根据deptId获取人员接口异常");
deptUserList.addAll(userByDeptId.getData());
}
}
EmailEditVo emailEditVo = EmailEditVo.builder().isTask(content.getIsTask())
.isSend(WhetherEnum.YES.getKey()).build();
if (CollectionUtil.isNotEmpty(receiverList)) {
//增加收件人
this.saveEmailReceiver(receiverList, content, emailEditVo);
//短信
if (content.getSmsRemind()!=null && content.getSmsRemind() == 1) {
new Thread(() -> {
smsUtil.sendBatchSms(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}).start();
}
}
if (CollectionUtil.isNotEmpty(deptUserList)) {
//增加收件部门
this.saveEmailReceiveDept(deptUserList, content, emailEditVo);
//短信
if (content.getSmsRemind()!=null && content.getSmsRemind() == 1) {
new Thread(() -> {
smsUtil.sendBatchSms(deptUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}).start();
if (CollectionUtil.isNotEmpty(deptUserList)){
smsUtil.sendBatchSms(deptUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
msgUtil.sendMsg(content, deptUserList, systemInfo);
}
}
}
return content;
}
@Override
public EmailPerson getByContentAndFolderId(Long contentId, LocalDateTime sendTime, Long folderId) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
private void saveEmailSenderApi(CustomerUserVo userVo, EmailContent content) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_SEND)
.sendTime(content.getSendTime())
.folderId(EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue())
.isRead(WhetherEnum.YES.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(content.getIsTask())
.isSend(WhetherEnum.YES.getKey())
.build();
this.save(sender);
}
private void saveEmailSender(OnlineUserDto adminContext, EmailContent content, EmailEditVo vo) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(adminContext.getUserId())
.userEmail(adminContext.getUserName())
.userName(adminContext.getNickName())
.deptId(adminContext.getDeptId())
.deptName(adminContext.getDeptName())
.courtCode(adminContext.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_SEND)
.sendTime(content.getSendTime())
.folderId(vo.getIsSend().equals(WhetherEnum.YES.getKey()) ? EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue() : EmailFolderEnum.FOLDER_OUTBOX.getKey().longValue())
.isRead(WhetherEnum.YES.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(vo.getIsTask())
.isSend(vo.getIsSend())
.build();
this.save(sender);
}
private void saveEmailReceiveDept(List<CustomerUserVo> receiverList, EmailContent content, EmailEditVo vo) {
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统地址为空");
for (CustomerUserVo userVo : receiverList) {
EmailPerson receivePerson = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_RECEIVE)
.sendTime(content.getSendTime())
.folderId(EmailFolderEnum.FOLDER_DEPT_INBOX.getKey().longValue())
.isRead(WhetherEnum.NO.getKey())
.isPerson(WhetherEnum.NO.getKey())
.isTask(vo.getIsTask())
.isSend(vo.getIsSend())
.build();
this.save(receivePerson);
//内部消息提醒
// if (content.getMessageRemind()!=null && content.getMessageRemind() == 1){
// new Thread(() -> {
// Map<String, Object> params = new HashMap<>();
// params .put("systemTag", EmailConstant.SYSTEM_TAG);
// params .put("title","您有一封新邮件提醒");
// params .put("content", "您有一封新的邮件,标题为《"+content.getTitle()+"》。请及时查收。");
// params.put("userIdList", Collections.singletonList(userVo.getUserId()));
// params .put("businessId", receivePerson.getId());
// params.put("jumpUrl", systemInfo.getHomeUrl() + "/#/detail?personId=" + receivePerson.getId());
// log.info("发送内部短信内容打印: {}", JSONUtil.toJsonStr(params));
// messageFeignClient .sendWebMessage(params);
// messageFeignClient .addToDo(params);
// }).start();
//
// }
//内部消息提醒
if (content.getMessageRemind()!=null && content.getMessageRemind() == 1){
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("title","您有一封新邮件提醒");
params .put("content", "您有一封新的邮件,标题为《"+content.getTitle()+"》。请及时查收。");
params.put("userIdList", Collections.singletonList(userVo.getUserId()));
params .put("businessId", receivePerson.getId());
params.put("jumpUrl", systemInfo.getHomeUrl() + "/#/detail?personId=" + receivePerson.getId()+"&contentId="+content.getId());
ResultVo resultVo = messageFeignClient.sendWebMessage(params);
log.info("发送内部短信内容打印: {}, feign结果:{}", JSONUtil.toJsonStr(params), JSONUtil.toJsonStr(resultVo));
ResultVo resultVo1 = messageFeignClient.addToDo(params);
log.info("发送代办内容打印: {}, feign结果:{}", JSONUtil.toJsonStr(params), JSONUtil.toJsonStr(resultVo1));
}
LambdaQueryWrapper<EmailPerson> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(contentId!=null, EmailPerson::getEmailContentId, contentId)
.eq(sendTime!=null, EmailPerson::getSendTime, sendTime)
.eq(EmailPerson::getFolderId,folderId);
switch (EmailFolderEnum.getEnumByKey(folderId.intValue())) {
case FOLDER_INBOX: //收件箱
queryWrapper
.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_RECEIVE)
.eq(EmailPerson::getIsPerson, WhetherEnum.YES.getKey())
.eq(EmailPerson::getIsSend, WhetherEnum.YES.getKey())
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
case FOLDER_DEPT_INBOX: //部门邮件
queryWrapper
.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_RECEIVE)
.eq(EmailPerson::getIsPerson, WhetherEnum.NO.getKey())
.eq(EmailPerson::getIsSend, WhetherEnum.YES.getKey())
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
case FOLDER_OUTBOX: //草稿箱
queryWrapper
.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_SEND)
.eq(EmailPerson::getIsPerson, WhetherEnum.YES.getKey())
.eq(EmailPerson::getIsSend, WhetherEnum.NO.getKey())
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
case FOLDER_ALREADY_SEND: //已发送
queryWrapper
.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_SEND)
.eq(EmailPerson::getIsPerson, WhetherEnum.YES.getKey())
.eq(EmailPerson::getIsSend, WhetherEnum.YES.getKey())
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
case FOLDER_ALREADY_DELETE: //回收站
queryWrapper
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
default:
queryWrapper
.eq(EmailPerson::getUserId, adminContext.getUserId());
break;
}
return this.getOne(queryWrapper, false);
}
private void saveEmailReceiver(List<CustomerUserVo> receiverList, EmailContent content, EmailEditVo vo) {
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统地址为空");
for (CustomerUserVo userVo : receiverList) {
EmailPerson receivePerson = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_RECEIVE)
.sendTime(content.getSendTime())
.folderId(EmailFolderEnum.FOLDER_INBOX.getKey().longValue())
.isRead(WhetherEnum.NO.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(vo.getIsTask())
.isSend(vo.getIsSend())
.build();
this.save(receivePerson);
//内部消息提醒
if (content.getMessageRemind()!=null && content.getMessageRemind() == 1) {
Map<String, Object> params = new HashMap<>();
params.put("systemTag", EmailConstant.SYSTEM_TAG);
params.put("title", "您有一封新邮件提醒");
params.put("content", "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。");
params.put("userIdList", Collections.singletonList(userVo.getUserId()));
params.put("businessId", receivePerson.getId());
params.put("jumpUrl", systemInfo.getHomeUrl() + "/#/detail?personId=" + receivePerson.getId()+"&contentId="+content.getId());
ResultVo resultVo = messageFeignClient.sendWebMessage(params);
log.info("发送内部短信内容打印: {}, feign结果:{}", JSONUtil.toJsonStr(params), JSONUtil.toJsonStr(resultVo));
ResultVo resultVo1 = messageFeignClient.addToDo(params);
log.info("发送代办内容打印: {}, feign结果:{}", JSONUtil.toJsonStr(params), JSONUtil.toJsonStr(resultVo1));
}
}
}
}
package com.zq.email.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.ResultVo;
import com.zq.email.constants.EmailConstant;
import com.zq.email.dto.SystemInfo;
import com.zq.email.entity.EmailContent;
import com.zq.email.feign.MessageFeignClient;
import com.zq.email.properties.SmsProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author wilmiam
* @since 2022-12-10 17:09
*/
@Slf4j
@Component
public class MsgUtil {
@Resource
public MessageFeignClient messageFeignClient;
/**
* 发送批量短信
*
* @return
*/
@Async
public void sendMsg(EmailContent content, List<CustomerUserVo> userVoList, SystemInfo systemInfo) {
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("title","您有一封新邮件提醒");
params .put("content", "您有一封新的邮件,标题为《"+content.getTitle()+"》。请及时查收。");
params.put("userIdList", userVoList.stream().map(e->e.getUserId()).collect(Collectors.toList()));
params .put("businessId", content.getId());
params.put("jumpUrl", systemInfo.getHomeUrl() + "/#/detail?contentId=" + content.getId());
log.debug("---发送内部消息打印内容: {}", JSONUtil.toJsonStr(params));
messageFeignClient.sendApi(params);
messageFeignClient.addToDoApi(params);
}
@Async
public void revokeMsgByBusinessId(Long businessId) {
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("businessId", businessId);
log.debug("---撤回内部消息打印内容: {}", JSONUtil.toJsonStr(params));
messageFeignClient.revokeWebBySysInfo(params);
messageFeignClient.revokeTodoBySysInfo(params);
}
@Async
public void revokeMsgByBusinessIdAndReceiverId(Long businessId, Long receiverId) {
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("businessId", businessId);
params .put("receiverId", receiverId);
log.debug("---撤回内部消息打印内容: {}", JSONUtil.toJsonStr(params));
messageFeignClient.revokeWebBySysInfo(params);
messageFeignClient.revokeTodoBySysInfo(params);
}
}
......@@ -12,6 +12,7 @@ import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.ResultVo;
import com.zq.email.properties.SmsProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -36,6 +37,7 @@ public class SmsUtil {
*
* @return
*/
@Async
public void sendBatchSms(List<CustomerUserVo> userVoList, String content, Long contentId) {
String regex = "^1[3-9]\\d{9}";
StringBuffer sb = new StringBuffer();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment