Commit b4f00c2c by jianan

新单跟进v2

parent 363d4114
......@@ -20,6 +20,9 @@ import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.dto.PolicyFollowDTO;
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.component.PolicyReportPdfService;
import com.yd.csf.service.dto.*;
......@@ -49,6 +52,7 @@ import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
......@@ -80,6 +84,8 @@ public class ApiPolicyFollowController {
private PolicyReportPdfService policyReportPdfService;
@Resource
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Resource
private ApiExpectedFortuneService apiExpectedFortuneService;
@PostMapping("/upload/excel")
......@@ -527,7 +533,28 @@ public class ApiPolicyFollowController {
if (policyFollow == null) {
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;
public interface ApiExpectedFortuneService {
Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request);
/**
* 生成预计发佣(包含日志记录和Redis处理)
* 用于内部服务调用,会自动保存日志和异常时销毁Redis缓存
* @param request
* @return
*/
Result<ApiGenerateExpectedFortuneResponse> generateWithLogAndRedis(ApiGenerateExpectedFortuneRequest request);
@Async("asyncQueryExecutor")
Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList,
......
......@@ -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
......
......@@ -6,7 +6,6 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.service.impl.ServiceImpl;
import com.yd.auth.core.dto.AuthUserDto;
......@@ -16,8 +15,6 @@ import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
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.dto.*;
import com.yd.csf.service.enums.FnaStatusEnum;
......@@ -32,19 +29,18 @@ import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowVO;
import com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient;
import com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest;
import com.yd.insurance.base.feign.response.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
......@@ -89,8 +85,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
private FnaService fnaService;
@Resource
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Resource
private ApiExpectedFortuneFeignClient apiExpectedFortuneFeignClient;
@Override
public PolicyFollow getByPolicyBizId(String policyBizId) {
......@@ -408,7 +403,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policy.setUpdaterId(loginUserId);
policy.setUpdateTime(new Date());
policyService.save(policy);
try {
policyService.save(policy);
} catch (DuplicateKeyException e) {
// 保单号已存在
throw new BusinessException("保单号 " + policyFollow.getPolicyNo() + " 已存在,请勿重复添加");
}
}
}
return true;
......@@ -466,6 +466,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (PolicyFollowStatusEnum.EFFECTIVE.equals(policyFollowStatusEnum)) {
Policy policy = new Policy();
BeanUtils.copyProperties(policyFollow, policy, "id");
policy.setPaymentPremium(policyFollow.getInitialPremium());
if (ObjectUtils.isEmpty(policy.getInsuranceCompany()) || ObjectUtils.isEmpty(policy.getReconciliationCompanyBizId())) {
// 获取保单产品信息,填充对账公司相关字段
......@@ -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);
// 异步:根据保单生成预计出账记录
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