Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-csf
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-csf
Commits
df5c75e6
Commit
df5c75e6
authored
Apr 21, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
3c18106b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
122 additions
and
47 deletions
+122
-47
.idea/encodings.xml
+1
-0
yd-csf-api/src/main/java/com/yd/csf/api/async/ApiExpectedFortuneAsyncService.java
+121
-47
No files found.
.idea/encodings.xml
View file @
df5c75e6
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"Encoding"
>
<file
url=
"file://$PROJECT_DIR$/src/main/java"
charset=
"UTF-8"
/>
<file
url=
"file://$PROJECT_DIR$/yd-csf-api/src/main/java"
charset=
"UTF-8"
/>
<file
url=
"file://$PROJECT_DIR$/yd-csf-api/src/main/resources"
charset=
"UTF-8"
/>
<file
url=
"file://$PROJECT_DIR$/yd-csf-feign/src/main/java"
charset=
"UTF-8"
/>
...
...
yd-csf-api/src/main/java/com/yd/csf/api/async/ApiExpectedFortuneAsyncService.java
View file @
df5c75e6
...
...
@@ -25,6 +25,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.util.*
;
import
java.util.function.Function
;
...
...
@@ -152,43 +153,60 @@ public class ApiExpectedFortuneAsyncService {
agentAccumulatedFyc
=
filterList
.
get
(
0
);
}
//积分解冻时间
LocalDateTime
thawingTime
=
resDto
.
getThawingTime
();
for
(
AlgorithmResDto
algorithmResDto
:
resDto
.
getAlgorithmResDtoList
())
{
CalmTask
calmTask
=
new
CalmTask
();
//保单号
calmTask
.
setPolicyNo
(
policyNo
);
//新单跟进唯一业务ID
calmTask
.
setPolicyBizId
(
policyFollow
.
getPolicyBizId
());
//执行时间(定时任务执行时间) = 积分解冻时间
calmTask
.
setExecutionTime
(
resDto
.
getThawingTime
());
//冷静期天数
calmTask
.
setCoolingOffDays
(
policyFollow
.
getCoolingOffDays
());
//保单冷静期定时任务表唯一业务ID
calmTask
.
setCalmTaskBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_CALM_TASK
.
getCode
()));
//执行状态(0-未执行,1-执行中,2-已执行,3-执行异常)
//0-未执行
calmTask
.
setExecutionStatus
(
"0"
);
//转介人名称
calmTask
.
setBrokerName
(
resDto
.
getClientUserName
());
//转介人业务id
calmTask
.
setBrokerBizId
(
resDto
.
getClientUserBizId
());
//佣金项目
calmTask
.
setCommissionName
(
algorithmResDto
.
getItemName
());
//发佣期数
calmTask
.
setFortunePeriod
(
resDto
.
getFortunePeriod
());
//佣金值(积分值)
calmTask
.
setFyc
(
algorithmResDto
.
getCalculatedValue
());
//冷静期结束日期
calmTask
.
setCoolingOffEndDate
(
policyFollow
.
getCoolingOffEndDate
());
//业务员积分明细表唯一业务ID
String
detailFycBizId
=
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_AGENT_DETAIL_FYC
.
getCode
());
calmTask
.
setDetailFycBizId
(
detailFycBizId
);
iCalmTaskService
.
saveOrUpdate
(
calmTask
);
//新增积分明细
addAgentDetailFyc
(
resDto
,
policyNo
,
algorithmResDto
,
detailFycBizId
,
agentAccumulatedFyc
);
//创建XXL-Job定时任务
xxlJobService
.
addScheduleJob
(
calmTask
.
getCalmTaskBizId
(),
"冷静期定时发送任务-"
,
"calmSendJobHandler"
,
Date
.
from
(
resDto
.
getThawingTime
().
atZone
(
ZoneId
.
systemDefault
()).
toInstant
()));
if
(
thawingTime
!=
null
&&
thawingTime
.
compareTo
(
LocalDateTime
.
now
())
<=
0
)
{
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否小于等于当前时间(年月日时分秒)
//如果小于等于当前时间,不用走定时任务来解冻积分,应该及时生效积分
//业务员积分明细表唯一业务ID
String
detailFycBizId
=
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_AGENT_DETAIL_FYC
.
getCode
());
//新增积分明细
//status 定时任务0-冻结。非定时任务1-生效
addAgentDetailFyc
(
resDto
,
policyNo
,
algorithmResDto
,
detailFycBizId
,
agentAccumulatedFyc
,
1
);
}
else
if
(
thawingTime
!=
null
&&
thawingTime
.
compareTo
(
LocalDateTime
.
now
())
>
0
){
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否大于当前时间(年月日时分秒)
//如果大于当前时间,走定时任务来解冻积分。
CalmTask
calmTask
=
new
CalmTask
();
//保单号
calmTask
.
setPolicyNo
(
policyNo
);
//新单跟进唯一业务ID
calmTask
.
setPolicyBizId
(
policyFollow
.
getPolicyBizId
());
//执行时间(定时任务执行时间) = 积分解冻时间
calmTask
.
setExecutionTime
(
resDto
.
getThawingTime
());
//冷静期天数
calmTask
.
setCoolingOffDays
(
policyFollow
.
getCoolingOffDays
());
//保单冷静期定时任务表唯一业务ID
calmTask
.
setCalmTaskBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_CALM_TASK
.
getCode
()));
//执行状态(0-未执行,1-执行中,2-已执行,3-执行异常)
//0-未执行
calmTask
.
setExecutionStatus
(
"0"
);
//转介人名称
calmTask
.
setBrokerName
(
resDto
.
getClientUserName
());
//转介人业务id
calmTask
.
setBrokerBizId
(
resDto
.
getClientUserBizId
());
//佣金项目
calmTask
.
setCommissionName
(
algorithmResDto
.
getItemName
());
//发佣期数
calmTask
.
setFortunePeriod
(
resDto
.
getFortunePeriod
());
//佣金值(积分值)
calmTask
.
setFyc
(
algorithmResDto
.
getCalculatedValue
());
//冷静期结束日期
calmTask
.
setCoolingOffEndDate
(
policyFollow
.
getCoolingOffEndDate
());
//业务员积分明细表唯一业务ID
String
detailFycBizId
=
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_AGENT_DETAIL_FYC
.
getCode
());
calmTask
.
setDetailFycBizId
(
detailFycBizId
);
iCalmTaskService
.
saveOrUpdate
(
calmTask
);
//新增积分明细
//status 定时任务0-冻结。非定时任务1-生效
addAgentDetailFyc
(
resDto
,
policyNo
,
algorithmResDto
,
detailFycBizId
,
agentAccumulatedFyc
,
0
);
//创建XXL-Job定时任务
xxlJobService
.
addScheduleJob
(
calmTask
.
getCalmTaskBizId
(),
"冷静期定时发送任务-"
,
"calmSendJobHandler"
,
Date
.
from
(
resDto
.
getThawingTime
().
atZone
(
ZoneId
.
systemDefault
()).
toInstant
()));
}
}
}
...
...
@@ -204,12 +222,14 @@ public class ApiExpectedFortuneAsyncService {
* @param algorithmResDto
* @param detailFycBizId
* @param agentAccumulatedFyc
* @param status 定时任务0-冻结。非定时任务1-生效
*/
public
void
addAgentDetailFyc
(
AlgorithmCollectResDto
resDto
,
String
policyNo
,
AlgorithmResDto
algorithmResDto
,
String
detailFycBizId
,
AgentAccumulatedFyc
agentAccumulatedFyc
)
{
AgentAccumulatedFyc
agentAccumulatedFyc
,
Integer
status
)
{
//新增积分明细
AgentDetailFyc
agentDetailFyc
=
new
AgentDetailFyc
();
//积分来源类型
...
...
@@ -224,7 +244,7 @@ public class ApiExpectedFortuneAsyncService {
agentDetailFyc
.
setDetailFycBizId
(
detailFycBizId
);
//状态(0:停用(冻结) 1:启用(生效))
//冻结
agentDetailFyc
.
setStatus
(
0
);
agentDetailFyc
.
setStatus
(
status
);
//积分解冻时间
agentDetailFyc
.
setThawingTime
(
resDto
.
getThawingTime
());
//变化前的业务员总FYC积分(已生效+未生效)
...
...
@@ -254,51 +274,105 @@ public class ApiExpectedFortuneAsyncService {
));
// 构建每个转介人本次的积分增量 Map
// 未生效
累计积分增量
Map
<
String
,
BigDecimal
>
no
Effect
DeltaMap
=
new
HashMap
<>();
// 未生效首期佣金增量
// 未生效
个人累计积分增量(定时(冻结))
Map
<
String
,
BigDecimal
>
noDeltaMap
=
new
HashMap
<>();
// 未生效首期佣金增量
(定时(冻结))
Map
<
String
,
BigDecimal
>
noFirstCommissionDeltaMap
=
new
HashMap
<>();
// 未生效非首期佣金增量
// 未生效非首期佣金增量
(定时(冻结))
Map
<
String
,
BigDecimal
>
noRycDeltaMap
=
new
HashMap
<>();
// 已生效个人累计积分增量(非定时(生效))
Map
<
String
,
BigDecimal
>
deltaMap
=
new
HashMap
<>();
// 已生效首期佣金增量(非定时(生效))
Map
<
String
,
BigDecimal
>
firstCommissionDeltaMap
=
new
HashMap
<>();
// 已生效非首期佣金增量(非定时(生效))
Map
<
String
,
BigDecimal
>
rycDeltaMap
=
new
HashMap
<>();
for
(
AlgorithmCollectResDto
resDto
:
filteredCollectResDtos
)
{
String
agentId
=
resDto
.
getClientUserBizId
();
Integer
fortunePeriod
=
resDto
.
getFortunePeriod
();
//积分解冻时间
LocalDateTime
thawingTime
=
resDto
.
getThawingTime
();
for
(
AlgorithmResDto
algorithmResDto
:
resDto
.
getAlgorithmResDtoList
())
{
BigDecimal
val
=
algorithmResDto
.
getCalculatedValue
();
if
(
val
==
null
)
continue
;
// 累加 noEffect 增量
noEffectDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
if
(
thawingTime
!=
null
&&
thawingTime
.
compareTo
(
LocalDateTime
.
now
())
<=
0
)
{
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否小于等于当前时间(年月日时分秒)
//如果小于等于当前时间,不用走定时任务来解冻积分,应该及时生效积分
// 已生效个人累计积分增量(非定时(生效))
deltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
// 根据期数判断佣金类型
if
(
fortunePeriod
!=
null
&&
fortunePeriod
==
1
)
{
//已生效首期佣金增量(非定时(生效))
firstCommissionDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
}
else
{
//未生效非首期佣金增量(定时(冻结))
noRycDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
//已生效非首期佣金增量(非定时(生效))
rycDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
}
}
else
if
(
thawingTime
!=
null
&&
thawingTime
.
compareTo
(
LocalDateTime
.
now
())
>
0
){
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否大于当前时间(年月日时分秒)
//如果大于当前时间,走定时任务来解冻积分。
// 未生效个人累计积分增量(定时(冻结))
noDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
}
// 根据期数判断佣金类型
if
(
fortunePeriod
!=
null
&&
fortunePeriod
==
1
)
{
//未生效首期佣金增量(定时(冻结))
noFirstCommissionDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
//已生效首期佣金增量(非定时(生效))
firstCommissionDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
}
else
{
//未生效非首期佣金增量(定时(冻结))
noRycDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
//已生效非首期佣金增量(非定时(生效))
rycDeltaMap
.
merge
(
agentId
,
val
,
BigDecimal:
:
add
);
}
}
}
// 更新或新建累计积分记录
List
<
AgentAccumulatedFyc
>
toUpdateList
=
new
ArrayList
<>();
for
(
String
agentId
:
noEffectDeltaMap
.
keySet
())
{
BigDecimal
noEffectDelta
=
noEffectDeltaMap
.
get
(
agentId
);
for
(
String
agentId
:
deltaMap
.
keySet
())
{
//个人累计积分增量(定时(冻结)和 未定时(生效)场景)
BigDecimal
delta
=
deltaMap
.
get
(
agentId
);
//未生效首期佣金增量(定时(冻结))
BigDecimal
noFirstDelta
=
noFirstCommissionDeltaMap
.
getOrDefault
(
agentId
,
BigDecimal
.
ZERO
);
//未生效非首期佣金增量(定时(冻结))
BigDecimal
noRycDelta
=
noRycDeltaMap
.
getOrDefault
(
agentId
,
BigDecimal
.
ZERO
);
//已生效首期佣金增量(非定时(生效))
BigDecimal
firstDelta
=
firstCommissionDeltaMap
.
getOrDefault
(
agentId
,
BigDecimal
.
ZERO
);
//已生效非首期佣金增量(非定时(生效))
BigDecimal
rycDelta
=
rycDeltaMap
.
getOrDefault
(
agentId
,
BigDecimal
.
ZERO
);
AgentAccumulatedFyc
fyc
=
fycMap
.
get
(
agentId
);
if
(
fyc
==
null
)
{
continue
;
}
// 应用增量
//未生效累计积分(不限业务场景)
fyc
.
setNoEffect
(
fyc
.
getNoEffect
().
add
(
noEffectD
elta
));
fyc
.
setNoEffect
(
fyc
.
getNoEffect
().
add
(
d
elta
));
//未生效累计首期佣金积分值(佣金场景)
fyc
.
setNoFirstCommission
(
fyc
.
getNoFirstCommission
().
add
(
noFirstDelta
));
//未生效累计非首期佣金积分值(佣金场景)
fyc
.
setNoRyc
(
fyc
.
getNoRyc
().
add
(
noRycDelta
));
//已生效累计积分(不限业务场景)
fyc
.
setNoEffect
(
fyc
.
getNoEffect
().
add
(
delta
));
//已生效累计首期佣金积分值(佣金场景)
fyc
.
setNoFirstCommission
(
fyc
.
getNoFirstCommission
().
add
(
noFirstDelta
));
//已生效累计非首期佣金积分值(佣金场景)
fyc
.
setNoRyc
(
fyc
.
getNoRyc
().
add
(
noRycDelta
));
//累计积分 = 未生效累计积分 + 已生效累计积分
fyc
.
setTotalFyc
(
fyc
.
getNoEffect
().
add
(
fyc
.
getEffect
()));
...
...
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