Commit dd9003f9 authored by 王向伟's avatar 王向伟

二次风控审核bizType对乐信单独判断

parent 01d221ba
package cn.quantgroup.cashloanflowboss.api.order.service;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogServiceImpl;
import cn.quantgroup.cashloanflowboss.core.annotation.opt.OperationAnno;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress;
import cn.quantgroup.cashloanflowboss.api.channel.entity.ChannelConf;
import cn.quantgroup.cashloanflowboss.api.channel.repository.ChannelConfRepository;
import cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogServiceImpl;
import cn.quantgroup.cashloanflowboss.api.order.entity.OrderApprove;
import cn.quantgroup.cashloanflowboss.api.order.model.*;
import cn.quantgroup.cashloanflowboss.api.order.repository.OrderApproveRepository;
import cn.quantgroup.cashloanflowboss.api.order.util.OrderUtil;
import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.opt.OperationAnno;
import cn.quantgroup.cashloanflowboss.core.base.ServiceResult;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRecordVoModel;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderMappingRepository;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService;
import cn.quantgroup.cashloanflowboss.spi.clotho.service.ClothoCenterService;
......@@ -38,19 +38,6 @@ import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import cn.quantgroup.user.retbean.XUser;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
import javax.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
......@@ -63,6 +50,11 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.criteria.Predicate;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ConcurrentMap;
/**
* function:
* date: 2019/8/8
......@@ -72,7 +64,7 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
public class OrderServiceImpl implements OrderService{
public class OrderServiceImpl implements OrderService {
@Autowired
......@@ -96,7 +88,6 @@ public class OrderServiceImpl implements OrderService{
private JolyneService jolyneService;
@Autowired
private ClfOrderMappingRepository clfOrderMappingRepository;
......@@ -183,7 +174,6 @@ public class OrderServiceImpl implements OrderService{
}
/**
*
* @param approveVo
* @return Tuple<Boolean 审批结果 true 审批完成 false 审批操作失败, String msg 信息>
*/
......@@ -224,18 +214,23 @@ public class OrderServiceImpl implements OrderService{
return new Tuple(false, "审批失败,clfChannelConfiguration渠道配置为空");
}
QuotaProduct quotaProduct = null;
if(!orderMapping.getRegisteredFrom().equals(159886L)){
Map<String, Object> data = null;
if (orderMapping.getRegisteredFrom().equals(159886L)) {
data = getApproveObjectMap(approveVo, orderMapping, xUser, fundFormat, 9);
}else {
quotaProduct = xyqbCenterService.getXyqbProduct(clfChannelConfiguration.getXyqbProductId());
if (quotaProduct == null) {
return new Tuple(false, "审批失败,xyqb.quota_product配置为空(".concat(clfChannelConfiguration.getXyqbProductId()).concat(")"));
}
data = getApproveObjectMap(approveVo, orderMapping, xUser, fundFormat, quotaProduct.getProductType());
}
Map<String, Object> data = getApproveObjectMap(approveVo, orderMapping, xUser, fundFormat, quotaProduct);
// 发起审批
log.info("[approveOpt] 向clotho发起审批,data={}", JSONTools.serialize(data));
String approveStringResult = clothoCenterService.approve(data);
log.info("[approveOpt] 返回结果 result={}",approveStringResult);
log.info("[approveOpt] 返回结果 result={}", approveStringResult);
Boolean corpPolicyValidate = false;
try {
corpPolicyValidate = xyqbCenterService.validateCorpPolicy(Long.valueOf(fundId), new Date());
......@@ -260,6 +255,7 @@ public class OrderServiceImpl implements OrderService{
/**
* 二次风控
*
* @param channelOrderNumber
* @return
*/
......@@ -278,7 +274,7 @@ public class OrderServiceImpl implements OrderService{
}
// 更新合同状态
Contract conscont= xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
Contract conscont = xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
if (conscont != null) {
if (conscont.getGenerateStatus() != CONSCONT_STATUS) {
log.info("secondAudit,合同状态不对,channelOrderNumber=".concat(channelOrderNumber));
......@@ -307,10 +303,10 @@ public class OrderServiceImpl implements OrderService{
return new Tuple(false, "二次风控失败,clfChannelConfiguration渠道配置为空");
}
String xyqbProductId = clfChannelConfiguration.getXyqbProductId();
if(Objects.isNull(xyqbProductId)){//为null 是多订单的情况 bizType直接为9
if (clfChannelConfiguration.getRegisteredFrom().equals(159886L)) {//乐信渠道 bizType直接为9
result = clothoCenterService.orderAuditNotify(xUser.getUuid(), orderMapping.getLoanId(), true, 9);
}else {
} else {
QuotaProduct quotaProduct = xyqbCenterService.getXyqbProduct(clfChannelConfiguration.getXyqbProductId());
if (quotaProduct == null) {
......@@ -364,7 +360,7 @@ public class OrderServiceImpl implements OrderService{
// 更新合同状态
Contract conscont= xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
Contract conscont = xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
if (conscont == null) {
// 合同为空 log表记录问题,UI用户查询
optDetail = optDetail.concat("合同未生成,请注意,需要不用身份证才能自动生成合同,");
......@@ -385,7 +381,7 @@ public class OrderServiceImpl implements OrderService{
log.error("[order_lending][queryLendingRecordCount]查询待打款数量 失败,channelOrderNumber={}, data={}", lendingFormModel.getChannelOrderNumber(), data);
}
log.info("[order_lending][queryLendingRecordCount]查询待打款数量,channelOrderNumber={}, data={}", lendingFormModel.getChannelOrderNumber(), data);
if (data !=null && data.size() > 0) {
if (data != null && data.size() > 0) {
if (Objects.nonNull(data.get(Constants.TOTAL_AMOUNT)) && Objects.nonNull(data.get(Constants.TOTAL_COUNT))) {
result = this.clothoCenterService.lending(orderApprove.getFundId(), new BigDecimal(String.valueOf(data.get(Constants.TOTAL_AMOUNT))), Integer.valueOf(String.valueOf(data.get(Constants.TOTAL_COUNT))));
log.info("[order_lending]直投打款,channelOrderNumber={}, result={}", lendingFormModel.getChannelOrderNumber(), result);
......@@ -442,46 +438,46 @@ public class OrderServiceImpl implements OrderService{
*/
@OperationAnno(channelNo = "#this[0]", opt = OptEnumName.PRE_CANCEL, succSPEL = "#this.key", optDetailSPEL = "#this.value")
@Override
public Tuple<Boolean,String> cancelPreLoan(String channelOrderNumber) {
public Tuple<Boolean, String> cancelPreLoan(String channelOrderNumber) {
boolean cancel = true;
String token = null;
String result = "";
ClfOrderMapping orderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (orderMapping == null) {
log.info("cancelPreLoan,贷前关单失败,无订单 channelOrderNumber={}", channelOrderNumber);
return new Tuple<>(false,"贷前关单失败,无订单");
return new Tuple<>(false, "贷前关单失败,无订单");
}
try{
try {
Long id = cancelPreLoanRepository.cancelPreLoan(orderMapping.getApplyNo());
String response = opCenter.getToken(auth);
JSONObject responseJ = JSONObject.parseObject(response);
if(responseJ != null && responseJ.containsKey(Constants.DATA)){
if (responseJ != null && responseJ.containsKey(Constants.DATA)) {
JSONObject data = (JSONObject) responseJ.get(Constants.DATA);
if(data != null && data.containsKey(Constants.TOKEN)){
if (data != null && data.containsKey(Constants.TOKEN)) {
token = String.valueOf(data.get(Constants.TOKEN));
}
}
HashMap<Object, Object> data = Maps.newHashMap();
Long loanId = orderMapping.getLoanId();
if(Objects.nonNull(loanId)){
data.put("loanIds",loanId);
result = clothoCenterService.cancelPreLoanHasLoanId(data,token);
if (Objects.nonNull(loanId)) {
data.put("loanIds", loanId);
result = clothoCenterService.cancelPreLoanHasLoanId(data, token);
}else{
data.put("data",id);
data.put("remark","贷前关单");
result = clothoCenterService.cancelPreLoan(data,token);
} else {
data.put("data", id);
data.put("remark", "贷前关单");
result = clothoCenterService.cancelPreLoan(data, token);
}
JSONObject resp = JSONObject.parseObject(result);
if(Objects.isNull(resp) || Objects.isNull(resp.get(Constants.SUCCESS)) || !Constants.TRUE.equals(String.valueOf(resp.get(Constants.SUCCESS)))){
if (Objects.isNull(resp) || Objects.isNull(resp.get(Constants.SUCCESS)) || !Constants.TRUE.equals(String.valueOf(resp.get(Constants.SUCCESS)))) {
cancel = false;
}
}catch (Exception e){
} catch (Exception e) {
cancel = false;
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return new Tuple<>(cancel,cancel?"贷前关单成功":"贷前关单失败");
return new Tuple<>(cancel, cancel ? "贷前关单成功" : "贷前关单失败");
}
/**
......@@ -492,37 +488,39 @@ public class OrderServiceImpl implements OrderService{
*/
@OperationAnno(channelNo = "#this[0]", opt = OptEnumName.LOAN_CANCEL, succSPEL = "#this.key", optDetailSPEL = "#this.value")
@Override
public Tuple<Boolean,String> cancelAfterLoan(String channelOrderNumber) {
public Tuple<Boolean, String> cancelAfterLoan(String channelOrderNumber) {
return huijinsuoCloseOrder72(channelOrderNumber);
}
/**
* 惠金所 72 小时提现超时
*
* @param channelOrderNumber
* @return
*/
private Tuple<Boolean,String> huijinsuoCloseOrder72(String channelOrderNumber) {
private Tuple<Boolean, String> huijinsuoCloseOrder72(String channelOrderNumber) {
ClfOrderMapping orderMapping = this.clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (orderMapping == null) {
log.info("cancelAfterLoan,贷后关单失败,无订单 ={}", channelOrderNumber);
return new Tuple<>(false,"贷后关单失败,无订单");
return new Tuple<>(false, "贷后关单失败,无订单");
}
if (orderMapping.getLoanId() == null) {
log.info("cancelAfterLoan,贷后关单失败,loanId为空,channelOrderNumber={}", channelOrderNumber);
return new Tuple<>(false,"贷后关单失败,loanId为空");
return new Tuple<>(false, "贷后关单失败,loanId为空");
}
ConcurrentMap<Object, Object> data = Maps.newConcurrentMap();
data.put("loanId",orderMapping.getLoanId());
data.put("userId",orderMapping.getQgUserId());
data.put("loanId", orderMapping.getLoanId());
data.put("userId", orderMapping.getQgUserId());
data.put("flowNo", UUID.randomUUID());
String id = clothoCenterService.cancelAfterLoan(data);
return new Tuple<>(true,"贷后关单成功");
return new Tuple<>(true, "贷后关单成功");
}
/**
* 查询订单历史推送记录
*
* @param channelOrderNumber
* @return
*/
......@@ -587,6 +585,7 @@ public class OrderServiceImpl implements OrderService{
/**
* 查询还款计划
*
* @param channelOrderNumber
* @param loanId
* @return
......@@ -624,7 +623,7 @@ public class OrderServiceImpl implements OrderService{
@OperationAnno(channelNo = "#this[0]", opt = OptEnumName.ALL_REPAID, succSPEL = "#this.key", optDetailSPEL = "#this.value")
@Override
public Tuple<Boolean,String> settle(String channelOrderNumber) {
public Tuple<Boolean, String> settle(String channelOrderNumber) {
ClfOrderMapping orderMapping = clfCenterService.findOrderMappingByChannelOrderNo(channelOrderNumber);
if (orderMapping != null && StringUtils.isNotEmpty(orderMapping.getApplyNo())) {
......@@ -646,6 +645,7 @@ public class OrderServiceImpl implements OrderService{
/**
* 查询订单状态
*
* @param currentStatus
* @param orderMapping
* @return
......@@ -659,25 +659,25 @@ public class OrderServiceImpl implements OrderService{
buttonBeforeCancel.setAction(OrderVo.OptButtonAction.cancel.name());
buttonBeforeCancel.setName(OrderVo.OptButtonAction.cancel.getDesc());
switch (currentStatus.getStatus()) {
case "CREDIT_SUCC" :
case "CREDIT_SUCC":
return getCreditSuccessTuple(tuple, buttonList);
case "APPROVE_ING" :
case "APPROVE_ING":
return getApprovingTuple(orderMapping, tuple, buttonList);
case "REJECT" :
case "REJECT":
tuple.setKey("审批拒绝");
tuple.setValue(buttonList);
return tuple;
case "FUAD_ASSIFN_SUCC" :
case "FUAD_ASSIFN_SUCC":
tuple.setKey("审批通过,待提现");
buttonList.add(buttonBeforeCancel);
tuple.setValue(buttonList);
return tuple;
case "WITHDRAW_APPROVING" :
case "WITHDRAW_APPROVING":
return getWithdrawApprovingTuple(tuple, buttonList, buttonBeforeCancel);
case "WITHDRAW" :
case "PAY_ING" :
case "WITHDRAW":
case "PAY_ING":
return getWithdrawTuple(orderMapping, tuple, buttonList, buttonBeforeCancel);
case "FUND_WAITING_WITHDRAW" :
case "FUND_WAITING_WITHDRAW":
tuple.setKey("放款到存管账户,待存管提现");
OrderVo.OptButton cancelAfterButton0 = new OrderVo.OptButton();
cancelAfterButton0.setAction(OrderVo.OptButtonAction.cancel_after.name());
......@@ -685,26 +685,26 @@ public class OrderServiceImpl implements OrderService{
buttonList.add(cancelAfterButton0);
tuple.setValue(buttonList);
return tuple;
case "FUND_SUCC" :
case "FUND_SUCC":
tuple.setKey("放款成功");
return tuple;
case "FUND_WITHDRAW_SUCC" :
case "FUND_WITHDRAW_SUCC":
tuple.setKey("存管提现成功");
tuple.setValue(buttonList);
return tuple;
case "FUND_FAIL" :
case "FUND_FAIL":
tuple.setKey("放款失败");
tuple.setValue(buttonList);
return tuple;
case "ALL_REPAID" :
case "ALL_REPAID":
tuple.setKey("已结清");
tuple.setValue(buttonList);
return tuple;
case "CANCEL_LOAN" :
case "CANCEL_LOAN":
tuple.setKey("已关单");
tuple.setValue(buttonList);
return tuple;
case "CANCEL_AFTER_LOAN" :
case "CANCEL_AFTER_LOAN":
tuple.setKey("存管提现超时或贷后关单");
tuple.setValue(buttonList);
return tuple;
......@@ -800,20 +800,16 @@ public class OrderServiceImpl implements OrderService{
return calendar;
}
private Map<String, Object> getApproveObjectMap(ApproveVo approveVo, ClfOrderMapping orderMapping, XUser xUser, String fundFormat, QuotaProduct quotaProduct) {
private Map<String, Object> getApproveObjectMap(ApproveVo approveVo, ClfOrderMapping orderMapping, XUser xUser, String fundFormat, Integer bizType) {
Map<String, Object> data = new HashMap<>(16);
data.put("code", 0);
data.put("msg", "success");
data.put("bizChannel", orderMapping.getRegisteredFrom());
data.put("uuid", xUser.getUuid());
data.put("bizNo", orderMapping.getApplyNo());
if(Objects.isNull(quotaProduct)){
data.put("bizType", "9");
}else {
data.put("bizType", quotaProduct.getProductType());
data.put("bizType", bizType);
}
data.put("auditResult", approveVo.getIsPass());
data.put("amount", approveVo.getAmount());
data.put("deadLine", getCalendar().getTime().getTime());
......
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