From ddf399b7b1a28117b94b4558be0df214de409bc5 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 28 Jul 2025 11:00:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/oa/config/DynamicMailConfig.java | 128 +++++++++++++++++- .../com/ruoyi/oa/mapper/OaExpressMapper.java | 3 +- .../oa/mapper/OaExpressQuestionMapper.java | 3 +- .../impl/OaEmailAccountServiceImpl.java | 9 ++ .../impl/OaExpressQuestionServiceImpl.java | 35 +++-- .../oa/service/impl/OaExpressServiceImpl.java | 68 ++++++---- .../impl/OaFurnitureTableServiceImpl.java | 2 + .../com/ruoyi/oa/utils/SfRouteQueryUtil.java | 4 +- .../com/ruoyi/oa/utils/StoRouteQueryUtil.java | 21 ++- .../com/ruoyi/oa/utils/ZtoTrackQueryUtil.java | 4 +- .../resources/mapper/oa/OaExpressMapper.xml | 2 +- .../mapper/oa/OaReportSummaryMapper.xml | 3 + 12 files changed, 230 insertions(+), 52 deletions(-) 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 55f6c12..18e5e55 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 @@ -27,13 +27,11 @@ public class DynamicMailConfig { public JavaMailSender createMailSender(OaEmailAccount account) { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); - // 设置SMTP服务器 - // 判断是否为网易企业邮箱(如 freeqiye.com) - if (account.getEmail() != null && account.getEmail().toLowerCase().endsWith("@freeqiye.com")) { - mailSender.setHost("smtp.qiye.163.com"); - } else { - mailSender.setHost(account.getSmtpHost()); - } + // 设置SMTP服务器 - 根据邮箱域名自动识别企业邮箱 + String email = account.getEmail(); + String smtpHost = getSmtpHostByEmail(email, account.getSmtpHost()); + + mailSender.setHost(smtpHost); mailSender.setPort(account.getSmtpPort() == null ? 465 : account.getSmtpPort().intValue()); mailSender.setUsername(account.getEmail()); mailSender.setPassword(account.getPassword()); @@ -86,4 +84,120 @@ public class DynamicMailConfig { return config; } + + // 测试方法 + public static void main(String[] args) { + DynamicMailConfig config = new DynamicMailConfig(); + + // 测试各种邮箱类型 + String[] testEmails = { + "test@freeqiye.com", // 网易企业邮箱 + "test@qiye.163.com", // 网易企业邮箱 + "test@163.com", // 网易个人邮箱 + "test@126.com", // 网易126邮箱 + "test@qq.com", // QQ邮箱 + "test@exmail.qq.com", // QQ企业邮箱 + "test@aliyun.com", // 阿里云邮箱 + "test@sina.com", // 新浪邮箱 + "test@vip.sina.com", // 新浪VIP邮箱 + "test@sohu.com", // 搜狐邮箱 + "test@139.com", // 139邮箱 + "test@189.cn", // 189邮箱 + "test@feishu.cn", // 飞书邮箱 + "test@gmail.com", // Gmail邮箱 + "test@outlook.com", // Outlook邮箱 + "test@hotmail.com", // Hotmail邮箱 + "test@company.com" // 自定义企业邮箱 + }; + + System.out.println("邮箱SMTP服务器识别测试:"); + System.out.println("=========================================="); + + for (String email : testEmails) { + String smtpHost = config.getSmtpHostByEmail(email, null); + System.out.printf("%-20s -> %s%n", email, smtpHost); + } + + System.out.println("=========================================="); + } + + /** + * 根据邮箱地址自动识别SMTP服务器 + * + * @param email 邮箱地址 + * @param defaultSmtpHost 默认SMTP服务器 + * @return SMTP服务器地址 + */ + public String getSmtpHostByEmail(String email, String defaultSmtpHost) { + if (email == null) { + return defaultSmtpHost != null ? defaultSmtpHost : "smtp.163.com"; + } + + String domain = email.toLowerCase(); + + // 网易企业邮箱 + if (domain.contains("@freeqiye.com") || domain.contains("@qiye.163.com")) { + return "smtp.qiye.163.com"; + } + // 网易个人邮箱 + else if (domain.contains("@163.com")) { + return "smtp.163.com"; + } + // 网易126邮箱 + else if (domain.contains("@126.com")) { + return "smtp.126.com"; + } + // QQ邮箱 + else if (domain.contains("@qq.com")) { + return "smtp.qq.com"; + } + // QQ企业邮箱 + else if (domain.contains("@exmail.qq.com")) { + return "smtp.exmail.qq.com"; + } + // 阿里云邮箱 + else if (domain.contains("@aliyun.com")) { + return "smtp.aliyun.com"; + } + // 新浪邮箱 + else if (domain.contains("@sina.com")) { + return "smtp.sina.com"; + } + // 新浪VIP邮箱 + else if (domain.contains("@vip.sina.com")) { + return "smtp.vip.sina.com"; + } + // 搜狐邮箱 + else if (domain.contains("@sohu.com")) { + return "smtp.sohu.com"; + } + // 139邮箱 + else if (domain.contains("@139.com")) { + return "smtp.139.com"; + } + // 189邮箱 + else if (domain.contains("@189.cn")) { + return "smtp.189.cn"; + } + // 飞书邮箱 + else if (domain.contains("@feishu.cn")) { + return "smtp.feishu.cn"; + } + // Gmail邮箱 + else if (domain.contains("@gmail.com")) { + return "smtp.gmail.com"; + } + // Outlook邮箱 + else if (domain.contains("@outlook.com") || domain.contains("@hotmail.com")) { + return "smtp-mail.outlook.com"; + } + // 企业邮箱通用域名识别(可以根据需要添加更多) + else if (domain.contains("@qiye.") || domain.contains("@corp.") || domain.contains("@enterprise.")) { + // 对于企业邮箱,优先使用配置的SMTP服务器,如果没有配置则使用通用企业邮箱SMTP + return defaultSmtpHost != null ? defaultSmtpHost : "smtp." + domain.split("@")[1]; + } + + // 如果都不匹配,使用配置的SMTP服务器或默认服务器 + return defaultSmtpHost != null ? defaultSmtpHost : "smtp.163.com"; + } } \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressMapper.java index 0ea47ad..ef0eb68 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.OaExpress; @@ -16,7 +17,7 @@ import org.apache.ibatis.annotations.Param; */ public interface OaExpressMapper extends BaseMapperPlus { - Page selectVoPagePlus(@Param("build") Page build, @Param(Constants.WRAPPER) LambdaQueryWrapper lqw); + Page selectVoPagePlus(@Param("build") Page build, @Param(Constants.WRAPPER) QueryWrapper lqw); OaExpressVo selectVoByIdPlus(@Param("expressId") Long expressId); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressQuestionMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressQuestionMapper.java index 22ee155..6fd7dc1 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressQuestionMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaExpressQuestionMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.OaExpressQuestion; @@ -16,5 +17,5 @@ import org.apache.ibatis.annotations.Param; */ public interface OaExpressQuestionMapper extends BaseMapperPlus { - Page selectVoPagePlus(@Param("build") Page build, @Param(Constants.WRAPPER) LambdaQueryWrapper lqw); + Page selectVoPagePlus(@Param("build") Page build, @Param(Constants.WRAPPER) QueryWrapper lqw); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmailAccountServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmailAccountServiceImpl.java index fba95ae..ca54b79 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmailAccountServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmailAccountServiceImpl.java @@ -27,6 +27,7 @@ import com.ruoyi.oa.mapper.OaEmailAccountMapper; import com.ruoyi.oa.service.IOaEmailAccountService; import com.ruoyi.oa.domain.request.EmailSendRequest; import com.ruoyi.oa.utils.EmailUtil; +import com.ruoyi.oa.config.DynamicMailConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.client.RestTemplate; import com.ruoyi.oa.mapper.OaFurnitureTableMapper; @@ -55,6 +56,9 @@ public class OaEmailAccountServiceImpl implements IOaEmailAccountService { @Autowired private OaFurnitureTableMapper oaFurnitureTableMapper; + @Autowired + private DynamicMailConfig dynamicMailConfig; + /** * 查询发件人邮箱账号管理 */ @@ -143,6 +147,11 @@ public class OaEmailAccountServiceImpl implements IOaEmailAccountService { if (account == null) { return "发件人邮箱账号不存在"; } + + // 输出SMTP服务器信息 + String smtpHost = dynamicMailConfig.getSmtpHostByEmail(account.getEmail(), account.getSmtpHost()); + System.out.println("使用邮箱: " + account.getEmail() + ", SMTP服务器: " + smtpHost); + List emailList = oaFurnitureTableMapper.selectEmailsByFurnitureIds(request.getFurnitureIds()); int type = account.getType() == null ? -1 : account.getType().intValue(); int success = 0, fail = 0; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressQuestionServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressQuestionServiceImpl.java index 8c18c04..53f23af 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressQuestionServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaExpressQuestionServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; @@ -45,7 +46,7 @@ public class OaExpressQuestionServiceImpl implements IOaExpressQuestionService { */ @Override public TableDataInfo queryPageList(OaExpressQuestionBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -55,19 +56,33 @@ public class OaExpressQuestionServiceImpl implements IOaExpressQuestionService { */ @Override public List queryList(OaExpressQuestionBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } - private LambdaQueryWrapper buildQueryWrapper(OaExpressQuestionBo bo) { + private QueryWrapper buildQueryWrapper(OaExpressQuestionBo bo) { Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getExpressId() != null, OaExpressQuestion::getExpressId, bo.getExpressId()); - lqw.eq(StringUtils.isNotBlank(bo.getDescription()), OaExpressQuestion::getDescription, bo.getDescription()); - lqw.eq(bo.getReportTime() != null, OaExpressQuestion::getReportTime, bo.getReportTime()); - lqw.eq(StringUtils.isNotBlank(bo.getReportBy()), OaExpressQuestion::getReportBy, bo.getReportBy()); - lqw.eq(bo.getStatus() != null, OaExpressQuestion::getStatus, bo.getStatus()); - return lqw; + QueryWrapper qw = new QueryWrapper<>(); + // 设置表别名 + if (bo.getExpressId() != null) { + qw.eq("oeq.express_id", bo.getExpressId()); + } + if (StringUtils.isNotBlank(bo.getDescription())) { + qw.eq("oeq.description", bo.getDescription()); + } + if (bo.getReportTime() != null) { + qw.eq("oeq.report_time", bo.getReportTime()); + } + if (StringUtils.isNotBlank(bo.getReportBy())) { + qw.eq("oeq.report_by", bo.getReportBy()); + } + if (bo.getStatus() != null) { + qw.eq("oeq.status", bo.getStatus()); + } + // 逻辑删除 + qw.eq("oeq.del_flag", 0); + + return qw; } /** 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 7136b4a..2a388fd 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 @@ -1,16 +1,14 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.oa.utils.BestRouteQueryUtil; -import com.ruoyi.oa.utils.SfRouteQueryUtil; -import com.ruoyi.oa.utils.StoRouteQueryUtil; -import com.ruoyi.oa.utils.ZtoTrackQueryUtil; +import com.ruoyi.oa.utils.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaExpressBo; @@ -51,7 +49,7 @@ public class OaExpressServiceImpl implements IOaExpressService { */ @Override public TableDataInfo queryPageList(OaExpressBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -61,25 +59,48 @@ public class OaExpressServiceImpl implements IOaExpressService { */ @Override public List queryList(OaExpressBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } - private LambdaQueryWrapper buildQueryWrapper(OaExpressBo bo) { + private QueryWrapper buildQueryWrapper(OaExpressBo bo) { Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getExpressCode()), OaExpress::getExpressCode, bo.getExpressCode()); - lqw.eq(bo.getStatus() != null, OaExpress::getStatus, bo.getStatus()); - lqw.like(StringUtils.isNotBlank(bo.getSupplyName()), OaExpress::getSupplyName, bo.getSupplyName()); - lqw.eq(StringUtils.isNotBlank(bo.getSupplyPhone()), OaExpress::getSupplyPhone, bo.getSupplyPhone()); - lqw.eq(bo.getOwnerId() != null, OaExpress::getOwnerId, bo.getOwnerId()); - lqw.eq(StringUtils.isNotBlank(bo.getOwnerPhone()), OaExpress::getOwnerPhone, bo.getOwnerPhone()); - lqw.eq(bo.getPlanDate() != null, OaExpress::getPlanDate, bo.getPlanDate()); - lqw.eq(bo.getProjectId() != null, OaExpress::getProjectId, bo.getProjectId()); - lqw.eq(StringUtils.isNotBlank(bo.getExpressType()), OaExpress::getExpressType, bo.getExpressType()); - return lqw; + QueryWrapper qw = new QueryWrapper<>(); + // 设置表别名 + if (StringUtils.isNotBlank(bo.getExpressCode())) { + qw.like("oe.express_code", bo.getExpressCode()); + } + if (bo.getStatus() != null) { + qw.eq("oe.status", bo.getStatus()); + } + if (StringUtils.isNotBlank(bo.getSupplyName())) { + qw.like("oe.supply_name", bo.getSupplyName()); + } + if (StringUtils.isNotBlank(bo.getSupplyPhone())) { + qw.eq("oe.supply_phone", bo.getSupplyPhone()); + } + if (bo.getOwnerId() != null) { + qw.eq("oe.owner_id", bo.getOwnerId()); + } + if (StringUtils.isNotBlank(bo.getOwnerPhone())) { + qw.eq("oe.owner_phone", bo.getOwnerPhone()); + } + if (bo.getPlanDate() != null) { + qw.eq("oe.plan_date", bo.getPlanDate()); + } + if (bo.getProjectId() != null) { + qw.eq("oe.project_id", bo.getProjectId()); + } + if (StringUtils.isNotBlank(bo.getExpressType())) { + qw.eq("oe.express_type", bo.getExpressType()); + } + // 添加逻辑删除条件 + qw.eq("oe.del_flag", 0); + + return qw; } + /** * 新增物流预览 */ @@ -155,7 +176,6 @@ public class OaExpressServiceImpl implements IOaExpressService { oaExpressVo.setLastStatus(oaExpressVo1.getFirstStatusName()); } } - if (expressType.equals("Best") && oaExpressVo.getStatus() ==1L) { // 校验为顺丰则进入此位置更新状态 OaExpressVo oaExpressVo1 = BestRouteQueryUtil.queryRoute(oaExpressVo.getExpressCode()); @@ -168,7 +188,7 @@ public class OaExpressServiceImpl implements IOaExpressService { 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); + OaExpressVo ydVo = YdRouteQueryUtil.parseData(result); if (ydVo != null) { oaExpressVo.setLastUpdateTime(ydVo.getLastUpdateTime()); oaExpressVo.setLastStatus(ydVo.getLastStatus()); @@ -177,7 +197,7 @@ public class OaExpressServiceImpl implements IOaExpressService { 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); + OaExpressVo ytVo = YtRouteQueryUtil.parseData(result); if (ytVo != null) { oaExpressVo.setLastUpdateTime(ytVo.getLastUpdateTime()); oaExpressVo.setLastStatus(ytVo.getLastStatus()); @@ -186,10 +206,10 @@ public class OaExpressServiceImpl implements IOaExpressService { if (expressType.equals("STO") && oaExpressVo.getStatus() == 1L) { // 申通快递轨迹查询 String result = StoRouteQueryUtil.queryRoute(Collections.singletonList(oaExpressVo.getExpressCode())); - OaExpressVo stoVo = com.ruoyi.oa.utils.StoRouteQueryUtil.parseData(result); + OaExpressVo stoVo = StoRouteQueryUtil.parseData(result); if (stoVo != null) { - oaExpressVo.setLastUpdateTime(stoVo.getLastUpdateTime()); - oaExpressVo.setLastStatus(stoVo.getLastStatus()); + oaExpressVo.setLastUpdateTime(stoVo.getAcceptTime()); + oaExpressVo.setLastStatus(stoVo.getFirstStatusName()); } } OaExpress add = BeanUtil.toBean(oaExpressVo, OaExpress.class); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFurnitureTableServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFurnitureTableServiceImpl.java index 99cb87d..f859e5a 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFurnitureTableServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFurnitureTableServiceImpl.java @@ -75,6 +75,8 @@ public class OaFurnitureTableServiceImpl implements IOaFurnitureTableService { lqw.eq(bo.getLastEmailSendTime() != null, OaFurnitureTable::getLastEmailSendTime, bo.getLastEmailSendTime()); lqw.eq(StringUtils.isNotBlank(bo.getContactPerson()), OaFurnitureTable::getContactPerson, bo.getContactPerson()); lqw.eq(bo.getReceiveCount() != null, OaFurnitureTable::getReceiveCount, bo.getReceiveCount()); + // 按邮件发送次数升序排序,发送次数少的靠前显示 + lqw.orderByAsc(OaFurnitureTable::getEmailSendCount); return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/SfRouteQueryUtil.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/SfRouteQueryUtil.java index 14b2298..41efd57 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/SfRouteQueryUtil.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/SfRouteQueryUtil.java @@ -216,8 +216,8 @@ public class SfRouteQueryUtil { public static void main(String[] args) { - String mailNo = "SF0282456509537"; - String result = queryRoute(mailNo,"18012017423"); + String mailNo = "SF3191365477469"; + String result = queryRoute(mailNo,"15075462410"); System.out.println(result); OaExpressVo oaExpress = parseData(result); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/StoRouteQueryUtil.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/StoRouteQueryUtil.java index 6a87f4c..df98ea9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/StoRouteQueryUtil.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/StoRouteQueryUtil.java @@ -12,6 +12,7 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.net.URLEncoder; @@ -106,9 +107,21 @@ public class StoRouteQueryUtil { JSONObject last = arr.getJSONObject(arr.size() - 1); OaExpressVo vo = new OaExpressVo(); vo.setExpressCode(last.getString("waybillNo")); - vo.setLastUpdateTime(last.getDate("opTime")); - vo.setLastStatus(last.getString("scanType")); - vo.setRemark(last.getString("memo")); + // 设置时间 + String opTime = last.getString("opTime"); + if (opTime != null) { + try { + // 解析时间格式 "2025-07-27 13:01:00" + java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + vo.setAcceptTime(sdf.parse(opTime)); + } catch (Exception e) { + vo.setAcceptTime(null); + } + } + // 设置状态 - 使用scanType作为状态 + vo.setFirstStatusName(last.getString("memo")); + // 设置备注 - 使用memo作为备注 + vo.setRemark(last.getString("scanType")); return vo; } } catch (Exception e) { @@ -120,7 +133,7 @@ public class StoRouteQueryUtil { // main方法测试 public static void main(String[] args) { List waybillNos = new ArrayList<>(); - waybillNos.add("777325378857266"); // 测试单号 + waybillNos.add("777326763655544"); // 测试单号 String result = queryRoute(waybillNos); System.out.println("申通原始返回:" + result); OaExpressVo vo = parseData(result); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoTrackQueryUtil.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoTrackQueryUtil.java index aff7bb6..9d33b32 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoTrackQueryUtil.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/utils/ZtoTrackQueryUtil.java @@ -114,8 +114,8 @@ public class ZtoTrackQueryUtil { // main方法测试 public static void main(String[] args) throws IOException { System.out.println("本机公网IP为: " + getPublicIp()); - String billCode = "78921681808881"; - OaExpressVo result = queryTrack(billCode,"9553"); + String billCode = "78925013374727"; + OaExpressVo result = queryTrack(billCode,"2410"); System.out.println(result); } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaExpressMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaExpressMapper.xml index c2a6906..adc9d77 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaExpressMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaExpressMapper.xml @@ -50,7 +50,7 @@ left join sys_user su on su.user_id = oe.owner_id left join sys_oa_project sop on sop.project_id = oe.project_id left join oa_report_detail ord on ord.detail_id = oe.detail_id - ${ew.getCustomSqlSegment} + ${ew.customSqlSegment}