Files
xgy-oa/klp-wms/src/main/java/com/klp/utils/ZtoTrackQueryUtil.java
Joshi 1cd1699bf3 feat(wms): 添加物流预览和快递问题相关功能
- 新增物流预览和快递问题相关的实体类、Mapper、Service和Controller
- 实现物流预览列表查询、导出、详情获取、新增、修改和删除功能
- 实现快递问题列表查询、详情获取、新增、修改和删除功能
- 添加百世、顺丰、申通快递的路由查询工具类
- 更新pom.xml,添加fastjson2等依赖
- 修改application-stage.yml,禁用xxl-job
2025-08-11 18:06:37 +08:00

118 lines
4.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.utils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.klp.domain.vo.WmsExpressVo;
import com.zto.zop.ZopClient;
import com.zto.zop.ZopPublicRequest;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import static com.zto.zop.EncryptionType.MD5;
public class ZtoTrackQueryUtil {
// 替换为你的appKey和appSecret
private static final String APP_KEY = "1ebf01ae01cc81d78ba9a";
private static final String APP_SECRET = "4bded7f302da7f7913b01810e3421b80";
// 测试环境
// private static final String API_URL = "https://japi-test.zto.com/zto.merchant.waybill.track.query";
// 正式环境
private static final String API_URL = "https://japi.zto.com/zto.merchant.waybill.track.query";
/**
* 查询中通物流轨迹
*
* @param billCode 运单号
* @return 查询结果JSON
*/
public static WmsExpressVo queryTrack(String billCode,String phoneNumber) throws IOException {
ZopClient client = new ZopClient(APP_KEY, APP_SECRET);
ZopPublicRequest request = new ZopPublicRequest();
request.setBody("{\"billCode\":\""+billCode+"\",\"mobilePhone\":\""+ StringUtils.right(phoneNumber, 4)+"\"}");
request.setUrl(API_URL);
request.setBase64(true);
request.setEncryptionType(MD5);
request.setTimestamp(null);
String execute = client.execute(request);
System.out.println(execute);
return parseData(execute);
}
/**
* 解析中通返回数据封装为WmsExpressVo
*/
public static WmsExpressVo parseData(String result) {
if (StringUtils.isBlank(result)) {
return null;
}
try {
JSONObject json = JSON.parseObject(result);
if (json == null || !"true".equalsIgnoreCase(String.valueOf(json.get("status")))) {
return null;
}
// 取result数组
if (!json.containsKey("result")) {
return null;
}
// 只取第一个轨迹(如有多条)
Object resultArr = json.get("result");
if (!(resultArr instanceof java.util.List)) {
return null;
}
JSONArray arr = json.getJSONArray("result");
if (arr == null || arr.isEmpty()) {
return null;
}
JSONObject first = arr.getJSONObject(arr.size() - 1); // 取最后一条为最新
if (first == null) {
return null;
}
String scanDate = first.getString("scanDate");
String desc = first.getString("desc");
WmsExpressVo vo = new WmsExpressVo();
// scanDate为时间戳字符串
if (StringUtils.isNotBlank(scanDate)) {
try {
long time = Long.parseLong(scanDate);
vo.setAcceptTime(new java.util.Date(time));
} catch (Exception e) {
vo.setAcceptTime(null);
}
}
vo.setFirstStatusName(desc);
return vo;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String getPublicIp() {
String ip = "";
try {
URL url = new URL("http://ifconfig.me/ip");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
ip = in.readLine();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return ip;
}
// main方法测试
public static void main(String[] args) throws IOException {
System.out.println("本机公网IP为: " + getPublicIp());
String billCode = "78925013374727";
WmsExpressVo result = queryTrack(billCode,"2410");
System.out.println(result);
}
}