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
8d0d7161
Commit
8d0d7161
authored
Nov 04, 2025
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
基本法 - 算法接口
parent
bc285116
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
462 additions
and
35 deletions
+462
-35
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmDto.java
+5
-1
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmResDto.java
+7
-0
yd-csf-api/src/main/java/com/yd/csf/api/dto/ExecuteBillingDto.java
+24
-0
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateFortuneDto.java
+102
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAgentDetailFycServiceImpl.java
+4
-4
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiBasicLawCalculateServiceImpl.java
+291
-28
yd-csf-service/src/main/java/com/yd/csf/service/dto/QueryPolicyDto.java
+20
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/Fortune.java
+5
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyService.java
+2
-1
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyServiceImpl.java
+2
-1
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmDto.java
View file @
8d0d7161
package
com
.
yd
.
csf
.
api
.
dto
;
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.Data
;
...
@@ -17,6 +16,11 @@ import java.util.List;
...
@@ -17,6 +16,11 @@ import java.util.List;
public
class
AlgorithmDto
{
public
class
AlgorithmDto
{
/**
/**
* 保单发佣批次ID
*/
private
String
batchBizId
;
/**
* 转介人业务ID(客户端用户表唯一业务ID)
* 转介人业务ID(客户端用户表唯一业务ID)
*/
*/
private
String
brokerBizId
;
private
String
brokerBizId
;
...
...
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmResDto.java
View file @
8d0d7161
package
com
.
yd
.
csf
.
api
.
dto
;
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.Data
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
...
@@ -23,12 +24,18 @@ public class AlgorithmResDto {
...
@@ -23,12 +24,18 @@ public class AlgorithmResDto {
private
String
ruleItemBizId
;
private
String
ruleItemBizId
;
/**
/**
* 基本法项目名称
*/
private
String
itemName
;
/**
* 计算值 - sqlAlgorithmResultDtoList集合里面的计算值和值
* 计算值 - sqlAlgorithmResultDtoList集合里面的计算值和值
*/
*/
private
BigDecimal
calculatedValue
;
private
BigDecimal
calculatedValue
;
/**
/**
* 当前变量绑定的SQL模板计算结果集合列表(含计算值,以及计算值的提供者等等)(sql语句返回多个值作为算子计算)
* 当前变量绑定的SQL模板计算结果集合列表(含计算值,以及计算值的提供者等等)(sql语句返回多个值作为算子计算)
* SQL计算结果按照积分贡献者或者其他维度分组的集合计算结果列表
*/
*/
private
List
<
SqlAlgorithmResultDto
>
sqlAlgorithmResultDtoList
;
private
List
<
SqlAlgorithmResultDto
>
sqlAlgorithmResultDtoList
;
}
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/ExecuteBillingDto.java
0 → 100644
View file @
8d0d7161
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.yd.csf.service.model.Commission
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyBroker
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
ExecuteBillingDto
{
private
PolicyBroker
policyBroker
;
private
Policy
policy
;
private
Commission
commission
;
private
String
batchBizId
;
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateFortuneDto.java
0 → 100644
View file @
8d0d7161
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
GenerateFortuneDto
{
/**
* 保单发佣批次ID
*/
private
String
batchBizId
;
/**
* 保单发佣业务id
*/
private
String
fortuneBizId
;
/**
* 保单号
*/
private
String
policyNo
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
private
Integer
fortunePeriod
;
/**
* 发佣总期数
*/
private
Integer
fortuneTotalPeriod
;
/**
* 转介人
*/
private
String
broker
;
/**
* 转介人业务ID
*/
private
String
brokerBizId
;
/**
* 所属团队
*/
private
String
team
;
/**
* 所属团队业务ID
*/
private
String
teamBizId
;
/**
* 来佣名称
*/
private
String
fortuneName
;
/**
* 发佣类型
*/
private
String
fortuneType
;
/**
* 发佣金额
*/
private
BigDecimal
amount
;
/**
* 发佣币种
*/
private
String
currency
;
/**
* 佣金发放状态 0=待出账 1=可出账 2=已出账
*/
private
String
status
;
/**
* 发佣日期
*/
private
Date
payoutDate
;
/**
* 基本法项目配置表唯一业务ID
*/
private
String
ruleItemBizId
;
/**
* 转介人绑定的基本法列表对应计算值
*/
private
List
<
AlgorithmResDto
>
algorithmResDtoList
;
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAgentDetailFycServiceImpl.java
View file @
8d0d7161
...
@@ -65,8 +65,8 @@ public class ApiAgentDetailFycServiceImpl implements ApiAgentDetailFycService {
...
@@ -65,8 +65,8 @@ public class ApiAgentDetailFycServiceImpl implements ApiAgentDetailFycService {
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//保单发佣批次ID
//保单发佣批次ID
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
//积分提供
保单表唯一业务ID
//积分提供
的保单号
agentDetailFyc
.
setPolicy
BizId
(
dto
.
getPolicyBizId
());
agentDetailFyc
.
setPolicy
No
(
dto
.
getPolicyNo
());
//积分提供者(客户端用户表唯一业务ID)
//积分提供者(客户端用户表唯一业务ID)
agentDetailFyc
.
setProvideId
(
sqlAlgorithmResultDto
.
getProvider
());
agentDetailFyc
.
setProvideId
(
sqlAlgorithmResultDto
.
getProvider
());
agentDetailFycList
.
add
(
agentDetailFyc
);
agentDetailFycList
.
add
(
agentDetailFyc
);
...
@@ -89,8 +89,8 @@ public class ApiAgentDetailFycServiceImpl implements ApiAgentDetailFycService {
...
@@ -89,8 +89,8 @@ public class ApiAgentDetailFycServiceImpl implements ApiAgentDetailFycService {
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//保单发佣批次ID
//保单发佣批次ID
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
//积分提供
保单表唯一业务ID
//积分提供
的保单号
agentDetailFyc
.
setPolicy
BizId
(
dto
.
getPolicyBizId
());
agentDetailFyc
.
setPolicy
No
(
dto
.
getPolicyNo
());
//积分提供者(客户端用户表唯一业务ID)
//积分提供者(客户端用户表唯一业务ID)
// agentDetailFyc.setProvideId(sqlAlgorithmResultDto.getProvider());
// agentDetailFyc.setProvideId(sqlAlgorithmResultDto.getProvider());
agentDetailFycList
.
add
(
agentDetailFyc
);
agentDetailFycList
.
add
(
agentDetailFyc
);
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiBasicLawCalculateServiceImpl.java
View file @
8d0d7161
package
com
.
yd
.
csf
.
api
.
service
.
impl
;
package
com
.
yd
.
csf
.
api
.
service
.
impl
;
import
com.yd.common.constant.CodeGeneratorConstants
;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.common.result.Result
;
import
com.yd.common.utils.RandomStringGenerator
;
import
com.yd.csf.api.dto.*
;
import
com.yd.csf.api.dto.*
;
import
com.yd.csf.api.service.ApiAgentDetailFycService
;
import
com.yd.csf.api.service.ApiAgentDetailFycService
;
import
com.yd.csf.api.service.ApiBasicLawCalculateService
;
import
com.yd.csf.api.service.ApiBasicLawCalculateService
;
...
@@ -10,6 +13,7 @@ import com.yd.csf.feign.enums.VariableEnum;
...
@@ -10,6 +13,7 @@ import com.yd.csf.feign.enums.VariableEnum;
import
com.yd.csf.feign.request.basiclawcalculate.ApiGenerateBillingRequest
;
import
com.yd.csf.feign.request.basiclawcalculate.ApiGenerateBillingRequest
;
import
com.yd.csf.feign.response.basiclawcalculate.ApiGenerateBillingResponse
;
import
com.yd.csf.feign.response.basiclawcalculate.ApiGenerateBillingResponse
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.FortuneStatusEnum
;
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.insurance.base.feign.client.ApiRelProductAnnouncementFeignClient
;
import
com.yd.insurance.base.feign.client.ApiRelProductAnnouncementFeignClient
;
...
@@ -19,6 +23,7 @@ import org.springframework.beans.BeanUtils;
...
@@ -19,6 +23,7 @@ import org.springframework.beans.BeanUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
;
import
org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
javax.script.ScriptEngine
;
import
javax.script.ScriptEngine
;
import
javax.script.ScriptEngineManager
;
import
javax.script.ScriptEngineManager
;
...
@@ -40,9 +45,6 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -40,9 +45,6 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
private
CommissionService
commissionService
;
private
CommissionService
commissionService
;
@Autowired
@Autowired
private
ApiRelProductAnnouncementFeignClient
apiRelProductAnnouncementFeignClient
;
@Autowired
private
PolicyBrokerService
policyBrokerService
;
private
PolicyBrokerService
policyBrokerService
;
@Autowired
@Autowired
...
@@ -72,6 +74,12 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -72,6 +74,12 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
@Autowired
@Autowired
private
ApiAgentDetailFycService
apiAgentDetailFycService
;
private
ApiAgentDetailFycService
apiAgentDetailFycService
;
@Autowired
private
FortuneService
fortuneService
;
@Autowired
private
TransactionTemplate
transactionTemplate
;
/**
/**
* 获取JdbcTemplate(需要注入)
* 获取JdbcTemplate(需要注入)
*/
*/
...
@@ -106,8 +114,11 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -106,8 +114,11 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
//获取保单号列表
//获取保单号列表
List
<
String
>
policyNoList
=
distinctCommissionList
.
stream
().
map
(
Commission:
:
getPolicyNo
).
collect
(
Collectors
.
toList
());
List
<
String
>
policyNoList
=
distinctCommissionList
.
stream
().
map
(
Commission:
:
getPolicyNo
).
collect
(
Collectors
.
toList
());
//查询保单列表信息
//查询保单列表信息
List
<
Policy
>
policyList
=
policyService
.
queryList
(
PolicyDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
List
<
Policy
>
policyList
=
policyService
.
queryList
(
QueryPolicyDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
//保单绑定的转介人去重列表(用于奖励基本法项目计算)
List
<
PolicyBroker
>
policyBrokerDistinctList
=
new
ArrayList
<>();
//保单发佣批次ID
String
batchBizId
=
RandomStringGenerator
.
generateBizId16
(
CodeGeneratorConstants
.
PREFIX_FORTUNE_BATCH_BIZ_ID
);
if
(!
CollectionUtils
.
isEmpty
(
policyList
))
{
if
(!
CollectionUtils
.
isEmpty
(
policyList
))
{
//查询保单转介人(销售人员)关系数据
//查询保单转介人(销售人员)关系数据
List
<
PolicyBroker
>
policyBrokerList
=
policyBrokerService
.
queryList
(
QueryPolicyBrokerDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
List
<
PolicyBroker
>
policyBrokerList
=
policyBrokerService
.
queryList
(
QueryPolicyBrokerDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
...
@@ -117,40 +128,244 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -117,40 +128,244 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
if
(!
CollectionUtils
.
isEmpty
(
policyBrokerList
))
{
if
(!
CollectionUtils
.
isEmpty
(
policyBrokerList
))
{
thisPolicyBrokerList
=
policyBrokerList
.
stream
().
filter
(
d
->
d
.
getPolicyNo
().
equals
(
policy
.
getPolicyNo
())).
collect
(
Collectors
.
toList
());
thisPolicyBrokerList
=
policyBrokerList
.
stream
().
filter
(
d
->
d
.
getPolicyNo
().
equals
(
policy
.
getPolicyNo
())).
collect
(
Collectors
.
toList
());
}
}
//根据保单号获取来佣记录(获取币种等信息)
List
<
Commission
>
thisPolicyCommissionList
=
new
ArrayList
<>();
Commission
commission
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
distinctCommissionList
))
{
thisPolicyCommissionList
=
distinctCommissionList
.
stream
().
filter
(
d
->
d
.
getPolicyNo
().
equals
(
policy
.
getPolicyNo
())).
collect
(
Collectors
.
toList
());
commission
=
thisPolicyCommissionList
.
get
(
0
);
}
if
(!
CollectionUtils
.
isEmpty
(
thisPolicyBrokerList
))
{
if
(!
CollectionUtils
.
isEmpty
(
thisPolicyBrokerList
))
{
//遍历当前保单绑定的转介人列表,根据人绑定的基本法项目(计算销售佣金,推荐佣金,辅导员佣金,终身推荐奖等。)绑定什么项目算什么金额,按照佣金项目执行顺序来计算。
//遍历当前保单绑定的转介人列表,根据人绑定的基本法项目(计算销售佣金,推荐佣金,辅导员佣金,终身推荐奖等。)绑定什么项目算什么金额,按照佣金项目执行顺序来计算。
for
(
PolicyBroker
policyBroker
:
thisPolicyBrokerList
)
{
for
(
PolicyBroker
policyBroker
:
thisPolicyBrokerList
)
{
//构造销售佣金基本法项目的顺序下标值执行
//执行 - 销售佣金 - 出账
List
<
Integer
>
executionOrderList
=
new
ArrayList
<>();
executeBilling
(
ExecuteBillingDto
.
builder
()
executionOrderList
.
add
(
1
);
.
batchBizId
(
batchBizId
)
.
commission
(
commission
)
//保单出账先执行销售佣金基本法项目,入完到积分明细表里后,再执行保单绑定人的其他基本法项目
.
policy
(
policy
)
Result
<
List
<
AlgorithmResDto
>>
result
=
policyBrokerAlgorithm
(
AlgorithmDto
.
builder
()
.
policyBroker
(
policyBroker
)
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
.
executionOrderList
(
executionOrderList
)
.
isNegateExecutionOrderList
(
false
)
.
build
());
.
build
());
policyBrokerDistinctList
.
add
(
policyBroker
);
}
}
}
}
//生成业务员(转介人)积分明细表记录(销售积分)
// 在事务外部先处理好去重逻辑
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
.
builder
()
List
<
PolicyBroker
>
distinctBrokers
=
policyBrokerDistinctList
.
stream
()
.
agentId
(
policyBroker
.
getBrokerBizId
())
.
collect
(
Collectors
.
collectingAndThen
(
.
policyNo
(
policy
.
getPolicyNo
())
Collectors
.
toMap
(
.
algorithmResDtoList
(
result
.
getData
())
PolicyBroker:
:
getBrokerBizId
,
// .sourceType()
Function
.
identity
(),
.
build
());
(
existing
,
replacement
)
->
existing
),
map
->
new
ArrayList
<>(
map
.
values
())));
// 以上数据库事务执行完毕后再执行以下事务
transactionTemplate
.
execute
(
status
->
{
if
(!
CollectionUtils
.
isEmpty
(
distinctBrokers
))
{
for
(
PolicyBroker
policyBroker
:
distinctBrokers
)
{
//执行 - 奖励
executeReward
(
ExecuteBillingDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
policyBroker
(
policyBroker
)
.
build
());
}
}
return
null
;
});
return
Result
.
success
();
}
/**
* 执行 - 奖励
* @param dto
* @return
*/
public
Result
executeReward
(
ExecuteBillingDto
dto
)
{
PolicyBroker
policyBroker
=
dto
.
getPolicyBroker
();
// Policy policy = dto.getPolicy();
// Commission commission = dto.getCommission();
String
batchBizId
=
dto
.
getBatchBizId
();
//构造销售佣金基本法项目的顺序下标值执行
List
<
Integer
>
executionOrderList
=
new
ArrayList
<>();
executionOrderList
.
add
(
1
);
//执行保单绑定人的非销售佣金基本法项目
Result
<
List
<
AlgorithmResDto
>>
result
=
policyBrokerAlgorithm
(
AlgorithmDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
.
executionOrderList
(
executionOrderList
)
.
isNegateExecutionOrderList
(
true
)
.
build
());
//生成业务员(转介人)积分明细表记录
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
agentId
(
policyBroker
.
getBrokerBizId
())
// .policyNo(policy.getPolicyNo())
.
algorithmResDtoList
(
result
.
getData
())
// .sourceType()
.
build
());
//生成销售-保单发佣表记录
generateFortune
(
GenerateFortuneDto
.
builder
()
//转介人绑定的基本法列表对应计算值
.
algorithmResDtoList
(
result
.
getData
())
//保单发佣批次ID
.
batchBizId
(
batchBizId
)
//转介人姓名
.
broker
(
policyBroker
.
getBrokerName
())
//转介人业务ID
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
//发佣币种
// .currency(!Objects.isNull(commission) ? commission.getCurrency() : "")
//保单发佣业务id
.
fortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()))
//来佣名称
// .fortuneName("销售佣金")
//发佣期数
// .fortunePeriod(!Objects.isNull(commission) ? commission.getCommissionPeriod() : 0)
//发佣总期数
// .fortuneTotalPeriod(!Objects.isNull(commission) ? commission.getTotalPeriod() : 0)
//发佣类型 TODO
// .fortuneType()
//发佣日期
.
payoutDate
(
new
Date
())
//保单号
// .policyNo(policy.getPolicyNo())
//佣金发放状态 0=待出账 1=可出账 2=已出账
.
status
(
FortuneStatusEnum
.
WAIT
.
getItemValue
())
//所属团队 TODO
// .team()
//所属团队业务ID TODO
// .teamBizId()
.
build
());
return
Result
.
success
();
}
/**
* 执行 - 销售佣金 - 出账
* @param dto
* @return
*/
public
Result
executeBilling
(
ExecuteBillingDto
dto
)
{
PolicyBroker
policyBroker
=
dto
.
getPolicyBroker
();
Policy
policy
=
dto
.
getPolicy
();
Commission
commission
=
dto
.
getCommission
();
String
batchBizId
=
dto
.
getBatchBizId
();
//构造销售佣金基本法项目的顺序下标值执行
List
<
Integer
>
executionOrderList
=
new
ArrayList
<>();
executionOrderList
.
add
(
1
);
//保单出账先执行销售佣金基本法项目,入完到积分明细表里后,再执行保单绑定人的其他基本法项目
Result
<
List
<
AlgorithmResDto
>>
result
=
policyBrokerAlgorithm
(
AlgorithmDto
.
builder
()
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
.
executionOrderList
(
executionOrderList
)
.
isNegateExecutionOrderList
(
false
)
.
build
());
//生成业务员(转介人)积分明细表记录(销售积分)
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
.
builder
()
.
agentId
(
policyBroker
.
getBrokerBizId
())
.
policyNo
(
policy
.
getPolicyNo
())
.
algorithmResDtoList
(
result
.
getData
())
// .sourceType()
.
build
());
//生成销售-保单发佣表记录
generateFortune
(
GenerateFortuneDto
.
builder
()
//转介人绑定的基本法列表对应计算值
.
algorithmResDtoList
(
result
.
getData
())
//保单发佣批次ID
.
batchBizId
(
batchBizId
)
//转介人姓名
.
broker
(
policyBroker
.
getBrokerName
())
//转介人业务ID
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
//发佣币种
.
currency
(!
Objects
.
isNull
(
commission
)
?
commission
.
getCurrency
()
:
""
)
//保单发佣业务id
.
fortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()))
//来佣名称
.
fortuneName
(
"销售佣金"
)
//发佣期数
.
fortunePeriod
(!
Objects
.
isNull
(
commission
)
?
commission
.
getCommissionPeriod
()
:
0
)
//发佣总期数
.
fortuneTotalPeriod
(!
Objects
.
isNull
(
commission
)
?
commission
.
getTotalPeriod
()
:
0
)
//发佣类型 TODO
// .fortuneType()
//发佣日期
.
payoutDate
(
new
Date
())
//保单号
.
policyNo
(
policy
.
getPolicyNo
())
//佣金发放状态 0=待出账 1=可出账 2=已出账
.
status
(
FortuneStatusEnum
.
WAIT
.
getItemValue
())
//所属团队 TODO
// .team()
//所属团队业务ID TODO
// .teamBizId()
.
build
());
//生成保单发佣表记录
return
Result
.
success
();
}
/**
* 生成保单发佣表记录(出账记录)
* @return
*/
public
Result
generateFortune
(
GenerateFortuneDto
fortuneDto
)
{
if
(!
CollectionUtils
.
isEmpty
(
fortuneDto
.
getAlgorithmResDtoList
())
&&
fortuneDto
.
getAlgorithmResDtoList
().
size
()
==
1
)
{
//单个基本法项目绑定,新增单个发拥记录
//转介人绑定的基本法列表对应计算值列表不为空,且集合数量只有一条数据
AlgorithmResDto
algorithmResDto
=
fortuneDto
.
getAlgorithmResDtoList
().
get
(
0
);
if
(!
Objects
.
isNull
(
algorithmResDto
))
{
//发佣金额 = 基本法计算值
fortuneDto
.
setAmount
(
algorithmResDto
.
getCalculatedValue
());
//基本法项目配置表唯一业务ID
fortuneDto
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
}
Fortune
fortune
=
new
Fortune
();
BeanUtils
.
copyProperties
(
fortuneDto
,
fortune
);
fortuneService
.
saveOrUpdate
(
fortune
);
}
else
{
List
<
Fortune
>
fortuneList
=
new
ArrayList
<>();
//多个基本法项目绑定,批量新增多个发拥记录(每个基本法项目计算对象如果存在SQL模板计算多个结果列表(按照积分贡献者维度分组返回计算结果))
for
(
AlgorithmResDto
algorithmResDto
:
fortuneDto
.
getAlgorithmResDtoList
())
{
if
(!
CollectionUtils
.
isEmpty
(
algorithmResDto
.
getSqlAlgorithmResultDtoList
())
&&
algorithmResDto
.
getSqlAlgorithmResultDtoList
().
size
()
>
1
)
{
//SQL执行结果有多条(大于1条)计算值记录(按照积分贡献者维度分组返回的记录)- 新增发佣记录也按照这个维度新增记录
for
(
SqlAlgorithmResultDto
sqlAlgorithmResultDto
:
algorithmResDto
.
getSqlAlgorithmResultDtoList
())
{
Fortune
fortune
=
new
Fortune
();
//发佣金额 - 根据积分贡献者维度提供的积分新增发佣金记录
fortuneDto
.
setAmount
(
new
BigDecimal
(
sqlAlgorithmResultDto
.
getCalculatedValue
()));
//来佣名称 - 基本法项目名称
fortuneDto
.
setFortuneName
(
algorithmResDto
.
getItemName
());
BeanUtils
.
copyProperties
(
fortuneDto
,
fortune
);
fortuneList
.
add
(
fortune
);
}
}
}
else
{
List
<
SqlAlgorithmResultDto
>
sqlAlgorithmResultDtoList
=
algorithmResDto
.
getSqlAlgorithmResultDtoList
();
SqlAlgorithmResultDto
resultDto
=
sqlAlgorithmResultDtoList
.
get
(
0
);
Fortune
fortune
=
new
Fortune
();
//发佣金额 - 根据基本法项目维度计算的值来取值
fortuneDto
.
setAmount
(
algorithmResDto
.
getCalculatedValue
());
//来佣名称 - 基本法项目名称
fortuneDto
.
setFortuneName
(
algorithmResDto
.
getItemName
());
BeanUtils
.
copyProperties
(
fortuneDto
,
fortune
);
fortuneList
.
add
(
fortune
);
}
}
}
}
if
(!
CollectionUtils
.
isEmpty
(
fortuneList
))
{
fortuneService
.
saveOrUpdateBatch
(
fortuneList
);
}
}
}
return
null
;
return
Result
.
success
()
;
}
}
public
Result
saveBatchFortune
()
{
}
/**
/**
* 生成业务员(转介人)积分明细表记录
* 生成业务员(转介人)积分明细表记录
* @return
* @return
...
@@ -214,6 +429,11 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -214,6 +429,11 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
algorithmDto
.
setRuleItemBizId
(
ruleItemConfig
.
getRuleItemBizId
());
algorithmDto
.
setRuleItemBizId
(
ruleItemConfig
.
getRuleItemBizId
());
//算法-计算-基本法项目
//算法-计算-基本法项目
Result
<
AlgorithmResDto
>
result
=
ruleItemAlgorithm
(
algorithmDto
);
Result
<
AlgorithmResDto
>
result
=
ruleItemAlgorithm
(
algorithmDto
);
AlgorithmResDto
algorithmResDto
=
result
.
getData
();
if
(!
Objects
.
isNull
(
algorithmResDto
))
{
//基本法项目名称
algorithmResDto
.
setItemName
(
ruleItemConfig
.
getItemName
());
}
algorithmResDtoList
.
add
(
result
.
getData
());
algorithmResDtoList
.
add
(
result
.
getData
());
}
}
return
Result
.
success
(
algorithmResDtoList
);
return
Result
.
success
(
algorithmResDtoList
);
...
@@ -237,6 +457,7 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -237,6 +457,7 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
RelObjectFormula
relObjectFormula
=
relObjectFormulaList
.
get
(
0
);
RelObjectFormula
relObjectFormula
=
relObjectFormulaList
.
get
(
0
);
//公式配置表唯一业务ID
//公式配置表唯一业务ID
algorithmDto
.
setFormulaBizId
(
relObjectFormula
.
getFormulaBizId
());
algorithmDto
.
setFormulaBizId
(
relObjectFormula
.
getFormulaBizId
());
//算法-计算-公式
Result
<
AlgorithmResDto
>
result
=
calculationFormulaAlgorithm
(
algorithmDto
);
Result
<
AlgorithmResDto
>
result
=
calculationFormulaAlgorithm
(
algorithmDto
);
AlgorithmResDto
dto
=
result
.
getData
();
AlgorithmResDto
dto
=
result
.
getData
();
dto
.
setRuleBizId
(
algorithmDto
.
getRuleBizId
());
dto
.
setRuleBizId
(
algorithmDto
.
getRuleBizId
());
...
@@ -291,12 +512,54 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
...
@@ -291,12 +512,54 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
resDto
.
setCalculatedValue
(
result
);
resDto
.
setCalculatedValue
(
result
);
//TODO 前变量绑定的SQL模板计算结果集合列表(含计算值,以及计算值的提供者等等)
//通过计算公式-计算变量绑定的SQL模板计算结果集合列表
// resDto.setSqlAlgorithmResultDtoList();
Result
<
List
<
SqlAlgorithmResultDto
>>
listResult
=
calculateSqlAlgorithmResultDtoList
(
calculationFormulaBizId
,
variableValues
);
resDto
.
setSqlAlgorithmResultDtoList
(
listResult
.
getData
());
return
Result
.
success
(
resDto
);
return
Result
.
success
(
resDto
);
}
}
/**
/**
* 通过计算公式-计算变量绑定的SQL模板计算结果集合列表(大于一条SQL结果记录需要按照积分贡献者或者其他分组情况维度计算,一条SQL结果不需要这样计算,单独调用方法计算)
* @param calculationFormulaBizId
* @param variableValues
* @return
*/
public
Result
<
List
<
SqlAlgorithmResultDto
>>
calculateSqlAlgorithmResultDtoList
(
String
calculationFormulaBizId
,
List
<
VariableAlgorithmDto
>
variableValues
)
{
List
<
SqlAlgorithmResultDto
>
sqlAlgorithmResultDtoList
=
new
ArrayList
<>();
//查询出绑定的SQL模板计算结果集合列表长度大于1的记录
List
<
VariableAlgorithmDto
>
filterList
=
variableValues
.
stream
()
.
filter
(
dto
->
!
CollectionUtils
.
isEmpty
(
dto
.
getSqlAlgorithmResultDtoList
())
&&
dto
.
getSqlAlgorithmResultDtoList
().
size
()
>
1
).
collect
(
Collectors
.
toList
());
//查询出绑定的SQL模板计算结果集合列表长度小于等于1的记录(作为SQL模板计算结果集合列表长度大于1的记录的公式算子)
List
<
VariableAlgorithmDto
>
otherList
=
variableValues
.
stream
()
.
filter
(
dto
->
!
CollectionUtils
.
isEmpty
(
dto
.
getSqlAlgorithmResultDtoList
())
&&
dto
.
getSqlAlgorithmResultDtoList
().
size
()
<=
1
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
filterList
)
&&
filterList
.
size
()
==
1
)
{
VariableAlgorithmDto
algorithmDto
=
filterList
.
get
(
0
);
if
(!
CollectionUtils
.
isEmpty
(
algorithmDto
.
getSqlAlgorithmResultDtoList
()))
{
for
(
SqlAlgorithmResultDto
sqlAlgorithmResultDto
:
algorithmDto
.
getSqlAlgorithmResultDtoList
())
{
List
<
VariableAlgorithmDto
>
dtoList
=
new
ArrayList
<>();
dtoList
.
addAll
(
otherList
);
//构造evaluateFormula计算方法的VariableAlgorithmDto对象
VariableAlgorithmDto
dto
=
new
VariableAlgorithmDto
();
dto
.
setCalculatedValue
(
sqlAlgorithmResultDto
.
getCalculatedValue
());
dto
.
setVariableBizId
(
algorithmDto
.
getVariableBizId
());
dtoList
.
add
(
dto
);
//计算公式 - 将变量值代入公式进行计算
BigDecimal
result
=
evaluateFormula
(
calculationFormulaBizId
,
dtoList
);
SqlAlgorithmResultDto
resultDto
=
new
SqlAlgorithmResultDto
();
resultDto
.
setCalculatedValue
(
result
.
toString
());
resultDto
.
setProvider
(
sqlAlgorithmResultDto
.
getProvider
());
sqlAlgorithmResultDtoList
.
add
(
resultDto
);
}
}
}
return
Result
.
success
(
sqlAlgorithmResultDtoList
);
}
/**
* 计算公式 - 将变量值代入公式进行计算
* 计算公式 - 将变量值代入公式进行计算
* @param formula 公式字符串,如:"(variable_1001 + variable_2123) * variable_4455"
* @param formula 公式字符串,如:"(variable_1001 + variable_2123) * variable_4455"
* @param variableValues 变量值列表
* @param variableValues 变量值列表
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/QueryPolicyDto.java
0 → 100644
View file @
8d0d7161
package
com
.
yd
.
csf
.
service
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
QueryPolicyDto
{
/**
* 保单号列表
*/
private
List
<
String
>
policyNoList
;
}
yd-csf-service/src/main/java/com/yd/csf/service/model/Fortune.java
View file @
8d0d7161
...
@@ -146,6 +146,11 @@ public class Fortune implements Serializable {
...
@@ -146,6 +146,11 @@ public class Fortune implements Serializable {
private
String
calculationFormula
;
private
String
calculationFormula
;
/**
/**
* 基本法项目配置表唯一业务ID
*/
private
String
ruleItemBizId
;
/**
* 通用备注
* 通用备注
*/
*/
private
String
remark
;
private
String
remark
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyService.java
View file @
8d0d7161
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.yd.csf.service.dto.PolicyDto
;
import
com.yd.csf.service.dto.PolicyDto
;
import
com.yd.csf.service.dto.PolicyQueryRequest
;
import
com.yd.csf.service.dto.PolicyQueryRequest
;
import
com.yd.csf.service.dto.PolicyUpdateRequest
;
import
com.yd.csf.service.dto.PolicyUpdateRequest
;
import
com.yd.csf.service.dto.QueryPolicyDto
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.Policy
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yd.csf.service.vo.PolicyVO
;
import
com.yd.csf.service.vo.PolicyVO
;
...
@@ -25,5 +26,5 @@ public interface PolicyService extends IService<Policy> {
...
@@ -25,5 +26,5 @@ public interface PolicyService extends IService<Policy> {
Boolean
updatePolicy
(
PolicyUpdateRequest
policyUpdateRequest
);
Boolean
updatePolicy
(
PolicyUpdateRequest
policyUpdateRequest
);
List
<
Policy
>
queryList
(
PolicyDto
dto
);
List
<
Policy
>
queryList
(
Query
PolicyDto
dto
);
}
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyServiceImpl.java
View file @
8d0d7161
...
@@ -10,6 +10,7 @@ import com.yd.common.exception.BusinessException;
...
@@ -10,6 +10,7 @@ import com.yd.common.exception.BusinessException;
import
com.yd.csf.service.dto.PolicyDto
;
import
com.yd.csf.service.dto.PolicyDto
;
import
com.yd.csf.service.dto.PolicyQueryRequest
;
import
com.yd.csf.service.dto.PolicyQueryRequest
;
import
com.yd.csf.service.dto.PolicyUpdateRequest
;
import
com.yd.csf.service.dto.PolicyUpdateRequest
;
import
com.yd.csf.service.dto.QueryPolicyDto
;
import
com.yd.csf.service.model.AppointmentFile
;
import
com.yd.csf.service.model.AppointmentFile
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.service.PolicyPolicyholderService
;
import
com.yd.csf.service.service.PolicyPolicyholderService
;
...
@@ -106,7 +107,7 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
...
@@ -106,7 +107,7 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
* @return
* @return
*/
*/
@Override
@Override
public
List
<
Policy
>
queryList
(
PolicyDto
dto
)
{
public
List
<
Policy
>
queryList
(
Query
PolicyDto
dto
)
{
List
<
Policy
>
list
=
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
Policy
>()
List
<
Policy
>
list
=
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
Policy
>()
.
in
(!
CollectionUtils
.
isEmpty
(
dto
.
getPolicyNoList
()),
Policy:
:
getPolicyNo
,
dto
.
getPolicyNoList
())
.
in
(!
CollectionUtils
.
isEmpty
(
dto
.
getPolicyNoList
()),
Policy:
:
getPolicyNo
,
dto
.
getPolicyNoList
())
);
);
...
...
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