diff --git a/continew-admin-monitor/src/main/java/top/charles7c/continew/admin/monitor/service/impl/LogServiceImpl.java b/continew-admin-monitor/src/main/java/top/charles7c/continew/admin/monitor/service/impl/LogServiceImpl.java index e8d5d22b..efe0422f 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/continew/admin/monitor/service/impl/LogServiceImpl.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/continew/admin/monitor/service/impl/LogServiceImpl.java @@ -40,7 +40,6 @@ import top.charles7c.continew.starter.extension.crud.model.resp.PageResp; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * 系统日志业务实现 @@ -64,7 +63,7 @@ public class LogServiceImpl implements LogService { List columnNameList = fieldNameList.stream() .filter(n -> !n.endsWith(SysConstants.DESCRIPTION_FIELD_SUFFIX)) .map(StrUtil::toUnderlineCase) - .collect(Collectors.toList()); + .toList(); queryWrapper.select(columnNameList); // 分页查询 IPage page = logMapper.selectPage(pageQuery.toPage(), queryWrapper); @@ -81,7 +80,7 @@ public class LogServiceImpl implements LogService { List columnNameList = fieldNameList.stream() .filter(n -> !n.endsWith(SysConstants.DESCRIPTION_FIELD_SUFFIX)) .map(StrUtil::toUnderlineCase) - .collect(Collectors.toList()); + .toList(); queryWrapper.select(columnNameList); // 分页查询 IPage page = logMapper.selectPage(pageQuery.toPage(), queryWrapper); @@ -97,7 +96,7 @@ public class LogServiceImpl implements LogService { List columnNameList = fieldNameList.stream() .filter(n -> !n.endsWith(SysConstants.DESCRIPTION_FIELD_SUFFIX)) .map(StrUtil::toUnderlineCase) - .collect(Collectors.toList()); + .toList(); queryWrapper.select(columnNameList); // 分页查询 IPage page = logMapper.selectPage(pageQuery.toPage(), queryWrapper); diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/auth/service/impl/LoginServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/auth/service/impl/LoginServiceImpl.java index be7674b0..8d92fbee 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/auth/service/impl/LoginServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/auth/service/impl/LoginServiceImpl.java @@ -56,7 +56,6 @@ import top.charles7c.continew.starter.extension.crud.util.TreeUtils; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Collectors; /** * 登录业务实现 @@ -158,9 +157,7 @@ public class LoginServiceImpl implements LoginService { } else { roleCodeSet.forEach(roleCode -> menuSet.addAll(menuService.listByRoleCode(roleCode))); } - List menuList = menuSet.stream() - .filter(m -> !MenuTypeEnum.BUTTON.equals(m.getType())) - .collect(Collectors.toList()); + List menuList = menuSet.stream().filter(m -> !MenuTypeEnum.BUTTON.equals(m.getType())).toList(); // 构建路由树 TreeField treeField = MenuResp.class.getDeclaredAnnotation(TreeField.class); TreeNodeConfig treeNodeConfig = TreeUtils.genTreeNodeConfig(treeField); @@ -175,7 +172,7 @@ public class LoginServiceImpl implements LoginService { MetaResp metaResp = new MetaResp(); metaResp.setLocale(m.getTitle()); metaResp.setIcon(m.getIcon()); - metaResp.setIgnoreCache(!m.getIsCache()); + metaResp.setIgnoreCache(Boolean.FALSE.equals(m.getIsCache())); metaResp.setHideInMenu(m.getIsHidden()); metaResp.setOrder(m.getSort()); tree.putExtra("meta", metaResp); diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/DictItemMapper.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/DictItemMapper.java index d35fec4f..75769882 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/DictItemMapper.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/mapper/DictItemMapper.java @@ -21,6 +21,7 @@ import top.charles7c.continew.admin.common.model.resp.LabelValueResp; import top.charles7c.continew.admin.system.model.entity.DictItemDO; import top.charles7c.continew.starter.data.mybatis.plus.base.BaseMapper; +import java.io.Serializable; import java.util.List; /** @@ -37,5 +38,5 @@ public interface DictItemMapper extends BaseMapper { * @param dictCode 字典编码 * @return 字典项列表 */ - List listByDictCode(@Param("dictCode") String dictCode); + List> listByDictCode(@Param("dictCode") String dictCode); } \ No newline at end of file diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/DictItemService.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/DictItemService.java index fb612104..536a3a98 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/DictItemService.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/DictItemService.java @@ -25,6 +25,7 @@ import top.charles7c.continew.admin.system.model.resp.DictItemResp; import top.charles7c.continew.starter.extension.crud.service.BaseService; import top.charles7c.continew.starter.extension.crud.service.IService; +import java.io.Serializable; import java.util.List; /** @@ -49,7 +50,7 @@ public interface DictItemService extends BaseService listByDictCode(String dictCode); + List> listByDictCode(String dictCode); /** * 根据字典 ID 列表删除 diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/DictItemServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/DictItemServiceImpl.java index a02207cd..9e834088 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/DictItemServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/DictItemServiceImpl.java @@ -30,6 +30,7 @@ import top.charles7c.continew.starter.core.util.validate.CheckUtils; import top.charles7c.continew.starter.extension.crud.service.impl.BaseServiceImpl; import top.charles7c.continew.starter.extension.crud.model.query.SortQuery; +import java.io.Serializable; import java.util.List; /** @@ -66,7 +67,7 @@ public class DictItemServiceImpl extends BaseServiceImpl listByDictCode(String dictCode) { + public List> listByDictCode(String dictCode) { return baseMapper.listByDictCode(dictCode); } diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java index 0e7d8346..5888b26d 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/MessageUserServiceImpl.java @@ -16,17 +16,9 @@ package top.charles7c.continew.admin.system.service.impl; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Service; - import cn.hutool.core.collection.CollUtil; - +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import top.charles7c.continew.admin.common.enums.MessageTypeEnum; import top.charles7c.continew.admin.system.mapper.MessageUserMapper; import top.charles7c.continew.admin.system.model.entity.MessageUserDO; @@ -35,6 +27,10 @@ import top.charles7c.continew.admin.system.model.resp.MessageUnreadResp; import top.charles7c.continew.admin.system.service.MessageUserService; import top.charles7c.continew.starter.core.util.validate.CheckUtils; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + /** * 消息和用户关联业务实现 * @@ -78,7 +74,7 @@ public class MessageUserServiceImpl implements MessageUserService { messageUser.setMessageId(messageId); messageUser.setIsRead(false); return messageUser; - }).collect(Collectors.toList()); + }).toList(); baseMapper.insertBatch(messageUserList); } diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleDeptServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleDeptServiceImpl.java index acf619ad..30526654 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleDeptServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleDeptServiceImpl.java @@ -28,7 +28,6 @@ import top.charles7c.continew.admin.system.model.entity.RoleDeptDO; import top.charles7c.continew.admin.system.service.RoleDeptService; import java.util.List; -import java.util.stream.Collectors; /** * 角色和部门业务实现 @@ -52,16 +51,14 @@ public class RoleDeptServiceImpl implements RoleDeptService { .list() .stream() .map(RoleDeptDO::getDeptId) - .collect(Collectors.toList()); + .toList(); if (CollUtil.isEmpty(CollUtil.disjunction(deptIds, oldDeptIdList))) { return false; } // 删除原有关联 roleDeptMapper.lambdaUpdate().eq(RoleDeptDO::getRoleId, roleId).remove(); // 保存最新关联 - List roleDeptList = deptIds.stream() - .map(deptId -> new RoleDeptDO(roleId, deptId)) - .collect(Collectors.toList()); + List roleDeptList = deptIds.stream().map(deptId -> new RoleDeptDO(roleId, deptId)).toList(); return roleDeptMapper.insertBatch(roleDeptList); } diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleMenuServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleMenuServiceImpl.java index 7a01353a..3955b56d 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleMenuServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleMenuServiceImpl.java @@ -16,21 +16,18 @@ package top.charles7c.continew.admin.system.service.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - +import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import cn.hutool.core.collection.CollUtil; - import top.charles7c.continew.admin.system.mapper.RoleMenuMapper; import top.charles7c.continew.admin.system.model.entity.RoleMenuDO; import top.charles7c.continew.admin.system.service.RoleMenuService; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + /** * 角色和菜单业务实现 * @@ -60,9 +57,7 @@ public class RoleMenuServiceImpl implements RoleMenuService { // 删除原有关联 roleMenuMapper.lambdaUpdate().eq(RoleMenuDO::getRoleId, roleId).remove(); // 保存最新关联 - List roleMenuList = menuIds.stream() - .map(menuId -> new RoleMenuDO(roleId, menuId)) - .collect(Collectors.toList()); + List roleMenuList = menuIds.stream().map(menuId -> new RoleMenuDO(roleId, menuId)).toList(); return roleMenuMapper.insertBatch(roleMenuList); } diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleServiceImpl.java index 0b9bb72e..65dbadb7 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/RoleServiceImpl.java @@ -133,7 +133,7 @@ public class RoleServiceImpl extends BaseServiceImpl list = menuService.list(null, null); - List menuIds = list.stream().map(MenuResp::getId).collect(Collectors.toList()); + List menuIds = list.stream().map(MenuResp::getId).toList(); detail.setMenuIds(menuIds); } else { detail.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId))); @@ -152,7 +152,7 @@ public class RoleServiceImpl extends BaseServiceImpl listNameByIds(List ids) { List roleList = baseMapper.lambdaQuery().select(RoleDO::getName).in(RoleDO::getId, ids).list(); - return roleList.stream().map(RoleDO::getName).collect(Collectors.toList()); + return roleList.stream().map(RoleDO::getName).toList(); } @Override diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/StorageServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/StorageServiceImpl.java index 7804b5ec..d75d2a2a 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/StorageServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/StorageServiceImpl.java @@ -167,10 +167,7 @@ public class StorageServiceImpl extends BaseServiceImpl userRoleList = roleIds.stream() - .map(roleId -> new UserRoleDO(userId, roleId)) - .collect(Collectors.toList()); + List userRoleList = roleIds.stream().map(roleId -> new UserRoleDO(userId, roleId)).toList(); return userRoleMapper.insertBatch(userRoleList); } diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java index 70d6c0ec..28b01acb 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java @@ -75,6 +75,7 @@ public class UserServiceImpl extends BaseServiceImpl 0, "手机号已绑定其他账号,请更换其他手机号"); CheckUtils.throwIfEqual(newPhone, user.getPhone(), "新手机号不能与当前手机号相同"); @@ -221,7 +224,7 @@ public class UserServiceImpl extends BaseServiceImpl 0, "邮箱已绑定其他账号,请更换其他邮箱"); CheckUtils.throwIfEqual(newEmail, user.getEmail(), "新邮箱不能与当前邮箱相同"); diff --git a/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/GeneratorServiceImpl.java b/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/GeneratorServiceImpl.java index 883ecc7d..ea997a0b 100644 --- a/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/GeneratorServiceImpl.java +++ b/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/GeneratorServiceImpl.java @@ -131,13 +131,13 @@ public class GeneratorServiceImpl implements GeneratorService { List fieldConfigList = fieldConfigMapper.selectListByTableName(tableName); if (CollUtil.isEmpty(fieldConfigList)) { Collection columnList = MetaUtils.getColumns(dataSource, tableName); - return columnList.stream().map(FieldConfigDO::new).collect(Collectors.toList()); + return columnList.stream().map(FieldConfigDO::new).toList(); } // 同步最新数据表列信息 if (Boolean.TRUE.equals(requireSync)) { Collection columnList = MetaUtils.getColumns(dataSource, tableName); // 移除已不存在的字段配置 - List columnNameList = columnList.stream().map(Column::getName).collect(Collectors.toList()); + List columnNameList = columnList.stream().map(Column::getName).toList(); fieldConfigList.removeIf(column -> !columnNameList.contains(column.getColumnName())); // 新增或更新字段配置 Map fieldConfigMap = fieldConfigList.stream() @@ -168,13 +168,13 @@ public class GeneratorServiceImpl implements GeneratorService { fieldConfigMapper.delete(Wrappers.lambdaQuery(FieldConfigDO.class).eq(FieldConfigDO::getTableName, tableName)); List fieldConfigList = req.getFieldConfigs(); for (FieldConfigDO fieldConfig : fieldConfigList) { - if (fieldConfig.getShowInForm()) { + if (Boolean.TRUE.equals(fieldConfig.getShowInForm())) { CheckUtils.throwIfNull(fieldConfig.getFormType(), "字段 [{}] 的表单类型不能为空", fieldConfig.getFieldName()); } else { // 在表单中不显示,不需要设置必填 fieldConfig.setIsRequired(false); } - if (fieldConfig.getShowInQuery()) { + if (Boolean.TRUE.equals(fieldConfig.getShowInQuery())) { CheckUtils.throwIfNull(fieldConfig.getFormType(), "字段 [{}] 的表单类型不能为空", fieldConfig.getFieldName()); CheckUtils.throwIfNull(fieldConfig.getQueryType(), "字段 [{}] 的查询方式不能为空", fieldConfig.getFieldName()); } else { @@ -182,7 +182,8 @@ public class GeneratorServiceImpl implements GeneratorService { fieldConfig.setQueryType(null); } // 既不在表单也不在查询中显示,不需要设置表单类型 - if (!fieldConfig.getShowInForm() && !fieldConfig.getShowInQuery()) { + if (Boolean.FALSE.equals(fieldConfig.getShowInForm()) && Boolean.FALSE.equals(fieldConfig + .getShowInQuery())) { fieldConfig.setFormType(null); } fieldConfig.setTableName(tableName); @@ -275,7 +276,7 @@ public class GeneratorServiceImpl implements GeneratorService { // 2.生成代码 List backendCodePreviewList = generatePreviewList.stream() .filter(GeneratePreviewResp::isBackend) - .collect(Collectors.toList()); + .toList(); Map templateConfigMap = generatorProperties.getTemplateConfigs(); for (GeneratePreviewResp codePreview : backendCodePreviewList) { // 例如:D:/continew-admin/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/XxxServiceImpl.java @@ -298,7 +299,7 @@ public class GeneratorServiceImpl implements GeneratorService { } List frontendCodePreviewList = generatePreviewList.stream() .filter(p -> !p.isBackend()) - .collect(Collectors.toList()); + .toList(); // 1.生成 api 代码 String apiModuleName = StrUtil.subSuf(packageName, StrUtil .lastIndexOfIgnoreCase(packageName, StringConstants.DOT) + 1); @@ -342,7 +343,7 @@ public class GeneratorServiceImpl implements GeneratorService { // 移除需要忽略的字段 List fieldConfigList = originFieldConfigList.stream() .filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig.getExcludeFields())) - .collect(Collectors.toList()); + .toList(); genConfigMap.put("fieldConfigs", fieldConfigList); // 统计部分特殊字段特征 genConfigMap.put("hasLocalDateTime", false); diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/AuthController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/AuthController.java index 3c4ef80e..d6614c88 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/AuthController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/AuthController.java @@ -62,6 +62,8 @@ public class AuthController { private final LoginService loginService; private final UserService userService; + private static final String CAPTCHA_EXPIRED = "验证码已失效"; + private static final String CAPTCHA_ERROR = "验证码错误"; @SaIgnore @Operation(summary = "账号登录", description = "根据账号和密码进行登录认证") @@ -69,9 +71,9 @@ public class AuthController { public R accountLogin(@Validated @RequestBody AccountLoginReq loginReq) { String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + loginReq.getUuid(); String captcha = RedisUtils.get(captchaKey); - ValidationUtils.throwIfBlank(captcha, "验证码已失效"); + ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED); RedisUtils.delete(captchaKey); - ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, "验证码错误"); + ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, CAPTCHA_ERROR); // 用户登录 String rawPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(loginReq.getPassword())); ValidationUtils.throwIfBlank(rawPassword, "密码解密失败"); @@ -86,8 +88,8 @@ public class AuthController { String email = loginReq.getEmail(); String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + email; String captcha = RedisUtils.get(captchaKey); - ValidationUtils.throwIfBlank(captcha, "验证码已失效"); - ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, "验证码错误"); + ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED); + ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, CAPTCHA_ERROR); RedisUtils.delete(captchaKey); String token = loginService.emailLogin(email); return R.ok(LoginResp.builder().token(token).build()); @@ -100,8 +102,8 @@ public class AuthController { String phone = loginReq.getPhone(); String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + phone; String captcha = RedisUtils.get(captchaKey); - ValidationUtils.throwIfBlank(captcha, "验证码已失效"); - ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, "验证码错误"); + ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED); + ValidationUtils.throwIfNotEqualIgnoreCase(loginReq.getCaptcha(), captcha, CAPTCHA_ERROR); RedisUtils.delete(captchaKey); String token = loginService.phoneLogin(phone); return R.ok(LoginResp.builder().token(token).build()); diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java index b5c3aac7..bd0e9210 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java @@ -73,8 +73,8 @@ import java.util.Map; @RequestMapping("/captcha") public class CaptchaController { - private final CaptchaService captchaService; - private final Captcha captcha; + private final CaptchaService behaviorCaptchaService; + private final Captcha graphicCaptchaService; private final ProjectProperties projectProperties; private final CaptchaProperties captchaProperties; @@ -83,14 +83,14 @@ public class CaptchaController { @GetMapping("/behavior") public R getBehaviorCaptcha(CaptchaVO captchaReq, HttpServletRequest request) { captchaReq.setBrowserInfo(JakartaServletUtil.getClientIP(request) + request.getHeader(HttpHeaders.USER_AGENT)); - return R.ok(captchaService.get(captchaReq).getRepData()); + return R.ok(behaviorCaptchaService.get(captchaReq).getRepData()); } @Log(ignore = true) @Operation(summary = "校验行为验证码", description = "校验行为验证码") @PostMapping("/behavior") public R checkBehaviorCaptcha(@RequestBody CaptchaVO captchaReq) { - return R.ok(captchaService.check(captchaReq)); + return R.ok(behaviorCaptchaService.check(captchaReq)); } @Log(ignore = true) @@ -99,8 +99,9 @@ public class CaptchaController { public R getImageCaptcha() { String uuid = IdUtil.fastUUID(); String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + uuid; - RedisUtils.set(captchaKey, captcha.text(), Duration.ofMinutes(captchaProperties.getExpirationInMinutes())); - return R.ok(CaptchaResp.builder().uuid(uuid).img(captcha.toBase64()).build()); + RedisUtils.set(captchaKey, graphicCaptchaService.text(), Duration.ofMinutes(captchaProperties + .getExpirationInMinutes())); + return R.ok(CaptchaResp.builder().uuid(uuid).img(graphicCaptchaService.toBase64()).build()); } @Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱") @@ -133,7 +134,7 @@ public class CaptchaController { CaptchaVO captchaReq, HttpServletRequest request) { // 行为验证码校验 - ResponseModel verificationRes = captchaService.verification(captchaReq); + ResponseModel verificationRes = behaviorCaptchaService.verification(captchaReq); ValidationUtils.throwIfNotEqual(verificationRes.getRepCode(), RepCodeEnum.SUCCESS.getCode(), verificationRes .getRepMsg()); CaptchaProperties.CaptchaSms captchaSms = captchaProperties.getSms(); @@ -143,20 +144,20 @@ public class CaptchaController { String limitTemplateKeyPrefix = limitKeyPrefix + captchaKeyPrefix; // 限制短信发送频率 // 1.同一号码同一短信模板,1分钟2条,1小时8条,24小时20条,e.g. LIMIT:CAPTCHA:XXX:188xxxxx:1 + final String errorMsg = "获取验证码操作太频繁,请稍后再试"; CheckUtils.throwIf(!RedisUtils.rateLimit(RedisUtils - .formatKey(limitTemplateKeyPrefix + "MIN", phone, templateId), RateType.OVERALL, 2, 60), "验证码发送过于频繁,请稍后后再试"); + .formatKey(limitTemplateKeyPrefix + "MIN", phone, templateId), RateType.OVERALL, 2, 60), errorMsg); CheckUtils.throwIf(!RedisUtils.rateLimit(RedisUtils - .formatKey(limitTemplateKeyPrefix + "HOUR", phone, templateId), RateType.OVERALL, 8, 60 * 60), "验证码发送过于频繁,请稍后后再试"); + .formatKey(limitTemplateKeyPrefix + "HOUR", phone, templateId), RateType.OVERALL, 8, 60 * 60), errorMsg); CheckUtils.throwIf(!RedisUtils.rateLimit(RedisUtils - .formatKey(limitTemplateKeyPrefix + "DAY", phone, templateId), RateType.OVERALL, 20, 60 * 60 * 24), "验证码发送过于频繁,请稍后后再试"); + .formatKey(limitTemplateKeyPrefix + "DAY", phone, templateId), RateType.OVERALL, 20, 60 * 60 * 24), errorMsg); // 2.同一号码所有短信模板 24 小时 100 条,e.g. LIMIT:CAPTCHA:188xxxxx String limitPhoneKey = limitKeyPrefix + captchaKeyPrefix + phone; - CheckUtils.throwIf(!RedisUtils - .rateLimit(limitPhoneKey, RateType.OVERALL, 100, 60 * 60 * 24), "验证码发送过于频繁,请稍后后再试"); + CheckUtils.throwIf(!RedisUtils.rateLimit(limitPhoneKey, RateType.OVERALL, 100, 60 * 60 * 24), errorMsg); // 3.同一 IP 每分钟限制发送 30 条,e.g. LIMIT:CAPTCHA:PHONE:1xx.1xx.1xx.1xx String limitIpKey = RedisUtils.formatKey(limitKeyPrefix + captchaKeyPrefix + "PHONE", JakartaServletUtil .getClientIP(request)); - CheckUtils.throwIf(!RedisUtils.rateLimit(limitIpKey, RateType.OVERALL, 30, 60), "验证码发送过于频繁,请稍后后再试"); + CheckUtils.throwIf(!RedisUtils.rateLimit(limitIpKey, RateType.OVERALL, 30, 60), errorMsg); // 生成验证码 String captcha = RandomUtil.randomNumbers(captchaSms.getLength()); // 发送验证码 diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CommonController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CommonController.java index 5d6593a5..8b22d431 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CommonController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CommonController.java @@ -44,14 +44,14 @@ import top.charles7c.continew.starter.core.autoconfigure.project.ProjectProperti import top.charles7c.continew.starter.core.util.validate.ValidationUtils; import top.charles7c.continew.starter.data.mybatis.plus.base.IBaseEnum; import top.charles7c.continew.starter.extension.crud.model.query.SortQuery; -import top.charles7c.continew.starter.web.model.R; import top.charles7c.continew.starter.log.common.annotation.Log; +import top.charles7c.continew.starter.web.model.R; +import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; /** * 公共 API @@ -108,21 +108,21 @@ public class CommonController { @CachePenetrationProtect @CacheRefresh(refresh = 3600, stopRefreshAfterLastAccess = 7200) @Cached(key = "#code", name = CacheConstants.DICT_KEY_PREFIX) - public R> listDict(@PathVariable String code) { - Optional> enumClass = this.getEnumClassByName(code); - return R.ok(enumClass.map(this::listEnumDict).orElseGet(() -> dictItemService.listByDictCode(code))); + public R>> listDict(@PathVariable String code) { + Optional> enumClassOptional = this.getEnumClassByName(code); + return R.ok(enumClassOptional.map(this::listEnumDict).orElseGet(() -> dictItemService.listByDictCode(code))); } @SaIgnore @Operation(summary = "查询参数", description = "查询参数") @GetMapping("/option") @Cached(name = CacheConstants.OPTION_KEY_PREFIX) - public R> listOption(@Validated OptionQuery query) { + public R>> listOption(@Validated OptionQuery query) { return R.ok(optionService.list(query) .stream() - .map(option -> new LabelValueResp(option.getCode(), StrUtil.nullToDefault(option.getValue(), option + .map(option -> new LabelValueResp<>(option.getCode(), StrUtil.nullToDefault(option.getValue(), option .getDefaultValue()))) - .collect(Collectors.toList())); + .toList()); } /** @@ -145,11 +145,11 @@ public class CommonController { * @param enumClass 枚举类型 * @return 枚举字典 */ - private List listEnumDict(Class enumClass) { + private List> listEnumDict(Class enumClass) { Object[] enumConstants = enumClass.getEnumConstants(); return Arrays.stream(enumConstants).map(e -> { - IBaseEnum baseEnum = (IBaseEnum)e; + IBaseEnum baseEnum = (IBaseEnum)e; return new LabelValueResp<>(baseEnum.getDescription(), baseEnum.getValue(), baseEnum.getColor()); - }).collect(Collectors.toList()); + }).toList(); } } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java index f44b20bc..7dff0eee 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java @@ -51,7 +51,6 @@ import top.charles7c.continew.starter.core.util.validate.ValidationUtils; import top.charles7c.continew.starter.web.model.R; import java.util.List; -import java.util.stream.Collectors; /** * 个人中心 API @@ -69,6 +68,8 @@ public class UserCenterController { private final UserService userService; private final UserSocialService userSocialService; private final AuthRequestFactory authRequestFactory; + private static final String PASSWORD_DECRYPT_FAILED = "当前密码解密失败"; + private static final String CAPTCHA_EXPIRED = "验证码已失效"; @Operation(summary = "上传头像", description = "用户上传个人头像") @PostMapping("/avatar") @@ -90,7 +91,7 @@ public class UserCenterController { public R updatePassword(@Validated @RequestBody UserPasswordUpdateReq updateReq) { String rawOldPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getOldPassword())); - ValidationUtils.throwIfNull(rawOldPassword, "当前密码解密失败"); + ValidationUtils.throwIfNull(rawOldPassword, PASSWORD_DECRYPT_FAILED); String rawNewPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getNewPassword())); ValidationUtils.throwIfNull(rawNewPassword, "新密码解密失败"); @@ -105,10 +106,10 @@ public class UserCenterController { public R updatePhone(@Validated @RequestBody UserPhoneUpdateReq updateReq) { String rawCurrentPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getCurrentPassword())); - ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败"); + ValidationUtils.throwIfBlank(rawCurrentPassword, PASSWORD_DECRYPT_FAILED); String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + updateReq.getNewPhone(); String captcha = RedisUtils.get(captchaKey); - ValidationUtils.throwIfBlank(captcha, "验证码已失效"); + ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED); ValidationUtils.throwIfNotEqualIgnoreCase(updateReq.getCaptcha(), captcha, "验证码错误"); RedisUtils.delete(captchaKey); userService.updatePhone(updateReq.getNewPhone(), rawCurrentPassword, LoginHelper.getUserId()); @@ -120,10 +121,10 @@ public class UserCenterController { public R updateEmail(@Validated @RequestBody UserEmailUpdateRequest updateReq) { String rawCurrentPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getCurrentPassword())); - ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败"); + ValidationUtils.throwIfBlank(rawCurrentPassword, PASSWORD_DECRYPT_FAILED); String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + updateReq.getNewEmail(); String captcha = RedisUtils.get(captchaKey); - ValidationUtils.throwIfBlank(captcha, "验证码已失效"); + ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED); ValidationUtils.throwIfNotEqualIgnoreCase(updateReq.getCaptcha(), captcha, "验证码错误"); RedisUtils.delete(captchaKey); userService.updateEmail(updateReq.getNewEmail(), rawCurrentPassword, LoginHelper.getUserId()); @@ -140,7 +141,7 @@ public class UserCenterController { userSocialBind.setSource(source); userSocialBind.setDescription(SocialSourceEnum.valueOf(source).getDescription()); return userSocialBind; - }).collect(Collectors.toList()); + }).toList(); return R.ok(userSocialBindList); }