From 236167a12dccb8b2336f5338287d1d16c01ba812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=AE=87=E5=A5=87?= Date: Sun, 20 Jul 2025 20:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/framework/sms/SmsClientWrapper.java | 55 ++++++++++++++++++- .../web/service/SysLoginService.java | 39 +++---------- .../xkt/dto/express/ExpressTrackDTO.java | 4 ++ .../xkt/service/impl/AssetServiceImpl.java | 23 ++------ .../service/impl/StoreOrderServiceImpl.java | 10 +++- 5 files changed, 77 insertions(+), 54 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/sms/SmsClientWrapper.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/sms/SmsClientWrapper.java index efd44d243..4bac5a3c7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/sms/SmsClientWrapper.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/sms/SmsClientWrapper.java @@ -1,5 +1,9 @@ package com.ruoyi.framework.sms; +import cn.hutool.core.util.StrUtil; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.framework.sms.ali.AliSmsServer; import com.ruoyi.framework.sms.ali.entity.AliSmsResponse; import lombok.extern.slf4j.Slf4j; @@ -7,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.util.concurrent.TimeUnit; + @Slf4j @Component public class SmsClientWrapper { @@ -14,9 +20,15 @@ public class SmsClientWrapper { @Autowired private AliSmsServer aliSmsServer; + @Autowired + private RedisCache redisCache; + @Value("${sms.send:true}") private Boolean doSend; + @Value("${sms.verificationCode.testModel:false}") + private Boolean testModel; + @Value("${sms.verificationCode.signName:}") private String verificationCodeSignName; @@ -37,9 +49,48 @@ public class SmsClientWrapper { return sendResult; } - public boolean sendVerificationCode(String phoneNumber, String code) { - return sendSms(verificationCodeSignName, phoneNumber, verificationCodeTemplateCode, + /** + * 发送短信验证码 + * + * @param cacheKeyPrefix + * @param phoneNumber + * @param code + * @return + */ + public boolean sendVerificationCode(String cacheKeyPrefix, String phoneNumber, String code) { + String checkKey = CacheConstants.SMS_CAPTCHA_CODE_CD_PHONE_NUM_KEY + phoneNumber; + if (redisCache.exists(checkKey)) { + throw new ServiceException("验证码发送间隔需大于60S"); + } + boolean success = sendSms(verificationCodeSignName, phoneNumber, verificationCodeTemplateCode, "{\"code\":\"" + code + "\"}"); + if (success) { + redisCache.setCacheObject(checkKey, "1", 60, TimeUnit.SECONDS); + redisCache.setCacheObject(cacheKeyPrefix + phoneNumber, code, 300, TimeUnit.SECONDS); + } + return success; + } + + /** + * 校验短信验证码 + * + * @param cacheKeyPrefix + * @param phoneNumber + * @param code + * @return + */ + public boolean matchVerificationCode(String cacheKeyPrefix, String phoneNumber, String code) { + if (testModel) { + //测试模式 + return true; + } + String rk = cacheKeyPrefix + phoneNumber; + String cacheCode = redisCache.getCacheObject(rk); + if (cacheCode == null) { + return false; + } + redisCache.deleteObject(rk); + return StrUtil.equals(cacheCode, code); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index c7bb2aa7e..b20529de1 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -23,12 +23,8 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.AuthenticationManager; import org.springframework.stereotype.Component; -import javax.annotation.Resource; -import java.util.concurrent.TimeUnit; - /** * 登录校验方法 * @@ -243,29 +239,13 @@ public class SysLoginService { * @param uuid 图形验证码uuid */ public void sendSmsVerificationCode(String phoneNumber, boolean checkPicCode, String code, String uuid) { - String k = CacheConstants.SMS_CAPTCHA_CODE_CD_PHONE_NUM_KEY + phoneNumber; - String v = redisCache.getCacheObject(k); - if (StrUtil.isNotEmpty(v)) { - throw new ServiceException("验证码发送间隔需大于60S"); - } if (checkPicCode) { validateCaptcha(null, code, uuid); } - sendSmsVerificationCode(phoneNumber); - redisCache.setCacheObject(k, "1", 60, TimeUnit.SECONDS); - } - - /** - * 发送登录/注册短信验证码 - * - * @param phoneNumber 电话号码 - */ - public void sendSmsVerificationCode(String phoneNumber) { - String code = RandomUtil.randomNumbers(6); - boolean success = smsClient.sendVerificationCode(phoneNumber, code); - if (success) { - String rk = CacheConstants.SMS_LOGIN_CAPTCHA_CODE_KEY + phoneNumber; - redisCache.setCacheObject(rk, code, 5, TimeUnit.MINUTES); + boolean success = smsClient.sendVerificationCode(CacheConstants.SMS_LOGIN_CAPTCHA_CODE_KEY, phoneNumber, + RandomUtil.randomNumbers(6)); + if (!success) { + throw new ServiceException("短信发送失败"); } } @@ -277,14 +257,9 @@ public class SysLoginService { * @return */ public void validateSmsVerificationCode(String phoneNumber, String code) { - String rk = CacheConstants.SMS_LOGIN_CAPTCHA_CODE_KEY + phoneNumber; - String cacheCode = redisCache.getCacheObject(rk); - if (cacheCode == null) { - throw new CaptchaExpireException(); - } - redisCache.deleteObject(rk); - if (!StrUtil.equals(cacheCode, code)) { - throw new CaptchaException(); + boolean match = smsClient.matchVerificationCode(CacheConstants.SMS_LOGIN_CAPTCHA_CODE_KEY, phoneNumber, code); + if (!match) { + throw new ServiceException("验证码错误"); } } } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/express/ExpressTrackDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/express/ExpressTrackDTO.java index a8b4bcd3c..db3845717 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/express/ExpressTrackDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/express/ExpressTrackDTO.java @@ -25,6 +25,10 @@ public class ExpressTrackDTO { * 物流名称 */ private String expressName; + /** + * 物流类型[1:平台物流 2:档口物流] + */ + private Integer expressType; /** * 商品概要 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AssetServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AssetServiceImpl.java index 54aab62c4..258a057d4 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AssetServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AssetServiceImpl.java @@ -42,7 +42,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; /** * @author liangyq @@ -333,18 +332,11 @@ public class AssetServiceImpl implements IAssetService { @Override public void sendSmsVerificationCode(String phoneNumber) { - String k = CacheConstants.SMS_CAPTCHA_CODE_CD_PHONE_NUM_KEY + phoneNumber; - String v = redisCache.getCacheObject(k); - if (StrUtil.isNotEmpty(v)) { - throw new ServiceException("验证码发送间隔需大于60S"); - } - String code = RandomUtil.randomNumbers(6); - boolean success = smsClient.sendVerificationCode(phoneNumber, code); + boolean success = smsClient.sendVerificationCode(CacheConstants.SMS_ASSET_CAPTCHA_CODE_KEY, phoneNumber, + RandomUtil.randomNumbers(6)); if (success) { - String rk = CacheConstants.SMS_ASSET_CAPTCHA_CODE_KEY + phoneNumber; - redisCache.setCacheObject(rk, code, 5, TimeUnit.MINUTES); + throw new ServiceException("短信发送失败"); } - redisCache.setCacheObject(k, "1", 60, TimeUnit.SECONDS); } @Override @@ -371,13 +363,8 @@ public class AssetServiceImpl implements IAssetService { * @return */ private void validateSmsVerificationCode(String phoneNumber, String code) { - String rk = CacheConstants.SMS_ASSET_CAPTCHA_CODE_KEY + phoneNumber; - String cacheCode = redisCache.getCacheObject(rk); - if (cacheCode == null) { - throw new ServiceException("验证码已失效"); - } - redisCache.deleteObject(rk); - if (!StrUtil.equals(cacheCode, code)) { + boolean match = smsClient.matchVerificationCode(CacheConstants.SMS_ASSET_CAPTCHA_CODE_KEY, phoneNumber, code); + if (!match) { throw new ServiceException("验证码错误"); } } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java index 70c0e0c36..229a2f3ef 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java @@ -433,7 +433,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService { @Override public List listPreOrgPrintItem(Long storeOrderId) { - List dtos = getOrderExpressTracks(storeOrderId, true); + List dtos = getOrderExpressTracks(storeOrderId, true) + .stream() + .filter(o -> EExpressType.PLATFORM.getValue().equals(o.getExpressType())) + .collect(Collectors.toList()); Set expressWaybillNos = dtos.stream().map(ExpressTrackDTO::getExpressWaybillNo) .collect(Collectors.toSet()); if (CollUtil.isEmpty(expressWaybillNos)) { @@ -511,6 +514,7 @@ public class StoreOrderServiceImpl implements IStoreOrderService { expressTrackDTO.setCreateTime(createTime); expressTrackDTO.setExpressId(expressId); expressTrackDTO.setExpressName(expressNameMap.get(expressId)); + expressTrackDTO.setExpressType(oneDetail.getExpressType()); expressTrackDTO.setExpressWaybillNo(entry.getKey()); expressTrackDTO.setGoodsSummary(goodsSummaryStr); expressTrackDTO.setRecords(trackRecordGroupMap.getOrDefault(entry.getKey(), ListUtil.empty())); @@ -523,6 +527,7 @@ public class StoreOrderServiceImpl implements IStoreOrderService { expressTrackDTO.setCreateTime(createTime); expressTrackDTO.setExpressId(expressId); expressTrackDTO.setExpressName(expressNameMap.get(expressId)); + expressTrackDTO.setExpressType(oneDetail.getExpressType()); expressTrackDTO.setExpressWaybillNo(expressWaybillNo); expressTrackDTO.setGoodsSummary(goodsSummaryStr); //通过快递100查询轨迹 @@ -543,7 +548,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService { @Override public Page page(StoreOrderQueryDTO queryDTO) { - Page page = PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize()); + Page page = PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize(), + "so.create_time DESC"); storeOrderMapper.listStoreOrderPageItem(queryDTO); if (CollUtil.isNotEmpty(page.getResult())) { List list = page.getResult();