Commit a2d0c11b by zhangxingmin

基本法

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