Commit 29d0decb authored by 郝彦辉's avatar 郝彦辉

百行每天的重新报送优化成定时任务

parent 192ffb45
......@@ -4,11 +4,15 @@ import cn.quantgroup.report.response.GlobalResponse;
import cn.quantgroup.report.service.common.CommonQueryService;
import cn.quantgroup.report.service.manualTool.CleanningTransactionLogService;
import cn.quantgroup.report.service.manualTool.ManualToolService;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping(value = "/manualtool")
......@@ -40,12 +44,13 @@ public class ManualToolController {
@RequestMapping("/send/baihang")
public GlobalResponse sendBaihang(String p1,String p2,String p3,String p4,String p5,String secretKey, String isSend,String errorCode, String isProduct, String sendIncludeType) {
public String sendBaihang(String p1,String p2,String p3,String p4,String p5,String secretKey, String isSend,String errorCode, String isProduct, String sendIncludeType) {
try{
return manualToolService.sendBaiHangData(p1,p2,p3,p4,p5,secretKey,isSend,errorCode, isProduct, sendIncludeType);
Map<String,String> resultMap = manualToolService.sendBaiHangData(p1,p2,p3,p4,p5,secretKey,isSend,errorCode, isProduct, sendIncludeType);
return JSON.toJSONString(resultMap);
}catch (Exception e){
log.error("众信利民助贷模式To百行征信手动报送异常, {} , {} ", e.getMessage(), e);
return GlobalResponse.generate(e.getMessage());
return "众信利民助贷模式To百行征信手动报送异常";
}
}
......@@ -188,4 +193,25 @@ public class ManualToolController {
return "deleteTidbCallRecordCF调度完成";
}
@RequestMapping("/deleteRedisKey")
public Map<String,Object> deleteRedisKey(String key1, String key2, String key3){
try{
manualToolService.deleteRedisKey(key1, key2, key3);
return ImmutableMap.of("code", 0, "msg", "手动删除redisKey成功");
}catch(Exception e){
return ImmutableMap.of("code", 1, "msg", "手动设置redisKey异常");
}
}
@RequestMapping("/getRedisVal")
public String getRedisVal(String key){
try{
return manualToolService.getRedisVal(key);
}catch(Exception e){
return "获取redis值异常";
}
}
}
......@@ -119,13 +119,14 @@ public class ExZhuDaiBaiHangReSendController {
* 创建时间: 2019.10.29 <br/>
*/
@RequestMapping("/manual/buquan/mainApplySend")
public GlobalResponse mainApplySend(){
public String mainApplySend(){
try{
baiHangZhuDaiService.sendHandApplyToBaiHang(true,null);
return GlobalResponse.generate("百行征信助贷模式手动报送D2数据成功");
return baiHangZhuDaiService.sendHandApplyToBaiHang(true,null);
//return GlobalResponse.generate("百行征信助贷模式手动报送D2数据成功");
}catch(Exception e){
log.error("百行征信助贷模式手动报送申请异常", e);
return GlobalResponse.generate("百行征信助贷模式手动报送A1数据失败");
log.error("众信利民助贷模式手动报送A1申请异常", e);
//return GlobalResponse.generate("百行征信助贷模式手动报送A1数据失败");
return "众信利民助贷模式手动报送A1数据失败";
}
}
......@@ -137,13 +138,14 @@ public class ExZhuDaiBaiHangReSendController {
* 创建时间: 2019.10.29 <br/>
*/
@RequestMapping("/manual/buquan/mainLoanInfoSend")
public GlobalResponse mainLoanInfoSend(String isSaveLogBean){
public String mainLoanInfoSend(String isSaveLogBean){
try{
baiHangZhuDaiService.sendHandLoaInfoReportToBaiHang2(true,null,isSaveLogBean);
return GlobalResponse.generate("百行征信助贷模式手动报送D2数据成功");
return baiHangZhuDaiService.sendHandLoaInfoReportToBaiHang2(true,null,isSaveLogBean);
//return GlobalResponse.generate("百行征信助贷模式手动报送D2数据成功");
}catch(Exception e){
log.error("百行征信助贷模式报送放款异常", e);
return GlobalResponse.generate("百行征信助贷模式手动报送D2数据失败");
log.error("众信利民助贷模式手动报送D2放款异常", e);
//return GlobalResponse.generate("百行征信助贷模式手动报送D2数据失败");
return "众信利民助贷模式手动报送D2数据失败";
}
}
......@@ -155,13 +157,14 @@ public class ExZhuDaiBaiHangReSendController {
* 创建时间: 2019.10.29 <br/>
*/
@RequestMapping("/manual/buquan/mainRepaymentLoanInfo")
public GlobalResponse mainRepaymentLoanInfo(){
public String mainRepaymentLoanInfo(){
try{
baiHangZhuDaiService.sendHandRepaymentReportToBaiHang1(true,null);
return GlobalResponse.generate("百行征信助贷模式手动报送D3数据成功");
return baiHangZhuDaiService.sendHandRepaymentReportToBaiHang1(true,null);
//return GlobalResponse.generate("百行征信助贷模式手动报送D3数据成功");
}catch(Exception e){
log.error("百行征信助贷模式报送还款异常", e);
return GlobalResponse.generate("百行征信助贷模式手动报送D3数据失败");
log.error("众信利民助贷模式手动报送D3还款异常", e);
//return GlobalResponse.generate("百行征信助贷模式手动报送D3数据失败");
return "众信利民助贷模式手动报送D3还款数据失败";
}
}
......
package cn.quantgroup.report.job;
import cn.quantgroup.report.response.RiskHttpResponse;
import cn.quantgroup.report.service.baihang.BaiHangZhuDaiService;
import cn.quantgroup.report.utils.dingtalk.DingTalk;
import cn.quantgroup.report.utils.http.HttpRequestUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Stopwatch;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* -----------------------------------------------------------------------------<br>
* 描述: 一些繁琐的日正常工作task<br>
* 作者:yanhui.Hao <br>
* 时间:2020.03.11 <br>
* 授权: (C) Copyright (c) 2017 <br>
* 公司: 北京众信利民信息技术有限公司 <br>
* -----------------------------------------------------------------------------
*/
@Component
public class RoutineWorkTask {
private static final Logger log = LoggerFactory.getLogger(RoutineWorkTask.class);
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Autowired
private DingTalk dingTalk;
/** 百行报送工程RoutineWorkTask锁key */
public static final String ROUTINE_WORK_BH_LOCK_KEY_1 = "ROUTINE_WORK_BH_LOCK_KEY_1";
public static final String ROUTINE_WORK_BH_LOCK_KEY_2 = "ROUTINE_WORK_BH_LOCK_KEY_2";
public static final String ZXLM_A1_INTERFACE_SEND = "ZXLM_A1_INTERFACE_SEND";
public static final String ZXLM_D2_INTERFACE_SEND = "ZXLM_D2_INTERFACE_SEND";
public static final String ZXLM_D3_INTERFACE_SEND = "ZXLM_D3_INTERFACE_SEND";
@Async
@Scheduled(cron = "0 0 17 * * ?")
public void downloadLog() {
if (increment(ROUTINE_WORK_BH_LOCK_KEY_1)) {
redisTemplate.expire(ROUTINE_WORK_BH_LOCK_KEY_1, 10, TimeUnit.SECONDS);
Stopwatch stopwatch = Stopwatch.createStarted();
//yyyy-MM-dd
String newDatenyr = LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ISO_DATE);
newDatenyr = newDatenyr.replace("-", "");
//指定只有172.21.10.8服务器
String downloadUrl = "http://172.21.10.8:9021/manualtool/send/baihang?key=b5140fb2-2c85-4b5a-abcf-3e97528014db";
Map<String, Object> body = new HashMap<>();
body.put("p1", "L0hNMklnTjNPenA1aDdqSHpreld1UT09");
body.put("p2", "UTg1UFN4SjN3TThuVXFIVEFUUFR0QT09");
body.put("p3", "Mm12NTBKU1JkVFE3MjlCK3RnZTNRdz09");
body.put("p4", "MmJJMzNUQVRMSXQ4V3VDbUswZGNlUT09");
body.put("p5", newDatenyr);
body.put("secretKey", "UY1I5dHb3iq/DtEAm1f3yu7emYzlSvpFNPkxpOMSegqYJ08M2drTtNiqLyaxjbERWR0yS5CHPKpHwGjTXWHP3DEEDfXX4LhRtmiN1LIpZPdl87YWpDJ1qg07EN671JcY406oPbh7KsHFO0I0B32Hee1iZanKL4tzqmgF4dvsUNs=");
body.put("isSend", "false");//不自动报送
body.put("sendIncludeType", "D2,D3");//不不自动报送,该参数没有用
body.put("isProduct", "true");
body.put("errorCode", "D3_035,");//以后发现其他错误code,可以追加
log.info("下载(众信利民助贷)百行反馈日志开始, newTime: {} , newDatenyr: {} ", LocalDateTime.now(), newDatenyr);
try {
Stopwatch stopwatch1 = Stopwatch.createStarted();
RiskHttpResponse riskHttpResponse = HttpRequestUtil.doPost(downloadUrl, body);
//manualToolService.sendBaiHangData
log.info("处理结束, result: {} , 耗时: {} ", JSONObject.toJSONString(riskHttpResponse), stopwatch1.stop().elapsed(TimeUnit.MILLISECONDS));
int statusCode = riskHttpResponse.getCode();
JSONObject jsonObject = riskHttpResponse.getJsonObject();
if (statusCode == 200 && jsonObject != null) {
String success = jsonObject.getString("success");
String alarm = jsonObject.getString("alarm");
if (StringUtils.isNotEmpty(success)) {
if (StringUtils.isNotEmpty(alarm)) {
dingTalk.talk("Info", "下载&处理" + newDatenyr + "(众信利民助贷)百行反馈日志结束", success);
dingTalk.talk_ToUser("下载(众信利民助贷)百行反馈主日志文件不存在", "下载" + newDatenyr + "反馈主日志文件不存在,反馈日志主文件不存在,请注意确认!");
log.info("下载(众信利民助贷)百行反馈日志结束, newDatenyr: {}, 耗时: {} ", newDatenyr, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
return;
} else {
dingTalk.talk("Info", "下载&处理" + newDatenyr + "(众信利民助贷)百行反馈日志结束", success + "————10分钟后将会自动重新报送,若有问题请及时停止!");
String json_sq_A1 = jsonObject.getString("json_sq_A1");
if(StringUtils.isNotEmpty(json_sq_A1) && "true".equals(json_sq_A1)){
setRedisValStr(ZXLM_A1_INTERFACE_SEND);
}
String json_fk_D2 = jsonObject.getString("json_fk_D2");
if(StringUtils.isNotEmpty(json_fk_D2) && "true".equals(json_fk_D2)){
setRedisValStr(ZXLM_D2_INTERFACE_SEND);
}
String json_hk_D3 = jsonObject.getString("json_hk_D3");
if(StringUtils.isNotEmpty(json_hk_D3) && "true".equals(json_hk_D3)){
setRedisValStr(ZXLM_D3_INTERFACE_SEND);
}
log.info("下载(众信利民助贷)百行反馈日志结束, newDatenyr: {}, 耗时: {} ", newDatenyr, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
return;
}
}
}
} catch (Exception e) {
log.error("下载(众信利民助贷)百行反馈日志异常, newDatenyr: {} ", newDatenyr, e);
dingTalk.talk("Error", "报送服务内部异常", e);
dingTalk.talk_ToUser("数据报送异常", "报送服务内部异常,请尽快手动处理!");
}
dingTalk.talk_ToUser("下载(众信利民助贷)百行反馈日志未知异常", "下载" + newDatenyr + "反馈日志失败,请尽快手动处理!");
log.info("下载(众信利民助贷)百行反馈日志结束, newDatenyr: {}, 耗时: {} ", newDatenyr, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
}
@Async
@Scheduled(cron = "0 15 17 * * ?")
public void sendBaoSong() {
if (increment(ROUTINE_WORK_BH_LOCK_KEY_2)) {
redisTemplate.expire(ROUTINE_WORK_BH_LOCK_KEY_2, 10, TimeUnit.SECONDS);
Stopwatch stopwatch = Stopwatch.createStarted();
//yyyy-MM-dd
String newDatenyr = LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ISO_DATE);
newDatenyr = newDatenyr.replace("-", "");
//指定只有172.21.10.8服务器 172.21.10.8:9021
String send_A1_url = "http://172.21.10.8:9021/zhudai/re_send/manual/buquan/mainApplySend?key=b5140fb2-2c85-4b5a-abcf-3e97528014db";
String send_D2_url = "http://172.21.10.8:9021/zhudai/re_send/manual/buquan/mainLoanInfoSend?key=b5140fb2-2c85-4b5a-abcf-3e97528014db";
String send_D3_url = "http://172.21.10.8:9021/zhudai/re_send/manual/buquan/mainRepaymentLoanInfo?key=b5140fb2-2c85-4b5a-abcf-3e97528014db";
log.info("众信利民助贷-百行重新报送开始, newTime: {} , newDatenyr: {} ", LocalDateTime.now(), newDatenyr);
if(getRedisValStr(ZXLM_A1_INTERFACE_SEND)){
try {
redisTemplate.delete(ZXLM_A1_INTERFACE_SEND);
String result = HttpRequestUtil.doPostTool(send_A1_url, new HashMap<>());
log.info("众信利民助贷-百行重新报送A1结束, newTime: {} , newDatenyr: {} , result: {} ", LocalDateTime.now(), newDatenyr, result);
dingTalk.talk("Info", "众信利民助贷-重新报送 A1 结束", "("+newDatenyr+")"+result);
Thread.sleep(10*1000);//10秒
}catch (Exception e){
log.info("(众信利民助贷)重新报送A1异常, newTime: {} , newDatenyr: {} ", LocalDateTime.now(), newDatenyr, e);
dingTalk.talk_ToUser("众信利民助贷-重新报送 A1 异常", "("+newDatenyr+") A1报送异常,请尽快查看处理!");
}
}
if(getRedisValStr(ZXLM_D2_INTERFACE_SEND)){
try {
redisTemplate.delete(ZXLM_D2_INTERFACE_SEND);
String result = HttpRequestUtil.doPostTool(send_D2_url, new HashMap<>());
log.info("众信利民助贷-百行重新报送D2结束, newTime: {} , newDatenyr: {} , result: {} ", LocalDateTime.now(), newDatenyr, result);
dingTalk.talk("Info", "众信利民助贷-重新报送 D2 结束", "("+newDatenyr+")"+result);
Thread.sleep(10*1000);//10秒
}catch (Exception e){
log.info("(众信利民助贷)重新报送D2异常, newTime: {} , newDatenyr: {} ", LocalDateTime.now(), newDatenyr, e);
dingTalk.talk_ToUser("众信利民助贷-重新报送 D2 异常", "("+newDatenyr+") D2报送异常,请尽快查看处理!");
}
}
if(getRedisValStr(ZXLM_D3_INTERFACE_SEND)){
try {
redisTemplate.delete(ZXLM_D3_INTERFACE_SEND);
String result = HttpRequestUtil.doPostTool(send_D3_url, new HashMap<>());
log.info("众信利民助贷-百行重新报送D3结束, newTime: {} , newDatenyr: {} , result: {} ", LocalDateTime.now(), newDatenyr, result);
dingTalk.talk("Info", "众信利民助贷-重新报送 D2 结束", "("+newDatenyr+")"+result);
Thread.sleep(10*1000);//10秒
}catch (Exception e){
log.info("(众信利民助贷)重新报送D3异常, newTime: {} , newDatenyr: {} ", LocalDateTime.now(), newDatenyr, e);
dingTalk.talk_ToUser("众信利民助贷-重新报送 D3 异常", "("+newDatenyr+") D3报送异常,请尽快查看处理!");
}
}
log.info("众信利民助贷-百行重新报送结束, newDatenyr: {}, 耗时: {} ", newDatenyr, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
}
private Boolean increment(String key){
Long increment = redisTemplate.opsForValue().increment(key, 1);
return increment <= 1;
}
private void setRedisValStr(String key){
try {
redisTemplate.opsForValue().set(key, "true", 15, TimeUnit.MINUTES);
}catch (Exception e){
log.error("Redis中set值异常, key: {} ", key, e);
}
}
private boolean getRedisValStr(String key){
String value = null;
try {
value = redisTemplate.opsForValue().get(key);
}catch (Exception e){
log.error("Redis中get值异常, key: {} ", key, e);
}
if(StringUtils.isNotEmpty(value) && "true".equals(value)){
return true;
}else{
return false;
}
}
}
......@@ -514,7 +514,7 @@ public class BaiHangZhuDaiService {
* 创建人: yanhui.Hao <br/>
* 创建时间: 2019.10.29 <br/>
*/
public void sendHandApplyToBaiHang(boolean isReadFile,List<String> paramJsonStr) throws Exception {
public String sendHandApplyToBaiHang(boolean isReadFile,List<String> paramJsonStr) throws Exception {
Stopwatch sendWatch = Stopwatch.createStarted();
List<String> handApplys = null;
if(isReadFile){
......@@ -522,12 +522,13 @@ public class BaiHangZhuDaiService {
}else{
if(paramJsonStr==null || paramJsonStr.size()==0){
log.warn("众信利民助贷模式TO百行手动报送贷款申请错误, paramJsonStr is Null , isReadFile: {} ",isReadFile);
return;
return "众信利民助贷模式手动报送A1申请参数为空";
}else{
handApplys = paramJsonStr;
}
}
AtomicInteger succ_atomicInteger = new AtomicInteger();
for(int i=0;i<handApplys.size();i++){
try {
ApplyLoanInfoZhuDai applyInfo = new Gson().fromJson(handApplys.get(i), new TypeToken<ApplyLoanInfoZhuDai>(){}.getType());
......@@ -546,12 +547,19 @@ public class BaiHangZhuDaiService {
/*if (Objects.isNull(resultStr) || !(resultStr.contains("queryHistory") && resultStr.contains("nonRevolvingLoan") && resultStr.contains("revolvingLoan"))) {
log.info("量化派助贷TO百行报送-贷款申请返回结果不正确, loanId: {} ", applyInfo.getLoanId());
}*/
if (Objects.isNull(resultStr) || "success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
succ_atomicInteger.getAndIncrement();
}
log.info("众信利民助贷模式TO百行手动报送贷款申请记录 bean: {} , result: {} ", logJson, resultStr);
} catch (Exception e) {
log.error("百行征信助贷模式手动报送贷款申请记录异常, params: {} ", handApplys.get(i), e);
}
}
log.info("众信利民助贷模式TO百行手动报送贷款申请结束, 大小: {} , 耗时: {} ", handApplys.size(), ((sendWatch.stop().elapsed(TimeUnit.MILLISECONDS)/1000)+".s"));
return "众信利民助贷模式手动报送A1申请列表大小: "+handApplys.size()+" , 报送成功条数: "+succ_atomicInteger.get();
}
/**
......@@ -663,7 +671,7 @@ public class BaiHangZhuDaiService {
}
//D2手动报送,有账单日列表,和totalTerm
public void sendHandLoaInfoReportToBaiHang2(boolean isReadFile, List<String> paramJsonStr, String isSaveLogBean) throws Exception {
public String sendHandLoaInfoReportToBaiHang2(boolean isReadFile, List<String> paramJsonStr, String isSaveLogBean) throws Exception {
Stopwatch sendWatch = Stopwatch.createStarted();
List<String> handLoanInfos = null;
if(isReadFile){
......@@ -671,7 +679,7 @@ public class BaiHangZhuDaiService {
}else{
if(paramJsonStr==null || paramJsonStr.size()==0){
log.warn("众信利民助贷模式TO百行手动报送放款数据错误, paramJsonStr is Null , isReadFile: {} ",isReadFile);
return;
return "众信利民助贷模式手动报送D2参数为空";
}else{
handLoanInfos = paramJsonStr;
}
......@@ -682,6 +690,7 @@ public class BaiHangZhuDaiService {
is_saveLogBean = true;
}
AtomicInteger succ_atomicInteger = new AtomicInteger();
for(int i=0;i<handLoanInfos.size();i++){
try{
if(handLoanInfos.get(i).length()<30){
......@@ -753,6 +762,9 @@ public class BaiHangZhuDaiService {
loanInfo.setPid(interfaceUploadClient(loanInfo.getPid()));
String resultStr = iHttpService.postBaiHang(baiHangLoanInfoUrl, getHeader(), JSON.toJSONString(loanInfo));
if (Objects.isNull(resultStr) || "success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
succ_atomicInteger.getAndIncrement();
}
log.info("众信利民助贷模式TO百行手动报送放款记录 loanInfoReqId: {} , loanId: {} , bean: {} , result: {} ", loanInfoReqId, loanInfo.getLoanId(), logJson, resultStr);
}catch (Exception e){
......@@ -760,6 +772,8 @@ public class BaiHangZhuDaiService {
}
}
log.info("众信利民助贷模式TO百行手动报送放款记录结束, 大小: {} , 耗时: {} ", handLoanInfos.size(), ((sendWatch.stop().elapsed(TimeUnit.MILLISECONDS)/1000)+".s"));
return "众信利民助贷模式手动报送放款D2列表大小: "+handLoanInfos.size()+" , 报送成功条数: "+succ_atomicInteger.get();
}
/**
......@@ -769,7 +783,7 @@ public class BaiHangZhuDaiService {
* 创建人: yanhui.Hao <br/>
* 创建时间: 2019.10.29 <br/>
*/
public void sendHandRepaymentReportToBaiHang1(boolean isReadFile, List<String> paramJsonStr) throws Exception{
public String sendHandRepaymentReportToBaiHang1(boolean isReadFile, List<String> paramJsonStr) throws Exception{
Stopwatch sendWatch = Stopwatch.createStarted();
List<String> repaymentLoanInfos = null;
if(isReadFile){
......@@ -777,12 +791,13 @@ public class BaiHangZhuDaiService {
}else{
if(paramJsonStr==null || paramJsonStr.size()==0){
log.warn("众信利民助贷模式TO百行手动报送还款数据错误, paramJsonStr is Null , isReadFile: {} ",isReadFile);
return;
return "众信利民助贷模式手动报送D3还款参数为空";
}else{
repaymentLoanInfos = paramJsonStr;
}
}
AtomicInteger succ_atomicInteger = new AtomicInteger();
//log.info("众信利民助贷模式TO百行报送还款数据, {}", JSON.toJSONString(repaymentLoanInfos));
for(int i=0;i<repaymentLoanInfos.size();i++){
try {
......@@ -819,6 +834,9 @@ public class BaiHangZhuDaiService {
repaymentLoanInfo.setMobile(interfaceUploadClient(repaymentLoanInfo.getMobile()));
String resultStr = iHttpService.postBaiHang(baiHangRepayMentLoanInfoUrl, getHeader(), JSON.toJSONString(repaymentLoanInfo));
if (Objects.isNull(resultStr) || "success".equalsIgnoreCase(JSON.parseObject(resultStr).getString("status"))) {
succ_atomicInteger.getAndIncrement();
}
log.info("众信利民助贷模式TO百行手动报送还款记录 reqID: {} , bean: {} , result: {} ", repaymentLoanInfo.getReqID(), logJson, resultStr);
} catch (Exception e) {
......@@ -826,6 +844,8 @@ public class BaiHangZhuDaiService {
}
}
log.info("众信利民助贷模式TO百行手动报送还款记录结束, 大小: {} , 耗时: {} ", repaymentLoanInfos.size(), ((sendWatch.stop().elapsed(TimeUnit.MILLISECONDS)/1000)+".s"));
return "众信利民助贷模式手动报送D3还款列表大小: "+repaymentLoanInfos.size()+" , 报送成功条数: "+succ_atomicInteger.get();
}
//-----------------------------------------------存量整理---------------------------------------------------------------------
......
......@@ -5,7 +5,6 @@ import cn.quantgroup.report.config.aop.DistributedLock;
import cn.quantgroup.report.config.aop.Monitor;
import cn.quantgroup.report.config.aop.MonitorType;
import cn.quantgroup.report.domain.baihang.*;
import cn.quantgroup.report.domain.master.TransactionLogPO;
import cn.quantgroup.report.mapper.baihang.LoanInfoMapper;
import cn.quantgroup.report.mapper.master.ApplyLoanInfoDbMapper;
import cn.quantgroup.report.mapper.master.LoanInfoDbMapper;
......@@ -14,7 +13,6 @@ import cn.quantgroup.report.response.GlobalResponse;
import cn.quantgroup.report.service.CommonSuperService;
import cn.quantgroup.report.service.baihang.util.TuoMinUtils;
import cn.quantgroup.report.utils.ReadOrWriteTxt;
import cn.quantgroup.report.utils.StringUtil;
import cn.quantgroup.report.utils.commonutil.AesCrypto;
import cn.quantgroup.report.utils.commonutil.Base64;
import cn.quantgroup.report.utils.commonutil.MD5Util;
......@@ -30,13 +28,13 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.io.*;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
......@@ -69,6 +67,8 @@ public class ManualToolService implements CommonSuperService {
@Autowired
public LoanInfoDbMapper loanInfoDbMapper;
@Autowired
private RedisTemplate<String,String> redisTemplate;
......@@ -90,7 +90,8 @@ public class ManualToolService implements CommonSuperService {
@Monitor({MonitorType.EXCEPTION, MonitorType.FEE, MonitorType.HIT, MonitorType.RESULT})
@DistributedLock
public GlobalResponse sendBaiHangData(String p1, String p2, String p3, String p4, String p5, String secretKey, String isSend,String errorCode, String isProduct, String sendIncludeType) {
public Map<String,String> sendBaiHangData(String p1, String p2, String p3, String p4, String p5, String secretKey, String isSend,String errorCode, String isProduct, String sendIncludeType) {
Map<String,String> resultMap = new HashMap<>();
StringBuffer resultMsg = new StringBuffer();
log.info("ManualToolService.sendBaiHangData Start>>>>>>");
String base_path = "/home/quant_group/baihang-report/data";
......@@ -105,13 +106,16 @@ public class ManualToolService implements CommonSuperService {
String D3_url = "/manual/buquan/mainRepaymentLoanInfo";
if (StringUtils.isBlank(RSA_PRIVATEKEY)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误1");
return resultMap;
}
if (StringUtils.isBlank(secretKey)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误2");
return resultMap;
}
if (StringUtils.isAnyBlank(p1, p2, p3)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误3");
return resultMap;
}
try {
......@@ -121,27 +125,32 @@ public class ManualToolService implements CommonSuperService {
//p1为127.0.0.1时p4必须是ip,且和172.21.10.8的MDd一致校验
p1 = AesCrypto.decrypt(Base64.decode(p1.trim()), aes_key).trim();
if (!(MD5Util.verify48Md5(p1, P1_48MD5_01) || MD5Util.verify48Md5(p1, P1_48MD5_02))) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误4");
return resultMap;
}
p2 = AesCrypto.decrypt(Base64.decode(p2.trim()), aes_key).trim();
if (!MD5Util.verify48Md5(p2, P2_48MD5)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误5");
return resultMap;
}
p3 = AesCrypto.decrypt(Base64.decode(p3.trim()), aes_key).trim();
if (!MD5Util.verify48Md5(p3, P3_48MD5)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误6");
return resultMap;
}
//不是127.0.0.1时,p4不能为空
//if (MD5Util.verify48Md5(p1, P1_48MD5_01)) {
if (StringUtils.isBlank(p4)) {
return new GlobalResponse("1012", "参数错误");
resultMap.put("error","参数错误7");
return resultMap;
} else {
p4 = AesCrypto.decrypt(Base64.decode(p4.trim()), aes_key).trim();
}
//}
} catch (Exception e) {
log.error("参数解析错误.");
return new GlobalResponse("1012", "参数错误");
log.error("参数解析错误!", e);
resultMap.put("error","参数错误8");
return resultMap;
}
if (StringUtils.isEmpty(p5)) {
......@@ -191,7 +200,6 @@ public class ManualToolService implements CommonSuperService {
JSONArray jsonArray = JSONArray.parseArray(jsaonResult);
resultMsg.append("getReqIdByRemoteLog size=" + (jsonArray!=null ? jsonArray.size() : "null") );
resultMsg.append("|");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
boolean flag = false;
......@@ -208,14 +216,14 @@ public class ManualToolService implements CommonSuperService {
log.error("deal with reqIdByRemoteLog error!",e);
}finally {
if(!flag){
resultMsg.append("\n##OTHER ERRORCODE:" + jsonObj.toJSONString()+"##");
resultMsg.append("|##OTHER ERRORCODE:" + jsonObj.toJSONString()+"##");
log.info("ManualToolService OTHER ERRORCODE:" + jsonObj.toJSONString());
}
}
}
resultMsg.append("\n|reqIDList size=" + reqIDList.size() );
resultMsg.append("|reqIDList size=" + reqIDList.size() );
if (reqIDList.size() > 0) {//还款D3
if (reqIDList.size() > 0) { //还款D3
String[] recordIdArray = reqIDList.toArray(new String[reqIDList.size()]);
log.info("RepaymentLoanInfoDbMapper getReqIdByRemoteLog reqID to D3:" + JSON.toJSONString(recordIdArray));
List<RepaymentLoanInfoLog> tmpLogList = repaymentLoanInfoDbMapper.findByD3RecordId(recordIdArray);
......@@ -253,7 +261,7 @@ public class ManualToolService implements CommonSuperService {
}
if (loanIdList.size() > 0) {//放款D2 及 申请A1
if (loanIdList.size() > 0) { //放款D2 及 申请A1
List<LoanInfoZhuDai> loanInfoVoList = new ArrayList<LoanInfoZhuDai>();
String[] orderNoArray = loanIdList.toArray(new String[loanIdList.size()]);
......@@ -325,6 +333,8 @@ public class ManualToolService implements CommonSuperService {
resultMsg.append("|");
resultMsg.append("write A1 end.(local By shell)");
}
resultMap.put("json_sq_A1", "true");
//掉A1手动报送接口
if (httpSend) {
Map<String, Object> params = new HashMap<String, Object>();
......@@ -354,6 +364,8 @@ public class ManualToolService implements CommonSuperService {
resultMsg.append("|");
resultMsg.append("write D2 end.(local By shell)");
}
resultMap.put("json_fk_D2", "true");
//掉D2手动报送接口
if (httpSend) {
Map<String, Object> params = new HashMap<String, Object>();
......@@ -383,6 +395,8 @@ public class ManualToolService implements CommonSuperService {
resultMsg.append("|");
resultMsg.append("write D3 end.(local By shell)");
}
resultMap.put("json_hk_D3", "true");
//掉D3手动报送接口
if (httpSend) {
Map<String, Object> params = new HashMap<String, Object>();
......@@ -397,8 +411,6 @@ public class ManualToolService implements CommonSuperService {
resultMsg.append("还款D3 json_hk_D3 isEmpty.");
}
//退出登录
List<String> cmdList = new ArrayList<String>();
cmdList.add("echo '++CMD LAST++' \n\r");
......@@ -406,15 +418,43 @@ public class ManualToolService implements CommonSuperService {
cmdList.add("exit \n\r");
executeCommand.execute(cmdList, false);
return GlobalResponse.generate(resultMsg);
resultMap.put("success", resultMsg.toString());
return resultMap;
} else {
log.info("RepaymentLoanInfoDbMapper.getReqIdByRemoteLog redult isEmpty.");
return GlobalResponse.generate("百行征信手动报送,获取日志为空");
resultMap.put("success","百行征信手动报送,获取日志为空");
ArrayList<String> fileNameList = new ArrayList<>();
String logPath = base_path + "/" +p5;
try{
getAllFileName("D:\\JavaTeam\\test", fileNameList);
}catch (Exception e){
log.error("获取报送日志文件夹下文件异常, path: {} ", e);
}
boolean have_logFile = false;
if(fileNameList!=null && fileNameList.size()>0){
for (String name : fileNameList) {
if(StringUtils.isNotEmpty(name) && name.endsWith(".log")
&& !name.endsWith("_logicerror.log") && !name.endsWith("_inputerror.log")){
have_logFile = true;
}
}
}
if(!have_logFile){
resultMap.put("alarm","反馈日志主文件不存在,请注意确认");
}
return resultMap;
}
}
} catch (Exception e) {
log.error("ManualToolService.sendBaiHangData Error,", e);
return new GlobalResponse("1001", "百行征信手动报送异常," + e.getMessage());
resultMap.put("error", "百行征信手动报送异常"+e.getMessage());
return resultMap;
} finally {
if (executeCommand != null) {
executeCommand.ioclose();
......@@ -428,7 +468,8 @@ public class ManualToolService implements CommonSuperService {
}
}
log.info("ManualToolService.sendBaiHangData All END<<<<<<");
return new GlobalResponse("1000", "百行征信手动报送失败");
resultMap.put("error","百行征信手动报送失败");
return resultMap;
}
/**
......@@ -2126,6 +2167,39 @@ public class ManualToolService implements CommonSuperService {
}
public void deleteRedisKey(String key1, String key2, String key3) {
String full_rediskey = "";
if (StringUtils.isNotEmpty(key1)) {
full_rediskey += key1;
}
if (StringUtils.isNotEmpty(key2)) {
full_rediskey += key2;
}
if (StringUtils.isNotEmpty(key3)) {
full_rediskey += key3;
}
redisTemplate.delete(full_rediskey);
log.info("删除RedisKey成功, key1: {} , key2: {} , key3: {} , full_rediskey: {} ", key1, key2, key3, full_rediskey);
}
public String getRedisVal(String key) {
Map<String,Object> map = new HashMap<>();
map.put("key",key);
if(StringUtils.isBlank(key)){
return JSONObject.toJSONString(map);
}
try{
String value = redisTemplate.opsForValue().get(key);
Long expire = redisTemplate.getExpire(key);
map.put("value",value);
map.put("expire", expire);
}catch (Exception e){
log.error("获取redis里值异常, key: {} ", key, e);
}
return map.toString();
}
private static void build_newkey_oldKey() {
try{
......@@ -3232,6 +3306,78 @@ public class ManualToolService implements CommonSuperService {
}
private static void d3_build_20200309() {
//String sql = "select * from repayment_loan_info_zhudai r where r.created_at >= DATE_FORMAT('2020-03-09 00:04:00','%Y-%m-%d %H:%i:%s') and r.loan_id='##loan_id##' and r.term_no=##term_no## UNION All ";
String sql = "select * from repayment_loan_info r where r.created_at >= DATE_FORMAT('2020-03-09 00:04:00','%Y-%m-%d %H:%i:%s') and r.loan_id='##loan_id##' and r.term_no=##term_no## UNION All ";
try{
//String path = "C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\助贷\\D3_20200308_20200309_huankuan.txt";
String path = "C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\广达\\还款D3_896.txt";
List<String> d3JsonList_hk = ReadOrWriteTxt.readTxtList(path);
log.info("d3_build_manua() files d3JsonList_hk size="+d3JsonList_hk.size());
for(int i=0; i<d3JsonList_hk.size(); i++){
String jsonStr = d3JsonList_hk.get(i).trim();
if(jsonStr.length()<30){
continue;
}
//log.info("ST:"+i);
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(sql.replace("##loan_id##",jsonObject.getString("loanId")).replace("##term_no##",jsonObject.getString("termNo")));
}
log.info("d3_build_manua() All D3还款 LOG:保存记录结束");
}catch (Exception e){
log.error("d3_build_manua()处理还款记录异常!", e);
}
}
private static void d3_build_20200309_ok() {
try{
String path2 = "C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\广达\\误报逾期_403.txt";
List<String> jsonList_1 = ReadOrWriteTxt.readTxtList(path2);
HashMap<String,String> map_recordId = new HashMap<>();
for(String str : jsonList_1){
String[] arry = str.trim().split("[|]");
map_recordId.put(arry[1]+"|"+arry[2], arry[0]);
}
log.info("d3_build_manua() read files jsonList_1 size:{} , map_recordId siez:{} ", jsonList_1.size(), map_recordId.size());
String path = "C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\广达\\还款D3_896.txt";
List<String> d3JsonList_hk = ReadOrWriteTxt.readTxtList(path);
log.info("d3_build_manua() files d3JsonList_hk size="+d3JsonList_hk.size());
for(int i=0; i<d3JsonList_hk.size(); i++){
String jsonStr = d3JsonList_hk.get(i).trim();
if(jsonStr.length()<30){
continue;
}
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
String key = jsonObject.getString("loanId") + "|" + jsonObject.getString("termNo");
if(map_recordId.containsKey(key)){
jsonObject.put("recordId",map_recordId.get(key));
jsonObject.put("opCode","M");
FileUtils.write(new File("C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\广达\\D3_M.txt"), JSON.toJSONString(jsonObject)+"\n", "UTF-8", true);
map_recordId.remove(key);
}else{
jsonObject.put("recordId", UUID.randomUUID().toString().replaceAll("-", ""));
jsonObject.put("opCode","A");
FileUtils.write(new File("C:\\Users\\Administrator\\Desktop\\百行漏报2020-03-09\\广达\\D3_A.txt"), JSON.toJSONString(jsonObject)+"\n", "UTF-8", true);
}
}
log.info("d3_build_manua() All D3还款 LOG:保存记录结束");
}catch (Exception e){
log.error("d3_build_manua()处理还款记录异常!", e);
}
}
public static void main33(String[] args) {
// List<String> lineList = ReadOrWriteTxt.readTxtList("D:\\用户目录\\Downloads\\D2_M_01.txt");
......@@ -3318,11 +3464,52 @@ public class ManualToolService implements CommonSuperService {
//d3_build_manua();
//checkTGd3_build();
application_build();
//application_build();
//check_application();
}
/**
* 获取某个文件夹下的所有文件
*
* @param fileNameList 存放文件名称的list
* @param path 文件夹的路径
* @return
*/
private static void getAllFileName(String path, ArrayList<String> fileNameList) {
boolean flag = false;
File file = new File(path);
File[] tempList = file.listFiles();
if(tempList==null || tempList.length<=0){
return;
}
for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
fileNameList.add(tempList[i].getName());
}
if (tempList[i].isDirectory()) {
getAllFileName(tempList[i].getAbsolutePath(),fileNameList);
}
}
return;
}
public static void main(String[] args) {
//d3_build_20200309();
//d3_build_20200309_ok();
ArrayList<String> fileNameList = new ArrayList<>();
getAllFileName("D:\\JavaTeam\\test", fileNameList);
for (String name: fileNameList) {
System.out.println(name);
}
}
......
......@@ -825,5 +825,36 @@ public class HttpRequestUtil {
}
}
public static String doPostTool(String apiUrl, Map<String, Object> params) {
String result = "";
httpClient = getHttpClient();
HttpPost httpPost = new HttpPost(apiUrl);
try {
List<NameValuePair> pairList = new ArrayList<>(params.size());
for (Map.Entry<String, Object> entry : params.entrySet()) {
NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry
.getValue().toString());
pairList.add(pair);
}
httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
HttpResponse response = httpClient.execute(httpPost);
//int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity);
EntityUtils.consume(entity);
} catch (IOException e) {
log.error("doPostTool请求apiUrl: " + apiUrl + "请求失败", e);
throw new QGException(QGExceptionType.COMMON_THIRD_PART_CALL_EXCEPTION, e.toString() + ";url:" + apiUrl);
} finally {
httpPost.releaseConnection();
}
return result;
}
}
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