package com.nova.sankuai.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.nova.sankuai.domain.api.doudouqian.*;
|
import com.nova.sankuai.domain.dto.DdqBindCardDto;
|
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.capitalInfo.CapitalApprovalResultEnum;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalInfoTypeCodeEnum;
|
import com.nova.sankuai.domain.vo.DdqBindCardVo;
|
import com.nova.sankuai.domain.vo.DdqPopupVo;
|
import com.nova.sankuai.domain.vo.DdqSupportBankVo;
|
import com.nova.sankuai.infra.config.CommonException;
|
import com.nova.sankuai.infra.mapper.CapitalInfoMapper;
|
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.MessageSendUtil;
|
import com.nova.sankuai.service.ICapitalResultCommonService;
|
import com.nova.sankuai.service.IDouDouQianService;
|
import lombok.AllArgsConstructor;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* @author weikangdi
|
* @create 2022/7/28
|
*/
|
@Service
|
@AllArgsConstructor
|
public class DouDouQianServiceImpl implements IDouDouQianService {
|
|
private final DdqUtil ddqUtil;
|
|
private final CustomerMapper customerMapper;
|
|
private final ICapitalResultCommonService capitalResultCommonService;
|
|
private final CustomerCapitalResultMapper capitalResultMapper;
|
|
private final CustomerUserMapper customerUserMapper;
|
|
private final CapitalInfoMapper capitalInfoMapper;
|
|
private final MessageSendUtil messageSendUtil;
|
|
private static final Logger log = LoggerFactory.getLogger("capitalLogger");
|
|
@Override
|
public List<DdqSupportBankVo> getSupportBankList(HttpServletRequest request) {
|
List<DdqSupportBankVo> result = new ArrayList<>();
|
CustomerUser customerUser = capitalResultCommonService.checkUser(request);
|
BankListVo bankList = ddqUtil.getBankList(customerUser.getPhone());
|
if (bankList != null) {
|
for (BankListVo.BackVo bank : bankList.getBanks()) {
|
DdqSupportBankVo supportBankVo = new DdqSupportBankVo();
|
supportBankVo.setBankCode(bank.getBankAbbr());
|
supportBankVo.setBankName(bank.getBankName());
|
result.add(supportBankVo);
|
}
|
return result;
|
}
|
throw new CommonException("获取支持银行卡列表失败");
|
}
|
|
@Override
|
public DdqBindCardVo bindCardByDDQ(DdqBindCardDto bindCardDto, HttpServletRequest request) {
|
Customer customer = customerMapper.getLatestCustomerRecord(bindCardDto.getPhone());
|
if (customer == null) {
|
throw new CommonException("申请记录不存在");
|
}
|
BankCardCheckVo checkVo = ddqUtil.bankCardCheck(bindCardDto);
|
if (checkVo != null) {
|
customerMapper.update(null, Wrappers.<Customer>lambdaUpdate()
|
.set(Customer::getCardNo, bindCardDto.getCardNo())
|
.set(Customer::getBankName, bindCardDto.getBankName())
|
.set(Customer::getBankCode, bindCardDto.getBankCode())
|
.set(Customer::getBankPhoneNo, bindCardDto.getBankPhoneNo())
|
.set(Customer::getBankCardName, bindCardDto.getBankCardName())
|
.eq(Customer::getId, customer.getId()));
|
DdqBindCardVo bindCardVo = new DdqBindCardVo();
|
if (BankCardCheckVo.NEED_VERIFY_CODE.equals(checkVo.getNeedVerify())) {
|
bindCardVo.setNeedVerify(true);
|
return bindCardVo;
|
} else if (BankCardCheckVo.NOT_NEED_VERIFY_CODE.equals(checkVo.getNeedVerify())) {
|
CustomerUser customerUser = capitalResultCommonService.checkUser(request);
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getHasBindCard, 1)
|
.set(CustomerCapitalResult::getBankName, bindCardDto.getBankName())
|
.set(CustomerCapitalResult::getBankCardNo, bindCardDto.getCardNo())
|
.set(CustomerCapitalResult::getBankCode, bindCardDto.getBankCode())
|
.set(CustomerCapitalResult::getBankPhoneNo, bindCardDto.getBankPhoneNo())
|
.set(CustomerCapitalResult::getBankCardName, bindCardDto.getBankCardName())
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.DOU_DOU_QIAN.getCode()));
|
bindCardVo.setNeedVerify(false);
|
return bindCardVo;
|
}
|
}
|
throw new CommonException("银行卡绑定异常");
|
}
|
|
@Override
|
public boolean bindCardConfirmByDDQ(DdqBindCardDto bindCardDto, HttpServletRequest request) {
|
Customer customer = customerMapper.getLatestCustomerRecord(bindCardDto.getPhone());
|
if (customer == null) {
|
throw new CommonException("申请记录不存在");
|
}
|
BindCardVo bindCardVo = ddqUtil.bindCard(bindCardDto);
|
if (bindCardVo != null) {
|
CustomerUser customerUser = capitalResultCommonService.checkUser(request);
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getHasBindCard, 1)
|
.set(CustomerCapitalResult::getBankName, bindCardDto.getBankName())
|
.set(CustomerCapitalResult::getBankCardNo, bindCardDto.getCardNo())
|
.set(CustomerCapitalResult::getBankCode, bindCardDto.getBankCode())
|
.set(CustomerCapitalResult::getBankPhoneNo, bindCardDto.getBankPhoneNo())
|
.set(CustomerCapitalResult::getBankCardName, bindCardDto.getBankCardName())
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.DOU_DOU_QIAN.getCode()));
|
return true;
|
}
|
return false;
|
}
|
|
@Override
|
public boolean bindCard(DdqBindCardDto bindCardDto, HttpServletRequest request) {
|
Customer customer = customerMapper.getLatestCustomerRecord(bindCardDto.getPhone());
|
if (customer == null) {
|
throw new CommonException("申请记录不存在");
|
}
|
CustomerUser customerUser = capitalResultCommonService.checkUser(request);
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getHasBindCard, 1)
|
.set(CustomerCapitalResult::getBankName, bindCardDto.getBankName())
|
.set(CustomerCapitalResult::getBankCardNo, bindCardDto.getCardNo())
|
.set(CustomerCapitalResult::getBankCode, bindCardDto.getBankCode())
|
.set(CustomerCapitalResult::getBankPhoneNo, bindCardDto.getBankPhoneNo())
|
.set(CustomerCapitalResult::getBankCardName, bindCardDto.getBankCardName())
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.DOU_DOU_QIAN.getCode()));
|
return true;
|
}
|
|
@Override
|
public String pushAuditResult(String param, String logNumber) {
|
JSONObject response = new JSONObject();
|
try {
|
String request = ddqUtil.parseRequest(param);
|
log.info("日志编号:" + logNumber + "豆豆钱授信结果回调解密参数 -> {}", request);
|
AuditResultVo auditResultVo = JSON.parseObject(request, AuditResultVo.class);
|
if (auditResultVo != null) {
|
AuditResultDetailVo auditResultDetailVo = JSON.parseObject(auditResultVo.getData(), AuditResultDetailVo.class);
|
CustomerUser customerUser = customerUserMapper.selectOne(Wrappers.<CustomerUser>lambdaQuery()
|
.eq(CustomerUser::getPhone, auditResultVo.getMobile()));
|
if (customerUser == null) {
|
throw new CommonException("用户不存在");
|
}
|
Customer customer = customerMapper.getLatestCustomerRecord(auditResultVo.getMobile());
|
if (customer == null) {
|
throw new CommonException("申请记录不存在");
|
}
|
CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.DOU_DOU_QIAN.getCode()));
|
if (capitalResult == null) {
|
throw new CommonException("授信记录不存在");
|
}
|
CapitalInfo capitalInfo = capitalInfoMapper.selectById(capitalResult.getCapitalInfoId());
|
if (capitalInfo == null) {
|
throw new CommonException("对接产品不存在");
|
}
|
if (CapitalApprovalResultEnum.APPROVAL_WAIT.getCode().equals(capitalResult.getApprovalResult())) {
|
if (AuditResultDetailVo.STATUS_SUCCESS.equals(auditResultDetailVo.getStatus())) {
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getTotalCredit, auditResultDetailVo.getApprovalAmount())
|
.set(CustomerCapitalResult::getApprovalResult, CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode())
|
.set(CustomerCapitalResult::getCreditApplyTime, auditResultDetailVo.getProcessTime())
|
.set(CustomerCapitalResult::getLastUpdatedDate, new Date())
|
.set(CustomerCapitalResult::getPopupDdq, 0)
|
.set(CustomerCapitalResult::getPeriods, auditResultDetailVo.getApprovalTerm())
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
//授信通过后给用户发送短信
|
try {
|
String content = String.format("【%s】恭喜您,您的授信已通过,额度%s元。请尽快登录APP使用额度,避免额度过期",
|
capitalInfo.getName(),
|
auditResultDetailVo.getApprovalAmount());
|
messageSendUtil.sendMessage(auditResultVo.getMobile(), content);
|
log.info("日志编号:" + logNumber + "手机号" + auditResultVo.getMobile() + "豆豆钱授信通知短信已发送");
|
} catch (Exception e) {
|
log.error("豆豆钱授信通过后给用户发送短信异常", e);
|
}
|
} else if (AuditResultDetailVo.STATUS_FAIL.equals(auditResultDetailVo.getStatus())) {
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getApprovalResult, CapitalApprovalResultEnum.APPROVAL_REFUSE.getCode())
|
.set(CustomerCapitalResult::getCreditApplyTime, auditResultDetailVo.getProcessTime())
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
}
|
}
|
response.put("status", DdqResponse.STATUS_SUCCESS);
|
return response.toJSONString();
|
}
|
} catch (CommonException e) {
|
log.error("豆豆钱授信结果回调失败:" + e.getCode());
|
response.put("msg", e.getCode());
|
} catch (Exception e) {
|
log.error("豆豆钱授信结果回调失败:", e);
|
response.put("msg", "解密失败");
|
}
|
response.put("status", DdqResponse.STATUS_REQUEST_EXCEPTION);
|
return response.toJSONString();
|
}
|
|
@Override
|
public DdqPopupVo getPopupByDdq(HttpServletRequest request) {
|
DdqPopupVo ddqPopupVo = new DdqPopupVo();
|
ddqPopupVo.setIsPopUp(0);
|
CustomerUser customerUser = capitalResultCommonService.checkUser(request);
|
if (customerUser == null) {
|
throw new CommonException("用户不存在");
|
}
|
Customer customer = customerMapper.getLatestCustomerRecord(customerUser.getPhone());
|
if (customer != null) {
|
/*CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.eq(CustomerCapitalResult::getApprovalResult, CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode())
|
.eq(CustomerCapitalResult::getPopupDdq, 0)
|
.eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.DOU_DOU_QIAN.getCode()));*/
|
CustomerCapitalResult capitalResult = null;
|
List<Integer> popupDdq = new ArrayList<>();
|
popupDdq.add(0);
|
popupDdq.add(1);
|
List<CustomerCapitalResult> list = capitalResultMapper.selectList(Wrappers.<CustomerCapitalResult>lambdaQuery()
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
|
.in(CustomerCapitalResult::getPopupDdq, popupDdq));
|
// 根据获取到的capitalId来排序
|
if (list != null) {
|
// 若是只有一个,则不进行排序等操作
|
if (list.size() == 1) {
|
capitalResult = list.get(0);
|
// 判断popupDdq是否为1,为1的话,遇把capitalResult赋值为空
|
if (1 == capitalResult.getPopupDdq()) {
|
capitalResult = null;
|
}
|
} else {
|
List<Long> crList = new ArrayList();
|
// 判断是否已弹出两个
|
int limitCheck = 0;
|
for (CustomerCapitalResult cr : list) {
|
Integer pd = cr.getPopupDdq();
|
if (Objects.isNull(pd)) {
|
continue;
|
}
|
if (pd == 1) {
|
limitCheck++;
|
}
|
}
|
|
if (limitCheck >= 2) {
|
return ddqPopupVo;
|
}
|
|
for (CustomerCapitalResult cr : list) {
|
Long capitalInfoId = cr.getCapitalInfoId();
|
if (!Objects.isNull(capitalInfoId) && 0 == cr.getPopupDdq().intValue()) {
|
crList.add(capitalInfoId);
|
}
|
}
|
if (crList != null && crList.size() > 0) {
|
List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(Wrappers.<CapitalInfo>lambdaQuery()
|
.in(CapitalInfo::getId, crList)
|
.orderByAsc(CapitalInfo::getSeq)
|
);
|
if (capitalInfos != null && capitalInfos.size() > 0) {
|
List<CustomerCapitalResult> result = new ArrayList();
|
for (CapitalInfo ci : capitalInfos) {
|
if (result != null && result.size() >= 2) {
|
break;
|
}
|
for (CustomerCapitalResult ccr : list) {
|
Long infoId = ccr.getCapitalInfoId();
|
if (Objects.isNull(infoId)) {
|
continue;
|
}
|
if (ci.getId().intValue() == infoId.intValue()) {
|
result.add(ccr);
|
break;
|
}
|
}
|
}
|
if (result != null && result.size() > 0) {
|
capitalResult = result.get(0);
|
}
|
}
|
}
|
}
|
|
}
|
|
if (capitalResult != null) {
|
ddqPopupVo.setIsPopUp(1);
|
ddqPopupVo.setCapitalResultId(capitalResult.getId());
|
ddqPopupVo.setId(capitalResult.getCapitalInfoId());
|
ddqPopupVo.setUrl(capitalResult.getNotificationUrl());
|
capitalResultMapper.update(null, Wrappers.<CustomerCapitalResult>lambdaUpdate()
|
.set(CustomerCapitalResult::getPopupDdq, 1)
|
.eq(CustomerCapitalResult::getId, capitalResult.getId()));
|
}
|
}
|
return ddqPopupVo;
|
}
|
}
|