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

76 lines
2.7 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.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);
}
}