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
"jetbrains:/idea/checkout/git" did not exist on "cfa5e1fdeaa2daeccae13d975befcf49c7c2f24d"
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