Commit 1a1d5ffa authored by suntao's avatar suntao

二次风控回调

parent 27fe8341
package cn.quantgroup.cashloanflowboss.api.order.service;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogService;
import cn.quantgroup.cashloanflowboss.api.user.model.UserDetailInfo;
import cn.quantgroup.cashloanflowboss.api.user.service.UserService;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRouter;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.api.channel.entity.ChannelConf;
import cn.quantgroup.cashloanflowboss.api.channel.repository.ChannelConfRepository;
......@@ -25,11 +21,10 @@ import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderMappingReposito
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService;
import cn.quantgroup.cashloanflowboss.spi.clotho.service.ClothoCenterService;
import cn.quantgroup.cashloanflowboss.spi.jolyne.JolyneCenter;
import cn.quantgroup.cashloanflowboss.spi.user.service.UserSysService;
import cn.quantgroup.cashloanflowboss.spi.user.service.XyqbUserService;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.Contract;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.FundLending;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.LoanApplicationHistory;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.WaitingFundingCorpOperatePeople;
import cn.quantgroup.cashloanflowboss.spi.xyqb.service.XYQBCenterService;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import cn.quantgroup.user.retbean.XUser;
......@@ -336,8 +331,17 @@ public class OrderService {
// 更新合同状态
Contract conscont= xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
if (conscont != null) {
conscont.setGenerateStatus(2);
xyqbCenterService.saveContract(conscont);
if (conscont.getGenerateStatus() != 2) {
log.info("secondAudit,合同为空,channelOrderNumber=".concat(channelOrderNumber));
optHistoryLog.setOptName("二次审批操作");
optHistoryLog.setOptLogDetail("合同未生成,请更换新的身份证尝试");
optHistoryLog.setOptResult(false);
optHistoryLog.setCreateTime(new Date());
optHistoryLogService.save(optHistoryLog);
conscont.setGenerateStatus(2);
xyqbCenterService.saveContract(conscont);
}
} else {
// 合同为空 log表记录问题,UI用户查询
log.info("secondAudit,合同为空,channelOrderNumber=".concat(channelOrderNumber));
......@@ -388,12 +392,12 @@ public class OrderService {
}
// 更新待放款时间(5分钟之前)
FundLending fundLending = xyqbCenterService.findFundLendingByLoanId(orderMapping.getLoanId());
if (fundLending != null) {
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.plusMinutes(-5L);
fundLending.setCreateTime(new Date(localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
xyqbCenterService.saveFundLending(fundLending);
WaitingFundingCorpOperatePeople waitingFundingCorpOperatePeopledb = xyqbCenterService.findWaitingFundingCorpOperatePeopleByLoanId(orderMapping.getLoanId());
if (waitingFundingCorpOperatePeopledb != null) {
LocalDateTime localDateTime = waitingFundingCorpOperatePeopledb.getCreatedAt().toLocalDateTime();
LocalDateTime createdAt = localDateTime.plusMinutes(-6L);
waitingFundingCorpOperatePeopledb.setCreatedAt(new Timestamp(createdAt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
xyqbCenterService.saveWaitingFundingCorpOperatePeople(waitingFundingCorpOperatePeopledb);
}
optHistoryLog.setOptLogDetail("二次风控操作成功");
......@@ -436,7 +440,7 @@ public class OrderService {
Contract conscont= xyqbCenterService.findContractByUserId(orderMapping.getQgUserId());
if (conscont == null) {
// 合同为空 log表记录问题,UI用户查询
optDetail = optDetail.concat("合同未生成,请注意,需要不用身份证才能自动生成合同");
optDetail = optDetail.concat("合同未生成,请注意,需要不用身份证才能自动生成合同,");
}
......@@ -447,7 +451,7 @@ public class OrderService {
} else {
// p2p
Map data = this.xyqbCenterService.queryLendingRecordCount(orderApprove.getFundId(), 0);
Map data = this.xyqbCenterService.queryLendingRecordCount(Long.valueOf(orderApprove.getFundId()));
log.info("[order_lending][queryLendingRecordCount]查询待打款数量,channelOrderNumber={}, data={}", lendingFormModel.getChannelOrderNumber(), data);
if (data.size() > 0) {
if (Objects.nonNull(data.get("totalAmount")) && Objects.nonNull(data.get("totalCount"))) {
......@@ -458,10 +462,10 @@ public class OrderService {
}
if (result) {
optDetail = optDetail.concat(",放款操作成功");
optDetail = optDetail.concat("放款操作成功");
optHistoryLog.setOptResult(true);
} else {
optDetail = optDetail.concat(",放款操作失败");
optDetail = optDetail.concat("放款操作失败");
optHistoryLog.setOptResult(false);
}
log.info("[order_lending]放款操作 最后结果,channelOrderNumber={}, result={}", lendingFormModel.getChannelOrderNumber(), result);
......@@ -738,11 +742,19 @@ public class OrderService {
buttonList.add(buttonBeforeCancel);
tuple.setValue(buttonList);
return tuple;
case "FUND_WAITING_WITHDRAW" :
tuple.setKey("放款到存管账户,待二次提现");
OrderVo.OptButton cancelAfterButton0 = new OrderVo.OptButton();
cancelAfterButton0.setAction(OrderVo.OptButtonAction.cancel_after.name());
cancelAfterButton0.setName(OrderVo.OptButtonAction.cancel_after.getDesc());
buttonList.add(cancelAfterButton0);
tuple.setValue(buttonList);
return tuple;
case "FUND_SUCC" :
OrderApprove orderApprove2 = orderApproveRepository.findByCreditNumber(orderMapping.getApplyNo());
if (orderApprove2 != null && orderApprove2.getFundType() != 0) {
// 是存管
tuple.setKey("放款到存管,待提现");
tuple.setKey("放款到存管,待二次提现");
OrderVo.OptButton cancelAfterButton = new OrderVo.OptButton();
cancelAfterButton.setAction(OrderVo.OptButtonAction.cancel_after.name());
cancelAfterButton.setName(OrderVo.OptButtonAction.cancel_after.getDesc());
......
package cn.quantgroup.cashloanflowboss.spi.xyqb.entity;
import lombok.Data;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* Created by WeiWei on 2019/8/12.
*/
@Data
@Entity
@Table(name = "waiting_funding_corp_operate_people")
public class FundLending {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
/**
* 借款订单号
*/
@Column(name = "loan_application_history_id")
private Long loanId;
/**
* 放款金额
*/
@Column(name = "fund_amount")
private BigDecimal amount;
/**
* 资方ID
*/
@Column(name = "funding_corp_id")
private Integer fundId;
/**
* 进度
*/
@Column(name = "funding_corp_progress")
private Integer progress;
/**
* 创建时间
*/
@Column(name = "created_at")
private Date createTime;
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.entity;
import cn.quantgroup.cashloanflowboss.spi.xyqb.model.FundingCorpProgress;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
* Created by Miraculous on 16/4/11.
*/
@Entity
@Getter
@Setter
@ToString
@Table(name = "waiting_funding_corp_operate_people")
public class WaitingFundingCorpOperatePeople implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column (name = "loan_application_history_id")
private Long loanApplicationHistoryId;
@Column(name = "channel_id")
private Long channelId;
@Column(name = "fund_amount")
private BigDecimal fundAmount;
@Column(name = "funding_corp_progress")
private FundingCorpProgress fundingCorpProgress = FundingCorpProgress.WAITING_FUNDING_CORP_REVIEW;
@Column(name = "is_enable")
private Boolean isEnable;
@Column(name = "funding_corp_id")
private Long fundingCorpId;
@Column(name = "corp_loan_id")
private String corpLoanId;
@Column(name = "request_id")
private String requestId;
@Column(name = "created_at")
private Timestamp createdAt;
public enum FundStatus{
SUCC("SUCC","放款成功"),
FAIL("FAIL","放款失败"),
HANDING("HANDING","处理中"),
DEPOSITORY_SUCC("DEPOSITORY_SUCC","存管提现成功"),
DEPOSITORY_FAIL("DEPOSITORY_FAIL","存管提现失败"),
DEPOSITORY_HANDING("DEPOSITORY_HANDING","存管提现中");
private String status;
private String desc;
FundStatus(String status, String desc) {
this.status = status;
this.desc = desc;
}
public String getStatus() {
return status;
}
public String getDesc() {
return desc;
}
}
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.model;
/**
* Created by Miraculous on 16/4/11.
*/
public enum FundingCorpProgress {
WAITING_FUNDING_CORP_REVIEW("等待资金方审核"),
FUNDING_CORP_RESPONSE_ERROR("资金方审核通信失败"),
FUNDING_CORP_EMPTY_RESPONSE("资金方审核返回空结果"),
FUNDING_CORP_REVIEW_REJECT("资金方审核失败"),
FUNDING_CORP_AGREE("资金方同意放款"),
FUNDING_CORP_FUNDED("资金方已放款"),
FUNDING_CORP_FUNDED_FAIL("资金方放款失败"),
FUNDING_CORP_REVIEW_ERROR("资金方审核异常"),
FUNDING_CORP_REVIEW_8("888"),
FUNDING_CORP_REVIEW_FETCHING("正在获取资金方放款结果"),//已经使用
IN_LOAN_QUEUE("在放款队列中");//已经使用
String description;
FundingCorpProgress(String descrption) {
this.description = descrption;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("FundingCorpProgress{");
sb.append("description='").append(description).append('\'');
sb.append('}');
return sb.toString();
}
}
\ No newline at end of file
package cn.quantgroup.cashloanflowboss.spi.xyqb.repository;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.FundLending;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.WaitingFundingCorpOperatePeople;
import cn.quantgroup.cashloanflowboss.spi.xyqb.source.XYQBDataSource;
import org.hibernate.annotations.SQLUpdate;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.Map;
/**
......@@ -18,30 +15,18 @@ import java.util.Map;
*/
@XYQBDataSource
@Repository
public interface FundLendingRepository extends CrudRepository<FundLending, Integer> {
public interface WaitingFundingCorpOperatePeopleRepository extends CrudRepository<WaitingFundingCorpOperatePeople, Long>, JpaRepository<WaitingFundingCorpOperatePeople, Long> {
/**
* 更新资方待放款创建时间
*
* @param loanId
* @param time
* @return
*/
@Modifying
@Transactional
@Query("update FundLending set createTime = ?2 where loanId = ?1")
boolean updateCreateTime(@Param("loanId") Long loanId, @Param("createTime") Date time);
/**
* 查询待放款记录
*
* @param fundId
* @param progress
* @return
*/
@Query("select sum(amount) as totalAmount ,count(fundId) as totalCount from FundLending where progress = ?2 and fundId = ?1")
Map queryLendingRecordCount(@Param("fundId")Integer fundId, @Param("progress")Integer progress);
@Query(value = "select sum(fund_amount) ,count(*) from xyqb.waiting_funding_corp_operate_people where funding_corp_progress=0 and funding_corp_id= ?1", nativeQuery = true)
Map queryLendingRecordCount(Long fundId);
FundLending findByLoanId(Long loanId);
WaitingFundingCorpOperatePeople findByLoanApplicationHistoryId(Long loanId);
}
\ No newline at end of file
......@@ -14,8 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.transaction.Transactional;
import java.util.Date;
import java.util.Map;
......@@ -27,7 +27,7 @@ import java.util.Map;
public class XYQBCenterService {
@Autowired
private FundLendingRepository fundLendingRepository;
private WaitingFundingCorpOperatePeopleRepository waitingFundingCorpOperatePeopleRepository;
@Autowired
private ContractRepository contractRepository;
@Autowired
......@@ -46,14 +46,6 @@ public class XYQBCenterService {
@Autowired
private XYQBCenter xyqbCenter;
/**
* 更新资方待放款创建时间
*
* @return
*/
public boolean updateFundLendingTime(Long loanId) {
return this.fundLendingRepository.updateCreateTime(loanId, new Date());
}
/**
* 更新合同状态
......@@ -61,7 +53,6 @@ public class XYQBCenterService {
* @param userId
* @return
*/
@Transactional
public int updateContractStatus(Long userId, Integer status) {
return this.contractRepository.updateContractStatus(userId, status);
}
......@@ -70,11 +61,10 @@ public class XYQBCenterService {
* 查询放款记录
*
* @param fundId
* @param progress
* @return
*/
public Map queryLendingRecordCount(Integer fundId, Integer progress) {
return this.fundLendingRepository.queryLendingRecordCount(fundId, progress);
public Map queryLendingRecordCount(Long fundId) {
return this.waitingFundingCorpOperatePeopleRepository.queryLendingRecordCount(fundId);
}
......@@ -105,12 +95,13 @@ public class XYQBCenterService {
contractRepository.save(contract);
}
public FundLending findFundLendingByLoanId(Long loanId) {
return fundLendingRepository.findByLoanId(loanId);
public WaitingFundingCorpOperatePeople findWaitingFundingCorpOperatePeopleByLoanId(Long loanId) {
return waitingFundingCorpOperatePeopleRepository.findByLoanApplicationHistoryId(loanId);
}
public void saveFundLending(FundLending fundLending) {
fundLendingRepository.save(fundLending);
@Transactional
public void saveWaitingFundingCorpOperatePeople(WaitingFundingCorpOperatePeople waitingFundingCorpOperatePeople) {
waitingFundingCorpOperatePeopleRepository.saveAndFlush(waitingFundingCorpOperatePeople);
}
......
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