pull/1121/head
梁宇奇 2025-07-20 20:35:14 +08:00
parent b71cf2192f
commit 236167a12d
5 changed files with 77 additions and 54 deletions

View File

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

View File

@ -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("验证码错误");
}
}
}

View File

@ -25,6 +25,10 @@ public class ExpressTrackDTO {
*
*/
private String expressName;
/**
* [1: 2:]
*/
private Integer expressType;
/**
*
*/

View File

@ -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("验证码错误");
}
}

View File

@ -433,7 +433,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
@Override
public List<ShipLabelPreOrgPrintItemDTO> listPreOrgPrintItem(Long storeOrderId) {
List<ExpressTrackDTO> dtos = getOrderExpressTracks(storeOrderId, true);
List<ExpressTrackDTO> dtos = getOrderExpressTracks(storeOrderId, true)
.stream()
.filter(o -> EExpressType.PLATFORM.getValue().equals(o.getExpressType()))
.collect(Collectors.toList());
Set<String> 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<StoreOrderPageItemDTO> page(StoreOrderQueryDTO queryDTO) {
Page<StoreOrderPageItemDTO> page = PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize());
Page<StoreOrderPageItemDTO> page = PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize(),
"so.create_time DESC");
storeOrderMapper.listStoreOrderPageItem(queryDTO);
if (CollUtil.isNotEmpty(page.getResult())) {
List<StoreOrderPageItemDTO> list = page.getResult();