feat(wms): 添加物流预览和快递问题相关功能

- 新增物流预览和快递问题相关的实体类、Mapper、Service和Controller
- 实现物流预览列表查询、导出、详情获取、新增、修改和删除功能
- 实现快递问题列表查询、详情获取、新增、修改和删除功能
- 添加百世、顺丰、申通快递的路由查询工具类
- 更新pom.xml,添加fastjson2等依赖
- 修改application-stage.yml,禁用xxl-job
This commit is contained in:
2025-08-11 18:06:37 +08:00
parent 542b481155
commit 1cd1699bf3
40 changed files with 3321 additions and 2 deletions

View 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);
}
}