Commit 4e64db6c by zhangxingmin

push

parent ea8b5c39
...@@ -12,6 +12,7 @@ import com.yd.csf.feign.enums.FycSourceTypeEnum; ...@@ -12,6 +12,7 @@ import com.yd.csf.feign.enums.FycSourceTypeEnum;
import com.yd.csf.feign.enums.OprSourceEnum; import com.yd.csf.feign.enums.OprSourceEnum;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest; import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse; import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import com.yd.csf.service.enums.RuleItemEnum;
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.feign.config.FeignTokenInterceptor; import com.yd.feign.config.FeignTokenInterceptor;
...@@ -84,7 +85,7 @@ public class ApiExpectedFortuneAsyncService { ...@@ -84,7 +85,7 @@ public class ApiExpectedFortuneAsyncService {
} }
@Async("commonAsyncExecutor") @Async("commonAsyncExecutor")
public void buildCalmDateTask(List<AlgorithmCollectResDto> collectResDtos, String policyNo) { public void buildCalmDateTask(List<AlgorithmCollectResDto> collectResDtos, String policyNo,BigDecimal exchangeRate) {
if (CollectionUtils.isEmpty(collectResDtos)) { if (CollectionUtils.isEmpty(collectResDtos)) {
log.info("构建冷静期定时任务,collectResDtos 为空,policyNo: {}", policyNo); log.info("构建冷静期定时任务,collectResDtos 为空,policyNo: {}", policyNo);
return; return;
...@@ -164,7 +165,7 @@ public class ApiExpectedFortuneAsyncService { ...@@ -164,7 +165,7 @@ public class ApiExpectedFortuneAsyncService {
String detailFycBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_DETAIL_FYC.getCode()); String detailFycBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_DETAIL_FYC.getCode());
//新增积分明细 //新增积分明细
//status 定时任务0-冻结。非定时任务1-生效 //status 定时任务0-冻结。非定时任务1-生效
addAgentDetailFyc(resDto,policyNo,algorithmResDto,detailFycBizId,agentAccumulatedFyc,1); addAgentDetailFyc(resDto,policyNo,algorithmResDto,detailFycBizId,agentAccumulatedFyc,1,exchangeRate);
}else if (thawingTime != null && thawingTime.compareTo(LocalDateTime.now()) > 0){ }else if (thawingTime != null && thawingTime.compareTo(LocalDateTime.now()) > 0){
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否大于当前时间(年月日时分秒) //判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否大于当前时间(年月日时分秒)
...@@ -191,18 +192,24 @@ public class ApiExpectedFortuneAsyncService { ...@@ -191,18 +192,24 @@ public class ApiExpectedFortuneAsyncService {
calmTask.setCommissionName(algorithmResDto.getItemName()); calmTask.setCommissionName(algorithmResDto.getItemName());
//发佣期数 //发佣期数
calmTask.setFortunePeriod(resDto.getFortunePeriod()); calmTask.setFortunePeriod(resDto.getFortunePeriod());
//佣金值(积分值) //汇率转换前佣金值(积分值)
calmTask.setFyc(algorithmResDto.getCalculatedValue()); calmTask.setFyc(algorithmResDto.getCalculatedValue());
//汇率(保单币种->港币的汇率)
calmTask.setExchangeRate(exchangeRate);
//汇率转换后佣金值(积分值)
calmTask.setAfterFyc(calmTask.getFyc().multiply(calmTask.getExchangeRate()));
//冷静期结束日期 //冷静期结束日期
calmTask.setCoolingOffEndDate(policyFollow.getCoolingOffEndDate()); calmTask.setCoolingOffEndDate(policyFollow.getCoolingOffEndDate());
//业务员积分明细表唯一业务ID //业务员积分明细表唯一业务ID
String detailFycBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_DETAIL_FYC.getCode()); String detailFycBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_DETAIL_FYC.getCode());
calmTask.setDetailFycBizId(detailFycBizId); calmTask.setDetailFycBizId(detailFycBizId);
//积分来源基本法项目配置表唯一业务ID
calmTask.setRuleItemBizId(algorithmResDto.getRuleItemBizId());
iCalmTaskService.saveOrUpdate(calmTask); iCalmTaskService.saveOrUpdate(calmTask);
//新增积分明细 //新增积分明细
//status 定时任务0-冻结。非定时任务1-生效 //status 定时任务0-冻结。非定时任务1-生效
addAgentDetailFyc(resDto,policyNo,algorithmResDto,detailFycBizId,agentAccumulatedFyc,0); addAgentDetailFyc(resDto,policyNo,algorithmResDto,detailFycBizId,agentAccumulatedFyc,0,exchangeRate);
//创建XXL-Job定时任务 //创建XXL-Job定时任务
xxlJobService.addScheduleJob(calmTask.getCalmTaskBizId(),"冷静期定时发送任务-","calmSendJobHandler",Date.from(resDto.getThawingTime().atZone(ZoneId.systemDefault()).toInstant())); xxlJobService.addScheduleJob(calmTask.getCalmTaskBizId(),"冷静期定时发送任务-","calmSendJobHandler",Date.from(resDto.getThawingTime().atZone(ZoneId.systemDefault()).toInstant()));
...@@ -211,7 +218,7 @@ public class ApiExpectedFortuneAsyncService { ...@@ -211,7 +218,7 @@ public class ApiExpectedFortuneAsyncService {
} }
//更新积分总表的值 //更新积分总表的值
updateAgentAccumulatedFyc(accumulatedFycList,filteredCollectResDtos); updateAgentAccumulatedFyc(accumulatedFycList,filteredCollectResDtos,exchangeRate);
} }
...@@ -229,15 +236,24 @@ public class ApiExpectedFortuneAsyncService { ...@@ -229,15 +236,24 @@ public class ApiExpectedFortuneAsyncService {
AlgorithmResDto algorithmResDto, AlgorithmResDto algorithmResDto,
String detailFycBizId, String detailFycBizId,
AgentAccumulatedFyc agentAccumulatedFyc, AgentAccumulatedFyc agentAccumulatedFyc,
Integer status) { Integer status,
BigDecimal exchangeRate) {
//新增积分明细 //新增积分明细
AgentDetailFyc agentDetailFyc = new AgentDetailFyc(); AgentDetailFyc agentDetailFyc = new AgentDetailFyc();
//积分来源类型 //积分来源类型
agentDetailFyc.setSourceType(FycSourceTypeEnum.CALM_TASK.getItemValue()); agentDetailFyc.setSourceType(FycSourceTypeEnum.CALM_TASK.getItemValue());
//积分来源名称
agentDetailFyc.setSourceName(FycSourceTypeEnum.CALM_TASK.getItemLabel());
//佣金项目类型 TODO
// agentDetailFyc.setCommissionType();
//佣金项目名称
agentDetailFyc.setCommissionName(algorithmResDto.getItemName());
//业务员ID //业务员ID
agentDetailFyc.setAgentId(resDto.getClientUserBizId()); agentDetailFyc.setAgentId(resDto.getClientUserBizId());
//积分提供的保单号 //积分提供的保单号
agentDetailFyc.setPolicyNo(policyNo); agentDetailFyc.setPolicyNo(policyNo);
//发佣期数
agentDetailFyc.setFortunePeriod(resDto.getFortunePeriod());
//积分来源基本法项目配置表唯一业务ID //积分来源基本法项目配置表唯一业务ID
agentDetailFyc.setRuleItemBizId(algorithmResDto.getRuleItemBizId()); agentDetailFyc.setRuleItemBizId(algorithmResDto.getRuleItemBizId());
//业务员积分明细表唯一业务ID //业务员积分明细表唯一业务ID
...@@ -249,10 +265,14 @@ public class ApiExpectedFortuneAsyncService { ...@@ -249,10 +265,14 @@ public class ApiExpectedFortuneAsyncService {
agentDetailFyc.setThawingTime(resDto.getThawingTime()); agentDetailFyc.setThawingTime(resDto.getThawingTime());
//变化前的业务员总FYC积分(已生效+未生效) //变化前的业务员总FYC积分(已生效+未生效)
agentDetailFyc.setBeforeFyc(agentAccumulatedFyc != null ? agentAccumulatedFyc.getTotalFyc() : BigDecimal.ZERO); agentDetailFyc.setBeforeFyc(agentAccumulatedFyc != null ? agentAccumulatedFyc.getTotalFyc() : BigDecimal.ZERO);
//变化值(-代表减少) //汇率转化前积分值(变化值(-代表减少))
agentDetailFyc.setChangeFyc(algorithmResDto.getCalculatedValue().toString()); agentDetailFyc.setChangeFyc(algorithmResDto.getCalculatedValue());
//变化后的业务员总FYC积分 //变化后的业务员总FYC积分
agentDetailFyc.setAfterFyc(agentDetailFyc.getBeforeFyc().add(algorithmResDto.getCalculatedValue())); agentDetailFyc.setAfterFyc(agentDetailFyc.getBeforeFyc().add(algorithmResDto.getCalculatedValue()));
//汇率(保单币种->港币的汇率)
agentDetailFyc.setExchangeRate(exchangeRate);
//汇率转化后积分值(变化值(-代表减少)) = 汇率转化前积分值 * 汇率
agentDetailFyc.setChangeAfterFyc(agentDetailFyc.getChangeFyc().multiply(agentDetailFyc.getExchangeRate()));
iAgentDetailFycService.saveOrUpdate(agentDetailFyc); iAgentDetailFycService.saveOrUpdate(agentDetailFyc);
} }
...@@ -263,7 +283,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -263,7 +283,8 @@ public class ApiExpectedFortuneAsyncService {
* @param filteredCollectResDtos * @param filteredCollectResDtos
*/ */
public void updateAgentAccumulatedFyc(List<AgentAccumulatedFyc> accumulatedFycList, public void updateAgentAccumulatedFyc(List<AgentAccumulatedFyc> accumulatedFycList,
List<AlgorithmCollectResDto> filteredCollectResDtos) { List<AlgorithmCollectResDto> filteredCollectResDtos,
BigDecimal exchangeRate) {
log.info("更新积分总表的值=>accumulatedFycList入参:{}",JSON.toJSONString(accumulatedFycList)); log.info("更新积分总表的值=>accumulatedFycList入参:{}",JSON.toJSONString(accumulatedFycList));
log.info("更新积分总表的值=>filteredCollectResDtos入参:{}",JSON.toJSONString(filteredCollectResDtos)); log.info("更新积分总表的值=>filteredCollectResDtos入参:{}",JSON.toJSONString(filteredCollectResDtos));
//更新积分总表的值,更新这个accumulatedFycList的每个对象里面的:未生效累计积分(不限业务场景)、累计积分 = 未生效累计积分 + 已生效累计积分、未生效累计首期佣金积分值(佣金场景)、未生效累计非首期佣金积分值(佣金场景) //更新积分总表的值,更新这个accumulatedFycList的每个对象里面的:未生效累计积分(不限业务场景)、累计积分 = 未生效累计积分 + 已生效累计积分、未生效累计首期佣金积分值(佣金场景)、未生效累计非首期佣金积分值(佣金场景)
...@@ -283,6 +304,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -283,6 +304,8 @@ public class ApiExpectedFortuneAsyncService {
Map<String, BigDecimal> noFirstCommissionDeltaMap = new HashMap<>(); Map<String, BigDecimal> noFirstCommissionDeltaMap = new HashMap<>();
// 未生效非首期佣金增量(定时(冻结)) // 未生效非首期佣金增量(定时(冻结))
Map<String, BigDecimal> noRycDeltaMap = new HashMap<>(); Map<String, BigDecimal> noRycDeltaMap = new HashMap<>();
// 未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(定时(冻结))
Map<String, BigDecimal> noFirstSalesCommissionDeltaMap = new HashMap<>();
// 已生效个人累计积分增量(非定时(生效)) // 已生效个人累计积分增量(非定时(生效))
Map<String, BigDecimal> deltaMap = new HashMap<>(); Map<String, BigDecimal> deltaMap = new HashMap<>();
...@@ -290,6 +313,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -290,6 +313,8 @@ public class ApiExpectedFortuneAsyncService {
Map<String, BigDecimal> firstCommissionDeltaMap = new HashMap<>(); Map<String, BigDecimal> firstCommissionDeltaMap = new HashMap<>();
// 已生效非首期佣金增量(非定时(生效)) // 已生效非首期佣金增量(非定时(生效))
Map<String, BigDecimal> rycDeltaMap = new HashMap<>(); Map<String, BigDecimal> rycDeltaMap = new HashMap<>();
// 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(非定时(生效))
Map<String, BigDecimal> firstSalesCommissionDeltaMap = new HashMap<>();
//收集去重的转介人业务ID //收集去重的转介人业务ID
HashSet<String> hashSet = new HashSet<>(); HashSet<String> hashSet = new HashSet<>();
...@@ -305,6 +330,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -305,6 +330,8 @@ public class ApiExpectedFortuneAsyncService {
for (AlgorithmResDto algorithmResDto : resDto.getAlgorithmResDtoList()) { for (AlgorithmResDto algorithmResDto : resDto.getAlgorithmResDtoList()) {
BigDecimal val = algorithmResDto.getCalculatedValue(); BigDecimal val = algorithmResDto.getCalculatedValue();
if (val == null) continue; if (val == null) continue;
//val汇率转换后的值
val = val.multiply(exchangeRate);
if (thawingTime != null && thawingTime.compareTo(LocalDateTime.now()) <= 0) { if (thawingTime != null && thawingTime.compareTo(LocalDateTime.now()) <= 0) {
//判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否小于等于当前时间(年月日时分秒) //判断积分解冻时间(年月日 + 00:00:00)(冷静期时间 + 期数)是否小于等于当前时间(年月日时分秒)
...@@ -315,6 +342,12 @@ public class ApiExpectedFortuneAsyncService { ...@@ -315,6 +342,12 @@ public class ApiExpectedFortuneAsyncService {
if (fortunePeriod != null && fortunePeriod == 1) { if (fortunePeriod != null && fortunePeriod == 1) {
//已生效首期佣金增量(非定时(生效)) //已生效首期佣金增量(非定时(生效))
firstCommissionDeltaMap.merge(agentId, val, BigDecimal::add); firstCommissionDeltaMap.merge(agentId, val, BigDecimal::add);
if (RuleItemEnum.SALES.getRuleItemBizId().equals(algorithmResDto.getRuleItemBizId())) {
//销售佣金项目
//已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(非定时(生效))
firstSalesCommissionDeltaMap.merge(agentId, val, BigDecimal::add);
}
} else { } else {
//已生效非首期佣金增量(非定时(生效)) //已生效非首期佣金增量(非定时(生效))
rycDeltaMap.merge(agentId, val, BigDecimal::add); rycDeltaMap.merge(agentId, val, BigDecimal::add);
...@@ -329,6 +362,12 @@ public class ApiExpectedFortuneAsyncService { ...@@ -329,6 +362,12 @@ public class ApiExpectedFortuneAsyncService {
if (fortunePeriod != null && fortunePeriod == 1) { if (fortunePeriod != null && fortunePeriod == 1) {
//未生效首期佣金增量(定时(冻结)) //未生效首期佣金增量(定时(冻结))
noFirstCommissionDeltaMap.merge(agentId, val, BigDecimal::add); noFirstCommissionDeltaMap.merge(agentId, val, BigDecimal::add);
if (RuleItemEnum.SALES.getRuleItemBizId().equals(algorithmResDto.getRuleItemBizId())) {
//销售佣金项目
//未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(定时(冻结))
noFirstSalesCommissionDeltaMap.merge(agentId, val, BigDecimal::add);
}
} else { } else {
//未生效非首期佣金增量(定时(冻结)) //未生效非首期佣金增量(定时(冻结))
noRycDeltaMap.merge(agentId, val, BigDecimal::add); noRycDeltaMap.merge(agentId, val, BigDecimal::add);
...@@ -344,6 +383,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -344,6 +383,8 @@ public class ApiExpectedFortuneAsyncService {
log.info("已生效个人累计积分增量(非定时(生效))=>deltaMap:{}",JSON.toJSONString(deltaMap)); log.info("已生效个人累计积分增量(非定时(生效))=>deltaMap:{}",JSON.toJSONString(deltaMap));
log.info("已生效首期佣金增量(非定时(生效))=>firstCommissionDeltaMap:{}",JSON.toJSONString(firstCommissionDeltaMap)); log.info("已生效首期佣金增量(非定时(生效))=>firstCommissionDeltaMap:{}",JSON.toJSONString(firstCommissionDeltaMap));
log.info("已生效非首期佣金增量(非定时(生效))=>rycDeltaMap:{}",JSON.toJSONString(rycDeltaMap)); log.info("已生效非首期佣金增量(非定时(生效))=>rycDeltaMap:{}",JSON.toJSONString(rycDeltaMap));
log.info("已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(非定时(生效))=>firstSalesCommissionDeltaMap:{}",JSON.toJSONString(firstSalesCommissionDeltaMap));
log.info("未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(定时(冻结))=>noFirstSalesCommissionDeltaMap:{}",JSON.toJSONString(noFirstSalesCommissionDeltaMap));
// 更新或新建累计积分记录 // 更新或新建累计积分记录
List<AgentAccumulatedFyc> toUpdateList = new ArrayList<>(); List<AgentAccumulatedFyc> toUpdateList = new ArrayList<>();
...@@ -363,6 +404,11 @@ public class ApiExpectedFortuneAsyncService { ...@@ -363,6 +404,11 @@ public class ApiExpectedFortuneAsyncService {
//已生效非首期佣金增量(非定时(生效)) //已生效非首期佣金增量(非定时(生效))
BigDecimal rycDelta = rycDeltaMap.getOrDefault(agentId, BigDecimal.ZERO); BigDecimal rycDelta = rycDeltaMap.getOrDefault(agentId, BigDecimal.ZERO);
//已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(非定时(生效))
BigDecimal firstSalesDelta = firstSalesCommissionDeltaMap.getOrDefault(agentId, BigDecimal.ZERO);
//未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(定时(冻结))
BigDecimal noFirstSalesDelta = noFirstSalesCommissionDeltaMap.getOrDefault(agentId, BigDecimal.ZERO);
AgentAccumulatedFyc fyc = fycMap.get(agentId); AgentAccumulatedFyc fyc = fycMap.get(agentId);
if (fyc == null) { if (fyc == null) {
continue; continue;
...@@ -375,6 +421,8 @@ public class ApiExpectedFortuneAsyncService { ...@@ -375,6 +421,8 @@ public class ApiExpectedFortuneAsyncService {
BigDecimal safeNoRycDelta = noRycDelta == null ? BigDecimal.ZERO : noRycDelta; BigDecimal safeNoRycDelta = noRycDelta == null ? BigDecimal.ZERO : noRycDelta;
BigDecimal safeFirstDelta = firstDelta == null ? BigDecimal.ZERO : firstDelta; BigDecimal safeFirstDelta = firstDelta == null ? BigDecimal.ZERO : firstDelta;
BigDecimal safeRycDelta = rycDelta == null ? BigDecimal.ZERO : rycDelta; BigDecimal safeRycDelta = rycDelta == null ? BigDecimal.ZERO : rycDelta;
BigDecimal safeFirstSalesDelta = firstSalesDelta == null ? BigDecimal.ZERO : firstSalesDelta;
BigDecimal safeNoFirstSalesDelta = noFirstSalesDelta == null ? BigDecimal.ZERO : noFirstSalesDelta;
// 原有字段安全处理:fyc 中的字段可能为 null,转为 ZERO 再进行 add // 原有字段安全处理:fyc 中的字段可能为 null,转为 ZERO 再进行 add
BigDecimal effectOld = fyc.getEffect() == null ? BigDecimal.ZERO : fyc.getEffect(); BigDecimal effectOld = fyc.getEffect() == null ? BigDecimal.ZERO : fyc.getEffect();
...@@ -383,27 +431,41 @@ public class ApiExpectedFortuneAsyncService { ...@@ -383,27 +431,41 @@ public class ApiExpectedFortuneAsyncService {
BigDecimal noRycOld = fyc.getNoRyc() == null ? BigDecimal.ZERO : fyc.getNoRyc(); BigDecimal noRycOld = fyc.getNoRyc() == null ? BigDecimal.ZERO : fyc.getNoRyc();
BigDecimal firstCommissionOld = fyc.getFirstCommission() == null ? BigDecimal.ZERO : fyc.getFirstCommission(); BigDecimal firstCommissionOld = fyc.getFirstCommission() == null ? BigDecimal.ZERO : fyc.getFirstCommission();
BigDecimal rycOld = fyc.getRyc() == null ? BigDecimal.ZERO : fyc.getRyc(); BigDecimal rycOld = fyc.getRyc() == null ? BigDecimal.ZERO : fyc.getRyc();
BigDecimal firstSalesCommissionOld = fyc.getFirstSalesCommission() == null ? BigDecimal.ZERO : fyc.getFirstSalesCommission();
BigDecimal noFirstSalesCommissionOld = fyc.getNoFirstSalesCommission() == null ? BigDecimal.ZERO : fyc.getNoFirstSalesCommission();
// 应用增量 // 应用增量
//未生效累计积分(不限业务场景) //未生效累计积分(不限业务场景)
fyc.setNoEffect(noEffectOld.add(safeNoDelta)); fyc.setNoEffect(noEffectOld.add(safeNoDelta));
//未生效累计首期佣金积分值(佣金场景) //未生效累计首期佣金积分值(佣金场景)
fyc.setNoFirstCommission(noFirstCommissionOld.add(safeNoFirstDelta)); fyc.setNoFirstCommission(noFirstCommissionOld.add(safeNoFirstDelta));
//未生效累计非首期佣金积分值(佣金场景) //未生效累计非首期佣金积分值(佣金场景)
fyc.setNoRyc(noRycOld.add(safeNoRycDelta)); fyc.setNoRyc(noRycOld.add(safeNoRycDelta));
//已生效累计积分(不限业务场景) //已生效累计积分(不限业务场景)
fyc.setEffect(effectOld.add(safeDelta)); fyc.setEffect(effectOld.add(safeDelta));
//已生效累计首期佣金积分值(佣金场景) //已生效累计首期佣金积分值(佣金场景)
fyc.setFirstCommission(firstCommissionOld.add(safeFirstDelta)); fyc.setFirstCommission(firstCommissionOld.add(safeFirstDelta));
//已生效累计非首期佣金积分值(佣金场景) //已生效累计非首期佣金积分值(佣金场景)
fyc.setRyc(rycOld.add(safeRycDelta)); fyc.setRyc(rycOld.add(safeRycDelta));
//累计积分 = 未生效累计积分 + 已生效累计积分 //累计积分 = 未生效累计积分 + 已生效累计积分
fyc.setTotalFyc(fyc.getNoEffect().add(fyc.getEffect())); fyc.setTotalFyc(fyc.getNoEffect().add(fyc.getEffect()));
//晋升职级累计积分 = 已生效累计积分 - 已生效累计非首期佣金积分值
BigDecimal promotion = fyc.getEffect().subtract(fyc.getRyc()); //已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(非定时(生效))
fyc.setFirstSalesCommission(firstSalesCommissionOld.add(safeFirstSalesDelta));
//未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))增量(定时(冻结))
fyc.setNoFirstSalesCommission(noFirstSalesCommissionOld.add(safeNoFirstSalesDelta));
//晋升职级累计积分 = 初始化已生效积分(不限业务场景) + 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
BigDecimal promotion = fyc.getInitEffect().add(fyc.getFirstSalesCommission());
fyc.setPromotion(promotion.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : promotion); fyc.setPromotion(promotion.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : promotion);
//最后计算日期,记录最后一次计算累计FYC的日期 //最后计算日期,记录最后一次计算累计FYC的日期
fyc.setLastCalcDate(LocalDateTime.now()); fyc.setLastCalcDate(LocalDateTime.now());
toUpdateList.add(fyc); toUpdateList.add(fyc);
......
...@@ -8,6 +8,7 @@ import com.yd.common.utils.RandomStringGenerator; ...@@ -8,6 +8,7 @@ import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.service.ApiAgentDetailFycService; import com.yd.csf.api.service.ApiAgentDetailFycService;
import com.yd.csf.feign.enums.FycSourceTypeEnum; import com.yd.csf.feign.enums.FycSourceTypeEnum;
import com.yd.csf.feign.enums.OprSourceEnum; import com.yd.csf.feign.enums.OprSourceEnum;
import com.yd.csf.service.enums.RuleItemEnum;
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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -81,7 +82,7 @@ public class CalmSendJobHandler { ...@@ -81,7 +82,7 @@ public class CalmSendJobHandler {
AgentAccumulatedFyc agentAccumulatedFyc = iAgentAccumulatedFycService.queryOne(calmTask.getBrokerBizId()); AgentAccumulatedFyc agentAccumulatedFyc = iAgentAccumulatedFycService.queryOne(calmTask.getBrokerBizId());
if (agentAccumulatedFyc != null) { if (agentAccumulatedFyc != null) {
// 安全获取任务佣金增量值,若为 null 则用 0 代替 // 安全获取任务佣金增量值,若为 null 则用 0 代替
BigDecimal fycValue = calmTask.getFyc() == null ? BigDecimal.ZERO : calmTask.getFyc(); BigDecimal fycValue = calmTask.getAfterFyc() == null ? BigDecimal.ZERO : calmTask.getAfterFyc();
// 安全获取原有字段值,若为 null 则视为 0 // 安全获取原有字段值,若为 null 则视为 0
BigDecimal noEffectOld = agentAccumulatedFyc.getNoEffect() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoEffect(); BigDecimal noEffectOld = agentAccumulatedFyc.getNoEffect() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoEffect();
...@@ -90,10 +91,12 @@ public class CalmSendJobHandler { ...@@ -90,10 +91,12 @@ public class CalmSendJobHandler {
BigDecimal noFirstCommissionOld = agentAccumulatedFyc.getNoFirstCommission() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoFirstCommission(); BigDecimal noFirstCommissionOld = agentAccumulatedFyc.getNoFirstCommission() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoFirstCommission();
BigDecimal rycOld = agentAccumulatedFyc.getRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getRyc(); BigDecimal rycOld = agentAccumulatedFyc.getRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getRyc();
BigDecimal noRycOld = agentAccumulatedFyc.getNoRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoRyc(); BigDecimal noRycOld = agentAccumulatedFyc.getNoRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoRyc();
BigDecimal firstSalesCommissionOld = agentAccumulatedFyc.getFirstSalesCommission() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getFirstSalesCommission();
BigDecimal noFirstSalesCommissionOld = agentAccumulatedFyc.getNoFirstSalesCommission() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getNoFirstSalesCommission();
//未生效累计积分(不限业务场景)= 未生效累计积分(不限业务场景) - 增量积分 //未生效累计积分(不限业务场景)= 未生效累计积分(不限业务场景) - 增量积分
BigDecimal noEffect = noEffectOld.subtract(fycValue); BigDecimal noEffect = noEffectOld.subtract(fycValue);
agentAccumulatedFyc.setNoEffect(noEffect.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : noEffect); agentAccumulatedFyc.setNoEffect(noEffect.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : noEffect);
//已生效累计积分(不限业务场景) = 已生效累计积分(不限业务场景) + 增量积分 //已生效累计积分(不限业务场景) = 已生效累计积分(不限业务场景) + 增量积分
BigDecimal effect = effectOld.add(fycValue); BigDecimal effect = effectOld.add(fycValue);
agentAccumulatedFyc.setEffect(effect); agentAccumulatedFyc.setEffect(effect);
...@@ -107,7 +110,17 @@ public class CalmSendJobHandler { ...@@ -107,7 +110,17 @@ public class CalmSendJobHandler {
agentAccumulatedFyc.setFirstCommission(firstCommission); agentAccumulatedFyc.setFirstCommission(firstCommission);
//未生效累计首期佣金积分值(佣金场景)= 未生效累计首期佣金积分值(佣金场景)- 增量积分 //未生效累计首期佣金积分值(佣金场景)= 未生效累计首期佣金积分值(佣金场景)- 增量积分
BigDecimal noFirstCommission = noFirstCommissionOld.subtract(fycValue); BigDecimal noFirstCommission = noFirstCommissionOld.subtract(fycValue);
agentAccumulatedFyc.setNoFirstCommission(noFirstCommission.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : noFirstCommission); agentAccumulatedFyc.setNoFirstCommission(noFirstCommission.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : noFirstCommission);
if (RuleItemEnum.SALES.getRuleItemBizId().equals(calmTask.getRuleItemBizId())) {
//销售佣金项目
//已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个)) = 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个)) + 增量积分
BigDecimal firstSalesCommission = firstSalesCommissionOld.add(fycValue);
agentAccumulatedFyc.setFirstSalesCommission(firstSalesCommission);
//未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))= 未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))- 增量积分
BigDecimal noFirstSalesCommission = noFirstSalesCommissionOld.subtract(fycValue);
agentAccumulatedFyc.setNoFirstSalesCommission(noFirstSalesCommission.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : noFirstSalesCommission);
}
} else { } else {
//非首期 //非首期
//已生效累计非首期佣金积分值(佣金场景) = 已生效累计非首期佣金积分值(佣金场景) + 增量积分 //已生效累计非首期佣金积分值(佣金场景) = 已生效累计非首期佣金积分值(佣金场景) + 增量积分
...@@ -115,14 +128,14 @@ public class CalmSendJobHandler { ...@@ -115,14 +128,14 @@ public class CalmSendJobHandler {
agentAccumulatedFyc.setRyc(ryc); agentAccumulatedFyc.setRyc(ryc);
//未生效累计非首期佣金积分值(佣金场景)= 未生效累计非首期佣金积分值(佣金场景)- 增量积分 //未生效累计非首期佣金积分值(佣金场景)= 未生效累计非首期佣金积分值(佣金场景)- 增量积分
BigDecimal noRyc = noRycOld.subtract(fycValue); BigDecimal noRyc = noRycOld.subtract(fycValue);
agentAccumulatedFyc.setNoRyc(noRyc.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : noRyc); agentAccumulatedFyc.setNoRyc(noRyc.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : noRyc);
} }
//晋升职级累计积分 = 已生效累计积分 - 已生效累计非首期佣金积分值 //晋升职级累计积分 = 已生效累计积分 - 已生效累计非首期佣金积分值
// 注意:此处 effect 和 ryc 已更新,使用更新后的值,但仍需判空保护 // 注意:此处 effect 和 ryc 已更新,使用更新后的值,但仍需判空保护
BigDecimal effectAfter = agentAccumulatedFyc.getEffect() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getEffect(); BigDecimal effectAfter = agentAccumulatedFyc.getEffect() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getEffect();
BigDecimal rycAfter = agentAccumulatedFyc.getRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getRyc(); BigDecimal rycAfter = agentAccumulatedFyc.getRyc() == null ? BigDecimal.ZERO : agentAccumulatedFyc.getRyc();
BigDecimal promotion = effectAfter.subtract(rycAfter); BigDecimal promotion = effectAfter.subtract(rycAfter);
agentAccumulatedFyc.setPromotion(promotion.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : promotion); agentAccumulatedFyc.setPromotion(promotion.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : promotion);
//最后计算日期,记录最后一次计算累计FYC的日期 //最后计算日期,记录最后一次计算累计FYC的日期
agentAccumulatedFyc.setLastCalcDate(LocalDateTime.now()); agentAccumulatedFyc.setLastCalcDate(LocalDateTime.now());
iAgentAccumulatedFycService.saveOrUpdate(agentAccumulatedFyc); iAgentAccumulatedFycService.saveOrUpdate(agentAccumulatedFyc);
......
...@@ -529,6 +529,13 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -529,6 +529,13 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
String token2 = request2.getHeader("Authorization"); String token2 = request2.getHeader("Authorization");
log.info("使用编程式事务,确保方法内的事务一致性 token==============,{}",token2); log.info("使用编程式事务,确保方法内的事务一致性 token==============,{}",token2);
//保单币种->港币的汇率
BigDecimal exchangeRate = BigDecimal.ZERO;
if (!CollectionUtils.isEmpty(queryPolicyAndBrokerDtoList)) {
QueryPolicyAndBrokerDto queryPolicyAndBrokerDto = queryPolicyAndBrokerDtoList.get(0);
exchangeRate = queryExchangeRateByFeign(queryPolicyAndBrokerDto.getCurrency(), "HKD");
}
//基本法计算值收集列表 //基本法计算值收集列表
List<AlgorithmCollectResDto> collectResDtos = new ArrayList<>(); List<AlgorithmCollectResDto> collectResDtos = new ArrayList<>();
for (QueryPolicyAndBrokerDto brokerDto : queryPolicyAndBrokerDtoList) { for (QueryPolicyAndBrokerDto brokerDto : queryPolicyAndBrokerDtoList) {
...@@ -609,7 +616,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -609,7 +616,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//异步处理-构建冷静期定时任务 //异步处理-构建冷静期定时任务
log.info("异步处理-构建冷静期定时任务=>请求前入参:{}",JSON.toJSONString(collectResDtos)); log.info("异步处理-构建冷静期定时任务=>请求前入参:{}",JSON.toJSONString(collectResDtos));
apiExpectedFortuneAsyncService.buildCalmDateTask(collectResDtos,policyNo); apiExpectedFortuneAsyncService.buildCalmDateTask(collectResDtos,policyNo,exchangeRate);
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
...@@ -628,8 +635,6 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -628,8 +635,6 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
}); });
} }
/** /**
* 查询和当前转介人相关关系(推荐,一级管理,二级管理,辅导)的客户端用户ID列表数据 * 查询和当前转介人相关关系(推荐,一级管理,二级管理,辅导)的客户端用户ID列表数据
* @param brokerDto * @param brokerDto
......
package com.yd.csf.service.enums;
/**
* 基本法项目枚举
*/
public enum RuleItemEnum {
SALES("rule_item_config_FePX0vpJQ9bU1vEo","销售佣金"),
;
//基本法项目配置表唯一业务ID
private String ruleItemBizId;
//基本法项目名称
private String itemName;
//构造函数
RuleItemEnum(String ruleItemBizId, String itemName) {
this.ruleItemBizId = ruleItemBizId;
this.itemName = itemName;
}
public String getRuleItemBizId() {
return ruleItemBizId;
}
public String getItemName() {
return itemName;
}
}
...@@ -105,7 +105,19 @@ public class AgentAccumulatedFyc implements Serializable { ...@@ -105,7 +105,19 @@ public class AgentAccumulatedFyc implements Serializable {
private BigDecimal noRyc; private BigDecimal noRyc;
/** /**
* 晋升职级累计积分 = 已生效累计积分 - 已生效累计非首期佣金积分值 * 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/
@TableField("first_sales_commission")
private BigDecimal firstSalesCommission;
/**
* 未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/
@TableField("no_first_sales_commission")
private BigDecimal noFirstSalesCommission;
/**
* 晋升职级累计积分 = 初始化已生效积分(不限业务场景) + 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/ */
@TableField("promotion") @TableField("promotion")
private BigDecimal promotion; private BigDecimal promotion;
......
...@@ -116,7 +116,19 @@ public class AgentAccumulatedFycLog implements Serializable { ...@@ -116,7 +116,19 @@ public class AgentAccumulatedFycLog implements Serializable {
private BigDecimal noRyc; private BigDecimal noRyc;
/** /**
* 晋升职级累计积分 = 已生效累计积分 - 已生效累计非首期佣金积分值 * 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/
@TableField("first_sales_commission")
private BigDecimal firstSalesCommission;
/**
* 未生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/
@TableField("no_first_sales_commission")
private BigDecimal noFirstSalesCommission;
/**
* 晋升职级累计积分 = 初始化已生效积分(不限业务场景) + 已生效累计首期销售佣金积分值(销售佣金场景(佣金场景的其中一个))
*/ */
@TableField("promotion") @TableField("promotion")
private BigDecimal promotion; private BigDecimal promotion;
......
...@@ -48,17 +48,29 @@ public class AgentDetailFyc implements Serializable { ...@@ -48,17 +48,29 @@ public class AgentDetailFyc implements Serializable {
private String sourceType; private String sourceType;
/** /**
* 积分来源名称
*/
@TableField("source_name")
private String sourceName;
/**
* 佣金项目类型
*/
@TableField("commission_type")
private Integer commissionType;
/**
* 佣金项目名称
*/
@TableField("commission_name")
private String commissionName;
/**
* 积分来源基本法项目配置表唯一业务ID * 积分来源基本法项目配置表唯一业务ID
*/ */
@TableField("rule_item_biz_id") @TableField("rule_item_biz_id")
private String ruleItemBizId; private String ruleItemBizId;
// /**
// * 保单发佣批次ID
// */
// @TableField("batch_bizId")
// private String batchBizId;
/** /**
* 积分提供的保单号 * 积分提供的保单号
*/ */
...@@ -66,6 +78,12 @@ public class AgentDetailFyc implements Serializable { ...@@ -66,6 +78,12 @@ public class AgentDetailFyc implements Serializable {
private String policyNo; private String policyNo;
/** /**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@TableField("fortune_period")
private Integer fortunePeriod;
/**
* 积分提供者(客户端用户表唯一业务ID) * 积分提供者(客户端用户表唯一业务ID)
*/ */
@TableField("provide_id") @TableField("provide_id")
...@@ -84,10 +102,22 @@ public class AgentDetailFyc implements Serializable { ...@@ -84,10 +102,22 @@ public class AgentDetailFyc implements Serializable {
private BigDecimal afterFyc; private BigDecimal afterFyc;
/** /**
* 变化值(-代表减少) * 汇率转化前积分值(变化值(-代表减少))
*/ */
@TableField("change_fyc") @TableField("change_fyc")
private String changeFyc; private BigDecimal changeFyc;
/**
* 汇率(保单币种->港币的汇率)
*/
@TableField("exchange_rate")
private BigDecimal exchangeRate;
/**
* 汇率转化后积分值(变化值(-代表减少))
*/
@TableField("change_after_fyc")
private BigDecimal changeAfterFyc;
/** /**
* 积分解冻时间 * 积分解冻时间
......
...@@ -58,6 +58,12 @@ public class CalmTask implements Serializable { ...@@ -58,6 +58,12 @@ public class CalmTask implements Serializable {
private String policyNo; private String policyNo;
/** /**
* 积分来源基本法项目配置表唯一业务ID
*/
@TableField("rule_item_biz_id")
private String ruleItemBizId;
/**
* 佣金项目 * 佣金项目
*/ */
@TableField("commission_name") @TableField("commission_name")
...@@ -82,12 +88,24 @@ public class CalmTask implements Serializable { ...@@ -82,12 +88,24 @@ public class CalmTask implements Serializable {
private String brokerName; private String brokerName;
/** /**
* 佣金值(积分值) * 汇率转换前佣金值(积分值)
*/ */
@TableField("fyc") @TableField("fyc")
private BigDecimal fyc; private BigDecimal fyc;
/** /**
* 汇率(保单币种->港币的汇率)
*/
@TableField("exchange_rate")
private BigDecimal exchangeRate;
/**
* 汇率转换后佣金值(积分值)
*/
@TableField("after_fyc")
private BigDecimal afterFyc;
/**
* 冷静期结束日期 * 冷静期结束日期
*/ */
@TableField("cooling_off_end_date") @TableField("cooling_off_end_date")
......
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