fix 修复 一些发现的小bug

- 短信验证码限流 key 改为 #phoneNumber,验证码改为发送成功后再写 Redis,失败消息避免 NPE
- 邮箱验证码改为邮件发送成功后再写 Redis
- ValidatorUtils 增加 NPE 校验
- 部门导入路径不存在时明确报错,不再静默转成 null
- 重复提交切面完整扫描数组、集合、Map 中的过滤对象
- Excel 级联下拉补齐一级选项的 Excel 名称规则校验和重复校验
This commit is contained in:
疯狂的狮子Li
2026-06-08 16:47:01 +08:00
parent 671fcb1249
commit 54d81e1c1b
7 changed files with 71 additions and 12 deletions
@@ -62,13 +62,13 @@ public class SysEmailController extends BaseController {
public void emailCodeImpl(String email) {
String key = GlobalConstants.CAPTCHA_CODE_KEY + email;
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
try {
MailBuilder.of()
.to(email)
.subject("登录验证码")
.text("您本次验证码为:" + code + ",有效性为" + Constants.CAPTCHA_EXPIRATION + "分钟,请尽快填写。")
.send();
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
} catch (Exception e) {
log.error("验证码短信发送异常 => {}", e.getMessage());
throw new ServiceException(e.getMessage());
@@ -40,7 +40,7 @@ public class SysSmsController extends BaseController {
*
* @param phoneNumber 用户手机号
*/
@RateLimiter(key = "#phonenumber", time = 60, count = 1)
@RateLimiter(key = "#phoneNumber", time = 60, count = 1)
@GetMapping("/code")
public R<Void> smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}") String phoneNumber) {
if (!RegexValidator.isMobile(phoneNumber)) {
@@ -48,7 +48,6 @@ public class SysSmsController extends BaseController {
}
String key = GlobalConstants.CAPTCHA_CODE_KEY + phoneNumber;
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
// 验证码模板id 自行处理 (查数据库或写死均可)
String templateId = "";
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
@@ -57,8 +56,10 @@ public class SysSmsController extends BaseController {
SmsResponse smsResponse = smsBlend.sendMessage(phoneNumber, templateId, map);
if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse);
return R.fail(smsResponse.getData().toString());
Object data = smsResponse.getData();
return R.fail(data == null ? "验证码短信发送失败" : data.toString());
}
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
return R.ok();
}
@@ -10,6 +10,7 @@ import org.apache.fesod.sheet.metadata.GlobalConfiguration;
import org.apache.fesod.sheet.metadata.data.ReadCellData;
import org.apache.fesod.sheet.metadata.data.WriteCellData;
import org.apache.fesod.sheet.metadata.property.ExcelContentProperty;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.TreeBuildUtils;
@@ -88,7 +89,11 @@ public class DeptExcelConverter implements Converter<Long> {
if (StringUtils.isBlank(deptName)) {
return null;
}
return getDeptMaps().nameToId().get(deptName);
Long deptId = getDeptMaps().nameToId().get(deptName);
if (deptId == null) {
throw new ServiceException("部门不存在:" + deptName);
}
return deptId;
}
/**