Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
operate-customer-service
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
沈振路
operate-customer-service
Commits
2c7e25f2
提交
2c7e25f2
authored
11月 01, 2022
作者:
沈振路
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
7582910f
7e4cf8cc
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
555 行增加
和
65 行删除
+555
-65
SchedulingTask.java
...java/com/yaoyaozw/customer/scheduling/SchedulingTask.java
+3
-1
AccountOrderServiceImpl.java
...oyaozw/customer/service/impl/AccountOrderServiceImpl.java
+16
-8
CustomerDelayPublishServiceImpl.java
...ustomer/service/impl/CustomerDelayPublishServiceImpl.java
+1
-0
CustomerGraphicsServiceImpl.java
...zw/customer/service/impl/CustomerGraphicsServiceImpl.java
+31
-29
WeChatServiceImpl.java
...zw/customer/service/wechat/service/WeChatServiceImpl.java
+35
-27
YYZWDateUtil.java
src/main/java/com/yaoyaozw/customer/utils/YYZWDateUtil.java
+469
-0
没有找到文件。
src/main/java/com/yaoyaozw/customer/scheduling/SchedulingTask.java
浏览文件 @
2c7e25f2
...
...
@@ -63,8 +63,9 @@ public class SchedulingTask {
}
/**
* 更新付费用户近一月平均充值(每天一次)
* 更新付费用户近一月平均充值(每天一次
:4点10分
)
*/
@Scheduled
(
cron
=
"0 10 4 * * *"
)
public
void
retrieveMonthOrder
(){
Calendar
calendar
=
Calendar
.
getInstance
();
...
...
@@ -85,6 +86,7 @@ public class SchedulingTask {
/**
* 每10min扫描一次正常客服
*/
@Scheduled
(
cron
=
"0 0/10 * * * *"
)
public
void
publishCustomerMessage
(){
Calendar
calendar
=
Calendar
.
getInstance
();
...
...
src/main/java/com/yaoyaozw/customer/service/impl/AccountOrderServiceImpl.java
浏览文件 @
2c7e25f2
package
com
.
yaoyaozw
.
customer
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.yaoyaozw.customer.dto.integration.IntegrationRequestDTO
;
import
com.yaoyaozw.customer.entity.RegisterUserEntity
;
...
...
@@ -43,6 +44,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
Map
<
String
,
List
<
AccountOrder
>>
userOrderMap
=
runtimeOrders
.
stream
().
collect
(
Collectors
.
groupingBy
(
AccountOrder:
:
getOpenId
));
Calendar
instance
=
Calendar
.
getInstance
();
if
(!
openIdSet
.
isEmpty
()){
//获取注册用户信息
List
<
RegisterUserEntity
>
userList
=
registerUserEntityService
.
list
(
new
QueryWrapper
<
RegisterUserEntity
>().
in
(
RegisterUserEntity
.
COL_OPEN_ID
,
openIdSet
));
...
...
@@ -63,8 +65,11 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
Double
sum
=
registerUser
.
getPayAmount
()!=
null
?
registerUser
.
getPayAmount
():
0
;
for
(
AccountOrder
accountOrder
:
accountOrders
)
{
//下单时间推5min
instance
.
setTime
(
accountOrder
.
getFinishTime
());
instance
.
add
(
Calendar
.
MINUTE
,
5
);
//最近活跃时间
lastFinishTime
=
(
lastFinishTime
!=
null
&&
lastFinishTime
.
compareTo
(
accountOrder
.
getFinishTime
())
>
0
)
?
lastFinishTime
:
accountOrder
.
getFinish
Time
();
lastFinishTime
=
(
lastFinishTime
!=
null
&&
lastFinishTime
.
compareTo
(
accountOrder
.
getFinishTime
())
>
0
)
?
lastFinishTime
:
instance
.
get
Time
();
//最大类型
type
=
Math
.
max
(
accountOrder
.
getType
()
+
1
,
type
);
sum
+=
accountOrder
.
getProfit
();
...
...
@@ -96,18 +101,21 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
public
void
calculateAvgMonth
(
IntegrationRequestDTO
integrationRequestDTO
)
{
//获取近一月每个用户的平均充值
List
<
UserAvgAmountVO
>
userAvgAmountVos
=
baseMapper
.
findMonthDailyAccountOrder
();
Map
<
String
,
Double
>
userAvgAmountMap
=
userAvgAmountVos
.
stream
().
collect
(
Collectors
.
toMap
(
UserAvgAmountVO:
:
getOpenId
,
UserAvgAmountVO:
:
getAvgAmount
,
(
v1
,
v2
)
->
v1
));
//获取付费用户信息
List
<
RegisterUserEntity
>
userList
=
registerUserEntityService
.
list
(
new
QueryWrapper
<
RegisterUserEntity
>().
gt
(
RegisterUserEntity
.
COL_PAY_TYPE
,
0
));
if
(!
userAvgAmountVos
.
isEmpty
()){
Map
<
String
,
Double
>
userAvgAmountMap
=
userAvgAmountVos
.
stream
().
collect
(
Collectors
.
toMap
(
UserAvgAmountVO:
:
getOpenId
,
UserAvgAmountVO:
:
getAvgAmount
,
(
v1
,
v2
)
->
v1
));
//获取付费用户信息
List
<
RegisterUserEntity
>
userList
=
registerUserEntityService
.
list
(
new
QueryWrapper
<
RegisterUserEntity
>().
gt
(
RegisterUserEntity
.
COL_PAY_TYPE
,
0
));
if
(
userList
!=
null
&&!
userList
.
isEmpty
()){
if
(
userList
!=
null
&&!
userList
.
isEmpty
()){
for
(
RegisterUserEntity
registerUserEntity
:
userList
)
{
for
(
RegisterUserEntity
registerUserEntity
:
userList
)
{
registerUserEntity
.
setAvgMonth
(
userAvgAmountMap
.
get
(
registerUserEntity
.
getOpenId
()));
registerUserEntity
.
setAvgMonth
(
userAvgAmountMap
.
get
(
registerUserEntity
.
getOpenId
()));
}
}
registerUserEntityService
.
updateBatchById
(
userList
);
}
registerUserEntityService
.
updateBatchById
(
userList
);
}
...
...
src/main/java/com/yaoyaozw/customer/service/impl/CustomerDelayPublishServiceImpl.java
浏览文件 @
2c7e25f2
...
...
@@ -6,6 +6,7 @@ import com.yaoyaozw.customer.entity.AuthorizerToken;
import
com.yaoyaozw.customer.service.AuthorizerTokenService
;
import
com.yaoyaozw.customer.service.CustomerGraphicsDelayService
;
import
com.yaoyaozw.customer.service.wechat.service.WeChatService
;
import
com.yaoyaozw.customer.utils.YYZWDateUtil
;
import
com.yaoyaozw.customer.vo.customer.CustomerDelayItemVO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
src/main/java/com/yaoyaozw/customer/service/impl/CustomerGraphicsServiceImpl.java
浏览文件 @
2c7e25f2
...
...
@@ -221,39 +221,41 @@ public class CustomerGraphicsServiceImpl extends ServiceImpl<CustomerGraphicsMap
List
<
CustomerGraphics
>
customerGraphicsList
=
list
(
new
QueryWrapper
<
CustomerGraphics
>().
eq
(
CustomerGraphics
.
COL_POST_TIME
,
requestDate
).
eq
(
CustomerGraphics
.
COL_SEND_STATUS
,
9
));
for
(
CustomerGraphics
customerGraphics
:
customerGraphicsList
)
{
//人群包id
Long
packId
=
customerGraphics
.
getPackId
();
//根据人群包找人,并按appId分组
List
<
CrowdPackageUserVO
>
userList
=
registerUserEntityService
.
getCurrentInPackUserList
(
packId
,
false
);
//去重
Map
<
String
,
List
<
CrowdPackageUserVO
>>
appidUserMap
=
userList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrowdPackageUserVO:
:
getAppId
,
Collectors
.
collectingAndThen
(
toCollection
(()
->
new
TreeSet
<>(
Comparator
.
comparing
(
CrowdPackageUserVO:
:
getOpenId
))),
ArrayList:
:
new
)));
//根据客服id找不同公众号的链接,并按appId分组
List
<
ReferralEntityVo
>
referralList
=
referralEntityService
.
findReferralByCustomerGraphicsId
(
customerGraphics
.
getId
());
Map
<
String
,
List
<
ReferralEntityVo
>>
referralMap
=
referralList
.
stream
().
collect
(
Collectors
.
groupingBy
(
ReferralEntityVo:
:
getAppid
));
//循环该客服下的所有素材
for
(
Map
.
Entry
<
String
,
List
<
ReferralEntityVo
>>
referralEntry
:
referralMap
.
entrySet
())
{
String
appid
=
referralEntry
.
getKey
();
//获取token
AuthorizerToken
authorizerToken
=
authorizerTokenService
.
findTokenByAppid
(
appid
);
if
(
authorizerToken
!=
null
&&
authorizerToken
.
getAuthorizerAccessToken
()!=
null
){
//获取该号的链接实体
List
<
ReferralEntityVo
>
referralEntityVo
=
referralMap
.
get
(
appid
);
//获取该号的openid
List
<
CrowdPackageUserVO
>
packageUserVo
=
appidUserMap
.
get
(
appid
);
if
(
referralEntityVo
!=
null
&&!
referralEntityVo
.
isEmpty
()){
weChatService
.
sendCustomerMessage
(
appid
,
authorizerToken
,
customerGraphics
,
packageUserVo
,
referralEntityVo
);
if
(!
customerGraphicsList
.
isEmpty
()){
for
(
CustomerGraphics
customerGraphics
:
customerGraphicsList
)
{
//人群包id
Long
packId
=
customerGraphics
.
getPackId
();
//根据人群包找人,并按appId分组
List
<
CrowdPackageUserVO
>
userList
=
registerUserEntityService
.
getCurrentInPackUserList
(
packId
,
false
);
//去重
Map
<
String
,
List
<
CrowdPackageUserVO
>>
appidUserMap
=
userList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrowdPackageUserVO:
:
getAppId
,
Collectors
.
collectingAndThen
(
toCollection
(()
->
new
TreeSet
<>(
Comparator
.
comparing
(
CrowdPackageUserVO:
:
getOpenId
))),
ArrayList:
:
new
)));
//根据客服id找不同公众号的链接,并按appId分组
List
<
ReferralEntityVo
>
referralList
=
referralEntityService
.
findReferralByCustomerGraphicsId
(
customerGraphics
.
getId
());
Map
<
String
,
List
<
ReferralEntityVo
>>
referralMap
=
referralList
.
stream
().
collect
(
Collectors
.
groupingBy
(
ReferralEntityVo:
:
getAppid
));
//循环该客服下的所有素材
for
(
Map
.
Entry
<
String
,
List
<
ReferralEntityVo
>>
referralEntry
:
referralMap
.
entrySet
())
{
String
appid
=
referralEntry
.
getKey
();
//获取token
AuthorizerToken
authorizerToken
=
authorizerTokenService
.
findTokenByAppid
(
appid
);
if
(
authorizerToken
!=
null
&&
authorizerToken
.
getAuthorizerAccessToken
()!=
null
){
//获取该号的链接实体
List
<
ReferralEntityVo
>
referralEntityVo
=
referralMap
.
get
(
appid
);
//获取该号的openid
List
<
CrowdPackageUserVO
>
packageUserVo
=
appidUserMap
.
get
(
appid
);
if
(
referralEntityVo
!=
null
&&!
referralEntityVo
.
isEmpty
()){
weChatService
.
sendCustomerMessage
(
appid
,
authorizerToken
,
customerGraphics
,
packageUserVo
,
referralEntityVo
);
}
}
}
}
updateBatchById
(
customerGraphicsList
);
}
updateBatchById
(
customerGraphicsList
);
}
private
BaseResult
checkExtendBook
(
String
storeType
,
CrowdPackageConditionMatch
storeConditionMatch
)
{
...
...
src/main/java/com/yaoyaozw/customer/service/wechat/service/WeChatServiceImpl.java
浏览文件 @
2c7e25f2
...
...
@@ -41,6 +41,8 @@ public class WeChatServiceImpl implements WeChatService{
private
static
final
Integer
EXPIRED_CODE
=
40001
;
private
static
final
Integer
FORBID_Time
=
6
;
private
static
final
ThreadPoolExecutor
EXECUTOR
=
new
ThreadPoolExecutor
(
20
,
100
,
60L
,
TimeUnit
.
SECONDS
,
new
LinkedBlockingQueue
<>(
2
),
new
ThreadPoolExecutor
.
CallerRunsPolicy
());
private
final
static
Object
CUSTOMER_LOCK
=
new
Object
();
...
...
@@ -57,42 +59,48 @@ public class WeChatServiceImpl implements WeChatService{
public
Future
<
CustomerDelayPublish
>
sendCustomerDelayMessage
(
AuthorizerToken
authorizerToken
,
CustomerDelayPublish
user
,
Map
<
Integer
,
List
<
CustomerDelayItemVO
>>
delaySortMap
,
Set
<
CustomerDelayItemVO
>
needUpdateVoList
)
{
//token
UriComponentsBuilder
uriComponentsBuilder
=
UriComponentsBuilder
.
fromHttpUrl
(
customerPath
).
queryParam
(
"access_token"
,
authorizerToken
.
getAuthorizerAccessToken
());
//找到延时序列
List
<
CustomerDelayItemVO
>
sendCustomerDelays
=
delaySortMap
.
get
(
user
.
getCustomerSort
());
//获取当前小时数
Calendar
instance
=
Calendar
.
getInstance
();
int
i
=
instance
.
get
(
Calendar
.
HOUR_OF_DAY
);
//早上0-6点不发
if
(
i
<
FORBID_Time
){
//token
UriComponentsBuilder
uriComponentsBuilder
=
UriComponentsBuilder
.
fromHttpUrl
(
customerPath
).
queryParam
(
"access_token"
,
authorizerToken
.
getAuthorizerAccessToken
());
//找到延时序列
List
<
CustomerDelayItemVO
>
sendCustomerDelays
=
delaySortMap
.
get
(
user
.
getCustomerSort
());
if
(
sendCustomerDelays
!=
null
){
//找付费类型
List
<
CustomerDelayItemVO
>
collect
=
sendCustomerDelays
.
stream
().
filter
(
a
->
a
.
getIsPay
().
equals
(-
1
)||
user
.
getPayType
().
equals
(
a
.
getIsPay
())
).
collect
(
Collectors
.
toList
());
if
(
sendCustomerDelays
!=
null
){
//找付费类型
List
<
CustomerDelayItemVO
>
collect
=
sendCustomerDelays
.
stream
().
filter
(
a
->
a
.
getIsPay
().
equals
(-
1
)||
user
.
getPayType
().
equals
(
a
.
getIsPay
())
).
collect
(
Collectors
.
toList
());
if
(!
collect
.
isEmpty
()){
if
(!
collect
.
isEmpty
()){
CustomerDelayItemVO
sendCustomerDelay
=
collect
.
get
(
0
);
CustomerDelayItemVO
sendCustomerDelay
=
collect
.
get
(
0
);
needUpdateVoList
.
add
(
sendCustomerDelay
);
//构建请求参数
WeChatCustomerRequestEntity
customerRequest
=
buildCustomerRequest
(
sendCustomerDelay
);
needUpdateVoList
.
add
(
sendCustomerDelay
);
//构建请求参数
WeChatCustomerRequestEntity
customerRequest
=
buildCustomerRequest
(
sendCustomerDelay
);
if
(
customerRequest
!=
null
){
if
(
customerRequest
!=
null
){
customerRequest
.
setTouser
(
user
.
getOpenId
());
//System.err.println(user.getOpenId());
try
{
WeChatResponseEntity
response
=(
WeChatResponseEntity
)
weChatRestService
.
httpPostRequest
(
uriComponentsBuilder
,
customerRequest
,
WeChatResponseEntity
.
class
);
//System.err.println(response);
if
(
SUCCESS_CODE
.
equals
(
response
.
getErrcode
())){
//发送成功计数
sendCustomerDelay
.
updateSendNum
();
customerRequest
.
setTouser
(
user
.
getOpenId
());
//System.err.println(user.getOpenId());
try
{
WeChatResponseEntity
response
=(
WeChatResponseEntity
)
weChatRestService
.
httpPostRequest
(
uriComponentsBuilder
,
customerRequest
,
WeChatResponseEntity
.
class
);
//System.err.println(response);
if
(
SUCCESS_CODE
.
equals
(
response
.
getErrcode
())){
//发送成功计数
sendCustomerDelay
.
updateSendNum
();
}
else
if
(
EXPIRED_CODE
.
equals
(
response
.
getErrcode
())
){
//token过期重新取一下
AuthorizerToken
updateToken
=
authorizerTokenService
.
findTokenByAppid
(
authorizerToken
.
getAuthorizerAppid
());
}
else
if
(
EXPIRED_CODE
.
equals
(
response
.
getErrcode
())
){
//token过期重新取一下
AuthorizerToken
updateToken
=
authorizerTokenService
.
findTokenByAppid
(
authorizerToken
.
getAuthorizerAppid
());
return
sendCustomerDelayMessage
(
updateToken
,
user
,
delaySortMap
,
needUpdateVoList
);
return
sendCustomerDelayMessage
(
updateToken
,
user
,
delaySortMap
,
needUpdateVoList
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
...
...
src/main/java/com/yaoyaozw/customer/utils/YYZWDateUtil.java
0 → 100644
浏览文件 @
2c7e25f2
package
com
.
yaoyaozw
.
customer
.
utils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.time.DateUtils
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.text.DateFormat
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.ZoneOffset
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.Random
;
import
java.util.TimeZone
;
/**
* @author 10626
*/
public
class
YYZWDateUtil
{
private
static
final
Log
Logger
=
LogFactory
.
getLog
(
YYZWDateUtil
.
class
);
/**
* 指定每天晚上12点过期
*
* @param currentTime
* @return
*/
public
static
Long
cacheTime
(
Long
currentTime
)
{
Long
oneDay
=
86400000L
;
// 60*1000L - 5*60*1000
Long
randomTime
=
Long
.
valueOf
((
60000
+
Math
.
random
()
*
(
300000
-
60000
+
1
))
+
""
);
return
currentTime
+
oneDay
+
randomTime
;
}
/**
* 比结束时间多5-10分钟时间
*
* @param date
* @return
*/
public
static
long
getTime
(
Date
date
)
{
long
time
=
date
.
getTime
();
long
l
=
System
.
currentTimeMillis
();
// 300000 -600000
Random
r
=
new
Random
();
int
v
=
r
.
nextInt
(
300000
)
+
300000
;
return
time
-
l
+
v
;
}
public
static
String
getDate
(
String
dateStr
,
int
day
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Calendar
c
=
Calendar
.
getInstance
();
Date
date
;
try
{
date
=
simpleDateFormat
.
parse
(
dateStr
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
null
;
}
c
.
setTime
(
date
);
int
day1
=
c
.
get
(
Calendar
.
DATE
);
c
.
set
(
Calendar
.
DATE
,
(
day1
+
day
)
-
1
);
return
simpleDateFormat
.
format
(
c
.
getTime
());
}
public
static
String
getForwardDate
(
String
dateStr
,
int
day
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Calendar
c
=
Calendar
.
getInstance
();
Date
date
;
try
{
date
=
simpleDateFormat
.
parse
(
dateStr
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
null
;
}
c
.
setTime
(
date
);
int
day1
=
c
.
get
(
Calendar
.
DATE
);
c
.
set
(
Calendar
.
DATE
,
(
day1
-
day
)
+
1
);
return
simpleDateFormat
.
format
(
c
.
getTime
());
}
public
static
final
String
DEFAULT_DATE_PATTERN
=
"yyyy-MM-dd HH:mm:ss"
;
public
static
final
String
UTC_DATE_PATTERN
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
;
public
static
final
String
DATE_PATTERN_1
=
"yyyy-MM-dd"
;
public
static
final
String
DATE_PATTERN_2
=
"yyyyMMddHHmm"
;
public
static
Date
formatDateStr
(
String
date
){
if
(
StringUtils
.
isEmpty
(
date
)){
return
null
;
}
try
{
return
DateUtils
.
parseDate
(
date
,
DEFAULT_DATE_PATTERN
);
}
catch
(
ParseException
e
)
{
Logger
.
error
(
"日期转换错误, 错误日期为"
+
date
);
}
return
null
;
}
public
static
Date
formatDateStr
(
String
date
,
String
format
){
if
(
StringUtils
.
isEmpty
(
date
)){
return
null
;
}
try
{
return
DateUtils
.
parseDate
(
date
,
format
);
}
catch
(
ParseException
e
)
{
Logger
.
error
(
"日期转换错误, 错误日期为"
+
date
);
}
return
null
;
}
/**
* 转换为"yyyy-MM-dd"格式的DATE
* @param date
* @return
*/
public
static
Date
transformDate
(
Date
date
){
DateFormat
df
=
new
SimpleDateFormat
(
DATE_PATTERN_1
);
try
{
return
DateUtils
.
parseDate
(
df
.
format
(
date
),
DATE_PATTERN_1
);
}
catch
(
ParseException
e
)
{
Logger
.
error
(
"日期转换错误, 错误日期为"
+
date
);
}
return
null
;
}
public
static
String
formatDate
(
Date
date
){
DateFormat
df
=
new
SimpleDateFormat
(
DEFAULT_DATE_PATTERN
);
return
df
.
format
(
date
);
}
public
static
String
formatDate
(
Date
date
,
String
pattern
){
DateFormat
df
=
new
SimpleDateFormat
(
pattern
);
return
df
.
format
(
date
);
}
public
static
Date
getDayStartTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
calendar
.
getTime
();
}
public
static
Date
getDayEndTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
return
calendar
.
getTime
();
}
public
static
Date
getDayStartTime
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
calendar
.
getTime
();
}
public
static
Date
getDayEndTime
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
return
calendar
.
getTime
();
}
public
static
boolean
isToday
(
Date
date
){
return
DateUtils
.
isSameDay
(
getDayStartTime
(),
date
);
}
public
static
BigDecimal
getDurationInHour
(
Date
startDate
,
Date
currentDate
){
if
(
startDate
==
null
){
startDate
=
getDayStartTime
();
}
long
diff
=
currentDate
.
getTime
()
-
startDate
.
getTime
();
BigDecimal
differentHours
=
BigDecimal
.
valueOf
(
diff
);
return
differentHours
.
divide
(
BigDecimal
.
valueOf
(
3600000
),
2
,
RoundingMode
.
HALF_UP
);
}
public
static
String
getCurrentDateWithFormat
(){
Calendar
calendar
=
Calendar
.
getInstance
();
DateFormat
df
=
new
SimpleDateFormat
(
DATE_PATTERN_1
);
return
df
.
format
(
calendar
.
getTime
());
}
public
static
Date
getCurrentDate
(){
Calendar
calendar
=
Calendar
.
getInstance
();
return
calendar
.
getTime
();
}
public
static
String
getLastDayWithFormat
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
DateFormat
df
=
new
SimpleDateFormat
(
DATE_PATTERN_1
);
return
df
.
format
(
calendar
.
getTime
());
}
public
static
Date
getLastStartDay
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
return
calendar
.
getTime
();
}
public
static
Date
getLastEndDay
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
return
calendar
.
getTime
();
}
public
static
Date
getLastStartDay
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
return
calendar
.
getTime
();
}
public
static
Date
getLastEndDay
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
return
calendar
.
getTime
();
}
/**
* 返回今天0点的UTC时间格式
* 2021-05-24T00:00:00UTC
* @return
*/
public
static
String
getUTCDayStartTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
8
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
DateFormat
df
=
new
SimpleDateFormat
(
UTC_DATE_PATTERN
);
df
.
setTimeZone
(
TimeZone
.
getTimeZone
(
ZoneOffset
.
UTC
));
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 返回今天23点59分59秒的UTC时间格式
* 2021-05-24T23:59:59UTC
* @return
*/
public
static
String
getUTCDayEndTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
19
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
DateFormat
df
=
new
SimpleDateFormat
(
UTC_DATE_PATTERN
);
df
.
setTimeZone
(
TimeZone
.
getTimeZone
(
ZoneOffset
.
UTC
));
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 返回今天0点的UTC时间格式
* 2021-05-24T00:00:00UTC
* @return
*/
public
static
String
getUTCLastDayStartTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
8
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
DateFormat
df
=
new
SimpleDateFormat
(
UTC_DATE_PATTERN
);
df
.
setTimeZone
(
TimeZone
.
getTimeZone
(
ZoneOffset
.
UTC
));
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 返回今天23点59分59秒的UTC时间格式
* 2021-05-24T23:59:59UTC
* @return
*/
public
static
String
getUTCLastDayEndTime
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
19
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
DateFormat
df
=
new
SimpleDateFormat
(
UTC_DATE_PATTERN
);
df
.
setTimeZone
(
TimeZone
.
getTimeZone
(
ZoneOffset
.
UTC
));
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 返回昨天0点的时间戳
* @return
*/
public
static
String
getLastDayStartTimeStamp
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
String
stamp
=
calendar
.
getTimeInMillis
()/
1000
+
""
;
return
stamp
;
}
/**
* 返回昨天23:59:59点的时间戳
* @return
*/
public
static
String
getLastDayEndTimeStamp
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
String
stamp
=
calendar
.
getTimeInMillis
()/
1000
+
""
;
return
stamp
;
}
/**
* 返回昨天0点,格式 yyyyMMddHHmm
*/
public
static
String
getLastDayStart_WY
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
DateFormat
df
=
new
SimpleDateFormat
(
DATE_PATTERN_2
);
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 返回昨天23:59:59,格式 yyyyMMddHHmm
*/
public
static
String
getLastDayEnd_WY
(){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
AM_PM
,
1
);
calendar
.
set
(
Calendar
.
HOUR
,
11
);
calendar
.
set
(
Calendar
.
MINUTE
,
59
);
calendar
.
set
(
Calendar
.
SECOND
,
59
);
calendar
.
add
(
Calendar
.
DATE
,
-
1
);
DateFormat
df
=
new
SimpleDateFormat
(
DATE_PATTERN_2
);
String
date
=
df
.
format
(
calendar
.
getTime
());
return
date
;
}
/**
* 获取当前时间到下一分钟的时间差
* @return different - 时间差
*/
public
static
long
getDateDiffBetweenCurrentWithNextMin
(){
Calendar
calendar
=
Calendar
.
getInstance
();
Date
currentDate
=
calendar
.
getTime
();
calendar
.
add
(
Calendar
.
MINUTE
,
1
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
Date
nextMin
=
calendar
.
getTime
();
long
different
=
nextMin
.
getTime
()
-
currentDate
.
getTime
();
return
different
;
}
/**
* 计算两个日期相差天数
* @return 相差天数
*/
public
static
int
getDaysBetweenTwoDates
(
Date
start
,
Date
end
){
int
betweenDays
=
(
int
)((
end
.
getTime
()
-
start
.
getTime
())
/
(
1000L
*
3600L
*
24
));
return
betweenDays
;
}
/**
* 日期加N天
* @return 日期+N天
*/
public
static
Date
addNumberDays
(
Date
date
,
int
i
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
add
(
Calendar
.
DATE
,
i
);
return
calendar
.
getTime
();
}
/**
* 日期减N天
*/
public
static
Date
subtractNumberDays
(
Date
date
,
int
i
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
add
(
Calendar
.
DATE
,
-
i
);
return
calendar
.
getTime
();
}
public
static
boolean
isSameDate
(
Date
date1
,
Date
date2
){
boolean
result
=
Boolean
.
FALSE
;
if
(
date1
!=
null
&&
date2
!=
null
){
Calendar
cal1
=
Calendar
.
getInstance
();
Calendar
cal2
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date1
);
cal2
.
setTime
(
date2
);
result
=
cal1
.
get
(
Calendar
.
YEAR
)
==
cal2
.
get
(
Calendar
.
YEAR
)
&&
cal1
.
get
(
Calendar
.
MONTH
)
==
cal2
.
get
(
Calendar
.
MONTH
)
&&
cal1
.
get
(
Calendar
.
DAY_OF_MONTH
)
==
cal2
.
get
(
Calendar
.
DAY_OF_MONTH
);
}
return
result
;
}
public
static
Date
getLastHourTime
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
add
(
Calendar
.
HOUR
,-
1
);
return
calendar
.
getTime
();
}
/**
* 获取当月
*/
public
static
Date
getMonth
(
Date
date
){
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
calendar
.
set
(
Calendar
.
AM_PM
,
0
);
calendar
.
set
(
Calendar
.
HOUR
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
return
calendar
.
getTime
();
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论