diff --git a/backend/src/main/java/com/imeeting/entity/SysDictItem.java b/backend/src/main/java/com/imeeting/entity/SysDictItem.java index 49191c9..8c42b16 100644 --- a/backend/src/main/java/com/imeeting/entity/SysDictItem.java +++ b/backend/src/main/java/com/imeeting/entity/SysDictItem.java @@ -21,4 +21,6 @@ public class SysDictItem extends BaseEntity { @TableField(exist = false) private Long tenantId; + @TableField(exist = false) + private Integer isDeleted; } diff --git a/backend/src/main/java/com/imeeting/entity/SysDictType.java b/backend/src/main/java/com/imeeting/entity/SysDictType.java index 905ae82..c4a285d 100644 --- a/backend/src/main/java/com/imeeting/entity/SysDictType.java +++ b/backend/src/main/java/com/imeeting/entity/SysDictType.java @@ -19,4 +19,6 @@ public class SysDictType extends BaseEntity { @TableField(exist = false) private Long tenantId; + @TableField(exist = false) + private Integer isDeleted; } diff --git a/backend/src/main/java/com/imeeting/service/impl/SysTenantServiceImpl.java b/backend/src/main/java/com/imeeting/service/impl/SysTenantServiceImpl.java index 8c6bd8d..7293ebe 100644 --- a/backend/src/main/java/com/imeeting/service/impl/SysTenantServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/impl/SysTenantServiceImpl.java @@ -29,12 +29,14 @@ public class SysTenantServiceImpl extends ServiceImpl tenantUsers = sysTenantUserService.list( + new LambdaQueryWrapper().eq(SysTenantUser::getTenantId, tenantId) + ); + List userIds = tenantUsers.stream().map(SysTenantUser::getUserId).collect(Collectors.toList()); + + // 2. 逻辑删除租户下的角色 + sysRoleService.lambdaUpdate() + .set(SysRole::getIsDeleted, 1) + .eq(SysRole::getTenantId, tenantId) + .update(); + + // 3. 逻辑删除租户下的组织 + sysOrgService.lambdaUpdate() + .set(SysOrg::getIsDeleted, 1) + .eq(SysOrg::getTenantId, tenantId) + .update(); + + // 4. 逻辑删除用户与租户的关联 + sysTenantUserService.remove(new LambdaQueryWrapper().eq(SysTenantUser::getTenantId, tenantId)); + + // 5. 逻辑删除用户与角色的关联 (带租户隔离的) + sysUserRoleMapper.delete(new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper().eq("tenant_id", tenantId)); + + // 6. 清理孤立用户:如果用户不再属于任何租户,则逻辑删除该用户 + if (userIds != null && !userIds.isEmpty()) { + for (Long userId : userIds) { + long count = sysTenantUserService.count( + new LambdaQueryWrapper().eq(SysTenantUser::getUserId, userId) + ); + if (count == 0) { + sysUserService.removeById(userId); + } + } + } + + // 7. 逻辑删除租户下的设备 + if (deviceMapper != null) { + deviceMapper.delete(new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper().eq("tenant_id", tenantId)); + } + + // 8. 最后逻辑删除租户记录本身 + return super.removeById(id); } @Override