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
a2d0c11b
Commit
a2d0c11b
authored
Nov 10, 2025
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
基本法
parent
8d0d7161
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
531 additions
and
312 deletions
+531
-312
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmDto.java
+6
-1
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmResDto.java
+0
-3
yd-csf-api/src/main/java/com/yd/csf/api/dto/ExecuteBillingDto.java
+18
-4
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateAgentDetailFycDto.java
+10
-7
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateFortuneDto.java
+3
-4
yd-csf-api/src/main/java/com/yd/csf/api/dto/SqlAlgorithmResultDto.java
+18
-2
yd-csf-api/src/main/java/com/yd/csf/api/dto/SqlTemplateParamDto.java
+35
-3
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAgentDetailFycServiceImpl.java
+23
-50
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiBasicLawCalculateServiceImpl.java
+174
-177
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiVariableServiceImpl.java
+45
-37
yd-csf-api/src/main/java/com/yd/csf/api/utils/FormulaParser.java
+28
-22
yd-csf-feign/src/main/java/com/yd/csf/feign/request/commissionruleconfig/ApiCommissionRuleConfigAddRequest.java
+3
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/request/commissionruleconfig/ApiCommissionRuleConfigEditRequest.java
+3
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/request/variable/ApiVariableAddRequest.java
+1
-1
yd-csf-feign/src/main/java/com/yd/csf/feign/request/variable/ApiVariableEditRequest.java
+1
-1
yd-csf-service/src/main/java/com/yd/csf/service/dao/CommissionMapper.java
+6
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionBindPolicyBrokerDto.java
+103
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionRuleBindingDto.java
+4
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionRuleBinding.java
+6
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionService.java
+2
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/FortuneService.java
+2
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionRuleBindingServiceImpl.java
+1
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
+10
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
+11
-0
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
+18
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmDto.java
View file @
a2d0c11b
...
...
@@ -21,11 +21,16 @@ public class AlgorithmDto {
private
String
batchBizId
;
/**
* 转介人业务ID(客户端用户表唯一业务ID)
*
保单绑定的
转介人业务ID(客户端用户表唯一业务ID)
*/
private
String
brokerBizId
;
/**
* 获得积分的用户(客户端用户表唯一业务ID)
*/
private
String
clientUserBizId
;
/**
* 基本法配置表唯一业务ID(业务员绑定的基本法类型(类型中含多个基本法项目(基本法项目绑定公式)))
*/
private
String
ruleBizId
;
...
...
yd-csf-api/src/main/java/com/yd/csf/api/dto/AlgorithmResDto.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
...
...
@@ -12,7 +10,6 @@ import java.util.List;
@Data
public
class
AlgorithmResDto
{
/**
* 基本法配置表唯一业务ID(基本法类型)
*/
...
...
yd-csf-api/src/main/java/com/yd/csf/api/dto/ExecuteBillingDto.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.yd.csf.service.dto.CommissionBindPolicyBrokerDto
;
import
com.yd.csf.service.model.Commission
;
import
com.yd.csf.service.model.CommissionRuleBinding
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyBroker
;
import
lombok.AllArgsConstructor
;
...
...
@@ -14,11 +16,23 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public
class
ExecuteBillingDto
{
private
PolicyBroker
policyBroker
;
/**
* 获得积分的业务员(客户端用户表唯一业务ID)
*/
private
String
clientUserBizId
;
private
Policy
policy
;
private
Commission
commission
;
/**
* 获得积分的业务员姓名
*/
private
String
name
;
/**
* 出账的批次号
*/
private
String
batchBizId
;
/**
* 来佣绑定的保单和转介人(销售)信息封装
*/
private
CommissionBindPolicyBrokerDto
brokerDto
;
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateAgentDetailFycDto.java
View file @
a2d0c11b
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.util.List
;
/**
...
...
@@ -18,27 +16,32 @@ import java.util.List;
public
class
GenerateAgentDetailFycDto
{
/**
*
业务员ID(客户端用户表唯一业务ID,转介人
业务ID)
*
获得积分的业务员(客户端用户唯一
业务ID)
*/
private
String
agentId
;
/**
* 积分来源类型:保单转介费、一级管理奖、二级管理奖、辅导津贴奖、终身推荐奖
*
提供
积分来源类型:保单转介费、一级管理奖、二级管理奖、辅导津贴奖、终身推荐奖
*/
private
String
sourceType
;
/**
* 积分提供的保单号
* 提供积分的业务员(客户端用户唯一业务ID)
*/
private
String
provider
;
/**
* 提供积分的保单号
*/
private
String
policyNo
;
/**
* 保单发佣批次ID
*
提供积分的
保单发佣批次ID
*/
private
String
batchBizId
;
/**
*
转介人绑定的基本法列表对应计算值
*
获得积分的业务员绑定的基本法列表(基本法计算值列表)
*/
private
List
<
AlgorithmResDto
>
algorithmResDtoList
;
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateFortuneDto.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
...
...
@@ -41,12 +40,12 @@ public class GenerateFortuneDto {
private
Integer
fortuneTotalPeriod
;
/**
* 转介人
* 转介人
(获得积分的业务员)
*/
private
String
broker
;
/**
* 转介人业务ID
* 转介人业务ID
(获得积分的业务员)
*/
private
String
brokerBizId
;
...
...
@@ -96,7 +95,7 @@ public class GenerateFortuneDto {
private
String
ruleItemBizId
;
/**
*
转介人
绑定的基本法列表对应计算值
*
获得积分业务员
绑定的基本法列表对应计算值
*/
private
List
<
AlgorithmResDto
>
algorithmResDtoList
;
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/SqlAlgorithmResultDto.java
View file @
a2d0c11b
...
...
@@ -8,15 +8,31 @@ import lombok.Data;
@Data
public
class
SqlAlgorithmResultDto
{
//以下通用字段
/**
* 计算的积分值提供者(业务员-客户端用户业务ID)
*/
private
String
provider
;
/**
* 计算值
* 计算
的积分
值
*/
private
String
calculatedValue
;
//TODO 后续扩展
//以下扩展字段
/**
* 计算的积分值提供者(业务员-客户端用户业务ID)绑定的保单发佣批次ID
*/
private
String
batchBizId
;
/**
* 计算的积分值提供者(业务员-客户端用户业务ID)绑定的保单发佣业务id
*/
private
String
fortuneBizId
;
/**
* 计算的积分值提供者(业务员-客户端用户业务ID)绑定的保单号
*/
private
String
policyNo
;
}
yd-csf-api/src/main/java/com/yd/csf/api/dto/SqlTemplateParamDto.java
View file @
a2d0c11b
...
...
@@ -15,7 +15,27 @@ import lombok.NoArgsConstructor;
public
class
SqlTemplateParamDto
{
/**
* 条件类型表唯一业务ID
* 保单绑定转介人业务ID(销售业务员,客户端用户表唯一业务ID,也可以单独用作客户端用户ID非绑定保单使用)
*/
private
String
brokerBizId
;
/**
* 获得积分的用户(客户端用户表唯一业务ID)
*/
private
String
clientUserBizId
;
/**
* 保单发佣批次ID
*/
private
String
batchBizId
;
/**
* 保单来佣业务id
*/
private
String
commissionBizId
;
/**
* 基本法-条件类型表唯一业务ID
*/
private
String
conditionTypeBizId
;
...
...
@@ -24,13 +44,25 @@ public class SqlTemplateParamDto {
*/
private
String
policyNo
;
//======计算SQL-产品公告比例入参参数-start======
/**
* 保险产品唯一业务ID
*/
private
String
productBizId
;
/**
* 产品代码
*/
private
String
productCode
;
/**
*
保单绑定转介人业务ID(销售业务员,客户端用户表唯一业务ID)
*
供款年期(产品有5年期的有10年期等)(总期数)
*/
private
String
brokerBizId
;
private
Integer
term
;
/**
* 期数(数字代表第几年)
*/
private
Integer
issueNumber
;
//======计算SQL-产品公告比例入参参数-end======
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAgentDetailFycServiceImpl.java
View file @
a2d0c11b
...
...
@@ -10,6 +10,7 @@ import com.yd.csf.service.model.AgentDetailFyc;
import
com.yd.csf.service.service.IAgentAccumulatedFycService
;
import
com.yd.csf.service.service.IAgentDetailFycService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
...
...
@@ -45,56 +46,28 @@ public class ApiAgentDetailFycServiceImpl implements ApiAgentDetailFycService {
}
if
(!
CollectionUtils
.
isEmpty
(
algorithmResDtoList
))
{
for
(
AlgorithmResDto
algorithmResDto
:
algorithmResDtoList
){
if
(!
CollectionUtils
.
isEmpty
(
algorithmResDto
.
getSqlAlgorithmResultDtoList
()))
{
for
(
SqlAlgorithmResultDto
sqlAlgorithmResultDto
:
algorithmResDto
.
getSqlAlgorithmResultDtoList
())
{
AgentDetailFyc
agentDetailFyc
=
new
AgentDetailFyc
();
//变化前的业务员总FYC积分 -> 查询
agentDetailFyc
.
setBeforeFyc
(
totalFyc
);
//累加积分值
totalFyc
=
totalFyc
.
add
(
new
BigDecimal
(
sqlAlgorithmResultDto
.
getCalculatedValue
()));
//变化值(-代表减少)
agentDetailFyc
.
setChangeFyc
(
sqlAlgorithmResultDto
.
getCalculatedValue
());
//变化后的业务员总FYC积分
agentDetailFyc
.
setAfterFyc
(
totalFyc
);
//业务员ID(客户端用户表唯一业务ID)获取积分的人
agentDetailFyc
.
setAgentId
(
dto
.
getAgentId
());
//积分来源类型 TODO
// agentDetailFyc.setSourceType();
//积分来源基本法项目配置表唯一业务ID
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//保单发佣批次ID
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
//积分提供的保单号
agentDetailFyc
.
setPolicyNo
(
dto
.
getPolicyNo
());
//积分提供者(客户端用户表唯一业务ID)
agentDetailFyc
.
setProvideId
(
sqlAlgorithmResultDto
.
getProvider
());
agentDetailFycList
.
add
(
agentDetailFyc
);
}
}
else
{
AgentDetailFyc
agentDetailFyc
=
new
AgentDetailFyc
();
//变化前的业务员总FYC积分 -> 查询
agentDetailFyc
.
setBeforeFyc
(
totalFyc
);
//累加积分值
totalFyc
=
totalFyc
.
add
(
algorithmResDto
.
getCalculatedValue
());
//变化值(-代表减少)
agentDetailFyc
.
setChangeFyc
(
algorithmResDto
.
getCalculatedValue
().
toString
());
//变化后的业务员总FYC积分
agentDetailFyc
.
setAfterFyc
(
totalFyc
);
//业务员ID(客户端用户表唯一业务ID)获取积分的人
agentDetailFyc
.
setAgentId
(
dto
.
getAgentId
());
//积分来源类型 TODO
// agentDetailFyc.setSourceType();
//积分来源基本法项目配置表唯一业务ID
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//保单发佣批次ID
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
//积分提供的保单号
agentDetailFyc
.
setPolicyNo
(
dto
.
getPolicyNo
());
//积分提供者(客户端用户表唯一业务ID)
// agentDetailFyc.setProvideId(sqlAlgorithmResultDto.getProvider());
agentDetailFycList
.
add
(
agentDetailFyc
);
}
AgentDetailFyc
agentDetailFyc
=
new
AgentDetailFyc
();
//变化前的业务员总FYC积分 -> 查询
agentDetailFyc
.
setBeforeFyc
(
totalFyc
);
//累加积分值
totalFyc
=
totalFyc
.
add
(
algorithmResDto
.
getCalculatedValue
());
//变化值(-代表减少)
agentDetailFyc
.
setChangeFyc
(
algorithmResDto
.
getCalculatedValue
().
toString
());
//变化后的业务员总FYC积分
agentDetailFyc
.
setAfterFyc
(
totalFyc
);
//获得积分的业务员(客户端用户唯一业务ID)
agentDetailFyc
.
setAgentId
(
dto
.
getAgentId
());
//积分来源类型 TODO
// agentDetailFyc.setSourceType();
//积分来源基本法项目配置表唯一业务ID
agentDetailFyc
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//提供积分的保单发佣批次ID
agentDetailFyc
.
setBatchBizId
(
dto
.
getBatchBizId
());
//提供积分的保单号
agentDetailFyc
.
setPolicyNo
(
dto
.
getPolicyNo
());
//提供积分的业务员(客户端用户唯一业务ID)
agentDetailFyc
.
setProvideId
(
dto
.
getProvider
());
agentDetailFycList
.
add
(
agentDetailFyc
);
}
}
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiBasicLawCalculateServiceImpl.java
View file @
a2d0c11b
...
...
@@ -2,6 +2,8 @@ package com.yd.csf.api.service.impl;
import
com.yd.common.constant.CodeGeneratorConstants
;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.enums.ProjectEnum
;
import
com.yd.common.enums.TenantEnum
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.common.utils.RandomStringGenerator
;
...
...
@@ -17,12 +19,14 @@ import com.yd.csf.service.enums.FortuneStatusEnum;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.insurance.base.feign.client.ApiRelProductAnnouncementFeignClient
;
import
com.yd.user.feign.client.clientuser.ApiClientUserFeignClient
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
org.springframework.util.CollectionUtils
;
import
javax.script.ScriptEngine
;
...
...
@@ -80,6 +84,10 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
@Autowired
private
TransactionTemplate
transactionTemplate
;
@Autowired
private
ApiClientUserFeignClient
apiClientUserFeignClient
;
/**
* 获取JdbcTemplate(需要注入)
*/
...
...
@@ -96,144 +104,117 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
* @return
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
<
ApiGenerateBillingResponse
>
generateBilling
(
ApiGenerateBillingRequest
request
)
{
//根据保单来佣业务id列表查询保单业务ID列表
List
<
Commission
>
commissionList
=
commissionService
.
queryList
(
CommissionDto
.
builder
().
commissionBizIdList
(
request
.
getCommissionBizIdList
()).
build
());
if
(
CollectionUtils
.
isEmpty
(
commissionList
))
{
//根据保单来佣业务id列表查询来佣保单转介人关系信息
List
<
CommissionBindPolicyBrokerDto
>
policyBrokerDtoList
=
commissionService
.
queryCommissionBindPolicyBrokerList
(
CommissionDto
.
builder
()
.
commissionBizIdList
(
request
.
getCommissionBizIdList
())
.
build
());
if
(
CollectionUtils
.
isEmpty
(
policyBrokerDtoList
))
{
throw
new
BusinessException
(
"来佣数据不存在"
);
}
//根据保单号分组,取每组的第一条, 获取最后的去重的来佣列表
List
<
Commission
>
distinctCommissionList
=
commissionList
.
stream
()
.
collect
(
Collectors
.
collectingAndThen
(
Collectors
.
toMap
(
Commission:
:
getPolicyNo
,
//保单号作为key
Function
.
identity
(),
//Commission对象本身作为value
(
existing
,
replacement
)
->
existing
//遇到重复key时保留已存在的
),
map
->
new
ArrayList
<>(
map
.
values
())));
//获取保单号列表
List
<
String
>
policyNoList
=
distinctCommissionList
.
stream
().
map
(
Commission:
:
getPolicyNo
).
collect
(
Collectors
.
toList
());
//查询保单列表信息
List
<
Policy
>
policyList
=
policyService
.
queryList
(
QueryPolicyDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
//保单绑定的转介人去重列表(用于奖励基本法项目计算)
List
<
PolicyBroker
>
policyBrokerDistinctList
=
new
ArrayList
<>();
//查询所有绑定基本法的业务员(客户端用户表用户), 计算业务员绑定的所有基本法对应的计算值, 新增积分明细和发佣记录
List
<
CommissionRuleBinding
>
commissionRuleBindingList
=
new
ArrayList
<>();
//根据租户ID和项目ID查询客户端用户ID列表
Result
<
List
<
String
>>
result
=
apiClientUserFeignClient
.
clientUserBizIdList
(
TenantEnum
.
YD
.
getTenantBizId
(),
ProjectEnum
.
CSF_MINI_PROGRAM
.
getProjectBizId
());
if
(!
CollectionUtils
.
isEmpty
(
result
.
getData
()))
{
commissionRuleBindingList
=
iCommissionRuleBindingService
.
queryList
(
CommissionRuleBindingDto
.
builder
()
.
targetIdList
(
result
.
getData
())
.
build
());
}
if
(
CollectionUtils
.
isEmpty
(
commissionRuleBindingList
))
{
throw
new
BusinessException
(
"绑定基本法数据不存在"
);
}
//保单发佣批次ID
String
batchBizId
=
RandomStringGenerator
.
generateBizId16
(
CodeGeneratorConstants
.
PREFIX_FORTUNE_BATCH_BIZ_ID
);
if
(!
CollectionUtils
.
isEmpty
(
policyList
))
{
//查询保单转介人(销售人员)关系数据
List
<
PolicyBroker
>
policyBrokerList
=
policyBrokerService
.
queryList
(
QueryPolicyBrokerDto
.
builder
().
policyNoList
(
policyNoList
).
build
());
for
(
Policy
policy
:
policyList
)
{
List
<
PolicyBroker
>
thisPolicyBrokerList
=
new
ArrayList
<>();
//当前保单的绑定的转介人(销售人员)列表
if
(!
CollectionUtils
.
isEmpty
(
policyBrokerList
))
{
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
))
{
//遍历当前保单绑定的转介人列表,根据人绑定的基本法项目(计算销售佣金,推荐佣金,辅导员佣金,终身推荐奖等。)绑定什么项目算什么金额,按照佣金项目执行顺序来计算。
for
(
PolicyBroker
policyBroker
:
thisPolicyBrokerList
)
{
//执行 - 销售佣金 - 出账
executeBilling
(
ExecuteBillingDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
commission
(
commission
)
.
policy
(
policy
)
.
policyBroker
(
policyBroker
)
.
build
());
policyBrokerDistinctList
.
add
(
policyBroker
);
}
}
//遍历来佣保单转介人关系信息,跑基本法。
for
(
CommissionBindPolicyBrokerDto
brokerDto
:
policyBrokerDtoList
)
{
//执行 - 销售佣金 - 出账 (销售佣金基本法)
executeBilling
(
ExecuteBillingDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
brokerDto
(
brokerDto
)
.
build
());
//非销售佣金积基本法 - 遍历所有绑定基本法的用户(客户端用户表用户), 计算用户绑定的所有基本法对应的计算值, 新增积分明细和发佣记录 (和保单绑定的转介人在执行基本法项目的SQL时候进行关系对比)
for
(
CommissionRuleBinding
binding
:
commissionRuleBindingList
)
{
//执行 - 奖励 (非销售佣金积基本法)
executeReward
(
ExecuteBillingDto
.
builder
()
.
clientUserBizId
(
binding
.
getTargetId
())
.
name
(
binding
.
getTargetName
())
.
batchBizId
(
batchBizId
)
.
brokerDto
(
brokerDto
)
.
build
());
}
}
// 在事务外部先处理好去重逻辑
List
<
PolicyBroker
>
distinctBrokers
=
policyBrokerDistinctList
.
stream
()
.
collect
(
Collectors
.
collectingAndThen
(
Collectors
.
toMap
(
PolicyBroker:
:
getBrokerBizId
,
Function
.
identity
(),
(
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
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
executeReward
(
ExecuteBillingDto
dto
)
{
PolicyBroker
policyBroker
=
dto
.
getPolicyBroker
();
// Policy policy = dto.getPolicy();
// Commission commission = dto.getCommission();
CommissionBindPolicyBrokerDto
brokerDto
=
dto
.
getBrokerDto
();
String
batchBizId
=
dto
.
getBatchBizId
();
//构造销售佣金基本法项目的顺序下标值执行
List
<
Integer
>
executionOrderList
=
new
ArrayList
<>();
executionOrderList
.
add
(
1
);
//执行
保单绑定人
的非销售佣金基本法项目
//执行
获得积分用户
的非销售佣金基本法项目
Result
<
List
<
AlgorithmResDto
>>
result
=
policyBrokerAlgorithm
(
AlgorithmDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
.
brokerBizId
(
brokerDto
.
getBrokerBizId
())
.
clientUserBizId
(
dto
.
getClientUserBizId
())
.
sqlTemplateParamDto
(
SqlTemplateParamDto
.
builder
()
.
brokerBizId
(
brokerDto
.
getBrokerBizId
())
.
clientUserBizId
(
dto
.
getClientUserBizId
())
.
batchBizId
(
batchBizId
)
.
commissionBizId
(
brokerDto
.
getCommissionBizId
())
.
policyNo
(
brokerDto
.
getPolicyNo
())
.
productBizId
(
brokerDto
.
getPlanBizId
())
.
productCode
(
brokerDto
.
getProductCode
())
.
term
(
brokerDto
.
getTotalPeriod
())
.
issueNumber
(
brokerDto
.
getCommissionPeriod
())
.
build
())
.
executionOrderList
(
executionOrderList
)
.
isNegateExecutionOrderList
(
tru
e
)
.
isNegateExecutionOrderList
(
fals
e
)
.
build
());
//生成
业务员(转介人)
积分明细表记录
//生成
获得积分的用户的
积分明细表记录
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
.
builder
()
.
batchBizId
(
batchBizId
)
.
agentId
(
policyBroker
.
getBrokerBizId
())
// .policyNo(policy
.getPolicyNo())
.
agentId
(
dto
.
getClientUserBizId
()
)
.
provider
(
brokerDto
.
getBrokerBizId
())
.
policyNo
(
brokerDto
.
getPolicyNo
())
.
algorithmResDtoList
(
result
.
getData
())
// .sourceType()
.
build
());
//生成
销售-保单发佣表记录
//生成
保单发佣表记录 (非销售佣金基本法)
generateFortune
(
GenerateFortuneDto
.
builder
()
//
转介人
绑定的基本法列表对应计算值
//
获得积分的用户
绑定的基本法列表对应计算值
.
algorithmResDtoList
(
result
.
getData
())
//保单发佣批次ID
.
batchBizId
(
batchBizId
)
//
转介人
姓名
.
broker
(
policyBroker
.
getBroker
Name
())
//
转介人
业务ID
.
brokerBizId
(
policyBroker
.
getBrok
erBizId
())
//
获得积分的用户
姓名
.
broker
(
dto
.
get
Name
())
//
获得积分的用户
业务ID
.
brokerBizId
(
dto
.
getClientUs
erBizId
())
//发佣币种
// .currency(!Objects.isNull(commission) ? commission.getCurrency() : "")
//保单发佣业务id
.
fortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()))
//来佣名称
// .fortuneName("销售佣金")
.
currency
(
brokerDto
.
getCurrency
())
//发佣期数
// .fortunePeriod(!Objects.isNull(commission) ? commission.getCommissionPeriod() : 0
)
.
fortunePeriod
(
brokerDto
.
getCommissionPeriod
()
)
//发佣总期数
// .fortuneTotalPeriod(!Objects.isNull(commission) ? commission.getTotalPeriod() : 0
)
.
fortuneTotalPeriod
(
brokerDto
.
getTotalPeriod
()
)
//发佣类型 TODO
// .fortuneType()
//发佣日期
.
payoutDate
(
new
Date
())
//保单号
// .policyNo(policy
.getPolicyNo())
.
policyNo
(
brokerDto
.
getPolicyNo
())
//佣金发放状态 0=待出账 1=可出账 2=已出账
.
status
(
FortuneStatusEnum
.
WAIT
.
getItemValue
())
//所属团队 TODO
...
...
@@ -246,30 +227,40 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
}
/**
* 执行 - 销售佣金 - 出账
* 执行 - 销售佣金 - 出账
(销售佣金基本法)
* @param dto
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
executeBilling
(
ExecuteBillingDto
dto
)
{
PolicyBroker
policyBroker
=
dto
.
getPolicyBroker
();
Policy
policy
=
dto
.
getPolicy
();
Commission
commission
=
dto
.
getCommission
();
String
batchBizId
=
dto
.
getBatchBizId
();
CommissionBindPolicyBrokerDto
brokerDto
=
dto
.
getBrokerDto
();
//构造销售佣金基本法项目的顺序下标值执行
List
<
Integer
>
executionOrderList
=
new
ArrayList
<>();
executionOrderList
.
add
(
1
);
//保单出账先执行销售佣金基本法项目,入完到积分明细表里后,再执行保单绑定人的其他基本法项目
Result
<
List
<
AlgorithmResDto
>>
result
=
policyBrokerAlgorithm
(
AlgorithmDto
.
builder
()
.
brokerBizId
(
policyBroker
.
getBrokerBizId
())
.
brokerBizId
(
brokerDto
.
getBrokerBizId
())
.
clientUserBizId
(
brokerDto
.
getBrokerBizId
())
.
sqlTemplateParamDto
(
SqlTemplateParamDto
.
builder
()
.
brokerBizId
(
brokerDto
.
getBrokerBizId
())
.
batchBizId
(
batchBizId
)
.
commissionBizId
(
brokerDto
.
getCommissionBizId
())
.
policyNo
(
brokerDto
.
getPolicyNo
())
.
productBizId
(
brokerDto
.
getPlanBizId
())
.
productCode
(
brokerDto
.
getProductCode
())
.
term
(
brokerDto
.
getTotalPeriod
())
.
issueNumber
(
brokerDto
.
getCommissionPeriod
())
.
build
())
.
executionOrderList
(
executionOrderList
)
.
isNegateExecutionOrderList
(
false
)
.
build
());
//生成业务员(转介人)积分明细表记录(销售积分)
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
.
builder
()
.
agentId
(
policyBroker
.
getBrokerBizId
())
.
policyNo
(
policy
.
getPolicyNo
())
.
agentId
(
brokerDto
.
getBrokerBizId
())
.
policyNo
(
brokerDto
.
getPolicyNo
())
.
algorithmResDtoList
(
result
.
getData
())
// .sourceType()
.
build
());
...
...
@@ -281,26 +272,22 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
.
algorithmResDtoList
(
result
.
getData
())
//保单发佣批次ID
.
batchBizId
(
batchBizId
)
//
转介人
姓名
.
broker
(
policyBroker
.
getBroker
Name
())
//
转介人
业务ID
.
brokerBizId
(
policyBroker
.
getBrok
erBizId
())
//
获得积分的转介人(业务员)
姓名
.
broker
(
dto
.
get
Name
())
//
获得积分的转介人(业务员)
业务ID
.
brokerBizId
(
dto
.
getClientUs
erBizId
())
//发佣币种
.
currency
(!
Objects
.
isNull
(
commission
)
?
commission
.
getCurrency
()
:
""
)
//保单发佣业务id
.
fortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()))
//来佣名称
.
fortuneName
(
"销售佣金"
)
.
currency
(
brokerDto
.
getCurrency
())
//发佣期数
.
fortunePeriod
(
!
Objects
.
isNull
(
commission
)
?
commission
.
getCommissionPeriod
()
:
0
)
.
fortunePeriod
(
brokerDto
.
getCommissionPeriod
()
)
//发佣总期数
.
fortuneTotalPeriod
(
!
Objects
.
isNull
(
commission
)
?
commission
.
getTotalPeriod
()
:
0
)
.
fortuneTotalPeriod
(
brokerDto
.
getTotalPeriod
()
)
//发佣类型 TODO
// .fortuneType()
//发佣日期
.
payoutDate
(
new
Date
())
//保单号
.
policyNo
(
policy
.
getPolicyNo
())
.
policyNo
(
brokerDto
.
getPolicyNo
())
//佣金发放状态 0=待出账 1=可出账 2=已出账
.
status
(
FortuneStatusEnum
.
WAIT
.
getItemValue
())
//所属团队 TODO
...
...
@@ -316,53 +303,44 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
* 生成保单发佣表记录(出账记录)
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
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模板计算多个结果列表(按照积分贡献者维度分组返回计算结果))
List
<
Fortune
>
fortuneList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
fortuneDto
.
getAlgorithmResDtoList
()))
{
//获得积分业务员绑定的基本法列表对应计算值结果集合
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
);
Fortune
fortune
=
new
Fortune
();
//发佣金额 -> 计算值 - sqlAlgorithmResultDtoList集合里面的计算值和值
fortune
.
setAmount
(
algorithmResDto
.
getCalculatedValue
());
//保单发佣批次ID
fortune
.
setBatchBizId
(
fortuneDto
.
getBatchBizId
());
//转介人姓名 (获得积分的业务员)
fortune
.
setBroker
(
fortuneDto
.
getBroker
());
//转介人业务ID (获得积分的业务员)
fortune
.
setBrokerBizId
(
fortuneDto
.
getBrokerBizId
());
//出账项目名称 -> 基本法项目名称
fortune
.
setFortuneName
(
algorithmResDto
.
getItemName
());
//保单发佣业务id
fortune
.
setFortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()));
//基本法项目配置表唯一业务ID
fortune
.
setRuleItemBizId
(
algorithmResDto
.
getRuleItemBizId
());
//发佣币种
fortune
.
setCurrency
(
fortuneDto
.
getCurrency
());
//发佣期数
fortune
.
setFortunePeriod
(
fortuneDto
.
getFortunePeriod
());
//发佣总期数
fortune
.
setFortuneTotalPeriod
(
fortuneDto
.
getFortuneTotalPeriod
());
//保单号
fortune
.
setPolicyNo
(
fortuneDto
.
getPolicyNo
());
fortuneList
.
add
(
fortune
);
}
}
if
(!
CollectionUtils
.
isEmpty
(
fortuneList
))
{
fortuneService
.
saveOrUpdateBatch
(
fortuneList
);
}
return
Result
.
success
();
}
...
...
@@ -370,6 +348,7 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
* 生成业务员(转介人)积分明细表记录
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
generateAgentDetailFyc
(
GenerateAgentDetailFycDto
dto
){
//基本法计算 - 保存积分明细表
apiAgentDetailFycService
.
saveAgentDetailFyc
(
dto
);
...
...
@@ -382,17 +361,23 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
* @return
*/
public
Result
<
List
<
AlgorithmResDto
>>
policyBrokerAlgorithm
(
AlgorithmDto
algorithmDto
)
{
List
<
AlgorithmResDto
>
algorithmResDtoList
=
new
ArrayList
<>();
//校验 - 转介人业务ID(客户端用户表唯一业务ID)不能为空
if
(
StringUtils
.
isBlank
(
algorithmDto
.
getBrokerBizId
()))
{
throw
new
BusinessException
(
"转介人业务ID(客户端用户表唯一业务ID)不能为空"
);
}
List
<
CommissionRuleBinding
>
commissionRuleBindingList
=
iCommissionRuleBindingService
.
queryList
(
CommissionRuleBindingDto
.
builder
().
targetId
(
algorithmDto
.
get
Brok
erBizId
()).
build
());
List
<
CommissionRuleBinding
>
commissionRuleBindingList
=
iCommissionRuleBindingService
.
queryList
(
CommissionRuleBindingDto
.
builder
().
targetId
(
algorithmDto
.
get
ClientUs
erBizId
()).
build
());
if
(
CollectionUtils
.
isEmpty
(
commissionRuleBindingList
))
{
throw
new
BusinessException
(
"
业务员基本法绑定
信息不存在"
);
throw
new
BusinessException
(
"
获得积分的用户所绑定的基本法
信息不存在"
);
}
CommissionRuleBinding
commissionRuleBinding
=
commissionRuleBindingList
.
get
(
0
);
algorithmDto
.
setRuleBizId
(
commissionRuleBinding
.
getRuleBizId
());
return
commissionRuleAlgorithm
(
algorithmDto
);
//执行获得积分的用户绑定的多个基本法类型 (一个基本法类型又有多个基本法项目)
for
(
CommissionRuleBinding
commissionRuleBinding
:
commissionRuleBindingList
)
{
algorithmDto
.
setRuleBizId
(
commissionRuleBinding
.
getRuleBizId
());
Result
<
List
<
AlgorithmResDto
>>
result
=
commissionRuleAlgorithm
(
algorithmDto
);
//多个基本法类型执行结果列表汇总
algorithmResDtoList
.
addAll
(
result
.
getData
());
}
return
Result
.
success
(
algorithmResDtoList
);
}
/**
...
...
@@ -434,7 +419,7 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
//基本法项目名称
algorithmResDto
.
setItemName
(
ruleItemConfig
.
getItemName
());
}
algorithmResDtoList
.
add
(
result
.
getData
()
);
algorithmResDtoList
.
add
(
algorithmResDto
);
}
return
Result
.
success
(
algorithmResDtoList
);
}
...
...
@@ -513,8 +498,8 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
resDto
.
setCalculatedValue
(
result
);
//通过计算公式-计算变量绑定的SQL模板计算结果集合列表
Result
<
List
<
SqlAlgorithmResultDto
>>
listResult
=
calculateSqlAlgorithmResultDtoList
(
calculationFormulaBizId
,
variableValues
);
resDto
.
setSqlAlgorithmResultDtoList
(
listResult
.
getData
());
//
Result<List<SqlAlgorithmResultDto>> listResult = calculateSqlAlgorithmResultDtoList(calculationFormulaBizId,variableValues);
//
resDto.setSqlAlgorithmResultDtoList(listResult.getData());
return
Result
.
success
(
resDto
);
}
...
...
@@ -550,8 +535,8 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
//计算公式 - 将变量值代入公式进行计算
BigDecimal
result
=
evaluateFormula
(
calculationFormulaBizId
,
dtoList
);
SqlAlgorithmResultDto
resultDto
=
new
SqlAlgorithmResultDto
();
BeanUtils
.
copyProperties
(
sqlAlgorithmResultDto
,
resultDto
);
resultDto
.
setCalculatedValue
(
result
.
toString
());
resultDto
.
setProvider
(
sqlAlgorithmResultDto
.
getProvider
());
sqlAlgorithmResultDtoList
.
add
(
resultDto
);
}
}
...
...
@@ -853,8 +838,20 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
paramMap
.
put
(
"policyNo"
,
sqlTemplateParamDto
.
getPolicyNo
());
//产品代码
paramMap
.
put
(
"productCode"
,
sqlTemplateParamDto
.
getProductCode
());
//保单绑定转介人业务ID
//保险产品唯一业务ID
paramMap
.
put
(
"productBizId"
,
sqlTemplateParamDto
.
getProductBizId
());
//供款年期(产品有5年期的有10年期等)(总期数)
paramMap
.
put
(
"term"
,
sqlTemplateParamDto
.
getTerm
());
//期数(数字代表第几年)
paramMap
.
put
(
"issueNumber"
,
sqlTemplateParamDto
.
getIssueNumber
());
//保单绑定转介人业务ID(销售业务员,客户端用户表唯一业务ID,也可以单独用作客户端用户ID非绑定保单使用)
paramMap
.
put
(
"brokerBizId"
,
sqlTemplateParamDto
.
getBrokerBizId
());
//获得积分的用户(客户端用户表唯一业务ID)
paramMap
.
put
(
"clientUserBizId"
,
sqlTemplateParamDto
.
getClientUserBizId
());
//保单来佣业务id
paramMap
.
put
(
"commissionBizId"
,
sqlTemplateParamDto
.
getCommissionBizId
());
//保单发佣批次ID
paramMap
.
put
(
"batchBizId"
,
sqlTemplateParamDto
.
getBatchBizId
());
return
paramMap
;
}
...
...
@@ -909,15 +906,15 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
* @return
*/
public
Result
checkAlgorithmDto
(
AlgorithmDto
algorithmDto
)
{
if
(
Objects
.
isNull
(
algorithmDto
))
{
throw
new
BusinessException
(
"算法DTO入参对象不能为空"
);
}
if
(
StringUtils
.
isBlank
(
algorithmDto
.
getFormulaBizId
()))
{
throw
new
BusinessException
(
"公式配置表唯一业务ID不能为空"
);
}
if
(
CollectionUtils
.
isEmpty
(
algorithmDto
.
getVariableBizIdList
()))
{
throw
new
BusinessException
(
"变量表业务ID集合列表不能为空"
);
}
//
if (Objects.isNull(algorithmDto)) {
//
throw new BusinessException("算法DTO入参对象不能为空");
//
}
//
if (StringUtils.isBlank(algorithmDto.getFormulaBizId())) {
//
throw new BusinessException("公式配置表唯一业务ID不能为空");
//
}
//
if (CollectionUtils.isEmpty(algorithmDto.getVariableBizIdList())) {
//
throw new BusinessException("变量表业务ID集合列表不能为空");
//
}
return
Result
.
success
();
}
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiVariableServiceImpl.java
View file @
a2d0c11b
...
...
@@ -26,6 +26,7 @@ import com.yd.csf.service.dto.VariableDto;
import
com.yd.csf.service.model.Variable
;
import
com.yd.csf.service.service.IRelObjectConditionService
;
import
com.yd.csf.service.service.IVariableService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -115,26 +116,30 @@ public class ApiVariableServiceImpl implements ApiVariableService {
iVariableService
.
saveOrUpdate
(
variable
);
//绑定的条件类型业务ID - 保存对象条件关系表数据
List
<
String
>
conditionTypeBizIdList
=
new
ArrayList
<>();
conditionTypeBizIdList
.
add
(
request
.
getConditionTypeBizId
());
apiRelObjectConditionService
.
saveRelList
(
ApiRelObjectConditionDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
conditionTypeBizIdList
(
conditionTypeBizIdList
)
.
build
());
if
(
StringUtils
.
isNotBlank
(
request
.
getConditionTypeBizId
()))
{
List
<
String
>
conditionTypeBizIdList
=
new
ArrayList
<>();
conditionTypeBizIdList
.
add
(
request
.
getConditionTypeBizId
());
apiRelObjectConditionService
.
saveRelList
(
ApiRelObjectConditionDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
conditionTypeBizIdList
(
conditionTypeBizIdList
)
.
build
());
}
//绑定的sql模板业务ID - 保存对象sql模板关系表数据
List
<
String
>
sqlTemplateBizIdList
=
new
ArrayList
<>();
sqlTemplateBizIdList
.
add
(
request
.
getSqlTemplateBizId
());
apiRelObjectSqlService
.
saveRelList
(
ApiRelObjectSqlDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
sqlTemplateBizIdList
(
sqlTemplateBizIdList
)
.
build
());
if
(
StringUtils
.
isNotBlank
(
request
.
getSqlTemplateBizId
()))
{
List
<
String
>
sqlTemplateBizIdList
=
new
ArrayList
<>();
sqlTemplateBizIdList
.
add
(
request
.
getSqlTemplateBizId
());
apiRelObjectSqlService
.
saveRelList
(
ApiRelObjectSqlDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
sqlTemplateBizIdList
(
sqlTemplateBizIdList
)
.
build
());
}
return
Result
.
success
();
}
...
...
@@ -171,27 +176,30 @@ public class ApiVariableServiceImpl implements ApiVariableService {
iVariableService
.
saveOrUpdate
(
variable
);
//绑定的条件类型业务ID - 保存对象条件关系表数据
List
<
String
>
conditionTypeBizIdList
=
new
ArrayList
<>();
conditionTypeBizIdList
.
add
(
request
.
getConditionTypeBizId
());
apiRelObjectConditionService
.
saveRelList
(
ApiRelObjectConditionDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
conditionTypeBizIdList
(
conditionTypeBizIdList
)
.
build
());
if
(
StringUtils
.
isNotBlank
(
request
.
getConditionTypeBizId
()))
{
List
<
String
>
conditionTypeBizIdList
=
new
ArrayList
<>();
conditionTypeBizIdList
.
add
(
request
.
getConditionTypeBizId
());
apiRelObjectConditionService
.
saveRelList
(
ApiRelObjectConditionDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
conditionTypeBizIdList
(
conditionTypeBizIdList
)
.
build
());
}
//绑定的sql模板业务ID - 保存对象sql模板关系表数据
List
<
String
>
sqlTemplateBizIdList
=
new
ArrayList
<>();
sqlTemplateBizIdList
.
add
(
request
.
getSqlTemplateBizId
());
apiRelObjectSqlService
.
saveRelList
(
ApiRelObjectSqlDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
sqlTemplateBizIdList
(
sqlTemplateBizIdList
)
.
build
());
if
(
StringUtils
.
isNotBlank
(
request
.
getSqlTemplateBizId
()))
{
List
<
String
>
sqlTemplateBizIdList
=
new
ArrayList
<>();
sqlTemplateBizIdList
.
add
(
request
.
getSqlTemplateBizId
());
apiRelObjectSqlService
.
saveRelList
(
ApiRelObjectSqlDto
.
builder
()
.
objectBizId
(
variable
.
getVariableBizId
())
.
objectName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getName
())
.
objectTableName
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
objectType
(
CommonEnum
.
UID_TYPE_VARIABLE
.
getCode
())
.
sqlTemplateBizIdList
(
sqlTemplateBizIdList
)
.
build
());
}
return
Result
.
success
();
}
...
...
yd-csf-api/src/main/java/com/yd/csf/api/utils/FormulaParser.java
View file @
a2d0c11b
...
...
@@ -7,7 +7,7 @@ import java.util.regex.*;
* 公式解析工具类
*/
public
class
FormulaParser
{
/**
* 从公式字符串中解析出所有变量业务ID
* @param calculationFormulaBizId 公式字符串,如 "(variable_1001 + variable_2123) * variable_4455"
...
...
@@ -15,22 +15,22 @@ public class FormulaParser {
*/
public
static
Set
<
String
>
parseVariableBizIds
(
String
calculationFormulaBizId
)
{
Set
<
String
>
variableIds
=
new
HashSet
<>();
if
(
calculationFormulaBizId
==
null
||
calculationFormulaBizId
.
trim
().
isEmpty
())
{
return
variableIds
;
}
//
正则表达式匹配 variable_ 后面跟着数字的模式
Pattern
pattern
=
Pattern
.
compile
(
"variable_
\\d
+"
);
//
修改正则表达式以匹配新的变量ID格式(包含字母和数字)
Pattern
pattern
=
Pattern
.
compile
(
"variable_
[a-zA-Z0-9]
+"
);
Matcher
matcher
=
pattern
.
matcher
(
calculationFormulaBizId
);
while
(
matcher
.
find
())
{
variableIds
.
add
(
matcher
.
group
());
}
return
variableIds
;
}
/**
* 从公式字符串中解析出所有变量业务ID(返回列表,保持顺序)
* @param calculationFormulaBizId 公式字符串
...
...
@@ -38,21 +38,22 @@ public class FormulaParser {
*/
public
static
List
<
String
>
parseVariableBizIdsOrdered
(
String
calculationFormulaBizId
)
{
List
<
String
>
variableIds
=
new
ArrayList
<>();
if
(
calculationFormulaBizId
==
null
||
calculationFormulaBizId
.
trim
().
isEmpty
())
{
return
variableIds
;
}
Pattern
pattern
=
Pattern
.
compile
(
"variable_\\d+"
);
// 修改正则表达式以匹配新的变量ID格式(包含字母和数字)
Pattern
pattern
=
Pattern
.
compile
(
"variable_[a-zA-Z0-9]+"
);
Matcher
matcher
=
pattern
.
matcher
(
calculationFormulaBizId
);
while
(
matcher
.
find
())
{
variableIds
.
add
(
matcher
.
group
());
}
return
variableIds
;
}
/**
* 从公式字符串中解析出纯数字ID部分
* @param calculationFormulaBizId 公式字符串
...
...
@@ -60,25 +61,30 @@ public class FormulaParser {
*/
public
static
Set
<
Long
>
parseVariableNumericIds
(
String
calculationFormulaBizId
)
{
Set
<
Long
>
numericIds
=
new
HashSet
<>();
if
(
calculationFormulaBizId
==
null
||
calculationFormulaBizId
.
trim
().
isEmpty
())
{
return
numericIds
;
}
// 匹配 variable_ 后面的
数字部分
Pattern
pattern
=
Pattern
.
compile
(
"variable_(
\\d
+)"
);
// 匹配 variable_ 后面的
字母数字部分(由于新格式可能包含字母,此方法可能不再适用)
Pattern
pattern
=
Pattern
.
compile
(
"variable_(
[a-zA-Z0-9]
+)"
);
Matcher
matcher
=
pattern
.
matcher
(
calculationFormulaBizId
);
while
(
matcher
.
find
())
{
try
{
Long
numericId
=
Long
.
parseLong
(
matcher
.
group
(
1
));
numericIds
.
add
(
numericId
);
// 注意:新格式可能包含字母,无法直接转换为Long
// 这里保留原有逻辑,但实际可能返回空集合
String
idPart
=
matcher
.
group
(
1
);
if
(
idPart
.
matches
(
"\\d+"
))
{
Long
numericId
=
Long
.
parseLong
(
idPart
);
numericIds
.
add
(
numericId
);
}
}
catch
(
NumberFormatException
e
)
{
// 忽略格式错误的ID
System
.
err
.
println
(
"无效的数字ID: "
+
matcher
.
group
(
1
));
}
}
return
numericIds
;
}
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/request/commissionruleconfig/ApiCommissionRuleConfigAddRequest.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
feign
.
request
.
commissionruleconfig
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
...
...
@@ -23,11 +24,13 @@ public class ApiCommissionRuleConfigAddRequest {
/**
* 生效开始日期
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
effectiveStart
;
/**
* 生效结束日期
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
effectiveEnd
;
/**
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/request/commissionruleconfig/ApiCommissionRuleConfigEditRequest.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
feign
.
request
.
commissionruleconfig
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
...
...
@@ -28,11 +29,13 @@ public class ApiCommissionRuleConfigEditRequest {
/**
* 生效开始日期
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
effectiveStart
;
/**
* 生效结束日期
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
effectiveEnd
;
/**
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/request/variable/ApiVariableAddRequest.java
View file @
a2d0c11b
...
...
@@ -28,7 +28,7 @@ public class ApiVariableAddRequest {
/**
* 变量值
*/
@NotBlank
(
message
=
"变量值不能为空"
)
//
@NotBlank(message = "变量值不能为空")
private
String
value
;
// /**
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/request/variable/ApiVariableEditRequest.java
View file @
a2d0c11b
...
...
@@ -35,7 +35,7 @@ public class ApiVariableEditRequest {
/**
* 变量值
*/
@NotBlank
(
message
=
"变量值不能为空"
)
//
@NotBlank(message = "变量值不能为空")
private
String
value
;
/**
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dao/CommissionMapper.java
View file @
a2d0c11b
package
com
.
yd
.
csf
.
service
.
dao
;
import
com.yd.csf.service.dto.CommissionBindPolicyBrokerDto
;
import
com.yd.csf.service.dto.CommissionDto
;
import
com.yd.csf.service.model.Commission
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* @author Zhang Jianan
...
...
@@ -11,6 +16,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public
interface
CommissionMapper
extends
BaseMapper
<
Commission
>
{
List
<
CommissionBindPolicyBrokerDto
>
queryCommissionBindPolicyBrokerList
(
@Param
(
"dto"
)
CommissionDto
dto
);
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionBindPolicyBrokerDto.java
0 → 100644
View file @
a2d0c11b
package
com
.
yd
.
csf
.
service
.
dto
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* 来佣绑定的保单和转介人信息封装
*/
@Data
public
class
CommissionBindPolicyBrokerDto
{
/**
* 保单号
*/
private
String
policyNo
;
//======来佣信息start=======
/**
* 保单来佣业务id
*/
private
String
commissionBizId
;
/**
* 佣金期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
private
Integer
commissionPeriod
;
/**
* 总来佣期数
*/
private
Integer
totalPeriod
;
/**
* 来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
private
String
commissionName
;
/**
* 来佣类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
private
String
commissionType
;
/**
* 来佣金额
*/
private
BigDecimal
amount
;
/**
* 来佣币种
*/
private
String
currency
;
/**
* 来佣日期
*/
private
Date
commissionDate
;
/**
* 来佣状态 0=未比对 1=比对成功 2=比对失败
*/
private
String
commissionStatus
;
//======来佣信息end=======
//======保单信息start=======
/**
* 用户业务id
*/
private
String
userBizId
;
/**
* 产品业务id
*/
private
String
planBizId
;
/**
* 产品代码
*/
private
String
productCode
;
//======保单信息end=======
//======保单转介人信息start=======
/**
* 转介人名称
*/
private
String
brokerName
;
/**
* 转介人业务ID(客户端用户表唯一业务ID)
*/
private
String
brokerBizId
;
/**
* 所属团队
*/
private
String
team
;
/**
* 所属团队业务id
*/
private
String
teamBizId
;
//======保单转介人信息end=======
}
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionRuleBindingDto.java
View file @
a2d0c11b
...
...
@@ -6,6 +6,8 @@ import lombok.Builder;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@Data
@Builder
@NoArgsConstructor
...
...
@@ -31,4 +33,6 @@ public class CommissionRuleBindingDto {
* 目标ID,业务员ID或团队ID
*/
private
String
targetId
;
private
List
<
String
>
targetIdList
;
}
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionRuleBinding.java
View file @
a2d0c11b
...
...
@@ -55,6 +55,12 @@ public class CommissionRuleBinding implements Serializable {
private
String
targetId
;
/**
* 目标名称,业务员姓名或团队名称
*/
@TableField
(
"target_name"
)
private
String
targetName
;
/**
* 生效开始时间,绑定关系开始生效的时间
*/
@TableField
(
"effective_start"
)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionService.java
View file @
a2d0c11b
...
...
@@ -31,4 +31,6 @@ public interface CommissionService extends IService<Commission> {
Commission
getByCommissionBizId
(
String
commissionBizId
);
List
<
Commission
>
queryList
(
CommissionDto
dto
);
List
<
CommissionBindPolicyBrokerDto
>
queryCommissionBindPolicyBrokerList
(
CommissionDto
dto
);
}
yd-csf-service/src/main/java/com/yd/csf/service/service/FortuneService.java
View file @
a2d0c11b
...
...
@@ -33,4 +33,6 @@ public interface FortuneService extends IService<Fortune> {
Fortune
getByFortuneBizId
(
String
fortuneBizId
);
Boolean
addFortune
(
FortuneAddRequest
fortuneAddRequest
);
Fortune
queryOne
(
String
fortuneBizId
);
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionRuleBindingServiceImpl.java
View file @
a2d0c11b
...
...
@@ -33,6 +33,7 @@ public class CommissionRuleBindingServiceImpl extends ServiceImpl<CommissionRule
public
List
<
CommissionRuleBinding
>
queryList
(
CommissionRuleBindingDto
dto
)
{
List
<
CommissionRuleBinding
>
list
=
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
CommissionRuleBinding
>()
.
eq
(
StringUtils
.
isNotBlank
(
dto
.
getTargetId
()),
CommissionRuleBinding:
:
getTargetId
,
dto
.
getTargetId
())
.
in
(!
CollectionUtils
.
isEmpty
(
dto
.
getTargetIdList
()),
CommissionRuleBinding:
:
getTargetId
,
dto
.
getTargetIdList
())
);
return
list
;
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
View file @
a2d0c11b
...
...
@@ -204,6 +204,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
);
return
list
;
}
/**
* 查询来佣保单转介人关系信息
* @param dto
* @return
*/
@Override
public
List
<
CommissionBindPolicyBrokerDto
>
queryCommissionBindPolicyBrokerList
(
CommissionDto
dto
)
{
return
baseMapper
.
queryCommissionBindPolicyBrokerList
(
dto
);
}
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
View file @
a2d0c11b
...
...
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import
cn.hutool.core.collection.CollUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
...
...
@@ -275,6 +276,16 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return
this
.
save
(
fortune
);
}
/**
* 查询单个对象
* @param fortuneBizId
* @return
*/
@Override
public
Fortune
queryOne
(
String
fortuneBizId
)
{
return
this
.
getOne
(
new
LambdaQueryWrapper
<
Fortune
>().
eq
(
Fortune:
:
getFortuneBizId
,
fortuneBizId
));
}
}
...
...
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
View file @
a2d0c11b
...
...
@@ -32,4 +32,22 @@
commission_date,status,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
<select
id=
"queryCommissionBindPolicyBrokerList"
resultType=
"com.yd.csf.service.dto.CommissionBindPolicyBrokerDto"
>
select c.*,p.*,pb.*
from commission c
left join policy p on p.policy_no = c.policy_no and p.is_deleted = 0
left join policy_broker pb on pb.policy_no = p.policy_no and pb.is_deleted = 0
<where>
<if
test=
"dto.commissionBizIdList != null and dto.commissionBizIdList.size > 0"
>
and c.commission_biz_id in
<foreach
collection=
"dto.commissionBizIdList"
item=
"item"
index=
"index"
open=
"("
separator=
","
close=
")"
>
#{item}
</foreach>
</if>
and c.is_deleted = 0
</where>
group by c.policy_no
</select>
</mapper>
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