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
cb3bd375
Commit
cb3bd375
authored
Mar 25, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into prod
parents
403370fd
85895940
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
277 additions
and
66 deletions
+277
-66
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
+9
-2
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
+11
-4
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiCommissionConditionService.java
+11
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiCommissionConditionServiceImpl.java
+80
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
+70
-43
yd-csf-service/src/main/java/com/yd/csf/service/helper/SpeciesConditionMatcher.java
+9
-9
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionExpectedService.java
+2
-1
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyPolicyholderService.java
+1
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
+77
-7
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyPolicyholderServiceImpl.java
+7
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
View file @
cb3bd375
...
@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
...
@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -399,11 +400,17 @@ public class ApiCommissionExpectedController {
...
@@ -399,11 +400,17 @@ public class ApiCommissionExpectedController {
@GetMapping
(
"/test_expected_commission"
)
@GetMapping
(
"/test_expected_commission"
)
@Operation
(
summary
=
"测试佣金匹配"
)
@Operation
(
summary
=
"测试佣金匹配"
)
public
Result
<
Boolean
>
testExpectedCommission
(
@RequestParam
(
"policyNo"
)
String
policyNo
)
{
public
Result
<
Boolean
>
testExpectedCommission
(
@RequestParam
(
"policyNo"
)
String
policyNo
,
@RequestParam
(
"effectiveDate"
)
String
effectiveDate
,
@RequestParam
(
"coolingOffEndDate"
)
String
coolingOffEndDate
)
{
if
(
StringUtils
.
isBlank
(
policyNo
))
{
if
(
StringUtils
.
isBlank
(
policyNo
))
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"policyNo不能为空"
);
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"policyNo不能为空"
);
}
}
commissionExpectedService
.
testExpectedCommission
(
policyNo
);
try
{
commissionExpectedService
.
testExpectedCommission
(
policyNo
,
effectiveDate
,
coolingOffEndDate
);
}
catch
(
IOException
e
)
{
return
Result
.
fail
(
ResultCode
.
FAIL
.
getCode
(),
"读取文件失败"
);
}
return
Result
.
success
(
true
);
return
Result
.
success
(
true
);
}
}
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
View file @
cb3bd375
...
@@ -23,6 +23,7 @@ import com.yd.csf.api.dto.CommissionExcelDTO;
...
@@ -23,6 +23,7 @@ import com.yd.csf.api.dto.CommissionExcelDTO;
import
com.yd.csf.api.dto.PolicyExcelDTO
;
import
com.yd.csf.api.dto.PolicyExcelDTO
;
import
com.yd.csf.api.dto.PolicyFollowDTO
;
import
com.yd.csf.api.dto.PolicyFollowDTO
;
import
com.yd.csf.api.listener.PolicyDataListener
;
import
com.yd.csf.api.listener.PolicyDataListener
;
import
com.yd.csf.api.service.ApiCommissionConditionService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.api.service.ApiPolicyFollowService
;
import
com.yd.csf.api.service.ApiPolicyFollowService
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
...
@@ -52,6 +53,7 @@ import org.apache.commons.lang3.StringUtils;
...
@@ -52,6 +53,7 @@ import org.apache.commons.lang3.StringUtils;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
...
@@ -105,6 +107,9 @@ public class ApiPolicyFollowController {
...
@@ -105,6 +107,9 @@ public class ApiPolicyFollowController {
@Resource
@Resource
private
ApiExpectedFortuneAsyncService
apiExpectedFortuneAsyncService
;
private
ApiExpectedFortuneAsyncService
apiExpectedFortuneAsyncService
;
@Autowired
private
ApiCommissionConditionService
apiCommissionConditionService
;
@PostMapping
(
"/upload/excel"
)
@PostMapping
(
"/upload/excel"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -548,16 +553,18 @@ public class ApiPolicyFollowController {
...
@@ -548,16 +553,18 @@ public class ApiPolicyFollowController {
if
(!
hasCommissionInfo
)
{
if
(!
hasCommissionInfo
)
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"产品未维护发佣信息"
);
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"产品未维护发佣信息"
);
}
}
//查询产品发佣配置,获取结算币种
//查询产品发佣配置,获取结算币种
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
announcementRatioListRequest
.
setProductLaunchBizId
(
productLaunchBizId
);
announcementRatioListRequest
.
setProductLaunchBizId
(
productLaunchBizId
);
announcementRatioListRequest
.
setEffectiveDate
(
changePolicyFollowStatusRequest
.
getEffectiveDate
());
announcementRatioListRequest
.
setEffectiveDate
(
changePolicyFollowStatusRequest
.
getEffectiveDate
());
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
policyFollow
.
getIssueNumber
()));
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
policyFollow
.
getIssueNumber
()));
try
{
try
{
feignResultHelper
.
extractListData
(
apiCommissionConditionService
.
getCommissionRatioList
(
policyFollow
.
getPolicyNo
(),
changePolicyFollowStatusRequest
.
getEffectiveDate
());
apiAnnouncementCommissionRatioFeignClient
.
list
(
announcementRatioListRequest
),
// feignResultHelper.extractListData(
ApiAnnouncementCommissionRatioListResponse
.
class
// apiAnnouncementCommissionRatioFeignClient.list(announcementRatioListRequest),
);
// ApiAnnouncementCommissionRatioListResponse.class
// );
}
catch
(
BusinessException
e
)
{
}
catch
(
BusinessException
e
)
{
log
.
info
(
"===== 进入BusinessException catch块 ====="
);
log
.
info
(
"===== 进入BusinessException catch块 ====="
);
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
policyFollow
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
policyFollow
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiCommissionConditionService.java
0 → 100644
View file @
cb3bd375
package
com
.
yd
.
csf
.
api
.
service
;
import
com.yd.common.result.Result
;
import
com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse
;
import
java.util.Date
;
import
java.util.List
;
public
interface
ApiCommissionConditionService
{
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
getCommissionRatioList
(
String
policyNo
,
Date
effectiveDate
);
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiCommissionConditionServiceImpl.java
0 → 100644
View file @
cb3bd375
package
com
.
yd
.
csf
.
api
.
service
.
impl
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.csf.api.service.ApiCommissionConditionService
;
import
com.yd.csf.service.model.PolicyFollow
;
import
com.yd.csf.service.model.PolicyPolicyholder
;
import
com.yd.csf.service.service.PolicyFollowService
;
import
com.yd.csf.service.service.PolicyPolicyholderService
;
import
com.yd.product.feign.client.announcementcommissionratio.ApiAnnouncementCommissionRatioFeignClient
;
import
com.yd.product.feign.request.announcementcommissionratio.ApiAnnouncementCommissionRatioListRequest
;
import
com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
/**
* 佣金条件服务类
*/
@Slf4j
@Service
public
class
ApiCommissionConditionServiceImpl
implements
ApiCommissionConditionService
{
@Autowired
private
ApiAnnouncementCommissionRatioFeignClient
ratioFeignClient
;
@Autowired
private
PolicyFollowService
policyFollowService
;
@Autowired
private
PolicyPolicyholderService
policyPolicyholderService
;
/**
* 根据保单号查询保单所参与过滤产品发佣率数据筛选的字段列表数据
* @param policyNo
* @return
*/
@Override
public
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
getCommissionRatioList
(
String
policyNo
,
Date
effectiveDate
)
{
//根据保单号查询保单跟进表数据
PolicyFollow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
policyNo
);
if
(
policyFollow
==
null
)
{
throw
new
BusinessException
(
"新单跟进表信息不存在"
);
}
//列出固定几个需要参与发佣率筛选数据的保单字段
//供款年期(数字)
String
paymentTerm
=
policyFollow
.
getIssueNumber
().
toString
();
//投保年龄(区间值)查询保单投保人表数据 0-64 64-
PolicyPolicyholder
policyPolicyholder
=
policyPolicyholderService
.
queryOne
(
policyFollow
.
getPolicyBizId
());
String
age
=
""
;
if
(
policyPolicyholder
!=
null
)
{
age
=
policyPolicyholder
.
getAge
();
}
//期缴保费(区间值)例:0-10000 10000-
BigDecimal
eachIssuePremium
=
policyFollow
.
getEachIssuePremium
();
//专业投资者(Yes/No)(选项)
String
professionalInvestor
=
policyFollow
.
getProfessionalInvestor
();
//保单币种(选项)
String
policyCurrency
=
policyFollow
.
getPolicyCurrency
();
//保障年期(数字)
String
guaranteePeriod
=
policyFollow
.
getGuaranteePeriod
();
ApiAnnouncementCommissionRatioListRequest
ratioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
ratioListRequest
.
setProductLaunchBizId
(
policyFollow
.
getProductLaunchBizId
());
ratioListRequest
.
setEffectiveDate
(
effectiveDate
!=
null
?
effectiveDate:
policyFollow
.
getEffectiveDate
());
ratioListRequest
.
setPaymentTerm
(
paymentTerm
);
ratioListRequest
.
setAge
(
age
);
ratioListRequest
.
setEachIssuePremium
(
eachIssuePremium
);
ratioListRequest
.
setGuaranteePeriod
(
guaranteePeriod
);
ratioListRequest
.
setPolicyCurrency
(
policyCurrency
);
ratioListRequest
.
setProfessionalInvestor
(
professionalInvestor
);
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
result
=
ratioFeignClient
.
list
(
ratioListRequest
);
return
result
;
}
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
View file @
cb3bd375
...
@@ -20,6 +20,7 @@ import com.yd.common.utils.RandomStringGenerator;
...
@@ -20,6 +20,7 @@ import com.yd.common.utils.RandomStringGenerator;
import
com.yd.common.utils.RedisUtil
;
import
com.yd.common.utils.RedisUtil
;
import
com.yd.csf.api.dto.*
;
import
com.yd.csf.api.dto.*
;
import
com.yd.csf.api.service.ApiBasicLawCalculateService
;
import
com.yd.csf.api.service.ApiBasicLawCalculateService
;
import
com.yd.csf.api.service.ApiCommissionConditionService
;
import
com.yd.csf.api.service.ApiExpectedFortuneLogService
;
import
com.yd.csf.api.service.ApiExpectedFortuneLogService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.feign.request.expectedfortune.*
;
import
com.yd.csf.feign.request.expectedfortune.*
;
...
@@ -113,6 +114,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -113,6 +114,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Resource
@Resource
private
ApiAnnouncementCommissionRatioFeignClient
ratioFeignClient
;
private
ApiAnnouncementCommissionRatioFeignClient
ratioFeignClient
;
@Autowired
private
ApiCommissionConditionService
apiCommissionConditionService
;
/**
/**
* 生成预计发佣
* 生成预计发佣
*
*
...
@@ -220,53 +224,76 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -220,53 +224,76 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// throw new BusinessException("绑定基本法数据不存在");
// throw new BusinessException("绑定基本法数据不存在");
// }
// }
Integer
paymentTerm
=
0
;
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
=
new
ArrayList
<>();
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
listResult
=
apiCommissionConditionService
.
getCommissionRatioList
(
request
.
getPolicyNo
(),
null
);
if
(
listResult
!=
null
&&
!
CollectionUtils
.
isEmpty
(
listResult
.
getData
()))
{
announcementRatioList
=
listResult
.
getData
();
//取 endPeriod 的最大值作为总期数
paymentTerm
=
listResult
.
getData
().
stream
()
.
map
(
item
->
{
try
{
return
Integer
.
parseInt
(
item
.
getEndPeriod
());
}
catch
(
NumberFormatException
e
)
{
log
.
warn
(
"endPeriod 格式错误: {}"
,
item
.
getEndPeriod
());
return
0
;
}
})
.
max
(
Integer:
:
compareTo
)
.
orElse
(
0
);
}
log
.
info
(
"查询产品发佣配置,获取结算币种==========>,{}"
,
JSON
.
toJSONString
(
announcementRatioList
));
//查询产品发佣配置,获取结算币种
//查询产品发佣配置,获取结算币种
QueryPolicyAndBrokerDto
queryPolicyAndBrokerDto
=
queryPolicyAndBrokerDtoList
.
get
(
0
);
// QueryPolicyAndBrokerDto queryPolicyAndBrokerDto = queryPolicyAndBrokerDtoList.get(0);
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
// ApiAnnouncementCommissionRatioListRequest announcementRatioListRequest = new ApiAnnouncementCommissionRatioListRequest();
announcementRatioListRequest
.
setProductLaunchBizId
(
queryPolicyAndBrokerDto
.
getPlanBizId
());
// announcementRatioListRequest.setProductLaunchBizId(queryPolicyAndBrokerDto.getPlanBizId());
announcementRatioListRequest
.
setEffectiveDate
(
Date
.
from
(
queryPolicyAndBrokerDto
.
getEffectiveDate
().
atStartOfDay
(
ZoneId
.
systemDefault
()).
toInstant
()));
// announcementRatioListRequest.setEffectiveDate(Date.from(queryPolicyAndBrokerDto.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()));
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
queryPolicyAndBrokerDto
.
getPaymentTerm
()));
// announcementRatioListRequest.setPaymentTerm(String.valueOf(queryPolicyAndBrokerDto.getPaymentTerm()));
//
// HttpServletRequest request1 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// String token = request1.getHeader("Authorization");
// log.info("HttpServletRequest token==============,{}",token);
// List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList;
// try {
// announcementRatioList = feignResultHelper.extractListData(
// apiAnnouncementCommissionRatioFeignClient.list(announcementRatioListRequest),
// ApiAnnouncementCommissionRatioListResponse.class
// );
// } catch (Exception e) {
// log.info("查询结算币种->保单号:{},入参request:{}", request.getPolicyNo(), JSON.toJSONString(announcementRatioListRequest));
// throw new BusinessException("未查询到产品发佣配置,查询条件:" + JSON.toJSONString(announcementRatioListRequest));
// }
// Integer paymentTerm = 0;
// PolicyFollow policyFollow = policyFollowService.queryOneByPolicyNo(request.getPolicyNo());
// if (policyFollow != null) {
// ApiAnnouncementCommissionRatioListRequest ratioListRequest = new ApiAnnouncementCommissionRatioListRequest();
// ratioListRequest.setEffectiveDate(policyFollow.getEffectiveDate());
// ratioListRequest.setPaymentTerm(policyFollow.getIssueNumber().toString()); // 保留原有过滤条件(可根据业务决定是否需要)
// ratioListRequest.setProductLaunchBizId(policyFollow.getProductLaunchBizId());
// Result<List<ApiAnnouncementCommissionRatioListResponse>> listResult = ratioFeignClient.list(ratioListRequest);
// if (listResult != null && !CollectionUtils.isEmpty(listResult.getData())) {
// // 取 endPeriod 的最大值作为总期数
// paymentTerm = listResult.getData().stream()
// .map(item -> {
// try {
// return Integer.parseInt(item.getEndPeriod()); // 将字符串转为整数
// } catch (NumberFormatException e) {
// // 若转换失败,记录日志并返回0,避免影响最大值计算
// log.warn("endPeriod 格式错误: {}", item.getEndPeriod());
// return 0;
// }
// })
// .max(Integer::compareTo)
// .orElse(0); // 若无有效值,默认0
// }
// }
HttpServletRequest
request1
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
token
=
request1
.
getHeader
(
"Authorization"
);
log
.
info
(
"HttpServletRequest token==============,{}"
,
token
);
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
;
try
{
announcementRatioList
=
feignResultHelper
.
extractListData
(
apiAnnouncementCommissionRatioFeignClient
.
list
(
announcementRatioListRequest
),
ApiAnnouncementCommissionRatioListResponse
.
class
);
}
catch
(
Exception
e
)
{
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
request
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
throw
new
BusinessException
(
"未查询到产品发佣配置,查询条件:"
+
JSON
.
toJSONString
(
announcementRatioListRequest
));
}
log
.
info
(
"查询产品发佣配置,获取结算币种==========>,{}"
,
JSON
.
toJSONString
(
announcementRatioList
));
Integer
paymentTerm
=
0
;
PolicyFollow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
request
.
getPolicyNo
());
if
(
policyFollow
!=
null
)
{
ApiAnnouncementCommissionRatioListRequest
ratioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
ratioListRequest
.
setEffectiveDate
(
policyFollow
.
getEffectiveDate
());
ratioListRequest
.
setPaymentTerm
(
policyFollow
.
getIssueNumber
().
toString
());
// 保留原有过滤条件(可根据业务决定是否需要)
ratioListRequest
.
setProductLaunchBizId
(
policyFollow
.
getProductLaunchBizId
());
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
listResult
=
ratioFeignClient
.
list
(
ratioListRequest
);
if
(
listResult
!=
null
&&
!
CollectionUtils
.
isEmpty
(
listResult
.
getData
()))
{
// 取 endPeriod 的最大值作为总期数
paymentTerm
=
listResult
.
getData
().
stream
()
.
map
(
item
->
{
try
{
return
Integer
.
parseInt
(
item
.
getEndPeriod
());
// 将字符串转为整数
}
catch
(
NumberFormatException
e
)
{
// 若转换失败,记录日志并返回0,避免影响最大值计算
log
.
warn
(
"endPeriod 格式错误: {}"
,
item
.
getEndPeriod
());
return
0
;
}
})
.
max
(
Integer:
:
compareTo
)
.
orElse
(
0
);
// 若无有效值,默认0
}
}
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/helper/SpeciesConditionMatcher.java
View file @
cb3bd375
...
@@ -40,11 +40,11 @@ public class SpeciesConditionMatcher {
...
@@ -40,11 +40,11 @@ public class SpeciesConditionMatcher {
/**
/**
* 范围匹配
* 范围匹配
* 支持格式:
* 支持格式:
* - "0-10" 表示
[0, 10]
闭区间
* - "0-10" 表示
(0, 10] 左开右
闭区间
* - "10-" 表示 >
=
10
* - "10-" 表示 > 10
* - "-10" 表示 <= 10
* - "-10" 表示 <= 10
* - "10" 表示等于 10
* - "10" 表示等于 10
* - "0-64岁" 表示
[0, 64]
闭区间
* - "0-64岁" 表示
(0, 64] 左开右
闭区间
*/
*/
private
static
boolean
matchesRange
(
String
conditionValue
,
Object
actualValue
)
{
private
static
boolean
matchesRange
(
String
conditionValue
,
Object
actualValue
)
{
try
{
try
{
...
@@ -59,7 +59,7 @@ public class SpeciesConditionMatcher {
...
@@ -59,7 +59,7 @@ public class SpeciesConditionMatcher {
return
actual
.
compareTo
(
value
)
==
0
;
return
actual
.
compareTo
(
value
)
==
0
;
}
}
String
[]
parts
=
expression
.
split
(
"-"
);
String
[]
parts
=
expression
.
split
(
"-"
,
-
1
);
if
(
parts
.
length
!=
2
)
{
if
(
parts
.
length
!=
2
)
{
return
false
;
return
false
;
}
}
...
@@ -75,14 +75,14 @@ public class SpeciesConditionMatcher {
...
@@ -75,14 +75,14 @@ public class SpeciesConditionMatcher {
BigDecimal
max
=
new
BigDecimal
(
right
);
BigDecimal
max
=
new
BigDecimal
(
right
);
return
actual
.
compareTo
(
max
)
<=
0
;
return
actual
.
compareTo
(
max
)
<=
0
;
}
else
if
(
right
.
isEmpty
())
{
}
else
if
(
right
.
isEmpty
())
{
// "10-" 表示 >
=
10
// "10-" 表示 > 10
BigDecimal
min
=
new
BigDecimal
(
left
);
BigDecimal
min
=
new
BigDecimal
(
left
);
return
actual
.
compareTo
(
min
)
>
=
0
;
return
actual
.
compareTo
(
min
)
>
0
;
}
else
{
}
else
{
// "0-10" 表示
[
0, 10]
// "0-10" 表示
(
0, 10]
BigDecimal
min
=
new
BigDecimal
(
left
);
BigDecimal
min
=
new
BigDecimal
(
left
);
BigDecimal
max
=
new
BigDecimal
(
right
);
BigDecimal
max
=
new
BigDecimal
(
right
);
return
actual
.
compareTo
(
min
)
>
=
0
&&
actual
.
compareTo
(
max
)
<=
0
;
return
actual
.
compareTo
(
min
)
>
0
&&
actual
.
compareTo
(
max
)
<=
0
;
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
false
;
return
false
;
...
@@ -124,7 +124,7 @@ public class SpeciesConditionMatcher {
...
@@ -124,7 +124,7 @@ public class SpeciesConditionMatcher {
return
"专业投资者"
;
return
"专业投资者"
;
case
"POLICY_CURRENCY"
:
case
"POLICY_CURRENCY"
:
return
"保单币种"
;
return
"保单币种"
;
case
"
PROTECTION
_PERIOD"
:
case
"
GUARANTEE
_PERIOD"
:
return
"保障年期"
;
return
"保障年期"
;
default
:
default
:
return
typeCode
;
return
typeCode
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionExpectedService.java
View file @
cb3bd375
...
@@ -14,6 +14,7 @@ import com.yd.csf.service.vo.CommissionExpectedVO;
...
@@ -14,6 +14,7 @@ import com.yd.csf.service.vo.CommissionExpectedVO;
import
com.yd.csf.service.vo.ReceivableReportVO
;
import
com.yd.csf.service.vo.ReceivableReportVO
;
import
com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse
;
import
com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -79,5 +80,5 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
...
@@ -79,5 +80,5 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
*/
*/
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
List
<
Long
>
expectedIds
);
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
List
<
Long
>
expectedIds
);
void
testExpectedCommission
(
String
policyNo
)
;
void
testExpectedCommission
(
String
policyNo
,
String
effectiveDate
,
String
coolingOffEndDate
)
throws
IOException
;
}
}
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyPolicyholderService.java
View file @
cb3bd375
...
@@ -18,4 +18,5 @@ public interface PolicyPolicyholderService extends IService<PolicyPolicyholder>
...
@@ -18,4 +18,5 @@ public interface PolicyPolicyholderService extends IService<PolicyPolicyholder>
*/
*/
boolean
update
(
PolicyPolicyholderUpdateRequest
policyPolicyholderUpdateRequest
);
boolean
update
(
PolicyPolicyholderUpdateRequest
policyPolicyholderUpdateRequest
);
PolicyPolicyholder
queryOne
(
String
policyBizId
);
}
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
View file @
cb3bd375
package
com
.
yd
.
csf
.
service
.
service
.
impl
;
package
com
.
yd
.
csf
.
service
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.json.JSONUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
...
@@ -22,6 +24,7 @@ import com.yd.common.utils.RedisUtil;
...
@@ -22,6 +24,7 @@ import com.yd.common.utils.RedisUtil;
import
com.yd.csf.service.component.ReceivableService
;
import
com.yd.csf.service.component.ReceivableService
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.CommissionExpectedStatusEnum
;
import
com.yd.csf.service.enums.CommissionExpectedStatusEnum
;
import
com.yd.csf.service.enums.PolicyStatusEnum
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.dao.CommissionExpectedMapper
;
import
com.yd.csf.service.dao.CommissionExpectedMapper
;
...
@@ -43,13 +46,16 @@ import org.apache.commons.collections4.CollectionUtils;
...
@@ -43,13 +46,16 @@ import org.apache.commons.collections4.CollectionUtils;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.StreamUtils
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.math.RoundingMode
;
import
java.nio.charset.StandardCharsets
;
import
java.time.LocalDate
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.ZoneId
;
...
@@ -85,6 +91,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
...
@@ -85,6 +91,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
private
ApiExchangeRateFeignClient
apiExchangeRateFeignClient
;
private
ApiExchangeRateFeignClient
apiExchangeRateFeignClient
;
@Resource
@Resource
private
ApiInsuranceReconciliationCompanyFeignClient
companyFeignClient
;
private
ApiInsuranceReconciliationCompanyFeignClient
companyFeignClient
;
@Resource
private
CustomerService
customerService
;
// 用于对象转换的ObjectMapper
// 用于对象转换的ObjectMapper
private
static
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
private
static
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
...
@@ -814,14 +822,21 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
...
@@ -814,14 +822,21 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
map
.
put
(
"PAYMENT_TERM"
,
policy
.
getPaymentTerm
()
!=
null
?
String
.
valueOf
(
policy
.
getPaymentTerm
())
:
null
);
map
.
put
(
"PAYMENT_TERM"
,
policy
.
getPaymentTerm
()
!=
null
?
String
.
valueOf
(
policy
.
getPaymentTerm
())
:
null
);
map
.
put
(
"RECONCILIATION_COMPANY"
,
policy
.
getReconciliationCompanyBizId
());
map
.
put
(
"RECONCILIATION_COMPANY"
,
policy
.
getReconciliationCompanyBizId
());
map
.
put
(
"AGE"
,
policy
.
getPolicyHolderAge
());
map
.
put
(
"AGE"
,
policy
.
getPolicyHolderAge
());
map
.
put
(
"PREMIUM"
,
policy
.
getPaymentPremium
(
));
map
.
put
(
"PREMIUM"
,
calculateInitialPremiumInHkd
(
policy
.
getPaymentPremium
(),
policy
.
getCurrency
()
));
map
.
put
(
"PROFESSIONAL"
,
professionalInvestor
);
map
.
put
(
"PROFESSIONAL"
,
professionalInvestor
);
map
.
put
(
"POLICY_CURRENCY"
,
policy
.
getCurrency
());
map
.
put
(
"POLICY_CURRENCY"
,
policy
.
getCurrency
());
map
.
put
(
"
PROTECTION
_PERIOD"
,
policy
.
getGuaranteePeriod
());
map
.
put
(
"
GUARANTEE
_PERIOD"
,
policy
.
getGuaranteePeriod
());
map
.
put
(
"PROTECTION_PLAN"
,
policy
.
getProductName
());
map
.
put
(
"PROTECTION_PLAN"
,
policy
.
getProductName
());
return
map
;
return
map
;
}
}
// 匹配来佣规格 - 计算期交保费港币金额
private
BigDecimal
calculateInitialPremiumInHkd
(
BigDecimal
paymentPremium
,
String
policyCurrency
)
{
// 查汇率
BigDecimal
exchangeRate
=
queryExchangeRateByFeign
(
policyCurrency
,
"HKD"
);
return
paymentPremium
.
multiply
(
exchangeRate
);
}
/**
/**
* 根据species条件过滤列表
* 根据species条件过滤列表
*/
*/
...
@@ -990,16 +1005,29 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
...
@@ -990,16 +1005,29 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
}
}
@Override
@Override
public
void
testExpectedCommission
(
String
policyNo
)
{
public
void
testExpectedCommission
(
String
policyNo
,
String
effectiveDate
,
String
coolingOffEndDate
)
throws
IOException
{
Policy
policy
=
policyService
.
queryOne
(
policyNo
);
Policy
Follow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
policyNo
);
String
productLaunchBizId
=
policy
.
getProductLaunchBizId
();
String
productLaunchBizId
=
policy
Follow
.
getProductLaunchBizId
();
if
(
StringUtils
.
isNotBlank
(
productLaunchBizId
))
{
if
(
StringUtils
.
isNotBlank
(
productLaunchBizId
))
{
Policy
policy
=
convertPolicy
(
policyFollow
,
effectiveDate
,
coolingOffEndDate
);
PolicyFollow
policyFollow
=
policyFollowService
.
queryOneByPolicyNo
(
policyNo
);
String
professionalInvestor
=
policyFollow
.
getProfessionalInvestor
();
String
professionalInvestor
=
policyFollow
.
getProfessionalInvestor
();
List
<
ApiExpectedSpeciesListResponse
>
expectedSpeciesList
=
queryExpectedSpeciesByFeign
(
productLaunchBizId
);
// List<ApiExpectedSpeciesListResponse> expectedSpeciesList = queryExpectedSpeciesByFeign(productLaunchBizId);
List
<
ApiExpectedSpeciesListResponse
>
expectedSpeciesList
=
new
ArrayList
<>();
// 读取text
try
{
ClassPathResource
resource
=
new
ClassPathResource
(
"TestExpectedSpecies.txt"
);
String
text
=
StreamUtils
.
copyToString
(
resource
.
getInputStream
(),
StandardCharsets
.
UTF_8
);
expectedSpeciesList
=
JSONUtil
.
toList
(
text
,
ApiExpectedSpeciesListResponse
.
class
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"初始化预期来佣规格列表失败"
,
e
);
}
if
(
CollUtil
.
isNotEmpty
(
expectedSpeciesList
))
{
if
(
CollUtil
.
isNotEmpty
(
expectedSpeciesList
))
{
// 匹配规格并获取不匹配的条件
// 匹配规格并获取不匹配的条件
CommissionExpectedServiceImpl
.
MatchResult
matchResult
=
matchExpectedSpecies
(
expectedSpeciesList
,
policy
,
professionalInvestor
);
CommissionExpectedServiceImpl
.
MatchResult
matchResult
=
matchExpectedSpecies
(
expectedSpeciesList
,
policy
,
professionalInvestor
);
...
@@ -1017,6 +1045,48 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
...
@@ -1017,6 +1045,48 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
}
}
}
}
private
Policy
convertPolicy
(
PolicyFollow
policyFollow
,
String
effectiveDate
,
String
coolingOffEndDate
)
{
Policy
policy
=
new
Policy
();
BeanUtil
.
copyProperties
(
policyFollow
,
policy
);
policy
.
setPolicyNo
(
policyFollow
.
getPolicyNo
());
policy
.
setPolicyHolderAge
(
calculatePolicyHolderAge
(
policyFollow
.
getCustomerBizId
()));
policy
.
setCoolingOffEndDate
(
policyFollow
.
getCoolingOffEndDate
());
policy
.
setReconciliationCompanyBizId
(
policyFollow
.
getReconciliationCompanyBizId
());
policy
.
setReconciliationCompanyCode
(
policyFollow
.
getReconciliationCompanyCode
());
policy
.
setReconciliationCompany
(
policyFollow
.
getReconciliationCompany
());
policy
.
setInsuranceCompanyBizId
(
policyFollow
.
getInsuranceCompanyBizId
());
policy
.
setInsuranceCompany
(
policyFollow
.
getInsuranceCompany
());
policy
.
setProductName
(
policyFollow
.
getProductName
());
// 更新保单状态为生效
policy
.
setStatus
(
PolicyStatusEnum
.
INFORCE
.
getItemValue
());
// 手动映射不同名的字段
policy
.
setPaymentPremium
(
policyFollow
.
getInitialPremium
());
policy
.
setCurrency
(
policyFollow
.
getPolicyCurrency
());
policy
.
setPaymentTerm
(
policyFollow
.
getIssueNumber
());
log
.
info
(
"effectiveDate:{}"
,
DateUtil
.
parse
(
effectiveDate
,
DatePattern
.
NORM_DATE_PATTERN
));
policy
.
setEffectiveDate
(
DateUtil
.
parse
(
effectiveDate
,
DatePattern
.
NORM_DATE_PATTERN
));
//冷静期结束日期
log
.
info
(
"coolingOffEndDate:{}"
,
DateUtil
.
parse
(
coolingOffEndDate
,
DatePattern
.
NORM_DATE_PATTERN
));
policy
.
setCoolingOffEndDate
(
DateUtil
.
parse
(
coolingOffEndDate
,
DatePattern
.
NORM_DATE_PATTERN
));
return
policy
;
}
private
Integer
calculatePolicyHolderAge
(
String
customerBizId
)
{
Customer
customer
=
customerService
.
getByCustomerBizId
(
customerBizId
);
if
(
customer
==
null
)
{
throw
new
BusinessException
(
"客户不存在"
);
}
if
(
customer
.
getBirthday
()
==
null
)
{
throw
new
BusinessException
(
"客户生日不能为空"
);
}
// 根据生日计算年龄
return
DateUtil
.
ageOfNow
(
customer
.
getBirthday
());
}
}
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyPolicyholderServiceImpl.java
View file @
cb3bd375
package
com
.
yd
.
csf
.
service
.
service
.
impl
;
package
com
.
yd
.
csf
.
service
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.enums.ResultCode
;
...
@@ -41,6 +42,12 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde
...
@@ -41,6 +42,12 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde
policyPolicyholder
.
setUpdateTime
(
new
Date
());
policyPolicyholder
.
setUpdateTime
(
new
Date
());
return
this
.
updateById
(
policyPolicyholder
);
return
this
.
updateById
(
policyPolicyholder
);
}
}
@Override
public
PolicyPolicyholder
queryOne
(
String
policyBizId
)
{
return
this
.
baseMapper
.
selectOne
(
new
LambdaQueryWrapper
<
PolicyPolicyholder
>()
.
eq
(
PolicyPolicyholder:
:
getPolicyBizId
,
policyBizId
).
last
(
" limit 1 "
));
}
}
}
...
...
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