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
4 years ago
by
lzxry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tkio分摊报表
parent
1335ec2f
master
…
0727_bugfix
1608_from_1619
1990_bugfix
2578_bugfix
2580_fix
bigfix_20201028
bugfix_1608_new
bugfix_1760
bugfix_master_1760
liushaowei
master_mv
mobvista_master
month_flow
No related merge requests found
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 {
...
@@ -63,6 +63,7 @@ public class Contract {
private
Long
incomeExcludingTax
;
//不含税收入 (*100的结果)
private
Long
incomeExcludingTax
;
//不含税收入 (*100的结果)
private
Long
intervaIncomeShare
;
//区间分摊收入(*100的结果)
private
Long
intervaIncomeShare
;
//区间分摊收入(*100的结果)
private
Long
incomeShareAll
;
//分摊总收入(*100的结果)
private
Long
incomeShareAll
;
//分摊总收入(*100的结果)
private
Long
incomeGross
;
//累计总收入(*100的结果)合同自开始至选择的结束日期(分摊收入+调整金额)
private
Integer
shareSign
;
//标记是否计算分摊收入 1 计算 0 不计算
private
Integer
shareSign
;
//标记是否计算分摊收入 1 计算 0 不计算
...
@@ -94,6 +95,8 @@ public class Contract {
...
@@ -94,6 +95,8 @@ public class Contract {
private
String
belongGroup
;
//隶属集团
private
String
belongGroup
;
//隶属集团
private
Double
trackFlow
;
//流量,tkio的
private
Double
trackFlow
;
//流量,tkio的
private
Double
unitPrice
;
//单价,tkio
private
Double
clickFlow
;
//区间点击数,tkio
@Id
@Id
@GeneratedValue
@GeneratedValue
...
@@ -576,6 +579,32 @@ public class Contract {
...
@@ -576,6 +579,32 @@ public class Contract {
public
void
setTrackFlow
(
Double
trackFlow
)
{
public
void
setTrackFlow
(
Double
trackFlow
)
{
this
.
trackFlow
=
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
@Override
public
String
toString
()
{
public
String
toString
()
{
...
...
This diff is collapsed.
Click to expand it.
src/main/java/common/service/impl/ShareIncomeServiceImpl.java
View file @
d68ef5d3
package
common
.
service
.
impl
;
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.model.*
;
import
common.repository.*
;
import
common.repository.*
;
import
common.service.ShareIncomeService
;
import
common.service.ShareIncomeService
;
...
@@ -9,17 +7,26 @@ import dic.ContractStatusEnum;
...
@@ -9,17 +7,26 @@ import dic.ContractStatusEnum;
import
dic.RoleEnum
;
import
dic.RoleEnum
;
import
net.sf.json.JSONArray
;
import
net.sf.json.JSONArray
;
import
org.joda.time.DateTime
;
import
org.joda.time.DateTime
;
import
org.joda.time.DateTimeUtils
;
import
org.joda.time.Days
;
import
org.joda.time.Days
;
import
org.joda.time.Months
;
import
org.joda.time.Months
;
import
org.joda.time.format.DateTimeFormatter
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
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.ContractBranchUtil
;
import
util.DateUtil
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.math.BigInteger
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.function.Function
;
import
java.util.function.Function
;
...
@@ -41,6 +48,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -41,6 +48,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
private
ContractChangeRepository
contractChangeRepository
;
private
ContractChangeRepository
contractChangeRepository
;
@Autowired
@Autowired
private
BarrioCityRepository
barrioCityRepository
;
private
BarrioCityRepository
barrioCityRepository
;
@Autowired
private
AppRepository
appRepository
;
@Autowired
private
AccountRepository
accountRepository
;
@Autowired
private
AccountFlowRestrictService
accountFlowRestrictService
;
@Override
@Override
public
List
<
Contract
>
shareIncomeList
(
User
loginAccount
,
String
startDate
,
String
endDate
,
String
platform
,
String
bodyCode
,
String
serchName
)
{
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 {
...
@@ -112,10 +125,17 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
switch
(
ContractBranchUtil
.
getValue
(
platform
)){
switch
(
ContractBranchUtil
.
getValue
(
platform
)){
case
"type_one"
:
this
.
shareIncome4Contract
(
v
,
start
,
end
);
break
;
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
;
default
:
this
.
shareIncome4Contract
(
v
,
start
,
end
);
break
;
}
}
v
.
setMyBodyName
(
bodiesNameMap
.
get
(
v
.
getMyBodyCode
()));
v
.
setMyBodyName
(
bodiesNameMap
.
get
(
v
.
getMyBodyCode
()));
if
(
v
.
getBarrioId
()!=
null
)
if
(
v
.
getBarrioId
()!=
null
)
v
.
setBarrioName
(
barrioCitiesNameMap
.
get
(
barrioCitiesNameMap
.
get
(
v
.
getBarrioId
()).
getParentId
()).
getName
());
v
.
setBarrioName
(
barrioCitiesNameMap
.
get
(
barrioCitiesNameMap
.
get
(
v
.
getBarrioId
()).
getParentId
()).
getName
());
...
@@ -125,12 +145,311 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -125,12 +145,311 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
return
contracts
;
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
)
{
public
void
shareIncome4Contract
(
Contract
contract
,
DateTime
start
,
DateTime
end
)
{
DateTime
[]
selected
=
new
DateTime
[]{
DateTime
[]
selected
=
new
DateTime
[]{
start
,
start
,
end
};
end
};
//用户筛选开始/结束日期
DateTime
[]
contractPart
=
new
DateTime
[]{
DateTime
[]
contractPart
=
new
DateTime
[]{
new
DateTime
(
contract
.
getStartDate
()),
new
DateTime
(
contract
.
getStartDate
()),
new
DateTime
(
contract
.
getEndDate
())};
//合同开始结束 时间
new
DateTime
(
contract
.
getEndDate
())};
//合同开始结束 时间
...
@@ -287,6 +606,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -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
]))
{
if
(
checkTwoTime
(
contractPart
[
1
],
selected
[
1
]))
{
//最后一日分摊金计算处理
//最后一日分摊金计算处理
Long
lastDay
;
Long
lastDay
;
...
@@ -335,7 +660,6 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -335,7 +660,6 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if
(
checkTwoTime
(
suspendDate
,
cancelDate
))
{
if
(
checkTwoTime
(
suspendDate
,
cancelDate
))
{
adjustmentFund
=
0L
;
adjustmentFund
=
0L
;
}
else
{
}
else
{
adjustmentFund
=
shareMultiply
(
new
BigDecimal
((
getDayRange
(
cancelDate
,
suspendDate
)
+
1
)
*
-
1
),
dayShareIncome
,
0
);
adjustmentFund
=
shareMultiply
(
new
BigDecimal
((
getDayRange
(
cancelDate
,
suspendDate
)
+
1
)
*
-
1
),
dayShareIncome
,
0
);
}
}
...
@@ -348,8 +672,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -348,8 +672,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if
(
checkTwoTime
(
selected
[
0
],
cancelDate
)
&&
checkTwoTime
(
cancelDate
,
selected
[
1
]))
{
if
(
checkTwoTime
(
selected
[
0
],
cancelDate
)
&&
checkTwoTime
(
cancelDate
,
selected
[
1
]))
{
contract
.
setAdjustmentFund
(
adjustmentFund
);
contract
.
setAdjustmentFund
(
adjustmentFund
);
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
cancelDate
)
+
1
),
dayShareIncome
,
0
));
}
else
{
}
else
{
contract
.
setAdjustmentFund
(
0L
);
contract
.
setAdjustmentFund
(
0L
);
contract
.
setIncomeGross
(
shareMultiply
(
new
BigDecimal
(
getDayRange
(
contractPart
[
0
],
selected
[
1
])
+
1
),
dayShareIncome
,
0
));
}
}
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
...
@@ -391,7 +717,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -391,7 +717,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
}
else
{
}
else
{
contract
.
setAdjustmentFund
(
0L
);
contract
.
setAdjustmentFund
(
0L
);
}
}
contract
.
setIncomeGross
(
0L
);
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
contract
.
setIncomeShareAll
(
contract
.
getIntervaIncomeShare
()
+
contract
.
getAdjustmentFund
());
return
contract
;
return
contract
;
}
}
...
@@ -416,13 +742,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
...
@@ -416,13 +742,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
}
}
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
DateTime
dateTime
=
new
DateTime
(
"2020-09-25"
);
//2019.7.24-2020.7.23
DateTime
creatTime
=
new
DateTime
(
"2020-10-11"
);
DateTime
[]
middlePoiont
=
new
DateTime
[]{
new
DateTime
(
"2019-12-31"
),
new
DateTime
(
"2020-01-01"
)};
System
.
out
.
println
(
dateTime
.
isBefore
(
creatTime
));
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
());
}
}
...
...
This diff is collapsed.
Click to expand it.
src/main/java/tkio/repository/AppRepository.java
View file @
d68ef5d3
...
@@ -18,4 +18,7 @@ public interface AppRepository extends JpaRepository<App, Long> {
...
@@ -18,4 +18,7 @@ public interface AppRepository extends JpaRepository<App, Long> {
@Query
(
value
=
"select appkey from app where account in ?1"
,
nativeQuery
=
true
)
@Query
(
value
=
"select appkey from app where account in ?1"
,
nativeQuery
=
true
)
List
<
String
>
findAppkeys
(
List
<
Long
>
accountId
);
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
);
}
}
This diff is collapsed.
Click to expand it.
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