Commit 005ceb1a by zhangxingmin

异步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表

parent 8c51446d
package com.yd.csf.api.async;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class ApiExpectedFortuneAsyncService {
}
...@@ -6,10 +6,19 @@ import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest; ...@@ -6,10 +6,19 @@ import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest; import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse; import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse; import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import com.yd.csf.service.model.CommissionRuleBinding;
import org.springframework.scheduling.annotation.Async;
import java.util.List;
public interface ApiExpectedFortuneService { public interface ApiExpectedFortuneService {
Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request); Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request);
@Async("asyncQueryExecutor")
Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList);
Result<IPage<ApiExpectedFortunePageResponse>> page(ApiExpectedFortunePageRequest request); Result<IPage<ApiExpectedFortunePageResponse>> page(ApiExpectedFortunePageRequest request);
Result<Boolean> isGenerate(String policyNo); Result<Boolean> isGenerate(String policyNo);
......
...@@ -26,8 +26,12 @@ import com.yd.csf.service.service.PolicyService; ...@@ -26,8 +26,12 @@ import com.yd.csf.service.service.PolicyService;
import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient; import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -54,6 +58,16 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -54,6 +58,16 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Autowired @Autowired
private IExpectedFortuneService iExpectedFortuneService; private IExpectedFortuneService iExpectedFortuneService;
@Autowired
private ApplicationContext applicationContext;
private ApiExpectedFortuneService getSelf() {
return applicationContext.getBean(ApiExpectedFortuneService.class);
}
@Autowired
private TransactionTemplate transactionTemplate;
/** /**
* 生成预计发佣 * 生成预计发佣
* @param request * @param request
...@@ -81,24 +95,40 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -81,24 +95,40 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表 //遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
// 通过代理对象调用
getSelf().execute(queryPolicyAndBrokerDtoList, commissionRuleBindingList);
return Result.success(null,"生成预计发佣正在处理....,稍后查看预计发佣列表");
}
/**
* 异步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
* @param queryPolicyAndBrokerDtoList
* @param commissionRuleBindingList
* @return
*/
@Override
@Async("commonAsyncExecutor")
public Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList) {
// 使用编程式事务,确保异步方法内的事务一致性
return transactionTemplate.execute(status -> {
try {
for (QueryPolicyAndBrokerDto brokerDto : queryPolicyAndBrokerDtoList) { for (QueryPolicyAndBrokerDto brokerDto : queryPolicyAndBrokerDtoList) {
Integer paymentTerm = brokerDto.getPaymentTerm(); Integer paymentTerm = brokerDto.getPaymentTerm();
//获取保单的供款年期,遍历每个年期算出对应每个年期的佣金列表
if (Objects.isNull(paymentTerm)) { if (Objects.isNull(paymentTerm)) {
throw new BusinessException("保单的供款年期不存在"); throw new BusinessException("保单的供款年期不存在");
} }
//遍历供款年期
for (int i = 1; i <= paymentTerm; i++) { for (int i = 1; i <= paymentTerm; i++) {
//执行 - 销售佣金 - 出账 (销售佣金基本法)
executeBilling(ExecuteBillingDto.builder() executeBilling(ExecuteBillingDto.builder()
.name(brokerDto.getBrokerName()) .name(brokerDto.getBrokerName())
.policyAndBrokerDto(brokerDto) .policyAndBrokerDto(brokerDto)
.issueNumber(i) .issueNumber(i)
.build()); .build());
//非销售佣金积基本法 - 遍历所有绑定基本法的用户(客户端用户表用户), 计算用户绑定的所有基本法对应的计算值, 新增积分明细和发佣记录 (和保单绑定的转介人在执行基本法项目的SQL时候进行关系对比)
for (CommissionRuleBinding binding : commissionRuleBindingList) { for (CommissionRuleBinding binding : commissionRuleBindingList) {
//执行 - 奖励 (非销售佣金积基本法)
executeReward(ExecuteBillingDto.builder() executeReward(ExecuteBillingDto.builder()
.clientUserBizId(binding.getTargetId()) .clientUserBizId(binding.getTargetId())
.name(binding.getTargetName()) .name(binding.getTargetName())
...@@ -109,6 +139,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -109,6 +139,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
} }
return Result.success(); return Result.success();
} catch (Exception e) {
status.setRollbackOnly(); // 标记回滚
log.error("异步执行预计发佣失败,已回滚所有操作", e);
throw new BusinessException("异步处理失败: " + e.getMessage());
}
});
} }
/** /**
......
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