Commit 3768b722 authored by 郝彦辉's avatar 郝彦辉

非联合贷-实时数据报送sql修改

parent 8d3965e3
package cn.quantgroup.report.controller.external;
import cn.quantgroup.report.domain.baihang.*;
import cn.quantgroup.report.response.GlobalResponse;
import cn.quantgroup.report.service.baihang.BaiHangZhuDaiService;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Stopwatch;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 百行征信报送出现错误的贷款记录信息重新报送
*
......@@ -15,7 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
* @Date 2019-04-15 17:27
*/
@RestController
@RequestMapping("/ex/re_send")
@RequestMapping("/zhudai/re_send")
public class ExZhuDaiBaiHangReSendController {
private static final Logger log = LoggerFactory.getLogger(ExZhuDaiBaiHangReSendController.class);
......@@ -223,5 +236,43 @@ public class ExZhuDaiBaiHangReSendController {
}
}
//test3.接口测试 手动调用
@RequestMapping("/test/apiSend2")
public String apiSend2(String type, String startDate, String endDate) {
try {
//"2019-05-07T00:00:00"
if (StringUtils.isAnyBlank(type, startDate, endDate)) {
return "参数为空";
}
if (startDate.length() != 19 || endDate.length() != 19 || !startDate.contains("T") || !endDate.contains("T")) {
log.warn("日期格式有误, startDate : {} , endDate : {} ", startDate, endDate);
return "日期格式有误";
}
String startnyr = LocalDateTime.parse(startDate).format(DateTimeFormatter.ISO_DATE);
String endnyr = LocalDateTime.parse(endDate).format(DateTimeFormatter.ISO_DATE);
if ("A1".equalsIgnoreCase(type)) {
//贷款申请信息(A1)
baiHangZhuDaiService.sendZhuDaiApplyToBaiHang(startnyr, endnyr);
} else if ("D2".equalsIgnoreCase(type)) {
//非循环贷款账户数据信息(D2)
baiHangZhuDaiService.sendZhuDaiLoanToBaiHang(startnyr, endnyr);
} else if ("D3".equalsIgnoreCase(type)) {
//非循环贷款贷后数据信息(D3)
baiHangZhuDaiService.sendZhuDaiRepaymentToBaiHang(startnyr, endnyr);
} else {
return "其他未知类型type=" + type;
}
} catch (Exception e) {
log.error("dataTuoMin异常, {} , {} ", e.getMessage(), e);
return e.getMessage();
}
return type + "手动报送结束";
}
}
......@@ -16,7 +16,9 @@ public class ApplyLoanInfoZhuDai {
private String reqID;
private String opCode;//操作代码A-增加 M-修改
private String uploadTs;
//private Integer isFinTechAgencyBusiness;//N
private int isFinTechAgencyBusiness;//是否是助贷业务 N
private String applyDate;
private String applyId;
private int applyType;
......@@ -25,14 +27,14 @@ public class ApplyLoanInfoZhuDai {
private int idType;
private String pid;
private String mobile;
private String emailAddress;
private String emailAddress; //电子邮箱
private int eduBackground;//学历
private int degree;//学位
private int guaranteeType;//信贷业务担保类型
private int loanPurpose;//贷款用途 Y/N
private int customType;
private int customType; //客户类型
private BigDecimal applyAmount; //申请贷款金额
private String businessOrgCreditCode;//业务发生机构代码 Y/N
......@@ -52,19 +54,25 @@ public class ApplyLoanInfoZhuDai {
//private String spouseMobile;
//private String spouseWorkName;
private String firstContactsName; //第一联系人姓名 Y/N
//private String firstContactsName; //第一联系人姓名 Y/N
//private Integer firstContactsRelationship;
//private Integer firstContactsIdType;
//private String firstContactsPid;
private String firstContactsMobile; //第一联系人手机号码 Y/N
//private String firstContactsPid;
//private String firstContactsMobile; //第一联系人手机号码 Y/N
//private String firstContactsTelephone;
//private String firstContactsWorkName;
private String secondContactsName;//第二联系人姓名 Y/N
//private String secondContactsName;//第二联系人姓名 Y/N
//private Integer secondContactsRelationship;
//private Integer secondContactsIdType;
//private String secondContactsPid;
private String secondContactsMobile;//第二联系人手机号码 Y/N
//private String secondContactsPid;
//private String secondContactsMobile;//第二联系人手机号码 Y/N
//private String secondContactsTelephone;
//private String secondContactsWorkName;
......@@ -73,9 +81,6 @@ public class ApplyLoanInfoZhuDai {
//imei;
//mac;
//ipAddress;
//osName;
//osName;
}
......@@ -12,6 +12,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;
......@@ -44,13 +45,17 @@ public class QuantGroupZhuDaiReportToBaiHang {
redisTemplate.expire(Constant.QG_ZHU_DAI_REPORT_LOCK_KEY, 10, TimeUnit.SECONDS);
Stopwatch stopwatch = Stopwatch.createStarted();
log.info("量化派-助贷模式报送贷款信息开始, startTime: {} ", LocalDateTime.now());
//yyyy-MM-dd
String startnyr = LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ISO_DATE);
String endnyr = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE);
baiHangZhuDaiService.sendZhuDaiApplyToBaiHang(); //生产 助贷-贷款申请 报送T+1 暂时先不报送C1 因为百行还没有开放查询接口
log.info("量化派-助贷模式报送贷款信息开始, newTime: {} , startnyr: {} , endnyr: {} ", LocalDateTime.now(), startnyr, endnyr);
baiHangZhuDaiService.sendZhuDaiLoanToBaiHang(); //生产 助贷-放款信息 报送T+1
baiHangZhuDaiService.sendZhuDaiApplyToBaiHang(startnyr,endnyr); //生产 助贷-贷款申请 报送T+1 暂时先不报送C1 因为百行还没有开放查询接口
baiHangZhuDaiService.sendZhuDaiRepaymentToBaiHang(); //生产 助贷-还款&逾期信息 报送T+1
baiHangZhuDaiService.sendZhuDaiLoanToBaiHang(startnyr,endnyr); //生产 助贷-放款信息 报送T+1
baiHangZhuDaiService.sendZhuDaiRepaymentToBaiHang(startnyr,endnyr); //生产 助贷-还款&逾期信息 报送T+1
log.info("量化派-助贷模式报送贷款信息息结束, endTime: {}, 耗时: {} ", LocalDateTime.now(), stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
......
......@@ -45,7 +45,7 @@ public interface ApplyLoanInfoMapper {
* 创建人: yanhui.Hao <br/>
* 创建时间: 2019.10.28 <br/>
*/
List<ApplyLoanInfoZhuDai> findRealTimeApplyLoanZhuDai();
List<ApplyLoanInfoZhuDai> findRealTimeApplyLoanZhuDai(BaiHangTimeRecord timeRecord);
/**
* 描述: 1.2百行助贷-联合贷 实时申请 <br/>
......
......@@ -66,7 +66,7 @@ public interface LoanInfoMapper {
* 创建人: yanhui.Hao <br/>
* 创建时间: 2019.10.28 <br/>
*/
List<LoanInfoZhuDai> findRealTimeLoanInfoZhuDai();
List<LoanInfoZhuDai> findRealTimeLoanInfoZhuDai(BaiHangTimeRecord timeRecord);
/**
......
......@@ -36,8 +36,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.security.PublicKey;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
......@@ -102,13 +104,41 @@ public class BaiHangZhuDaiService {
public String password;
private static PublicKey baihang_zhudai_publickey = null;
@PostConstruct
public void init(){
try{
baihang_zhudai_publickey = BHRSAUtils.readRSAPublicKey("/baihang/rsa_public_key.pem");
log.info("初始化百行助贷PublicKey实例完成");
}catch(Exception e){
log.error("初始化百行助贷PublicKey实例", e);
}
}
private static PublicKey getBaihangZDPublickey(){
if(baihang_zhudai_publickey==null){
try{
baihang_zhudai_publickey = BHRSAUtils.readRSAPublicKey("/baihang/rsa_public_key.pem");
log.info("初始化百行助贷PublicKey实例完成");
}catch(Exception e){
log.error("初始化百行助贷PublicKey实例", e);
}
}
return baihang_zhudai_publickey;
}
/**
* 助贷模式-实时批量报送用户贷款申请A1数据
* Scheduled 贷款申请(百行征信报送)
*/
public void sendZhuDaiApplyToBaiHang() {
public void sendZhuDaiApplyToBaiHang(String startnyr, String endnyr) {
//yyyy-MM-dd
Stopwatch queryWatch1 = Stopwatch.createStarted();
List<ApplyLoanInfoZhuDai> applyLoanInfos = applyLoanInfoMapper.findRealTimeApplyLoanZhuDai();
BaiHangTimeRecord timeRecord = BaiHangTimeRecord.builder().startTime(startnyr).endTime(endnyr).build();
List<ApplyLoanInfoZhuDai> applyLoanInfos = applyLoanInfoMapper.findRealTimeApplyLoanZhuDai(timeRecord);
log.info("量化派助贷TO百行报送-非联合贷申请查询完成, 大小: {} , 耗时: {} ", (applyLoanInfos!=null?applyLoanInfos.size() : 0), queryWatch1.stop().elapsed(TimeUnit.MILLISECONDS));
Stopwatch queryWatch2 = Stopwatch.createStarted();
......@@ -131,7 +161,9 @@ public class BaiHangZhuDaiService {
applyLoanInfo.setMobile(interfaceUploadClient(applyLoanInfo.getMobile()));
applyLoanInfo.setPid(interfaceUploadClient(applyLoanInfo.getPid()));
String resultStr = iHttpService.postBaiHang(baiHangApplyLoanInfoUrl, getHeader(), JSON.toJSONString(applyLoanInfo));
if (Objects.isNull(resultStr) || !(resultStr.contains("queryHistory") && resultStr.contains("nonRevolvingLoan") && resultStr.contains("revolvingLoan"))) {
log.info("助贷贷款申请A1报送结果, param: {} , resultStr: {} ", JSON.toJSONString(applyLoanInfo), resultStr);
//if (Objects.isNull(resultStr) || !(resultStr.contains("queryHistory") && resultStr.contains("nonRevolvingLoan") && resultStr.contains("revolvingLoan"))) {
if (Objects.isNull(resultStr) || !"success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
log.info("量化派助贷TO百行报送-贷款申请返回结果不正确, applyId: {} ", applyLoanInfo.getApplyId());
} else {
atomicInteger.getAndIncrement();
......@@ -148,13 +180,16 @@ public class BaiHangZhuDaiService {
* 助贷模式-实时批量报送放款D2数据
* Scheduled 实时放款数据(百行征信报送)
*/
public void sendZhuDaiLoanToBaiHang() {
public void sendZhuDaiLoanToBaiHang(String startnyr, String endnyr) {
//yyyy-MM-dd
BaiHangTimeRecord timeRecord = BaiHangTimeRecord.builder().startTime(startnyr).endTime(endnyr).build();
AtomicInteger atomicInteger = new AtomicInteger();
List<LoanInfoZhuDai> loanInfos = new ArrayList<>();
Stopwatch sendWatch = Stopwatch.createStarted();
try{
Stopwatch queryWatch1 = Stopwatch.createStarted();
loanInfos = loanInfoMapper.findRealTimeLoanInfoZhuDai();
loanInfos = loanInfoMapper.findRealTimeLoanInfoZhuDai(timeRecord);
log.info("量化派助贷TO百行报送-非联合贷放款申请报送开始, 大小: {} , 耗时: {} ", loanInfos.size(), queryWatch1.stop().elapsed(TimeUnit.MILLISECONDS));
Stopwatch queryWatch2 = Stopwatch.createStarted();
......@@ -169,13 +204,13 @@ public class BaiHangZhuDaiService {
}
for (int i = 0; i < loanInfos.size(); i++) {
LoanInfoZhuDai loanInfo = loanInfos.get(i);
LoanInfoZhuDai loanInfozd_tmp = loanInfos.get(i);
String id = "";
try {
String loanInfoReqId = loanInfo.getReqID();
if (loanInfo.getTotalTerm() > 1) {
String loanInfoReqId = loanInfozd_tmp.getReqID();
if (loanInfozd_tmp.getTotalTerm() > 1) {
List<String> targetRepaymentDayList = loanInfoMapper.findTargetRepaymentDayList(loanInfoReqId);
loanInfo.setTargetRepayDateList(String.join(",", targetRepaymentDayList));
loanInfozd_tmp.setTargetRepayDateList(String.join(",", targetRepaymentDayList));
}
/*UUID loanInfoId = UUID.randomUUID();
......@@ -191,17 +226,25 @@ public class BaiHangZhuDaiService {
id = loanInfoId.toString().replaceAll("-", "");
try{
LoanInfo record = new LoanInfo();
BeanUtils.copyProperties(loanInfo, record);
BeanUtils.copyProperties(loanInfozd_tmp, record);
record.setRecordId(id);
loanInfoDbMapper.saveLoanInfoRecordLog(record);
}catch(Exception e){
log.error("量化派助贷TO百行报送-放款申请保存记录失败" , e);
}
loanInfozd_tmp.setReqID(id);
String jsonStr = JSONObject.toJSONString(loanInfozd_tmp);
LoanInfoZhuDaiVo loanInfo = JSONObject.parseObject(jsonStr, LoanInfoZhuDaiVo.class);
FinTechAgencyBusinessZhuDai finTechAgencyBusiness = JSONObject.parseObject(jsonStr, FinTechAgencyBusinessZhuDai.class);
loanInfo.setFinTechAgencyBusiness(finTechAgencyBusiness);
loanInfo.setReqID(id);
loanInfo.setName(interfaceUploadClient(loanInfo.getName()));
loanInfo.setPid(interfaceUploadClient(loanInfo.getPid()));
loanInfo.setMobile(interfaceUploadClient(loanInfo.getMobile()));
String resultStr = iHttpService.postBaiHang(baiHangLoanInfoUrl, getHeader(), JSON.toJSONString(loanInfo));
log.info("助贷放款用户报送结果, param: {} , resultStr: {} ", JSON.toJSONString(loanInfo), resultStr);
if (Objects.isNull(resultStr) || !"success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
......@@ -211,7 +254,7 @@ public class BaiHangZhuDaiService {
atomicInteger.getAndIncrement();
}
} catch (Exception e) {
log.error("量化派助贷TO百行报送-放款信息异常, recordId: {} , loanId: {} ", id, loanInfo.getLoanId(), e);
log.error("量化派助贷TO百行报送-放款信息异常, recordId: {} , loanId: {} ", id, loanInfozd_tmp.getLoanId(), e);
}
}
}catch(Exception e){
......@@ -225,9 +268,9 @@ public class BaiHangZhuDaiService {
* 助贷模式-实时还款&实时逾期还款数据报送
* Scheduled 还款&逾期(百行征信报送)
*/
public void sendZhuDaiRepaymentToBaiHang() {
String startTime = LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ISO_DATE);
String endTime = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE);
public void sendZhuDaiRepaymentToBaiHang(String startnyr, String endnyr) {
//yyyy-MM-dd
BaiHangTimeRecord timeRecord = BaiHangTimeRecord.builder().startTime(startnyr).endTime(endnyr).build();
for (int j = 0; j < 2; j++) {
Stopwatch sendWatch = Stopwatch.createStarted();
......@@ -236,21 +279,21 @@ public class BaiHangZhuDaiService {
List<RepaymentInfoZhuDai> repaymentLoanInfosLh = null;
if (j == 0) {
Stopwatch realTimeStopWatch1 = Stopwatch.createStarted();
repaymentLoanInfos = repaymentLoanInfoMapper.findRealTimeRepayMentInfo(BaiHangTimeRecord.builder().startTime(startTime).endTime(endTime).build());
log.info("量化派助贷TO百行报送-非联合贷实时还款, startTime: {} , endTime: {} , 大小: {} , 耗时: {} ", startTime, endTime, repaymentLoanInfos.size(), realTimeStopWatch1.stop().elapsed(TimeUnit.MILLISECONDS));
repaymentLoanInfos = repaymentLoanInfoMapper.findRealTimeRepayMentInfo(timeRecord);
log.info("量化派助贷TO百行报送-非联合贷实时还款, startnyr: {} , endnyr: {} , 大小: {} , 耗时: {} ", startnyr, endnyr, repaymentLoanInfos.size(), realTimeStopWatch1.stop().elapsed(TimeUnit.MILLISECONDS));
Stopwatch realTimeStopWatch2 = Stopwatch.createStarted();
repaymentLoanInfosLh = repaymentLoanInfoMapper.findRealTimeRepayMentInfoLh(BaiHangTimeRecord.builder().startTime(startTime).endTime(endTime).build());
log.info("量化派助贷TO百行报送-联合贷实时还款, startTime: {} , endTime: {} , 大小: {} , 耗时: {} ", startTime, endTime, repaymentLoanInfosLh.size(), realTimeStopWatch2.stop().elapsed(TimeUnit.MILLISECONDS));
repaymentLoanInfosLh = repaymentLoanInfoMapper.findRealTimeRepayMentInfoLh(timeRecord);
log.info("量化派助贷TO百行报送-联合贷实时还款, startnyr: {} , endnyr: {} , 大小: {} , 耗时: {} ", startnyr, endnyr, repaymentLoanInfosLh.size(), realTimeStopWatch2.stop().elapsed(TimeUnit.MILLISECONDS));
} else {
Stopwatch realTimeOverdueStopWatch3 = Stopwatch.createStarted();
repaymentLoanInfos = repaymentLoanInfoMapper.findRealTimeRepayMentOverdue(BaiHangTimeRecord.builder().startTime(startTime).endTime(endTime).build());
log.info("量化派助贷TO百行报送-非联合贷实时还款逾期, startTime: {} , endTime: {} , 大小: {} , 耗时: {} ", startTime, endTime, repaymentLoanInfos.size(), realTimeOverdueStopWatch3.stop().elapsed(TimeUnit.MILLISECONDS));
repaymentLoanInfos = repaymentLoanInfoMapper.findRealTimeRepayMentOverdue(timeRecord);
log.info("量化派助贷TO百行报送-非联合贷实时还款逾期, startnyr: {} , endnyr: {} , 大小: {} , 耗时: {} ", startnyr, endnyr, repaymentLoanInfos.size(), realTimeOverdueStopWatch3.stop().elapsed(TimeUnit.MILLISECONDS));
Stopwatch realTimeOverdueStopWatch4 = Stopwatch.createStarted();
repaymentLoanInfosLh = repaymentLoanInfoMapper.findRealTimeRepayMentOverdueLh(BaiHangTimeRecord.builder().startTime(startTime).endTime(endTime).build());
log.info("量化派助贷TO百行报送-联合贷实时还款逾期, startTime: {} , endTime: {} , 大小: {} , 耗时: {} ", startTime, endTime, repaymentLoanInfos.size(), realTimeOverdueStopWatch4.stop().elapsed(TimeUnit.MILLISECONDS));
repaymentLoanInfosLh = repaymentLoanInfoMapper.findRealTimeRepayMentOverdueLh(timeRecord);
log.info("量化派助贷TO百行报送-联合贷实时还款逾期, startnyr: {} , endnyr: {} , 大小: {} , 耗时: {} ", startnyr, endnyr, repaymentLoanInfos.size(), realTimeOverdueStopWatch4.stop().elapsed(TimeUnit.MILLISECONDS));
}
......@@ -268,7 +311,7 @@ public class BaiHangZhuDaiService {
try {
RepaymentLoanInfo repaymentLoanInfo1 = repaymentLoanInfoDbMapper.findLastOne(BaiHangRepayment.builder().loanId(repaymentLoanInfo.getLoanId()).termNo(repaymentLoanInfo.getTermNo()).build());
if (j > 0 && Objects.nonNull(repaymentLoanInfo1)) {
log.info("量化派助贷TO百行报送-实时还款逾期跳过报送, startTime: {} , endTime: {} , bean: {} ", startTime, endTime, JSON.toJSONString(repaymentLoanInfo1));
log.info("量化派助贷TO百行报送-实时还款逾期跳过报送, startnyr: {} , endnyr: {} , bean: {} ", startnyr, endnyr, JSON.toJSONString(repaymentLoanInfo1));
continue;
}
......@@ -299,7 +342,7 @@ public class BaiHangZhuDaiService {
String resultStr = iHttpService.postBaiHang(baiHangRepayMentLoanInfoUrl, getHeader(), JSON.toJSONString(repaymentLoanInfo));
log.info("助贷还款用户报送结果, param: {} , resultStr: {} ", JSON.toJSONString(repaymentLoanInfo), resultStr);
if (Objects.isNull(resultStr) || !"success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
log.info("量化派助贷TO百行报送-还款返回结果不正确, 开始时间: {} , 结束时间: {} , recordId: {} , loanId: {} , bean: {} ", startTime, endTime, id, repaymentLoanInfo.getLoanId(), JSON.toJSONString(repaymentLoanInfo));
log.info("量化派助贷TO百行报送-还款返回结果不正确, 开始时间: {} , 结束时间: {} , recordId: {} , loanId: {} , bean: {} ", startnyr, endnyr, id, repaymentLoanInfo.getLoanId(), JSON.toJSONString(repaymentLoanInfo));
repaymentLoanInfoDbMapper.updateCurrentRecordEnableFalse(BaiHangUpDateRecord.builder().enable("0").recordId(id).build());
} else {
atomicInteger.getAndIncrement();
......@@ -308,9 +351,9 @@ public class BaiHangZhuDaiService {
log.error("量化派助贷TO百行报送-还款信息异常, recordId: {} , loanId: {} ", id, repaymentLoanInfo.getLoanId(), e);
}
}
log.info("量化派助贷TO百行报送-还款申请完成 J: {} , 开始时间: {} , 结束时间: {} , 实际大小: {} , 报送成功大小: {} , 耗时: {} ", j, startTime, endTime, repaymentLoanInfos.size(), atomicInteger.get(), sendWatch.stop().elapsed(TimeUnit.MILLISECONDS));
log.info("量化派助贷TO百行报送-还款申请完成 J: {} , 开始时间: {} , 结束时间: {} , 实际大小: {} , 报送成功大小: {} , 耗时: {} ", j, startnyr, endnyr, repaymentLoanInfos.size(), atomicInteger.get(), sendWatch.stop().elapsed(TimeUnit.MILLISECONDS));
} catch (Exception e) {
log.error("量化派助贷TO百行报送-异常 J: {} , 开始时间: {} , 结束时间: {} ", j, startTime, endTime, e);
log.error("量化派助贷TO百行报送-异常 J: {} , 开始时间: {} , 结束时间: {} ", j, startnyr, endnyr, e);
}
}
}
......@@ -638,7 +681,7 @@ public class BaiHangZhuDaiService {
req.setData(datas);
BhInterfaceCreditApiClient client = new BhInterfaceCreditApiClient();
//初始化设置RSA公钥
client.init(BHRSAUtils.readRSAPublicKey("/baihang/rsa_public_key.pem"));
client.init(getBaihangZDPublickey());
//执行加密操作
InterfaceUploadResponse response = client.execute(req);
if (response.isSuccess) {
......@@ -875,18 +918,18 @@ public class BaiHangZhuDaiService {
buff.append("\t");//applyInfo.getSpousePid()
buff.append("\t");//applyInfo.getSpouseMobile()
buff.append("\t");//applyInfo.getSpouseWorkName()
buff.append(applyInfo.getFirstContactsName()+"\t");
////buff.append(applyInfo.getFirstContactsName()+"\t");
buff.append("\t");//applyInfo.getFirstContactsRelationship()+
buff.append("\t");//applyInfo.getFirstContactsIdType()+
buff.append("\t");//applyInfo.getFirstContactsPid()+
buff.append("\t");//applyInfo.getFirstContactsMobile()+
buff.append("\t");//applyInfo.getFirstContactsTelephone()+
buff.append("\t");//applyInfo.getFirstContactsWorkName()+
buff.append(applyInfo.getSecondContactsName()+"\t");
////buff.append(applyInfo.getSecondContactsName()+"\t");
buff.append("\t");//applyInfo.getSecondContactsRelationship()+
buff.append("\t");//applyInfo.getSecondContactsIdType()+
buff.append("\t");//applyInfo.getSecondContactsPid()+
buff.append(applyInfo.getSecondContactsMobile()+"\t");
////buff.append(applyInfo.getSecondContactsMobile()+"\t");
buff.append("\t");//applyInfo.getSecondContactsTelephone()+
buff.append("\t");//applyInfo.getSecondContactsWorkName()+
buff.append("\t");//applyInfo.getDevice()+
......
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALg0QqQSZ0YSrSQU
LvIB/u+E/bUQ45DIDtVSO1PQpvhLOrvD7rWNrouLRMjj2Ermi3RvNRZIIx5QaHVQ
BvW2FJm11JC4JxfgcWrT/p0AKqGh9UAyyC9zAfkggpG2BZddZxvQTXVJj5Wn0fWQ
FtE4riCfWpRo1OQc/YljdeqKXTEFAgMBAAECgYBomNRWklSuR6ClYgieR1/Z5myi
SmrOJau2mjEyEMMfLqi1QjbkRQWeG4D9idOiBHOftB4y/tdiOUp3gu/Qyom7Hud4
QxUOEs3popduqPvTfmrlVHfuq+LrV/eVmClPRi+cWsAYEBwZtNxeeGmu/50xf78i
NPFYkP3z71fJ5NA3gQJBAO9tUjcJqbLVpzSt6Q3RrB3h8yXmJZmyWx72Yn/MgTj6
ctxTubSQ60ehQ4HSgziwV8ahXnYEM0YNYp2Bko3Kw1ECQQDE9GHU71wZy/FL2avs
OMLs1AA+CFVpFnFzYIhP48L6IB55P6yVh72IzdjVu6ljHkmlHKRbp/9Jcc2ORtRp
hd11AkEAumy/yFUAylurjswfHAB3aOknHwpdmpgSdUBZH7NHpurzhnS2s07ns+Vw
H+SfAgPkxKefWnsYxWHkuElMqJUJkQJAO/wSL8AW1OSAQRGygudmtqp6yGnRWYg0
VWd5HJvJrlRJ87Oo5IHK//dxqubU2BNJargmdqPb5Ip8iHCaEOlsYQJAKhzD6foy
aK6mJvK+lxwUh2GJKzK3EJrWuTKcuelL9dCp5Z/nNsxxX+9tkOJynyEV56iKlh/h
FJyOOoS03Y9OiA==
duiFangWeiTiGong
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEOwIm8MFLteFGz6Eaou1Dza9ov6lddd24xwDDjd/juk2WSZSmq7ZqUeyCqlTQHwoWgXm77qyahqCYZjmzctfO5xM6tB84LDYVhW9WdskeuhejScA30DkzyFls57pYEAdotj8JTGncB5qqU8p213osVCwq0jSD1pDFZP9/+fRPmQIDAQAB
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWXGJSOw/qQBXaui9Z7NITO4wV3f5Ysh7tbC9op/X33AI6JP8Zlnh7+ZPmuddrYHc683n+qdU3cONCaOTuWmBiXNDQfRqMkR69vpGJel7l9RpFqlR7pyWGkZ1Bac4wUXT+ewPjutT6LyKUaBbIV8Z4jIqO7j/qtvqJt1oHzNzZtwIDAQAB
-----END PUBLIC KEY-----
......@@ -91,11 +91,57 @@
<!--1.1百行助贷-非联合贷 申请实时 2019.10.28-->
<select id="findRealTimeApplyLoanZhuDai" resultType="cn.quantgroup.report.domain.baihang.ApplyLoanInfoZhuDai">
select b.name as name, b.id_no as pid, b.phone_no as mobile, '1' as queryReason, '1' as guaranteeType, '1' as loanPurpose, '99' as customType, '-1' as applyAmount, a.order_no as loanId
from xyqb_i_apply_quota_record a left join xyqb_user_i_user_detail b on a.user_id=b.user_id
where a.created_at>=DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y-%m-%d')
and 1>2;
<select id="findRealTimeApplyLoanZhuDai" parameterType="cn.quantgroup.report.domain.baihang.BaiHangTimeRecord" resultType="cn.quantgroup.report.domain.baihang.ApplyLoanInfoZhuDai">
select
a.id reqID
,'A' opCode
,DATE_FORMAT(now(),'%Y-%m-%dT%H:%i:%S') uploadTs
,'1' isFinTechAgencyBusiness
,DATE_FORMAT(case when i.created_at is null and h.created_at &lt;= f.created_at then h.created_at
when i.created_at is null and h.created_at>f.created_at then f.created_at
else i.created_at end,'%Y-%m-%dT%H:%i:%S') as applyDate
,if(d.order_no is null,a.loan_application_history_id,d.order_no) applyId
,'1' applyType
,b.name name
,'1' idType
,b.id_no pid
,b.phone_no mobile
,b.email emailAddress
,case when j.education=1 then '10'
when j.education=2 then '20'
when j.education=3 then '30'
when j.education in (4,6) then '40'
when j.education=5 then '50'
when j.education in (7,8) then '60'
else '70' end eduBackground
,'500' degree
,'1' guaranteeType
,'1' loanPurpose
,'99' customType
,'-1' applyAmount
,'8' livingCondition
,case when j.marry_status=1 then '10'
when j.marry_status=2 then '20'
when j.marry_status=4 then '30'
when j.marry_status=3 then '40'
else '90' end marriageStatus
from xyqb_i_loan_application_manifest_history a
left join xyqb_user_i_user_detail b on a.user_id=b.user_id
left join xyqb_i_loan_account_ext c on a.loan_application_history_id=c.loan_id
left join xyqb_i_apply_quota_record d on c.order_no=d.order_no
left join xyqb_i_loan_submit_info f on a.loan_application_history_id=f.loan_id
left join xyqb_i_loan_application_history h on a.loan_application_history_id=h.id
left join xyqb_i_quota_credit i on d.order_no=i.order_no
left join xyqb_i_loan_base_info j on a.loan_application_history_id=j.loan_id
where a.funding_corp_id in (420,520,580,650,670,810,240,640,700)
and a.contract_term not in (2,3)
and a.transaction_status in (2,5)
and case when i.created_at is null and h.created_at &lt;=f.created_at then h.created_at
when i.created_at is null and h.created_at>f.created_at then f.created_at
else i.created_at end >= #{startTime,jdbcType=VARCHAR}
and case when i.created_at is null and h.created_at &lt;=f.created_at then h.created_at
when i.created_at is null and h.created_at>f.created_at then f.created_at
else i.created_at end &lt; #{endTime,jdbcType=VARCHAR};
</select>
<!--1.2百行助贷-联合贷 申请实时 2019.10.28-->
......
......@@ -312,16 +312,57 @@
and a.contract_term not in (2,3)
and a.transaction_status in (2,5)
and a.loan_paid_at >= #{startTime,jdbcType=VARCHAR}
and a.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
and a.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR};
</select>
<!--2.1百行助贷-非联合贷 放款实时 2019.10.28-->
<select id="findRealTimeLoanInfoZhuDai" parameterType="cn.quantgroup.report.domain.baihang.BaiHangTimeRecord" resultType="cn.quantgroup.report.domain.baihang.LoanInfoZhuDai">
select a.loan_application_history_id reqID
,'A' opCode
,DATE_FORMAT(now(),'%Y-%m-%dT%H:%i:%S') uploadTs
,if(a.funding_corp_id in (240,640,700),'深圳市小赢科技有限责任公司','广州惠金小额贷款有限公司') institutionalFundingPartner
,if(a.funding_corp_id in (240,640,700),'91440300MA5DMXHN4R','91440101MA59G7X78Y') institutionalFundingPartnerID
,j.corp_loan_id relationID
,'' institutionalFundingPartnerLoanID
,if(d.order_no is null,a.loan_application_history_id,d.order_no) orderID
,'' preCreditLimit
,b.name name
,b.id_no pid
,b.phone_no mobile
,if(d.order_no is null,a.loan_application_history_id,d.order_no) loanId
,'1' guaranteeType
,'1' loanPurpose
,DATE_FORMAT(case when i.created_at is null and h.created_at &lt;= f.created_at then h.created_at
when i.created_at is null and h.created_at>f.created_at then f.created_at
else i.created_at end,'%Y-%m-%dT%H:%i:%S') as applyDate
,DATE_FORMAT(case when d.created_at is null and f.created_at>=h.created_at then f.created_at
when d.created_at is null and f.created_at &lt; h.created_at then h.created_at
else d.created_at end,'%Y-%m-%dT%H:%i:%S') as accountOpenDate
,DATE_FORMAT(a.loan_paid_at,'%Y-%m-%dT%H:%i:%S') issueDate
,date(date_sub(e.deadline,INTERVAL 1 second)) dueDate
,a.contract_loan_amount loanAmount
,a.contract_term totalTerm
,'2' targetRepayDateType
,'-1' termPeriod
,date(date_sub(g.deadline,INTERVAL 1 second)) firstRepaymentDate
,'0' gracePeriod
from xyqb_i_loan_application_manifest_history a
where 1>2;
left join xyqb_user_i_user_detail b on a.user_id=b.user_id
left join xyqb_i_loan_account_ext c on a.loan_application_history_id=c.loan_id
left join xyqb_i_apply_quota_record d on c.order_no=d.order_no
left join xyqb_i_repayment_plan e on a.loan_application_history_id=e.loan_application_history_id
left join xyqb_i_loan_submit_info f on a.loan_application_history_id=f.loan_id
left join xyqb_i_repayment_plan g on a.loan_application_history_id=g.loan_application_history_id
left join xyqb_i_loan_application_history h on a.loan_application_history_id=h.id
left join xyqb_i_quota_credit i on d.order_no=i.order_no
left join xyqb_i_waiting_funding_corp_operate_people j on a.loan_application_history_id=j.loan_application_history_id
where a.funding_corp_id in (420,520,580,650,670,810,240,640,700) and
e.term_no=a.contract_term and g.term_no=1
and a.contract_term not in (2,3)
and a.transaction_status in (2,5)
and a.loan_paid_at>= #{startTime,jdbcType=VARCHAR}
and a.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR};
</select>
<!--2.2百行助贷-联合贷 放款实时 2019.10.28-->
......
......@@ -338,9 +338,100 @@
<!--3.1百行助贷-非联合贷 实时还款 2019.10.28-->
<select id="findRealTimeRepayMentInfo" parameterType="cn.quantgroup.report.domain.baihang.BaiHangTimeRecord"
resultType="cn.quantgroup.report.domain.baihang.RepaymentInfoZhuDai">
select a.id reqID
select
a.id reqID
,'A' opCode
,DATE_FORMAT(now(),'%Y-%m-%dT%H:%i:%S') uploadTs
,if(d.order_no is null,a.loan_application_history_id,d.order_no) loanId
,b.name name
,b.id_no pid
,b.phone_no mobile
,if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.term_no,h.max_term) termNo
,date(DATE_sub(if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.deadline,h.max_deadline),INTERVAL 1 second)) targetRepaymentDate
,DATE_FORMAT(a.repaid_at,'%Y-%m-%dT%H:%i:%S') realRepaymentDate
,j.required_repayment plannedPayment
,f.yqze+sum(a.required_repayment) targetRepayment
,sum(a.required_repayment) realRepayment
,case when f.yqze=0 then ''
else concat('D',DATEDIFF( #{endTime,jdbcType=VARCHAR},f.min_deadline)+1) end overdueStatus
,DATE_FORMAT( #{endTime,jdbcType=VARCHAR},'%Y-%m-%dT%H:%i:%S') statusConfirmAt
,f.yqze overdueAmount
,min(if(a.loan_paid_at>='2018-01-01',i.dkye,i2.dkye)) remainingAmount
,case when f.yqze>0 then '2'
when min(if(a.loan_paid_at>='2018-01-01',i.dkye,i2.dkye))=0 and if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.term_no,h.max_term) &lt; f.max_term_no then '2'
when min(if(a.loan_paid_at>='2018-01-01',i.dkye,i2.dkye))=0 and if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.term_no,h.max_term)= f.max_term_no then '3'
when f.yqze=0 and min(if(a.loan_paid_at>='2018-01-01',i.dkye,i2.dkye))>0 then '1'
end as loanStatus
,if(f.yqze>0,'overdue','normal') termStatus
from (
select a.*,if(c.term_no is null,a.term_no,c.term_no) next_term
,if(c.deadline is null,a.deadline,c.deadline) next_deadline
,b.loan_paid_at
from xyqb_i_repayment_plan a
where 1>2;
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id and b.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
left join xyqb_i_repayment_plan c on a.loan_application_history_id=c.loan_application_history_id
and a.term_no=c.term_no-1
where a.repaid_at>= #{startTime,jdbcType=VARCHAR} and a.repaid_at &lt; #{endTime,jdbcType=VARCHAR} and a.repayment_status=3
and b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
and b.contract_term not in (2,3)
) a
left join xyqb_user_i_user_detail b on a.user_id=b.user_id
left join xyqb_i_loan_account_ext c on a.loan_application_history_id=c.loan_id
left join xyqb_i_apply_quota_record d on c.order_no=d.order_no
left join (
select a.loan_application_history_id
,sum(if((a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR})) and a.deadline &lt;= #{endTime,jdbcType=VARCHAR},a.required_repayment,0)) yqze
,sum(if(a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR}),if(b.loan_paid_at>='2018-01-01',g.principal,h.principle),0)) dkye
,min(if((a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR})) and a.deadline &lt;= #{endTime,jdbcType=VARCHAR},a.deadline,null)) min_deadline
,max(a.term_no) max_term_no
from xyqb_i_repayment_plan a
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id
left join xyqb_i_repayment_record g on a.id=g.repayment_plan_id
left join xyqb_i_plan_amount_detail h on a.id=h.plan_id
where b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
group by a.loan_application_history_id) f on a.loan_application_history_id=f.loan_application_history_id
left join xyqb_i_repayment_record g on a.id=g.repayment_plan_id
left join (
select a.loan_application_history_id,a.repaid_at,a.deadline,a.term_no
,max(c.term_no) max_term
,max(c.deadline) max_deadline
from xyqb_i_repayment_plan a
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id and b.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
left join xyqb_i_repayment_plan c on a.loan_application_history_id=c.loan_application_history_id
where DATEDIFF(a.repaid_at,c.deadline)>=-1
and b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
group by a.loan_application_history_id,a.term_no) h
on a.loan_application_history_id=h.loan_application_history_id and a.term_no=h.term_no
left join (
select a.loan_application_history_id
,a.term_no
,sum(if(d.term_no>a.term_no,d.principal,0)) dkye
from xyqb_i_repayment_plan a
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id and b.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
left join xyqb_i_repayment_record d on a.loan_application_history_id=d.loan_application_history_id
where b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
group by a.loan_application_history_id,a.term_no) i
on a.loan_application_history_id=i.loan_application_history_id and a.term_no=i.term_no
left join (
select a.loan_application_history_id
,a.term_no
,sum(if(e.term_no>a.term_no,h.principle,0)) dkye
from xyqb_i_repayment_plan a
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id and b.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
left join xyqb_i_repayment_plan e on a.loan_application_history_id=e.loan_application_history_id
left join xyqb_i_plan_amount_detail h on e.id=h.plan_id
where b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
group by a.loan_application_history_id,a.term_no) i2
on a.loan_application_history_id=i2.loan_application_history_id and a.term_no=i2.term_no
left join xyqb_i_repayment_plan j on a.loan_application_history_id=j.loan_application_history_id
and if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.term_no,h.max_term)=j.term_no
group by if(d.order_no is null,a.loan_application_history_id,d.order_no),
if(DATEDIFF(a.next_deadline,a.repaid_at)>1,a.term_no,h.max_term);
</select>
<!--3.2百行助贷-联合贷 实时还款 2019.10.28-->
......@@ -356,9 +447,55 @@
<!--4.1百行助贷-非联合贷 实时逾期还款 2019.10.28-->
<select id="findRealTimeRepayMentOverdue" parameterType="cn.quantgroup.report.domain.baihang.BaiHangTimeRecord"
resultType="cn.quantgroup.report.domain.baihang.RepaymentInfoZhuDai">
select a.id reqID
select
a.id reqID
,'A' opCode
,DATE_FORMAT(now(),'%Y-%m-%dT%H:%i:%S') uploadTs
,if(d.order_no is null,a.loan_application_history_id,d.order_no) loanId
,b.name name
,b.id_no pid
,b.phone_no mobile
,a.term_no termNo
,date(DATE_sub(a.deadline,INTERVAL 1 second)) targetRepaymentDate
,'' realRepaymentDate
,a.required_repayment plannedPayment
,f.yqze targetRepayment
,0 realRepayment
,case when f.yqze=0 then ''
else concat('D',DATEDIFF( #{endTime,jdbcType=VARCHAR},f.min_deadline)+1) end overdueStatus
,DATE_FORMAT( #{endTime,jdbcType=VARCHAR},'%Y-%m-%dT%H:%i:%S') statusConfirmAt
,f.yqze overdueAmount
,f.dkye remainingAmount
,case when f.yqze>0 then '2'
when f.dkye=0 then '3'
when f.yqze=0 and f.dkye>0 then '1'
end as loanStatus
,'overdue' termStatus
from (select a.*
from xyqb_i_repayment_plan a
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id and b.loan_paid_at &lt; #{endTime,jdbcType=VARCHAR}
where (a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR})) and
if(b.contract_term>a.term_no,DATEDIFF( #{endTime,jdbcType=VARCHAR},a.deadline)=0,DATEDIFF( #{endTime,jdbcType=VARCHAR},a.deadline)>=0)
and floor(DATEDIFF( #{endTime,jdbcType=VARCHAR},a.deadline)/30)=DATEDIFF( #{endTime,jdbcType=VARCHAR},a.deadline)/30
and b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
and b.transaction_status in (2,5)
and b.contract_term not in (2,3)) a
left join xyqb_user_i_user_detail b on a.user_id=b.user_id
left join xyqb_i_loan_account_ext c on a.loan_application_history_id=c.loan_id
left join xyqb_i_apply_quota_record d on c.order_no=d.order_no
left join (select a.loan_application_history_id
,sum(if((a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR})) and a.deadline &lt;= #{endTime,jdbcType=VARCHAR},if(b.loan_paid_at>='2018-01-01',g.principal+g.interest+g.service_fee,h.principle+h.interest+h.service_fee_per_term),0)) yqze
,sum(if(a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR}),if(b.loan_paid_at>='2018-01-01',g.principal,h.principle),0)) dkye
,min(if((a.repayment_status !=3 or (a.repayment_status =3 and a.repaid_at>= #{endTime,jdbcType=VARCHAR})) and a.deadline &lt;= #{endTime,jdbcType=VARCHAR},a.deadline,null)) min_deadline
from xyqb_i_repayment_plan a
where 1>2;
left join xyqb_i_loan_application_manifest_history b
on a.loan_application_history_id=b.loan_application_history_id
left join xyqb_i_repayment_record g on a.id=g.repayment_plan_id
left join xyqb_i_plan_amount_detail h on a.id=h.plan_id
where b.funding_corp_id in (420,520,580,650,670,810,240,640,700)
group by a.loan_application_history_id) f on a.loan_application_history_id=f.loan_application_history_id
left join xyqb_i_repayment_record g on a.id=g.repayment_plan_id;
</select>
<!--4.2百行助贷-联合贷 实时逾期还款 2019.10.28-->
......
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