Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
manager
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
reyun
manager
Commits
5dc5cf7c
Commit
5dc5cf7c
authored
Nov 29, 2020
by
xioa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
月流量报表
parent
cdd316b0
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
264 additions
and
57 deletions
+264
-57
TkioFlow.java
src/main/java/common/model/TkioFlow.java
+9
-0
TkioFlowHistory.java
src/main/java/common/model/TkioFlowHistory.java
+42
-0
TkioFlowHistoryRepository.java
...ain/java/common/repository/TkioFlowHistoryRepository.java
+10
-2
TrackingFlowTask.java
src/main/java/track/task/TrackingFlowTask.java
+203
-55
No files found.
src/main/java/common/model/TkioFlow.java
View file @
5dc5cf7c
...
...
@@ -19,6 +19,7 @@ public class TkioFlow {
private
String
contractCode
;
private
Long
flow
;
private
Long
costFlow
;
private
Integer
contractCount
;
public
String
getDs
()
{
return
ds
;
...
...
@@ -67,4 +68,12 @@ public class TkioFlow {
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
Integer
getContractCount
()
{
return
contractCount
;
}
public
void
setContractCount
(
Integer
contractCount
)
{
this
.
contractCount
=
contractCount
;
}
}
src/main/java/common/model/TkioFlowHistory.java
View file @
5dc5cf7c
...
...
@@ -18,6 +18,24 @@ public class TkioFlowHistory {
private
String
contractCode
;
private
Long
flow
;
private
Long
costFlow
;
private
String
yMonth
;
private
String
yMonthNext
;
private
String
nextCode
;
public
TkioFlowHistory
()
{
}
public
TkioFlowHistory
(
TkioFlow
flow
)
{
this
.
ds
=
flow
.
getDs
();
this
.
email
=
flow
.
getEmail
();
this
.
contractCode
=
flow
.
getContractCode
();
this
.
flow
=
flow
.
getFlow
();
this
.
costFlow
=
flow
.
getCostFlow
();
}
public
String
getDs
()
{
return
ds
;
...
...
@@ -66,4 +84,28 @@ public class TkioFlowHistory {
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getyMonth
()
{
return
yMonth
;
}
public
void
setyMonth
(
String
yMonth
)
{
this
.
yMonth
=
yMonth
;
}
public
String
getyMonthNext
()
{
return
yMonthNext
;
}
public
void
setyMonthNext
(
String
yMonthNext
)
{
this
.
yMonthNext
=
yMonthNext
;
}
public
String
getNextCode
()
{
return
nextCode
;
}
public
void
setNextCode
(
String
nextCode
)
{
this
.
nextCode
=
nextCode
;
}
}
src/main/java/common/repository/TkioFlowHistoryRepository.java
View file @
5dc5cf7c
...
...
@@ -10,8 +10,16 @@ import java.math.BigDecimal;
public
interface
TkioFlowHistoryRepository
extends
JpaRepository
<
TkioFlowHistory
,
Long
>
{
@Query
(
value
=
"select contract_code from tkio_flow_history where email = ?1 order by ds limit 1"
,
nativeQuery
=
true
)
String
findLastRecodeContract
(
String
email
);
@Query
(
value
=
"select sum(flow) from tkio_flow_history where email = ?1 and contract_code = ?2"
,
nativeQuery
=
true
)
BigDecimal
sumAllFowByEmailAndCode
(
String
email
,
String
contractCode
);
@Transactional
@Modifying
@Query
(
value
=
"
insert into tkio_flow_history select * from tkio_flow where email = ?1 and cost_flow > 0
"
,
nativeQuery
=
true
)
BigDecimal
backDatas
ByEmail
(
String
email
);
@Query
(
value
=
"
delete from tkio_flow where email = ?1
"
,
nativeQuery
=
true
)
void
delete
ByEmail
(
String
email
);
}
src/main/java/track/task/TrackingFlowTask.java
View file @
5dc5cf7c
...
...
@@ -3,7 +3,9 @@ package track.task;
import
common.model.CalculationFlow
;
import
common.model.Contract
;
import
common.model.TkioFlow
;
import
common.model.TkioFlowHistory
;
import
common.repository.*
;
import
org.joda.time.DateTime
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -19,7 +21,10 @@ import java.math.BigDecimal;
import
java.math.BigInteger
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @author liyin
...
...
@@ -47,19 +52,17 @@ public class TrackingFlowTask {
@Autowired
private
TkioFlowHistoryRepository
tkioFlowHistoryRepository
;
public
void
syncFlow
(){
public
void
syncFlow
()
{
List
<
CalculationFlow
>
calculationFlows
=
calculationFlowRepository
.
findByStatus
(
0
);
for
(
CalculationFlow
calculationFlow
:
calculationFlows
)
{
List
<
TkioFlow
>
tkioFlowList
=
new
ArrayList
<>();
calculationFlow
.
setStatus
(
1
);
calculationFlowRepository
.
save
(
calculationFlow
);
//记录历史数据
tkioFlowHistoryRepository
.
backDatasByEmail
(
calculationFlow
.
getEmail
());
tkioFlowRepository
.
deleteByEmail
(
calculationFlow
.
getEmail
());
tkioFlowHistoryRepository
.
deleteByEmail
(
calculationFlow
.
getEmail
());
String
email
=
calculationFlow
.
getEmail
();
//查询用户下所有appkey
try
{
try
{
Account
account
=
accountRepository
.
findByEmail
(
email
);
List
<
Account
>
accountList
=
accountRepository
.
findByRootParent
(
account
.
getRootParent
());
List
<
Long
>
idList
=
new
ArrayList
<>();
...
...
@@ -96,11 +99,17 @@ public class TrackingFlowTask {
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contracts
.
get
(
0
));
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
1
);
tkioFlowRepository
.
save
(
tkioFlow
);
}
}
else
{
getFlowOnMonths
(
email
,
yesterday
,
clickNum
,
contracts
);
//月流量报表逻辑
//多个合同
//看昨日被哪几个合同包含了
//昨日有几个合同开始生效
List
<
Contract
>
correlationContract
=
new
ArrayList
<>();
for
(
Contract
contract
:
contracts
)
{
/*if (ContractStatusEnum.CANCEL.getKey().equals(contract.getStatus()) || ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) {
...
...
@@ -116,7 +125,7 @@ public class TrackingFlowTask {
correlationContract
.
add
(
contract
);
}
}
//多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
//多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
(昨日多个合同生效)
if
(
correlationContract
.
size
()
>
1
)
{
//冒泡
//第一优先级:合同开始日期,第二优先级,合同编号大小
...
...
@@ -127,10 +136,13 @@ public class TrackingFlowTask {
for
(
int
i
=
0
;
i
<
contractsArray
.
length
;
i
++)
{
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contractsArray
[
i
]);
if
(
tkioFlow
!=
null
&&
i
<
contractsArray
.
length
-
1
&&
tkioFlow
.
getCostFlow
()
!=
null
&&
tkioFlow
.
getCostFlow
()
>
0L
)
{
//处理成本流量,如果超出了,依次算在下一个合同上
tkioFlow
.
setContractCount
(
contracts
.
size
());
if
(
tkioFlow
!=
null
&&
i
<
contractsArray
.
length
-
1
&&
tkioFlow
.
getCostFlow
()
!=
null
&&
tkioFlow
.
getCostFlow
()
>
0L
)
{
//处理成本流量,如果超出了,依次算在下一个合同上
//1、超出的流量 记为下一合同的当日流量 2、该合同自身当日流量为 剩余流量 或者为0
clickNum
=
BigInteger
.
valueOf
(
tkioFlow
.
getCostFlow
());
tkioFlow
.
setCostFlow
(
null
);
if
(
tkioFlow
.
getFlow
()>
0
)
{
if
(
tkioFlow
.
getFlow
()
>
0
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlowRepository
.
save
(
tkioFlow
);
}
...
...
@@ -163,6 +175,7 @@ public class TrackingFlowTask {
}
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contractsArray
[
j
]);
tkioFlow
.
setContractCount
(
contracts
.
size
());
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlowRepository
.
save
(
tkioFlow
);
...
...
@@ -172,6 +185,7 @@ public class TrackingFlowTask {
}
}
else
{
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
correlationContract
.
get
(
0
));
tkioFlow
.
setContractCount
(
contracts
.
size
());
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlowRepository
.
save
(
tkioFlow
);
...
...
@@ -187,20 +201,87 @@ public class TrackingFlowTask {
}
calculationFlow
.
setStatus
(
2
);
calculationFlowRepository
.
save
(
calculationFlow
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"CalculationFlow:Id::"
+
calculationFlow
.
getId
()+
":全流量同步失败"
,
e
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"CalculationFlow:Id::"
+
calculationFlow
.
getId
()
+
":全流量同步失败"
,
e
);
calculationFlow
.
setStatus
(
3
);
calculationFlowRepository
.
save
(
calculationFlow
);
}
}
}
public
void
task
(){
/**
* 按月统计流量
*
* @param email
* @param yesterday
* @param clickNum
* @param contracts
* @return
*/
private
BigInteger
getFlowOnMonths
(
String
email
,
String
yesterday
,
BigInteger
clickNum
,
List
<
Contract
>
contracts
)
{
String
code
=
tkioFlowHistoryRepository
.
findLastRecodeContract
(
email
);
List
<
Contract
>
sortedContract
=
sortContracts
(
contracts
);
boolean
skip
=
true
;
for
(
int
i
=
0
;
i
<
sortedContract
.
size
();
i
++)
{
if
(
skip
&&
!
sortedContract
.
get
(
i
).
getContractCode
().
equals
(
code
))
{
continue
;
//跳过已记录的合同
}
else
{
skip
=
false
;
}
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
sortedContract
.
get
(
i
),
true
);
Long
costFlow
=
tkioFlow
.
getCostFlow
()
==
null
?
0L
:
tkioFlow
.
getCostFlow
();
TkioFlowHistory
flowHistory
=
new
TkioFlowHistory
(
tkioFlow
);
flowHistory
.
setyMonth
(
DateTime
.
parse
(
yesterday
).
toString
(
"yyyy-MM"
));
flowHistory
.
setyMonthNext
(
DateTime
.
parse
(
yesterday
).
plusMonths
(
1
).
toString
(
"yyyy-MM"
));
if
(
costFlow
<=
0
)
{
//没有超出流量 关联流量信息 到当前合同
tkioFlowHistoryRepository
.
save
(
flowHistory
);
break
;
}
//流量超出,即 产生合同外流量的时:
if
(
i
+
1
<
sortedContract
.
size
())
{
//1、 看下一合同是否生效
Contract
next
=
sortedContract
.
get
(
i
+
1
);
if
(
DateTime
.
parse
(
next
.
getStartDate
()).
isBefore
(
DateTime
.
parse
(
yesterday
))
||
DateTime
.
parse
(
next
.
getStartDate
()).
isEqual
(
DateTime
.
parse
(
yesterday
)))
{
if
(
DateTime
.
parse
(
next
.
getStartDate
()).
monthOfYear
().
get
()
!=
new
DateTime
(
next
.
getCreateTime
()).
monthOfYear
().
get
()
&&
new
DateTime
(
next
.
getCreateTime
()).
dayOfMonth
().
get
()
>
10
)
{
}
else
{
//2、生效时 切为非晚录合同 超出流量计入下一合同
clickNum
=
new
BigInteger
(
costFlow
.
toString
());
continue
;
}
}
//3、未生效或未晚录合同 则关联流量信息到当前合同
if
(
DateTime
.
parse
(
yesterday
).
monthOfYear
().
get
()
==
DateTime
.
parse
(
next
.
getStartDate
()).
monthOfYear
().
get
())
{
//生效当月 超出的流量关联到 下一份合同
clickNum
=
new
BigInteger
(
costFlow
.
toString
());
continue
;
}
else
{
//生效当月之前 超出的流量计入当前合同
flowHistory
.
setNextCode
(
next
.
getContractCode
());
//标记用于那份合同的调整流量
tkioFlowHistoryRepository
.
save
(
flowHistory
);
}
break
;
}
else
{
//无下一份合同 则关联流量信息到当前合同内
tkioFlowHistoryRepository
.
save
(
flowHistory
);
}
}
return
clickNum
;
}
public
void
task
()
{
List
<
String
>
emails
=
contractRepository
.
findDistinctEmailByPlatform
(
"tkio"
);
List
<
TkioFlow
>
tkioFlowList
=
new
ArrayList
<>();
String
yesterday
=
DateUtil
.
getBeforeDays
(
1
);
//昨日
logger
.
info
(
"昨日流量同步:"
+
yesterday
);
logger
.
info
(
"昨日流量同步:"
+
yesterday
);
for
(
String
email
:
emails
)
{
//查询用户下所有appkey
...
...
@@ -212,19 +293,23 @@ public class TrackingFlowTask {
}
List
<
String
>
appkeys
=
appRepository
.
findAppkeysNotDebug
(
idList
);
String
appkeyStr
=
String
.
join
(
"','"
,
appkeys
);
appkeyStr
=
"'"
+
appkeyStr
+
"'"
;
appkeyStr
=
"'"
+
appkeyStr
+
"'"
;
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
yesterday
,
yesterday
,
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
if
(
clickNum
!=
null
&&
clickNum
.
longValue
()>
0
)
{
if
(
clickNum
!=
null
&&
clickNum
.
longValue
()
>
0
)
{
List
<
Contract
>
contracts
=
contractRepository
.
findByPlatformAndEmail
(
"tkio"
,
email
);
if
(
contracts
.
size
()==
1
)
{
//只有一个合同
if
(
contracts
.
size
()
==
1
)
{
//只有一个合同
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contracts
.
get
(
0
));
if
(
tkioFlow
!=
null
)
{
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
1
);
tkioFlowRepository
.
save
(
tkioFlow
);
}
}
else
{
//多个合同
}
else
{
//多个合同
getFlowOnMonths
(
email
,
yesterday
,
clickNum
,
contracts
);
//月流量报表逻辑
//看昨日被哪几个合同包含了
List
<
Contract
>
correlationContract
=
new
ArrayList
<>();
for
(
Contract
contract
:
contracts
)
{
...
...
@@ -237,12 +322,12 @@ public class TrackingFlowTask {
}*/
String
startDate
=
contract
.
getStartDate
();
String
endDate
=
contract
.
getEndDate
();
if
(
DateUtil
.
getDate
(
yesterday
).
getTime
()>=
DateUtil
.
getDate
(
startDate
).
getTime
()
&&
DateUtil
.
getDate
(
yesterday
).
getTime
()<=
DateUtil
.
getDate
(
endDate
).
getTime
())
{
if
(
DateUtil
.
getDate
(
yesterday
).
getTime
()
>=
DateUtil
.
getDate
(
startDate
).
getTime
()
&&
DateUtil
.
getDate
(
yesterday
).
getTime
()
<=
DateUtil
.
getDate
(
endDate
).
getTime
())
{
correlationContract
.
add
(
contract
);
}
}
//多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
if
(
correlationContract
.
size
()>
1
)
{
if
(
correlationContract
.
size
()
>
1
)
{
//冒泡
//第一优先级:合同开始日期,第二优先级,合同编号大小
Contract
[]
contractsArray
=
new
Contract
[
correlationContract
.
size
()];
...
...
@@ -252,44 +337,47 @@ public class TrackingFlowTask {
for
(
int
i
=
0
;
i
<
contractsArray
.
length
;
i
++)
{
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contractsArray
[
i
]);
if
(
tkioFlow
!=
null
&&
i
<
contractsArray
.
length
-
1
&&
tkioFlow
.
getCostFlow
()!=
null
&&
tkioFlow
.
getCostFlow
()>
0L
)
{
//处理成本流量,如果超出了,依次算在下一个合同上
if
(
tkioFlow
!=
null
&&
i
<
contractsArray
.
length
-
1
&&
tkioFlow
.
getCostFlow
()
!=
null
&&
tkioFlow
.
getCostFlow
()
>
0L
)
{
//处理成本流量,如果超出了,依次算在下一个合同上
clickNum
=
BigInteger
.
valueOf
(
tkioFlow
.
getCostFlow
());
tkioFlow
.
setCostFlow
(
null
);
if
(
tkioFlow
.
getFlow
()>
0
)
{
if
(
tkioFlow
.
getFlow
()
>
0
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
contracts
.
size
());
tkioFlowRepository
.
save
(
tkioFlow
);
}
}
else
{
if
(
tkioFlow
!=
null
)
{
}
else
{
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
contracts
.
size
());
tkioFlowRepository
.
save
(
tkioFlow
);
}
break
;
}
}
}
else
{
if
(
correlationContract
.
size
()==
0
)
{
//昨日不包含在所有合同中
}
else
{
if
(
correlationContract
.
size
()
==
0
)
{
//昨日不包含在所有合同中
//排序
Contract
[]
contractsArray
=
new
Contract
[
contracts
.
size
()];
contractsArray
=
contracts
.
toArray
(
contractsArray
);
contractsArray
=
orderByContract
(
contractsArray
);
//如果昨日日期在第一个合同之前,则归属到第一个合同的成本,其余区间都归属到前一个合同的成本上
for
(
int
i
=
0
;
i
<
contractsArray
.
length
;
i
++)
{
if
(
DateUtil
.
getDate
(
yesterday
).
getTime
()<=
DateUtil
.
getDate
(
contractsArray
[
i
].
getStartDate
()).
getTime
()
||
i
==
contractsArray
.
length
-
1
)
{
if
(
DateUtil
.
getDate
(
yesterday
).
getTime
()
<=
DateUtil
.
getDate
(
contractsArray
[
i
].
getStartDate
()).
getTime
()
||
i
==
contractsArray
.
length
-
1
)
{
int
j
=
0
;
if
(
i
!=
0
)
{
j
=
i
-
1
;
if
(
i
!=
0
)
{
j
=
i
-
1
;
}
if
(
i
==
contractsArray
.
length
-
1
)
{
if
(
i
==
contractsArray
.
length
-
1
)
{
j
=
i
;
}
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
contractsArray
[
j
]);
if
(
tkioFlow
!=
null
)
{
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
contracts
.
size
());
tkioFlowRepository
.
save
(
tkioFlow
);
}
break
;
...
...
@@ -297,11 +385,11 @@ public class TrackingFlowTask {
}
}
else
{
}
else
{
TkioFlow
tkioFlow
=
getTkioFlow
(
clickNum
,
yesterday
,
correlationContract
.
get
(
0
));
if
(
tkioFlow
!=
null
)
{
if
(
tkioFlow
!=
null
)
{
tkioFlowList
.
add
(
tkioFlow
);
tkioFlow
.
setContractCount
(
contracts
.
size
());
tkioFlowRepository
.
save
(
tkioFlow
);
}
}
...
...
@@ -311,31 +399,30 @@ public class TrackingFlowTask {
}
}
if
(
tkioFlowList
.
size
()>
0
)
{
if
(
tkioFlowList
.
size
()
>
0
)
{
//tkioFlowRepository.save(tkioFlowList);
}
}
//排序
public
Contract
[]
orderByContract
(
Contract
[]
contractsArray
){
for
(
int
i
=
0
;
i
<
contractsArray
.
length
-
1
;
i
++)
{
for
(
int
j
=
0
;
j
<
contractsArray
.
length
-
1
-
i
;
j
++)
{
public
Contract
[]
orderByContract
(
Contract
[]
contractsArray
)
{
for
(
int
i
=
0
;
i
<
contractsArray
.
length
-
1
;
i
++)
{
for
(
int
j
=
0
;
j
<
contractsArray
.
length
-
1
-
i
;
j
++)
{
String
startDate1
=
contractsArray
[
j
].
getSignedDate
()
==
null
?
contractsArray
[
j
].
getStartDate
()
:
contractsArray
[
j
].
getSignedDate
();
String
startDate2
=
contractsArray
[
j
+
1
].
getSignedDate
()
==
null
?
contractsArray
[
j
+
1
].
getStartDate
()
:
contractsArray
[
j
+
1
].
getSignedDate
();
if
(
DateUtil
.
getDate
(
startDate1
).
getTime
()
>
DateUtil
.
getDate
(
startDate2
).
getTime
())
{
if
(
DateUtil
.
getDate
(
startDate1
).
getTime
()
>
DateUtil
.
getDate
(
startDate2
).
getTime
())
{
Contract
temp
=
contractsArray
[
j
];
contractsArray
[
j
]
=
contractsArray
[
j
+
1
];
contractsArray
[
j
]
=
contractsArray
[
j
+
1
];
contractsArray
[
j
+
1
]
=
temp
;
}
else
if
(
DateUtil
.
getDate
(
startDate1
).
getTime
()
==
DateUtil
.
getDate
(
startDate2
).
getTime
())
{
}
else
if
(
DateUtil
.
getDate
(
startDate1
).
getTime
()
==
DateUtil
.
getDate
(
startDate2
).
getTime
())
{
String
contractCode
=
StringUtil
.
matchNumber
(
contractsArray
[
j
].
getContractCode
());
String
contractCodeMin
=
StringUtil
.
matchNumber
(
contractsArray
[
j
+
1
].
getContractCode
());
if
(
Long
.
valueOf
(
contractCode
)>
Long
.
valueOf
(
contractCodeMin
))
{
String
contractCodeMin
=
StringUtil
.
matchNumber
(
contractsArray
[
j
+
1
].
getContractCode
());
if
(
Long
.
valueOf
(
contractCode
)
>
Long
.
valueOf
(
contractCodeMin
))
{
Contract
temp
=
contractsArray
[
j
];
contractsArray
[
j
]
=
contractsArray
[
j
+
1
];
contractsArray
[
j
]
=
contractsArray
[
j
+
1
];
contractsArray
[
j
+
1
]
=
temp
;
}
}
...
...
@@ -344,40 +431,101 @@ public class TrackingFlowTask {
return
contractsArray
;
}
public
TkioFlow
getTkioFlow
(
BigInteger
clickNum
,
String
yesterday
,
Contract
contract
){
public
TkioFlow
getTkioFlow
(
BigInteger
clickNum
,
String
yesterday
,
Contract
contract
)
{
return
getTkioFlow
(
clickNum
,
yesterday
,
contract
,
false
);
}
private
TkioFlow
getTkioFlow
(
BigInteger
clickNum
,
String
yesterday
,
Contract
contract
,
Boolean
isHistory
)
{
TkioFlow
tkioFlow
=
new
TkioFlow
();
tkioFlow
.
setDs
(
yesterday
);
tkioFlow
.
setEmail
(
contract
.
getEmail
());
tkioFlow
.
setContractCode
(
contract
.
getContractCode
());
try
{
if
(
DateUtil
.
daysBetween
(
contract
.
getStartDate
(),
yesterday
)<
0
||
DateUtil
.
daysBetween
(
contract
.
getEndDate
(),
yesterday
)>
0
)
{
//昨日日期早于合同开始日期
if
(
DateUtil
.
daysBetween
(
contract
.
getStartDate
(),
yesterday
)
<
0
||
DateUtil
.
daysBetween
(
contract
.
getEndDate
(),
yesterday
)
>
0
)
{
//昨日日期早于合同开始日期
//设置为成本流量
tkioFlow
.
setCostFlow
(
clickNum
.
longValue
());
}
else
{
}
else
{
//查看历史总消耗流量是否超出
BigDecimal
totalFlow
=
tkioFlowRepository
.
sumFlowByEmailAndContractCode
(
contract
.
getEmail
(),
contract
.
getContractCode
());
totalFlow
=
totalFlow
==
null
?
new
BigDecimal
(
0
):
totalFlow
;
BigDecimal
totalFlow
=
isHistory
?
tkioFlowHistoryRepository
.
sumAllFowByEmailAndCode
(
contract
.
getEmail
(),
contract
.
getContractCode
())
:
tkioFlowRepository
.
sumFlowByEmailAndContractCode
(
contract
.
getEmail
(),
contract
.
getContractCode
());
totalFlow
=
totalFlow
==
null
?
new
BigDecimal
(
0
)
:
totalFlow
;
Double
contractTrackFlow
=
contract
.
getTrackFlow
()
*
10000
;
if
(
contractTrackFlow
.
longValue
()-
totalFlow
.
longValue
()-
clickNum
.
longValue
()>=
0
||
contract
.
getPriceLevel
()==
Constant
.
tkioPriceLevelNotLimit
)
{
if
(
contractTrackFlow
.
longValue
()
-
totalFlow
.
longValue
()
-
clickNum
.
longValue
()
>=
0
||
contract
.
getPriceLevel
()
==
Constant
.
tkioPriceLevelNotLimit
)
{
tkioFlow
.
setFlow
(
clickNum
.
longValue
());
}
else
{
}
else
{
tkioFlow
.
setFlow
(
contractTrackFlow
.
longValue
()
-
totalFlow
.
longValue
());
tkioFlow
.
setCostFlow
(
clickNum
.
longValue
()
-
tkioFlow
.
getFlow
());
tkioFlow
.
setCostFlow
(
clickNum
.
longValue
()
-
tkioFlow
.
getFlow
());
}
}
return
tkioFlow
;
}
catch
(
ParseException
e
)
{
logger
.
error
(
"合同编号-"
+
contract
.
getContractCode
()+
"-同步昨日流量错误:"
,
e
);
logger
.
error
(
"合同编号-"
+
contract
.
getContractCode
()
+
"-同步昨日流量错误:"
,
e
);
}
return
null
;
}
public
List
<
Contract
>
sortContracts
(
List
<
Contract
>
contracts
)
{
List
<
Contract
>
sortedContract
=
contracts
.
stream
()
.
sorted
(
Comparator
.
comparing
(
v
->
{
String
start
=
((
Contract
)
v
).
getStartDate
();
return
DateTime
.
parse
(
start
);
}).
thenComparingLong
(
v
->
{
String
code
=
((
Contract
)
v
).
getContractCode
();
return
Long
.
parseLong
(
StringUtil
.
matchNumber
(
code
));
}))
.
collect
(
Collectors
.
toList
());
return
sortedContract
;
}
public
static
void
main
(
String
[]
args
)
throws
ParseException
{
String
ago
=
"2020-10-01"
;
int
between
=
DateUtil
.
daysBetween
(
ago
,
DateUtil
.
getBeforeDays
(
1
))
+
1
;
int
between
=
DateUtil
.
daysBetween
(
ago
,
DateUtil
.
getBeforeDays
(
1
))
+
1
;
System
.
out
.
println
(
between
);
for
(
int
i
=
between
;
i
>
0
;
i
--)
{
System
.
out
.
println
(
DateUtil
.
getBeforeDays
(
i
));
//
System.out.println(DateUtil.getBeforeDays(i));
}
List
<
Contract
>
contracts
=
new
ArrayList
<>();
Contract
c1
=
new
Contract
();
c1
.
setStartDate
(
"2020-10-03"
);
c1
.
setContractCode
(
"QWWE-20201101-03"
);
Contract
c2
=
new
Contract
();
c2
.
setStartDate
(
"2020-11-02"
);
c2
.
setContractCode
(
"QWWE-20201101-01"
);
Contract
c3
=
new
Contract
();
c3
.
setStartDate
(
"2020-10-02"
);
c3
.
setContractCode
(
"QWWE-20201101-02"
);
Contract
c4
=
new
Contract
();
c4
.
setStartDate
(
"2020-11-03"
);
c4
.
setContractCode
(
"QWWE-20201101-02"
);
contracts
.
add
(
c1
);
contracts
.
add
(
c2
);
contracts
.
add
(
c3
);
contracts
.
add
(
c4
);
List
<
Contract
>
sortedContract
=
contracts
.
stream
()
.
sorted
(
Comparator
.
comparing
(
v
->
{
String
start
=
((
Contract
)
v
).
getStartDate
();
return
DateTime
.
parse
(
start
);
}).
thenComparingLong
(
v
->
{
String
code
=
((
Contract
)
v
).
getContractCode
();
return
Long
.
parseLong
(
StringUtil
.
matchNumber
(
code
));
}))
.
collect
(
Collectors
.
toList
());
sortedContract
.
forEach
(
v
->
System
.
out
.
println
(
v
.
getStartDate
()
+
"-"
+
v
.
getContractCode
()));
Map
<
String
,
List
<
Contract
>>
monthContract
=
sortedContract
.
stream
().
collect
(
Collectors
.
groupingBy
(
v
->
v
.
getStartDate
().
substring
(
0
,
7
)));
monthContract
.
forEach
((
k
,
v
)
->
{
System
.
out
.
println
(
"key: "
+
k
);
v
.
forEach
(
vn
->
System
.
out
.
println
(
vn
.
getContractCode
()));
});
}
}
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