feat(wms): 添加物流预览和快递问题相关功能
- 新增物流预览和快递问题相关的实体类、Mapper、Service和Controller - 实现物流预览列表查询、导出、详情获取、新增、修改和删除功能 - 实现快递问题列表查询、详情获取、新增、修改和删除功能 - 添加百世、顺丰、申通快递的路由查询工具类 - 更新pom.xml,添加fastjson2等依赖 - 修改application-stage.yml,禁用xxl-job
This commit is contained in:
75
klp-wms/src/main/java/com/klp/utils/YdRouteQueryUtil.java
Normal file
75
klp-wms/src/main/java/com/klp/utils/YdRouteQueryUtil.java
Normal file
@@ -0,0 +1,75 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user