Commit a2d0c11b by zhangxingmin

基本法

parent 8d0d7161
......@@ -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;
......
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(基本法类型)
*/
......
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;
}
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;
}
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;
}
......@@ -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;
}
......@@ -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======
}
......@@ -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);
}
}
......
......@@ -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(true)
.isNegateExecutionOrderList(false)
.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.getBrokerName())
//转介人业务ID
.brokerBizId(policyBroker.getBrokerBizId())
//获得积分的用户姓名
.broker(dto.getName())
//获得积分的用户业务ID
.brokerBizId(dto.getClientUserBizId())
//发佣币种
// .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.getBrokerName())
//转介人业务ID
.brokerBizId(policyBroker.getBrokerBizId())
//获得积分的转介人(业务员)姓名
.broker(dto.getName())
//获得积分的转介人(业务员)业务ID
.brokerBizId(dto.getClientUserBizId())
//发佣币种
.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.getBrokerBizId()).build());
List<CommissionRuleBinding> commissionRuleBindingList = iCommissionRuleBindingService.queryList(CommissionRuleBindingDto.builder().targetId(algorithmDto.getClientUserBizId()).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();
}
}
......@@ -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();
}
......
......@@ -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;
}
......
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;
/**
......
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;
/**
......
......@@ -28,7 +28,7 @@ public class ApiVariableAddRequest {
/**
* 变量值
*/
@NotBlank(message = "变量值不能为空")
// @NotBlank(message = "变量值不能为空")
private String value;
// /**
......
......@@ -35,7 +35,7 @@ public class ApiVariableEditRequest {
/**
* 变量值
*/
@NotBlank(message = "变量值不能为空")
// @NotBlank(message = "变量值不能为空")
private String value;
/**
......
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);
}
......
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=======
}
......@@ -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;
}
......@@ -55,6 +55,12 @@ public class CommissionRuleBinding implements Serializable {
private String targetId;
/**
* 目标名称,业务员姓名或团队名称
*/
@TableField("target_name")
private String targetName;
/**
* 生效开始时间,绑定关系开始生效的时间
*/
@TableField("effective_start")
......
......@@ -31,4 +31,6 @@ public interface CommissionService extends IService<Commission> {
Commission getByCommissionBizId(String commissionBizId);
List<Commission> queryList(CommissionDto dto);
List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(CommissionDto dto);
}
......@@ -33,4 +33,6 @@ public interface FortuneService extends IService<Fortune> {
Fortune getByFortuneBizId(String fortuneBizId);
Boolean addFortune(FortuneAddRequest fortuneAddRequest);
Fortune queryOne(String fortuneBizId);
}
......@@ -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;
}
......
......@@ -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);
}
}
......
......@@ -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));
}
}
......
......@@ -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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment