Commit 602eb1bb by zhangxingmin

push

parent b8947989
...@@ -6,6 +6,7 @@ import com.yd.email.feign.client.ApiEmailFileFeignClient; ...@@ -6,6 +6,7 @@ import com.yd.email.feign.client.ApiEmailFileFeignClient;
import com.yd.email.feign.request.ApiExportVariableExcelRequest; import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest; import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse; 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.feign.response.ApiImportVariableExcelResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -48,4 +49,14 @@ public class ApiEmailFileController implements ApiEmailFileFeignClient { ...@@ -48,4 +49,14 @@ public class ApiEmailFileController implements ApiEmailFileFeignClient {
ApiImportVariableExcelRequest request) { ApiImportVariableExcelRequest request) {
return apiEmailFileService.importVariableExcel(file,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; ...@@ -2,12 +2,15 @@ package com.yd.email.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result; 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.ApiEmailContactAddRequest;
import com.yd.email.feign.request.ApiEmailContactEditRequest; import com.yd.email.feign.request.ApiEmailContactEditRequest;
import com.yd.email.feign.request.ApiEmailContactPageRequest; import com.yd.email.feign.request.ApiEmailContactPageRequest;
import com.yd.email.feign.response.ApiEmailContactDetailResponse; import com.yd.email.feign.response.ApiEmailContactDetailResponse;
import com.yd.email.feign.response.ApiEmailContactPageResponse; import com.yd.email.feign.response.ApiEmailContactPageResponse;
import java.util.List;
public interface ApiEmailContactService { public interface ApiEmailContactService {
Result<IPage<ApiEmailContactPageResponse>> page(ApiEmailContactPageRequest request); Result<IPage<ApiEmailContactPageResponse>> page(ApiEmailContactPageRequest request);
...@@ -19,5 +22,7 @@ public interface ApiEmailContactService { ...@@ -19,5 +22,7 @@ public interface ApiEmailContactService {
Result del(String contactBizId); 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; ...@@ -5,6 +5,7 @@ import com.yd.common.result.Result;
import com.yd.email.feign.request.ApiExportVariableExcelRequest; import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest; import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse; 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.feign.response.ApiImportVariableExcelResponse;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -13,4 +14,6 @@ public interface ApiEmailFileService { ...@@ -13,4 +14,6 @@ public interface ApiEmailFileService {
Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file, Result<ApiImportVariableExcelResponse> importVariableExcel(MultipartFile file,
ApiImportVariableExcelRequest request); ApiImportVariableExcelRequest request);
Result<ApiImportContactExcelResponse> importContactExcel(MultipartFile file);
} }
...@@ -154,6 +154,7 @@ public class ApiEmailContactServiceImpl implements ApiEmailContactService { ...@@ -154,6 +154,7 @@ public class ApiEmailContactServiceImpl implements ApiEmailContactService {
* @param contactBizId * @param contactBizId
* @return * @return
*/ */
@Override
public List<ApiEmailContactCcDto> buildCcEmailList(List<String> ccEmailList, String contactBizId) { public List<ApiEmailContactCcDto> buildCcEmailList(List<String> ccEmailList, String contactBizId) {
List<ApiEmailContactCcDto> contactCcDtoList = new ArrayList<>(); List<ApiEmailContactCcDto> contactCcDtoList = new ArrayList<>();
if (CollectionUtils.isEmpty(contactCcDtoList)) { if (CollectionUtils.isEmpty(contactCcDtoList)) {
......
package com.yd.email.api.service.impl; package com.yd.email.api.service.impl;
import com.alibaba.fastjson.JSON; 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.enums.CommonEnum;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.common.utils.UUIDUtil; 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.ApiEmailFileService;
import com.yd.email.api.service.ApiEmailVariableGroupService; import com.yd.email.api.service.ApiEmailVariableGroupService;
import com.yd.email.feign.dto.ApiEmailVariableDto; import com.yd.email.feign.dto.ApiEmailVariableDto;
import com.yd.email.feign.enums.GeneralVariableEnum; 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.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest; import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiEmailVariableGroupDetailResponse; import com.yd.email.feign.response.ApiEmailVariableGroupDetailResponse;
import com.yd.email.feign.response.ApiExportVariableExcelResponse; 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.feign.response.ApiImportVariableExcelResponse;
import com.yd.email.service.dto.EmailContactDto;
import com.yd.email.service.dto.EmailVariableDto; 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.EmailContactImport;
import com.yd.email.service.model.EmailVariable; import com.yd.email.service.model.EmailVariable;
import com.yd.email.service.service.IEmailContactImportService; import com.yd.email.service.service.IEmailContactImportService;
import com.yd.email.service.service.IEmailContactService;
import com.yd.email.service.service.IEmailVariableService; import com.yd.email.service.service.IEmailVariableService;
import com.yd.oss.feign.client.ApiExcelFeignClient; import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportParam; import com.yd.oss.feign.dto.ExportParam;
...@@ -27,6 +36,7 @@ import com.yd.oss.feign.request.ApiExportRequest; ...@@ -27,6 +36,7 @@ import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.result.ImportResult; import com.yd.oss.feign.result.ImportResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -51,6 +61,15 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService { ...@@ -51,6 +61,15 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
@Autowired @Autowired
private IEmailContactImportService iEmailContactImportService; 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( private static final Set<String> FIXED_HEADERS = new HashSet<>(Arrays.asList(
GeneralVariableEnum.GENERAL_CONTACT.getItemLabel(), GeneralVariableEnum.GENERAL_CONTACT.getItemLabel(),
...@@ -296,4 +315,114 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService { ...@@ -296,4 +315,114 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
return value != null ? value.toString().trim() : null; 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; ...@@ -5,6 +5,7 @@ import com.yd.email.feign.fallback.ApiEmailFileFeignFallbackFactory;
import com.yd.email.feign.request.ApiExportVariableExcelRequest; import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest; import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse; 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.feign.response.ApiImportVariableExcelResponse;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -37,4 +38,12 @@ public interface ApiEmailFileFeignClient { ...@@ -37,4 +38,12 @@ public interface ApiEmailFileFeignClient {
@PostMapping(value = "/import/excel/variable", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/import/excel/variable", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiImportVariableExcelResponse> importVariableExcel(@RequestParam("file") MultipartFile file, Result<ApiImportVariableExcelResponse> importVariableExcel(@RequestParam("file") MultipartFile file,
@Validated ApiImportVariableExcelRequest request); @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; ...@@ -5,6 +5,7 @@ import com.yd.email.feign.client.ApiEmailFileFeignClient;
import com.yd.email.feign.request.ApiExportVariableExcelRequest; import com.yd.email.feign.request.ApiExportVariableExcelRequest;
import com.yd.email.feign.request.ApiImportVariableExcelRequest; import com.yd.email.feign.request.ApiImportVariableExcelRequest;
import com.yd.email.feign.response.ApiExportVariableExcelResponse; 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.feign.response.ApiImportVariableExcelResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
...@@ -30,6 +31,11 @@ public class ApiEmailFileFeignFallbackFactory implements FallbackFactory<ApiEmai ...@@ -30,6 +31,11 @@ public class ApiEmailFileFeignFallbackFactory implements FallbackFactory<ApiEmai
ApiImportVariableExcelRequest request) { ApiImportVariableExcelRequest request) {
return null; 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; ...@@ -5,6 +5,8 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
...@@ -22,6 +24,11 @@ public class EmailContactDto { ...@@ -22,6 +24,11 @@ public class EmailContactDto {
private String email; private String email;
/** /**
* 联系人邮箱集合
*/
private List<String> emailList;
/**
* 查询是否排除当前发件人唯一标识数据,默认false不排除,true的话senderBizId必传 * 查询是否排除当前发件人唯一标识数据,默认false不排除,true的话senderBizId必传
*/ */
@Builder.Default @Builder.Default
......
...@@ -13,6 +13,7 @@ import com.yd.email.service.service.IEmailContactService; ...@@ -13,6 +13,7 @@ import com.yd.email.service.service.IEmailContactService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
...@@ -43,6 +44,7 @@ public class EmailContactServiceImpl extends ServiceImpl<EmailContactMapper, Ema ...@@ -43,6 +44,7 @@ public class EmailContactServiceImpl extends ServiceImpl<EmailContactMapper, Ema
List<EmailContact> list = baseMapper.selectList(new LambdaQueryWrapper<EmailContact>() List<EmailContact> list = baseMapper.selectList(new LambdaQueryWrapper<EmailContact>()
.eq(StringUtils.isNotBlank(dto.getContactBizId()) && !dto.getIsExcludeMy(),EmailContact::getContactBizId,dto.getContactBizId()) .eq(StringUtils.isNotBlank(dto.getContactBizId()) && !dto.getIsExcludeMy(),EmailContact::getContactBizId,dto.getContactBizId())
.eq(StringUtils.isNotBlank(dto.getEmail()),EmailContact::getEmail,dto.getEmail()) .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()) .ne(dto.getIsExcludeMy(),EmailContact::getContactBizId,dto.getContactBizId())
); );
return list; 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