Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-email
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-email
Commits
9dfc46bf
Commit
9dfc46bf
authored
Sep 28, 2025
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
导入导出
parent
01839c68
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
240 additions
and
5 deletions
+240
-5
yd-email-api/src/main/java/com/yd/email/api/service/impl/ApiEmailFileServiceImpl.java
+217
-5
yd-email-feign/src/main/java/com/yd/email/feign/response/ApiImportVariableExcelResponse.java
+5
-0
yd-email-service/src/main/java/com/yd/email/service/dto/EmailVariableDto.java
+5
-0
yd-email-service/src/main/java/com/yd/email/service/model/EmailContactImport.java
+6
-0
yd-email-service/src/main/java/com/yd/email/service/model/EmailTaskRecipients.java
+6
-0
yd-email-service/src/main/java/com/yd/email/service/service/impl/EmailVariableServiceImpl.java
+1
-0
No files found.
yd-email-api/src/main/java/com/yd/email/api/service/impl/ApiEmailFileServiceImpl.java
View file @
9dfc46bf
package
com
.
yd
.
email
.
api
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
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.ApiEmailFileService
;
import
com.yd.email.api.service.ApiEmailVariableGroupService
;
import
com.yd.email.feign.dto.ApiEmailVariableDto
;
...
...
@@ -9,19 +14,24 @@ 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.email.service.dto.EmailVariableDto
;
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.IEmailVariableService
;
import
com.yd.oss.feign.client.ApiExcelFeignClient
;
import
com.yd.oss.feign.dto.ExportParam
;
import
com.yd.oss.feign.dto.ExportResult
;
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.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
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Slf4j
...
...
@@ -34,6 +44,15 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
@Autowired
private
ApiEmailVariableGroupService
apiEmailVariableGroupService
;
@Autowired
private
IEmailVariableService
iEmailVariableService
;
@Autowired
private
IEmailContactImportService
iEmailContactImportService
;
// 固定表头字段
private
static
final
Set
<
String
>
FIXED_HEADERS
=
new
HashSet
<>(
Arrays
.
asList
(
"联系人"
,
"邮箱"
,
"抄送人"
));
/**
* 导出-变量excel
* @param request
...
...
@@ -45,7 +64,7 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
ApiEmailVariableGroupDetailResponse
response
=
result
.
getData
();
//分组绑定的变量列表
List
<
ApiEmailVariableDto
>
emailVariableDtoList
=
response
.
getEmailVariableDtoList
();
List
<
String
>
FieldNameList
=
Arrays
.
asList
(
"联系人"
,
"邮箱"
,
"抄送人"
);
List
<
String
>
FieldNameList
=
new
ArrayList
<>(
FIXED_HEADERS
);
if
(!
CollectionUtils
.
isEmpty
(
emailVariableDtoList
))
{
FieldNameList
.
addAll
(
emailVariableDtoList
.
stream
().
map
(
ApiEmailVariableDto:
:
getVariableNameCn
).
collect
(
Collectors
.
toList
()));
}
...
...
@@ -66,6 +85,8 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
return
Result
.
success
(
response1
);
}
/**
* 导入-变量excel
* @param file
...
...
@@ -75,8 +96,199 @@ public class ApiEmailFileServiceImpl implements ApiEmailFileService {
@Override
public
Result
<
ApiImportVariableExcelResponse
>
importVariableExcel
(
MultipartFile
file
,
ApiImportVariableExcelRequest
request
)
{
ApiImportVariableExcelResponse
response
=
new
ApiImportVariableExcelResponse
();
String
sessionId
=
request
.
getSessionId
();
if
(
StringUtils
.
isBlank
(
request
.
getSessionId
()))
{
sessionId
=
UUIDUtil
.
randomUUIDWithoutHyphen
();
}
response
.
setSessionId
(
sessionId
);
try
{
// 远程调用Feign,通用Excel导入接口
Result
<
ImportResult
>
result
=
apiExcelFeignClient
.
importExcel
(
file
,
0
,
1
,
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
());
// 获取变量字段(排除固定字段)
List
<
String
>
variableHeaders
=
getVariableHeaders
(
importResult
.
getHeaders
());
//根据非固定表头字段(变量字段)中文名查询对应的英文名,返回集合
List
<
EmailVariable
>
emailVariableList
=
getEmailVariableList
(
variableHeaders
);
// 处理每一行数据
List
<
EmailContactImport
>
contactImports
=
processImportData
(
importResult
.
getData
(),
sessionId
,
variableHeaders
,
emailVariableList
);
// 批量保存到数据库
if
(!
CollectionUtils
.
isEmpty
(
contactImports
))
{
boolean
saveResult
=
iEmailContactImportService
.
saveOrUpdateBatch
(
contactImports
);
if
(
saveResult
)
{
response
.
setImportCount
(
contactImports
.
size
());
log
.
info
(
"成功导入 {} 条联系人数据"
,
contactImports
.
size
());
}
else
{
return
Result
.
fail
(
"数据保存失败"
);
}
}
else
{
response
.
setImportCount
(
0
);
log
.
warn
(
"Excel中未找到有效数据"
);
}
return
Result
.
success
(
response
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导入变量Excel异常"
,
e
);
return
Result
.
fail
(
"导入失败: "
+
e
.
getMessage
());
}
}
/**
* 获取变量字段(排除固定字段)
* @param allHeaders
* @return
*/
private
List
<
String
>
getVariableHeaders
(
List
<
String
>
allHeaders
)
{
List
<
String
>
variableHeaders
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
allHeaders
))
{
return
variableHeaders
;
}
for
(
String
header
:
allHeaders
)
{
if
(!
FIXED_HEADERS
.
contains
(
header
))
{
variableHeaders
.
add
(
header
);
}
}
return
variableHeaders
;
}
/**
* 根据非固定表头字段(变量字段)中文名查询对应的英文名,返回集合
* @param variableHeaders
* @return
*/
public
List
<
EmailVariable
>
getEmailVariableList
(
List
<
String
>
variableHeaders
)
{
List
<
EmailVariable
>
emailVariableList
=
iEmailVariableService
.
queryList
(
EmailVariableDto
.
builder
().
variableNameCnList
(
variableHeaders
).
build
());
return
emailVariableList
;
}
/**
* 处理导入数据
* @param data
* @param sessionId
* @param variableHeaders
* @param emailVariableList
* @return
*/
private
List
<
EmailContactImport
>
processImportData
(
List
<
Map
<
String
,
Object
>>
data
,
String
sessionId
,
List
<
String
>
variableHeaders
,
List
<
EmailVariable
>
emailVariableList
)
{
List
<
EmailContactImport
>
contactImports
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
data
))
{
return
contactImports
;
}
for
(
Map
<
String
,
Object
>
row
:
data
)
{
EmailContactImport
contactImport
=
new
EmailContactImport
();
// 设置固定字段
contactImport
.
setImportBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_EMAIL_CONTACT_IMPORT
.
getCode
()));
contactImport
.
setSessionId
(
sessionId
);
contactImport
.
setReceiveName
(
getStringValue
(
row
,
"联系人"
));
contactImport
.
setReceiveEmail
(
getStringValue
(
row
,
"邮箱"
));
contactImport
.
setCcEmail
(
getStringValue
(
row
,
"抄送人"
));
// 处理变量数据,转换为JSON格式
String
variablesJson
=
processVariableData
(
row
,
variableHeaders
,
emailVariableList
);
contactImport
.
setVariables
(
variablesJson
);
// 设置其他字段
//1-excel导入联系人
contactImport
.
setSource
(
1
);
contactImports
.
add
(
contactImport
);
}
return
contactImports
;
}
/**
* 处理变量数据,转换为JSON格式
* @param row
* @param variableHeaders
* @return
*/
private
String
processVariableData
(
Map
<
String
,
Object
>
row
,
List
<
String
>
variableHeaders
,
List
<
EmailVariable
>
emailVariableList
)
{
List
<
Map
<
String
,
String
>>
variableList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
variableHeaders
))
{
return
null
;
}
for
(
String
header
:
variableHeaders
)
{
String
value
=
getStringValue
(
row
,
header
);
if
(
StringUtils
.
isNotBlank
(
value
))
{
Map
<
String
,
String
>
variableMap
=
new
HashMap
<>();
// 中文变量字段名
variableMap
.
put
(
"cn_key"
,
header
);
// 英文变量字段名(需要转换,根据中文名查变量表转换)
variableMap
.
put
(
"en_key"
,
convertToEnKey
(
header
,
emailVariableList
));
// 占位符内容
variableMap
.
put
(
"content"
,
value
);
variableList
.
add
(
variableMap
);
}
}
return
CollectionUtils
.
isEmpty
(
variableList
)
?
null
:
JSON
.
toJSONString
(
variableList
);
}
/**
* 将中文字段名转换为英文键名(根据表返回的数据对应转换)
* @param cnKey 中文变量字段名
* @param emailVariableList 变量列表
* @return
*/
public
String
convertToEnKey
(
String
cnKey
,
List
<
EmailVariable
>
emailVariableList
)
{
if
(
StringUtils
.
isBlank
(
cnKey
)
||
CollectionUtils
.
isEmpty
(
emailVariableList
))
{
return
null
;
}
return
emailVariableList
.
stream
()
.
filter
(
dto
->
StringUtils
.
equals
(
dto
.
getVariableNameCn
(),
cnKey
))
.
findFirst
()
.
map
(
EmailVariable:
:
getVariableNameEn
)
// 假设EmailVariable类中有getVariableNameEn方法
.
orElseGet
(()
->
{
// 如果找不到对应的英文键名,可以返回一个默认值或进行转换
log
.
warn
(
"未找到中文变量名 '{}' 对应的英文键名"
,
cnKey
);
throw
new
BusinessException
(
"变量表未找到中文变量名:"
+
cnKey
+
",请检查!"
);
});
}
/**
* 安全获取字符串值
* @param row
* @param key
* @return
*/
private
String
getStringValue
(
Map
<
String
,
Object
>
row
,
String
key
)
{
if
(
row
==
null
||
!
row
.
containsKey
(
key
))
{
return
null
;
}
return
null
;
Object
value
=
row
.
get
(
key
);
return
value
!=
null
?
value
.
toString
().
trim
()
:
null
;
}
}
yd-email-feign/src/main/java/com/yd/email/feign/response/ApiImportVariableExcelResponse.java
View file @
9dfc46bf
...
...
@@ -9,4 +9,9 @@ public class ApiImportVariableExcelResponse {
* 当前会话id(前端缓存有值就传,没有值后端生成返回给前端存入前端缓存)
*/
private
String
sessionId
;
/**
* 成功导入多少条
*/
private
Integer
importCount
;
}
yd-email-service/src/main/java/com/yd/email/service/dto/EmailVariableDto.java
View file @
9dfc46bf
...
...
@@ -29,6 +29,11 @@ public class EmailVariableDto {
private
String
variableNameCn
;
/**
* 变量字段名称中文名列表
*/
private
List
<
String
>
variableNameCnList
;
/**
* 变量字段名称英文名
*/
private
String
variableNameEn
;
...
...
yd-email-service/src/main/java/com/yd/email/service/model/EmailContactImport.java
View file @
9dfc46bf
...
...
@@ -55,6 +55,12 @@ public class EmailContactImport implements Serializable {
private
String
receiveEmail
;
/**
* 收件人名称(姓名或者昵称)
*/
@TableField
(
"receive_name"
)
private
String
receiveName
;
/**
* 抄送人邮箱(多个用分号分隔)
*/
@TableField
(
"cc_email"
)
...
...
yd-email-service/src/main/java/com/yd/email/service/model/EmailTaskRecipients.java
View file @
9dfc46bf
...
...
@@ -49,6 +49,12 @@ public class EmailTaskRecipients implements Serializable {
private
String
receiveEmail
;
/**
* 收件人名称(姓名或者昵称)
*/
@TableField
(
"receive_name"
)
private
String
receiveName
;
/**
* 抄送人邮箱(多个用分号分隔)
*/
@TableField
(
"cc_email"
)
...
...
yd-email-service/src/main/java/com/yd/email/service/service/impl/EmailVariableServiceImpl.java
View file @
9dfc46bf
...
...
@@ -46,6 +46,7 @@ public class EmailVariableServiceImpl extends ServiceImpl<EmailVariableMapper, E
.
eq
(
StringUtils
.
isNotBlank
(
dto
.
getVariableNameCn
()),
EmailVariable:
:
getVariableNameCn
,
dto
.
getVariableNameCn
())
.
eq
(
StringUtils
.
isNotBlank
(
dto
.
getVariableNameEn
()),
EmailVariable:
:
getVariableNameEn
,
dto
.
getVariableNameEn
())
.
in
(!
CollectionUtils
.
isEmpty
(
dto
.
getVariableBizIdList
()),
EmailVariable:
:
getVariableBizId
,
dto
.
getVariableBizIdList
())
.
in
(!
CollectionUtils
.
isEmpty
(
dto
.
getVariableNameCnList
()),
EmailVariable:
:
getVariableNameCn
,
dto
.
getVariableNameCnList
())
.
ne
(
dto
.
getIsExcludeMy
(),
EmailVariable:
:
getVariableBizId
,
dto
.
getVariableBizId
())
);
return
list
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment