1
This commit is contained in:
@@ -761,16 +761,47 @@ public class JDOrderController extends BaseController {
|
|||||||
responseData.put("requestUrl", externalUrl);
|
responseData.put("requestUrl", externalUrl);
|
||||||
responseData.put("responseRaw", result); // 原始返回数据
|
responseData.put("responseRaw", result); // 原始返回数据
|
||||||
|
|
||||||
|
JSONObject parsedData = null;
|
||||||
try {
|
try {
|
||||||
// 尝试解析为JSON
|
// 尝试解析为JSON
|
||||||
Object parsed = JSON.parse(result);
|
Object parsed = JSON.parse(result);
|
||||||
responseData.put("responseData", parsed);
|
if (parsed instanceof JSONObject) {
|
||||||
logger.info("返回数据已解析为JSON对象");
|
parsedData = (JSONObject) parsed;
|
||||||
|
responseData.put("responseData", parsedData);
|
||||||
|
logger.info("返回数据已解析为JSON对象");
|
||||||
|
} else {
|
||||||
|
responseData.put("responseData", parsed);
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 如果不是JSON,只保存原始字符串
|
// 如果不是JSON,只保存原始字符串
|
||||||
logger.warn("返回数据不是有效的JSON格式,将作为原始字符串返回: {}", e.getMessage());
|
logger.warn("返回数据不是有效的JSON格式,将作为原始字符串返回: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查waybill_no,如果不为空则调用企业应用推送
|
||||||
|
if (parsedData != null) {
|
||||||
|
try {
|
||||||
|
// 检查是否有data字段
|
||||||
|
JSONObject dataObj = parsedData.getJSONObject("data");
|
||||||
|
if (dataObj != null) {
|
||||||
|
String waybillNo = dataObj.getString("waybill_no");
|
||||||
|
if (waybillNo != null && !waybillNo.trim().isEmpty()) {
|
||||||
|
logger.info("检测到waybill_no不为空: {}, 开始调用企业应用推送 - 订单ID: {}", waybillNo, orderId);
|
||||||
|
// 调用企业应用推送逻辑
|
||||||
|
sendEnterprisePushNotification(order, waybillNo, parsedData);
|
||||||
|
responseData.put("pushSent", true);
|
||||||
|
logger.info("企业应用推送已发送 - 订单ID: {}, waybill_no: {}", orderId, waybillNo);
|
||||||
|
} else {
|
||||||
|
logger.info("waybill_no为空,无需推送 - 订单ID: {}", orderId);
|
||||||
|
responseData.put("pushSent", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("检查waybill_no或推送时发生异常 - 订单ID: {}", orderId, e);
|
||||||
|
responseData.put("pushSent", false);
|
||||||
|
responseData.put("pushError", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
logger.info("返回响应数据给前端 - 订单ID: {}", orderId);
|
logger.info("返回响应数据给前端 - 订单ID: {}", orderId);
|
||||||
return AjaxResult.success(responseData);
|
return AjaxResult.success(responseData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -778,4 +809,142 @@ public class JDOrderController extends BaseController {
|
|||||||
return AjaxResult.error("获取物流信息失败: " + e.getMessage());
|
return AjaxResult.error("获取物流信息失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用企业应用推送逻辑
|
||||||
|
* @param order 订单信息
|
||||||
|
* @param waybillNo 运单号
|
||||||
|
* @param logisticsData 物流数据
|
||||||
|
*/
|
||||||
|
private void sendEnterprisePushNotification(JDOrder order, String waybillNo, JSONObject logisticsData) {
|
||||||
|
try {
|
||||||
|
// 构建推送消息内容
|
||||||
|
StringBuilder pushContent = new StringBuilder();
|
||||||
|
pushContent.append("物流信息获取成功\n");
|
||||||
|
pushContent.append("订单号:").append(order.getOrderId() != null ? order.getOrderId() : "无").append("\n");
|
||||||
|
pushContent.append("内部单号:").append(order.getRemark() != null ? order.getRemark() : "无").append("\n");
|
||||||
|
pushContent.append("分销标识:").append(order.getDistributionMark() != null ? order.getDistributionMark() : "无").append("\n");
|
||||||
|
pushContent.append("运单号:").append(waybillNo).append("\n");
|
||||||
|
pushContent.append("物流链接:").append(order.getLogisticsLink() != null ? order.getLogisticsLink() : "无").append("\n");
|
||||||
|
|
||||||
|
// 提取物流跟踪信息
|
||||||
|
JSONObject dataObj = logisticsData.getJSONObject("data");
|
||||||
|
if (dataObj != null) {
|
||||||
|
JSONArray trackingInfo = dataObj.getJSONArray("tracking_info");
|
||||||
|
if (trackingInfo != null && trackingInfo.size() > 0) {
|
||||||
|
pushContent.append("\n物流跟踪信息:\n");
|
||||||
|
// 只显示最新的几条
|
||||||
|
int maxItems = Math.min(3, trackingInfo.size());
|
||||||
|
for (int i = 0; i < maxItems; i++) {
|
||||||
|
JSONObject item = trackingInfo.getJSONObject(i);
|
||||||
|
if (item != null) {
|
||||||
|
String text = item.getString("text");
|
||||||
|
String time = item.getString("time");
|
||||||
|
if (text != null) {
|
||||||
|
// 取第一行作为主要信息
|
||||||
|
String[] lines = text.split("\n");
|
||||||
|
if (lines.length > 0) {
|
||||||
|
pushContent.append("- ").append(lines[0]);
|
||||||
|
if (time != null && !time.trim().isEmpty()) {
|
||||||
|
pushContent.append(" (").append(time).append(")");
|
||||||
|
}
|
||||||
|
pushContent.append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (trackingInfo.size() > maxItems) {
|
||||||
|
pushContent.append("... 还有 ").append(trackingInfo.size() - maxItems).append(" 条跟踪信息\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调用企业微信推送接口(参考WxtsUtil的实现)
|
||||||
|
String pushUrl = "https://wxts.van333.cn/wx/send/jd";
|
||||||
|
String token = "super_token_b62190c26"; // 与WxtsUtil中的TOKEN保持一致
|
||||||
|
JSONObject pushParam = new JSONObject();
|
||||||
|
pushParam.put("title", "JD物流信息推送");
|
||||||
|
String content = pushContent.toString().replaceAll("\\n", "<br>");
|
||||||
|
String common = "192.168.8.88 (微信机器人), 信息 : ";
|
||||||
|
content = common + content + "<br><br>";
|
||||||
|
pushParam.put("text", content);
|
||||||
|
|
||||||
|
// 使用支持自定义header的HTTP请求
|
||||||
|
String pushResult = sendPostWithHeaders(pushUrl, pushParam.toJSONString(), token);
|
||||||
|
logger.info("企业应用推送调用结果 - 订单ID: {}, waybill_no: {}, 推送结果: {}",
|
||||||
|
order.getId(), waybillNo, pushResult);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("调用企业应用推送失败 - 订单ID: {}, waybill_no: {}, 错误: {}",
|
||||||
|
order.getId(), waybillNo, e.getMessage(), e);
|
||||||
|
// 不抛出异常,避免影响主流程
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送POST请求,支持自定义header(用于企业微信推送)
|
||||||
|
* @param url 请求URL
|
||||||
|
* @param jsonBody JSON请求体
|
||||||
|
* @param token 认证token
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
private String sendPostWithHeaders(String url, String jsonBody, String token) {
|
||||||
|
java.io.BufferedReader in = null;
|
||||||
|
java.io.PrintWriter out = null;
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
try {
|
||||||
|
java.net.URL realUrl = new java.net.URL(url);
|
||||||
|
java.net.URLConnection conn = realUrl.openConnection();
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
conn.setRequestProperty("accept", "*/*");
|
||||||
|
conn.setRequestProperty("connection", "Keep-Alive");
|
||||||
|
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
|
||||||
|
conn.setRequestProperty("Accept-Charset", "utf-8");
|
||||||
|
conn.setRequestProperty("Content-Type", "application/json");
|
||||||
|
conn.setRequestProperty("vanToken", token);
|
||||||
|
conn.setRequestProperty("source", "XZJ_UBUNTU");
|
||||||
|
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// 发送请求体
|
||||||
|
out = new java.io.PrintWriter(conn.getOutputStream());
|
||||||
|
out.print(jsonBody);
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
// 读取响应
|
||||||
|
in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(), java.nio.charset.StandardCharsets.UTF_8));
|
||||||
|
String line;
|
||||||
|
while ((line = in.readLine()) != null) {
|
||||||
|
result.append(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("企业微信推送请求成功 - URL: {}, 响应: {}", url, result.toString());
|
||||||
|
} catch (java.net.ConnectException e) {
|
||||||
|
logger.error("企业微信推送连接失败 - URL: {}", url, e);
|
||||||
|
throw new RuntimeException("推送连接失败: " + e.getMessage(), e);
|
||||||
|
} catch (java.net.SocketTimeoutException e) {
|
||||||
|
logger.error("企业微信推送超时 - URL: {}", url, e);
|
||||||
|
throw new RuntimeException("推送请求超时: " + e.getMessage(), e);
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
logger.error("企业微信推送IO异常 - URL: {}", url, e);
|
||||||
|
throw new RuntimeException("推送IO异常: " + e.getMessage(), e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("企业微信推送异常 - URL: {}", url, e);
|
||||||
|
throw new RuntimeException("推送异常: " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
if (in != null) {
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
} catch (java.io.IOException ex) {
|
||||||
|
logger.error("关闭流异常", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user