From 18fcc8fbc557cf6fadd29884272eaaf67902e19e Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 10:14:27 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/user/UserController.java | 9 ++++++++ .../system/service/user/AdminUserService.java | 7 ++++++ .../service/user/AdminUserServiceImpl.java | 22 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 1015bc0736..a562ab4387 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -71,6 +71,15 @@ public class UserController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除用户") + @PreAuthorize("@ss.hasPermission('system:user:delete')") + public CommonResult deleteUserList(@RequestParam("ids") List ids) { + userService.deleteUserList(ids); + return success(true); + } + @PutMapping("/update-password") @Operation(summary = "重置用户密码") @PreAuthorize("@ss.hasPermission('system:user:update-password')") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index d5c83bc44a..947c72376c 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -95,6 +95,13 @@ public interface AdminUserService { */ void deleteUser(Long id); + /** + * 批量删除用户 + * + * @param ids 用户编号数组 + */ + void deleteUserList(List ids); + /** * 通过用户名查询用户 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index a2bf89a770..40664ecafd 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -248,6 +248,28 @@ public class AdminUserServiceImpl implements AdminUserService { LogRecordContext.putVariable("user", user); } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteUserList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 1. 校验用户存在 + List users = userMapper.selectByIds(ids); + if (CollUtil.isEmpty(users)) { + return; + } + + // 2. 批量删除用户 + userMapper.deleteByIds(ids); + + // 3. 批量删除用户关联数据 + ids.forEach(id -> { + permissionService.processUserDeleted(id); + userPostMapper.deleteByUserId(id); + }); + } + @Override public AdminUserDO getUserByUsername(String username) { return userMapper.selectByUsername(username); From 28bba9776ce8d08f74ecd98b871f16a7bf85951d Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 14:19:08 +0800 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/tenant/TenantController.java | 9 +++++ .../admin/tenant/TenantPackageController.java | 22 ++++++++++--- .../service/tenant/TenantPackageService.java | 9 ++++- .../tenant/TenantPackageServiceImpl.java | 29 +++++++++++++++- .../system/service/tenant/TenantService.java | 9 ++++- .../service/tenant/TenantServiceImpl.java | 33 ++++++++++++++++++- 6 files changed, 102 insertions(+), 9 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java index 8b4f5c7fa4..c15c5fa349 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantController.java @@ -95,6 +95,15 @@ public class TenantController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除租户") + @PreAuthorize("@ss.hasPermission('system:tenant:delete')") + public CommonResult deleteTenantList(@RequestParam("ids") List ids) { + tenantService.deleteTenantList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得租户") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantPackageController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantPackageController.java index ad9ab3d6c7..68816e3968 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantPackageController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/TenantPackageController.java @@ -4,18 +4,21 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.*; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackageRespVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackageSimpleRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; import cn.iocoder.yudao.module.system.service.tenant.TenantPackageService; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -53,6 +56,15 @@ public class TenantPackageController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除租户套餐") + @PreAuthorize("@ss.hasPermission('system:tenant-package:delete')") + public CommonResult deleteTenantPackageList(@RequestParam("ids") List ids) { + tenantPackageService.deleteTenantPackageList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得租户套餐") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageService.java index 05318f8719..77c0598543 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageService.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; - import jakarta.validation.Valid; + import java.util.List; /** @@ -37,6 +37,13 @@ public interface TenantPackageService { */ void deleteTenantPackage(Long id); + /** + * 批量删除租户套餐 + * + * @param ids 编号数组 + */ + void deleteTenantPackageList(List ids); + /** * 获得租户套餐 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImpl.java index 34209e5ed2..16798f4b60 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImpl.java @@ -12,11 +12,11 @@ import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantPackageMapper; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -76,6 +76,19 @@ public class TenantPackageServiceImpl implements TenantPackageService { tenantPackageMapper.deleteById(id); } + @Override + public void deleteTenantPackageList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + ids.forEach(this::validateTenantPackageExists); + // 校验正在使用 + validateTenantUsedBatch(ids); + // 批量删除 + tenantPackageMapper.deleteByIds(ids); + } + private TenantPackageDO validateTenantPackageExists(Long id) { TenantPackageDO tenantPackage = tenantPackageMapper.selectById(id); if (tenantPackage == null) { @@ -90,6 +103,20 @@ public class TenantPackageServiceImpl implements TenantPackageService { } } + /** + * 校验租户套餐是否被使用 - 批量 + * + * @param ids 租户套餐编号数组 + */ + private void validateTenantUsedBatch(List ids) { + // 查询是否有租户正在使用该套餐 + for (Long id : ids) { + if (tenantService.getTenantCountByPackageId(id) > 0) { + throw exception(TENANT_PACKAGE_USED); + } + } + } + @Override public TenantPackageDO getTenantPackage(Long id) { return tenantPackageMapper.selectById(id); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java index 425d18d609..7ec3f9414a 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java @@ -7,8 +7,8 @@ import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSa import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.module.system.service.tenant.handler.TenantInfoHandler; import cn.iocoder.yudao.module.system.service.tenant.handler.TenantMenuHandler; - import jakarta.validation.Valid; + import java.util.List; import java.util.Set; @@ -49,6 +49,13 @@ public interface TenantService { */ void deleteTenant(Long id); + /** + * 批量删除租户 + * + * @param ids 编号数组 + */ + void deleteTenantList(List ids); + /** * 获得租户 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index 5060b16e05..07a4203f19 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -31,13 +31,13 @@ import cn.iocoder.yudao.module.system.service.tenant.handler.TenantInfoHandler; import cn.iocoder.yudao.module.system.service.tenant.handler.TenantMenuHandler; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.List; import java.util.Objects; import java.util.Set; @@ -225,6 +225,17 @@ public class TenantServiceImpl implements TenantService { tenantMapper.deleteById(id); } + @Override + public void deleteTenantList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateUpdateTenantBatch(ids); + // 批量删除 + tenantMapper.deleteByIds(ids); + } + private TenantDO validateUpdateTenant(Long id) { TenantDO tenant = tenantMapper.selectById(id); if (tenant == null) { @@ -237,6 +248,26 @@ public class TenantServiceImpl implements TenantService { return tenant; } + /** + * 校验租户是否可以更新 - 批量 + * + * @param ids 租户编号数组 + */ + private void validateUpdateTenantBatch(List ids) { + // 查询租户 + List tenants = tenantMapper.selectByIds(ids); + if (tenants.size() != ids.size()) { + throw exception(TENANT_NOT_EXISTS); + } + + // 校验是否有系统内置租户 + tenants.forEach(tenant -> { + if (isSystemTenant(tenant)) { + throw exception(TENANT_CAN_NOT_UPDATE_SYSTEM); + } + }); + } + @Override public TenantDO getTenant(Long id) { return tenantMapper.selectById(id); From f6edee501b76f2aa5de70f0296c2d5d22db7f33e Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 14:21:19 +0800 Subject: [PATCH 03/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=A4=BE?= =?UTF-8?q?=E4=BA=A4=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=89=B9=E9=87=8F=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/socail/SocialClientController.java | 11 +++++++++++ .../service/social/SocialClientService.java | 7 +++++++ .../social/SocialClientServiceImpl.java | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java index e91a3d8a0b..f33de4044f 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java @@ -19,6 +19,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 社交客户端") @@ -56,6 +58,15 @@ public class SocialClientController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除社交客户端") + @PreAuthorize("@ss.hasPermission('system:social-client:delete')") + public CommonResult deleteSocialClientList(@RequestParam("ids") List ids) { + socialClientService.deleteSocialClientList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得社交客户端") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java index 91bb9c1336..ee08ccf73a 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java @@ -134,6 +134,13 @@ public interface SocialClientService { */ void deleteSocialClient(Long id); + /** + * 批量删除社交客户端 + * + * @param ids 编号数组 + */ + void deleteSocialClientList(List ids); + /** * 获得社交客户端 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java index 3d41afda7c..6b75cc15c6 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java @@ -466,12 +466,30 @@ public class SocialClientServiceImpl implements SocialClientService { socialClientMapper.deleteById(id); } + @Override + public void deleteSocialClientList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateSocialClientBatchExists(ids); + // 批量删除 + socialClientMapper.deleteByIds(ids); + } + private void validateSocialClientExists(Long id) { if (socialClientMapper.selectById(id) == null) { throw exception(SOCIAL_CLIENT_NOT_EXISTS); } } + private void validateSocialClientBatchExists(List ids) { + List clients = socialClientMapper.selectByIds(ids); + if (clients.size() != ids.size()) { + throw exception(SOCIAL_CLIENT_NOT_EXISTS); + } + } + /** * 校验社交应用是否重复,需要保证 userType + socialType 唯一 * 原因是,不同端(userType)选择某个社交登录(socialType)时,需要通过 {@link #buildAuthRequest(Integer, Integer)} 构建对应的请求 From 775cb8896b9a0009bae1f84f53511f380cafa660 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 14:21:56 +0800 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E6=A8=A1=E6=9D=BF=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/sms/SmsTemplateController.java | 34 +++++++++++++------ .../service/sms/SmsTemplateService.java | 10 +++++- .../service/sms/SmsTemplateServiceImpl.java | 29 +++++++++++++--- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java index 80c6082265..8ffd4bb5cd 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java @@ -1,24 +1,27 @@ package cn.iocoder.yudao.module.system.controller.admin.sms; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; -import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; -import cn.iocoder.yudao.module.system.service.sms.SmsSendService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateRespVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateSendReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; +import cn.iocoder.yudao.module.system.service.sms.SmsSendService; +import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService; import io.swagger.v3.oas.annotations.Operation; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + import java.io.IOException; import java.util.List; @@ -59,6 +62,15 @@ public class SmsTemplateController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除短信模板") + @PreAuthorize("@ss.hasPermission('system:sms-template:delete')") + public CommonResult deleteSmsTemplateList(@RequestParam("ids") List ids) { + smsTemplateService.deleteSmsTemplateList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得短信模板") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java index 65cdba5480..c73f70ff36 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateService.java @@ -4,8 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; - import jakarta.validation.Valid; + +import java.util.List; import java.util.Map; /** @@ -38,6 +39,13 @@ public interface SmsTemplateService { */ void deleteSmsTemplate(Long id); + /** + * 批量删除短信模板 + * + * @param ids 编号数组 + */ + void deleteSmsTemplateList(List ids); + /** * 获得短信模板 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java index a8762a92c9..5570730183 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.sms; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ReUtil; @@ -7,22 +8,22 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; +import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; +import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; +import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Objects; @@ -100,12 +101,32 @@ public class SmsTemplateServiceImpl implements SmsTemplateService { smsTemplateMapper.deleteById(id); } + @Override + @CacheEvict(cacheNames = RedisKeyConstants.SMS_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteSmsTemplateList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateSmsTemplateListExists(ids); + // 批量删除 + smsTemplateMapper.deleteByIds(ids); + } + private void validateSmsTemplateExists(Long id) { if (smsTemplateMapper.selectById(id) == null) { throw exception(SMS_TEMPLATE_NOT_EXISTS); } } + private void validateSmsTemplateListExists(List ids) { + List templates = smsTemplateMapper.selectByIds(ids); + if (templates.size() != ids.size()) { + throw exception(SMS_TEMPLATE_NOT_EXISTS); + } + } + @Override public SmsTemplateDO getSmsTemplate(Long id) { return smsTemplateMapper.selectById(id); From e91096e4e077cd067ba6db152d35798bac46ebd5 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 15:31:56 +0800 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E6=B8=A0=E9=81=93=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/sms/SmsChannelController.java | 13 ++++++++-- .../system/service/sms/SmsChannelService.java | 11 ++++++-- .../service/sms/SmsChannelServiceImpl.java | 25 +++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java index cb26c7f000..0a2e701e96 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsChannelController.java @@ -12,11 +12,11 @@ import cn.iocoder.yudao.module.system.service.sms.SmsChannelService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.Comparator; import java.util.List; @@ -54,6 +54,15 @@ public class SmsChannelController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除短信渠道") + @PreAuthorize("@ss.hasPermission('system:sms-channel:delete')") + public CommonResult deleteSmsChannelList(@RequestParam("ids") List ids) { + smsChannelService.deleteSmsChannelList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得短信渠道") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java index c33c7752ce..9bb0d00fe1 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelService.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; - +import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; import jakarta.validation.Valid; + import java.util.List; /** @@ -39,6 +39,13 @@ public interface SmsChannelService { */ void deleteSmsChannel(Long id); + /** + * 批量删除短信渠道 + * + * @param ids 编号数组 + */ + void deleteSmsChannelList(List ids); + /** * 获得短信渠道 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java index 5c6f36d8f7..c16dffb59e 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.sms; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; @@ -65,6 +66,23 @@ public class SmsChannelServiceImpl implements SmsChannelService { smsChannelMapper.deleteById(id); } + @Override + public void deleteSmsChannelList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateSmsChannelBatchExists(ids); + // 校验是否有在使用该账号的模版 + for (Long id : ids) { + if (smsTemplateService.getSmsTemplateCountByChannelId(id) > 0) { + throw exception(SMS_CHANNEL_HAS_CHILDREN); + } + } + // 批量删除 + smsChannelMapper.deleteByIds(ids); + } + private SmsChannelDO validateSmsChannelExists(Long id) { SmsChannelDO channel = smsChannelMapper.selectById(id); if (channel == null) { @@ -73,6 +91,13 @@ public class SmsChannelServiceImpl implements SmsChannelService { return channel; } + private void validateSmsChannelBatchExists(List ids) { + List channels = smsChannelMapper.selectByIds(ids); + if (channels.size() != ids.size()) { + throw exception(SMS_CHANNEL_NOT_EXISTS); + } + } + @Override public SmsChannelDO getSmsChannel(Long id) { return smsChannelMapper.selectById(id); From 33d7fdedf8419f0f1fa37d0bc4e7010dc237fda8 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 15:33:23 +0800 Subject: [PATCH 06/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20OAuth2=20?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/oauth2/OAuth2ClientController.java | 14 +++++++++-- .../service/oauth2/OAuth2ClientService.java | 10 +++++++- .../oauth2/OAuth2ClientServiceImpl.java | 23 ++++++++++++++++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2ClientController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2ClientController.java index d3f4aedf20..ba5b71b453 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2ClientController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2ClientController.java @@ -11,12 +11,13 @@ import cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -53,6 +54,15 @@ public class OAuth2ClientController { return success(true); } + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号列表", required = true) + @Operation(summary = "批量删除 OAuth2 客户端") + @PreAuthorize("@ss.hasPermission('system:oauth2-client:delete')") + public CommonResult deleteOAuth2ClientList(@RequestParam("ids") List ids) { + oAuth2ClientService.deleteOAuth2ClientList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得 OAuth2 客户端") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientService.java index 1d6074ee72..9a17ccf2e7 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientService.java @@ -4,9 +4,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.client.OAuth2ClientSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; - import jakarta.validation.Valid; + import java.util.Collection; +import java.util.List; /** * OAuth2.0 Client Service 接口 @@ -39,6 +40,13 @@ public interface OAuth2ClientService { */ void deleteOAuth2Client(Long id); + /** + * 批量删除 OAuth2 客户端 + * + * @param ids 编号数组 + */ + void deleteOAuth2ClientList(List ids); + /** * 获得 OAuth2 客户端 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImpl.java index 3c229547c4..f592de8c66 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImpl.java @@ -14,14 +14,15 @@ import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2ClientMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.Collection; +import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -72,12 +73,32 @@ public class OAuth2ClientServiceImpl implements OAuth2ClientService { oauth2ClientMapper.deleteById(id); } + @Override + @CacheEvict(cacheNames = RedisKeyConstants.OAUTH_CLIENT, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 key,不好清理 + public void deleteOAuth2ClientList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateOAuth2ClientBatchExists(ids); + // 批量删除 + oauth2ClientMapper.deleteByIds(ids); + } + private void validateOAuth2ClientExists(Long id) { if (oauth2ClientMapper.selectById(id) == null) { throw exception(OAUTH2_CLIENT_NOT_EXISTS); } } + private void validateOAuth2ClientBatchExists(List ids) { + List clients = oauth2ClientMapper.selectByIds(ids); + if (clients.size() != ids.size()) { + throw exception(OAUTH2_CLIENT_NOT_EXISTS); + } + } + @VisibleForTesting void validateClientIdExists(Long id, String clientId) { OAuth2ClientDO client = oauth2ClientMapper.selectByClientId(clientId); From 14a80f9cd99e1c782fb2e87ce633f72ed71d17b9 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 15:34:08 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E8=AE=BF=E9=97=AE=E4=BB=A4=E7=89=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/oauth2/OAuth2TokenController.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2TokenController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2TokenController.java index cafcb23adc..fab3c3b786 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2TokenController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2TokenController.java @@ -12,11 +12,12 @@ import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -47,4 +48,14 @@ public class OAuth2TokenController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除访问令牌") + @Parameter(name = "accessTokens", description = "访问令牌数组", required = true) + @PreAuthorize("@ss.hasPermission('system:oauth2-token:delete')") + public CommonResult deleteAccessTokenList(@RequestParam("accessTokens") List accessTokens) { + accessTokens.forEach(accessToken -> + authService.logout(accessToken, LoginLogTypeEnum.LOGOUT_DELETE.getType())); + return success(true); + } + } From d60aeb76a3d7a11a5ed6ebd2c95ed422e6b35810 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 15:48:54 +0800 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E7=AB=99=E5=86=85=E4=BF=A1=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notify/NotifyTemplateController.java | 19 ++++++++++++--- .../service/notify/NotifyTemplateService.java | 10 +++++++- .../notify/NotifyTemplateServiceImpl.java | 24 ++++++++++++++++++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java index 57c35db38f..a4a00034c4 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyTemplateController.java @@ -4,19 +4,23 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.*; +import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplateRespVO; +import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplateSendReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; import cn.iocoder.yudao.module.system.service.notify.NotifySendService; import cn.iocoder.yudao.module.system.service.notify.NotifyTemplateService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -56,6 +60,15 @@ public class NotifyTemplateController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除站内信模版") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:notify-template:delete')") + public CommonResult deleteNotifyTemplateList(@RequestParam("ids") List ids) { + notifyTemplateService.deleteNotifyTemplateList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得站内信模版") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateService.java index bac122d887..2253ba9780 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateService.java @@ -4,8 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; - import jakarta.validation.Valid; + +import java.util.List; import java.util.Map; /** @@ -37,6 +38,13 @@ public interface NotifyTemplateService { */ void deleteNotifyTemplate(Long id); + /** + * 批量删除站内信模版 + * + * @param ids 编号列表 + */ + void deleteNotifyTemplateList(List ids); + /** * 获得站内信模版 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImpl.java index d52b2b7eec..998a551533 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.notify; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -10,13 +11,13 @@ import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyTemplateMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -85,6 +86,27 @@ public class NotifyTemplateServiceImpl implements NotifyTemplateService { notifyTemplateMapper.deleteById(id); } + @Override + @CacheEvict(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteNotifyTemplateList(List ids) { + // 校验存在 + validateNotifyTemplatesExists(ids); + // 批量删除 + notifyTemplateMapper.deleteByIds(ids); + } + + private void validateNotifyTemplatesExists(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + List templates = notifyTemplateMapper.selectByIds(ids); + if (CollUtil.isEmpty(templates) || templates.size() != ids.size()) { + throw exception(NOTIFY_TEMPLATE_NOT_EXISTS); + } + } + private void validateNotifyTemplateExists(Long id) { if (notifyTemplateMapper.selectById(id) == null) { throw exception(NOTIFY_TEMPLATE_NOT_EXISTS); From f0efbd76ba21bc455f9ca85c3862a1885b9d4b93 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 15:56:42 +0800 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E9=80=9A=E7=9F=A5=E5=85=AC=E5=91=8A?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/notice/NoticeController.java | 14 +++++++++-- .../system/service/notice/NoticeService.java | 9 ++++++++ .../service/notice/NoticeServiceImpl.java | 23 ++++++++++++++++++- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java index 95fc92d0d3..363769d426 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java @@ -14,12 +14,13 @@ import cn.iocoder.yudao.module.system.service.notice.NoticeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -60,6 +61,15 @@ public class NoticeController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除通知公告") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:notice:delete')") + public CommonResult deleteNoticeList(@RequestParam("ids") List ids) { + noticeService.deleteNoticeList(ids); + return success(true); + } + @GetMapping("/page") @Operation(summary = "获取通知公告列表") @PreAuthorize("@ss.hasPermission('system:notice:query')") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java index c935c49b2e..29c444f7b1 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java @@ -5,6 +5,8 @@ import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; +import java.util.List; + /** * 通知公告 Service 接口 */ @@ -32,6 +34,13 @@ public interface NoticeService { */ void deleteNotice(Long id); + /** + * 批量删除通知公告 + * + * @param ids 编号列表 + */ + void deleteNoticeList(List ids); + /** * 获得通知公告分页列表 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java index e6648ffbdc..90fdd573b2 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.notice; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; @@ -7,9 +8,10 @@ import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; +import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; @@ -49,6 +51,14 @@ public class NoticeServiceImpl implements NoticeService { noticeMapper.deleteById(id); } + @Override + public void deleteNoticeList(List ids) { + // 校验是否存在 + validateNoticesExists(ids); + // 批量删除通知公告 + noticeMapper.deleteByIds(ids); + } + @Override public PageResult getNoticePage(NoticePageReqVO reqVO) { return noticeMapper.selectPage(reqVO); @@ -70,4 +80,15 @@ public class NoticeServiceImpl implements NoticeService { } } + private void validateNoticesExists(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + List notices = noticeMapper.selectByIds(ids); + if (CollUtil.isEmpty(notices) || notices.size() != ids.size()) { + throw exception(NOTICE_NOT_FOUND); + } + } + } From 7853ac9f2355b663e9185e534e2aba4601bec2d7 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 16:38:54 +0800 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E9=82=AE=E7=AE=B1=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/mail/MailAccountController.java | 13 ++++++-- .../service/mail/MailAccountService.java | 9 +++++- .../service/mail/MailAccountServiceImpl.java | 32 ++++++++++++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java index 4cd7c40a3d..d17b8ccf99 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java @@ -13,11 +13,11 @@ import cn.iocoder.yudao.module.system.service.mail.MailAccountService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -54,6 +54,15 @@ public class MailAccountController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除邮箱账号") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:mail-account:delete')") + public CommonResult deleteMailAccountList(@RequestParam("ids") List ids) { + mailAccountService.deleteMailAccountList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得邮箱账号") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java index eda9ff2e46..59fca9d2f8 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; - import jakarta.validation.Valid; + import java.util.List; /** @@ -38,6 +38,13 @@ public interface MailAccountService { */ void deleteMailAccount(Long id); + /** + * 批量删除邮箱账号 + * + * @param ids 编号列表 + */ + void deleteMailAccountList(List ids); + /** * 获取邮箱账号信息 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImpl.java index 3a5879aac4..99aba35b28 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.mail; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; @@ -7,13 +8,13 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -69,12 +70,41 @@ public class MailAccountServiceImpl implements MailAccountService { mailAccountMapper.deleteById(id); } + @Override + @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT, allEntries = true) + public void deleteMailAccountList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验是否存在 + validateMailAccountsExists(ids); + // 校验是否存在关联模版 + for (Long id : ids) { + if (mailTemplateService.getMailTemplateCountByAccountId(id) > 0) { + throw exception(MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS); + } + } + // 批量删除 + mailAccountMapper.deleteByIds(ids); + } + private void validateMailAccountExists(Long id) { if (mailAccountMapper.selectById(id) == null) { throw exception(MAIL_ACCOUNT_NOT_EXISTS); } } + private void validateMailAccountsExists(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + List accounts = mailAccountMapper.selectByIds(ids); + if (CollUtil.isEmpty(accounts) || accounts.size() != ids.size()) { + throw exception(MAIL_ACCOUNT_NOT_EXISTS); + } + } + @Override public MailAccountDO getMailAccount(Long id) { return mailAccountMapper.selectById(id); From 78658347b1be27a2b09033d573492c05c62f544c Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 16:39:10 +0800 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E9=82=AE=E4=BB=B6=E6=A8=A1=E7=89=88?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/mail/MailTemplateController.java | 13 +++++- .../service/mail/MailTemplateService.java | 9 +++- .../service/mail/MailTemplateServiceImpl.java | 44 ++++++++++++++++--- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java index 22e2658ef3..9ebcda532f 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java @@ -10,11 +10,11 @@ import cn.iocoder.yudao.module.system.service.mail.MailTemplateService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -54,6 +54,15 @@ public class MailTemplateController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除邮件模版") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:mail-template:delete')") + public CommonResult deleteMailTemplateList(@RequestParam("ids") List ids) { + mailTempleService.deleteMailTemplateList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得邮件模版") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java index 006972ca84..0ee9e2b25b 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; - import jakarta.validation.Valid; + import java.util.List; import java.util.Map; @@ -39,6 +39,13 @@ public interface MailTemplateService { */ void deleteMailTemplate(Long id); + /** + * 批量删除邮件模版 + * + * @param ids 编号列表 + */ + void deleteMailTemplateList(List ids); + /** * 获取邮件模版 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImpl.java index 6757750d0e..100eb542c8 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.mail; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; @@ -11,14 +12,14 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -97,12 +98,36 @@ public class MailTemplateServiceImpl implements MailTemplateService { mailTemplateMapper.deleteById(id); } + @Override + @CacheEvict(cacheNames = RedisKeyConstants.MAIL_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteMailTemplateList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + validateMailTemplatesExists(ids); + // 批量删除 + mailTemplateMapper.deleteByIds(ids); + } + private void validateMailTemplateExists(Long id) { if (mailTemplateMapper.selectById(id) == null) { throw exception(MAIL_TEMPLATE_NOT_EXISTS); } } + private void validateMailTemplatesExists(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验存在 + List templates = mailTemplateMapper.selectByIds(ids); + if (CollUtil.isEmpty(templates) || templates.size() != ids.size()) { + throw exception(MAIL_TEMPLATE_NOT_EXISTS); + } + } + @Override public MailTemplateDO getMailTemplate(Long id) {return mailTemplateMapper.selectById(id);} @@ -125,14 +150,19 @@ public class MailTemplateServiceImpl implements MailTemplateService { return StrUtil.format(content, params); } - @VisibleForTesting - public List parseTemplateContentParams(String content) { - return ReUtil.findAllGroup1(PATTERN_PARAMS, content); - } - @Override public long getMailTemplateCountByAccountId(Long accountId) { return mailTemplateMapper.selectCountByAccountId(accountId); } + /** + * 获得邮件模板中的参数,形如 {key} + * + * @param content 内容 + * @return 参数列表 + */ + private List parseTemplateContentParams(String content) { + return ReUtil.findAllGroup1(PATTERN_PARAMS, content); + } + }