Commit 8162584f by zhangxingmin

Merge remote-tracking branch 'origin/dev_zxm' into test

# Conflicts:
#	yd-email-api/src/main/java/com/yd/email/api/service/impl/ApiEmailContactImportServiceImpl.java
parents 06fac82d da3ce69a
......@@ -4,11 +4,14 @@ import com.yd.common.result.Result;
import com.yd.email.api.service.ApiEmailFileService;
import com.yd.email.feign.client.ApiEmailFileFeignClient;
import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* 邮件文件信息
......@@ -33,4 +36,16 @@ public class ApiEmailFileController implements ApiEmailFileFeignClient {
public Result<ApiExportVariableExcelResponse> exportVariableExcel(ApiExportVariableExcelRequest request) {
return apiEmailFileService.exportVariableExcel(request);
}
/**
* 导入-变量excel
* @param file
* @param request
* @return
*/
@Override
public Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request) {
return apiEmailFileService.importVariableExcel(file,request);
}
}
......@@ -33,4 +33,14 @@ public class ApiEmailSendController implements ApiEmailSendFeignClient {
public Result<ApiSendEmailResponse> sendEmail(ApiSendEmailRequest request) {
return apiEmailSendService.sendEmail(request);
}
/**
* 测试发送邮件
* @param request
* @return
*/
@Override
public Result<ApiSendEmailResponse> testSendEmail(ApiSendEmailRequest request) {
return apiEmailSendService.testSendEmail(request);
}
}
\ No newline at end of file
......@@ -3,8 +3,14 @@ package com.yd.email.api.service;
import com.yd.common.result.Result;
import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.web.multipart.MultipartFile;
public interface ApiEmailFileService {
Result<ApiExportVariableExcelResponse> exportVariableExcel(ApiExportVariableExcelRequest request);
Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request);
}
......@@ -6,4 +6,6 @@ import com.yd.email.feign.response.ApiSendEmailResponse;
public interface ApiEmailSendService {
Result<ApiSendEmailResponse> sendEmail(ApiSendEmailRequest request);
Result<ApiSendEmailResponse> testSendEmail(ApiSendEmailRequest request);
}
......@@ -14,4 +14,7 @@ public interface ApiEmailTaskRecipientsService {
Result<List<EmailTaskRecipients>> saveEmailTaskRecipientsBySessionId(String taskBizId, String status,
String sessionId, Integer source);
Result<List<EmailTaskRecipients>> queryEmailTaskRecipientsBySessionId(String taskBizId, String status,
String sessionId, Integer source);
}
......@@ -59,7 +59,7 @@ public class ApiEmailContactImportServiceImpl implements ApiEmailContactImportSe
@Override
public Result<ApiEmailContactImportSelectAddResponse> add(ApiEmailContactImportSelectAddRequest request) {
ApiEmailContactImportSelectAddResponse response = new ApiEmailContactImportSelectAddResponse();
String sessionId = "";
String sessionId = request.getSessionId();
if (StringUtils.isBlank(request.getSessionId())) {
//当前会话id(前端缓存有值就传,没有值后端生成返回给前端存入前端缓存)
......@@ -74,6 +74,8 @@ public class ApiEmailContactImportServiceImpl implements ApiEmailContactImportSe
EmailContactImport emailContactImport = new EmailContactImport();
emailContactImport.setImportBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_EMAIL_CONTACT_IMPORT.getCode()));
emailContactImport.setContactBizId(dto.getContactBizId());
emailContactImport.setCcEmail(dto.getCcEmails());
emailContactImport.setReceiveEmail(dto.getEmail());
emailContactImport.setCcEmail(!CollectionUtils.isEmpty(dto.getCcEmailList()) ? String.join(";",dto.getCcEmailList()) : "");
emailContactImport.setReceiveEmail(dto.getContactEmail());
emailContactImport.setSessionId(finalSessionId);
......
......@@ -5,8 +5,10 @@ import com.yd.email.api.service.ApiEmailFileService;
import com.yd.email.api.service.ApiEmailVariableGroupService;
import com.yd.email.feign.dto.ApiEmailVariableDto;
import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiEmailVariableGroupDetailResponse;
import com.yd.email.feign.response.ApiExportVariableExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult;
......@@ -15,6 +17,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
......@@ -62,5 +66,16 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
return Result.success(response1);
}
/**
* 导入-变量excel
* @param file
* @param request
* @return
*/
@Override
public Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request) {
return null;
}
}
......@@ -62,33 +62,7 @@ public class ApiEmailSendServiceImpl implements ApiEmailSendService {
public Result<ApiSendEmailResponse> sendEmail(ApiSendEmailRequest request) {
ApiSendEmailResponse response = new ApiSendEmailResponse();
try {
//保存邮件任务到数据库
EmailTask mailTask = new EmailTask();
//邮件任务唯一业务ID
mailTask.setTaskBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_EMAIL_TASK.getCode()));
//任务名称:邮件主题 + 邮件发送任务
mailTask.setTaskName(request.getSubject() + "邮件发送任务");
//关联发件人唯一业务ID
mailTask.setSenderBizId(request.getSenderBizId());
//发件人邮箱
mailTask.setSendEmail(request.getSendEmail());
//邮件主题
mailTask.setSubject(request.getSubject());
//邮件内容
mailTask.setContent(request.getContent());
//发送邮件的附件路径(多个用分号分隔)
mailTask.setAttachmentPath(request.getAttachmentPath());
//计划发送时间(为空表示立即发送,不为空表示定时发送)
mailTask.setScheduleTime(request.getScheduleTime());
//任务状态:计划发送时间(为空表示立即发送状态为发送中,不为空表示发送状态为定时发送)
String taskStatus = !Objects.isNull(request.getScheduleTime()) ? EmailTaskStatusEnum.SCHEDULED.getItemValue() : EmailTaskStatusEnum.SENDING.getItemValue();
mailTask.setStatus(taskStatus);
//变量分组唯一业务ID
mailTask.setVariableGroupBizId(request.getVariableGroupBizId());
//邮件内容的填充的变量字段(数组分号分隔,英文字段名)
// mailTask.setFillVariable(!CollectionUtils.isEmpty(request.getFillVariableList()) ? String.join(";") : "");
//导入临时表的当前会话id(前端使用,用于查询。存于前端缓存)(冗余字段,选择联系人和导入联系人excel都有值)
mailTask.setSessionId(request.getSessionId());
EmailTask mailTask = buildEmailTask(request);
iEmailTaskService.saveOrUpdate(mailTask);
//邮件任务唯一业务ID
......@@ -99,7 +73,7 @@ public class ApiEmailSendServiceImpl implements ApiEmailSendService {
// 保存收件人信息
//根据当前当前会话id和数据来源查询导入数据,保存到邮件任务收件人关联表中,供后续使用
Result<List<EmailTaskRecipients>> result = apiEmailTaskRecipientsService
.saveEmailTaskRecipientsBySessionId(taskBizId,taskStatus,request.getSessionId(),source);
.saveEmailTaskRecipientsBySessionId(taskBizId,mailTask.getStatus(),request.getSessionId(),source);
List<EmailTaskRecipients> recipientsList = result.getData();
//计划发送时间(为空表示立即发送,不为空表示定时发送)
......@@ -211,5 +185,82 @@ public class ApiEmailSendServiceImpl implements ApiEmailSendService {
return Result.success();
}
/**
* 测试发送邮件
* @param request
* @return
*/
@Override
public Result<ApiSendEmailResponse> testSendEmail(ApiSendEmailRequest request) {
ApiSendEmailResponse response = new ApiSendEmailResponse();
EmailTask mailTask = buildEmailTask(request);
//邮件任务唯一业务ID
String taskBizId = mailTask.getTaskBizId();
//TODO 变量
//立即发送->发送给自己。发件人和收件人都是自己
//调用邮件服务发送邮件入参DTO
ApiSendMailDto apiSendMailDto = new ApiSendMailDto();
BeanUtils.copyProperties(mailTask,apiSendMailDto);
//根据发件人唯一业务ID获取发件人信息和发件人绑定的服务商信息
Result<ApiEmailSenderConfigDto> result = apiEmailSenderConfigService.getApiEmailSenderConfigDto(mailTask.getSenderBizId());
ApiEmailSenderConfigDto apiEmailSenderConfigDto = result.getData();
BeanUtils.copyProperties(apiEmailSenderConfigDto,apiSendMailDto);
//收件人邮箱(单个)
apiSendMailDto.setReceiveEmail(mailTask.getSendEmail());
//抄送人邮箱列表
// apiSendMailDto.setCcEmailList(ccEmailList);
//邮件内容
if (StringUtil.hasPlaceholdersSimple(apiSendMailDto.getContent())) {
//检测内容是否有占位符,有占位符就替换具体内容,每收件人的占位符内容是不一样的。
// apiSendMailDto.setContent(StringUtil.replacePlaceholders(apiSendMailDto.getContent(),
// recipient.getVariables()));
}
// 调用邮件服务发送邮件
try {
apiEmailService.sendMail(apiSendMailDto);
} catch (Exception e) {
e.printStackTrace();
}
response.setScheduleTime(request.getScheduleTime());
response.setTaskBizId(taskBizId);
return Result.success(response);
}
/**
* 构造邮箱任务对象
* @param request
* @return
*/
public EmailTask buildEmailTask(ApiSendEmailRequest request){
//保存邮件任务到数据库
EmailTask mailTask = new EmailTask();
//邮件任务唯一业务ID
mailTask.setTaskBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_EMAIL_TASK.getCode()));
//任务名称:邮件主题 + 邮件发送任务
mailTask.setTaskName(request.getSubject() + "邮件发送任务");
//关联发件人唯一业务ID
mailTask.setSenderBizId(request.getSenderBizId());
//发件人邮箱
mailTask.setSendEmail(request.getSendEmail());
//邮件主题
mailTask.setSubject(request.getSubject());
//邮件内容
mailTask.setContent(request.getContent());
//发送邮件的附件路径(多个用分号分隔)
mailTask.setAttachmentPath(request.getAttachmentPath());
//计划发送时间(为空表示立即发送,不为空表示定时发送)
mailTask.setScheduleTime(request.getScheduleTime());
//任务状态:计划发送时间(为空表示立即发送状态为发送中,不为空表示发送状态为定时发送)
String taskStatus = !Objects.isNull(request.getScheduleTime()) ? EmailTaskStatusEnum.SCHEDULED.getItemValue() : EmailTaskStatusEnum.SENDING.getItemValue();
mailTask.setStatus(taskStatus);
//变量分组唯一业务ID
mailTask.setVariableGroupBizId(request.getVariableGroupBizId());
//邮件内容的填充的变量字段(数组分号分隔,英文字段名)
// mailTask.setFillVariable(!CollectionUtils.isEmpty(request.getFillVariableList()) ? String.join(";") : "");
//导入临时表的当前会话id(前端使用,用于查询。存于前端缓存)(冗余字段,选择联系人和导入联系人excel都有值)
mailTask.setSessionId(request.getSessionId());
return mailTask;
}
}
......@@ -81,4 +81,39 @@ public class ApiEmailTaskRecipientsServiceImpl implements ApiEmailTaskRecipients
return Result.success(saveRecipientsList);
}
/**
* 根据当前当前会话id和数据来源查询导入数据
* @param taskBizId 邮件任务唯一业务ID
* @param status 收件人邮件状态
* @param sessionId 会话id
* @param source 数据的来源 0-选择联系人导入 1-excel导入联系人
* @return
*/
@Override
public Result<List<EmailTaskRecipients>> queryEmailTaskRecipientsBySessionId(String taskBizId,String status,
String sessionId,Integer source) {
//根据当前当前会话id和数据来源查询的导入数据
List<EmailContactImport> emailContactImportList = iEmailContactImportService.queryList(EmailContactImportDto
.builder()
.sessionId(sessionId)
.source(source)
.build());
List<EmailTaskRecipients> saveRecipientsList = new ArrayList<>();
if (!CollectionUtils.isEmpty(emailContactImportList)) {
//不为空,保存到邮件任务收件人关联表中
saveRecipientsList = emailContactImportList
.stream()
.map(dto -> {
EmailTaskRecipients recipient = new EmailTaskRecipients();
BeanUtils.copyProperties(dto,recipient);
recipient.setTaskBizId(taskBizId);
recipient.setStatus(status);
return recipient;
}).collect(Collectors.toList());
}
return Result.success(saveRecipientsList);
}
}
......@@ -3,11 +3,16 @@ package com.yd.email.feign.client;
import com.yd.common.result.Result;
import com.yd.email.feign.fallback.ApiEmailFileFeignFallbackFactory;
import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* 邮箱服务-邮件文件信息Feign客户端
......@@ -22,4 +27,14 @@ public interface ApiEmailFileFeignClient {
*/
@PostMapping("/export/excel/variable")
Result<ApiExportVariableExcelResponse> exportVariableExcel(@Validated @RequestBody ApiExportVariableExcelRequest request);
/**
* 导入-变量excel
* @param file
* @param request
* @return
*/
@PostMapping(value = "/import/excel/variable", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiImportVariableExcelResponse> importVariableExcel(@RequestParam("file") MultipartFile file,
@Validated ApiImportVariableExcelRequest request);
}
......@@ -22,4 +22,12 @@ public interface ApiEmailSendFeignClient {
*/
@PostMapping("/send")
Result<ApiSendEmailResponse> sendEmail(@Validated @RequestBody ApiSendEmailRequest request);
/**
* 测试发送邮件
* @param request
* @return
*/
@PostMapping("/test/send")
Result<ApiSendEmailResponse> testSendEmail(@Validated @RequestBody ApiSendEmailRequest request);
}
......@@ -15,7 +15,7 @@ public class ApiEmailContactDto {
/**
* 收件人邮箱(单个邮箱)
*/
private String contactEmail;
private String email;
/**
* 抄送人邮箱(数组)
......
......@@ -3,10 +3,13 @@ package com.yd.email.feign.fallback;
import com.yd.common.result.Result;
import com.yd.email.feign.client.ApiEmailFileFeignClient;
import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
/**
* 邮箱服务-邮件文件信息Feign降级处理
......@@ -21,6 +24,12 @@ public class ApiEmailFileFeignFallbackFactory implements FallbackFactory<ApiEmai
public Result<ApiExportVariableExcelResponse> exportVariableExcel(ApiExportVariableExcelRequest request) {
return null;
}
@Override
public Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request) {
return null;
}
};
}
}
......@@ -21,6 +21,11 @@ public class ApiEmailSendFeignFallbackFactory implements FallbackFactory<ApiEmai
public Result<ApiSendEmailResponse> sendEmail(ApiSendEmailRequest request) {
return null;
}
@Override
public Result<ApiSendEmailResponse> testSendEmail(ApiSendEmailRequest request) {
return null;
}
};
}
}
package com.yd.email.feign.request;
import lombok.Data;
@Data
public class ApiImportVariableExcelRequest {
/**
* 当前会话id(前端缓存有值就传,没有值后端生成返回给前端存入前端缓存)
*/
private String sessionId;
}
package com.yd.email.feign.request;
import com.yd.email.feign.dto.ApiEmailTaskRecipientsDto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ApiSendEmailRequest {
......@@ -12,6 +10,7 @@ public class ApiSendEmailRequest {
/**
* 发件人唯一业务ID
*/
@NotBlank(message = "发件人唯一业务ID不能为空")
private String senderBizId;
/**
......@@ -51,11 +50,13 @@ public class ApiSendEmailRequest {
/**
* 变量分组唯一业务ID
*/
@NotBlank(message = "变量分组唯一业务ID不能为空")
private String variableGroupBizId;
/**
* 导入临时表的当前会话id(前端使用,用于查询。存于前端缓存)(冗余字段,选择联系人和导入联系人excel都有值,用于发送到哪些收件人的,查询导入临时表的依据)
*/
@NotBlank(message = "会话id不能为空")
private String sessionId;
// /**
......
package com.yd.email.feign.response;
import lombok.Data;
@Data
public class ApiImportVariableExcelResponse {
/**
* 当前会话id(前端缓存有值就传,没有值后端生成返回给前端存入前端缓存)
*/
private String sessionId;
}
......@@ -7,8 +7,14 @@ import java.time.LocalDateTime;
@Data
public class ApiSendEmailResponse {
/**
* xx-job的id
*/
private String jobId;
/**
* 任务业务id
*/
private String taskBizId;
/**
......
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