Commit 602eb1bb by zhangxingmin

push

parent b8947989
......@@ -6,6 +6,7 @@ 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.ApiImportContactExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -48,4 +49,14 @@ public class ApiEmailFileController implements ApiEmailFileFeignClient {
ApiImportVariableExcelRequest request) {
return apiEmailFileService.importVariableExcel(file,request);
}
/**
* 导入-联系人excel
* @param file
* @return
*/
@Override
public Result<ApiImportContactExcelResponse> importContactExcel(MultipartFile file) {
return apiEmailFileService.importContactExcel(file);
}
}
......@@ -2,12 +2,15 @@ package com.yd.email.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.email.feign.dto.ApiEmailContactCcDto;
import com.yd.email.feign.request.ApiEmailContactAddRequest;
import com.yd.email.feign.request.ApiEmailContactEditRequest;
import com.yd.email.feign.request.ApiEmailContactPageRequest;
import com.yd.email.feign.response.ApiEmailContactDetailResponse;
import com.yd.email.feign.response.ApiEmailContactPageResponse;
import java.util.List;
public interface ApiEmailContactService {
Result<IPage<ApiEmailContactPageResponse>> page(ApiEmailContactPageRequest request);
......@@ -19,5 +22,7 @@ public interface ApiEmailContactService {
Result del(String contactBizId);
String replacePlaceholders(String content, String contactBizId,String ccEmails);
List<ApiEmailContactCcDto> buildCcEmailList(List<String> ccEmailList, String contactBizId);
String replacePlaceholders(String content, String contactBizId, String ccEmails);
}
......@@ -5,6 +5,7 @@ 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.ApiImportContactExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.web.multipart.MultipartFile;
......@@ -13,4 +14,6 @@ public interface ApiEmailFileService {
Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request);
Result<ApiImportContactExcelResponse> importContactExcel(MultipartFile file);
}
......@@ -154,6 +154,7 @@ public class ApiEmailContactServiceImpl implements ApiEmailContactService {
* @param contactBizId
* @return
*/
@Override
public List<ApiEmailContactCcDto> buildCcEmailList(List<String> ccEmailList, String contactBizId) {
List<ApiEmailContactCcDto> contactCcDtoList = new ArrayList<>();
if (CollectionUtils.isEmpty(contactCcDtoList)) {
......
package com.yd.email.api.service.impl;
import com.alibaba.fastjson.JSON;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.common.utils.UUIDUtil;
import com.yd.email.api.service.ApiEmailContactCcService;
import com.yd.email.api.service.ApiEmailContactService;
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.enums.GeneralVariableEnum;
import com.yd.email.feign.enums.excel.ContactExcelEnum;
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.ApiImportContactExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import com.yd.email.service.dto.EmailContactDto;
import com.yd.email.service.dto.EmailVariableDto;
import com.yd.email.service.model.EmailContact;
import com.yd.email.service.model.EmailContactImport;
import com.yd.email.service.model.EmailVariable;
import com.yd.email.service.service.IEmailContactImportService;
import com.yd.email.service.service.IEmailContactService;
import com.yd.email.service.service.IEmailVariableService;
import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportParam;
......@@ -27,6 +36,7 @@ import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.result.ImportResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -51,6 +61,15 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
@Autowired
private IEmailContactImportService iEmailContactImportService;
@Autowired
private IEmailContactService iEmailContactService;
@Autowired
private ApiEmailContactCcService apiEmailContactCcService;
@Autowired
private ApiEmailContactService apiEmailContactService;
// 固定表头字段-通用变量
private static final Set<String> FIXED_HEADERS = new HashSet<>(Arrays.asList(
GeneralVariableEnum.GENERAL_CONTACT.getItemLabel(),
......@@ -296,4 +315,114 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
return value != null ? value.toString().trim() : null;
}
/**
* 导入-联系人excel
* @param file
* @return
*/
@Override
public Result<ApiImportContactExcelResponse> importContactExcel(MultipartFile file) {
ApiImportContactExcelResponse response = new ApiImportContactExcelResponse();
try {
// 远程调用Feign,通用Excel导入接口
Result<ImportResult> result = apiExcelFeignClient.importExcel(file, 0, 0, null);
ImportResult importResult = result.getData();
if (Objects.isNull(result.getData()) || (!Objects.isNull(result.getData()) && !importResult.isSuccess())) {
return Result.fail("Excel导入失败: " + (importResult.getMessage() != null ? importResult.getMessage() : "未知错误"));
}
if (!importResult.isSuccess()) {
return Result.fail("Excel解析失败: " + importResult.getMessage());
}
log.info("表头信息: {}", importResult.getHeaders());
log.info("导入数据条数: {}", importResult.getTotalCount());
//导入-联系人excel-处理导入数据(处理每一行数据(包括校验))
processImportContactExcelData(importResult.getData());
return Result.success(response);
} catch (Exception e) {
log.error("导入变量Excel异常", e);
return Result.fail("导入失败: " + e.getMessage());
}
}
/**
* 导入-联系人excel-处理导入数据(处理每一行数据(包括校验))
* @param data
* @return
*/
public Result processImportContactExcelData(List<Map<String, Object>> data) {
//获取Security上下文当前用户的登录信息
AuthUserDto authUserDto = SecurityUtil.getCurrentLoginUser();
//导入-联系人excel-处理导入数据(处理每一行数据(包括校验))-校验excel字段
processImportContactExcelDataCheck(data);
for (Map<String, Object> row : data) {
EmailContact emailContact = new EmailContact();
String ccEmail = getStringValue(row, ContactExcelEnum.CC_EMAIL.getItemLabel());
List<String> ccEmailList = StringUtils.isNotBlank(ccEmail) ? Arrays.asList(ccEmail.split(";").clone()) : new ArrayList<>();
//设置联系人(收件人)业务唯一ID
emailContact.setContactBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_EMAIL_CONTACT.getCode()));
emailContact.setName(getStringValue(row, ContactExcelEnum.NAME.getItemLabel()));
emailContact.setAppellation(getStringValue(row, ContactExcelEnum.APPELLATION.getItemLabel()));
emailContact.setCompanyName(getStringValue(row, ContactExcelEnum.COMPANY_NAME.getItemLabel()));
emailContact.setEmail(getStringValue(row, ContactExcelEnum.EMAIL.getItemLabel()));
emailContact.setType(getStringValue(row, ContactExcelEnum.TYPE.getItemLabel()));
emailContact.setCreatorId(authUserDto.getUserBizId());
//设置联系人(收件人)业务唯一ID
emailContact.setContactBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_EMAIL_CONTACT.getCode()));
iEmailContactService.saveOrUpdate(emailContact);
//保存关联抄送邮箱的列表
apiEmailContactCcService.saveEmailContactCcList(apiEmailContactService.buildCcEmailList(ccEmailList,emailContact.getContactBizId()),emailContact.getContactBizId());
}
return Result.success();
}
/**
* 导入-联系人excel-处理导入数据(处理每一行数据(包括校验))-校验excel字段
* @param data
* @return
*/
public Result processImportContactExcelDataCheck(List<Map<String, Object>> data) {
Set<String> emailSet = new HashSet<>();
int i = 1;
for (Map<String, Object> row : data) {
String email = getStringValue(row, ContactExcelEnum.EMAIL.getItemLabel());
if (StringUtils.isBlank(getStringValue(row, ContactExcelEnum.NAME.getItemLabel()))) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.NAME.getItemLabel() + "不能为空!");
}
if (StringUtils.isBlank(getStringValue(row, ContactExcelEnum.APPELLATION.getItemLabel()))) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.APPELLATION.getItemLabel() + "不能为空!");
}
if (StringUtils.isBlank(getStringValue(row, ContactExcelEnum.COMPANY_NAME.getItemLabel()))) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.COMPANY_NAME.getItemLabel() + "不能为空!");
}
if (StringUtils.isBlank(getStringValue(row, ContactExcelEnum.EMAIL.getItemLabel()))) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.EMAIL.getItemLabel() + "不能为空!");
}
if (StringUtils.isBlank(getStringValue(row, ContactExcelEnum.CC_EMAIL.getItemLabel()))) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.CC_EMAIL.getItemLabel() + "不能为空!");
}
// 检查收件人邮箱是否重复
if (emailSet.contains(email)) {
throw new BusinessException("第" + i + "行的" + ContactExcelEnum.EMAIL.getItemLabel() + "重复:" + email);
}
emailSet.add(email);
i++;
}
//根据收件人邮箱查询库里有没有重复数据
List<EmailContact> emailContactList = iEmailContactService.queryList(EmailContactDto.builder().emailList(new ArrayList<>(emailSet)).build());
if (!CollectionUtils.isEmpty(emailContactList)) {
//以下邮箱在库里重复
throw new BusinessException("以下收件人邮箱在库里重复:" + String.join(",",emailContactList.stream().map(EmailContact::getEmail).collect(Collectors.toList())));
}
return Result.success();
}
}
......@@ -5,6 +5,7 @@ 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.ApiImportContactExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
......@@ -37,4 +38,12 @@ public interface ApiEmailFileFeignClient {
@PostMapping(value = "/import/excel/variable", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiImportVariableExcelResponse> importVariableExcel(@RequestParam("file") MultipartFile file,
@Validated ApiImportVariableExcelRequest request);
/**
* 导入-联系人excel
* @param file
* @return
*/
@PostMapping(value = "/import/excel/contact", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiImportContactExcelResponse> importContactExcel(@RequestParam("file") MultipartFile file);
}
package com.yd.email.feign.enums.excel;
public enum ContactExcelEnum {
NAME("姓名","name"),
APPELLATION("称谓","appellation"),
COMPANY_NAME("公司","companyName"),
EMAIL("收件人邮箱","email"),
CC_EMAIL("抄送人邮箱","ccEmail"),
TYPE("类型","type"),
;
//字典项标签(名称)
private String itemLabel;
//字典项值
private String itemValue;
//构造函数
ContactExcelEnum(String itemLabel, String itemValue) {
this.itemLabel = itemLabel;
this.itemValue = itemValue;
}
public String getItemLabel() {
return itemLabel;
}
public String getItemValue() {
return itemValue;
}
}
......@@ -5,6 +5,7 @@ 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.ApiImportContactExcelResponse;
import com.yd.email.feign.response.ApiImportVariableExcelResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
......@@ -30,6 +31,11 @@ public class ApiEmailFileFeignFallbackFactory implements FallbackFactory<ApiEmai
ApiImportVariableExcelRequest request) {
return null;
}
@Override
public Result<ApiImportContactExcelResponse> importContactExcel(MultipartFile file) {
return null;
}
};
}
}
package com.yd.email.feign.response;
import lombok.Data;
@Data
public class ApiImportContactExcelResponse {
}
......@@ -5,6 +5,8 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
......@@ -22,6 +24,11 @@ public class EmailContactDto {
private String email;
/**
* 联系人邮箱集合
*/
private List<String> emailList;
/**
* 查询是否排除当前发件人唯一标识数据,默认false不排除,true的话senderBizId必传
*/
@Builder.Default
......
......@@ -13,6 +13,7 @@ import com.yd.email.service.service.IEmailContactService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
......@@ -43,6 +44,7 @@ public class EmailContactServiceImpl extends ServiceImpl<EmailContactMapper, Ema
List<EmailContact> list = baseMapper.selectList(new LambdaQueryWrapper<EmailContact>()
.eq(StringUtils.isNotBlank(dto.getContactBizId()) && !dto.getIsExcludeMy(),EmailContact::getContactBizId,dto.getContactBizId())
.eq(StringUtils.isNotBlank(dto.getEmail()),EmailContact::getEmail,dto.getEmail())
.in(!CollectionUtils.isEmpty(dto.getEmailList()),EmailContact::getEmail,dto.getEmailList())
.ne(dto.getIsExcludeMy(),EmailContact::getContactBizId,dto.getContactBizId())
);
return list;
......
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