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
d68ef5d3
Commit
d68ef5d3
authored
Sep 28, 2020
by
lzxry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tkio分摊报表
parent
1335ec2f
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
368 additions
and
14 deletions
+368
-14
Contract.java
src/main/java/common/model/Contract.java
+29
-0
ShareIncomeServiceImpl.java
...main/java/common/service/impl/ShareIncomeServiceImpl.java
+336
-14
AppRepository.java
src/main/java/tkio/repository/AppRepository.java
+3
-0
No files found.
src/main/java/common/model/Contract.java
View file @
d68ef5d3
...
...
@@ -63,6 +63,7 @@ public class Contract {
private
Long
incomeExcludingTax
;
//不含税收入 (*100的结果)
private
Long
intervaIncomeShare
;
//区间分摊收入(*100的结果)
private
Long
incomeShareAll
;
//分摊总收入(*100的结果)
private
Long
incomeGross
;
//累计总收入(*100的结果)合同自开始至选择的结束日期(分摊收入+调整金额)
private
Integer
shareSign
;
//标记是否计算分摊收入 1 计算 0 不计算
...
...
@@ -94,6 +95,8 @@ public class Contract {
private
String
belongGroup
;
//隶属集团
private
Double
trackFlow
;
//流量,tkio的
private
Double
unitPrice
;
//单价,tkio
private
Double
clickFlow
;
//区间点击数,tkio
@Id
@GeneratedValue
...
...
@@ -576,6 +579,32 @@ public class Contract {
public
void
setTrackFlow
(
Double
trackFlow
)
{
this
.
trackFlow
=
trackFlow
;
}
@Transient
public
Double
getUnitPrice
()
{
return
unitPrice
;
}
public
void
setUnitPrice
(
Double
unitPrice
)
{
this
.
unitPrice
=
unitPrice
;
}
@Transient
public
Double
getClickFlow
()
{
return
clickFlow
;
}
public
void
setClickFlow
(
Double
clickFlow
)
{
this
.
clickFlow
=
clickFlow
;
}
@Transient
public
Long
getIncomeGross
()
{
return
incomeGross
;
}
public
void
setIncomeGross
(
Long
incomeGross
)
{
this
.
incomeGross
=
incomeGross
;
}
@Override
public
String
toString
()
{
...
...
src/main/java/common/service/impl/ShareIncomeServiceImpl.java
View file @
d68ef5d3
package
common
.
service
.
impl
;
import
com.amazonaws.services.dynamodbv2.xspec.B
;
import
com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer
;
import
common.model.*
;
import
common.repository.*
;
import
common.service.ShareIncomeService
;
...
...
@@ -9,17 +7,26 @@ import dic.ContractStatusEnum;
import
dic.RoleEnum
;
import
net.sf.json.JSONArray
;
import
org.joda.time.DateTime
;
import
org.joda.time.DateTimeUtils
;
import
org.joda.time.Days
;
import
org.joda.time.Months
;
import
org.joda.time.format.DateTimeFormatter
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
import
tkio.model.Account
;
import
tkio.repository.AccountRepository
;
import
tkio.repository.AppRepository
;
import
tkio.service.AccountFlowRestrictService
;
import
util.ContractBranchUtil
;
import
util.DateUtil
;
import
java.math.BigDecimal
;
import
java.math.BigInteger
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Function
;
...
...
@@ -41,6 +48,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
private
ContractChangeRepository
contractChangeRepository
;
@Autowired
private
BarrioCityRepository
barrioCityRepository
;
@Autowired
private
AppRepository
appRepository
;
@Autowired
private
AccountRepository
accountRepository
;
@Autowired
private
AccountFlowRestrictService
accountFlowRestrictService
;
@Override
public
List
<
Contract
>
shareIncomeList
(
User
loginAccount
,
String
startDate
,
String
endDate
,
String
platform
,
String
bodyCode
,
String
serchName
)
{
...
...
@@ -112,10 +125,17 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
switch
(
ContractBranchUtil
.
getValue
(
platform
)){
case
"type_one"
:
this
.
shareIncome4Contract
(
v
,
start
,
end
);
break
;
case
"type_two"
:
this
.
shareIncome4Contract
(
v
,
start
,
end
);
break
;
case
"type_two"
:
if
(
v
.
getPriceLevel
()==
18
){
//TKIO不限量套餐
this
.
shareIncome4Contract
(
v
,
start
,
end
);
}
else
{
//TKIO普通流量套餐
this
.
shareIncome4ContractTwo
(
v
,
start
,
end
);
}
break
;
default
:
this
.
shareIncome4Contract
(
v
,
start
,
end
);
break
;
}
v
.
setMyBodyName
(
bodiesNameMap
.
get
(
v
.
getMyBodyCode
()));
if
(
v
.
getBarrioId
()!=
null
)
v
.
setBarrioName
(
barrioCitiesNameMap
.
get
(
barrioCitiesNameMap
.
get
(
v
.
getBarrioId
()).
getParentId
()).
getName
());
...
...
@@ -125,12 +145,311 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
return
contracts
;
}
//需求禅道 1608
public
void
shareIncome4ContractTwo
(
Contract
contract
,
DateTime
start
,
DateTime
end
)
{
DateTime
[]
selected
=
new
DateTime
[]{
start
,
end
};
//用户筛选开始/结束日期
DateTime
[]
contractPart
=
new
DateTime
[]{
new
DateTime
(
contract
.
getStartDate
()),
new
DateTime
(
contract
.
getEndDate
())};
//合同开始结束 时间
DateTime
[]
usePart
=
new
DateTime
[]{
selected
[
0
].
compareTo
(
contractPart
[
0
])
<=
0
?
contractPart
[
0
]
:
selected
[
0
],
selected
[
1
].
compareTo
(
contractPart
[
1
])
>=
0
?
contractPart
[
1
]
:
selected
[
1
]
};
usePart
[
0
]
=
usePart
[
0
].
compareTo
(
usePart
[
1
])
>=
0
?
usePart
[
1
]
:
usePart
[
0
];
Long
excludTax
=
new
BigDecimal
(
contract
.
getMoney
()
/
1.06
)
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
).
multiply
(
new
BigDecimal
(
100L
)).
longValue
();
//不含税收入*100
contract
.
setIncomeExcludingTax
(
excludTax
);
//计算单价,精准保留16位数
BigDecimal
unitPriceAccurate
=
new
BigDecimal
(
contract
.
getMoney
()/
1.06
/
contract
.
getTrackFlow
())
.
setScale
(
16
,
BigDecimal
.
ROUND_HALF_UP
);
//四舍五入单价
double
unitPrice
=
unitPriceAccurate
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
();
//不限量套餐会在方法里面重新赋值单价
contract
.
setUnitPrice
(
unitPrice
);
//查询用户下所有appkey
Account
account
=
accountRepository
.
findByEmail
(
contract
.
getEmail
());
List
<
Account
>
accountList
=
accountRepository
.
findByRootParent
(
account
.
getRootParent
());
List
<
Long
>
idList
=
new
ArrayList
<>();
for
(
Account
ac
:
accountList
)
{
idList
.
add
(
ac
.
getId
());
}
List
<
String
>
appkeys
=
appRepository
.
findAppkeysNotDebug
(
idList
);
String
appkeyStr
=
String
.
join
(
"','"
,
appkeys
);
appkeyStr
=
"'"
+
appkeyStr
+
"'"
;
//作废合同 累计收入= 0
//中止合同 累计收入= 如果中止日期在选择日期之内,【合同开始日期-中止日期】,否则【合同开始日期-选择结束日期】,不需要考虑调整金
//晚录合同 累计收入= 同下
//正常合同 累计收入= 如果合同结束日期在选择日期之内,则直接取 [合同金额/1.06]得到总金额 ,否则 【合同开始日期-选择结束日期】
//作废合同处理
Contract
cancleContract
=
this
.
cancledShareTKIO
(
contract
,
appkeyStr
,
unitPriceAccurate
,
usePart
);
if
(
cancleContract
!=
null
)
{
return
;
}
//中止合同处理
Contract
suspendContract
=
this
.
suspendShareTKIO
(
contract
,
appkeyStr
,
unitPriceAccurate
,
contractPart
,
usePart
,
selected
);
if
(
suspendContract
!=
null
)
{
return
;
}
//晚录合同处理//正常合同处理
DateTime
create
=
new
DateTime
(
new
DateTime
(
contract
.
getCreateTime
()).
toString
(
"yyyy-MM-dd"
));
//录入时间点
DateTime
[]
creatPoints
=
new
DateTime
[]{
create
,
//录入日
create
.
dayOfMonth
().
withMinimumValue
()
//录入月1日
};
this
.
afterContractTKIO
(
contract
,
appkeyStr
,
unitPriceAccurate
,
contractPart
,
usePart
,
selected
,
creatPoints
);
}
private
void
afterContractTKIO
(
Contract
contract
,
String
appkeyStr
,
BigDecimal
unitPriceAccurate
,
DateTime
[]
contractPart
,
DateTime
[]
usePart
,
DateTime
[]
selected
,
DateTime
[]
creatPoints
)
{
Long
adjustmentFund
=
0L
;
//调整金
contract
.
setClickFlow
(
0.0
);
boolean
isLateContract
=
false
;
// 是否为晚录合同(为了兼容历史数据 此处做冗余判断)
if
(
ContractStatusEnum
.
LATE
.
getKey
().
equals
(
contract
.
getStatus
()))
{
isLateContract
=
true
;
}
else
if
(
checkLateContract
(
contractPart
[
0
],
creatPoints
[
0
]))
{
isLateContract
=
true
;
contract
.
setStatus
(
ContractStatusEnum
.
LATE
.
getKey
());
}
boolean
isLater
=
true
;
if
(!
isLateContract
)
{
//非合同晚录
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
usePart
[
0
].
toString
(
"yyyy-MM-dd"
),
usePart
[
1
].
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
//区间点击数
contract
.
setClickFlow
(
new
BigDecimal
(
clickFlow
/
10000
).
setScale
(
4
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
}
//区间分摊收入
contract
.
setIntervaIncomeShare
(
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
());
DateTime
grossDate
;
if
(
checkTwoTime
(
selected
[
0
],
contractPart
[
1
])
&&
checkTwoTime
(
contractPart
[
1
],
selected
[
1
])){
grossDate
=
contractPart
[
1
];
}
else
{
grossDate
=
selected
[
1
];
}
//累计总收入
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
contractPart
[
0
].
toString
(
"yyyy-MM-dd"
),
grossDate
.
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
contract
.
setIncomeGross
(
unitPriceAccurate
.
multiply
(
new
BigDecimal
(
clickFlow
/
10000
*
100
)).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
isLater
=
false
;
}
else
if
(
selected
[
1
].
isBefore
(
creatPoints
[
1
]))
{
//录入月1号之前 调整金为 0 分摊为 0
contract
.
setIntervaIncomeShare
(
0L
);
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
());
contract
.
setClickFlow
(
0.0
);
contract
.
setIncomeGross
(
0L
);
contract
.
setStatus
(
ContractStatusEnum
.
LATE
.
getKey
());
}
else
{
contract
.
setStatus
(
ContractStatusEnum
.
LATE
.
getKey
());
//合同晚录
//所选时间范围内的分摊收入(录入月1号 即creatPoints[1] 开始计算)
DateTime
useStart
=
creatPoints
[
1
].
compareTo
(
selected
[
0
])
>=
0
?
creatPoints
[
1
]
:
selected
[
0
];
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
useStart
.
toString
(
"yyyy-MM-dd"
),
usePart
[
1
].
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
//区间点击数
contract
.
setClickFlow
(
new
BigDecimal
(
clickFlow
/
10000
).
setScale
(
4
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
}
//区间分摊收入
contract
.
setIntervaIncomeShare
(
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
if
(
checkTwoTime
(
selected
[
0
],
creatPoints
[
1
])
&&
checkTwoTime
(
creatPoints
[
1
],
selected
[
1
]))
{
//所选时间范围包含 录入月 1 号 显示统计的调整金
//合同开始日期,合同录入日期的一号,-1就是上个月最后一天
//contractPart[0], creatPoints[1].plusDays(-1)
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
contractPart
[
0
].
toString
(
"yyyy-MM-dd"
),
creatPoints
[
1
].
plusDays
(-
1
).
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
//区间点击数
}
contract
.
setAdjustmentFund
(
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
}
else
{
contract
.
setAdjustmentFund
(
0L
);
}
DateTime
grossDate
;
if
(
checkTwoTime
(
selected
[
0
],
contractPart
[
1
])
&&
checkTwoTime
(
contractPart
[
1
],
selected
[
1
])){
grossDate
=
contractPart
[
1
];
}
else
{
grossDate
=
selected
[
1
];
}
//累计总收入
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
contractPart
[
0
].
toString
(
"yyyy-MM-dd"
),
grossDate
.
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
contract
.
setIncomeGross
(
unitPriceAccurate
.
multiply
(
new
BigDecimal
(
clickFlow
/
10000
*
100
)).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
}
if
(
checkTwoTime
(
contractPart
[
1
],
selected
[
1
]))
{
//最后一日分摊收入计算处理(合同的最后一天,不管流量剩余多少,都算作做最后一天的收入)
Long
lastDay
;
DateTime
lastDate
[];
if
(
isLater
)
{
lastDate
=
new
DateTime
[]{
creatPoints
[
1
],
contractPart
[
1
].
plusDays
(-
1
)};
}
else
{
lastDate
=
new
DateTime
[]{
contractPart
[
0
],
contractPart
[
1
].
plusDays
(-
1
)};
}
//合同除去最后一天的流量
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
lastDate
[
0
].
toString
(
"yyyy-MM-dd"
),
lastDate
[
1
].
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
}
long
beforeTheMoney
=
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
();
//最后一天的流量
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
contractPart
[
1
].
toString
(
"yyyy-MM-dd"
),
contractPart
[
1
].
toString
(
"yyyy-MM-dd"
),
appkeyStr
,
"account_track_flow_restrict"
,
"click_sum"
);
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
)
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
long
lastDayTheMoney
=
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
();
//合同的税后总金额减去最后合同一日之前的钱和调整金
lastDay
=
contract
.
getIncomeExcludingTax
()
-
contract
.
getAdjustmentFund
()
-
beforeTheMoney
;
//最后一日 或 包含最后一日 时
contract
.
setIntervaIncomeShare
(
contract
.
getIntervaIncomeShare
()
-
lastDayTheMoney
+
lastDay
);
}
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
}
private
Contract
suspendShareTKIO
(
Contract
contract
,
String
appkeys
,
BigDecimal
unitPriceAccurate
,
DateTime
[]
contractPart
,
DateTime
[]
usePart
,
DateTime
[]
selected
)
{
if
(!
ContractStatusEnum
.
SUSPEND
.
getKey
().
equals
(
contract
.
getStatus
()))
{
return
null
;
}
ContractChange
contractChange
=
contractChangeRepository
.
findByContentCode
(
ContractStatusEnum
.
SUSPEND
.
getValue
(),
contract
.
getContractCode
());
if
(
contractChange
==
null
)
{
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIntervaIncomeShare
(
0L
);
contract
.
setIncomeShareAll
(
0L
);
contract
.
setClickFlow
(
0.0
);
return
contract
;
}
// 合同中止日
DateTime
cancelDate
=
new
DateTime
(
contractChange
.
getDs
());
//中止操作入库时间
DateTime
suspendDate
=
new
DateTime
(
new
DateTime
(
contractChange
.
getCreateTime
()).
toString
(
"yyyy-MM-dd"
));
contract
.
setClickFlow
(
0.0
);
//调整金
Long
adjustmentFund
=
0L
;
if
(
checkTwoTime
(
suspendDate
,
cancelDate
))
{
adjustmentFund
=
0L
;
}
else
{
//查询调整金的点击,日期开始结束时间注意不能颠倒
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
cancelDate
.
toString
(
"yyyy-MM-dd"
),
suspendDate
.
toString
(
"yyyy-MM-dd"
),
appkeys
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
}
adjustmentFund
=
unitPriceAccurate
.
multiply
(
clickTenThousand
.
multiply
(
new
BigDecimal
(-
1
))).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
();
}
//调整金
contract
.
setAdjustmentFund
(
adjustmentFund
);
DateTime
usedEnd
=
usePart
[
1
].
compareTo
(
cancelDate
)
<=
0
?
usePart
[
1
]
:
cancelDate
;
//查询开始->中止日期的点击(有收入的点击),不包括调整金
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
usePart
[
0
].
toString
(
"yyyy-MM-dd"
),
usedEnd
.
toString
(
"yyyy-MM-dd"
),
appkeys
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
//区间点击数
contract
.
setClickFlow
(
new
BigDecimal
(
clickFlow
/
10000
).
setScale
(
4
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
}
//区间分摊收入,乘以100,前端除以100
long
share
=
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
();
contract
.
setIntervaIncomeShare
(
share
);
contract
.
setIncomeShareAll
(
share
+
adjustmentFund
);
DateTime
grossDate
;
if
(
checkTwoTime
(
selected
[
0
],
contractPart
[
1
])
&&
checkTwoTime
(
contractPart
[
1
],
selected
[
1
])){
grossDate
=
contractPart
[
1
];
}
else
{
grossDate
=
selected
[
1
];
}
//累计总收入
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
contractPart
[
0
].
toString
(
"yyyy-MM-dd"
),
grossDate
.
toString
(
"yyyy-MM-dd"
),
appkeys
,
"account_track_flow_restrict"
,
"click_sum"
);
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
contract
.
setIncomeGross
(
unitPriceAccurate
.
multiply
(
new
BigDecimal
(
clickFlow
/
10000
*
100
)).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
());
return
contract
;
}
private
Contract
cancledShareTKIO
(
Contract
contract
,
String
appkeys
,
BigDecimal
unitPriceAccurate
,
DateTime
[]
usePart
)
{
if
(!
ContractStatusEnum
.
CANCEL
.
getKey
().
equals
(
contract
.
getStatus
()))
{
return
null
;
}
ContractChange
contractChange
=
contractChangeRepository
.
findByContentCode
(
ContractStatusEnum
.
CANCEL
.
getValue
(),
contract
.
getContractCode
());
if
(
contractChange
==
null
)
{
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIntervaIncomeShare
(
0L
);
contract
.
setIncomeShareAll
(
0L
);
contract
.
setClickFlow
(
0.0
);
return
contract
;
}
DateTime
cancelDate
=
new
DateTime
(
contractChange
.
getDs
());
//合同作废日
DateTime
usedEnd
=
usePart
[
1
].
compareTo
(
cancelDate
)
<=
0
?
usePart
[
1
]
:
cancelDate
;
BigInteger
clickNum
=
accountFlowRestrictService
.
getTotalNum
(
usePart
[
0
].
toString
(
"yyyy-MM-dd"
),
usedEnd
.
toString
(
"yyyy-MM-dd"
),
appkeys
,
"account_track_flow_restrict"
,
"click_sum"
);
int
clickFlow
=
clickNum
==
null
?
0
:
clickNum
.
intValue
();
//区间点击数
contract
.
setClickFlow
(
0.0
);
BigDecimal
clickTenThousand
=
new
BigDecimal
(
0
);
if
(
clickFlow
!=
0
){
clickTenThousand
=
new
BigDecimal
(
clickFlow
/
10000
*
100
);
//区间点击数
contract
.
setClickFlow
(
new
BigDecimal
(
clickFlow
/
10000
).
setScale
(
4
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
}
//区间分摊收入,乘以100,前端除以100
long
share
=
unitPriceAccurate
.
multiply
(
clickTenThousand
).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
longValue
();
contract
.
setIntervaIncomeShare
(
share
);
//调整金
contract
.
setAdjustmentFund
(
share
*-
1L
);
//分摊总收入
contract
.
setIncomeShareAll
(
0L
);
contract
.
setIncomeGross
(
0L
);
return
contract
;
}
public
void
shareIncome4Contract
(
Contract
contract
,
DateTime
start
,
DateTime
end
)
{
DateTime
[]
selected
=
new
DateTime
[]{
start
,
end
};
end
};
//用户筛选开始/结束日期
DateTime
[]
contractPart
=
new
DateTime
[]{
new
DateTime
(
contract
.
getStartDate
()),
new
DateTime
(
contract
.
getEndDate
())};
//合同开始结束 时间
...
...
@@ -287,6 +606,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
}
}
if
(
checkTwoTime
(
selected
[
0
],
contractPart
[
1
])
&&
checkTwoTime
(
contractPart
[
1
],
selected
[
1
]))
{
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
contractPart
[
1
])
+
1
),
dayShareIncome
,
0
));
}
else
{
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
selected
[
1
])
+
1
),
dayShareIncome
,
0
));
}
if
(
checkTwoTime
(
contractPart
[
1
],
selected
[
1
]))
{
//最后一日分摊金计算处理
Long
lastDay
;
...
...
@@ -335,7 +660,6 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if
(
checkTwoTime
(
suspendDate
,
cancelDate
))
{
adjustmentFund
=
0L
;
}
else
{
adjustmentFund
=
shareMultiply
(
new
BigDecimal
((
getDayRange
(
cancelDate
,
suspendDate
)
+
1
)
*
-
1
),
dayShareIncome
,
0
);
}
...
...
@@ -348,8 +672,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if
(
checkTwoTime
(
selected
[
0
],
cancelDate
)
&&
checkTwoTime
(
cancelDate
,
selected
[
1
]))
{
contract
.
setAdjustmentFund
(
adjustmentFund
);
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
cancelDate
)
+
1
),
dayShareIncome
,
0
));
}
else
{
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
selected
[
1
])
+
1
),
dayShareIncome
,
0
));
}
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
...
...
@@ -391,7 +717,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
}
else
{
contract
.
setAdjustmentFund
(
0L
);
}
contract
.
setIncomeGross
(
0L
);
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
return
contract
;
}
...
...
@@ -416,13 +742,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
}
public
static
void
main
(
String
[]
args
)
{
//2019.7.24-2020.7.23
DateTime
[]
middlePoiont
=
new
DateTime
[]{
new
DateTime
(
"2019-12-31"
),
new
DateTime
(
"2020-01-01"
)};
DateTime
[]
middlePoiont2
=
new
DateTime
[]{
new
DateTime
(
"2019-07-24"
),
new
DateTime
(
"2020-07-23"
)};
System
.
out
.
println
(
Days
.
daysBetween
(
middlePoiont2
[
1
],
middlePoiont2
[
0
]).
getDays
());
System
.
out
.
println
(
Days
.
daysBetween
(
middlePoiont2
[
1
],
middlePoiont
[
0
]).
getDays
());
System
.
out
.
println
(
Days
.
daysBetween
(
middlePoiont
[
1
],
middlePoiont2
[
0
]).
getDays
());
DateTime
dateTime
=
new
DateTime
(
"2020-09-25"
);
DateTime
creatTime
=
new
DateTime
(
"2020-10-11"
);
System
.
out
.
println
(
dateTime
.
isBefore
(
creatTime
));
}
...
...
src/main/java/tkio/repository/AppRepository.java
View file @
d68ef5d3
...
...
@@ -18,4 +18,7 @@ public interface AppRepository extends JpaRepository<App, Long> {
@Query
(
value
=
"select appkey from app where account in ?1"
,
nativeQuery
=
true
)
List
<
String
>
findAppkeys
(
List
<
Long
>
accountId
);
@Query
(
value
=
"select appkey from app where account in ?1 and is_debug is not true"
,
nativeQuery
=
true
)
List
<
String
>
findAppkeysNotDebug
(
List
<
Long
>
accountId
);
}
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