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
f23d9498
Commit
f23d9498
authored
Jan 23, 2026
by
jianan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新单跟进v2
parent
c46b3971
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
160 additions
and
3 deletions
+160
-3
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
+3
-3
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
+13
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
+144
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
View file @
f23d9498
...
...
@@ -723,11 +723,11 @@ public class ApiPolicyFollowController {
// 设置ThreadLocal Token
FeignTokenInterceptor
.
setThreadLocalToken
(
token
);
// 调用 ApiExpectedFortuneService 的 generate
WithLogAndRedis(
包含日志和Redis处理)
// 调用 ApiExpectedFortuneService 的 generate
SyncWithLogAndRedis(同步版本,
包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest
generateExpectedFortuneRequest
=
new
ApiGenerateExpectedFortuneRequest
();
generateExpectedFortuneRequest
.
setPolicyNo
(
policyNo
);
log
.
info
(
"生成预计发佣generateWithLogAndRedis——>PolicyNo:{}"
,
policyNo
);
Result
<
ApiGenerateExpectedFortuneResponse
>
result
=
apiExpectedFortuneService
.
generateWithLogAndRedis
(
generateExpectedFortuneRequest
);
log
.
info
(
"生成预计发佣generate
Sync
WithLogAndRedis——>PolicyNo:{}"
,
policyNo
);
Result
<
ApiGenerateExpectedFortuneResponse
>
result
=
apiExpectedFortuneService
.
generate
Sync
WithLogAndRedis
(
generateExpectedFortuneRequest
);
if
(
result
==
null
||
result
.
getCode
()
!=
200
)
{
log
.
error
(
"新单跟进-同步生成预计出账记录失败:保单号={}, 响应结果={}"
,
policyNo
,
result
);
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
View file @
f23d9498
...
...
@@ -32,11 +32,24 @@ public interface ApiExpectedFortuneService {
*/
Result
<
ApiGenerateExpectedFortuneResponse
>
generateWithLogAndRedis
(
ApiGenerateExpectedFortuneRequest
request
);
Result
<
ApiGenerateExpectedFortuneResponse
>
generateSyncWithLogAndRedis
(
ApiGenerateExpectedFortuneRequest
request
);
@Async
(
"asyncQueryExecutor"
)
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
);
/**
* 同步执行预计发佣生成
* @param queryPolicyAndBrokerDtoList 保单和转介人列表
* @param commissionRuleBindingList 基本法绑定列表
* @param policyNo 保单号
* @return 执行结果
*/
Result
executeSync
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
);
Result
<
IPage
<
ApiExpectedFortunePageResponse
>>
page
(
ApiExpectedFortunePageRequest
request
);
QueryWrapper
<
ExpectedFortune
>
getQueryWrapper
(
ApiExpectedFortunePageRequest
request
);
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
View file @
f23d9498
...
...
@@ -142,6 +142,51 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
}
/**
* 同步生成预计发佣
*
* @param request
* @return
*/
public
Result
<
ApiGenerateExpectedFortuneResponse
>
generateSync
(
ApiGenerateExpectedFortuneRequest
request
)
{
//查询当前保单号是否正在执行预计发佣的缓存,有值就说明正在执行,无值说明执行完毕或者没有执行。
String
value
=
redisUtil
.
getCacheObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
request
.
getPolicyNo
());
if
(
StringUtil
.
isNotBlank
(
value
))
{
//有值正在执行,提示
return
Result
.
fail
(
"生成预计发佣正在执行中,无需再次执行"
);
}
else
{
//无值设置值,表示正在执行
redisUtil
.
setCacheObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
request
.
getPolicyNo
(),
request
.
getPolicyNo
());
}
List
<
ExpectedFortune
>
list
=
iExpectedFortuneService
.
queryList
(
request
.
getPolicyNo
());
if
(!
CollectionUtils
.
isEmpty
(
list
))
{
throw
new
BusinessException
(
"当前保单已经生成过预计发佣数据,无需再次生成"
);
}
//根据保单号查询保单和转介人列表信息
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
=
policyService
.
queryPolicyBrokerList
(
request
.
getPolicyNo
());
if
(
CollectionUtils
.
isEmpty
(
queryPolicyAndBrokerDtoList
))
{
throw
new
BusinessException
(
"保单和转介人信息不存在"
);
}
//查询所有绑定基本法的业务员(客户端用户表用户), 计算业务员绑定的所有基本法对应的计算值, 新增积分明细和发佣记录
List
<
CommissionRuleBinding
>
commissionRuleBindingList
=
new
ArrayList
<>();
//根据租户ID和项目ID查询客户端用户ID列表
Result
<
List
<
String
>>
result
=
apiClientUserFeignClient
.
clientUserBizIdList
(
TenantEnum
.
YD
.
getTenantBizId
(),
ProjectEnum
.
CSF_MINI_PROGRAM
.
getProjectBizId
());
if
(!
CollectionUtils
.
isEmpty
(
result
.
getData
()))
{
commissionRuleBindingList
=
iCommissionRuleBindingService
.
queryList
(
CommissionRuleBindingDto
.
builder
()
.
targetIdList
(
result
.
getData
())
.
build
());
}
if
(
CollectionUtils
.
isEmpty
(
commissionRuleBindingList
))
{
throw
new
BusinessException
(
"绑定基本法数据不存在"
);
}
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
executeSync
(
queryPolicyAndBrokerDtoList
,
commissionRuleBindingList
,
request
.
getPolicyNo
());
return
Result
.
success
(
null
,
"生成预计发佣成功"
);
}
/**
* 生成预计发佣(包含日志记录和Redis处理)
* 用于内部服务调用,会自动保存日志和异常时销毁Redis缓存
*
...
...
@@ -173,6 +218,37 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
}
/**
* 同步生成预计发佣(包含日志记录和Redis处理)
* 用于需要同步等待完成的场景
*
* @param request
* @return
*/
@Override
public
Result
<
ApiGenerateExpectedFortuneResponse
>
generateSyncWithLogAndRedis
(
ApiGenerateExpectedFortuneRequest
request
)
{
try
{
Result
<
ApiGenerateExpectedFortuneResponse
>
result
=
generateSync
(
request
);
// 保存预计发佣日志记录(成功)
apiExpectedFortuneLogService
.
saveExpectedFortuneLog
(
ApiExpectedFortuneLogDto
.
builder
()
.
errorMsg
(
result
.
getMsg
())
.
policyNo
(
request
.
getPolicyNo
())
.
status
(
2
)
.
build
());
return
result
;
}
catch
(
Exception
e
)
{
// 抛出异常,销毁redis缓存
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
request
.
getPolicyNo
());
// 保存预计发佣日志记录(失败)
apiExpectedFortuneLogService
.
saveExpectedFortuneLog
(
ApiExpectedFortuneLogDto
.
builder
()
.
errorMsg
(
e
.
getMessage
())
.
policyNo
(
request
.
getPolicyNo
())
.
status
(
1
)
.
build
());
throw
new
BusinessException
(
e
.
getMessage
());
}
}
/**
* 异步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
*
* @param queryPolicyAndBrokerDtoList
...
...
@@ -241,6 +317,74 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
});
}
/**
* 同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
*
* @param queryPolicyAndBrokerDtoList
* @param commissionRuleBindingList
* @param policyNo
* @return
*/
public
Result
executeSync
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
)
{
// 使用编程式事务,确保方法内的事务一致性
return
transactionTemplate
.
execute
(
status
->
{
try
{
for
(
QueryPolicyAndBrokerDto
brokerDto
:
queryPolicyAndBrokerDtoList
)
{
Integer
paymentTerm
=
brokerDto
.
getPaymentTerm
();
if
(
Objects
.
isNull
(
paymentTerm
))
{
throw
new
BusinessException
(
"保单的供款年期不存在"
);
}
for
(
int
i
=
1
;
i
<=
paymentTerm
;
i
++)
{
executeBilling
(
ExecuteBillingDto
.
builder
()
.
name
(
brokerDto
.
getBrokerName
())
.
policyAndBrokerDto
(
brokerDto
)
.
issueNumber
(
i
)
.
build
());
for
(
CommissionRuleBinding
binding
:
commissionRuleBindingList
)
{
executeReward
(
ExecuteBillingDto
.
builder
()
.
clientUserBizId
(
binding
.
getTargetId
())
.
name
(
binding
.
getTargetName
())
.
policyAndBrokerDto
(
brokerDto
)
.
issueNumber
(
i
)
.
build
());
}
}
}
//批量设置应付款编号
updatePayableNoBatch
(
policyNo
);
//执行成功完毕,也要销毁redis缓存
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
//保存预计发佣日志记录
//成功日志
apiExpectedFortuneLogService
.
saveExpectedFortuneLog
(
ApiExpectedFortuneLogDto
.
builder
()
.
errorMsg
(
""
)
.
policyNo
(
policyNo
)
.
status
(
0
)
.
build
());
return
Result
.
success
();
}
catch
(
Exception
e
)
{
//抛出异常,销毁redis缓存
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
status
.
setRollbackOnly
();
// 标记回滚
log
.
error
(
"同步执行预计发佣失败,已回滚所有操作"
,
e
);
//保存预计发佣日志记录
apiExpectedFortuneLogService
.
saveExpectedFortuneLog
(
ApiExpectedFortuneLogDto
.
builder
()
.
errorMsg
(
e
.
getMessage
())
.
policyNo
(
policyNo
)
.
status
(
1
)
.
build
());
throw
new
BusinessException
(
"同步处理失败: "
+
e
.
getMessage
());
}
});
}
private
void
updatePayableNoBatch
(
String
policyNo
)
{
// 查询最新一条有 payableNo 记录
ExpectedFortune
latest
=
iExpectedFortuneService
.
getOne
(
...
...
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