Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Eladmin
Commits
1ec10e3d
Commit
1ec10e3d
authored
Dec 31, 2018
by
郑杰
Browse files
v1.3 版本发布,详细信息查看发行版说明
parent
d329b0c8
Changes
48
Hide whitespace changes
Inline
Side-by-side
src/main/java/me/zhengjie/tools/service/impl/EmailServiceImpl.java
View file @
1ec10e3d
...
...
@@ -3,6 +3,7 @@ package me.zhengjie.tools.service.impl;
import
cn.hutool.extra.mail.MailAccount
;
import
cn.hutool.extra.mail.MailUtil
;
import
me.zhengjie.common.exception.BadRequestException
;
import
me.zhengjie.common.utils.ElAdminConstant
;
import
me.zhengjie.core.utils.EncryptUtils
;
import
me.zhengjie.tools.domain.EmailConfig
;
import
me.zhengjie.tools.domain.vo.EmailVo
;
...
...
@@ -72,7 +73,7 @@ public class EmailServiceImpl implements EmailService {
account
.
setFrom
(
emailConfig
.
getUser
()+
"<"
+
emailConfig
.
getFromUser
()+
">"
);
//ssl方式发送
account
.
setStartttlsEnable
(
true
);
String
content
=
emailVo
.
getContent
()+
"<p style='text-align: right;'>----- 邮件来自<span style='color: rgb(194, 79, 74);'> <a href='http://auauz.net' target='_blank'>eladmin</a></span> 后台管理系统</p>"
;
String
content
=
emailVo
.
getContent
()+
ElAdminConstant
.
EMAIL_CONTENT
;
/**
* 发送
*/
...
...
src/main/java/me/zhengjie/tools/service/impl/PictureServiceImpl.java
View file @
1ec10e3d
...
...
@@ -70,7 +70,7 @@ public class PictureServiceImpl implements PictureService {
picture
=
JSON
.
parseObject
(
jsonObject
.
get
(
"data"
).
toString
(),
Picture
.
class
);
picture
.
setSize
(
FileUtil
.
getSize
(
Integer
.
valueOf
(
picture
.
getSize
())));
picture
.
setUsername
(
username
);
picture
.
setFilename
(
FileUtil
.
getFileNameNoEx
(
multipartFile
.
getOriginalFilename
()));
picture
.
setFilename
(
FileUtil
.
getFileNameNoEx
(
multipartFile
.
getOriginalFilename
())
+
FileUtil
.
getExtensionName
(
multipartFile
.
getOriginalFilename
())
);
pictureRepository
.
save
(
picture
);
//删除临时文件
FileUtil
.
deleteFile
(
file
);
...
...
src/main/java/me/zhengjie/tools/service/impl/QiNiuServiceImpl.java
0 → 100644
View file @
1ec10e3d
package
me.zhengjie.tools.service.impl
;
import
com.google.gson.Gson
;
import
com.qiniu.common.QiniuException
;
import
com.qiniu.http.Response
;
import
com.qiniu.storage.BucketManager
;
import
com.qiniu.storage.Configuration
;
import
com.qiniu.storage.UploadManager
;
import
com.qiniu.storage.model.DefaultPutRet
;
import
com.qiniu.storage.model.FileInfo
;
import
com.qiniu.util.Auth
;
import
me.zhengjie.common.exception.BadRequestException
;
import
me.zhengjie.common.utils.FileUtil
;
import
me.zhengjie.common.utils.ValidationUtil
;
import
me.zhengjie.tools.domain.QiniuConfig
;
import
me.zhengjie.tools.domain.QiniuContent
;
import
me.zhengjie.tools.repository.QiNiuConfigRepository
;
import
me.zhengjie.tools.repository.QiniuContentRepository
;
import
me.zhengjie.tools.service.QiNiuService
;
import
me.zhengjie.tools.util.QiNiuUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Optional
;
/**
* @author jie
* @date 2018-12-31
*/
@Service
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
QiNiuServiceImpl
implements
QiNiuService
{
@Autowired
private
QiNiuConfigRepository
qiNiuConfigRepository
;
@Autowired
private
QiniuContentRepository
qiniuContentRepository
;
@Value
(
"${qiniu.max-size}"
)
private
Long
maxSize
;
private
final
String
TYPE
=
"公开"
;
@Override
public
QiniuConfig
find
()
{
Optional
<
QiniuConfig
>
qiniuConfig
=
qiNiuConfigRepository
.
findById
(
1L
);
if
(
qiniuConfig
.
isPresent
()){
return
qiniuConfig
.
get
();
}
else
{
return
new
QiniuConfig
();
}
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
QiniuConfig
update
(
QiniuConfig
qiniuConfig
)
{
if
(!(
qiniuConfig
.
getHost
().
toLowerCase
().
startsWith
(
"http://"
)||
qiniuConfig
.
getHost
().
toLowerCase
().
startsWith
(
"https://"
)))
{
throw
new
BadRequestException
(
"外链域名必须以http://或者https://开头"
);
}
qiniuConfig
.
setId
(
1L
);
return
qiNiuConfigRepository
.
save
(
qiniuConfig
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
QiniuContent
upload
(
MultipartFile
file
,
QiniuConfig
qiniuConfig
)
{
Long
size
=
maxSize
*
1024
*
1024
;
if
(
file
.
getSize
()
>
size
){
throw
new
BadRequestException
(
"文件超出规定大小"
);
}
if
(
qiniuConfig
.
getId
()
==
null
){
throw
new
BadRequestException
(
"请先添加相应配置,再操作"
);
}
/**
* 构造一个带指定Zone对象的配置类
*/
Configuration
cfg
=
QiNiuUtil
.
getConfiguration
(
qiniuConfig
.
getZone
());
UploadManager
uploadManager
=
new
UploadManager
(
cfg
);
Auth
auth
=
Auth
.
create
(
qiniuConfig
.
getAccessKey
(),
qiniuConfig
.
getSecretKey
());
String
upToken
=
auth
.
uploadToken
(
qiniuConfig
.
getBucket
());
try
{
Response
response
=
uploadManager
.
put
(
file
.
getBytes
(),
QiNiuUtil
.
getKey
(
file
.
getOriginalFilename
()),
upToken
);
//解析上传成功的结果
DefaultPutRet
putRet
=
new
Gson
().
fromJson
(
response
.
bodyString
(),
DefaultPutRet
.
class
);
//存入数据库
QiniuContent
qiniuContent
=
new
QiniuContent
();
qiniuContent
.
setBucket
(
qiniuConfig
.
getBucket
());
qiniuContent
.
setType
(
qiniuConfig
.
getType
());
qiniuContent
.
setKey
(
putRet
.
key
);
qiniuContent
.
setUrl
(
qiniuConfig
.
getHost
()+
"/"
+
putRet
.
key
);
qiniuContent
.
setSize
(
FileUtil
.
getSize
(
Integer
.
parseInt
(
file
.
getSize
()+
""
)));
return
qiniuContentRepository
.
save
(
qiniuContent
);
}
catch
(
Exception
e
)
{
throw
new
BadRequestException
(
e
.
getMessage
());
}
}
@Override
public
QiniuContent
findByContentId
(
Long
id
)
{
Optional
<
QiniuContent
>
qiniuContent
=
qiniuContentRepository
.
findById
(
id
);
ValidationUtil
.
isNull
(
qiniuContent
,
"QiniuContent"
,
"id"
,
id
);
return
qiniuContent
.
get
();
}
@Override
public
String
download
(
QiniuContent
content
,
QiniuConfig
config
){
String
finalUrl
=
null
;
if
(
TYPE
.
equals
(
content
.
getType
())){
finalUrl
=
content
.
getUrl
();
}
else
{
Auth
auth
=
Auth
.
create
(
config
.
getAccessKey
(),
config
.
getSecretKey
());
/**
* 1小时,可以自定义链接过期时间
*/
long
expireInSeconds
=
3600
;
finalUrl
=
auth
.
privateDownloadUrl
(
content
.
getUrl
(),
expireInSeconds
);
}
return
finalUrl
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
QiniuContent
content
,
QiniuConfig
config
)
{
//构造一个带指定Zone对象的配置类
Configuration
cfg
=
QiNiuUtil
.
getConfiguration
(
config
.
getZone
());
Auth
auth
=
Auth
.
create
(
config
.
getAccessKey
(),
config
.
getSecretKey
());
BucketManager
bucketManager
=
new
BucketManager
(
auth
,
cfg
);
try
{
bucketManager
.
delete
(
content
.
getBucket
(),
content
.
getKey
());
qiniuContentRepository
.
delete
(
content
);
}
catch
(
QiniuException
ex
)
{
System
.
err
.
println
(
ex
.
code
());
System
.
err
.
println
(
ex
.
response
.
toString
());
}
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
synchronize
(
QiniuConfig
config
)
{
if
(
config
.
getId
()
==
null
){
throw
new
BadRequestException
(
"请先添加相应配置,再操作"
);
}
//构造一个带指定Zone对象的配置类
Configuration
cfg
=
QiNiuUtil
.
getConfiguration
(
config
.
getZone
());
Auth
auth
=
Auth
.
create
(
config
.
getAccessKey
(),
config
.
getSecretKey
());
BucketManager
bucketManager
=
new
BucketManager
(
auth
,
cfg
);
//文件名前缀
String
prefix
=
""
;
//每次迭代的长度限制,最大1000,推荐值 1000
int
limit
=
1000
;
//指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
String
delimiter
=
""
;
//列举空间文件列表
BucketManager
.
FileListIterator
fileListIterator
=
bucketManager
.
createFileListIterator
(
config
.
getBucket
(),
prefix
,
limit
,
delimiter
);
while
(
fileListIterator
.
hasNext
())
{
//处理获取的file list结果
QiniuContent
qiniuContent
=
null
;
FileInfo
[]
items
=
fileListIterator
.
next
();
for
(
FileInfo
item
:
items
)
{
if
(
qiniuContentRepository
.
findByKey
(
item
.
key
)
==
null
){
qiniuContent
=
new
QiniuContent
();
qiniuContent
.
setSize
(
FileUtil
.
getSize
(
Integer
.
parseInt
(
item
.
fsize
+
""
)));
qiniuContent
.
setKey
(
item
.
key
);
qiniuContent
.
setType
(
config
.
getType
());
qiniuContent
.
setBucket
(
config
.
getBucket
());
qiniuContent
.
setUrl
(
config
.
getHost
()+
"/"
+
item
.
key
);
qiniuContentRepository
.
save
(
qiniuContent
);
}
}
}
}
}
src/main/java/me/zhengjie/tools/service/query/QiNiuQueryService.java
0 → 100644
View file @
1ec10e3d
package
me.zhengjie.tools.service.query
;
import
me.zhengjie.common.utils.PageUtil
;
import
me.zhengjie.tools.domain.QiniuContent
;
import
me.zhengjie.tools.repository.QiniuContentRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.ObjectUtils
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author jie
* @date 2018-12-31
*/
@Service
@CacheConfig
(
cacheNames
=
"qiNiu"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
QiNiuQueryService
{
@Autowired
private
QiniuContentRepository
qiniuContentRepository
;
/**
* 分页
*/
@Cacheable
(
keyGenerator
=
"keyGenerator"
)
public
Object
queryAll
(
QiniuContent
qiniuContent
,
Pageable
pageable
){
return
PageUtil
.
toPage
(
qiniuContentRepository
.
findAll
(
new
Spec
(
qiniuContent
),
pageable
));
}
class
Spec
implements
Specification
<
QiniuContent
>
{
private
QiniuContent
qiniuContent
;
public
Spec
(
QiniuContent
qiniuContent
){
this
.
qiniuContent
=
qiniuContent
;
}
@Override
public
Predicate
toPredicate
(
Root
<
QiniuContent
>
root
,
CriteriaQuery
<?>
criteriaQuery
,
CriteriaBuilder
cb
)
{
List
<
Predicate
>
list
=
new
ArrayList
<
Predicate
>();
if
(!
ObjectUtils
.
isEmpty
(
qiniuContent
.
getKey
())){
/**
* 模糊
*/
list
.
add
(
cb
.
like
(
root
.
get
(
"key"
).
as
(
String
.
class
),
"%"
+
qiniuContent
.
getKey
()+
"%"
));
}
Predicate
[]
p
=
new
Predicate
[
list
.
size
()];
return
cb
.
and
(
list
.
toArray
(
p
));
}
}
}
src/main/java/me/zhengjie/tools/util/AliPayStatusEnum.java
0 → 100644
View file @
1ec10e3d
package
me.zhengjie.tools.util
;
/**
* 支付状态
* @author zhengjie
* @date 2018/08/01 16:45:43
*/
public
enum
AliPayStatusEnum
{
/**
* 交易成功
*/
FINISHED
(
"交易成功"
,
"TRADE_FINISHED"
),
/**
* 支付成功
*/
SUCCESS
(
"支付成功"
,
"TRADE_SUCCESS"
),
/**
* 交易创建
*/
BUYER_PAY
(
"交易创建"
,
"WAIT_BUYER_PAY"
),
/**
* 交易关闭
*/
CLOSED
(
"交易关闭"
,
"TRADE_CLOSED"
);
private
String
name
;
private
String
value
;
AliPayStatusEnum
(
String
name
,
String
value
)
{
this
.
name
=
name
;
this
.
value
=
value
;
}
public
String
getValue
()
{
return
value
;
}
}
src/main/java/me/zhengjie/tools/util/AlipayUtils.java
0 → 100644
View file @
1ec10e3d
package
me.zhengjie.tools.util
;
import
cn.hutool.core.util.StrUtil
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.internal.util.AlipaySignature
;
import
me.zhengjie.tools.domain.AlipayConfig
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.http.HttpServletRequest
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
/**
* 支付宝工具类
* @author zhengjie
* @date 2018/09/30 14:04:35
*/
@Component
public
class
AlipayUtils
{
/**
* 生成订单号
* @return
*/
public
String
getOrderCode
()
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
int
a
=
(
int
)(
Math
.
random
()
*
9000.0
D
)
+
1000
;
System
.
out
.
println
(
a
);
Date
date
=
new
Date
();
String
str
=
sdf
.
format
(
date
);
String
[]
split
=
str
.
split
(
"-"
);
String
s
=
split
[
0
]
+
split
[
1
]
+
split
[
2
];
String
[]
split1
=
s
.
split
(
" "
);
String
s1
=
split1
[
0
]
+
split1
[
1
];
String
[]
split2
=
s1
.
split
(
":"
);
String
s2
=
split2
[
0
]
+
split2
[
1
]
+
split2
[
2
]
+
a
;
return
s2
;
}
/**
* 校验签名
* @param request
* @return
*/
public
boolean
rsaCheck
(
HttpServletRequest
request
,
AlipayConfig
alipay
){
/**
* 获取支付宝POST过来反馈信息
*/
Map
<
String
,
String
>
params
=
new
HashMap
<>(
1
);
Map
requestParams
=
request
.
getParameterMap
();
for
(
Iterator
iter
=
requestParams
.
keySet
().
iterator
();
iter
.
hasNext
();)
{
String
name
=
(
String
)
iter
.
next
();
String
[]
values
=
(
String
[])
requestParams
.
get
(
name
);
String
valueStr
=
""
;
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++)
{
valueStr
=
(
i
==
values
.
length
-
1
)
?
valueStr
+
values
[
i
]
:
valueStr
+
values
[
i
]
+
","
;
}
params
.
put
(
name
,
valueStr
);
}
try
{
boolean
verifyResult
=
AlipaySignature
.
rsaCheckV1
(
params
,
alipay
.
getPublicKey
(),
alipay
.
getCharset
(),
alipay
.
getSignType
());
return
verifyResult
;
}
catch
(
AlipayApiException
e
)
{
return
false
;
}
}
public
boolean
isEmpty
(
String
str
){
return
StrUtil
.
isEmpty
(
str
);
}
}
src/main/java/me/zhengjie/tools/util/QiNiuUtil.java
0 → 100644
View file @
1ec10e3d
package
me.zhengjie.tools.util
;
import
com.qiniu.common.Zone
;
import
com.qiniu.storage.Configuration
;
import
me.zhengjie.common.utils.FileUtil
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
/**
* 七牛云存储工具类
* @author jie
* @date 2018-12-31
*/
public
class
QiNiuUtil
{
public
static
final
String
HUAD
=
"华东"
;
public
static
final
String
HUAB
=
"华北"
;
public
static
final
String
HUAN
=
"华南"
;
public
static
final
String
BEIM
=
"北美"
;
/**
* 得到机房的对应关系
* @param zone
* @return
*/
public
static
Configuration
getConfiguration
(
String
zone
){
if
(
HUAD
.
equals
(
zone
)){
return
new
Configuration
(
Zone
.
zone0
());
}
else
if
(
HUAB
.
equals
(
zone
)){
return
new
Configuration
(
Zone
.
zone1
());
}
else
if
(
HUAN
.
equals
(
zone
)){
return
new
Configuration
(
Zone
.
zone2
());
}
else
if
(
BEIM
.
equals
(
zone
)){
return
new
Configuration
(
Zone
.
zoneNa0
());
// 否则就是东南亚
}
else
{
return
new
Configuration
(
Zone
.
zoneAs0
());
}
}
/**
* 默认不指定key的情况下,以文件内容的hash值作为文件名
* @param file
* @return
*/
public
static
String
getKey
(
String
file
){
StringBuffer
key
=
new
StringBuffer
(
FileUtil
.
getFileNameNoEx
(
file
));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
Date
date
=
new
Date
();
key
.
append
(
sdf
.
format
(
date
));
key
.
append
(
"."
);
key
.
append
(
FileUtil
.
getExtensionName
(
file
));
return
key
.
toString
();
}
}
src/main/resources/application.yml
View file @
1ec10e3d
...
...
@@ -80,11 +80,20 @@ spring:
jwt
:
header
:
Authorization
secret
:
mySecret
# token 过期时间
1
个小时
expiration
:
36
00000
# token 过期时间
2
个小时
expiration
:
72
00000
# expiration: 60000
auth
:
# 授权路径
path
:
/login
# 获取用户信息
account
:
/info
\ No newline at end of file
account
:
/info
#七牛云
qiniu
:
# 文件大小 /M
max-size
:
5
#验证码有效时间/分钟
code
:
expiration
:
5
\ No newline at end of file
Prev
1
2
3
Next
Write
Preview
Supports
Markdown
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