package com.nova.sankuai.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.nova.sankuai.domain.api.hengyidai.HySignUtil;
|
import com.nova.sankuai.domain.api.hengyidai.HyUtil;
|
import com.nova.sankuai.domain.api.hengyidai.callback.HyPushLoanStatusDto;
|
import com.nova.sankuai.domain.api.hengyidai.callback.HyPushRepayDto;
|
import com.nova.sankuai.domain.api.hengyidai.callback.HyPushRepayPlanDto;
|
import com.nova.sankuai.domain.api.hengyidai.dto.HyConfirmDto;
|
import com.nova.sankuai.domain.api.hengyidai.dto.HyGetContractsDto;
|
import com.nova.sankuai.domain.api.hengyidai.dto.HyGetRepayUrlDto;
|
import com.nova.sankuai.domain.api.hengyidai.dto.HyGetSignUrlDto;
|
import com.nova.sankuai.domain.api.hengyidai.response.*;
|
import com.nova.sankuai.domain.dto.capitalflow.*;
|
import com.nova.sankuai.domain.entity.CapitalInfo;
|
import com.nova.sankuai.domain.entity.Customer;
|
import com.nova.sankuai.domain.entity.CustomerCapitalResult;
|
import com.nova.sankuai.domain.entity.CustomerUser;
|
import com.nova.sankuai.domain.enums.CustomerUserBusinessTypeEnum;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalApprovalResultEnum;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalResultSourceCodeEnum;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalResultStatusEnum;
|
import com.nova.sankuai.domain.enums.customerinfo.UseOfLoanEnum;
|
import com.nova.sankuai.domain.enums.yixin.YiXinHomeRelationEnum;
|
import com.nova.sankuai.domain.vo.capitalflow.*;
|
import com.nova.sankuai.domain.vo.capitalresult.HengYiDaiPushResultVo;
|
import com.nova.sankuai.infra.config.CommonException;
|
import com.nova.sankuai.infra.constants.ResultCode;
|
import com.nova.sankuai.infra.mapper.CustomerCapitalResultMapper;
|
import com.nova.sankuai.infra.mapper.CustomerMapper;
|
import com.nova.sankuai.infra.mapper.CustomerUserMapper;
|
import com.nova.sankuai.infra.utils.ConstantsUtil;
|
import com.nova.sankuai.infra.utils.ResultJson;
|
import com.nova.sankuai.service.ICapitalResultCommonService;
|
import com.nova.sankuai.service.IHengYiDaiService;
|
import lombok.AllArgsConstructor;
|
import org.apache.http.util.TextUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.DigestUtils;
|
|
import java.util.*;
|
|
@Service
|
@AllArgsConstructor
|
public class HengYiDaiServiceImpl implements IHengYiDaiService {
|
|
private final HySignUtil hySignUtil;
|
|
private final HyUtil hyUtil;
|
|
private final ICapitalResultCommonService capitalResultCommonService;
|
|
private final CustomerCapitalResultMapper capitalResultMapper;
|
|
private final CustomerMapper customerMapper;
|
|
private final CustomerUserMapper customerUserMapper;
|
|
private static final Logger log = LoggerFactory.getLogger("capitalLogger");
|
|
@Override
|
public String pushAuditResult(String param, String logNumber) {
|
JSONObject object = new JSONObject();
|
try {
|
if (!TextUtils.isEmpty(param)) {
|
Map<String, Object> map = hySignUtil.parseRequest(param);
|
log.info("日志编号:" + logNumber + "审核结果回调接口:{}", map.toString());
|
if (!TextUtils.isEmpty(map.get("data").toString())) {
|
HyGetAuditResultResponse result = JSON.parseObject(map.get("data").toString(), HyGetAuditResultResponse.class);
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCreditNo, result.getOrderNo()));
|
if (capitalResult != null) {
|
updateResultByAudit(capitalResult, result);
|
}
|
object.put("code", 200);
|
object.put("msg", "成功");
|
return object.toJSONString();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("日志编号:" + logNumber + "审核结果回调接口异常:{}", e);
|
}
|
object.put("code", 1001);
|
object.put("msg", "参数错误");
|
return object.toJSONString();
|
}
|
|
private CustomerCapitalResult updateResultByAudit(CustomerCapitalResult capitalResult, HyGetAuditResultResponse param) {
|
if (CapitalApprovalResultEnum.APPROVAL_WAIT.getCode().equals(capitalResult.getApprovalResult())) {
|
LambdaUpdateWrapper<CustomerCapitalResult> wrapper = Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getLastUpdatedDate, new Date())
|
.set(CustomerCapitalResult::getCreditApplyTime, param.getAuditTime())
|
.set(CustomerCapitalResult::getThirdOrderStatus, param.getStatus())
|
.eq(CustomerCapitalResult::getId, capitalResult.getId());
|
if (HyGetOrderStatusResponse.STATUS_AUDIT_SUCCESS.equals(param.getStatus())) {
|
capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode());
|
if (param.getAuditAmount() != null) {
|
Double amount = Double.valueOf(param.getAuditAmount()) / 100;
|
wrapper.set(CustomerCapitalResult::getTotalCredit, amount);
|
}
|
wrapper.set(CustomerCapitalResult::getPeriods, param.getAuditPeriodNum());
|
wrapper.set(CustomerCapitalResult::getApprovalTermUnit, param.getAuditPeriodNumUnit());
|
} else if (HyGetOrderStatusResponse.STATUS_AUDIT_FAIL.equals(param.getStatus())) {
|
capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_REFUSE.getCode());
|
wrapper.set(CustomerCapitalResult::getFailedReason, param.getRejectReasons());
|
}
|
wrapper.set(CustomerCapitalResult::getApprovalResult, capitalResult.getApprovalResult());
|
capitalResultMapper.update(null, wrapper);
|
}
|
return capitalResult;
|
}
|
|
|
@Override
|
public String pushLoanStatus(String param, String logNumber) {
|
JSONObject object = new JSONObject();
|
try {
|
if (!TextUtils.isEmpty(param)) {
|
Map<String, Object> map = hySignUtil.parseRequest(param);
|
log.info("日志编号:" + logNumber + "订单状态回调接口:{}", map.toString());
|
if (!TextUtils.isEmpty(map.get("data").toString())) {
|
HyPushLoanStatusDto result = JSON.parseObject(map.get("data").toString(), HyPushLoanStatusDto.class);
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCreditNo, result.getOrderNo()));
|
if (capitalResult != null) {
|
if (!Objects.equals(result.getStatus(), capitalResult.getThirdOrderStatus())) {
|
capitalResult.setThirdOrderStatus(result.getStatus());
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getThirdOrderStatus, capitalResult.getThirdOrderStatus())
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
}
|
}
|
object.put("code", 200);
|
object.put("msg", "成功");
|
return object.toJSONString();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("日志编号:" + logNumber + "订单状态回调接口异常:{}", e);
|
}
|
object.put("code", 1001);
|
object.put("msg", "参数错误");
|
return object.toJSONString();
|
}
|
|
|
@Override
|
public String pushRepayResult(String param, String logNumber) {
|
JSONObject object = new JSONObject();
|
try {
|
if (!TextUtils.isEmpty(param)) {
|
Map<String, Object> map = hySignUtil.parseRequest(param);
|
log.info("日志编号:" + logNumber + "还款结果回调接口:{}", map.toString());
|
if (!TextUtils.isEmpty(map.get("data").toString())) {
|
HyPushRepayDto parseObject = JSON.parseObject(map.get("data").toString(), HyPushRepayDto.class);
|
System.out.println(parseObject);
|
object.put("code", 200);
|
object.put("msg", "成功");
|
return object.toJSONString();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("日志编号:" + logNumber + "还款结果回调接口异常:{}", e);
|
}
|
object.put("code", 1001);
|
object.put("msg", "参数错误");
|
return object.toJSONString();
|
}
|
|
|
@Override
|
public String pushRepayPlan(String param, String logNumber) {
|
JSONObject object = new JSONObject();
|
try {
|
if (!TextUtils.isEmpty(param)) {
|
Map<String, Object> map = hySignUtil.parseRequest(param);
|
log.info("日志编号:" + logNumber + "还款计划回调接口:{}", map.toString());
|
if (!TextUtils.isEmpty(map.get("data").toString())) {
|
HyPushRepayPlanDto parseObject = JSON.parseObject(map.get("data").toString(), HyPushRepayPlanDto.class);
|
object.put("code", 200);
|
object.put("msg", "成功");
|
return object.toJSONString();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("日志编号:" + logNumber + "还款计划回调接口异常:{}", e);
|
}
|
object.put("code", 1001);
|
object.put("msg", "参数错误");
|
return object.toJSONString();
|
}
|
|
/**
|
* 校验恒易贷请求是否成功
|
*
|
* @param response
|
* @return
|
* @throws CommonException
|
*/
|
private boolean checkHydResponse(HyResponse response) throws CommonException {
|
if (response != null) {
|
if (response.isSuccess()) {
|
return true;
|
} else {
|
return false;
|
}
|
} else {
|
throw new CommonException("请求返回值为空");
|
}
|
}
|
|
/**
|
* 校验恒易贷请求业务数据是否为空
|
*
|
* @param response
|
* @return
|
* @throws CommonException
|
*/
|
private boolean checkHydResponseData(HyResponse response) throws CommonException {
|
if (response != null) {
|
if (response.isSuccess()) {
|
if (response.getData() != null) {
|
return true;
|
} else {
|
throw new CommonException("请求业务数据为空");
|
}
|
} else {
|
throw new CommonException("请求响应状态失败");
|
}
|
} else {
|
throw new CommonException("请求返回值为空");
|
}
|
}
|
|
@Override
|
public CustomerCapitalResult checkCustomerByHengYiDai(CapitalInfo capitalInfo, Customer customer, CustomerUser customerUser, String logNumber) {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "撞库接口开始");
|
CustomerCapitalResult capitalResult = CustomerCapitalResult.initResult(capitalInfo, customerUser.getId(), customer.getId());
|
capitalResult.setStatus(CapitalResultStatusEnum.CHECK.getCode());
|
CustomerCapitalResult filterResult = capitalResultCommonService.filterCustomer(customer, capitalInfo, capitalResult, logNumber);
|
if (filterResult != null) {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "撞库时不满足资方信息筛选条件,撞库失败");
|
return filterResult;
|
}
|
try {
|
String idCardMd5 = DigestUtils.md5DigestAsHex(customer.getIdCard().getBytes());
|
HyResponse<HyCollisionLibraryResponse> response = hyUtil.checkUser(idCardMd5, log, logNumber);
|
if (checkHydResponseData(response)) {
|
HyCollisionLibraryResponse data = response.getData();
|
if (HyCollisionLibraryResponse.CAN_LOAN.equals(data.getIsCanLoan())) {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "撞库对接信息:{}", response.toString());
|
capitalResult.setCheckResult(CustomerCapitalResult.CHECK_SUCCESS);
|
} else {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "撞库对接信息:{}", response.toString());
|
capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL);
|
}
|
}
|
} catch (CommonException e) {
|
capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL);
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "初筛接口撞库失败" + e.getMessage());
|
} catch (Exception e) {
|
capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL);
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "初筛接口撞库失败", e);
|
}
|
if (CustomerUserBusinessTypeEnum.RONG_YI_TUI.getCode().equals(customerUser.getBusinessType())) {
|
capitalResult.setCapitalResultSourceCode(CapitalResultSourceCodeEnum.RONG_YI_TUI.getCode());
|
}
|
capitalResultMapper.insert(capitalResult);
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "撞库结束");
|
return capitalResult;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public HengYiDaiPushResultVo pushCustomerByHengYiDai(CapitalInfo capitalInfo, CustomerUser customerUser) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "对接流程开始");
|
HengYiDaiPushResultVo pushResultVo = new HengYiDaiPushResultVo();
|
Customer customer = customerMapper.getLatestCustomerRecord(customerUser.getPhone());
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getCapitalInfoCode, capitalInfo.getCode()));
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
if (CustomerCapitalResult.CHECK_SUCCESS.equals(capitalResult.getCheckResult())) {
|
pushResultVo.setCheckResult(true);
|
} else {
|
pushResultVo.setCheckResult(false);
|
}
|
pushResultVo.setCapitalResultId(capitalResult.getId());
|
if (CapitalResultStatusEnum.CHECK.getCode().equals(capitalResult.getStatus())
|
&& CustomerCapitalResult.CHECK_SUCCESS.equals(capitalResult.getCheckResult())) {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "数据推送开始");
|
capitalResult.setStatus(CapitalResultStatusEnum.APPLY.getCode());
|
try {
|
String creditNo = ConstantsUtil.getCreditNo();
|
boolean filter = filterCustomerByHengYidai(customer, capitalInfo, logNumber);
|
if (!filter) {
|
capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_REQUEST_FAIL.getCode());
|
capitalResult.setThirdOrderStatus(HyGetOrderStatusResponse.STATUS_AUDIT_FAIL);
|
} else {
|
HyResponse response = hyUtil.pushPhaseOne(customer, creditNo, log, logNumber);
|
if (checkHydResponse(response)) {
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "进件申请返回结果" + response.toString());
|
customerUserMapper.update(null, Wrappers.<CustomerUser>lambdaUpdate()
|
.set(CustomerUser::getCreditNo, capitalResult.getCreditNo())
|
.eq(CustomerUser::getId, customerUser.getId()));
|
capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_WAIT.getCode());
|
capitalResult.setThirdOrderStatus(HyGetOrderStatusResponse.STATUS_AUDIT_WAIT);
|
} else {
|
capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_REQUEST_FAIL.getCode());
|
capitalResult.setThirdOrderStatus(HyGetOrderStatusResponse.STATUS_AUDIT_FAIL);
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "进件申请被拒绝" + response.toString());
|
}
|
}
|
LambdaUpdateWrapper<CustomerCapitalResult> wrapper = capitalResultCommonService.getWrapper(capitalInfo, capitalResult);
|
wrapper.set(CustomerCapitalResult::getThirdOrderStatus, capitalResult.getThirdOrderStatus());
|
wrapper.set(CustomerCapitalResult::getCreditNo, creditNo);
|
capitalResultMapper.update(null, wrapper);
|
Integer pageType = HyGetOrderStatusResponse.parsePageType(capitalResult.getThirdOrderStatus());
|
pushResultVo.setPageType(pageType);
|
pushResultVo.setThirdStatus(capitalResult.getThirdOrderStatus());
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "数据推送结束");
|
return pushResultVo;
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "进件申请请求失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "进件申请请求失败", e);
|
}
|
throw new CommonException("推送数据异常");
|
} else {
|
try {
|
if (CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode().equals(capitalResult.getApprovalResult())) {
|
HyResponse<HyGetOrderStatusResponse> response = hyUtil.getOrderStatus(capitalResult.getCreditNo(), log, logNumber);
|
if (checkHydResponseData(response)) {
|
Integer status = response.getData().getStatus();
|
if (!status.equals(capitalResult.getThirdOrderStatus())) {
|
capitalResult.setThirdOrderStatus(status);
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getThirdOrderStatus, status)
|
.set(CustomerCapitalResult::getLastUpdatedDate, new Date())
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
}
|
}
|
} else {
|
HyResponse<HyGetAuditResultResponse> response = hyUtil.getAuditResult(capitalResult.getCreditNo(), log, logNumber);
|
if (checkHydResponseData(response)) {
|
HyGetAuditResultResponse data = response.getData();
|
capitalResult = updateResultByAudit(capitalResult, data);
|
}
|
}
|
Integer pageType = HyGetOrderStatusResponse.parsePageType(capitalResult.getThirdOrderStatus());
|
pushResultVo.setPageType(pageType);
|
pushResultVo.setThirdStatus(capitalResult.getThirdOrderStatus());
|
return pushResultVo;
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取订单状态失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取订单状态失败", e);
|
}
|
throw new CommonException("获取订单状态异常");
|
}
|
}
|
|
@Override
|
public boolean filterCustomerByHengYidai(Customer customer, CapitalInfo capitalInfo, String logNumber) {
|
boolean filter = true;
|
if (YiXinHomeRelationEnum.BROTHERS.getCode().equals(customer.getRelationship())) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "进件申请不满足条件,第一联系人为兄弟姐妹");
|
filter = false;
|
}
|
//过滤COS任性贷消费,LEA租赁,LRT土地租金,REN租房,OTH其他消费 等借款用途
|
if (UseOfLoanEnum.Loan_21.getCode().equals(customer.getUseOfLoan()) || UseOfLoanEnum.Loan_22.getCode().equals(customer.getUseOfLoan())
|
|| UseOfLoanEnum.Loan_20.getCode().equals(customer.getUseOfLoan()) || UseOfLoanEnum.Loan_13.getCode().equals(customer.getUseOfLoan())
|
|| UseOfLoanEnum.Loan_12.getCode().equals(customer.getUseOfLoan())) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "进件申请不满足条件,借款用途不在可选范围内" + customer.getUseOfLoan());
|
filter = false;
|
}
|
return filter;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ResultJson<CapitalGetSignUrlVo> capitalGetSignUrl(CapitalGetSignUrlDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "获取绑卡/签约链接开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
HyGetSignUrlDto hyGetSignUrlDto = new HyGetSignUrlDto(capitalResult.getCreditNo(), paramDto.getReturnUrl());
|
HyResponse<HyGetSignUrlResponse> response = hyUtil.getSignUrl(hyGetSignUrlDto, log, logNumber);
|
if (checkHydResponseData(response)) {
|
CapitalGetSignUrlVo signUrlVo = new CapitalGetSignUrlVo();
|
signUrlVo.setUrl(response.getData().getUrl());
|
return ResultJson.ok(signUrlVo);
|
}
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取绑卡/签约链接失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取绑卡/签约链接失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "获取绑卡/签约链接失败");
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ResultJson<CapitalLoanTrialVo> capitalLoanTrial(CapitalBaseParamDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "借款试算开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
HyResponse<HyGetTrialInfoResponse> response = hyUtil.getTrialInfo(capitalResult.getCreditNo(), log, logNumber);
|
if (checkHydResponseData(response)) {
|
CapitalLoanTrialVo capitalLoanTrialVo = HyGetTrialInfoResponse.parseVo(response.getData());
|
double value = Double.parseDouble(capitalResult.getTotalCredit());
|
capitalLoanTrialVo.setActualAmount((long) (int) value * 100);
|
capitalLoanTrialVo.setPeriodNum(Integer.valueOf(capitalResult.getPeriods()));
|
return ResultJson.ok(capitalLoanTrialVo);
|
}
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "借款试算失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "借款试算失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "借款试算失败");
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ResultJson<CapitalConfirmLoanVo> capitalConfirmLoan(CapitalConfirmLoanDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "确认借款开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
HyConfirmDto hyConfirmDto = new HyConfirmDto(capitalResult.getCreditNo(), paramDto);
|
HyResponse confirm = hyUtil.confirm(hyConfirmDto, log, logNumber);
|
if (checkHydResponse(confirm)) {
|
Date date = new Date();
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getLoanAmount, paramDto.getApplyAmount())
|
.set(CustomerCapitalResult::getLastUpdatedDate, date)
|
.set(CustomerCapitalResult::getLoanApplyDate, date)
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
return ResultJson.ok(new CapitalConfirmLoanVo(true));
|
} else {
|
return ResultJson.ok(new CapitalConfirmLoanVo(false));
|
}
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "确认借款失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "确认借款失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "确认借款失败");
|
}
|
|
@Override
|
public ResultJson<CapitalGetRepayUrlVo> capitalGetRepayUrl(CapitalGetRepayUrlDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "获取还款页面开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
HyGetRepayUrlDto hyGetRepayUrlDto = new HyGetRepayUrlDto(capitalResult.getCreditNo(), paramDto.getReturnUrl());
|
HyResponse<HyGetRepayUrlResponse> response = hyUtil.getRepayUrl(hyGetRepayUrlDto, log, logNumber);
|
if (checkHydResponseData(response)) {
|
CapitalGetRepayUrlVo repayUrlVo = new CapitalGetRepayUrlVo();
|
repayUrlVo.setUrl(response.getData().getUrl());
|
return ResultJson.ok(repayUrlVo);
|
}
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取还款页面失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取还款页面失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "获取还款页面失败");
|
}
|
|
@Override
|
public ResultJson<CapitalRepayPlanVo> capitalRepayPlan(CapitalBaseParamDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "获取还款计划开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
if (HyGetOrderStatusResponse.STATUS_SIGN_SUCCESS.equals(capitalResult.getThirdOrderStatus()) || HyGetOrderStatusResponse.STATUS_LOAN_APPLY_FAIL.equals(capitalResult.getThirdOrderStatus())) {
|
return ResultJson.ok(null);
|
}
|
HyResponse<List<HyGetRepayPlanResponse>> response = hyUtil.getRepayPlan(capitalResult.getCreditNo(), log, logNumber);
|
if (checkHydResponseData(response)) {
|
List<HyGetRepayPlanResponse> data = response.getData();
|
if (data == null || data.isEmpty()) {
|
return ResultJson.ok(null);
|
}
|
CapitalRepayPlanVo repayPlanVo = new CapitalRepayPlanVo();
|
repayPlanVo.setLoanAmount(capitalResult.getLoanAmount());
|
repayPlanVo.setLoanApplyDate(capitalResult.getLoanApplyDate());
|
List<CapitalRepayPlanDetailVo> detailVos = new ArrayList<>();
|
boolean clean = true;
|
Integer status = 0;
|
for (HyGetRepayPlanResponse repayPlan : data) {
|
CapitalRepayPlanDetailVo detailVo = repayPlan.parseVo();
|
if (repayPlanVo.getTotalPeriodNum() == null) {
|
repayPlanVo.setTotalPeriodNum(repayPlan.getTotalPeriodNum());
|
}
|
if (!HyGetRepayPlanResponse.STATUS_REPAID.equals(repayPlan.getStatus())) {
|
clean = false;
|
}
|
if (status == 0 && HyGetRepayPlanResponse.STATUS_OVERDUE.equals(repayPlan.getStatus())) {
|
status = 1;
|
}
|
detailVos.add(detailVo);
|
}
|
if (clean) {
|
status = 2;
|
}
|
repayPlanVo.setStatus(status);
|
repayPlanVo.setRepayDetails(detailVos);
|
return ResultJson.ok(repayPlanVo);
|
}
|
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取还款计划失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取还款计划失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "获取还款计划失败");
|
}
|
|
@Override
|
public ResultJson<List<CapitalContractsVo>> capitalContracts(CapitalContractsDto paramDto, CapitalInfo capitalInfo) {
|
String logNumber = IdUtil.randomUUID();
|
log.info("日志编号:" + logNumber + capitalInfo.getName() + "获取协议链接开始");
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectById(paramDto.getCapitalResultId());
|
if (capitalResult == null) {
|
throw new CommonException("资方对接结果不存在");
|
}
|
try {
|
HyGetContractsDto hyGetContractsDto = new HyGetContractsDto();
|
if (CapitalContractsDto.TYPE_ALL.equals(paramDto.getType())) {
|
hyGetContractsDto.setContractTypeList(Arrays.asList(1, 2, 3, 4));
|
} else {
|
hyGetContractsDto.setContractTypeList(Collections.singletonList(paramDto.getType()));
|
}
|
hyGetContractsDto.setOrderNo(capitalResult.getCreditNo());
|
HyResponse<Map<String, String>> response = hyUtil.getContracts(hyGetContractsDto, log, logNumber);
|
if (checkHydResponseData(response)) {
|
List<CapitalContractsVo> contractsVos = new ArrayList<>();
|
Map<String, String> data = response.getData();
|
for (Map.Entry<String, String> entry : data.entrySet()) {
|
CapitalContractsVo contractsVo = new CapitalContractsVo();
|
contractsVo.setType(Integer.valueOf(entry.getKey()));
|
contractsVo.setUrl(entry.getValue());
|
contractsVos.add(contractsVo);
|
}
|
return ResultJson.ok(contractsVos);
|
}
|
} catch (CommonException e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取协议链接失败" + e.getMessage());
|
} catch (Exception e) {
|
log.error("日志编号:" + logNumber + capitalInfo.getName() + "获取协议链接失败", e);
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "获取协议链接失败");
|
}
|
}
|