Commit bee5ff89 by zhangxingmin

push

parent 680c1f5d
package com.yd.csf.api.controller; package com.yd.csf.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.constant.RedisConstants;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RedisUtil;
import com.yd.csf.api.service.ApiExpectedFortuneService; import com.yd.csf.api.service.ApiExpectedFortuneService;
import com.yd.csf.feign.client.expectedfortune.ApiExpectedFortuneFeignClient; import com.yd.csf.feign.client.expectedfortune.ApiExpectedFortuneFeignClient;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest; import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
...@@ -29,6 +31,9 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie ...@@ -29,6 +31,9 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
@Autowired @Autowired
private ApiExpectedFortuneService apiExpectedFortuneService; private ApiExpectedFortuneService apiExpectedFortuneService;
@Autowired
private RedisUtil redisUtil;
/** /**
* 生成预计发佣 * 生成预计发佣
* @param request * @param request
...@@ -36,7 +41,13 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie ...@@ -36,7 +41,13 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
*/ */
@Override @Override
public Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request) { public Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request) {
return apiExpectedFortuneService.generate(request); try {
return apiExpectedFortuneService.generate(request);
}catch (Exception e) {
//抛出异常,销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + request.getPolicyNo());
return Result.fail(e.getMessage());
}
} }
/** /**
......
...@@ -17,7 +17,8 @@ public interface ApiExpectedFortuneService { ...@@ -17,7 +17,8 @@ public interface ApiExpectedFortuneService {
@Async("asyncQueryExecutor") @Async("asyncQueryExecutor")
Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList); List<CommissionRuleBinding> commissionRuleBindingList,
String policyNo);
Result<IPage<ApiExpectedFortunePageResponse>> page(ApiExpectedFortunePageRequest request); Result<IPage<ApiExpectedFortunePageResponse>> page(ApiExpectedFortunePageRequest request);
......
...@@ -2,12 +2,14 @@ package com.yd.csf.api.service.impl; ...@@ -2,12 +2,14 @@ package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.constant.RedisConstants;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ProjectEnum; import com.yd.common.enums.ProjectEnum;
import com.yd.common.enums.TenantEnum; 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;
import com.yd.common.utils.RedisUtil;
import com.yd.csf.api.dto.*; import com.yd.csf.api.dto.*;
import com.yd.csf.api.service.ApiBasicLawCalculateService; import com.yd.csf.api.service.ApiBasicLawCalculateService;
import com.yd.csf.api.service.ApiExpectedFortuneService; import com.yd.csf.api.service.ApiExpectedFortuneService;
...@@ -24,6 +26,7 @@ import com.yd.csf.service.service.ICommissionRuleBindingService; ...@@ -24,6 +26,7 @@ import com.yd.csf.service.service.ICommissionRuleBindingService;
import com.yd.csf.service.service.IExpectedFortuneService; import com.yd.csf.service.service.IExpectedFortuneService;
import com.yd.csf.service.service.PolicyService; import com.yd.csf.service.service.PolicyService;
import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient; import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient;
import jodd.util.StringUtil;
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.context.ApplicationContext;
...@@ -33,6 +36,8 @@ import org.springframework.transaction.PlatformTransactionManager; ...@@ -33,6 +36,8 @@ 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.transaction.support.TransactionTemplate;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
...@@ -68,6 +73,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -68,6 +73,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Autowired @Autowired
private TransactionTemplate transactionTemplate; private TransactionTemplate transactionTemplate;
@Autowired
private RedisUtil redisUtil;
/** /**
* 生成预计发佣 * 生成预计发佣
* @param request * @param request
...@@ -75,6 +83,15 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -75,6 +83,15 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
*/ */
@Override @Override
public Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request) { public Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request) {
//查询当前保单号是否正在执行预计发佣的缓存,有值就说明正在执行,无值说明执行完毕或者没有执行。
String value = redisUtil.getCacheObject(RedisConstants.EXPECTED_FORTUNE + request.getPolicyNo());
if (StringUtil.isNotBlank(value)) {
//有值正在执行,提示
throw new BusinessException("生成预计发佣正在执行中,无需再次执行");
}else {
//无值设置值,表示正在执行
redisUtil.setCacheObject(RedisConstants.EXPECTED_FORTUNE + request.getPolicyNo(),request.getPolicyNo());
}
List<ExpectedFortune> list = iExpectedFortuneService.queryList(request.getPolicyNo()); List<ExpectedFortune> list = iExpectedFortuneService.queryList(request.getPolicyNo());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new BusinessException("当前保单已经生成过预计发佣数据,无需再次生成"); throw new BusinessException("当前保单已经生成过预计发佣数据,无需再次生成");
...@@ -100,7 +117,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -100,7 +117,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表 //遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
// 通过代理对象调用 // 通过代理对象调用
getSelf().execute(queryPolicyAndBrokerDtoList, commissionRuleBindingList); getSelf().execute(queryPolicyAndBrokerDtoList, commissionRuleBindingList,request.getPolicyNo());
return Result.success(null,"生成预计发佣正在处理....,稍后查看预计发佣列表"); return Result.success(null,"生成预计发佣正在处理....,稍后查看预计发佣列表");
} }
...@@ -114,7 +131,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -114,7 +131,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Override @Override
@Async("commonAsyncExecutor") @Async("commonAsyncExecutor")
public Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, public Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList) { List<CommissionRuleBinding> commissionRuleBindingList,
String policyNo) {
// 使用编程式事务,确保异步方法内的事务一致性 // 使用编程式事务,确保异步方法内的事务一致性
return transactionTemplate.execute(status -> { return transactionTemplate.execute(status -> {
...@@ -142,8 +160,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -142,8 +160,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
} }
} }
//执行成功完毕,也要销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo);
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
//抛出异常,销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo);
status.setRollbackOnly(); // 标记回滚 status.setRollbackOnly(); // 标记回滚
log.error("异步执行预计发佣失败,已回滚所有操作", e); log.error("异步执行预计发佣失败,已回滚所有操作", e);
throw new BusinessException("异步处理失败: " + e.getMessage()); 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