|
|
|
|
@ -1,299 +0,0 @@
|
|
|
|
|
package com.nmg.gs.test;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
|
|
import com.nmg.gs.common.emnu.Constant;
|
|
|
|
|
import com.nmg.gs.common.utils.DateTimeUtil;
|
|
|
|
|
import com.nmg.gs.common.utils.MyOkHttpUtil;
|
|
|
|
|
import com.nmg.gs.common.utils.NewFileUtils;
|
|
|
|
|
import com.nmg.gs.common.utils.SignUtil;
|
|
|
|
|
import com.nmg.gs.common.utils.UnzipUtil;
|
|
|
|
|
import com.nmg.gs.entity.GDCpcPayInfo;
|
|
|
|
|
import com.nmg.gs.entity.Signature;
|
|
|
|
|
import com.nmg.gs.entity.Summary;
|
|
|
|
|
import okhttp3.HttpUrl;
|
|
|
|
|
import okhttp3.OkHttpClient;
|
|
|
|
|
import okhttp3.Request;
|
|
|
|
|
import okhttp3.Response;
|
|
|
|
|
import org.apache.commons.io.FileUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.util.ResourceUtils;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
import java.sql.DriverManager;
|
|
|
|
|
import java.sql.PreparedStatement;
|
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author: shuguang
|
|
|
|
|
* @date: 2025年04月18日 14:50
|
|
|
|
|
* @description:
|
|
|
|
|
*/
|
|
|
|
|
public class Test02 {
|
|
|
|
|
private static final String VERIFY_INTERFACE_URL = "https://openapi.mtuoluo.com/api/dcpc/user";
|
|
|
|
|
private static final String GET_FILE_INTERFACE_URL = "https://openapi.mtuoluo.com/api/dcpc/billCheck";
|
|
|
|
|
private static final String DB_URL = "jdbc:oracle:thin:@10.15.0.12:1521/ORCL";
|
|
|
|
|
private static final String DB_USER = "nmgjtjt";
|
|
|
|
|
private static final String DB_PASSWORD = "sysadmin";
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
// 设置时间范围
|
|
|
|
|
String startDate = "2025-04-18";
|
|
|
|
|
String endDate = "2025-04-18";
|
|
|
|
|
|
|
|
|
|
// 将日期字符串转换为日期对象
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
Date start;
|
|
|
|
|
Date end;
|
|
|
|
|
try {
|
|
|
|
|
start = sdf.parse(startDate);
|
|
|
|
|
end = sdf.parse(endDate);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查开始日期是否小于结束日期
|
|
|
|
|
if (start.after(end)) {
|
|
|
|
|
System.out.println("开始日期不能大于结束日期");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 在指定的时间范围内循环
|
|
|
|
|
while (start.before(end) || start.equals(end)) {
|
|
|
|
|
String queryDate = sdf.format(start);
|
|
|
|
|
System.out.println("查询日期:" + queryDate);
|
|
|
|
|
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
|
|
|
|
|
String encryptTimestamp = SignUtil.generateSign(timestamp);
|
|
|
|
|
|
|
|
|
|
// 构建包含查询参数的URL
|
|
|
|
|
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(VERIFY_INTERFACE_URL)).newBuilder();
|
|
|
|
|
urlBuilder.addQueryParameter("timestamp", timestamp);
|
|
|
|
|
String requestUrl = urlBuilder.build().toString();
|
|
|
|
|
|
|
|
|
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
System.out.println("请求地址:" + requestUrl);
|
|
|
|
|
System.out.println("timestamp: " + timestamp);
|
|
|
|
|
System.out.println("app-key: " + Constant.APP_KEY);
|
|
|
|
|
System.out.println("signature: " + encryptTimestamp);
|
|
|
|
|
|
|
|
|
|
Request request = new Request.Builder()
|
|
|
|
|
.url(requestUrl)
|
|
|
|
|
.method("GET", null)
|
|
|
|
|
.addHeader("app-key", Constant.APP_KEY)
|
|
|
|
|
.addHeader("signature", encryptTimestamp)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
try (Response response = client.newCall(request).execute()) {
|
|
|
|
|
if (!response.isSuccessful()) {
|
|
|
|
|
System.out.println(response.code());
|
|
|
|
|
throw new IOException("返回码 " + response.code());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String responseData = Objects.requireNonNull(response.body()).string();
|
|
|
|
|
|
|
|
|
|
// 检查返回数据是否为 JSON 格式
|
|
|
|
|
if (!isJson(responseData)) {
|
|
|
|
|
System.out.println(responseData);
|
|
|
|
|
throw new IOException("返回数据格式错误,返回内容:" + responseData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println("验签接口返回response:" + responseData);
|
|
|
|
|
System.out.println("==============================================");
|
|
|
|
|
|
|
|
|
|
Signature signature = JSON.parseObject(responseData, Signature.class);
|
|
|
|
|
if (signature.getCode().equals(Constant.INT_10000)) {
|
|
|
|
|
// 设置请求的URL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置文件保存的目录
|
|
|
|
|
String saveDirectory = "D:\\downTest\\DownloadFilePath\\";
|
|
|
|
|
String unzip = "D:\\downTest\\DownloadFilePath\\unzip\\";
|
|
|
|
|
|
|
|
|
|
System.out.println("获取文件接口地址:" + GET_FILE_INTERFACE_URL);
|
|
|
|
|
|
|
|
|
|
// 调用工具类方法下载文件
|
|
|
|
|
String fileName = MyOkHttpUtil.downloadFile(GET_FILE_INTERFACE_URL, timestamp, queryDate, saveDirectory);
|
|
|
|
|
|
|
|
|
|
if (fileName != null) {
|
|
|
|
|
System.out.println("下载的文件名:" + fileName);
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("文件下载失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<String> jsonPathList = unzipFile(saveDirectory, unzip, fileName);
|
|
|
|
|
Summary summary = null;
|
|
|
|
|
List<GDCpcPayInfo> detailList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (jsonPathList.size() > 0) {
|
|
|
|
|
for (String jsonPath : jsonPathList) {
|
|
|
|
|
File file2 = ResourceUtils.getFile(jsonPath);
|
|
|
|
|
String json = FileUtils.readFileToString(file2, Constant.UTF_8);
|
|
|
|
|
if (jsonPath.contains("summary")) {
|
|
|
|
|
// 解析 Summary 对象
|
|
|
|
|
summary = JSON.parseObject(json, Summary.class);
|
|
|
|
|
} else if (jsonPath.contains("detail")) {
|
|
|
|
|
// 解析 GDCpcPayInfo 列表
|
|
|
|
|
List<GDCpcPayInfo> details = JSON.parseArray(json, GDCpcPayInfo.class);
|
|
|
|
|
if (details != null) {
|
|
|
|
|
detailList.addAll(details);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
System.out.println(summary);
|
|
|
|
|
System.out.println(detailList.size());
|
|
|
|
|
if (StringUtils.isNotBlank(fileName)) {
|
|
|
|
|
// 入库操作
|
|
|
|
|
insertGdCpcPayInfo(summary, detailList, fileName);
|
|
|
|
|
}
|
|
|
|
|
// 增加一天
|
|
|
|
|
start = DateTimeUtil.addDateDays(start, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 解压文件
|
|
|
|
|
*/
|
|
|
|
|
private static List<String> unzipFile(String saveDirectory, String unzip, String fileName) {
|
|
|
|
|
// 被解压的压缩文件
|
|
|
|
|
String fileZip = saveDirectory + fileName;
|
|
|
|
|
// 解压的目标目录
|
|
|
|
|
NewFileUtils.fileCreat(unzip);
|
|
|
|
|
// 解压之前先清空解压目标目录
|
|
|
|
|
NewFileUtils.removeFiles(new File(unzip));
|
|
|
|
|
// 解压缩文件
|
|
|
|
|
UnzipUtil.dealUnZip(fileZip, unzip);
|
|
|
|
|
return NewFileUtils.getJsonPaths(unzip);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static boolean isJson(String str) {
|
|
|
|
|
try {
|
|
|
|
|
JSON.parseObject(str);
|
|
|
|
|
return true;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将zip文件中的json数据插入数据库表中DCPC_GD_PAY_INFO和统计日汇总表DCPC_GD_SUMMARY_INFO
|
|
|
|
|
*/
|
|
|
|
|
private static void insertGdCpcPayInfo(Summary summary, List<GDCpcPayInfo> detailList, String fileName) {
|
|
|
|
|
Connection conn = null;
|
|
|
|
|
try {
|
|
|
|
|
// 加载Oracle驱动
|
|
|
|
|
Class.forName("oracle.jdbc.driver.OracleDriver");
|
|
|
|
|
// 建立数据库连接
|
|
|
|
|
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
|
|
|
|
|
|
|
|
|
|
// 插入DCPC_GD_PAY_INFO表
|
|
|
|
|
String insertPayInfoSql = "INSERT INTO DCPC_GD_PAY_INFO (CLASS_DATE, CLASS_NO, LIST_NO, PAY_NO, ROAD_NO, STA_NO, LANE_NO, PAY_FEE, FEE, DISCOUNT_FEE, ORDER_ID, ZIP_FILENAME, INSERT_DATE) VALUES (to_date(?,'yyyy-mm-dd'), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, to_date(?,'yyyy-mm-dd hh24:mi:ss'))";
|
|
|
|
|
PreparedStatement payInfoStmt = conn.prepareStatement(insertPayInfoSql);
|
|
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
int repeatCount = 0;
|
|
|
|
|
|
|
|
|
|
for (GDCpcPayInfo info : detailList) {
|
|
|
|
|
String selectPayNoSql = "SELECT PAY_NO FROM DCPC_GD_PAY_INFO WHERE PAY_NO = ?";
|
|
|
|
|
PreparedStatement selectStmt = conn.prepareStatement(selectPayNoSql);
|
|
|
|
|
selectStmt.setString(1, info.getPay_no());
|
|
|
|
|
ResultSet rs = selectStmt.executeQuery();
|
|
|
|
|
|
|
|
|
|
if (!rs.next()) {
|
|
|
|
|
payInfoStmt.setString(1, info.getClass_date());
|
|
|
|
|
payInfoStmt.setString(2, info.getClass_no());
|
|
|
|
|
payInfoStmt.setString(3, info.getList_no());
|
|
|
|
|
payInfoStmt.setString(4, info.getPay_no());
|
|
|
|
|
payInfoStmt.setInt(5, info.getRoad_no());
|
|
|
|
|
payInfoStmt.setInt(6, info.getSta_no());
|
|
|
|
|
payInfoStmt.setInt(7, info.getLane_no());
|
|
|
|
|
payInfoStmt.setLong(8, info.getPay_fee());
|
|
|
|
|
payInfoStmt.setLong(9, info.getFee());
|
|
|
|
|
payInfoStmt.setLong(10, info.getDiscount_fee());
|
|
|
|
|
payInfoStmt.setString(11, info.getOrder_id());
|
|
|
|
|
payInfoStmt.setString(12, fileName);
|
|
|
|
|
payInfoStmt.setString(13, DateTimeUtil.getFormateString(new Date(), Constant.YYYY_MM_DD_HH_MM_SS));
|
|
|
|
|
|
|
|
|
|
int rows = payInfoStmt.executeUpdate();
|
|
|
|
|
if (rows > 0) {
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
repeatCount++;
|
|
|
|
|
}
|
|
|
|
|
selectStmt.close();
|
|
|
|
|
rs.close();
|
|
|
|
|
}
|
|
|
|
|
System.out.println("插入数据库表DCPC_GD_PAY_INFO条数为" + count + ",重复条数为" + repeatCount);
|
|
|
|
|
|
|
|
|
|
// 插入DCPC_GD_SUMMARY_INFO表
|
|
|
|
|
if (summary != null) {
|
|
|
|
|
String selectClassDateSql = "SELECT CLASS_DATE FROM DCPC_GD_SUMMARY_INFO WHERE CLASS_DATE = to_date(?,'yyyy-mm-dd')";
|
|
|
|
|
PreparedStatement selectStmt = conn.prepareStatement(selectClassDateSql);
|
|
|
|
|
selectStmt.setString(1, summary.getClass_date());
|
|
|
|
|
ResultSet rs = selectStmt.executeQuery();
|
|
|
|
|
|
|
|
|
|
if (!rs.next()) {
|
|
|
|
|
String insertSummarySql = "INSERT INTO DCPC_GD_SUMMARY_INFO (CLASS_DATE, TOTAL_COUNT, TOTAL_PAY_FEE, TOTAL_FEE, TOTAL_DISCOUNT_FEE, ZIP_FILENAME, INSERT_DATE) VALUES (to_date(?,'yyyy-mm-dd'), ?, ?, ?, ?, ?, to_date(?,'yyyy-mm-dd hh24:mi:ss'))";
|
|
|
|
|
PreparedStatement summaryStmt = conn.prepareStatement(insertSummarySql);
|
|
|
|
|
|
|
|
|
|
summaryStmt.setString(1, summary.getClass_date());
|
|
|
|
|
summaryStmt.setInt(2, summary.getTotal_count());
|
|
|
|
|
summaryStmt.setLong(3, summary.getTotal_pay_fee());
|
|
|
|
|
summaryStmt.setLong(4, summary.getTotal_fee());
|
|
|
|
|
summaryStmt.setLong(5, summary.getTotal_discount_fee());
|
|
|
|
|
summaryStmt.setString(6, fileName);
|
|
|
|
|
summaryStmt.setString(7, DateTimeUtil.getFormateString(new Date(), Constant.YYYY_MM_DD_HH_MM_SS));
|
|
|
|
|
|
|
|
|
|
int rows = summaryStmt.executeUpdate();
|
|
|
|
|
if (rows > 0) {
|
|
|
|
|
System.out.println("插入数据库表DCPC_GD_SUMMARY_INFO,统计日:" + summary.getClass_date() + ",条数:" + rows);
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("插入数据库表DCPC_GD_SUMMARY_INFO,统计日:" + summary.getClass_date() + "已存在");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("插入数据库表DCPC_GD_SUMMARY_INFO,统计日:" + summary.getClass_date() + "已存在");
|
|
|
|
|
}
|
|
|
|
|
selectStmt.close();
|
|
|
|
|
rs.close();
|
|
|
|
|
}
|
|
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
|
System.out.println("Oracle驱动加载失败");
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
System.out.println("数据库操作失败");
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
} finally {
|
|
|
|
|
if (conn != null) {
|
|
|
|
|
try {
|
|
|
|
|
conn.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|