Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
街头小贩
Jforum2
提交
0a2a28ad
J
Jforum2
项目概览
街头小贩
/
Jforum2
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jforum2
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0a2a28ad
编写于
9月 22, 2020
作者:
街头小贩
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修正thrones 中CTL的TipMessage输出API
上级
323d7685
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
51 addition
and
127 deletion
+51
-127
letterbox.impl/src/main/java/com/apobates/forum/letterbox/impl/service/InboxServiceImpl.java
...obates/forum/letterbox/impl/service/InboxServiceImpl.java
+16
-5
letterbox/src/main/java/com/apobates/forum/letterbox/service/InboxService.java
...va/com/apobates/forum/letterbox/service/InboxService.java
+11
-1
letterbox/src/main/java/module-info.java
letterbox/src/main/java/module-info.java
+1
-0
thrones/src/main/java/com/apobates/forum/thrones/controller/BoardController.java
...om/apobates/forum/thrones/controller/BoardController.java
+3
-20
thrones/src/main/java/com/apobates/forum/thrones/controller/MainController.java
...com/apobates/forum/thrones/controller/MainController.java
+1
-5
thrones/src/main/java/com/apobates/forum/thrones/controller/MessageController.java
.../apobates/forum/thrones/controller/MessageController.java
+4
-20
thrones/src/main/java/com/apobates/forum/thrones/controller/PostsController.java
...om/apobates/forum/thrones/controller/PostsController.java
+2
-9
thrones/src/main/java/com/apobates/forum/thrones/controller/PostsMoodController.java
...pobates/forum/thrones/controller/PostsMoodController.java
+1
-5
thrones/src/main/java/com/apobates/forum/thrones/controller/TopicController.java
...om/apobates/forum/thrones/controller/TopicController.java
+10
-57
thrones/src/main/java/com/apobates/forum/thrones/controller/TopicTagController.java
...apobates/forum/thrones/controller/TopicTagController.java
+1
-4
utils/src/main/java/com/apobates/forum/utils/DateTimeUtils.java
...src/main/java/com/apobates/forum/utils/DateTimeUtils.java
+1
-1
未找到文件。
letterbox.impl/src/main/java/com/apobates/forum/letterbox/impl/service/InboxServiceImpl.java
浏览文件 @
0a2a28ad
...
...
@@ -117,7 +117,18 @@ public class InboxServiceImpl implements InboxService{
public
int
readed
(
long
memberId
)
{
return
inboxDao
.
editReadabled
(
memberId
);
}
@Override
public
Optional
<
Boolean
>
compositeReaded
(
long
memberId
,
long
othMemberId
,
int
direction
)
{
if
(
direction
==
1
)
{
//将两个会员之间(指定发件人发来)的未读消息标为已读
return
readed
(
memberId
,
othMemberId
);
}
if
(
othMemberId
==
-
1
&&
direction
==
2
)
{
//将会员的未读消息标记为已读
return
Optional
.
of
(
readed
(
memberId
)>
0
);
}
return
Optional
.
empty
();
}
@Override
public
long
countForMemberMessages
(
long
memberId
)
{
return
inboxDao
.
countForUnReadable
(
memberId
);
...
...
@@ -136,10 +147,10 @@ public class InboxServiceImpl implements InboxService{
return
Stream
.
empty
();
}
final
Map
<
Long
,
Inbox
>
boxes
=
CompletableFuture
.
supplyAsync
(()->
data
.
stream
().
map
(
ForumLetter:
:
getId
).
collect
(
Collectors
.
toSet
()))
.
thenCompose
(
letterIdSet
->
CompletableFuture
.
supplyAsync
(()->
inboxDao
.
findAllByLetter
(
letterIdSet
).
collect
(
Collectors
.
toMap
(
Inbox:
:
getLetter
,
Function
.
identity
())))
.
completeOnTimeout
(
Collections
.
emptyMap
(),
1
,
TimeUnit
.
SECONDS
))
.
orTimeout
(
1
,
TimeUnit
.
SECONDS
)
.
join
();
.
thenCompose
(
letterIdSet
->
CompletableFuture
.
supplyAsync
(()->
inboxDao
.
findAllByLetter
(
letterIdSet
).
collect
(
Collectors
.
toMap
(
Inbox:
:
getLetter
,
Function
.
identity
())))
.
completeOnTimeout
(
Collections
.
emptyMap
(),
1
,
TimeUnit
.
SECONDS
))
.
orTimeout
(
1
,
TimeUnit
.
SECONDS
)
.
join
();
Consumer
<
ForumLetterReplica
>
action
=
fl
->{
Inbox
ti
=
boxes
.
get
(
fl
.
getId
());
fl
.
setStatus
(
new
ForumLetterStatus
(
ti
.
getId
(),
ti
.
isReadable
(),
ti
.
isReply
(),
ti
.
isUsable
()));
...
...
letterbox/src/main/java/com/apobates/forum/letterbox/service/InboxService.java
浏览文件 @
0a2a28ad
...
...
@@ -97,7 +97,17 @@ public interface InboxService {
* @return
*/
int
readed
(
long
memberId
);
/**
* 复合标记为已读,复合(int readed(long) || Optional<Boolean> readed(long, long))
*
* @param memberId 主向会员
* @param othMemberId
* @param direction 方向
* @return
*/
Optional
<
Boolean
>
compositeReaded
(
long
memberId
,
long
othMemberId
,
int
direction
);
/**
* 删除指定的信件
*
...
...
letterbox/src/main/java/module-info.java
浏览文件 @
0a2a28ad
...
...
@@ -17,6 +17,7 @@ open module Letterbox {
requires
jackson
.
core
;
requires
org
.
slf4j
;
exports
com
.
apobates
.
forum
.
letterbox
.
entity
;
exports
com
.
apobates
.
forum
.
letterbox
.
entity
.
proxy
;
exports
com
.
apobates
.
forum
.
letterbox
.
service
;
exports
com
.
apobates
.
forum
.
letterbox
.
dao
;
}
\ No newline at end of file
thrones/src/main/java/com/apobates/forum/thrones/controller/BoardController.java
浏览文件 @
0a2a28ad
...
...
@@ -170,16 +170,7 @@ public class BoardController {
//----------------------------------策略检查开始,不限角色.
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
;
try
{
symbol
=
boardService
.
removeFavorite
(
boardId
,
aec
).
orElse
(
false
);
}
catch
(
IllegalStateException
e
){
return
TipMessage
.
ofError
(
e
.
getMessage
()).
toJsonString
();
}
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"已成功取消收藏"
).
toJsonString
();
}
return
TipMessage
.
ofError
(
"取消收藏失败"
).
toJsonString
();
return
TipMessage
.
Builder
.
condition
(()->
boardService
.
removeFavorite
(
boardId
,
aec
)).
success
(
"已成功取消收藏"
).
error
(
"取消收藏失败"
).
toJsonString
();
}
// 锁定
...
...
@@ -204,11 +195,7 @@ public class BoardController {
//----------------------------------策略检查开始:只有管理员可以锁定
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
boardService
.
lock
(
boardId
,
boardGroupId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"版块成功锁定"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
boardService
.
lock
(
boardId
,
boardGroupId
,
aec
)).
success
(
"版块成功锁定"
).
error
(
"操作失败"
);
}
// 解锁
...
...
@@ -233,11 +220,7 @@ public class BoardController {
//----------------------------------策略检查开始:只有管理员可以解锁
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
boardService
.
releaseLock
(
boardId
,
boardGroupId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"版块解锁成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
boardService
.
releaseLock
(
boardId
,
boardGroupId
,
aec
)).
success
(
"版块解锁成功"
).
error
(
"操作失败"
);
}
// 编辑版块的配置
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/MainController.java
浏览文件 @
0a2a28ad
...
...
@@ -195,11 +195,7 @@ public class MainController {
if
(!
btc
.
isPresent
()){
return
TipMessage
.
ofError
(
"未知的存储目标"
);
}
Optional
<
TopicReplica
>
result
=
topicService
.
plug
(
new
FeedbackPlugTopic
(
aec
,
title
,
content
,
btc
.
get
()));
if
(
result
.
isPresent
())
{
return
TipMessage
.
ofSuccess
(
"感谢您反馈的意见或建议"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
or
(()->
topicService
.
plug
(
new
FeedbackPlugTopic
(
aec
,
title
,
content
,
btc
.
get
())).
isPresent
()).
success
(
"感谢您反馈的意见或建议"
).
error
(
"操作失败"
);
}
private
String
encodeJsonString
(
long
mid
,
String
token
,
int
limit
,
long
timestamp
)
{
Map
<
String
,
String
>
data
=
Map
.
ofEntries
(
Map
.
entry
(
"mid"
,
mid
+
""
),
Map
.
entry
(
"token"
,
token
),
Map
.
entry
(
"limit"
,
limit
+
""
),
Map
.
entry
(
"timestamp"
,
timestamp
+
""
));
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/MessageController.java
浏览文件 @
0a2a28ad
...
...
@@ -222,10 +222,7 @@ public class MessageController {
HttpServletRequest
request
,
Model
model
)
{
List
<
Long
>
messageIdList
=
Commons
.
toLongList
(
idString
);
if
(
inboxService
.
readed
(
mbean
.
getMid
(),
messageIdList
)>
0
)
{
return
TipMessage
.
ofSuccess
(
"标记成功"
);
}
return
TipMessage
.
ofError
(
"标记为阅读操作失败"
);
return
TipMessage
.
Builder
.
or
(()->
inboxService
.
readed
(
mbean
.
getMid
(),
messageIdList
)>
0
).
success
(
"标记成功"
).
error
(
"标记为阅读操作失败"
);
}
//收件人将消息标为删除
...
...
@@ -239,10 +236,7 @@ public class MessageController {
HttpServletRequest
request
,
Model
model
)
{
List
<
Long
>
messageIdList
=
Commons
.
toLongList
(
idString
);
if
(
inboxService
.
remove
(
mbean
.
getMid
(),
messageIdList
)>
0
)
{
return
TipMessage
.
ofSuccess
(
"删除成功"
);
}
return
TipMessage
.
ofError
(
"删除消息操作失败"
);
return
TipMessage
.
Builder
.
or
(()->
inboxService
.
remove
(
mbean
.
getMid
(),
messageIdList
)>
0
).
success
(
"删除成功"
).
error
(
"删除消息操作失败"
);
}
//收件箱中的查看
...
...
@@ -320,18 +314,8 @@ public class MessageController {
MemberSessionBean
mbean
,
HttpServletRequest
request
,
Model
model
)
{
//1=收件箱(member=发件人),0发件箱(member=收件人),2=收件箱(member=-1)
boolean
data
=
false
;
if
(
direction
==
1
)
{
//将两个会员之间(指定发件人发来)的未读消息标为已读
data
=
inboxService
.
readed
(
mbean
.
getMid
(),
memberId
).
isPresent
();
}
if
(
memberId
==
-
1
&&
direction
==
2
)
{
//将会员的未读消息标记为已读
data
=
inboxService
.
readed
(
mbean
.
getMid
())>
0
;
}
if
(
data
)
{
return
TipMessage
.
ofSuccess
(
"标记成功"
);
}
return
TipMessage
.
ofError
(
"标记为阅读操作失败"
);
final
long
othMember
=(
direction
==
1
)?
memberId:
-
1
;
return
TipMessage
.
Builder
.
condition
(()->
inboxService
.
compositeReaded
(
mbean
.
getMid
(),
othMember
,
direction
)).
success
(
"标记成功"
).
error
(
"标记为阅读操作失败"
);
}
//今天的公告
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/PostsController.java
浏览文件 @
0a2a28ad
...
...
@@ -316,11 +316,7 @@ public class PostsController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
postsService
.
remove
(
postsId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题回复成功删除"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
postsService
.
remove
(
postsId
,
aec
)).
success
(
"话题回复成功删除"
).
error
(
"操作失败"
);
}
// 返回引用的回复内容
...
...
@@ -411,10 +407,7 @@ public class PostsController {
reportTypeSymbol
,
reportContent
,
btc
.
get
()));
if
(
result
.
isPresent
())
{
return
TipMessage
.
ofSuccess
(
"回复举报成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
or
(()->
result
.
isPresent
()).
success
(
"回复举报成功"
).
error
(
"操作失败"
);
}
//引用回复时,引用的内容
private
String
quoteContent
(
Optional
<
Posts
>
quotePosts
)
{
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/PostsMoodController.java
浏览文件 @
0a2a28ad
...
...
@@ -69,11 +69,7 @@ public class PostsMoodController {
// 移至StrategyInterceptorAdapter
//----------------------------------
boolean
liked
=
(
moodStatus
==
1
);
long
result
=
postsMoodRecordsService
.
toggleMoodRecord
(
postsId
,
tpObj
.
getId
(),
liked
,
aec
);
if
(
result
>
0
)
{
return
TipMessage
.
ofSuccess
(
"回复点赞成功"
);
}
return
TipMessage
.
ofError
(
"点赞失败"
);
return
TipMessage
.
Builder
.
or
(()->
postsMoodRecordsService
.
toggleMoodRecord
(
postsId
,
tpObj
.
getId
(),
liked
,
aec
)>
0
).
success
(
"回复点赞成功"
).
error
(
"点赞失败"
);
}
//查看点赞的计数
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/TopicController.java
浏览文件 @
0a2a28ad
...
...
@@ -181,11 +181,7 @@ public class TopicController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
topicService
.
editTop
(
topicId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题置顶成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
editTop
(
topicId
,
aec
)).
success
(
"话题置顶成功"
).
error
(
"操作失败"
);
}
// 版主话题加精
...
...
@@ -208,11 +204,7 @@ public class TopicController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
topicService
.
editGoods
(
topicId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题加精成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
editGoods
(
topicId
,
aec
)).
success
(
"话题加精成功"
).
error
(
"操作失败"
);
}
// 版主锁定话题
...
...
@@ -235,11 +227,7 @@ public class TopicController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
topicService
.
lock
(
topicId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题成功锁定"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
lock
(
topicId
,
aec
)).
success
(
"话题成功锁定"
).
error
(
"操作失败"
);
}
// 版主解锁话题
...
...
@@ -262,11 +250,7 @@ public class TopicController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
topicService
.
releaseLock
(
topicId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题解锁成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
releaseLock
(
topicId
,
aec
)).
success
(
"话题解锁成功"
).
error
(
"操作失败"
);
}
// 版主删除话题
...
...
@@ -289,11 +273,7 @@ public class TopicController {
//----------------------------------策略检查开始,限制角色:管理员,版主,大版主都可以
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
=
topicService
.
remove
(
topicId
,
aec
).
orElse
(
false
);
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题成功删除"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
remove
(
topicId
,
aec
)).
success
(
"话题成功删除"
).
error
(
"操作失败"
);
}
// 版主移动话题
...
...
@@ -407,16 +387,7 @@ public class TopicController {
//----------------------------------策略检查开始,不限制角色
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
;
try
{
symbol
=
topicService
.
removeFavorite
(
id
,
aec
).
orElse
(
false
);
}
catch
(
IllegalStateException
e
){
return
TipMessage
.
ofError
(
e
.
getMessage
()).
toJsonString
();
}
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"已成功取消收藏"
).
toJsonString
();
//(extOutputCacheParames);
}
return
TipMessage
.
ofError
(
"收藏取消失败"
).
toJsonString
();
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
removeFavorite
(
id
,
aec
)).
success
(
"已成功取消收藏"
).
error
(
"收藏取消失败"
).
toJsonString
();
}
// 话题点赞
@PostMapping
(
path
=
"/like"
,
produces
=
"application/json;charset=UTF-8"
)
...
...
@@ -446,10 +417,7 @@ public class TopicController {
}
catch
(
IllegalStateException
e
){
return
TipMessage
.
ofError
(
e
.
getMessage
(),
TopicReplica
.
generateConnectString
(
topicId
,
topic
.
getBoardId
(),
topic
.
getVolumesId
())).
toJsonString
();
}
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"话题点赞成功"
).
toJsonString
();
//(extOutputCacheParames);
}
return
TipMessage
.
ofError
(
"点赞失败"
).
toJsonString
();
return
TipMessage
.
Builder
.
or
(()->
symbol
).
success
(
"话题点赞成功"
).
error
(
"点赞失败"
).
toJsonString
();
}
//取消点赞
...
...
@@ -470,16 +438,7 @@ public class TopicController {
//----------------------------------策略检查开始,不限制角色
// 移至StrategyInterceptorAdapter
//----------------------------------策略检查结束
boolean
symbol
;
try
{
symbol
=
topicService
.
removeLike
(
id
,
aec
).
orElse
(
false
);
}
catch
(
IllegalStateException
e
){
return
TipMessage
.
ofError
(
e
.
getMessage
()).
toJsonString
();
}
if
(
symbol
)
{
return
TipMessage
.
ofSuccess
(
"赞已成功取消"
).
toJsonString
();
//(extOutputCacheParames);
}
return
TipMessage
.
ofError
(
"赞取消失败"
).
toJsonString
();
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
removeLike
(
id
,
aec
)).
success
(
"赞已成功取消"
).
error
(
"赞取消失败"
).
toJsonString
();
}
// 浏览话题
@GetMapping
(
path
=
"/browse"
,
produces
=
"application/json;charset=UTF-8"
)
...
...
@@ -497,10 +456,7 @@ public class TopicController {
long
topicId
=
tpObj
.
getId
();
//-------------------------------------------------
ActionEventCulpritor
aec
=
BoardController
.
getInstance
(
mbean
.
getMid
(),
mbean
.
getNickname
(),
request
,
token
);
if
(
topicService
.
browse
(
topicId
,
aec
).
orElse
(
false
))
{
return
TipMessage
.
ofSuccess
(
"话题浏览成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicService
.
browse
(
topicId
,
aec
)).
success
(
"话题浏览成功"
).
error
(
"操作失败"
);
}
// 话题配置
...
...
@@ -885,10 +841,7 @@ public class TopicController {
reportTypeSymbol
,
reportContent
,
btc
.
get
()));
if
(
result
.
isPresent
())
{
return
TipMessage
.
ofSuccess
(
"话题举报成功"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
or
(()->
result
.
isPresent
()).
success
(
"话题举报成功"
).
error
(
"操作失败"
);
}
//
private
Optional
<
MemberProfileBean
>
queryMemberProfileBean
(
long
memberId
){
...
...
thrones/src/main/java/com/apobates/forum/thrones/controller/TopicTagController.java
浏览文件 @
0a2a28ad
...
...
@@ -72,10 +72,7 @@ public class TopicTagController {
// 移至StrategyInterceptorAdapter
//------------------------------
ActionEventCulpritor
aec
=
BoardController
.
getInstance
(
mbean
.
getMid
(),
mbean
.
getNickname
(),
request
,
token
);
if
(
topicTagService
.
deleteForTopic
(
tpObj
.
getId
(),
tagId
,
aec
).
isPresent
())
{
return
TipMessage
.
ofSuccess
(
"标签成功删除"
);
}
return
TipMessage
.
ofError
(
"操作失败"
);
return
TipMessage
.
Builder
.
condition
(()->
topicTagService
.
deleteForTopic
(
tpObj
.
getId
(),
tagId
,
aec
)).
success
(
"标签成功删除"
).
error
(
"操作失败"
);
}
//添加(并统计词频)(版主和管理员)
...
...
utils/src/main/java/com/apobates/forum/utils/DateTimeUtils.java
浏览文件 @
0a2a28ad
...
...
@@ -443,7 +443,7 @@ public final class DateTimeUtils {
if
(
null
==
dateTime
)
{
return
false
;
}
return
dateTime
.
isBefore
(
LocalDateTime
.
now
()
);
return
LocalDateTime
.
now
().
isBefore
(
dateTime
);
}
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录