From 28bba9776ce8d08f74ecd98b871f16a7bf85951d Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 10 Jun 2025 14:19:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=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);