Commit b4f00c2c by jianan

新单跟进v2

parent 363d4114
...@@ -20,6 +20,9 @@ import com.yd.csf.api.dto.CommissionExcelDTO; ...@@ -20,6 +20,9 @@ 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;
import com.yd.csf.api.listener.PolicyDataListener; import com.yd.csf.api.listener.PolicyDataListener;
import com.yd.csf.api.service.ApiExpectedFortuneService;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.component.PolicyReportPdfService; import com.yd.csf.service.component.PolicyReportPdfService;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
...@@ -49,6 +52,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -49,6 +52,7 @@ import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -80,6 +84,8 @@ public class ApiPolicyFollowController { ...@@ -80,6 +84,8 @@ public class ApiPolicyFollowController {
private PolicyReportPdfService policyReportPdfService; private PolicyReportPdfService policyReportPdfService;
@Resource @Resource
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient; private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Resource
private ApiExpectedFortuneService apiExpectedFortuneService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
...@@ -527,7 +533,28 @@ public class ApiPolicyFollowController { ...@@ -527,7 +533,28 @@ public class ApiPolicyFollowController {
if (policyFollow == null) { if (policyFollow == null) {
return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage()); return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
} }
return Result.success(policyFollowService.changePolicyFollowStatus(changePolicyFollowStatusRequest, policyFollow));
policyFollowService.changePolicyFollowStatus(changePolicyFollowStatusRequest, policyFollow);
// 异步:根据保单生成预计出账记录
CompletableFuture.runAsync(() -> {
try {
// 调用 ApiExpectedFortuneService 的 generateWithLogAndRedis(包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest generateExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest();
generateExpectedFortuneRequest.setPolicyNo(policyFollow.getPolicyNo());
Result<ApiGenerateExpectedFortuneResponse> result = apiExpectedFortuneService.generateWithLogAndRedis(generateExpectedFortuneRequest);
if (result == null || result.getCode() != 200) {
log.error("新单跟进-异步生成预计出账记录失败:保单号={}, 响应结果={}",
policyFollow.getPolicyNo(), result);
} else {
log.info("新单跟进-异步生成预计出账记录成功:保单号={}", policyFollow.getPolicyNo());
}
} catch (Exception e) {
log.error("新单跟进-异步生成预计出账记录失败:保单号={}, 错误信息={}",
policyFollow.getPolicyNo(), e.getMessage(), e);
}
});
return Result.success(true);
} }
/** /**
......
...@@ -24,6 +24,14 @@ import java.util.Map; ...@@ -24,6 +24,14 @@ import java.util.Map;
public interface ApiExpectedFortuneService { public interface ApiExpectedFortuneService {
Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request); Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request);
/**
* 生成预计发佣(包含日志记录和Redis处理)
* 用于内部服务调用,会自动保存日志和异常时销毁Redis缓存
* @param request
* @return
*/
Result<ApiGenerateExpectedFortuneResponse> generateWithLogAndRedis(ApiGenerateExpectedFortuneRequest request);
@Async("asyncQueryExecutor") @Async("asyncQueryExecutor")
Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList, List<CommissionRuleBinding> commissionRuleBindingList,
......
...@@ -141,6 +141,37 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -141,6 +141,37 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
/** /**
* 生成预计发佣(包含日志记录和Redis处理)
* 用于内部服务调用,会自动保存日志和异常时销毁Redis缓存
*
* @param request
* @return
*/
@Override
public Result<ApiGenerateExpectedFortuneResponse> generateWithLogAndRedis(ApiGenerateExpectedFortuneRequest request) {
try {
Result<ApiGenerateExpectedFortuneResponse> result = generate(request);
// 保存预计发佣日志记录(成功)
apiExpectedFortuneLogService.saveExpectedFortuneLog(ApiExpectedFortuneLogDto.builder()
.errorMsg(result.getMsg())
.policyNo(request.getPolicyNo())
.status(2)
.build());
return result;
} catch (Exception e) {
// 抛出异常,销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + request.getPolicyNo());
// 保存预计发佣日志记录(失败)
apiExpectedFortuneLogService.saveExpectedFortuneLog(ApiExpectedFortuneLogDto.builder()
.errorMsg(e.getMessage())
.policyNo(request.getPolicyNo())
.status(1)
.build());
return Result.fail(e.getMessage());
}
}
/**
* 异步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表 * 异步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
* *
* @param queryPolicyAndBrokerDtoList * @param queryPolicyAndBrokerDtoList
......
...@@ -6,7 +6,6 @@ import cn.hutool.core.date.DateField; ...@@ -6,7 +6,6 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.metadata.IPage;
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;
import com.yd.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
...@@ -16,8 +15,6 @@ import com.yd.common.enums.ResultCode; ...@@ -16,8 +15,6 @@ 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.feign.client.expectedfortune.ApiExpectedFortuneFeignClient;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.FnaStatusEnum; import com.yd.csf.service.enums.FnaStatusEnum;
...@@ -32,19 +29,18 @@ import com.yd.csf.service.vo.PolicyFollowDetailVO; ...@@ -32,19 +29,18 @@ import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
import com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient; import com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient;
import com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest; import com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest;
import com.yd.insurance.base.feign.response.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
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.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -89,8 +85,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -89,8 +85,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
private FnaService fnaService; private FnaService fnaService;
@Resource @Resource
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient; private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Resource
private ApiExpectedFortuneFeignClient apiExpectedFortuneFeignClient;
@Override @Override
public PolicyFollow getByPolicyBizId(String policyBizId) { public PolicyFollow getByPolicyBizId(String policyBizId) {
...@@ -408,7 +403,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -408,7 +403,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policy.setUpdaterId(loginUserId); policy.setUpdaterId(loginUserId);
policy.setUpdateTime(new Date()); policy.setUpdateTime(new Date());
policyService.save(policy); try {
policyService.save(policy);
} catch (DuplicateKeyException e) {
// 保单号已存在
throw new BusinessException("保单号 " + policyFollow.getPolicyNo() + " 已存在,请勿重复添加");
}
} }
} }
return true; return true;
...@@ -466,6 +466,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -466,6 +466,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (PolicyFollowStatusEnum.EFFECTIVE.equals(policyFollowStatusEnum)) { if (PolicyFollowStatusEnum.EFFECTIVE.equals(policyFollowStatusEnum)) {
Policy policy = new Policy(); Policy policy = new Policy();
BeanUtils.copyProperties(policyFollow, policy, "id"); BeanUtils.copyProperties(policyFollow, policy, "id");
policy.setPaymentPremium(policyFollow.getInitialPremium());
if (ObjectUtils.isEmpty(policy.getInsuranceCompany()) || ObjectUtils.isEmpty(policy.getReconciliationCompanyBizId())) { if (ObjectUtils.isEmpty(policy.getInsuranceCompany()) || ObjectUtils.isEmpty(policy.getReconciliationCompanyBizId())) {
// 获取保单产品信息,填充对账公司相关字段 // 获取保单产品信息,填充对账公司相关字段
...@@ -520,22 +521,15 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -520,22 +521,15 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
} }
} }
// 保存保单 // 保存保单
policyService.save(policy); try {
policyService.save(policy);
} catch (DuplicateKeyException e) {
// 保单号已存在
throw new BusinessException("保单号 " + policy.getPolicyNo() + " 已存在,请勿重复添加");
}
// 根据保单生成预计入账记录 // 根据保单生成预计入账记录
generateExpectedCommission(policyFollow, policy); generateExpectedCommission(policyFollow, policy);
// 异步:根据保单生成预计出账记录
CompletableFuture.runAsync(() -> {
try {
ApiGenerateExpectedFortuneRequest getExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest();
getExpectedFortuneRequest.setPolicyNo(policyFollow.getPolicyNo());
apiExpectedFortuneFeignClient.generate(getExpectedFortuneRequest);
} catch (Exception e) {
log.error("新单跟进-异步生成预计出账记录失败: {}", 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