上传源代码版本

This commit is contained in:
Im-Jenisson
2026-06-01 16:30:29 +08:00
commit b2a9b7d3c2
462 changed files with 104365 additions and 0 deletions

232
metrics-proxy.jsp Normal file
View File

@@ -0,0 +1,232 @@
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.json.JSONObject" %>
<%@ page import="org.json.JSONArray" %>
<%
// 跨域指标查询代理 JSP
// 用途:调用 C# MetricsController 的 API 端点,解决跨域问题
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
String action = request.getParameter("action");
String handoverNumber = request.getParameter("handoverNumber");
String neutralWaybillNumber = request.getParameter("neutralWaybillNumber");
String date = request.getParameter("date");
String startDate = request.getParameter("startDate");
String endDate = request.getParameter("endDate");
String waybillsJson = request.getParameter("waybills");
String callback = request.getParameter("callback");
// 获取响应格式 (JSON 或 JSONP)
String format = request.getParameter("format");
if (format == null) {
format = (callback != null && !callback.isEmpty()) ? "jsonp" : "json";
}
// 获取基础URL
String environment = request.getParameter("env");
if (environment == null) {
environment = "test";
}
String baseUrl;
if ("local".equals(environment)) {
baseUrl = "http://localhost:5002";
} else if ("production".equals(environment)) {
baseUrl = "https://lr.tooexp.com";
} else {
baseUrl = "http://172.232.21.79:5002";
}
String apiUrl = null;
JSONObject resultJson = new JSONObject();
try {
if ("getLabelRate".equals(action)) {
// 获取标签率
if (handoverNumber == null || handoverNumber.isEmpty()) {
resultJson.put("success", false);
resultJson.put("error", "handoverNumber is required");
} else {
apiUrl = baseUrl + "/api/metrics/label-rate?handoverNumber=" + URLEncoder.encode(handoverNumber, "UTF-8");
}
}
else if ("getOrderAssessment".equals(action)) {
// 获取订单评估
if (neutralWaybillNumber == null || neutralWaybillNumber.isEmpty()) {
resultJson.put("success", false);
resultJson.put("error", "neutralWaybillNumber is required");
} else {
apiUrl = baseUrl + "/api/metrics/order-assessment?neutralWaybillNumber=" + URLEncoder.encode(neutralWaybillNumber, "UTF-8");
}
}
else if ("getDailySummary".equals(action)) {
// 获取每日汇总
if (date != null && !date.isEmpty()) {
apiUrl = baseUrl + "/api/metrics/daily-summary?date=" + URLEncoder.encode(date, "UTF-8");
} else {
apiUrl = baseUrl + "/api/metrics/daily-summary";
}
}
else if ("getDailySummaries".equals(action)) {
// 获取日期范围汇总
if ((startDate == null || startDate.isEmpty()) || (endDate == null || endDate.isEmpty())) {
resultJson.put("success", false);
resultJson.put("error", "startDate and endDate are required");
} else {
apiUrl = baseUrl + "/api/metrics/daily-summaries?startDate=" + URLEncoder.encode(startDate, "UTF-8") +
"&endDate=" + URLEncoder.encode(endDate, "UTF-8");
}
}
else if ("get24HCompletionRate".equals(action)) {
// 获取24小时完成率
if (date != null && !date.isEmpty()) {
apiUrl = baseUrl + "/api/metrics/24h-completion-rate?date=" + URLEncoder.encode(date, "UTF-8");
} else {
apiUrl = baseUrl + "/api/metrics/24h-completion-rate";
}
}
else if ("getDailyCompletionRate".equals(action)) {
// 获取每日完成率
if (date != null && !date.isEmpty()) {
apiUrl = baseUrl + "/api/metrics/daily-completion-rate?date=" + URLEncoder.encode(date, "UTF-8");
} else {
apiUrl = baseUrl + "/api/metrics/daily-completion-rate";
}
}
else if ("getDailyDashboard".equals(action)) {
// 获取日汇总完整仪表盘数据
if (date != null && !date.isEmpty()) {
apiUrl = baseUrl + "/api/metrics/daily-dashboard?date=" + URLEncoder.encode(date, "UTF-8");
} else {
apiUrl = baseUrl + "/api/metrics/daily-dashboard";
}
}
else if ("getBatchOrderMetrics".equals(action)) {
// 批量获取订单指标
if (waybillsJson == null || waybillsJson.isEmpty()) {
resultJson.put("success", false);
resultJson.put("error", "waybills is required");
} else {
apiUrl = baseUrl + "/api/metrics/batch-order-metrics";
}
}
else if ("recalculateLabelRate".equals(action)) {
// 重新计算标签率
if (handoverNumber == null || handoverNumber.isEmpty()) {
resultJson.put("success", false);
resultJson.put("error", "handoverNumber is required");
} else {
apiUrl = baseUrl + "/api/metrics/recalculate-label-rate";
}
}
else {
resultJson.put("success", false);
resultJson.put("error", "Unknown action: " + action);
}
// 如果没有错误调用API
if (apiUrl != null) {
String method = "getBatchOrderMetrics".equals(action) || "recalculateLabelRate".equals(action) ? "POST" : "GET";
String response_text = callApi(apiUrl, method, waybillsJson, handoverNumber);
// 处理 JSONP 响应格式
if ("jsonp".equals(format) && callback != null && !callback.isEmpty()) {
if (callback.matches("^[a-zA-Z_$][a-zA-Z0-9_$]*$")) {
out.print(callback + "(" + response_text + ");");
} else {
out.print("jsonp_error({\"error\": \"Invalid callback name\"});");
}
} else {
out.print(response_text);
}
return;
}
} catch (Exception e) {
resultJson.put("success", false);
resultJson.put("error", e.getMessage());
}
// 输出结果(支持 JSONP 格式)
if ("jsonp".equals(format) && callback != null && !callback.isEmpty()) {
if (callback.matches("^[a-zA-Z_$][a-zA-Z0-9_$]*$")) {
out.print(callback + "(" + resultJson.toString() + ");");
} else {
out.print("jsonp_error({\"error\": \"Invalid callback name\"});");
}
} else {
out.print(resultJson.toString());
}
%>
<%!
private String callApi(String urlString, String method, String bodyForBatch, String handoverNumberForRecalc) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
// 如果是 POST 请求,发送请求体
if ("POST".equals(method)) {
connection.setDoOutput(true);
String requestBody = null;
if (bodyForBatch != null && !bodyForBatch.isEmpty()) {
// 批量订单指标请求
requestBody = bodyForBatch;
} else if (handoverNumberForRecalc != null && !handoverNumberForRecalc.isEmpty()) {
// 重新计算标签率请求
org.json.JSONObject json = new org.json.JSONObject();
json.put("handoverNumber", handoverNumberForRecalc);
requestBody = json.toString();
} else {
requestBody = "{}";
}
try (OutputStream os = connection.getOutputStream()) {
byte[] input = requestBody.getBytes("utf-8");
os.write(input, 0, input.length);
}
}
// 读取响应
int responseCode = connection.getResponseCode();
BufferedReader reader;
if (responseCode >= 200 && responseCode < 300) {
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
} else {
reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "utf-8"));
}
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
connection.disconnect();
return response.toString();
} catch (Exception e) {
org.json.JSONObject error = new org.json.JSONObject();
try {
error.put("success", false);
error.put("error", e.getMessage());
} catch (Exception ex) {
// ignore
}
return error.toString();
}
}
%>