Commit d12c020b authored by haoyanhui's avatar haoyanhui

工具方法20200606

parent dd855d1f
......@@ -353,4 +353,24 @@ public class ExZhuDaiBaiHangReSendController {
return "d3_build2任务调度失败,参数错误";
}
}
@RequestMapping("/manual/d3_build_err_D3_002")
public String d3_build_err_D3_002(String p3,String secretKey, String filePath){
if(manualToolService.checkSecretKey(p3,secretKey)){
baiHangZhuDaiService.d3_build_err_D3_002(filePath);
return "d3_build_err_D3_002任务调度完成";
}else{
return "d3_build_err_D3_002任务调度失败,参数错误";
}
}
@RequestMapping("/manual/d3_build_err_D3_041")
public String d3_build_err_D3_041(String p3,String secretKey, String filePath){
if(manualToolService.checkSecretKey(p3,secretKey)){
baiHangZhuDaiService.d3_build_err_D3_041(filePath);
return "d3_build_err_D3_041任务调度完成";
}else{
return "d3_build_err_D3_041任务调度失败,参数错误";
}
}
}
......@@ -1850,7 +1850,7 @@ public class BaiHangZhuDaiService {
}
private void wirteFile(String fileName, String jsonStr){
private static void wirteFile(String fileName, String jsonStr){
try {
FileUtils.write(new File(fileName), jsonStr, "UTF-8", true);
} catch (IOException e) {
......@@ -2312,4 +2312,282 @@ public class BaiHangZhuDaiService {
log.info("d3_build2写数据记录结束, 文件:{} ,list大小:{} , 保存成功:{} ", filePath, fsize, saveCount);
}
//2020.06.06 去掉空格
private static void d3_build_my(String filePath, String writeFilePath) {
long starUtc = System.currentTimeMillis();
List<String> d3InfosList = null;
try {
d3InfosList = FileUtils.readLines(new File(filePath), "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
log.info("d3_build2读取文件: {} , 大小: {} , 耗时: {} ", filePath, d3InfosList.size(), (System.currentTimeMillis()-starUtc));
StringBuffer buff = new StringBuffer();
String tmpStr = "";
for(int i=0; i< d3InfosList.size(); i++){
//String tmp = d3InfosList.get(i);
//buff.append(tmp);
tmpStr=tmpStr+d3InfosList.get(i).trim();
}
d3InfosList = null;
//String tmpStr = buff.toString().replace("\n", "");
//System.out.printf(buff.toString());
JSONArray array = JSONArray.parseArray(tmpStr);
buff = null;
int fsize = array.size();
for(int i=0; i< fsize; i++){
String strJson = array.get(i).toString();
try{
if(strJson.length() < 30 ){//#singleLoanRepayInfo
log.warn("d3InfosList筛选文件内容时发现数据错误, 文件: {} , 内容: {} ", filePath, strJson);
continue;
}
//RepaymentInfoZhuDai repaymentLoanInfo = new Gson().fromJson(strJson, new TypeToken<RepaymentInfoZhuDai>(){}.getType());
wirteFile(writeFilePath, strJson+"\r\n");
}catch (Exception e){
log.error("d3_build2写数据记录失败, fileName: {} , DATA: {} , 第i: {} ", filePath, strJson, i, e);
}
log.info("d3_build2写数据记录结束, 第i: {} <<<", i);
}
log.info("d3_build2写数据记录结束, 文件:{} ,list大小:{} , 保存成功:{} ", filePath, fsize);
}
//2020.06.06 修复D3_002
@Async
public String d3_build_err_D3_002(String filePath) {
//写入文件的路径和前缀
String writeFilePath = "";
String file_= "";
if(filePath.lastIndexOf("/")!=-1){//linux
writeFilePath = filePath.substring(0,filePath.lastIndexOf("/")) + "/build20200606";
file_ = filePath.substring(filePath.lastIndexOf("/"), filePath.lastIndexOf("."));
}else{//windows
writeFilePath = filePath.substring(0,filePath.lastIndexOf("\\")) + "\\build20200606";
file_ = filePath.substring(filePath.lastIndexOf("\\"), filePath.lastIndexOf("."));
}
long starUtc = System.currentTimeMillis();
// 25430 "errorDetail":[{"errorCode":"D3_002","errorMsg":"“还款状态确认时间”应早于等于记录生成时间(uploadTs)。"}]}
String SQL_QUERY_D3_log = " select d3.* from repayment_loan_info_zhudai d3 " +
" join tmp_d3_bh_send_log err on d3.record_id=err.req_id and err.op_code='M' and err.errorCode='D3_002' " +
" where d3.created_at > '2020-06-04 21:50:00' and d3.created_at < '2020-06-05 00:00:00' " +
" and d3.op_code='M' " +
" and d3.term_status='normal'; ";
List<RepaymentInfoZhuDai> logBeanList = riskDatasourceJdbcTemplate.query(SQL_QUERY_D3_log, new Object[]{}, new RowMapper<RepaymentInfoZhuDai>() {
@Override
public RepaymentInfoZhuDai mapRow(ResultSet rs, int rowNum) throws SQLException {
RepaymentInfoZhuDai bean = new RepaymentInfoZhuDai();
bean.setRecordId(rs.getString("record_id"));
bean.setReqID(rs.getString("req_id"));
bean.setName(rs.getString("name"));
bean.setPid(rs.getString("pid"));
bean.setMobile(rs.getString("mobile"));
bean.setOpCode(rs.getString("op_code"));
bean.setUploadTs(rs.getString("upload_ts"));
bean.setLoanId(rs.getString("loan_id"));
bean.setTermNo(rs.getInt("term_no"));
bean.setTermStatus(rs.getString("term_status"));
bean.setTargetRepaymentDate(rs.getString("target_repayment_date"));
bean.setRealRepaymentDate(rs.getString("real_repayment_date"));
bean.setPlannedPayment(rs.getBigDecimal("planned_payment"));
bean.setTargetRepayment(rs.getBigDecimal("target_repayment"));
bean.setRealRepayment(rs.getBigDecimal("real_repayment"));
bean.setOverdueAmount(rs.getBigDecimal("overdue_amount"));
bean.setRemainingAmount(rs.getBigDecimal("remaining_amount"));
bean.setOverdueStatus(rs.getString("overdue_status"));
bean.setLoanStatus(rs.getInt("loan_status"));
bean.setStatusConfirmAt(rs.getString("status_confirm_at"));
return bean;
}
});
int fsize = logBeanList.size();
log.info("查询数据库结束err_D3_002, SQL: {} , 大小: {} , 耗时: {} ", filePath, fsize, (System.currentTimeMillis()-starUtc));
String sql_d3_max_statusConfirmAt = " select max(d3.status_confirm_at) as status_confirm_at from repayment_loan_info_zhudai d3 where d3.loan_id=?; ";
for(int i=0; i< fsize; i++){
RepaymentInfoZhuDai repaymentLoanInfo = logBeanList.get(i);
String str_statusConfirmAt = repaymentLoanInfo.getStatusConfirmAt();
LocalDateTime loca_statusConfirmAt = LocalDateTime.parse(str_statusConfirmAt);
if(repaymentLoanInfo.getLoanStatus()==3){
try {
List<RepaymentInfoZhuDai> d3_log_maxList = riskDatasourceJdbcTemplate.query(sql_d3_max_statusConfirmAt, new Object[]{repaymentLoanInfo.getLoanId()}, new RowMapper<RepaymentInfoZhuDai>() {
@Override
public RepaymentInfoZhuDai mapRow(ResultSet rs, int rowNum) throws SQLException {
RepaymentInfoZhuDai bean = new RepaymentInfoZhuDai();
bean.setStatusConfirmAt(rs.getString("status_confirm_at"));
return bean;
}
});
if(d3_log_maxList!=null && d3_log_maxList.size()>0){
String max_str_statusConfirmAt = d3_log_maxList.get(0).getStatusConfirmAt();
LocalDateTime max_loca_statusConfirmAt = LocalDateTime.parse(max_str_statusConfirmAt);
if (max_loca_statusConfirmAt.compareTo(loca_statusConfirmAt) > 0) {
log.warn("err_D3_002根据LoanId查询status_confirm_at结束, 原sca: {} , maxsca: {} , LoanId: {} , termNo: {} ", str_statusConfirmAt, max_str_statusConfirmAt, repaymentLoanInfo.getLoanId(), repaymentLoanInfo.getTermNo());
str_statusConfirmAt = max_str_statusConfirmAt;
}
}
}catch (Exception e){
log.error("err_D3_002根据LoanId查询status_confirm_at异常, 原bean:{} ", JSONObject.toJSONString(repaymentLoanInfo), e);
}
}
repaymentLoanInfo.setStatusConfirmAt(str_statusConfirmAt);
repaymentLoanInfo.setUploadTs(str_statusConfirmAt);
//原始文件
this.wirteFile(writeFilePath + file_+ "_Err_D3_002_saveLog.txt", JSON.toJSONString(repaymentLoanInfo)+"\r\n");
//要报送的文件
repaymentLoanInfo.setReqID(repaymentLoanInfo.getRecordId());
repaymentLoanInfo.setRecordId(null);
this.wirteFile(writeFilePath + file_+ "_Err_D3_002_ok.txt", JSON.toJSONString(repaymentLoanInfo)+"\r\n");
log.info("err_D3_002处理i"+i);
}
return "err_D3_002根据处理数据结束";
}
//2020.06.06 修复D3_041
@Async
public String d3_build_err_D3_041(String filePath) {
//写入文件的路径和前缀
String writeFilePath = "";
String file_= "";
if(filePath.lastIndexOf("/")!=-1){//linux
writeFilePath = filePath.substring(0,filePath.lastIndexOf("/")) + "/build20200606";
file_ = filePath.substring(filePath.lastIndexOf("/"), filePath.lastIndexOf("."));
}else{//windows
writeFilePath = filePath.substring(0,filePath.lastIndexOf("\\")) + "\\build20200606";
file_ = filePath.substring(filePath.lastIndexOf("\\"), filePath.lastIndexOf("."));
}
long starUtc = System.currentTimeMillis();
//11499 "errorDetail":{"errorCode":"D3_041","errorMsg":"贷款账户编号+还款期数+还款状态确认时间+业务发生机构代码在还款记录中唯一。"}]}
String SQL_QUERY_D3_log = " select d3.* from repayment_loan_info_zhudai d3 " +
" join tmp_d3_bh_send_log err on d3.record_id=err.req_id and err.op_code='M' and err.errorCode='D3_041' " +
" where d3.created_at > '2020-06-04 21:50:00' and d3.created_at < '2020-06-05 00:00:00' " +
" and d3.op_code='M' " +
" and d3.term_status='normal' and d3.loan_status=3; ";
List<RepaymentInfoZhuDai> logBeanList = riskDatasourceJdbcTemplate.query(SQL_QUERY_D3_log, new Object[]{}, new RowMapper<RepaymentInfoZhuDai>() {
@Override
public RepaymentInfoZhuDai mapRow(ResultSet rs, int rowNum) throws SQLException {
RepaymentInfoZhuDai bean = new RepaymentInfoZhuDai();
bean.setRecordId(rs.getString("record_id"));
bean.setReqID(rs.getString("req_id"));
bean.setName(rs.getString("name"));
bean.setPid(rs.getString("pid"));
bean.setMobile(rs.getString("mobile"));
bean.setOpCode(rs.getString("op_code"));
bean.setUploadTs(rs.getString("upload_ts"));
bean.setLoanId(rs.getString("loan_id"));
bean.setTermNo(rs.getInt("term_no"));
bean.setTermStatus(rs.getString("term_status"));
bean.setTargetRepaymentDate(rs.getString("target_repayment_date"));
bean.setRealRepaymentDate(rs.getString("real_repayment_date"));
bean.setPlannedPayment(rs.getBigDecimal("planned_payment"));
bean.setTargetRepayment(rs.getBigDecimal("target_repayment"));
bean.setRealRepayment(rs.getBigDecimal("real_repayment"));
bean.setOverdueAmount(rs.getBigDecimal("overdue_amount"));
bean.setRemainingAmount(rs.getBigDecimal("remaining_amount"));
bean.setOverdueStatus(rs.getString("overdue_status"));
bean.setLoanStatus(rs.getInt("loan_status"));
bean.setStatusConfirmAt(rs.getString("status_confirm_at"));
return bean;
}
});
int fsize = logBeanList.size();
log.info("查询数据库结束err_D3_041, SQL: {} , 大小: {} , 耗时: {} ", filePath, fsize, (System.currentTimeMillis()-starUtc));
String sql_d3_back_log = " select DISTINCT d3.record_id from repayment_loan_info_zhudai d3 where d3.loan_id=? and d3.term_no=? and d3.status_confirm_at=? and d3.op_code=? ; ";
String sql_d3_max_statusConfirmAt = " select max(d3.status_confirm_at) as status_confirm_at from repayment_loan_info_zhudai d3 where d3.loan_id=?; ";
for(int i=0; i< fsize; i++){
RepaymentInfoZhuDai repaymentLoanInfo = logBeanList.get(i);
Object[] objects = {repaymentLoanInfo.getLoanId(), repaymentLoanInfo.getTermNo(), repaymentLoanInfo.getStatusConfirmAt(), 'A'};
String back_log_record_id = null;
try {
List<RepaymentInfoZhuDai> d3_log_maxList = riskDatasourceJdbcTemplate.query(sql_d3_back_log, objects, new RowMapper<RepaymentInfoZhuDai>() {
@Override
public RepaymentInfoZhuDai mapRow(ResultSet rs, int rowNum) throws SQLException {
RepaymentInfoZhuDai bean = new RepaymentInfoZhuDai();
bean.setStatusConfirmAt(rs.getString("record_id"));
return bean;
}
});
if(d3_log_maxList!=null && d3_log_maxList.size()==1){
back_log_record_id = d3_log_maxList.get(0).getRecordId();
}
if(StringUtils.isEmpty(back_log_record_id)){
log.warn("根据贷款账户编号+还款期数+还款状态确认时间查询record_id为空或size不是1, 大小: {} , sql: {} , params: {} ", d3_log_maxList!=null?d3_log_maxList.size():0, sql_d3_back_log, JSON.toJSONString(objects));
this.wirteFile(writeFilePath + file_+ "_Err_D3_041_Find_RecordId_err.txt", JSON.toJSONString(repaymentLoanInfo)+"\r\n");
continue;
}
}catch (Exception e){
log.error("根据贷款账户编号+还款期数+还款状态确认时间查询record_id异常, 原bean:{} ", JSONObject.toJSONString(repaymentLoanInfo), e);
continue;
}
log.info("根据贷款账户编号+还款期数+还款状态确认时间查询record_id, 原ecord_id:{} , 查:{} ", repaymentLoanInfo.getRecordId(), back_log_record_id);
repaymentLoanInfo.setRecordId(back_log_record_id);
String str_statusConfirmAt = repaymentLoanInfo.getStatusConfirmAt();
LocalDateTime loca_statusConfirmAt = LocalDateTime.parse(str_statusConfirmAt);
try {
List<RepaymentInfoZhuDai> d3_log_maxList = riskDatasourceJdbcTemplate.query(sql_d3_max_statusConfirmAt, new Object[]{repaymentLoanInfo.getLoanId()}, new RowMapper<RepaymentInfoZhuDai>() {
@Override
public RepaymentInfoZhuDai mapRow(ResultSet rs, int rowNum) throws SQLException {
RepaymentInfoZhuDai bean = new RepaymentInfoZhuDai();
bean.setStatusConfirmAt(rs.getString("status_confirm_at"));
return bean;
}
});
if(d3_log_maxList!=null && d3_log_maxList.size()>0){
String max_str_statusConfirmAt = d3_log_maxList.get(0).getStatusConfirmAt();
LocalDateTime max_loca_statusConfirmAt = LocalDateTime.parse(max_str_statusConfirmAt);
if (max_loca_statusConfirmAt.compareTo(loca_statusConfirmAt) > 0) {
log.warn("Err_D3_041根据LoanId查询status_confirm_at结束, 原sca: {} , maxsca: {} , LoanId: {} , termNo: {} ", str_statusConfirmAt, max_str_statusConfirmAt, repaymentLoanInfo.getLoanId(), repaymentLoanInfo.getTermNo());
str_statusConfirmAt = max_str_statusConfirmAt;
}
}
}catch (Exception e){
log.error("Err_D3_041根据LoanId查询status_confirm_at异常, 原bean:{} ", JSONObject.toJSONString(repaymentLoanInfo), e);
}
repaymentLoanInfo.setStatusConfirmAt(str_statusConfirmAt);
repaymentLoanInfo.setUploadTs(str_statusConfirmAt);
//原始文件
this.wirteFile(writeFilePath + file_+ "_Err_D3_041_saveLog.txt", JSON.toJSONString(repaymentLoanInfo)+"\r\n");
//要报送的文件
repaymentLoanInfo.setReqID(repaymentLoanInfo.getRecordId());
repaymentLoanInfo.setRecordId(null);
this.wirteFile(writeFilePath + file_+ "_Err_D3_041_ok.txt", JSON.toJSONString(repaymentLoanInfo)+"\r\n");
log.info("Err_D3_041处理i"+i);
}
return "Err_D3_041根据处理数据结束";
}
public static void main(String[] args) {
d3_build_my("C:\\Users\\Administrator\\Desktop\\d3_M.json", "C:\\Users\\Administrator\\Desktop\\d3_M_ok.txt");
}
}
......@@ -3644,6 +3644,45 @@ public class ManualToolService implements CommonSuperService {
}
}
private static void buildSql_tmp_d3_bh_send_log(String filePath, String writePath, String op_code, String send_time) {
try{
List<String> d3JsonList_hk = FileUtils.readLines(new File(filePath), "utf-8");
log.info("build_d3_reqId_20200604() read files jsonList_1 size:{} ", d3JsonList_hk.size());
//String tmpSql = "INSERT INTO `tmp_d3_bh_send_log` (`req_id`, `errorCode`, `op_code`, `send_time`) VALUES ('111', 'D3_11', 'A', '2020060101');";
//String tmpSql = "'111', 'D3_11', 'A', '2020060101');";
for(int i=0; i<d3JsonList_hk.size(); i++){
String jsonStr = d3JsonList_hk.get(i).trim();
if(jsonStr.length()<30){
continue;
}
JSONObject logBean = JSONObject.parseObject(jsonStr);
StringBuffer sqlbff = new StringBuffer();
sqlbff.append("INSERT INTO `tmp_d3_bh_send_log` (`req_id`, `errorCode`, `op_code`, `send_time`) VALUES (");
sqlbff.append("'").append(logBean.getString("reqID")).append("',");
JSONObject errorDetail = (JSONObject)logBean.getJSONArray("errorDetail").get(0);
sqlbff.append("'").append(errorDetail.getString("errorCode")).append("',");
sqlbff.append("'").append(op_code).append("',");
sqlbff.append("'").append(send_time).append("'");
sqlbff.append(");");
if(i%1000==0){
sqlbff.append("COMMIT;");
}
FileUtils.write(new File(writePath), sqlbff.toString()+"\r\n", "UTF-8", true);
log.info("执行结束"+i);
}
log.info("build_d3_reqId_20200604() All D3还款 LOG:保存记录结束");
}catch (Exception e){
log.error("build_d3_reqId_20200604()处理还款记录异常!", e);
}
}
public static void main(String[] args) {
//d3_build_20200309();
//d3_build_20200309_ok();
......@@ -3660,7 +3699,10 @@ public class ManualToolService implements CommonSuperService {
// bairong_ziduab_build();
build_d3_reqId_20200604("D:\\用户目录\\Downloads\\tmp_ok\\", "all_D3_20191225_20200601_06_M.txt", "all_D3_20191225_20200601_06_M_ok.txt");
//build_d3_reqId_20200604("D:\\用户目录\\Downloads\\tmp_ok\\", "all_D3_20191225_20200601_06_M.txt", "all_D3_20191225_20200601_06_M_ok.txt");
// buildSql_tmp_d3_bh_send_log("C:\\Users\\Administrator\\Desktop\\百行报送\\0601报送日志\\北京众信利民信息技术有限公司_D3_20200601_0001_logicerror.log", "C:\\Users\\Administrator\\Desktop\\百行报送\\0601报送日志\\D3_20200601_0001_logicerror.sql", "A", "2020060101");
buildSql_tmp_d3_bh_send_log("C:\\Users\\Administrator\\Desktop\\百行报送\\0601报送日志\\北京众信利民信息技术有限公司_D3_20200601_0002_logicerror.log", "C:\\Users\\Administrator\\Desktop\\百行报送\\0601报送日志\\D3_20200601_0002_logicerror.sql", "M", "2020060101");
}
......
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