张旭锋 3 днів тому
батько
коміт
5bd9937d4b

+ 7 - 7
src/main/java/com/jtzx/crm/module/api/web/oss/AdminOssUploadDownloadController.java

@@ -13,11 +13,11 @@ import com.jtzx.crm.module.api.constant.ApiConstant;
 import com.jtzx.crm.module.api.enums.AdminApiErrorEnum;
 import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
 import com.jtzx.crm.module.oss.enums.UploadFileCheckResultEnum;
-import com.jtzx.crm.module.oss.facade.OssUploadDownloadFacade;
 import com.jtzx.crm.module.oss.model.request.UploadFileAttributeDTO;
 import com.jtzx.crm.module.oss.model.response.OssFileDownloadReplyBO;
 import com.jtzx.crm.module.oss.model.response.OssFileInfoBO;
 import com.jtzx.crm.module.oss.model.response.OssFileUploadResultVO;
+import com.jtzx.crm.module.oss.service.OssUploadDownloadService;
 import com.jtzx.crm.module.oss.util.UploadFileChecker;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -41,7 +41,7 @@ import java.nio.charset.StandardCharsets;
 @Slf4j
 public class AdminOssUploadDownloadController {
 
-    private final OssUploadDownloadFacade ossUploadDownloadFacade;
+    private final OssUploadDownloadService ossUploadDownloadService;
 
 
     @Operation(summary = "上传文件")
@@ -63,7 +63,7 @@ public class AdminOssUploadDownloadController {
         1. 已存在相同 MD5 文件,直接返回 URL
          */
         String md5 = DigestUtil.md5Hex(file.getBytes());
-        OssFileInfoBO bo = ossUploadDownloadFacade.findByHash(md5);
+        OssFileInfoBO bo = ossUploadDownloadService.findByHash(md5);
         if (bo == null) {
             /*
             2. 普通上传
@@ -81,7 +81,7 @@ public class AdminOssUploadDownloadController {
                     // 手动覆盖前端传参
                     .setPlatform(null)
                     .setUseOriginalFilenameAsDownloadFileName(false);
-            bo = ossUploadDownloadFacade.upload(file.getBytes(), attr);
+            bo = ossUploadDownloadService.upload(file.getBytes(), attr);
         }
 
         return ApiResult.data(this.toUploadResult(bo, request.getRequestURL().toString(), file.getOriginalFilename()));
@@ -92,7 +92,7 @@ public class AdminOssUploadDownloadController {
     // 如果需要登录后才能下载,请解禁下方注解;注意是👇 后台管理对应的鉴权工具类
     // @SaCheckLogin(type = AdminStpUtil.TYPE)
     public void download(@PathVariable Long id, HttpServletResponse response) throws IOException {
-        OssFileDownloadReplyBO reply = ossUploadDownloadFacade.downloadById(id);
+        OssFileDownloadReplyBO reply = ossUploadDownloadService.downloadById(id);
         if (reply.isRedirect2DirectUrl()) {
             // 302重定向
             response.sendRedirect(reply.getDirectUrl());
@@ -125,7 +125,7 @@ public class AdminOssUploadDownloadController {
         默认地,此处按【本地存储or对象存储直链为空:通过文件ID下载;对象存储:通过对象存储直链下载】返回 url
          */
         if (
-                ossUploadDownloadFacade.isLocalPlatform(ossFileInfo.getStoragePlatform())
+                ossUploadDownloadService.isLocalPlatform(ossFileInfo.getStoragePlatform())
                         || CharSequenceUtil.isEmpty(ossFileInfo.getDirectUrl())
         ) {
             ret.setUrl(
@@ -133,7 +133,7 @@ public class AdminOssUploadDownloadController {
                     String.format("%s/%s", requestUrl, ossFileInfo.getId())
             );
         } else {
-            // 获取预签名地址可参考 OssUploadDownloadFacadeImpl 的 downloadById 方法
+            // 获取预签名地址可参考 ossUploadDownloadServiceImpl 的 downloadById 方法
             ret.setUrl(ossFileInfo.getDirectUrl());
         }
 

+ 0 - 101
src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysTenantController.java

@@ -1,101 +0,0 @@
-package com.jtzx.crm.module.api.web.sys;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.page.PageParam;
-import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.web.model.request.IdsDTO;
-import cc.uncarbon.framework.web.model.response.ApiResult;
-import com.jtzx.crm.module.api.constant.ApiConstant;
-import com.jtzx.crm.module.api.event.KickOutSysUsersEvent;
-import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
-import com.jtzx.crm.module.sys.annotation.SysLog;
-import com.jtzx.crm.module.sys.facade.SysTenantFacade;
-import com.jtzx.crm.module.sys.model.request.AdminInsertSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminListSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminUpdateSysTenantDTO;
-import com.jtzx.crm.module.sys.model.response.SysTenantBO;
-import com.jtzx.crm.module.sys.model.response.SysTenantKickOutUsersBO;
-import com.jtzx.crm.module.sys.service.SysTenantService;
-import cn.dev33.satoken.annotation.SaCheckLogin;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.extra.spring.SpringUtil;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-import jakarta.validation.Valid;
-
-
-@SaCheckLogin(type = CrmAdminStpUtil.TYPE)
-@Tag(name = "系统租户管理接口")
-@RequestMapping(value = ApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
-@RequiredArgsConstructor
-@RestController
-@Slf4j
-public class AdminSysTenantController {
-
-    private static final String PERMISSION_PREFIX = "SysTenant:";
-
-    private final SysTenantService sysTenantService;
-
-    private final SysTenantFacade sysTenantFacade;
-
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "分页列表")
-    @GetMapping(value = "/sys/tenants")
-    public ApiResult<PageResult<SysTenantBO>> list(PageParam pageParam, AdminListSysTenantDTO dto) {
-        return ApiResult.data(sysTenantService.adminList(pageParam, dto));
-    }
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "详情")
-    @GetMapping(value = "/sys/tenants/{id}")
-    public ApiResult<SysTenantBO> getById(@PathVariable Long id) {
-        return ApiResult.data(sysTenantService.getOneById(id, true));
-    }
-
-    @SysLog(value = "新增系统租户")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @Operation(summary = "新增")
-    @PostMapping(value = "/sys/tenants")
-    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertSysTenantDTO dto) {
-        sysTenantFacade.adminInsert(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "编辑系统租户")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @Operation(summary = "编辑")
-    @PutMapping(value = "/sys/tenants/{id}")
-    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminUpdateSysTenantDTO dto) {
-        dto.setId(id);
-        SysTenantKickOutUsersBO needKickOutUsers = sysTenantFacade.adminUpdate(dto);
-
-        // 强制登出所有租户用户
-        SpringUtil.publishEvent(new KickOutSysUsersEvent(
-                new KickOutSysUsersEvent.EventData(needKickOutUsers.getSysUserIds())
-        ));
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "删除系统租户")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @Operation(summary = "删除")
-    @DeleteMapping(value = "/sys/tenants")
-    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
-        SysTenantKickOutUsersBO needKickOutUsers = sysTenantFacade.adminDelete(dto.getIds());
-
-        // 强制登出所有租户用户
-        SpringUtil.publishEvent(new KickOutSysUsersEvent(
-                new KickOutSysUsersEvent.EventData(needKickOutUsers.getSysUserIds())
-        ));
-
-        return ApiResult.success();
-    }
-
-}

+ 0 - 40
src/main/java/com/jtzx/crm/module/oss/facade/OssUploadDownloadFacade.java

@@ -1,40 +0,0 @@
-package com.jtzx.crm.module.oss.facade;
-
-import cc.uncarbon.framework.core.exception.BusinessException;
-import com.jtzx.crm.module.oss.model.request.UploadFileAttributeDTO;
-import com.jtzx.crm.module.oss.model.response.OssFileDownloadReplyBO;
-import com.jtzx.crm.module.oss.model.response.OssFileInfoBO;
-import lombok.NonNull;
-
-/**
- * 文件上传下载门面
- */
-public interface OssUploadDownloadFacade {
-
-    /**
-     * 根据哈希值,查找是否已有文件
-     */
-    OssFileInfoBO findByHash(String md5);
-
-    /**
-     * 正常上传文件到服务端
-     *
-     * @param fileBytes 文件数据
-     * @param attr      附加属性
-     */
-    OssFileInfoBO upload(byte[] fileBytes, @NonNull UploadFileAttributeDTO attr) throws BusinessException;
-
-    /**
-     * 根据文件ID下载
-     *
-     * @throws BusinessException 业务异常,如:文件ID无效;原始文件不存在
-     */
-    OssFileDownloadReplyBO downloadById(Long fileInfoId) throws BusinessException;
-
-    /**
-     * 是否为本地存储平台
-     * @param storagePlatform 存储平台名
-     */
-    boolean isLocalPlatform(String storagePlatform);
-
-}

+ 4 - 11
src/main/java/com/jtzx/crm/module/oss/facade/impl/OssUploadDownloadFacadeImpl.java → src/main/java/com/jtzx/crm/module/oss/service/OssUploadDownloadService.java

@@ -1,14 +1,12 @@
-package com.jtzx.crm.module.oss.facade.impl;
+package com.jtzx.crm.module.oss.service;
 
 import cc.uncarbon.framework.core.exception.BusinessException;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.jtzx.crm.module.oss.enums.OssErrorEnum;
-import com.jtzx.crm.module.oss.facade.OssUploadDownloadFacade;
 import com.jtzx.crm.module.oss.model.request.UploadFileAttributeDTO;
 import com.jtzx.crm.module.oss.model.response.OssFileDownloadReplyBO;
 import com.jtzx.crm.module.oss.model.response.OssFileInfoBO;
-import com.jtzx.crm.module.oss.service.OssFileInfoService;
-import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.ObjectUtil;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -30,18 +28,15 @@ import java.time.LocalDateTime;
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class OssUploadDownloadFacadeImpl implements OssUploadDownloadFacade {
+public class OssUploadDownloadService{
 
     private final OssFileInfoService ossFileInfoService;
     private final FileStorageService fileStorageService;
 
-
-    @Override
     public OssFileInfoBO findByHash(String md5) {
         return ossFileInfoService.getOneByMd5(md5);
     }
 
-    @Override
     public OssFileInfoBO upload(byte[] fileBytes, @NonNull UploadFileAttributeDTO attr) throws BusinessException {
         // 要上传到的平台名
         String platform = ObjectUtil.defaultIfNull(attr.getPlatform(), fileStorageService.getProperties()::getDefaultPlatform);
@@ -76,7 +71,6 @@ public class OssUploadDownloadFacadeImpl implements OssUploadDownloadFacade {
         return ossFileInfoService.save(fileInfo, attr);
     }
 
-    @Override
     public OssFileDownloadReplyBO downloadById(Long fileInfoId) throws BusinessException {
         /*
         注:开启多租户后,因可能允许未登录下载,无法确定当前租户ID,导致查询 SQL 会错误地拼接 AND tenant_id = null 条件
@@ -126,7 +120,6 @@ public class OssUploadDownloadFacadeImpl implements OssUploadDownloadFacade {
                 .build();
     }
 
-    @Override
     public boolean isLocalPlatform(String storagePlatform) {
         return OssFileInfoService.isLocalPlatform(storagePlatform);
     }

+ 0 - 46
src/main/java/com/jtzx/crm/module/sys/entity/SysTenantEntity.java

@@ -1,46 +0,0 @@
-package com.jtzx.crm.module.sys.entity;
-
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-
-
-/**
- * 系统租户
- */
-@EqualsAndHashCode(callSuper = true)
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-@TableName(value = "sys_tenant")
-public class SysTenantEntity extends HelioBaseEntity<Long> {
-
-    @Schema(description = "租户名")
-    @TableField(value = "tenant_name")
-    private String tenantName;
-
-    @Schema(description = "状态")
-    @TableField(value = "status")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "租户管理员用户ID")
-    @TableField(value = "tenant_admin_user_id")
-    private Long tenantAdminUserId;
-
-    @Schema(description = "备注")
-    @TableField(value = "remark")
-    private String remark;
-
-    @TableField("del_flag")
-    private Integer delFlag;
-}

+ 0 - 29
src/main/java/com/jtzx/crm/module/sys/facade/SysTenantFacade.java

@@ -1,29 +0,0 @@
-package com.jtzx.crm.module.sys.facade;
-
-import com.jtzx.crm.module.sys.model.request.AdminInsertSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminUpdateSysTenantDTO;
-import com.jtzx.crm.module.sys.model.response.SysTenantKickOutUsersBO;
-
-import java.util.Collection;
-
-/**
- * 系统租户解耦层,用于解决循环依赖
- */
-public interface SysTenantFacade {
-
-    /**
-     * 后台管理-新增
-     */
-    Long adminInsert(AdminInsertSysTenantDTO dto);
-
-    /**
-     * 后台管理-编辑
-     */
-    SysTenantKickOutUsersBO adminUpdate(AdminUpdateSysTenantDTO dto);
-
-    /**
-     * 后台管理-删除
-     */
-    SysTenantKickOutUsersBO adminDelete(Collection<Long> ids);
-
-}

+ 0 - 154
src/main/java/com/jtzx/crm/module/sys/facade/impl/SysTenantFacadeImpl.java

@@ -1,154 +0,0 @@
-package com.jtzx.crm.module.sys.facade.impl;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import cc.uncarbon.framework.core.function.StreamFunction;
-import com.jtzx.crm.module.sys.constant.SysConstant;
-import com.jtzx.crm.module.sys.entity.SysTenantEntity;
-import com.jtzx.crm.module.sys.enums.SysErrorEnum;
-import com.jtzx.crm.module.sys.enums.SysUserStatusEnum;
-import com.jtzx.crm.module.sys.facade.SysTenantFacade;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysRoleDTO;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysUserDTO;
-import com.jtzx.crm.module.sys.model.request.AdminInsertSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminUpdateSysTenantDTO;
-import com.jtzx.crm.module.sys.model.response.SysTenantBO;
-import com.jtzx.crm.module.sys.model.response.SysTenantKickOutUsersBO;
-import com.jtzx.crm.module.sys.service.SysRoleService;
-import com.jtzx.crm.module.sys.service.SysTenantService;
-import com.jtzx.crm.module.sys.service.SysUserRoleRelationService;
-import com.jtzx.crm.module.sys.service.SysUserService;
-import cn.hutool.core.collection.CollUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 系统租户Facade接口实现类
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class SysTenantFacadeImpl implements SysTenantFacade {
-
-    private final SysTenantService sysTenantService;
-    private final SysRoleService sysRoleService;
-    private final SysUserRoleRelationService sysUserRoleRelationService;
-    private final SysUserService sysUserService;
-
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Long adminInsert(AdminInsertSysTenantDTO dto) {
-        log.info("[后台管理-新增系统租户] >> 入参={}", dto);
-        sysTenantService.checkExistence(dto);
-
-        /*
-        1. 加入一个新租户(tenant)
-        这里是直接顺带创建管理员账号了, 你可以根据业务需要决定是否创建
-         */
-        SysTenantEntity entity = sysTenantService.adminInsert(dto);
-
-        Long newTenantEntityId = entity.getId();
-        Long newTenantId = entity.getTenantId();
-
-        /*
-        2. 创建一个新角色(role)
-        注意: 这里并没有指派其可见菜单,需要用超管账号授权
-         */
-        Long newRoleId = sysRoleService.adminInsert(
-                AdminInsertOrUpdateSysRoleDTO.builder()
-                        .tenantId(newTenantId)
-                        .title(dto.getTenantName() + "主管理员")
-                        .value(SysConstant.TENANT_ADMIN_ROLE_VALUE)
-                        .build()
-        );
-
-        // 3. 创建一个新用户
-        Long newUserId = sysUserService.adminInsert(
-                AdminInsertOrUpdateSysUserDTO.builder()
-                        .tenantId(newTenantId)
-                        .username(dto.getTenantAdminUsername())
-                        .passwordOfNewUser(dto.getTenantAdminPassword())
-                        .nickname(dto.getTenantName() + "主管理员")
-                        .email(dto.getTenantAdminEmail())
-                        .phoneNo(dto.getTenantAdminPhoneNo())
-                        // 默认为正常状态
-                        .status(SysUserStatusEnum.ENABLED)
-                        .build()
-        );
-
-        // 4. 将新用户绑定至新角色上
-        sysUserRoleRelationService.adminInsert(newTenantId, newUserId, newRoleId);
-
-        // 5. 把管理员账号更新进库
-        SysTenantEntity update = new SysTenantEntity().setTenantAdminUserId(newUserId);
-        update.setId(newTenantEntityId);
-        sysTenantService.adminUpdate(update);
-        return newTenantId;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public SysTenantKickOutUsersBO adminUpdate(AdminUpdateSysTenantDTO dto) {
-        sysTenantService.adminUpdate(dto);
-
-        if (dto.getStatus() == EnabledStatusEnum.DISABLED) {
-            // 新状态是禁用,查出需要强制登出的用户
-            Long tenantId = CollUtil.getFirst(determineTenantIdsByPrimaryKeys(Collections.singleton(dto.getId())).values());
-            if (Objects.nonNull(tenantId)) {
-                List<Long> tenantSysUserIds = sysUserService.listUserIdsByTenantId(tenantId, Collections.singleton(EnabledStatusEnum.ENABLED));
-                return new SysTenantKickOutUsersBO(tenantSysUserIds);
-            }
-        }
-        return new SysTenantKickOutUsersBO();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public SysTenantKickOutUsersBO adminDelete(Collection<Long> ids) {
-        Collection<Long> tenantIds = determineTenantIdsByPrimaryKeys(ids).values();
-        if (CollUtil.isNotEmpty(tenantIds)) {
-            // 不能删除「超级租户」(租户ID=0)
-            SysErrorEnum.CANNOT_DELETE_PRIVILEGED_TENANT.assertNotContains(tenantIds, HelioConstant.Tenant.DEFAULT_PRIVILEGED_TENANT_ID);
-
-            // 删除租户管理员角色、租户
-            sysRoleService.adminDeleteTenantRoles(tenantIds, Collections.singleton(SysConstant.TENANT_ADMIN_ROLE_VALUE));
-            sysTenantService.adminDelete(ids);
-
-            // 查出需要强制登出的用户
-            List<Long> tenantSysUserIds = tenantIds.stream()
-                    .map(tenantId -> sysUserService.listUserIdsByTenantId(tenantId, Collections.singleton(EnabledStatusEnum.ENABLED)))
-                    .flatMap(Collection::stream)
-                    .collect(Collectors.toList());
-            return new SysTenantKickOutUsersBO(tenantSysUserIds);
-        }
-        return new SysTenantKickOutUsersBO();
-    }
-
-    /*
-    ----------------------------------------------------------------
-                        私有方法 private methods
-    ----------------------------------------------------------------
-     */
-
-    /**
-     * 根据租户主键ID,确定租户IDs
-     * @return map[主键ID, 租户ID]
-     */
-    private Map<Long, Long> determineTenantIdsByPrimaryKeys(Collection<Long> ids) {
-        if (CollUtil.isEmpty(ids)) {
-            return Collections.emptyMap();
-        }
-        List<SysTenantBO> sysTenantInfos = sysTenantService.listByIds(ids, false);
-        if (CollUtil.isEmpty(sysTenantInfos)) {
-            return Collections.emptyMap();
-        }
-        return sysTenantInfos.stream().collect(Collectors.toMap(SysTenantBO::getId, SysTenantBO::getTenantId, StreamFunction.ignoredThrowingMerger()));
-    }
-
-}

+ 0 - 13
src/main/java/com/jtzx/crm/module/sys/mapper/SysTenantMapper.java

@@ -1,13 +0,0 @@
-package com.jtzx.crm.module.sys.mapper;
-
-import com.jtzx.crm.module.sys.entity.SysTenantEntity;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 系统租户
- */
-@Mapper
-public interface SysTenantMapper extends BaseMapper<SysTenantEntity> {
-	
-}

+ 0 - 50
src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertSysTenantDTO.java

@@ -1,50 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.*;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-
-
-/**
- * 后台管理-新增系统租户
- */
-@EqualsAndHashCode(callSuper = true)
-@Accessors(chain = true)
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminInsertSysTenantDTO extends AdminUpdateSysTenantDTO {
-
-    @Schema(description = "租户ID(纯数字)", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Positive(message = "租户ID须为正整数")
-    @NotNull(message = "租户ID不能为空")
-    private Long tenantId;
-
-    @Schema(description = "管理员账号", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(min = 6, max = 16, message = "【管理员账号】最短6位,最长16位")
-    @NotBlank(message = "管理员账号不能为空")
-    private String tenantAdminUsername;
-
-    @Schema(description = "管理员密码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(min = 8, max = 20, message = "【管理员密码】最短8位,最长20位")
-    @NotBlank(message = "管理员密码不能为空")
-    private String tenantAdminPassword;
-
-    @Schema(description = "管理员邮箱", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Pattern(message = "管理员邮箱格式不正确", regexp = HelioConstant.Regex.EMAIL)
-    @Size(max = 255, message = "【管理员邮箱】最长255位")
-    @NotBlank(message = "管理员邮箱不能为空")
-    private String tenantAdminEmail;
-
-    @Schema(description = "管理员手机号", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Pattern(message = "管理员手机号格式不正确", regexp = HelioConstant.Regex.CHINA_MAINLAND_PHONE_NO)
-    @Size(max = 20, message = "【管理员手机号】最长20位")
-    @NotBlank(message = "管理员手机号不能为空")
-    private String tenantAdminPhoneNo;
-
-}

+ 0 - 33
src/main/java/com/jtzx/crm/module/sys/model/request/AdminListSysTenantDTO.java

@@ -1,33 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-
-
-/**
- * 后台管理-分页列表系统租户
- */
-@Accessors(chain = true)
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminListSysTenantDTO implements Serializable {
-
-    @Schema(description = "租户名(关键词)")
-    private String tenantName;
-
-    @Schema(description = "租户ID(纯数字)")
-    private Long tenantId;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-}

+ 0 - 56
src/main/java/com/jtzx/crm/module/sys/model/response/SysTenantBO.java

@@ -1,56 +0,0 @@
-package com.jtzx.crm.module.sys.model.response;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-
-/**
- * 系统租户BO
- */
-@Accessors(chain = true)
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class SysTenantBO implements Serializable {
-
-    @Schema(description = "主键ID")
-    private Long id;
-
-    @Schema(description = "创建时刻")
-    @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
-    private LocalDateTime createdAt;
-
-    @Schema(description = "更新时刻")
-    @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
-    private LocalDateTime updatedAt;
-
-    @Schema(description = "备注")
-    private String remark;
-
-    @Schema(description = "租户名")
-    private String tenantName;
-
-    @Schema(description = "租户ID")
-    private Long tenantId;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "租户管理员用户基本信息")
-    private SysUserBaseInfoBO tenantAdminUser;
-
-}

+ 0 - 246
src/main/java/com/jtzx/crm/module/sys/service/SysTenantService.java

@@ -1,246 +0,0 @@
-package com.jtzx.crm.module.sys.service;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.exception.BusinessException;
-import cc.uncarbon.framework.core.page.PageParam;
-import cc.uncarbon.framework.core.page.PageResult;
-import com.jtzx.crm.module.sys.entity.SysTenantEntity;
-import com.jtzx.crm.module.sys.enums.SysErrorEnum;
-import com.jtzx.crm.module.sys.mapper.SysTenantMapper;
-import com.jtzx.crm.module.sys.mapper.SysUserMapper;
-import com.jtzx.crm.module.sys.model.request.AdminInsertSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminListSysTenantDTO;
-import com.jtzx.crm.module.sys.model.request.AdminUpdateSysTenantDTO;
-import com.jtzx.crm.module.sys.model.response.SysTenantBO;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * 系统租户
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class SysTenantService {
-
-    private final SysTenantMapper sysTenantMapper;
-    // 比较尴尬,为避免循环依赖,只能这里引用SysUserMapper拿用户信息
-    private final SysUserMapper sysUserMapper;
-
-
-    /**
-     * 后台管理-分页列表
-     */
-    public PageResult<SysTenantBO> adminList(PageParam pageParam, AdminListSysTenantDTO dto) {
-        Page<SysTenantEntity> entityPage = sysTenantMapper.selectPage(
-                new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
-                new QueryWrapper<SysTenantEntity>()
-                        .lambda()
-                        // 租户名
-                        .like(CharSequenceUtil.isNotBlank(dto.getTenantName()), SysTenantEntity::getTenantName, CharSequenceUtil.cleanBlank(dto.getTenantName()))
-                        // 租户ID
-                        .eq(ObjectUtil.isNotNull(dto.getTenantId()), SysTenantEntity::getTenantId, dto.getTenantId())
-                        // 状态
-                        .eq(ObjectUtil.isNotNull(dto.getStatus()), SysTenantEntity::getStatus, dto.getStatus())
-                        // 排序
-                        .orderByDesc(SysTenantEntity::getCreatedAt)
-        );
-
-        return this.entityPage2BOPage(entityPage, true);
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id 主键ID
-     * @return null or BO
-     */
-    public SysTenantBO getOneById(Long id) {
-        return this.getOneById(id, false);
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id 主键ID
-     * @param throwIfInvalidId 是否在 ID 无效时抛出异常
-     * @return null or BO
-     */
-    public SysTenantBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysTenantEntity entity = sysTenantMapper.selectById(id);
-        if (throwIfInvalidId) {
-            SysErrorEnum.INVALID_ID.assertNotNull(entity);
-        }
-
-        return this.entity2BO(entity, true);
-    }
-
-    /**
-     * 后台管理-新增
-     * 注:本方法较为特殊,仅供SysTenantFacadeImpl调用
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public SysTenantEntity adminInsert(AdminInsertSysTenantDTO dto) {
-        dto.setId(null);
-        SysTenantEntity entity = new SysTenantEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysTenantMapper.insert(entity);
-
-        return entity;
-    }
-
-    /**
-     * 后台管理-编辑
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdate(AdminUpdateSysTenantDTO dto) {
-        log.info("[后台管理-编辑系统租户] >> 入参={}", dto);
-
-        SysTenantEntity entity = new SysTenantEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysTenantMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-编辑
-     * 注:本方法较为特殊,仅供SysTenantFacadeImpl调用
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdate(SysTenantEntity entity) {
-        sysTenantMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-删除
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminDelete(Collection<Long> ids) {
-        log.info("[后台管理-删除系统租户] >> 入参={}", ids);
-        sysTenantMapper.deleteByIds(ids);
-    }
-
-    /**
-     * 根据租户ID(非主键ID),得到租户实体
-     */
-    public SysTenantEntity getTenantEntityByTenantId(Long tenantId) {
-        return sysTenantMapper.selectOne(
-                new QueryWrapper<SysTenantEntity>()
-                        .lambda()
-                        .eq(SysTenantEntity::getTenantId, tenantId)
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-    }
-
-    /**
-     * 检查是否已存在相同数据
-     *
-     * @param dto DTO
-     */
-    public void checkExistence(AdminInsertSysTenantDTO dto) {
-        SysTenantEntity existingEntity = sysTenantMapper.selectOne(
-                new QueryWrapper<SysTenantEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysTenantEntity::getId)
-                        // 租户ID相同
-                        .eq(SysTenantEntity::getTenantId, dto.getTenantId())
-                        .or()
-                        // 或租户名相同
-                        .eq(SysTenantEntity::getTenantName, dto.getTenantName())
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
-            throw new BusinessException(400, "已存在相同系统租户,请重新输入");
-        }
-    }
-
-    /**
-     * 根据主键IDs,取租户BOs
-     * @param fillTenantAdminUser 是否根据租户管理员用户ID,查询关联用户信息并填充到BO
-     */
-    public List<SysTenantBO> listByIds(Collection<Long> ids, boolean fillTenantAdminUser) {
-        if (CollUtil.isEmpty(ids)) {
-            return Collections.emptyList();
-        }
-        List<SysTenantEntity> entityList = sysTenantMapper.selectBatchIds(ids);
-        return entityList2BOs(entityList, fillTenantAdminUser);
-    }
-
-    /*
-    ----------------------------------------------------------------
-                        私有方法 private methods
-    ----------------------------------------------------------------
-     */
-
-    /**
-     * 实体转 BO
-     *
-     * @param entity 实体
-     * @param fillTenantAdminUser 是否根据租户管理员用户ID,查询关联用户信息并填充到BO
-     * @return BO
-     */
-    private SysTenantBO entity2BO(SysTenantEntity entity, boolean fillTenantAdminUser) {
-        if (entity == null) {
-            return null;
-        }
-
-        SysTenantBO bo = new SysTenantBO();
-        BeanUtil.copyProperties(entity, bo);
-
-        // 可以在此处为BO填充字段
-        if (fillTenantAdminUser && ObjectUtil.isNotNull(entity.getTenantAdminUserId())) {
-            bo.setTenantAdminUser(sysUserMapper.getBaseInfoByUserId(entity.getTenantAdminUserId()));
-        }
-
-        return bo;
-    }
-
-    /**
-     * 实体 List 转 BO List
-     *
-     * @param entityList 实体 List
-     * @param fillTenantAdminUser 是否根据租户管理员用户ID,查询关联用户信息并填充到BO
-     * @return BO List
-     */
-    private List<SysTenantBO> entityList2BOs(List<SysTenantEntity> entityList, boolean fillTenantAdminUser) {
-        // 深拷贝
-        List<SysTenantBO> ret = new ArrayList<>(entityList.size());
-        entityList.forEach(
-                entity -> ret.add(this.entity2BO(entity, fillTenantAdminUser))
-        );
-
-        return ret;
-    }
-
-    /**
-     * 实体分页转 BO 分页
-     *
-     * @param entityPage 实体分页
-     * @return BO 分页
-     */
-    private PageResult<SysTenantBO> entityPage2BOPage(Page<SysTenantEntity> entityPage, boolean fillTenantAdminUser) {
-        return new PageResult<SysTenantBO>()
-                .setCurrent(entityPage.getCurrent())
-                .setSize(entityPage.getSize())
-                .setTotal(entityPage.getTotal())
-                .setRecords(this.entityList2BOs(entityPage.getRecords(), fillTenantAdminUser));
-    }
-
-}

+ 0 - 24
src/main/java/com/jtzx/crm/module/sys/service/SysUserService.java

@@ -17,7 +17,6 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jtzx.crm.module.sys.constant.SysConstant;
-import com.jtzx.crm.module.sys.entity.SysTenantEntity;
 import com.jtzx.crm.module.sys.entity.SysUserEntity;
 import com.jtzx.crm.module.sys.enums.SysErrorEnum;
 import com.jtzx.crm.module.sys.enums.SysUserStatusEnum;
@@ -52,7 +51,6 @@ public class SysUserService {
     private final SysRoleService sysRoleService;
     private final SysDeptService sysDeptService;
     private final SysMenuService sysMenuService;
-    private final SysTenantService sysTenantService;
     private final SysUserDeptRelationService sysUserDeptRelationService;
     private final SysUserRoleRelationService sysUserRoleRelationService;
     private final SysRoleMenuRelationService sysRoleMenuRelationService;
@@ -473,28 +471,6 @@ public class SysUserService {
         }
     }
 
-    /**
-     * 检查并获取租户上下文 bean,无效或被禁用则直接抛出异常
-     *
-     * @param tenantId 租户ID
-     * @return TenantContext
-     */
-    private TenantContext checkAndGetTenantContext(Long tenantId) throws BusinessException {
-        // 查询租户是否仍有效
-        SysTenantEntity tenantEntity = sysTenantService.getTenantEntityByTenantId(tenantId);
-        if (tenantEntity == null) {
-            throw new BusinessException(SysErrorEnum.INVALID_TENANT);
-        }
-
-        if (EnabledStatusEnum.DISABLED == tenantEntity.getStatus()) {
-            throw new BusinessException(SysErrorEnum.DISABLED_TENANT);
-        }
-
-        return TenantContext.builder()
-                .tenantId(tenantEntity.getTenantId())
-                .tenantName(tenantEntity.getTenantName())
-                .build();
-    }
 
     private void updateLastLoginAt(Long userId, LocalDateTime lastLoginAt) {
         SysUserEntity entity = new SysUserEntity();

+ 0 - 5
src/main/resources/application.yml

@@ -73,11 +73,6 @@ helio:
     isolate-level: LINE
     ignored-tables:
       # 以下表不参与【行级】多租户 SQL 拦截器条件拼接
-      - sys_menu
-      - sys_tenant
-      - sys_role_menu_relation
-      - sys_user_dept_relation
-      - sys_user_role_relation
   i18n:
     # 是否对返回消息启用国际化翻译
     enabled: false