Commit 7a4e2b89 by zhangxingmin

push

parent 73bbc14a
package com.yd.csf.api.async; package com.yd.csf.api.async;
import com.yd.common.result.Result;
import com.yd.csf.api.service.ApiExpectedFortuneService;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Slf4j @Slf4j
@Component @Component
public class ApiExpectedFortuneAsyncService { public class ApiExpectedFortuneAsyncService {
@Resource
private ApiExpectedFortuneService apiExpectedFortuneService;
/**
* 异步处理
*
* @return
*/
@Async("commonAsyncExecutor")
public Result execute(String policyNo) {
// 调用 ApiExpectedFortuneService 的 generateSyncWithLogAndRedis(同步版本,包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest generateExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest();
generateExpectedFortuneRequest.setPolicyNo(policyNo);
log.info("生成预计发佣generateSyncWithLogAndRedis——>PolicyNo:{}", policyNo);
Result<ApiGenerateExpectedFortuneResponse> result = apiExpectedFortuneService.generateSyncWithLogAndRedis(generateExpectedFortuneRequest);
if (result != null && result.getCode() == 200) {
log.info("新单跟进-同步生成预计出账记录成功:保单号={}", policyNo);
}
return Result.success();
}
} }
...@@ -18,6 +18,7 @@ import com.yd.common.enums.ResultCode; ...@@ -18,6 +18,7 @@ import com.yd.common.enums.ResultCode;
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.csf.api.async.ApiExpectedFortuneAsyncService;
import com.yd.csf.api.dto.CommissionExcelDTO; import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.api.dto.PolicyExcelDTO; import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.dto.PolicyFollowDTO; import com.yd.csf.api.dto.PolicyFollowDTO;
...@@ -93,14 +94,16 @@ public class ApiPolicyFollowController { ...@@ -93,14 +94,16 @@ public class ApiPolicyFollowController {
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient; private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Resource @Resource
private CommissionExpectedService commissionExpectedService; private CommissionExpectedService commissionExpectedService;
@Resource // @Resource
private ApiPolicyFollowService apiPolicyFollowService; // private ApiPolicyFollowService apiPolicyFollowService;
@Resource // @Resource
private ApiExpectedFortuneService apiExpectedFortuneService; // private ApiExpectedFortuneService apiExpectedFortuneService;
@Resource @Resource
private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient; private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient;
@Resource @Resource
private FeignResultHelper feignResultHelper; private FeignResultHelper feignResultHelper;
@Resource
private ApiExpectedFortuneAsyncService apiExpectedFortuneAsyncService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
...@@ -575,7 +578,8 @@ public class ApiPolicyFollowController { ...@@ -575,7 +578,8 @@ public class ApiPolicyFollowController {
String token = request.getHeader("Authorization"); String token = request.getHeader("Authorization");
log.info("修改跟进状态获取token:{}", token); log.info("修改跟进状态获取token:{}", token);
// 同步:根据保单生成预计出账记录 // 同步:根据保单生成预计出账记录
execute(token, policyFollow.getPolicyNo()); // execute(token, policyFollow.getPolicyNo());
apiExpectedFortuneAsyncService.execute(policyFollow.getPolicyNo());
} }
return Result.success(true); return Result.success(true);
} }
...@@ -587,22 +591,22 @@ public class ApiPolicyFollowController { ...@@ -587,22 +591,22 @@ public class ApiPolicyFollowController {
policyFollow.getProductName()); policyFollow.getProductName());
} }
/** // /**
* 异步处理 // * 异步处理
* // *
* @return // * @return
*/ // */
public Result execute(String token, String policyNo) { // public Result execute(String token, String policyNo) {
// 调用 ApiExpectedFortuneService 的 generateSyncWithLogAndRedis(同步版本,包含日志和Redis处理) // // 调用 ApiExpectedFortuneService 的 generateSyncWithLogAndRedis(同步版本,包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest generateExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest(); // ApiGenerateExpectedFortuneRequest generateExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest();
generateExpectedFortuneRequest.setPolicyNo(policyNo); // generateExpectedFortuneRequest.setPolicyNo(policyNo);
log.info("生成预计发佣generateSyncWithLogAndRedis——>PolicyNo:{}", policyNo); // log.info("生成预计发佣generateSyncWithLogAndRedis——>PolicyNo:{}", policyNo);
Result<ApiGenerateExpectedFortuneResponse> result = apiExpectedFortuneService.generateSyncWithLogAndRedis(generateExpectedFortuneRequest); // Result<ApiGenerateExpectedFortuneResponse> result = apiExpectedFortuneService.generateSyncWithLogAndRedis(generateExpectedFortuneRequest);
if (result != null && result.getCode() == 200) { // if (result != null && result.getCode() == 200) {
log.info("新单跟进-同步生成预计出账记录成功:保单号={}", policyNo); // log.info("新单跟进-同步生成预计出账记录成功:保单号={}", policyNo);
} // }
return Result.success(); // return Result.success();
} // }
/** /**
* 新单跟进状态列表查询 * 新单跟进状态列表查询
......
...@@ -4,6 +4,8 @@ import org.springframework.context.annotation.Bean; ...@@ -4,6 +4,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
...@@ -37,20 +39,53 @@ public class AsyncConfig { ...@@ -37,20 +39,53 @@ public class AsyncConfig {
return executor; return executor;
} }
// /**
// * 通用异步任务线程池
// */
// @Bean("commonAsyncExecutor")
// public Executor commonAsyncExecutor() {
// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// executor.setCorePoolSize(5);
// executor.setMaxPoolSize(10);
// executor.setQueueCapacity(50);
// executor.setThreadNamePrefix("common-async-");
// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// executor.setWaitForTasksToCompleteOnShutdown(true);
// executor.setAwaitTerminationSeconds(30);
// executor.setKeepAliveSeconds(30);
// executor.initialize();
// return executor;
// }
/** /**
* 通用异步任务线程池 * 通用异步任务线程池
* @return
*/ */
@Bean("commonAsyncExecutor") @Bean(name = "commonAsyncExecutor")
public Executor commonAsyncExecutor() { public ThreadPoolTaskExecutor commonAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5); // 设置核心线程数、最大线程数、队列容量等参数...
executor.setMaxPoolSize(10); executor.setCorePoolSize(10);
executor.setQueueCapacity(50); executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("common-async-"); executor.setThreadNamePrefix("common-async-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setWaitForTasksToCompleteOnShutdown(true); // 设置 TaskDecorator,用于传递 RequestAttributes
executor.setAwaitTerminationSeconds(30); executor.setTaskDecorator(runnable -> {
executor.setKeepAliveSeconds(30); // 获取当前线程的 RequestAttributes
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return () -> {
try {
// 将 RequestAttributes 设置到子线程中
RequestContextHolder.setRequestAttributes(attributes);
runnable.run();
} finally {
// 任务完成后清空,避免内存泄漏
RequestContextHolder.resetRequestAttributes();
}
};
});
executor.initialize(); executor.initialize();
return executor; return executor;
} }
......
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