diff --git a/ruoyi-oa/pom.xml b/ruoyi-oa/pom.xml index 56aba55..256adae 100644 --- a/ruoyi-oa/pom.xml +++ b/ruoyi-oa/pom.xml @@ -62,7 +62,16 @@ zopsdk 0.11 - + + com.yundasys + kfpt-sdk + 1.0.0 + + + com.zto.zop + zopsdk + 0.11 + diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/config/DynamicMailConfig.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/config/DynamicMailConfig.java index b78fa04..55f6c12 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/config/DynamicMailConfig.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/config/DynamicMailConfig.java @@ -28,7 +28,12 @@ public class DynamicMailConfig { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); // 设置SMTP服务器 - mailSender.setHost(account.getSmtpHost()); + // 判断是否为网易企业邮箱(如 freeqiye.com) + if (account.getEmail() != null && account.getEmail().toLowerCase().endsWith("@freeqiye.com")) { + mailSender.setHost("smtp.qiye.163.com"); + } else { + mailSender.setHost(account.getSmtpHost()); + } mailSender.setPort(account.getSmtpPort() == null ? 465 : account.getSmtpPort().intValue()); mailSender.setUsername(account.getEmail()); mailSender.setPassword(account.getPassword()); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressServiceImpl.java index 63f592a..5eeba76 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressServiceImpl.java @@ -162,6 +162,30 @@ public class OaExpressServiceImpl implements IOaExpressService { oaExpressVo.setLastUpdateTime(oaExpressVo1.getAcceptTime()); oaExpressVo.setLastStatus(oaExpressVo1.getFirstStatusName()); } + }else if (expressType.equals("YD") && oaExpressVo.getStatus() == 1L) { + // 韵达快递轨迹查询 + String result = com.ruoyi.oa.utils.YdRouteQueryUtil.queryRoute(oaExpressVo.getExpressCode()); + OaExpressVo ydVo = com.ruoyi.oa.utils.YdRouteQueryUtil.parseData(result); + if (ydVo != null) { + oaExpressVo.setLastUpdateTime(ydVo.getLastUpdateTime()); + oaExpressVo.setLastStatus(ydVo.getLastStatus()); + } + } else if (expressType.equals("YT") && oaExpressVo.getStatus() == 1L) { + // 圆通快递轨迹查询 + String result = com.ruoyi.oa.utils.YtRouteQueryUtil.queryRoute(oaExpressVo.getExpressCode()); + OaExpressVo ytVo = com.ruoyi.oa.utils.YtRouteQueryUtil.parseData(result); + if (ytVo != null) { + oaExpressVo.setLastUpdateTime(ytVo.getLastUpdateTime()); + oaExpressVo.setLastStatus(ytVo.getLastStatus()); + } + } else if (expressType.equals("STO") && oaExpressVo.getStatus() == 1L) { + // 申通快递轨迹查询 + String result = com.ruoyi.oa.utils.StoRouteQueryUtil.queryRoute(oaExpressVo.getExpressCode()); + OaExpressVo stoVo = com.ruoyi.oa.utils.StoRouteQueryUtil.parseData(result); + if (stoVo != null) { + oaExpressVo.setLastUpdateTime(stoVo.getLastUpdateTime()); + oaExpressVo.setLastStatus(stoVo.getLastStatus()); + } } OaExpress add = BeanUtil.toBean(oaExpressVo, OaExpress.class); baseMapper.updateById(add);; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoRouteQueryUtil.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoRouteQueryUtil.java deleted file mode 100644 index 09a54ff..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoRouteQueryUtil.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.ruoyi.oa.utils; - -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import com.ruoyi.oa.domain.vo.OaExpressVo; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.codec.digest.DigestUtils; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; - -public class ZtoRouteQueryUtil { - // 请填写你自己的key/secret - private static final String APP_KEY = ""; - private static final String APP_SECRET = ""; - private static final String API_URL = "https://japi.zto.com/traceInterfaceNewTraces"; // 中通轨迹查询接口 - - /** - * 查询中通轨迹 - * @param mailNo 运单号 - * @return 查询结果JSON - */ - public static String queryRoute(String mailNo) { - try { - // 构造请求参数,具体参数请参考中通官方文档 - JSONObject params = new JSONObject(); - params.put("company_id", APP_KEY); - params.put("msg_type", "NEW_TRACES"); - params.put("data", "[{\"billCode\":\"" + mailNo + "\"}]"); - params.put("data_digest", ""); // 签名算法见官方文档 - // 其他参数可根据实际需求补充 - - String jsonParams = params.toJSONString(); - URL url = new URL(API_URL); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setDoOutput(true); - conn.setDoInput(true); - conn.setUseCaches(false); - conn.setRequestMethod("POST"); - conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); - OutputStream out = conn.getOutputStream(); - out.write(jsonParams.getBytes(StandardCharsets.UTF_8)); - out.flush(); - out.close(); - StringBuilder sbResult = new StringBuilder(); - if (200 == conn.getResponseCode()) { - BufferedReader responseReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); - String readLine; - while ((readLine = responseReader.readLine()) != null) { - sbResult.append(readLine).append("\n"); - } - responseReader.close(); - } - return sbResult.toString(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * 解析中通返回数据,转为OaExpressVo - */ - public static OaExpressVo parseData(String result) { - if (result == null || result.isEmpty()) return null; - try { - JSONObject json = JSON.parseObject(result); - // 具体字段请根据中通返回格式调整 - JSONObject data = json.getJSONObject("data"); - if (data == null) return null; - OaExpressVo vo = new OaExpressVo(); - vo.setExpressCode(data.getString("billCode")); - vo.setLastStatus(data.getString("status")); - vo.setLastUpdateTime(data.getDate("updateTime")); - // 你可以根据实际返回内容补充更多字段 - return vo; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - // 中通签名算法 body+appSecret,MD5后Base64 - public static String sign(String body, String secret) { - String text = body + secret; - byte[] md5 = DigestUtils.md5(text); - return Base64.encodeBase64String(md5); - } - - // main方法测试 - public static void main(String[] args) { - String mailNo = "测试单号"; - String body = "{\"billCode\":\"" + mailNo + "\"}"; - String secret = "你的密钥"; - String sign = sign(body, secret); - System.out.println("中通签名:" + sign); - String result = queryRoute(mailNo); // 你可以根据实际参数完善queryRoute - System.out.println("中通原始返回:" + result); - OaExpressVo vo = parseData(result); - System.out.println("解析后:" + vo); - } -} \ No newline at end of file diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaExpressQuestionMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaExpressQuestionMapper.xml index d26cc19..680200a 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaExpressQuestionMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaExpressQuestionMapper.xml @@ -35,7 +35,6 @@ from oa_express_question oeq left join oa_express oe on oe.express_id = oeq.express_id ${ew.getCustomSqlSegment} -