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
a0ec9de3
Commit
a0ec9de3
authored
Jan 20, 2026
by
jianan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新单跟进v2
parent
591181d8
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
163 additions
and
6 deletions
+163
-6
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAppointmentServiceImpl.java
+4
-3
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyProductInfo.java
+5
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
+1
-1
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
+146
-2
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyServiceImpl.java
+7
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAppointmentServiceImpl.java
View file @
a0ec9de3
...
...
@@ -689,7 +689,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
&&
!
response
.
getApiAppointmentInfoDto
().
getUserSignDtoList
().
isEmpty
())
{
ApiAppointmentUserSignDto
firstSigner
=
response
.
getApiAppointmentInfoDto
().
getUserSignDtoList
().
get
(
0
);
follow
.
setSigner
(
firstSigner
.
getName
());
follow
.
setSignerBizId
(
firstSigner
.
get
User
BizId
());
follow
.
setSignerBizId
(
firstSigner
.
get
AppointmentUserSign
BizId
());
follow
.
setSignerRegNo
(
firstSigner
.
getPracticeCode
());
}
...
...
@@ -741,10 +741,11 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
policyFollowService
.
saveOrUpdate
(
follow
);
// 同步保存保单产品计划附加险
savePolicyAdditional
(
apiProductPlanAdditionalInfoDtoList
,
policyBizId
);
// // 同步保存保单(产品计划)
// savePolicy(productPlan, apiPolicyholderInfoDto, apiInsurantInfoDto, apiProductPlanMainInfoDto, policyBizId, policyTransfer);
// // 同步保存保单产品计划附加险
// savePolicyAdditional(apiProductPlanAdditionalInfoDtoList, policyBizId);
// // 同步保存保单投保人
// savePolicyPolicyholder(apiPolicyholderInfoDto, policyBizId);
// // 同步保存保单受保人
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyProductInfo.java
View file @
a0ec9de3
...
...
@@ -49,6 +49,11 @@ public class PolicyProductInfo {
private
String
reconciliationCompanyBizId
;
/**
* 对账公司编码
*/
private
String
reconciliationCompanyCode
;
/**
* 产品计划类型
*/
private
String
productPlanType
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
View file @
a0ec9de3
...
...
@@ -786,7 +786,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
// 关联预计来佣信息
CommissionExpected
expected
=
getCommissionExpectedBizIdBatch
(
request
,
policyNoSet
,
commission
);
if
(
expected
!=
null
)
{
if
(
expected
!=
null
&&
"R"
.
equals
(
expected
.
getCommissionBizType
())
)
{
// 本次入账比例
commission
.
setCurrentCommissionRatio
(
calculateCurrentCommissionRatio
(
commission
.
getPremium
(),
commission
.
getAmount
(),
commission
.
getCurrency
(),
commission
.
getExchangeRate
(),
expected
));
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
View file @
a0ec9de3
...
...
@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateField;
import
cn.hutool.core.date.DateUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yd.auth.core.dto.AuthUserDto
;
...
...
@@ -13,7 +14,10 @@ import com.yd.auth.core.utils.SecurityUtil;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.common.utils.RandomStringGenerator
;
import
com.yd.csf.feign.client.expectedfortune.ApiExpectedFortuneFeignClient
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.service.common.ErrorCode
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.FnaStatusEnum
;
...
...
@@ -26,6 +30,9 @@ import com.yd.csf.service.utils.GSONUtil;
import
com.yd.csf.service.vo.PolicyAdditionalVO
;
import
com.yd.csf.service.vo.PolicyFollowDetailVO
;
import
com.yd.csf.service.vo.PolicyFollowVO
;
import
com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient
;
import
com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest
;
import
com.yd.insurance.base.feign.response.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
...
...
@@ -37,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
import
javax.annotation.Resource
;
import
java.util.*
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -79,6 +87,10 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
private
IAppointmentService
appointmentService
;
@Resource
private
FnaService
fnaService
;
@Resource
private
ApiInsuranceReconciliationCompanyFeignClient
apiInsuranceReconciliationCompanyFeignClient
;
@Resource
private
ApiExpectedFortuneFeignClient
apiExpectedFortuneFeignClient
;
@Override
public
PolicyFollow
getByPolicyBizId
(
String
policyBizId
)
{
...
...
@@ -450,9 +462,72 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policyFollow
.
setUpdaterId
(
loginUserId
);
policyFollowService
.
updateById
(
policyFollow
);
// 如果是生效状态,同步
到保单库
// 如果是生效状态,同步
保单、预计发佣、预计来佣
if
(
PolicyFollowStatusEnum
.
EFFECTIVE
.
equals
(
policyFollowStatusEnum
))
{
addToPolicy
(
Collections
.
singletonList
(
policyFollow
.
getPolicyNo
()));
Policy
policy
=
new
Policy
();
BeanUtils
.
copyProperties
(
policyFollow
,
policy
,
"id"
);
if
(
ObjectUtils
.
isEmpty
(
policy
.
getInsuranceCompany
())
||
ObjectUtils
.
isEmpty
(
policy
.
getReconciliationCompany
()))
{
// 获取保单产品信息,填充对账公司相关字段
PolicyProductInfo
productInfo
=
getPolicyProductInfo
(
policyFollow
.
getProductLaunchBizId
());
if
(
productInfo
!=
null
)
{
policy
.
setInsuranceCompany
(
productInfo
.
getInsuranceCompany
());
policy
.
setInsuranceCompanyBizId
(
productInfo
.
getInsuranceCompanyBizId
());
policy
.
setReconciliationCompany
(
productInfo
.
getReconciliationCompany
());
policy
.
setReconciliationCompanyBizId
(
productInfo
.
getReconciliationCompanyBizId
());
// 设置对账公司编码
String
reconciliationCompanyCode
=
productInfo
.
getReconciliationCompanyCode
();
if
(
StringUtils
.
isBlank
(
reconciliationCompanyCode
))
{
// 如果产品信息中没有编码,则调用对账公司 feignclient
ApiInsuranceReconciliationCompanyPageRequest
reconciliationCompanyPageRequest
=
new
ApiInsuranceReconciliationCompanyPageRequest
();
reconciliationCompanyPageRequest
.
setPageNo
(
1
);
reconciliationCompanyPageRequest
.
setPageSize
(
999
);
Result
iPageResult
=
apiInsuranceReconciliationCompanyFeignClient
.
page
(
reconciliationCompanyPageRequest
);
// 解析响应获取对账公司编码
if
(
iPageResult
!=
null
&&
iPageResult
.
getCode
()
==
200
)
{
IPage
<
ApiInsuranceReconciliationCompanyPageResponse
>
page
=
(
IPage
<
ApiInsuranceReconciliationCompanyPageResponse
>)
iPageResult
.
getData
();
if
(
page
!=
null
&&
CollectionUtils
.
isNotEmpty
(
page
.
getRecords
()))
{
// 遍历分页结果,找到匹配的对账公司
String
targetBizId
=
productInfo
.
getReconciliationCompanyBizId
();
for
(
ApiInsuranceReconciliationCompanyPageResponse
response
:
page
.
getRecords
())
{
if
(
response
!=
null
&&
targetBizId
.
equals
(
response
.
getReconciliationCompanyBizId
()))
{
// 尝试从响应中获取对账公司编码
reconciliationCompanyCode
=
response
.
getCode
();
log
.
info
(
"从对账公司服务获取编码: reconciliationCompanyBizId={}, code={}"
,
targetBizId
,
reconciliationCompanyCode
);
break
;
// 找到后跳出循环
}
}
}
}
// 如果仍然没有获取到编码,抛异常
if
(
StringUtils
.
isBlank
(
reconciliationCompanyCode
))
{
throw
new
BusinessException
(
"未能从对账公司服务获取编码,请补充,当前对账公司:"
+
productInfo
.
getReconciliationCompany
());
}
}
policy
.
setReconciliationCompanyCode
(
reconciliationCompanyCode
);
}
}
// 保存保单
policyService
.
save
(
policy
);
// 根据保单生成预计入账记录
generateExpectedCommission
(
policyFollow
,
policy
);
// 异步:根据保单生成预计出账记录
CompletableFuture
.
runAsync
(()
->
{
try
{
ApiGenerateExpectedFortuneRequest
getExpectedFortuneRequest
=
new
ApiGenerateExpectedFortuneRequest
();
getExpectedFortuneRequest
.
setPolicyNo
(
policyFollow
.
getPolicyNo
());
apiExpectedFortuneFeignClient
.
generate
(
getExpectedFortuneRequest
);
}
catch
(
Exception
e
)
{
log
.
error
(
"新单跟进-异步生成预计出账记录失败: {}"
,
e
.
getMessage
());
}
});
}
// 新增新单状态记录
...
...
@@ -724,5 +799,74 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return
policyBrokerService
.
saveBatch
(
brokerList
);
}
/**
* 根据保单生成预计入账记录
*
* @param policyFollow 保单跟进信息
*/
private
void
generateExpectedCommission
(
PolicyFollow
policyFollow
,
Policy
policy
)
{
if
(
policyFollow
==
null
)
{
return
;
}
// 获取必要的参数
String
policyNo
=
policyFollow
.
getPolicyNo
();
String
productLaunchBizId
=
policyFollow
.
getProductLaunchBizId
();
String
insuranceCompanyBizId
=
policyFollow
.
getInsuranceCompanyBizId
();
String
reconciliationCompany
=
policy
.
getReconciliationCompany
();
String
reconciliationCompanyCode
=
policy
.
getReconciliationCompanyCode
();
String
reconciliationCompanyBizId
=
policy
.
getReconciliationCompanyBizId
();
// 调用预计入账服务生成记录
commissionExpectedService
.
getExpectedCommissionByProductlaunchId
(
policyNo
,
productLaunchBizId
,
insuranceCompanyBizId
,
reconciliationCompany
,
reconciliationCompanyCode
,
reconciliationCompanyBizId
);
}
/**
* 获取单个保单产品信息
*
* @param productLaunchBizId 产品上架业务ID
* @return 产品信息,如果未找到则返回 null
*/
private
PolicyProductInfo
getPolicyProductInfo
(
String
productLaunchBizId
)
{
if
(
StringUtils
.
isBlank
(
productLaunchBizId
))
{
log
.
warn
(
"产品上架业务ID为空,无法获取产品信息"
);
return
null
;
}
try
{
// 调用 PolicyService 的批量查询方法,传入单个 ID
Map
<
String
,
PolicyProductInfo
>
productInfoMap
=
policyService
.
getPolicyProductInfoMap
(
Collections
.
singletonList
(
productLaunchBizId
)
);
if
(
productInfoMap
==
null
||
productInfoMap
.
isEmpty
())
{
log
.
warn
(
"未找到产品信息,productLaunchBizId: {}"
,
productLaunchBizId
);
return
null
;
}
PolicyProductInfo
productInfo
=
productInfoMap
.
get
(
productLaunchBizId
);
if
(
productInfo
==
null
)
{
log
.
warn
(
"产品信息为空,productLaunchBizId: {}"
,
productLaunchBizId
);
return
null
;
}
log
.
info
(
"成功获取产品信息: productLaunchBizId={}, reconciliationCompany={}, reconciliationCompanyCode={}"
,
productLaunchBizId
,
productInfo
.
getReconciliationCompany
(),
productInfo
.
getReconciliationCompanyCode
());
return
productInfo
;
}
catch
(
Exception
e
)
{
log
.
error
(
"获取产品信息失败,productLaunchBizId: {}, error: {}"
,
productLaunchBizId
,
e
.
getMessage
(),
e
);
return
null
;
}
}
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyServiceImpl.java
View file @
a0ec9de3
...
...
@@ -272,6 +272,13 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
case
"对账公司"
:
productInfo
.
setReconciliationCompany
(
value
);
productInfo
.
setReconciliationCompanyBizId
(
attribute
.
getStr
(
"fieldValueBizId"
));
// 尝试获取对账公司编码(如果 API 响应中有 fieldValueCode 字段)
String
reconciliationCompanyCode
=
attribute
.
getStr
(
"fieldValueCode"
);
if
(
StringUtils
.
isBlank
(
reconciliationCompanyCode
))
{
// 如果没有 fieldValueCode,尝试从其他字段获取
reconciliationCompanyCode
=
attribute
.
getStr
(
"code"
);
}
productInfo
.
setReconciliationCompanyCode
(
reconciliationCompanyCode
);
break
;
case
"产品计划类型"
:
productInfo
.
setProductPlanType
(
value
);
...
...
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