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
9e19f051
Commit
9e19f051
authored
Jan 26, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
d81a9680
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
177 additions
and
70 deletions
+177
-70
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiPremiumReconciliationServiceImpl.java
+147
-60
yd-csf-feign/src/main/java/com/yd/csf/feign/dto/excel/ApiExcelImportAppointmentDto.java
+19
-10
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyFollowService.java
+3
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
+8
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiPremiumReconciliationServiceImpl.java
View file @
9e19f051
...
...
@@ -9,41 +9,59 @@ import com.yd.base.feign.request.exchangerate.ApiExchangeRateConvertRequest;
import
com.yd.base.feign.response.bank.ApiBankDetailResponse
;
import
com.yd.base.feign.response.exchangerate.ApiExchangeRateConvertResponse
;
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.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.api.service.ApiPremiumReconciliationService
;
import
com.yd.csf.api.service.ApiPremiumRemittanceService
;
import
com.yd.csf.feign.dto.premiumreconciliation.ApiPremiumReconciliationDto
;
import
com.yd.csf.feign.dto.premiumremittance.ApiPremiumRemittanceDto
;
import
com.yd.csf.feign.enums.ReconciliationStatusEnum
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.feign.request.premiumreconciliation.ApiCalculateRemainingUnpaidAmountRequest
;
import
com.yd.csf.feign.request.premiumreconciliation.ApiPremiumReconciliationAddRequest
;
import
com.yd.csf.feign.request.premiumreconciliation.ApiPremiumReconciliationPageRequest
;
import
com.yd.csf.feign.request.premiumreconciliation.ApiPremiumReconciliationResultEditRequest
;
import
com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse
;
import
com.yd.csf.feign.response.premiumreconciliation.ApiCalculateRemainingUnpaidAmountResponse
;
import
com.yd.csf.feign.response.premiumreconciliation.ApiPremiumReconciliationDetailResponse
;
import
com.yd.csf.feign.response.premiumreconciliation.ApiPremiumReconciliationPageResponse
;
import
com.yd.csf.feign.response.team.ApiTeamPageResponse
;
import
com.yd.csf.service.dto.ChangePolicyFollowStatusRequest
;
import
com.yd.csf.service.dto.PremiumReconciliationDto
;
import
com.yd.csf.service.dto.QueryPolicyDto
;
import
com.yd.csf.service.enums.PolicyFollowStatusEnum
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyFollow
;
import
com.yd.csf.service.model.PremiumReconciliation
;
import
com.yd.csf.service.service.CommissionExpectedService
;
import
com.yd.csf.service.service.IPremiumReconciliationService
;
import
com.yd.csf.service.service.PolicyFollowService
;
import
com.yd.csf.service.service.PolicyService
;
import
com.yd.feign.config.FeignTokenInterceptor
;
import
com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse
;
import
com.yd.user.feign.client.sysdict.ApiSysDictFeignClient
;
import
com.yd.user.feign.request.sysdict.GetDictTypeListRequest
;
import
com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse
;
import
com.yd.user.feign.response.sysdict.GetDictTypeListResponse
;
import
io.swagger.v3.oas.annotations.Operation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.*
;
...
...
@@ -74,6 +92,12 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
@Autowired
private
ApiBankFeignClient
apiBankFeignClient
;
@Resource
private
CommissionExpectedService
commissionExpectedService
;
@Resource
private
ApiExpectedFortuneService
apiExpectedFortuneService
;
/**
* 分页列表查询-保费对账记录信息
* @param request
...
...
@@ -149,16 +173,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
log
.
info
(
"查询到{}条汇款记录"
,
apiPremiumRemittanceDtoList
!=
null
?
apiPremiumRemittanceDtoList
.
size
()
:
0
);
// 查询保单列表信息
List
<
Policy
>
policyList
=
policyService
.
queryList
(
QueryPolicyDto
.
builder
().
policyNoList
(
policyNoList
).
build
()
);
log
.
info
(
"查询到{}条保单记录"
,
policy
List
!=
null
?
policy
List
.
size
()
:
0
);
List
<
Policy
Follow
>
policyFollowList
=
policyFollowService
.
queryList
(
policyNoList
);
log
.
info
(
"查询到{}条保单记录"
,
policy
FollowList
!=
null
?
policyFollow
List
.
size
()
:
0
);
// 构建保单号到保单币种的映射
Map
<
String
,
String
>
policyNoToCurrencyMap
=
new
HashMap
<>();
if
(!
CollectionUtils
.
isEmpty
(
policyList
))
{
for
(
Policy
policy
:
policy
List
)
{
if
(
StringUtils
.
isNotBlank
(
policy
.
getPolicyNo
())
&&
StringUtils
.
isNotBlank
(
policy
.
get
Currency
()))
{
policyNoToCurrencyMap
.
put
(
policy
.
getPolicyNo
(),
policy
.
get
Currency
());
log
.
debug
(
"保单 {} 的币种: {}"
,
policy
.
getPolicyNo
(),
policy
.
get
Currency
());
if
(!
CollectionUtils
.
isEmpty
(
policy
Follow
List
))
{
for
(
Policy
Follow
policyFollow
:
policyFollow
List
)
{
if
(
StringUtils
.
isNotBlank
(
policy
Follow
.
getPolicyNo
())
&&
StringUtils
.
isNotBlank
(
policyFollow
.
getPolicy
Currency
()))
{
policyNoToCurrencyMap
.
put
(
policy
Follow
.
getPolicyNo
(),
policyFollow
.
getPolicy
Currency
());
log
.
debug
(
"保单 {} 的币种: {}"
,
policy
Follow
.
getPolicyNo
(),
policyFollow
.
getPolicy
Currency
());
}
}
}
...
...
@@ -608,19 +632,19 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
// throw new BusinessException(result.getMsg());
// }
//校验保单信息是否存在
Policy
policy
=
policyService
.
queryOne
(
apiPremiumReconciliationDto
.
getPolicyNo
());
if
(
Objects
.
isNull
(
policy
))
{
Policy
Follow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
apiPremiumReconciliationDto
.
getPolicyNo
());
if
(
Objects
.
isNull
(
policy
Follow
))
{
throw
new
BusinessException
(
"保单信息不存在"
);
}
PremiumReconciliation
premiumReconciliation
=
new
PremiumReconciliation
();
//计算当前期数
String
currentIssueNumber
=
calculateCurrentIssueNumber
(
policy
.
getPolicyNo
(),
Integer
.
parseInt
(
policy
.
getPaymentTerm
().
toString
()));
String
currentIssueNumber
=
calculateCurrentIssueNumber
(
policy
Follow
.
getPolicyNo
(),
Integer
.
parseInt
(
policyFollow
.
getIssueNumber
().
toString
()));
//根据计算的当前期数和保单号查询最新的记录,如果无记录那么新增的对账记录的待付金额为保单保费的金额,否则为最新记录的待付金额。
PremiumReconciliation
newDto
=
iPremiumReconciliationService
.
queryLatestOneByPolicyNo
(
policy
.
getPolicyNo
(),
currentIssueNumber
);
PremiumReconciliation
newDto
=
iPremiumReconciliationService
.
queryLatestOneByPolicyNo
(
policy
Follow
.
getPolicyNo
(),
currentIssueNumber
);
if
(
Objects
.
isNull
(
newDto
))
{
//无记录那么新增的对账记录的待付金额为保单保费的金额
premiumReconciliation
.
setRemainingUnpaidCurrency
(
policy
.
get
Currency
());
premiumReconciliation
.
setRemainingUnpaidAmount
(
policy
.
getPayment
Premium
());
premiumReconciliation
.
setRemainingUnpaidCurrency
(
policy
Follow
.
getPolicy
Currency
());
premiumReconciliation
.
setRemainingUnpaidAmount
(
policy
Follow
.
getEachIssue
Premium
());
}
else
{
//否则为最新记录的待付金额。
premiumReconciliation
.
setRemainingUnpaidCurrency
(
newDto
.
getRemainingUnpaidCurrency
());
...
...
@@ -631,11 +655,11 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
//当前期数
premiumReconciliation
.
setCurrentIssueNumber
(
currentIssueNumber
);
//保单受保人(被保人)
premiumReconciliation
.
setInsured
(
policy
.
getInsured
());
premiumReconciliation
.
setInsured
(
policy
Follow
.
getInsured
());
//保险公司名称
premiumReconciliation
.
setInsuranceCompany
(
policy
.
getInsuranceCompany
());
premiumReconciliation
.
setInsuranceCompany
(
policy
Follow
.
getInsuranceCompany
());
//保单号
premiumReconciliation
.
setPolicyNo
(
policy
.
getPolicyNo
());
premiumReconciliation
.
setPolicyNo
(
policy
Follow
.
getPolicyNo
());
premiumReconciliation
.
setReconciliationType
(
apiPremiumReconciliationDto
.
getReconciliationType
());
//保费对账记录表唯一业务ID
premiumReconciliation
.
setPremiumReconciliationBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_PREMIUM_RECONCILIATION
.
getCode
()));
...
...
@@ -734,13 +758,13 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
PremiumReconciliation
premiumReconciliation
=
result
.
getData
();
//查询保单信息
Policy
policy
=
policyService
.
queryOne
(
premiumReconciliation
.
getPolicyNo
());
if
(
Objects
.
isNull
(
policy
))
{
Policy
Follow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
premiumReconciliation
.
getPolicyNo
());
if
(
Objects
.
isNull
(
policy
Follow
))
{
throw
new
BusinessException
(
"保单信息不存在"
);
}
//获取保单币种
String
policyCurrency
=
policy
.
get
Currency
();
String
policyCurrency
=
policy
Follow
.
getPolicy
Currency
();
if
(
StringUtils
.
isBlank
(
policyCurrency
))
{
throw
new
BusinessException
(
"保单币种不能为空"
);
}
...
...
@@ -914,27 +938,27 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
batchResult
!=
null
?
batchResult
.
getCode
()
:
"null"
,
batchResult
!=
null
?
batchResult
.
getMsg
()
:
"null"
);
// 如果汇率转换失败,可以尝试使用单个转换作为备选方案
return
fallbackSingleConvert
(
request
,
premiumReconciliation
,
policy
,
policyCurrency
,
return
fallbackSingleConvert
(
request
,
premiumReconciliation
,
policy
Follow
,
policyCurrency
,
recognizedCurrency
,
currentRecognizedAmount
,
premiumReconciliationList
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"批量汇率转换异常"
,
e
);
// 异常情况下的备选方案
return
fallbackSingleConvert
(
request
,
premiumReconciliation
,
policy
,
policyCurrency
,
return
fallbackSingleConvert
(
request
,
premiumReconciliation
,
policy
Follow
,
policyCurrency
,
recognizedCurrency
,
currentRecognizedAmount
,
premiumReconciliationList
);
}
}
// 计算总保费和剩余待付金额
BigDecimal
paymentPremium
=
policy
.
getPayment
Premium
()
!=
null
?
policy
.
getPayment
Premium
()
:
BigDecimal
.
ZERO
;
BigDecimal
paymentPremium
=
policy
Follow
.
getEachIssue
Premium
()
!=
null
?
policy
Follow
.
getEachIssue
Premium
()
:
BigDecimal
.
ZERO
;
BigDecimal
policyLevy
=
BigDecimal
.
ZERO
;
if
(
StringUtils
.
isNotBlank
(
policy
.
getPolicyLevy
()))
{
if
(
StringUtils
.
isNotBlank
(
policy
Follow
.
getPolicyLevy
()))
{
try
{
policyLevy
=
new
BigDecimal
(
policy
.
getPolicyLevy
().
trim
());
policyLevy
=
new
BigDecimal
(
policy
Follow
.
getPolicyLevy
().
trim
());
}
catch
(
NumberFormatException
e
)
{
log
.
error
(
"保单征费格式错误: {}"
,
policy
.
getPolicyLevy
(),
e
);
log
.
error
(
"保单征费格式错误: {}"
,
policy
Follow
.
getPolicyLevy
(),
e
);
}
}
...
...
@@ -961,7 +985,7 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
private
Result
<
ApiCalculateRemainingUnpaidAmountResponse
>
fallbackSingleConvert
(
ApiCalculateRemainingUnpaidAmountRequest
request
,
PremiumReconciliation
premiumReconciliation
,
Policy
policy
,
Policy
Follow
policyFollow
,
String
policyCurrency
,
String
recognizedCurrency
,
BigDecimal
currentRecognizedAmount
,
...
...
@@ -1018,13 +1042,13 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
}
// 3. 计算剩余待付金额
BigDecimal
paymentPremium
=
policy
.
getPayment
Premium
()
!=
null
?
policy
.
getPayment
Premium
()
:
BigDecimal
.
ZERO
;
BigDecimal
paymentPremium
=
policy
Follow
.
getEachIssue
Premium
()
!=
null
?
policy
Follow
.
getEachIssue
Premium
()
:
BigDecimal
.
ZERO
;
BigDecimal
policyLevy
=
BigDecimal
.
ZERO
;
if
(
StringUtils
.
isNotBlank
(
policy
.
getPolicyLevy
()))
{
if
(
StringUtils
.
isNotBlank
(
policy
Follow
.
getPolicyLevy
()))
{
try
{
policyLevy
=
new
BigDecimal
(
policy
.
getPolicyLevy
().
trim
());
policyLevy
=
new
BigDecimal
(
policy
Follow
.
getPolicyLevy
().
trim
());
}
catch
(
NumberFormatException
e
)
{
log
.
error
(
"保单征费格式错误"
,
e
);
}
...
...
@@ -1068,33 +1092,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
if
(
Objects
.
isNull
(
request
.
getUnderwritingDate
()))
{
throw
new
BusinessException
(
"核保日期不能为空"
);
}
//更新新单和保单状态为生效中,更新生效日期和核保日期
//更新新单跟进:新单状态——>生效、生效日期、核保日期
PolicyFollow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
premiumReconciliation
.
getPolicyNo
());
if
(!
Objects
.
isNull
(
policyFollow
))
{
//生效日期
policyFollow
.
setEffectiveDate
(
request
.
getEffectiveDate
());
//核保日期
policyFollow
.
setUnderwritingDate
(
request
.
getUnderwritingDate
());
//新单跟进状态——>生效
policyFollow
.
setStatus
(
"TAKE_EFFECT"
);
policyFollowService
.
saveOrUpdate
(
policyFollow
);
}
//更新保单信息:保单状态——>生效、生效日期、核保日期
Policy
policy
=
policyService
.
queryOne
(
premiumReconciliation
.
getPolicyNo
());
if
(!
Objects
.
isNull
(
policy
))
{
//生效日期
policy
.
setEffectiveDate
(
request
.
getEffectiveDate
());
//核保日期
policy
.
setUnderwritingDate
(
request
.
getUnderwritingDate
());
//保单状态——>生效
if
(
StringUtils
.
isNotBlank
(
request
.
getStatus
()))
{
policy
.
setStatus
(
request
.
getStatus
());
}
else
{
policy
.
setStatus
(
"TAKE_EFFECT"
);
}
policyService
.
saveOrUpdate
(
policy
);
}
if
(
Objects
.
isNull
(
policyFollow
))
{
throw
new
BusinessException
(
"新单跟进数据不存在"
);
}
ChangePolicyFollowStatusRequest
statusRequest
=
new
ChangePolicyFollowStatusRequest
();
statusRequest
.
setEffectiveDate
(
request
.
getEffectiveDate
());
statusRequest
.
setUnderwritingDate
(
request
.
getUnderwritingDate
());
statusRequest
.
setPolicyBizId
(
policyFollow
.
getPolicyBizId
());
statusRequest
.
setStatus
(
"TAKE_EFFECT"
);
changePolicyFollowStatus
(
statusRequest
);
}
else
{
//大于0,只更新新单跟进:新单状态——>保费对账成功,核保中
PolicyFollow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
premiumReconciliation
.
getPolicyNo
());
...
...
@@ -1109,6 +1116,86 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
}
/**
* 修改跟进状态
*
* @param changePolicyFollowStatusRequest
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
<
Boolean
>
changePolicyFollowStatus
(
ChangePolicyFollowStatusRequest
changePolicyFollowStatusRequest
)
{
// 通过 RequestContextHolder 获取 HttpServletRequest
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
currentRequestAttributes
()).
getRequest
();
if
(
changePolicyFollowStatusRequest
==
null
||
StringUtils
.
isBlank
(
changePolicyFollowStatusRequest
.
getPolicyBizId
()))
{
return
Result
.
fail
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"policyBizId不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
changePolicyFollowStatusRequest
.
getEffectiveDate
()))
{
return
Result
.
fail
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"生效日期不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
changePolicyFollowStatusRequest
.
getUnderwritingDate
()))
{
return
Result
.
fail
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"核保日期不能为空"
);
}
String
policyBizId
=
changePolicyFollowStatusRequest
.
getPolicyBizId
();
PolicyFollow
policyFollow
=
policyFollowService
.
getByPolicyBizId
(
policyBizId
);
if
(
policyFollow
==
null
)
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
ResultCode
.
NULL_ERROR
.
getMessage
());
}
PolicyFollowStatusEnum
currentStatusEnum
=
PolicyFollowStatusEnum
.
getEnumByValue
(
changePolicyFollowStatusRequest
.
getStatus
());
// 修改为生效时需要校验、同步预计发佣
if
(
PolicyFollowStatusEnum
.
EFFECTIVE
.
equals
(
currentStatusEnum
))
{
String
productLaunchBizId
=
policyFollow
.
getProductLaunchBizId
();
// 校验产品是否维护预计来佣数据
if
(
ObjectUtils
.
isEmpty
(
productLaunchBizId
))
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"新单跟进记录中,productLaunchBizId不能为空"
);
}
List
<
ApiExpectedSpeciesListResponse
>
expectedSpeciesList
=
commissionExpectedService
.
queryExpectedSpeciesByFeign
(
productLaunchBizId
);
if
(
ObjectUtils
.
isEmpty
(
expectedSpeciesList
))
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"产品未维护预计来佣数据"
);
}
// 校验产品是否维护发佣信息
Boolean
hasCommissionInfo
=
commissionExpectedService
.
checkProductExpectedFortune
(
productLaunchBizId
);
if
(!
hasCommissionInfo
)
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"产品未维护发佣信息"
);
}
}
// 修改逻辑
policyFollowService
.
changePolicyFollowStatus
(
changePolicyFollowStatusRequest
,
policyFollow
);
// 修改为生效时需要同步预计发佣
if
(
PolicyFollowStatusEnum
.
EFFECTIVE
.
equals
(
currentStatusEnum
))
{
// 获取Token
String
token
=
request
.
getHeader
(
"Authorization"
);
log
.
info
(
"修改跟进状态获取token:{}"
,
token
);
// 同步:根据保单生成预计出账记录
generateExpectedFortuneSync
(
token
,
policyFollow
.
getPolicyNo
());
}
return
Result
.
success
(
true
);
}
/**
* 同步生成预计出账记录
*
* @param token 认证Token
* @param policyNo 保单号
*/
private
void
generateExpectedFortuneSync
(
String
token
,
String
policyNo
)
{
// 设置ThreadLocal Token
FeignTokenInterceptor
.
setThreadLocalToken
(
token
);
// 调用 ApiExpectedFortuneService 的 generateSyncWithLogAndRedis(同步版本,包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest
generateExpectedFortuneRequest
=
new
ApiGenerateExpectedFortuneRequest
();
generateExpectedFortuneRequest
.
setPolicyNo
(
policyNo
);
log
.
info
(
"生成预计发佣generateSyncWithLogAndRedis——>PolicyNo:{}"
,
policyNo
);
Result
<
ApiGenerateExpectedFortuneResponse
>
result
=
apiExpectedFortuneService
.
generateSyncWithLogAndRedis
(
generateExpectedFortuneRequest
);
if
(
result
!=
null
&&
result
.
getCode
()
==
200
)
{
log
.
info
(
"新单跟进-同步生成预计出账记录成功:保单号={}"
,
policyNo
);
}
}
/**
* 校验-保单所有期数的保费对账是否对账完成(全部对账完成就不能新增录入对账信息了)
* @param policyNo
* @return
...
...
@@ -1116,12 +1203,12 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
@Override
public
Result
<
Boolean
>
checkReconciliationComplete
(
String
policyNo
)
{
//查询保单信息
Policy
policy
=
policyService
.
queryOne
(
policyNo
);
if
(
Objects
.
isNull
(
policy
))
{
Policy
Follow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
policyNo
);
if
(
Objects
.
isNull
(
policy
Follow
))
{
throw
new
BusinessException
(
"保单信息不存在"
);
}
//获取保单供款年期
String
paymentTerm
=
String
.
valueOf
(
policy
.
getPaymentTerm
());
String
paymentTerm
=
String
.
valueOf
(
policy
Follow
.
getIssueNumber
());
//根据保单号查询最新对账记录
PremiumReconciliation
premiumReconciliation
=
iPremiumReconciliationService
.
queryLatestOneByPolicyNo
(
policyNo
,
""
);
if
(
Objects
.
isNull
(
premiumReconciliation
))
{
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/dto/excel/ApiExcelImportAppointmentDto.java
View file @
9e19f051
...
...
@@ -78,7 +78,7 @@ public class ApiExcelImportAppointmentDto {
/**
* 保险公司名称(冗余字段)(产品计划信息表)
*/
@ExcelField
(
name
=
"
隨行人員聯絡電話
"
,
titleRow
=
19
,
titleCol
=
0
,
valueRow
=
19
,
valueCol
=
1
)
@ExcelField
(
name
=
"
保險公司
"
,
titleRow
=
19
,
titleCol
=
0
,
valueRow
=
19
,
valueCol
=
1
)
private
String
planCompanyName
;
/**
...
...
@@ -509,22 +509,27 @@ public class ApiExcelImportAppointmentDto {
List
<
GetDictItemListByDictTypeResponse
>
dictTypeResponses
)
{
//到港时间
infoDto
.
setArrivalTime
(
DateUtil
.
getLocalDateTime
(
dto
.
getHkArrivalTime
()));
//业务编号->介绍人编号 TODO
//业务编号->介绍人编号 TODO
转介人内部编号
// infoDto.setBusinessNo(dto.getMainReferrerId());
//签单日->预约日期 (西元 年/月/日) + 預約時間
infoDto
.
setSignDate
(
DateUtil
.
getLocalDateTime
(
dto
.
getMainIntentionAppointmentDate
()
+
" "
+
dto
.
getMainIntentionAppointmentTime
()));
//离港时间->离港(澳)日期及时间(离港时间)(预约信息主表)
//抵港(澳)日期及时间(年/月/日 时:分) -> 到港时间
infoDto
.
setArrivalTime
(
DateUtil
.
getLocalDateTime
(
dto
.
getHkArrivalTime
()));
//离港(澳)日期及时间(离港时间 (年/月/日 时:分)) -> 离港时间
infoDto
.
setDepartureTime
(
DateUtil
.
getLocalDateTime
(
dto
.
getHkDepartureTime
()));
//会面地点
infoDto
.
setMeetingPoint
(
dto
.
getHkMeetingPoint
());
//客户在港期间联络电话->客户在港期间联络电话(预约信息主表)区号+号码
infoDto
.
setHkMobileCode
(
StringUtil
.
getSplitStr
(
dto
.
getHkHkMobile
(),
"-"
,
0
));
infoDto
.
setHkMobile
(
StringUtil
.
getSplitStr
(
dto
.
getHkHkMobile
(),
"-"
,
1
));
//是否体检
infoDto
.
setIsTj
(
Integer
.
getInteger
(
GetDictItemListByDictTypeResponse
.
getItemValue
(
dictTypeResponses
,
DictTypeEnum
.
SYS_NO_YES
.
getItemValue
(),
dto
.
getMainIsTj
())));
//会面地点
infoDto
.
setMeetingPoint
(
dto
.
getHkMeetingPoint
());
//转保声明选项 TODO
// infoDto.setPolicyTransfer();
//随行人员 TODO 转介人
return
infoDto
;
}
...
...
@@ -539,8 +544,14 @@ public class ApiExcelImportAppointmentDto {
List
<
GetDictItemListByDictTypeResponse
>
dictTypeResponses
)
{
//保险公司名称
infoDto
.
setCompanyName
(
dto
.
getPlanCompanyName
());
//货币(字典)
//保险公司ID TODO
// infoDto.setCompanyId();
//基本計劃名稱 -> 产品上架信息表名称(标题)
infoDto
.
setProductLaunchMainName
(
dto
.
getPlanProductName
());
//保单币别 -> 保单币种
infoDto
.
setPolicyCurrency
(
dto
.
getPlanCurrency
());
//供款频率 -> 付款频率(字典)
infoDto
.
setPaymentFrequency
(
dto
.
getPlanPaymentFrequency
());
//预付额 TODO
// infoDto.setDeductibles();
//红利分配方式(字典)
...
...
@@ -557,12 +568,10 @@ public class ApiExcelImportAppointmentDto {
//是否预缴保费->是否預繳保費 (如是,請填寫首期保費以外的剩餘保費)(是否预缴保费: 0-否, 1-是(字典)(产品计划信息表))
infoDto
.
setIsPrepay
(
Integer
.
parseInt
(
GetDictItemListByDictTypeResponse
.
getItemValue
(
dictTypeResponses
,
DictTypeEnum
.
SYS_NO_YES
.
getItemValue
(),
dto
.
getPlanIsPrepay
())));
//付款频率
infoDto
.
setPaymentFrequency
(
dto
.
getPlanPaymentFrequency
());
//供款年期
infoDto
.
setIssueNumber
(
dto
.
getPlanPaymentTerm
());
//保险产品名称->基本計劃名稱
infoDto
.
setProductLaunchMainName
(
dto
.
getPlanProductName
());
//续期付款方式
infoDto
.
setRenewalPaymentMethod
(
GetDictItemListByDictTypeResponse
.
getItemValue
(
dictTypeResponses
,
DictTypeEnum
.
CSF_AP_FIRST_ISSUE
.
getItemValue
(),
dto
.
getPlanRenewalPaymentMethod
()));
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyFollowService.java
View file @
9e19f051
...
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.PolicyFollowStatusEnum
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyFollow
;
import
com.yd.csf.service.vo.PolicyFollowDetailVO
;
import
com.yd.csf.service.vo.PolicyFollowVO
;
...
...
@@ -83,4 +84,6 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
* @return 保单号列表
*/
Page
<
PolicyNumberResponseVO
>
queryPolicyNumbers
(
PolicyNosQueryRequest
policyNosQueryRequest
);
List
<
PolicyFollow
>
queryList
(
List
<
String
>
policyNoList
);
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
View file @
9e19f051
...
...
@@ -845,6 +845,14 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return
resultPage
;
}
@Override
public
List
<
PolicyFollow
>
queryList
(
List
<
String
>
policyNoList
)
{
List
<
PolicyFollow
>
list
=
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
PolicyFollow
>()
.
in
(!
CollectionUtils
.
isEmpty
(
policyNoList
),
PolicyFollow:
:
getPolicyNo
,
policyNoList
)
);
return
list
;
}
/**
* 转换为保单号查询响应视图
*
...
...
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