- 新增物流预览和快递问题相关的实体类、Mapper、Service和Controller - 实现物流预览列表查询、导出、详情获取、新增、修改和删除功能 - 实现快递问题列表查询、详情获取、新增、修改和删除功能 - 添加百世、顺丰、申通快递的路由查询工具类 - 更新pom.xml,添加fastjson2等依赖 - 修改application-stage.yml,禁用xxl-job
76 lines
2.7 KiB
Java
76 lines
2.7 KiB
Java
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.yundasys.OpenApiHttpUtils;
|
||
|
||
import java.security.MessageDigest;
|
||
|
||
public class YdRouteQueryUtil {
|
||
// 请根据实际环境切换key/secret
|
||
private static final String APP_KEY = "004160"; // 生产环境
|
||
private static final String APP_SECRET = "ac9ee46d749e44b98e7a9e38f3c8f8f3"; // 生产环境
|
||
private static final String API_URL = "https://openapi.yundaex.com/openapi/outer/logictis/query";
|
||
|
||
/**
|
||
* 查询韵达轨迹
|
||
* @param mailNo 运单号
|
||
* @return 查询结果JSON
|
||
*/
|
||
public static String queryRoute(String mailNo) {
|
||
String jsonParams = "{\"mailno\":\"" + mailNo + "\"}";
|
||
return OpenApiHttpUtils.doPostJson(API_URL, jsonParams, APP_KEY, APP_SECRET);
|
||
}
|
||
|
||
/**
|
||
* 解析韵达返回数据,转为WmsExpressVo
|
||
*/
|
||
public static WmsExpressVo parseData(String result) {
|
||
if (result == null || result.trim().isEmpty()) {
|
||
return null;
|
||
}
|
||
try {
|
||
JSONObject json = JSON.parseObject(result);
|
||
JSONObject data = json.getJSONObject("data");
|
||
if (data == null) return null;
|
||
JSONArray steps = data.getJSONArray("steps");
|
||
if (steps == null || steps.isEmpty()) return null;
|
||
JSONObject last = steps.getJSONObject(steps.size() - 1);
|
||
WmsExpressVo vo = new WmsExpressVo();
|
||
vo.setExpressCode(data.getString("mailno"));
|
||
vo.setLastUpdateTime(last.getDate("time"));
|
||
vo.setLastStatus(last.getString("action"));
|
||
vo.setRemark(last.getString("description"));
|
||
return vo;
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
return null;
|
||
}
|
||
|
||
// MD5签名算法(如需自定义签名,可用此方法)
|
||
public static String md5(String str, String charset) throws Exception {
|
||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||
md.update(str.getBytes(charset));
|
||
byte[] result = md.digest();
|
||
StringBuilder sb = new StringBuilder(32);
|
||
for (byte b : result) {
|
||
int val = b & 0xff;
|
||
if (val <= 0xf) sb.append("0");
|
||
sb.append(Integer.toHexString(val));
|
||
}
|
||
return sb.toString().toLowerCase();
|
||
}
|
||
|
||
// main方法测试
|
||
public static void main(String[] args) {
|
||
String mailNo = "464569453467736";
|
||
String result = queryRoute(mailNo);
|
||
System.out.println("韵达原始返回:" + result);
|
||
WmsExpressVo vo = parseData(result);
|
||
System.out.println("解析后:" + vo);
|
||
}
|
||
}
|