Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
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
陈天仲
email
Commits
827fd30d
Commit
827fd30d
authored
Mar 13, 2023
by
chentianzhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提一个版本
parent
9af12362
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
133 additions
and
35 deletions
+133
-35
src/main/java/com/zq/email/controller/EmailAttachController.java
+56
-4
src/main/java/com/zq/email/feign/MessageFeignClient.java
+3
-2
src/main/java/com/zq/email/service/impl/EmailPersonServiceImpl.java
+66
-21
src/main/java/com/zq/email/utils/SmsUtil.java
+1
-1
src/main/resources/application-dev.yml
+1
-1
src/main/resources/application.yml
+2
-2
src/main/resources/bootstrap.yml
+1
-1
src/main/resources/logback-spring.xml
+3
-3
No files found.
src/main/java/com/zq/email/controller/EmailAttachController.java
View file @
827fd30d
package
com
.
zq
.
email
.
controller
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.http.HttpUtil
;
import
com.zq.common.annotation.AnonymousAccess
;
import
com.zq.common.utils.AssertUtils
;
import
com.zq.common.vo.ResultVo
;
import
com.zq.email.entity.EmailAttach
;
import
com.zq.email.entity.EmailContent
;
import
com.zq.email.entity.EmailPerson
;
import
com.zq.email.service.IEmailAttachService
;
...
...
@@ -11,11 +16,14 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.ByteArrayOutputStream
;
import
java.io.OutputStream
;
import
java.nio.charset.StandardCharsets
;
/**
* <p>
...
...
@@ -33,6 +41,8 @@ import org.springframework.web.bind.annotation.RestController;
public
class
EmailAttachController
{
private
final
IEmailAttachService
emailAttachService
;
@Value
(
"${spring.cloud.config.profile"
)
private
String
profile
;
@ApiOperation
(
"获取附件"
)
@PostMapping
...
...
@@ -40,4 +50,46 @@ public class EmailAttachController {
AssertUtils
.
notNull
(
vo
.
getContentId
(),
"缺少参数:contentId"
);
return
ResultVo
.
success
(
emailAttachService
.
findByContentId
(
vo
.
getContentId
()));
}
@ApiOperation
(
"下载附件"
)
@AnonymousAccess
@GetMapping
(
"/download/{id}"
)
public
void
download
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@PathVariable
(
"id"
)
String
id
)
{
EmailAttach
emailAttach
=
emailAttachService
.
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
;
}
}
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
();
}
catch
(
Exception
e
)
{
log
.
error
(
"下载文件失败:"
+
e
.
getLocalizedMessage
(),
e
);
AssertUtils
.
isTrue
(
false
,
"网络异常,下载文件失败"
);
}
}
}
src/main/java/com/zq/email/feign/MessageFeignClient.java
View file @
827fd30d
...
...
@@ -2,6 +2,7 @@ package com.zq.email.feign;
import
com.zq.common.vo.ResultVo
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -41,7 +42,7 @@ public interface MessageFeignClient {
* @param params
* @return
*/
@
Post
Mapping
(
"/web/delMessageBySystem"
)
@
Delete
Mapping
(
"/web/delMessageBySystem"
)
ResultVo
revokeWebBySysInfo
(
@RequestBody
Map
<
String
,
Object
>
params
);
/**
...
...
@@ -51,7 +52,7 @@ public interface MessageFeignClient {
* @param params
* @return
*/
@
Post
Mapping
(
"/todo/delMessageBySystem"
)
@
Delete
Mapping
(
"/todo/delMessageBySystem"
)
ResultVo
revokeTodoBySysInfo
(
@RequestBody
Map
<
String
,
Object
>
params
);
}
src/main/java/com/zq/email/service/impl/EmailPersonServiceImpl.java
View file @
827fd30d
...
...
@@ -174,7 +174,9 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
//增加收件人
this
.
saveEmailReceiver
(
receiverList
,
content
,
vo
);
//短信
smsUtil
.
sendBatchSms
(
receiverList
,
"您有一封新的邮件,标题为《"
+
content
.
getTitle
()+
"》。请及时查收。"
,
content
.
getId
());
if
(
content
.
getSmsRemind
()!=
null
&&
content
.
getSmsRemind
()
==
1
)
{
smsUtil
.
sendBatchSms
(
receiverList
,
"您有一封新的邮件,标题为《"
+
content
.
getTitle
()
+
"》。请及时查收。"
,
content
.
getId
());
}
}
...
...
@@ -183,7 +185,9 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
//增加收件部门
this
.
saveEmailReceiveDept
(
deptUserList
,
content
,
vo
);
//短信
smsUtil
.
sendBatchSms
(
deptUserList
,
"您有一封新的邮件,标题为《"
+
content
.
getTitle
()+
"》。请及时查收。"
,
content
.
getId
());
if
(
content
.
getSmsRemind
()!=
null
&&
content
.
getSmsRemind
()
==
1
)
{
smsUtil
.
sendBatchSms
(
deptUserList
,
"您有一封新的邮件,标题为《"
+
content
.
getTitle
()
+
"》。请及时查收。"
,
content
.
getId
());
}
}
}
...
...
@@ -338,7 +342,8 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
LambdaQueryWrapper
<
EmailPerson
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
EmailPerson:
:
getUserId
,
adminContext
.
getUserId
())
.
eq
(
EmailPerson:
:
getFolderId
,
vo
.
getFolderId
());
.
eq
(
EmailPerson:
:
getFolderId
,
vo
.
getFolderId
())
.
eq
(
EmailPerson:
:
getIsSend
,
WhetherEnum
.
YES
.
getKey
());
//.eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_RECEIVE);
if
(
type
.
equals
(
WhetherEnum
.
YES
.
getKey
())){
...
...
@@ -367,6 +372,22 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
.
in
(
EmailPerson:
:
getId
,
vo
.
getPersonIdList
())
.
set
(
EmailPerson:
:
getIsSend
,
vo
.
getIsSend
())
.
update
();
new
Thread
(()
->
{
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
));
}
}).
start
();
}
@Override
...
...
@@ -377,17 +398,39 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
.
eq
(
EmailPerson:
:
getIsRead
,
WhetherEnum
.
YES
.
getKey
())
.
eq
(
EmailPerson:
:
getPersonType
,
EmailConstant
.
TYPE_EMAIL_RECEIVE
).
list
();
AssertUtils
.
isTrue
(
CollectionUtil
.
isEmpty
(
list
),
"邮件已被收件人已读,无法撤回"
);
//删除收件人
this
.
lambdaUpdate
()
.
eq
(
EmailPerson:
:
getEmailContentId
,
contentId
)
List
<
EmailPerson
>
personList
=
this
.
lambdaQuery
().
eq
(
EmailPerson:
:
getEmailContentId
,
contentId
)
.
eq
(
EmailPerson:
:
getIsRead
,
WhetherEnum
.
NO
.
getKey
())
.
eq
(
EmailPerson:
:
getPersonType
,
EmailConstant
.
TYPE_EMAIL_RECEIVE
).
remove
();
.
eq
(
EmailPerson:
:
getPersonType
,
EmailConstant
.
TYPE_EMAIL_RECEIVE
).
list
();
//删除收件人
// if (CollectionUtil.isNotEmpty(personList)){
// this.removeByIds(personList);
// this.re
// }
// this.lambdaUpdate()
// .eq(EmailPerson::getEmailContentId, contentId)
// .eq(EmailPerson::getIsRead, WhetherEnum.NO.getKey())
// .eq(EmailPerson::getPersonType, EmailConstant.TYPE_EMAIL_RECEIVE).remove();
//将发件人设置为未发送
this
.
lambdaUpdate
()
.
eq
(
EmailPerson:
:
getEmailContentId
,
contentId
)
.
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
));
}
}
@Override
...
...
@@ -541,21 +584,21 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
//内部消息提醒
if
(
content
.
getMessageRemind
()!=
null
&&
content
.
getMessageRemind
()
==
1
){
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
//
new Thread(new Runnable() {
//
@Override
//
public void run() {
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
());
params
.
put
(
"jumpUrl"
,
systemInfo
.
getHomeUrl
()
+
"/#/detail?personId
=
"
+
receivePerson
.
getId
());
log
.
info
(
"发送内部短信内容打印: {}"
,
JSONUtil
.
toJsonStr
(
params
));
messageFeignClient
.
sendWebMessage
(
params
);
messageFeignClient
.
addToDo
(
params
);
}
});
//
}
//
});
}
...
...
@@ -590,21 +633,23 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
//内部消息提醒
if
(
content
.
getMessageRemind
()!=
null
&&
content
.
getMessageRemind
()
==
1
){
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
//
new Thread(new Runnable() {
//
@Override
//
public void run() {
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
()
+
"/#/
oaContent/index
?personId="
+
receivePerson
.
getId
());
params
.
put
(
"jumpUrl"
,
systemInfo
.
getHomeUrl
()
+
"/#/
detail
?personId="
+
receivePerson
.
getId
());
log
.
info
(
"发送内部短信内容打印: {}"
,
JSONUtil
.
toJsonStr
(
params
));
messageFeignClient
.
sendWebMessage
(
params
);
messageFeignClient
.
addToDo
(
params
);
}
});
ResultVo
resultVo
=
messageFeignClient
.
sendWebMessage
(
params
);
log
.
info
(
"sendWebMessage: {}"
+
JSONUtil
.
toJsonStr
(
resultVo
));
ResultVo
resultVo1
=
messageFeignClient
.
addToDo
(
params
);
log
.
info
(
"addToDo: {}"
+
JSONUtil
.
toJsonStr
(
resultVo1
));
// }
// });
}
...
...
src/main/java/com/zq/email/utils/SmsUtil.java
View file @
827fd30d
...
...
@@ -48,7 +48,7 @@ public class SmsUtil {
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"phones"
,
Base64
.
encode
(
sb
.
toString
().
getBytes
()));
map
.
put
(
"f
or
mId"
,
Base64
.
encode
(
"oa_email"
.
getBytes
()));
map
.
put
(
"f
ro
mId"
,
Base64
.
encode
(
"oa_email"
.
getBytes
()));
map
.
put
(
"content"
,
Base64
.
encode
(
content
.
getBytes
()));
map
.
put
(
"isReply"
,
Base64
.
encode
(
"0"
.
getBytes
()));
String
param
=
JSONUtil
.
toJsonStr
(
map
);
...
...
src/main/resources/application-dev.yml
View file @
827fd30d
...
...
@@ -3,7 +3,7 @@ spring:
redis
:
#数据库索引
database
:
0
host
:
1
27.0.0.1
host
:
1
72.18.4.84
port
:
6379
password
:
#连接超时时间
...
...
src/main/resources/application.yml
View file @
827fd30d
...
...
@@ -22,8 +22,8 @@ mybatis-plus:
db-config
:
select-strategy
:
not_empty
update-strategy
:
not_empty
configuration
:
log-impl
:
org.apache.ibatis.logging.stdout.StdOutImpl
#
configuration:
#
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#日志
logging
:
config
:
classpath:logback-spring.xml
...
...
src/main/resources/bootstrap.yml
View file @
827fd30d
...
...
@@ -4,7 +4,7 @@ spring:
cloud
:
config
:
name
:
config
profile
:
dev
profile
:
${spring.profiles.active}
discovery
:
enabled
:
true
service-id
:
CONFIG-SERVER
...
...
src/main/resources/logback-spring.xml
View file @
827fd30d
...
...
@@ -168,11 +168,11 @@
-->
<logger
name=
"org.springframework.boot.autoconfigure"
level=
"error"
/>
<springProfile
name=
"l
co
al"
>
<logger
name=
"com.zq"
level=
"
debug
"
/>
<springProfile
name=
"l
oc
al"
>
<logger
name=
"com.zq"
level=
"
info
"
/>
</springProfile>
<springProfile
name=
"dev"
>
<logger
name=
"com.zq"
level=
"
debug
"
/>
<logger
name=
"com.zq"
level=
"
info
"
/>
</springProfile>
<springProfile
name=
"test"
>
...
...
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