Bladeren bron

修改:<去掉多租户>

张旭锋 3 dagen geleden
bovenliggende
commit
2fd987d9bf
40 gewijzigde bestanden met toevoegingen van 13 en 2476 verwijderingen
  1. 0 57
      src/main/java/com/jtzx/crm/module/api/web/common/AdminSelectOptionsController.java
  2. 0 120
      src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysDataDictController.java
  3. 0 83
      src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysDeptController.java
  4. 0 84
      src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysParamController.java
  5. 1 4
      src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysRoleController.java
  6. 0 5
      src/main/java/com/jtzx/crm/module/sys/constant/SysConstant.java
  7. 0 52
      src/main/java/com/jtzx/crm/module/sys/entity/SysDataDictClassifiedEntity.java
  8. 0 64
      src/main/java/com/jtzx/crm/module/sys/entity/SysDataDictItemEntity.java
  9. 0 54
      src/main/java/com/jtzx/crm/module/sys/entity/SysDeptEntity.java
  10. 0 41
      src/main/java/com/jtzx/crm/module/sys/entity/SysParamEntity.java
  11. 0 37
      src/main/java/com/jtzx/crm/module/sys/entity/SysUserDeptRelationEntity.java
  12. 3 9
      src/main/java/com/jtzx/crm/module/sys/enums/SysErrorEnum.java
  13. 0 31
      src/main/java/com/jtzx/crm/module/sys/mapper/SysDataDictClassifiedMapper.java
  14. 0 14
      src/main/java/com/jtzx/crm/module/sys/mapper/SysDataDictItemMapper.java
  15. 0 23
      src/main/java/com/jtzx/crm/module/sys/mapper/SysDeptMapper.java
  16. 0 13
      src/main/java/com/jtzx/crm/module/sys/mapper/SysParamMapper.java
  17. 0 13
      src/main/java/com/jtzx/crm/module/sys/mapper/SysUserDeptRelationMapper.java
  18. 0 82
      src/main/java/com/jtzx/crm/module/sys/model/interior/UserDeptContainer.java
  19. 0 43
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysDeptDTO.java
  20. 0 43
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysParamDTO.java
  21. 0 12
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysRoleDTO.java
  22. 0 3
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysUserDTO.java
  23. 0 29
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminListSysParamDTO.java
  24. 0 48
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictClassifiedInsertOrUpdateDTO.java
  25. 0 26
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictClassifiedListDTO.java
  26. 0 60
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictItemInsertOrUpdateDTO.java
  27. 0 26
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictItemListDTO.java
  28. 0 43
      src/main/java/com/jtzx/crm/module/sys/model/request/AdminUpdateSysTenantDTO.java
  29. 0 53
      src/main/java/com/jtzx/crm/module/sys/model/response/SysDataDictClassifiedBO.java
  30. 0 62
      src/main/java/com/jtzx/crm/module/sys/model/response/SysDataDictItemBO.java
  31. 0 53
      src/main/java/com/jtzx/crm/module/sys/model/response/SysDeptBO.java
  32. 0 49
      src/main/java/com/jtzx/crm/module/sys/model/response/SysParamBO.java
  33. 0 26
      src/main/java/com/jtzx/crm/module/sys/model/response/SysTenantKickOutUsersBO.java
  34. 1 4
      src/main/java/com/jtzx/crm/module/sys/model/response/SysUserLoginBO.java
  35. 0 348
      src/main/java/com/jtzx/crm/module/sys/service/SysDataDictService.java
  36. 0 270
      src/main/java/com/jtzx/crm/module/sys/service/SysDeptService.java
  37. 0 245
      src/main/java/com/jtzx/crm/module/sys/service/SysParamService.java
  38. 7 67
      src/main/java/com/jtzx/crm/module/sys/service/SysRoleService.java
  39. 0 91
      src/main/java/com/jtzx/crm/module/sys/service/SysUserDeptRelationService.java
  40. 1 89
      src/main/java/com/jtzx/crm/module/sys/service/SysUserService.java

+ 0 - 57
src/main/java/com/jtzx/crm/module/api/web/common/AdminSelectOptionsController.java

@@ -1,57 +0,0 @@
-package com.jtzx.crm.module.api.web.common;
-
-
-import cc.uncarbon.framework.web.model.response.ApiResult;
-import com.jtzx.crm.module.api.constant.ApiConstant;
-import com.jtzx.crm.module.api.model.response.AdminSelectOptionItemVO;
-import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
-import com.jtzx.crm.module.sys.model.response.SysDeptBO;
-import com.jtzx.crm.module.sys.model.response.SysRoleBO;
-import com.jtzx.crm.module.sys.service.SysDeptService;
-import com.jtzx.crm.module.sys.service.SysRoleService;
-import cn.dev33.satoken.annotation.SaCheckLogin;
-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.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-// 约束:登录后才能使用   👇 后台管理对应的鉴权工具类
-@SaCheckLogin(type = CrmAdminStpUtil.TYPE)
-@Tag(name = "后台管理-下拉框数据源接口")
-@RequestMapping(ApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
-@RequiredArgsConstructor
-@RestController
-@Slf4j
-public class AdminSelectOptionsController {
-
-    private final SysRoleService sysRoleService;
-    private final SysDeptService sysDeptService;
-
-
-    /*
-    这里统一存放所有用于后台管理的下拉框数据源接口
-    避免多人协作时,不知道原来是否已经有了,或者写在某个边边角角里,造成重复开发
-    */
-
-    @Operation(summary = "后台角色下拉框")
-    @GetMapping(value = "/select-options/roles")
-    public ApiResult<List<AdminSelectOptionItemVO>> roles() {
-        return ApiResult.data(
-                AdminSelectOptionItemVO.listOf(sysRoleService.adminSelectOptions(), SysRoleBO::getId, SysRoleBO::getTitle)
-        );
-    }
-
-    @Operation(summary = "部门下拉框(前端负责转为树状数据)")
-    @GetMapping(value = "/select-options/depts")
-    public ApiResult<List<AdminSelectOptionItemVO>> depts() {
-        return ApiResult.data(
-                AdminSelectOptionItemVO.listOf(sysDeptService.adminSelectOptions(true), SysDeptBO::getId, SysDeptBO::getTitle, SysDeptBO::getParentId)
-        );
-    }
-
-}

+ 0 - 120
src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysDataDictController.java

@@ -1,120 +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.util.CrmAdminStpUtil;
-import com.jtzx.crm.module.sys.annotation.SysLog;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictClassifiedInsertOrUpdateDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictClassifiedListDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictItemInsertOrUpdateDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictItemListDTO;
-import com.jtzx.crm.module.sys.model.response.SysDataDictClassifiedBO;
-import com.jtzx.crm.module.sys.model.response.SysDataDictItemBO;
-import com.jtzx.crm.module.sys.service.SysDataDictService;
-import cn.dev33.satoken.annotation.SaCheckLogin;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.Valid;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-
-@SaCheckLogin(type = CrmAdminStpUtil.TYPE)
-@Tag(name = "数据字典管理接口")
-@RequestMapping(value = ApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
-@RequiredArgsConstructor
-@RestController
-@Slf4j
-public class AdminSysDataDictController {
-
-    private static final String PERMISSION_PREFIX = "SysDataDict:";
-
-    private final SysDataDictService sysDataDictService;
-
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "分页列表数据字典分类")
-    @GetMapping(value = "/sys/data-dict/classifieds")
-    public ApiResult<PageResult<SysDataDictClassifiedBO>> list(PageParam pageParam, AdminSysDataDictClassifiedListDTO dto) {
-        return ApiResult.data(sysDataDictService.adminListClassified(pageParam, dto));
-    }
-
-    @SysLog(value = "新增数据字典分类")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @Operation(summary = "新增数据字典分类")
-    @PostMapping(value = "/sys/data-dict/classifieds")
-    public ApiResult<Void> insert(@RequestBody @Valid AdminSysDataDictClassifiedInsertOrUpdateDTO dto) {
-        sysDataDictService.adminInsertClassified(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "编辑数据字典分类")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @Operation(summary = "编辑数据字典分类")
-    @PutMapping(value = "/sys/data-dict/classifieds/{id}")
-    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminSysDataDictClassifiedInsertOrUpdateDTO dto) {
-        dto.setId(id);
-        sysDataDictService.adminUpdateClassified(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "删除数据字典分类")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @Operation(summary = "删除数据字典分类")
-    @DeleteMapping(value = "/sys/data-dict/classifieds")
-    public ApiResult<Void> deleteClassified(@RequestBody @Valid IdsDTO<Long> dto) {
-        sysDataDictService.adminDeleteClassified(dto.getIds());
-
-        return ApiResult.success();
-    }
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "分页列表数据字典分类下的字典项")
-    @GetMapping(value = "/sys/data-dict/classifieds/{classifiedId}/items")
-    public ApiResult<PageResult<SysDataDictItemBO>> list(@PathVariable Long classifiedId, PageParam pageParam, AdminSysDataDictItemListDTO dto) {
-        dto.setClassifiedId(classifiedId);
-        return ApiResult.data(sysDataDictService.adminListItem(pageParam, dto));
-    }
-
-    @SysLog(value = "新增数据字典项")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @Operation(summary = "新增数据字典项")
-    @PostMapping(value = "/sys/data-dict/classifieds/{classifiedId}/items")
-    public ApiResult<Void> insert(@PathVariable Long classifiedId, @RequestBody @Valid AdminSysDataDictItemInsertOrUpdateDTO dto) {
-        dto.setClassifiedId(classifiedId);
-        sysDataDictService.adminInsertItem(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "编辑数据字典项")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @Operation(summary = "编辑数据字典项")
-    @PutMapping(value = "/sys/data-dict/classifieds/{classifiedId}/items/{id}")
-    public ApiResult<Void> update(@PathVariable Long classifiedId, @PathVariable Long id, @RequestBody @Valid AdminSysDataDictItemInsertOrUpdateDTO dto) {
-        dto
-                .setId(id)
-                .setClassifiedId(classifiedId);
-        sysDataDictService.adminUpdateItem(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "删除数据字典项")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @Operation(summary = "删除数据字典项")
-    @DeleteMapping(value = "/sys/data-dict/classifieds/{classifiedId}/items")
-    public ApiResult<Void> deleteItem(@PathVariable Long classifiedId, @RequestBody @Valid IdsDTO<Long> dto) {
-        sysDataDictService.adminDeleteItem(dto.getIds(), classifiedId);
-
-        return ApiResult.success();
-    }
-}

+ 0 - 83
src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysDeptController.java

@@ -1,83 +0,0 @@
-package com.jtzx.crm.module.api.web.sys;
-
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-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.sys.annotation.SysLog;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysDeptDTO;
-import com.jtzx.crm.module.sys.model.response.SysDeptBO;
-import com.jtzx.crm.module.sys.service.SysDeptService;
-import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
-import cn.dev33.satoken.annotation.SaCheckLogin;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-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;
-import java.util.List;
-
-
-@SaCheckLogin(type = CrmAdminStpUtil.TYPE)
-@Tag(name = "部门管理接口")
-@RequestMapping(value = ApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
-@RequiredArgsConstructor
-@RestController
-@Slf4j
-public class AdminSysDeptController {
-
-    private static final String PERMISSION_PREFIX = "SysDept:";
-
-    private final SysDeptService sysDeptService;
-
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "列表")
-    @GetMapping(value = "/sys/depts")
-    public ApiResult<List<SysDeptBO>> list() {
-        return ApiResult.data(sysDeptService.adminList());
-    }
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "详情")
-    @GetMapping(value = "/sys/depts/{id}")
-    public ApiResult<SysDeptBO> getById(@PathVariable Long id) {
-        return ApiResult.data(sysDeptService.getOneById(id, true));
-    }
-
-    @SysLog(value = "新增部门")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @Operation(summary = "新增")
-    @PostMapping(value = "/sys/depts")
-    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
-        sysDeptService.adminInsert(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "编辑部门")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @Operation(summary = "编辑")
-    @PutMapping(value = "/sys/depts/{id}")
-    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
-        dto.setId(id);
-        sysDeptService.adminUpdate(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "删除部门")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @Operation(summary = "删除")
-    @DeleteMapping(value = "/sys/depts")
-    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
-        sysDeptService.adminDelete(dto.getIds());
-
-        return ApiResult.success();
-    }
-
-}

+ 0 - 84
src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysParamController.java

@@ -1,84 +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.sys.annotation.SysLog;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysParamDTO;
-import com.jtzx.crm.module.sys.model.request.AdminListSysParamDTO;
-import com.jtzx.crm.module.sys.model.response.SysParamBO;
-import com.jtzx.crm.module.sys.service.SysParamService;
-import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
-import cn.dev33.satoken.annotation.SaCheckLogin;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-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 AdminSysParamController {
-
-    private static final String PERMISSION_PREFIX = "SysParam:";
-
-    private final SysParamService sysParamService;
-
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "分页列表")
-    @GetMapping(value = "/sys/params")
-    public ApiResult<PageResult<SysParamBO>> list(PageParam pageParam, AdminListSysParamDTO dto) {
-        return ApiResult.data(sysParamService.adminList(pageParam, dto));
-    }
-
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @Operation(summary = "详情")
-    @GetMapping(value = "/sys/params/{id}")
-    public ApiResult<SysParamBO> getById(@PathVariable Long id) {
-        return ApiResult.data(sysParamService.getOneById(id, true));
-    }
-
-    @SysLog(value = "新增系统参数")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @Operation(summary = "新增")
-    @PostMapping(value = "/sys/params")
-    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
-        sysParamService.adminInsert(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "编辑系统参数")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @Operation(summary = "编辑")
-    @PutMapping(value = "/sys/params/{id}")
-    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
-        dto.setId(id);
-        sysParamService.adminUpdate(dto);
-
-        return ApiResult.success();
-    }
-
-    @SysLog(value = "删除系统参数")
-    @SaCheckPermission(type = CrmAdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @Operation(summary = "删除")
-    @DeleteMapping(value = "/sys/params")
-    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
-        sysParamService.adminDelete(dto.getIds());
-
-        return ApiResult.success();
-    }
-
-}

+ 1 - 4
src/main/java/com/jtzx/crm/module/api/web/sys/AdminSysRoleController.java

@@ -60,7 +60,6 @@ public class AdminSysRoleController {
     @Operation(summary = "新增")
     @PostMapping(value = "/sys/roles")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
-        dto.setTenantId(null);
         sysRoleService.adminInsert(dto);
 
         return ApiResult.success();
@@ -71,9 +70,7 @@ public class AdminSysRoleController {
     @Operation(summary = "编辑")
     @PutMapping(value = "/sys/roles/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
-        dto
-                .setTenantId(null)
-                .setId(id);
+        dto.setId(id);
         sysRoleService.adminUpdate(dto);
 
         return ApiResult.success();

+ 0 - 5
src/main/java/com/jtzx/crm/module/sys/constant/SysConstant.java

@@ -32,10 +32,5 @@ public final class SysConstant {
     public static final String ADMIN_ROLE_VALUE = "Admin";
     public static final String GROUP_MANAGER_ROLE_VALUE = "GroupManager";
 
-    /**
-     * 租户管理员角色值
-     * 为了外显美观没有在前面增加Tenant字样
-     */
-    public static final String TENANT_ADMIN_ROLE_VALUE = "Admin";
 
 }

+ 0 - 52
src/main/java/com/jtzx/crm/module/sys/entity/SysDataDictClassifiedEntity.java

@@ -1,52 +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;
-
-import java.io.Serial;
-
-
-/**
- * 数据字典分类
- */
-@EqualsAndHashCode(callSuper = true)
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-@TableName(value = "sys_data_dict_classified")
-public class SysDataDictClassifiedEntity extends HelioBaseEntity<Long> {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-
-    @Schema(description = "分类编码")
-    @TableField(value = "code")
-    private String code;
-
-    @Schema(description = "分类名称")
-    @TableField(value = "name")
-    private String name;
-
-    @Schema(description = "状态")
-    @TableField(value = "status")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "分类描述")
-    @TableField(value = "description")
-    private String description;
-
-    @TableField("del_flag")
-    private Integer delFlag;
-}

+ 0 - 64
src/main/java/com/jtzx/crm/module/sys/entity/SysDataDictItemEntity.java

@@ -1,64 +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;
-
-import java.io.Serial;
-
-
-/**
- * 数据字典项
- */
-@EqualsAndHashCode(callSuper = true)
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-@TableName(value = "sys_data_dict_item")
-public class SysDataDictItemEntity extends HelioBaseEntity<Long> {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-
-    @Schema(description = "所属分类ID")
-    @TableField(value = "classified_id")
-    private Long classifiedId;
-
-    @Schema(description = "字典项编码")
-    @TableField(value = "code")
-    private String code;
-
-    @Schema(description = "字典项标签")
-    @TableField(value = "label")
-    private String label;
-
-    @Schema(description = "字典项值")
-    @TableField(value = "value")
-    private String value;
-
-    @Schema(description = "状态")
-    @TableField(value = "status")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "排序")
-    @TableField(value = "sort")
-    private Integer sort;
-
-    @Schema(description = "描述")
-    @TableField(value = "description")
-    private String description;
-
-    @TableField("del_flag")
-    private Integer delFlag;
-}

+ 0 - 54
src/main/java/com/jtzx/crm/module/sys/entity/SysDeptEntity.java

@@ -1,54 +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_dept")
-public class SysDeptEntity extends HelioBaseEntity<Long> {
-
-	/**
-	 * 乐观锁
-	 * 需自行加@Version注解才有效
-	 */
-	@Schema(description = "乐观锁", title = "需再次复制本字段,并自行加 @Version 注解才有效")
-	@TableField(value = "revision", exist = false)
-	private Long revision;
-
-	@Schema(description = "名称")
-	@TableField(value = "title")
-	private String title;
-
-	@Schema(description = "上级ID(无上级节点设置为0)")
-	@TableField(value = "parent_id")
-	private Long parentId;
-
-	@Schema(description = "排序")
-	@TableField(value = "sort")
-	private Integer sort;
-
-	@Schema(description = "状态")
-	@TableField(value = "status")
-	private EnabledStatusEnum status;
-
-	@TableField("del_flag")
-	private Integer delFlag;
-}

+ 0 - 41
src/main/java/com/jtzx/crm/module/sys/entity/SysParamEntity.java

@@ -1,41 +0,0 @@
-package com.jtzx.crm.module.sys.entity;
-
-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_param")
-public class SysParamEntity extends HelioBaseEntity<Long> {
-
-    @Schema(description = "键名")
-    @TableField(value = "name")
-    private String name;
-
-    @Schema(description = "键值")
-    @TableField(value = "value")
-    private String value;
-
-    @Schema(description = "描述")
-    @TableField(value = "description")
-    private String description;
-
-    @TableField("del_flag")
-    private Integer delFlag;
-}

+ 0 - 37
src/main/java/com/jtzx/crm/module/sys/entity/SysUserDeptRelationEntity.java

@@ -1,37 +0,0 @@
-package com.jtzx.crm.module.sys.entity;
-
-import cc.uncarbon.framework.crud.entity.HelioNoTenantBaseEntity;
-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_user_dept_relation")
-public class SysUserDeptRelationEntity extends HelioNoTenantBaseEntity<Long> {
-
-	@Schema(description = "用户ID")
-	@TableField(value = "user_id")
-	private Long userId;
-
-	@Schema(description = "部门ID")
-	@TableField(value = "dept_id")
-	private Long deptId;
-
-	@TableField("del_flag")
-	private Integer delFlag;
-}

+ 3 - 9
src/main/java/com/jtzx/crm/module/sys/enums/SysErrorEnum.java

@@ -15,30 +15,24 @@ public enum SysErrorEnum implements HelioBaseEnum<Integer> {
     INVALID_ID(400, "无效ID"),
     INCORRECT_PIN_OR_PWD(400, "账号或密码不正确"),
     BANNED_USER(400, "用户被封禁"),
-    INVALID_TENANT(400, "所属租户无效"),
-    DISABLED_TENANT(400, "所属租户已禁用"),
     INCORRECT_OLD_PASSWORD(400, "原密码有误"),
     NO_ROLE_AVAILABLE_FOR_CURRENT_USER(400, "当前用户没有可用角色"),
     NO_MENU_AVAILABLE_FOR_CURRENT_ROLE(400, "当前角色没有可用菜单"),
 
     // 以下8个枚举用于后台角色管理的越权检查
     ROLE_VALUE_CANNOT_BE(403, "角色值 {} 不能用于新增或编辑,请选用其他值"),
-    CANNOT_DELETE_SUPER_ADMIN_ROLE(403, "不能删除超级管理员角色"),
-    CANNOT_DELETE_TENANT_ADMIN_ROLE(403, "为减少脏数据,不建议直接删除租户管理员角色,需通过【删除租户】关联删除"),
+    CANNOT_DELETE_SUPER_ADMIN_ROLE(403, "不能删除管理员角色"),
     CANNOT_DELETE_SELF_ROLE(403, "不能删除自身角色"),
-    CANNOT_BIND_MENUS_FOR_SUPER_ADMIN_ROLE(403, "不能为超级管理员角色绑定菜单"),
+    CANNOT_BIND_MENUS_FOR_SUPER_ADMIN_ROLE(403, "不能为管理员角色绑定菜单"),
     CANNOT_BIND_MENUS_FOR_SELF(403, "不能为自身角色绑定菜单"),
     BEYOND_AUTHORITY_BIND_MENUS(401, "不得超越自身菜单权限"),
-    CANNOT_BIND_MENUS_FOR_TENANT_ADMIN_ROLE(403, "无权为租户管理员绑定菜单"),
 
     // 以下4个枚举用于后台用户管理的越权检查
     CANNOT_OPERATE_SELF_USER(403, "不能对自身进行此操作"),
     CANNOT_OPERATE_THIS_USER(403, "不能该用户进行此操作"),
     CANNOT_UNBIND_SELF_TENANT_ADMIN_ROLE(403, "自身的管理员角色不能被取消"),
-    BEYOND_AUTHORITY_BIND_ROLES(401, "不得超越自身角色权限"),
+    BEYOND_AUTHORITY_BIND_ROLES(401, "不得超越自身角色权限");
 
-    CANNOT_DELETE_PRIVILEGED_TENANT(403, "不能删除超级租户"),
-    NEED_DELETE_EXISTING_TENANT_ADMIN_ROLE(500, "租户ID {} 对应的租户管理员角色已存在,请使用超级管理员账号删除"),;
 
     private final Integer value;
     private final String label;

+ 0 - 31
src/main/java/com/jtzx/crm/module/sys/mapper/SysDataDictClassifiedMapper.java

@@ -1,31 +0,0 @@
-package com.jtzx.crm.module.sys.mapper;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import com.jtzx.crm.module.sys.entity.SysDataDictClassifiedEntity;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import jakarta.annotation.Nonnull;
-import jakarta.annotation.Nullable;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.Objects;
-
-
-/**
- * 数据字典分类
- */
-@Mapper
-public interface SysDataDictClassifiedMapper extends BaseMapper<SysDataDictClassifiedEntity> {
-
-    default SysDataDictClassifiedEntity selectByCode(@Nonnull String code, @Nullable EnabledStatusEnum status) {
-        return selectOne(
-                new QueryWrapper<SysDataDictClassifiedEntity>()
-                        .lambda()
-                        .eq(SysDataDictClassifiedEntity::getCode, code)
-                        .eq(Objects.nonNull(status), SysDataDictClassifiedEntity::getStatus, status)
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-    }
-
-}

+ 0 - 14
src/main/java/com/jtzx/crm/module/sys/mapper/SysDataDictItemMapper.java

@@ -1,14 +0,0 @@
-package com.jtzx.crm.module.sys.mapper;
-
-import com.jtzx.crm.module.sys.entity.SysDataDictItemEntity;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-
-/**
- * 数据字典项
- */
-@Mapper
-public interface SysDataDictItemMapper extends BaseMapper<SysDataDictItemEntity> {
-
-}

+ 0 - 23
src/main/java/com/jtzx/crm/module/sys/mapper/SysDeptMapper.java

@@ -1,23 +0,0 @@
-package com.jtzx.crm.module.sys.mapper;
-
-import com.jtzx.crm.module.sys.entity.SysDeptEntity;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * 部门
- */
-@Mapper
-public interface SysDeptMapper extends BaseMapper<SysDeptEntity> {
-
-    /**
-     * 列举已排序好的所有部门列表
-     */
-    default List<SysDeptEntity> sortedList() {
-        return selectList(new LambdaQueryWrapper<SysDeptEntity>().orderByAsc(SysDeptEntity::getSort));
-    }
-
-}

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

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

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

@@ -1,13 +0,0 @@
-package com.jtzx.crm.module.sys.mapper;
-
-import com.jtzx.crm.module.sys.entity.SysUserDeptRelationEntity;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 后台用户-部门关联
- */
-@Mapper
-public interface SysUserDeptRelationMapper extends BaseMapper<SysUserDeptRelationEntity> {
-	
-}

+ 0 - 82
src/main/java/com/jtzx/crm/module/sys/model/interior/UserDeptContainer.java

@@ -1,82 +0,0 @@
-package com.jtzx.crm.module.sys.model.interior;
-
-import com.jtzx.crm.module.sys.entity.SysDeptEntity;
-import cn.hutool.core.collection.CollUtil;
-import lombok.Getter;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 用户关联部门容器
- */
-@Getter
-public class UserDeptContainer {
-
-    /**
-     * 直接关联的部门IDs
-     * 一般只有0或1个元素
-     */
-    private final List<Long> relatedDeptIds;
-
-    /**
-     * 直接关联的部门实例集合
-     * 一般只有0或1个元素
-     */
-    private final List<SysDeptEntity> relatedDepts;
-
-    /**
-     * 可见的部门IDs
-     */
-    private List<Long> visibleDeptIds;
-
-    /**
-     * 可见的部门实例集合
-     */
-    private List<SysDeptEntity> visibleDepts;
-
-
-    public UserDeptContainer(List<Long> relatedDeptIds, List<SysDeptEntity> relatedDepts) {
-        this.relatedDeptIds = relatedDeptIds;
-        this.relatedDepts = relatedDepts;
-        this.visibleDeptIds = relatedDeptIds;
-        this.visibleDepts = relatedDepts;
-    }
-
-    /**
-     * 用户是否有实际关联的部门
-     */
-    public boolean hasRelatedDepts() {
-        return CollUtil.isNotEmpty(relatedDeptIds) && CollUtil.isNotEmpty(relatedDepts);
-    }
-
-    /**
-     * 用户主要关联的部门,默认取第一个元素
-     * @return null or 部门实例
-     */
-    public SysDeptEntity primaryRelatedDept() {
-        return CollUtil.getFirst(relatedDepts);
-    }
-
-    /**
-     * 用户是否有实际可见的部门
-     * 也可视为部门的数据权限范围
-     */
-    public boolean hasVisibleDepts() {
-        return CollUtil.isNotEmpty(visibleDeptIds) && CollUtil.isNotEmpty(visibleDepts);
-    }
-
-    /**
-     * 更新可见的部门
-     */
-    public void updateVisibleDepts(List<SysDeptEntity> visibleDepts) {
-        if (CollUtil.isEmpty(visibleDepts)) {
-            this.visibleDeptIds = Collections.emptyList();
-            this.visibleDepts = Collections.emptyList();
-        } else {
-            this.visibleDeptIds = visibleDepts.stream().map(SysDeptEntity::getId).collect(Collectors.toList());
-            this.visibleDepts = visibleDepts;
-        }
-    }
-}

+ 0 - 43
src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysDeptDTO.java

@@ -1,43 +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 jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-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 AdminInsertOrUpdateSysDeptDTO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    private Long id;
-
-    @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 50, message = "【部门名称】最长50位")
-    @NotBlank(message = "部门名称不能为空")
-    private String title;
-
-    @Schema(description = "上级ID(无上级节点设置为0)")
-    private Long parentId;
-
-    @Schema(description = "排序")
-    private Integer sort;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-}

+ 0 - 43
src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysParamDTO.java

@@ -1,43 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-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 AdminInsertOrUpdateSysParamDTO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    private Long id;
-
-    @Schema(description = "键名", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 50, message = "【键名】最长50位")
-    @NotBlank(message = "键名不能为空")
-    private String name;
-
-    @Schema(description = "键值", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【键值】最长255位")
-    @NotBlank(message = "键值不能为空")
-    private String value;
-
-    @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【描述】最长255位")
-    @NotBlank(message = "描述不能为空")
-    private String description;
-
-}

+ 0 - 12
src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysRoleDTO.java

@@ -1,6 +1,5 @@
 package com.jtzx.crm.module.sys.model.request;
 
-import com.jtzx.crm.module.sys.constant.SysConstant;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.Size;
@@ -11,7 +10,6 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
-import java.util.Objects;
 
 
 /**
@@ -27,9 +25,6 @@ public class AdminInsertOrUpdateSysRoleDTO implements Serializable {
     @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @Schema(description = "所属租户ID", hidden = true, title = "仅新增时使用")
-    private Long tenantId;
-
     @Schema(description = "角色名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【角色名】最长50位")
     @NotBlank(message = "角色名不能为空")
@@ -40,11 +35,4 @@ public class AdminInsertOrUpdateSysRoleDTO implements Serializable {
     @NotBlank(message = "角色编码不能为空")
     private String value;
 
-    /**
-     * 是否用于创建新租户管理员角色
-     */
-    public boolean creatingNewTenantAdmin() {
-        return Objects.nonNull(tenantId) && SysConstant.TENANT_ADMIN_ROLE_VALUE.equalsIgnoreCase(value);
-    }
-
 }

+ 0 - 3
src/main/java/com/jtzx/crm/module/sys/model/request/AdminInsertOrUpdateSysUserDTO.java

@@ -33,9 +33,6 @@ public class AdminInsertOrUpdateSysUserDTO implements Serializable {
     @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @Schema(description = "所属租户ID", hidden = true, title = "仅新增时使用")
-    private Long tenantId;
-
     @Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 6, max = 16, message = "【账号】最短6位,最长16位")
     @NotBlank(message = "账号不能为空")

+ 0 - 29
src/main/java/com/jtzx/crm/module/sys/model/request/AdminListSysParamDTO.java

@@ -1,29 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-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 AdminListSysParamDTO implements Serializable {
-
-    @Schema(description = "键名")
-    private String name;
-
-    @Schema(description = "描述")
-    private String description;
-
-}

+ 0 - 48
src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictClassifiedInsertOrUpdateDTO.java

@@ -1,48 +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 jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-
-import java.io.Serializable;
-
-
-/**
- * 后台管理-新增/编辑数据字典分类 DTO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminSysDataDictClassifiedInsertOrUpdateDTO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    private Long id;
-
-    @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【分类编码】最长255位")
-    @NotBlank(message = "分类编码不能为空")
-    private String code;
-
-    @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【分类名称】最长255位")
-    @NotBlank(message = "分类名称不能为空")
-    private String name;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "状态不能为空")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "分类描述")
-    @Size(max = 255, message = "【分类描述】最长255位")
-    private String description;
-
-}

+ 0 - 26
src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictClassifiedListDTO.java

@@ -1,26 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-
-import java.io.Serializable;
-
-
-/**
- * 后台管理-分页列表数据字典分类 DTO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminSysDataDictClassifiedListDTO implements Serializable {
-
-    @Schema(description = "分类编码")
-    private String code;
-
-}

+ 0 - 60
src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictItemInsertOrUpdateDTO.java

@@ -1,60 +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 jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-
-import java.io.Serializable;
-
-
-/**
- * 后台管理-新增/编辑数据字典项 DTO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminSysDataDictItemInsertOrUpdateDTO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    private Long id;
-
-    @Schema(description = "所属分类ID", hidden = true)
-    private Long classifiedId;
-
-    @Schema(description = "字典项编码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【字典项编码】最长255位")
-    @NotBlank(message = "字典项编码不能为空")
-    private String code;
-
-    @Schema(description = "字典项标签", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 255, message = "【字典项标签】最长255位")
-    @NotBlank(message = "字典项标签不能为空")
-    private String label;
-
-    @Schema(description = "字典项值", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 4096, message = "【字典项值】最长4096位")
-    @NotBlank(message = "字典项值不能为空")
-    private String value;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "状态不能为空")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "排序不能为空")
-    private Integer sort;
-
-    @Schema(description = "描述")
-    @Size(max = 255, message = "【描述】最长255位")
-    private String description;
-
-}

+ 0 - 26
src/main/java/com/jtzx/crm/module/sys/model/request/AdminSysDataDictItemListDTO.java

@@ -1,26 +0,0 @@
-package com.jtzx.crm.module.sys.model.request;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-
-import java.io.Serializable;
-
-
-/**
- * 后台管理-分页列表数据字典项 DTO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class AdminSysDataDictItemListDTO implements Serializable {
-
-    @Schema(description = "所属分类ID", hidden = true)
-    private Long classifiedId;
-
-}

+ 0 - 43
src/main/java/com/jtzx/crm/module/sys/model/request/AdminUpdateSysTenantDTO.java

@@ -1,43 +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 jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-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 AdminUpdateSysTenantDTO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    private Long id;
-
-    @Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED)
-    @Size(max = 50, message = "【租户名】最长50位")
-    @NotBlank(message = "租户名不能为空")
-    private String tenantName;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "状态不能为空")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "备注")
-    @Size(max = 255, message = "【备注】最长255位")
-    private String remark;
-
-}

+ 0 - 53
src/main/java/com/jtzx/crm/module/sys/model/response/SysDataDictClassifiedBO.java

@@ -1,53 +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.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-
-/**
- * 数据字典分类 BO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class SysDataDictClassifiedBO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    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 code;
-
-    @Schema(description = "分类名称")
-    private String name;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "分类描述")
-    private String description;
-
-}

+ 0 - 62
src/main/java/com/jtzx/crm/module/sys/model/response/SysDataDictItemBO.java

@@ -1,62 +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.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import lombok.experimental.SuperBuilder;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-
-/**
- * 数据字典项 BO
- */
-@Accessors(chain = true)
-@SuperBuilder
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class SysDataDictItemBO implements Serializable {
-
-    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
-    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 = "所属分类ID")
-    private Long classifiedId;
-
-    @Schema(description = "字典项编码")
-    private String code;
-
-    @Schema(description = "字典项标签")
-    private String label;
-
-    @Schema(description = "字典项值")
-    private String value;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-    @Schema(description = "排序")
-    private Integer sort;
-
-    @Schema(description = "描述")
-    private String description;
-
-}

+ 0 - 53
src/main/java/com/jtzx/crm/module/sys/model/response/SysDeptBO.java

@@ -1,53 +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 SysDeptBO 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 title;
-
-    @Schema(description = "上级ID(无上级节点设置为0)")
-    private Long parentId;
-
-    @Schema(description = "排序")
-    private Integer sort;
-
-    @Schema(description = "状态")
-    private EnabledStatusEnum status;
-
-}

+ 0 - 49
src/main/java/com/jtzx/crm/module/sys/model/response/SysParamBO.java

@@ -1,49 +0,0 @@
-package com.jtzx.crm.module.sys.model.response;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-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 SysParamBO 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 name;
-
-    @Schema(description = "键值")
-    private String value;
-
-    @Schema(description = "描述")
-    private String description;
-
-}

+ 0 - 26
src/main/java/com/jtzx/crm/module/sys/model/response/SysTenantKickOutUsersBO.java

@@ -1,26 +0,0 @@
-package com.jtzx.crm.module.sys.model.response;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Getter;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 系统租户-需强制登出用户 BO
- * 同一时间大量登出,会操作大量Redis键,可能存在缓存雪崩的风险
- */
-@Getter
-public class SysTenantKickOutUsersBO {
-
-    @Schema(description = "后台用户IDs")
-    private final List<Long> sysUserIds;
-
-    public SysTenantKickOutUsersBO() {
-        this.sysUserIds = Collections.emptyList();
-    }
-
-    public SysTenantKickOutUsersBO(List<Long> sysUserIds) {
-        this.sysUserIds = sysUserIds;
-    }
-}

+ 1 - 4
src/main/java/com/jtzx/crm/module/sys/model/response/SysUserLoginBO.java

@@ -50,10 +50,7 @@ public class SysUserLoginBO implements Serializable {
     @Schema(description = "角色ID-对应权限名 Map")
     private Map<Long, Set<String>> roleIdPermissionMap;
 
-    @Schema(description = "记住我",hidden = true)
+    @Schema(description = "记住我", hidden = true)
     private Boolean rememberMe;
 
-//    @Schema(description = "关联租户上下文")
-//    private TenantContext tenantContext;
-
 }

+ 0 - 348
src/main/java/com/jtzx/crm/module/sys/service/SysDataDictService.java

@@ -1,348 +0,0 @@
-package com.jtzx.crm.module.sys.service;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-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.SysDataDictClassifiedEntity;
-import com.jtzx.crm.module.sys.entity.SysDataDictItemEntity;
-import com.jtzx.crm.module.sys.mapper.SysDataDictClassifiedMapper;
-import com.jtzx.crm.module.sys.mapper.SysDataDictItemMapper;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictClassifiedInsertOrUpdateDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictClassifiedListDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictItemInsertOrUpdateDTO;
-import com.jtzx.crm.module.sys.model.request.AdminSysDataDictItemListDTO;
-import com.jtzx.crm.module.sys.model.response.SysDataDictClassifiedBO;
-import com.jtzx.crm.module.sys.model.response.SysDataDictItemBO;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.text.CharSequenceUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import jakarta.annotation.Nonnull;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-
-
-/**
- * 数据字典
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class SysDataDictService {
-
-    private final SysDataDictClassifiedMapper sysDataDictClassifiedMapper;
-    private final SysDataDictItemMapper sysDataDictItemMapper;
-
-
-    /**
-     * 后台管理-分页列表数据字典分类
-     */
-    public PageResult<SysDataDictClassifiedBO> adminListClassified(PageParam pageParam, AdminSysDataDictClassifiedListDTO dto) {
-        Page<SysDataDictClassifiedEntity> entityPage = sysDataDictClassifiedMapper.selectPage(
-                new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
-                new QueryWrapper<SysDataDictClassifiedEntity>()
-                        .lambda()
-                        // 分类编码
-                        .eq(CharSequenceUtil.isNotBlank(dto.getCode()), SysDataDictClassifiedEntity::getCode, CharSequenceUtil.cleanBlank(dto.getCode()))
-                        // 排序
-                        .orderByDesc(SysDataDictClassifiedEntity::getCreatedAt)
-        );
-
-        return this.classifiedEntityPage2BOPage(entityPage);
-    }
-
-    /**
-     * 后台管理-新增数据字典分类
-     *
-     * @return 主键ID
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public Long adminInsertClassified(AdminSysDataDictClassifiedInsertOrUpdateDTO dto) {
-        log.info("[后台管理-新增数据字典分类] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        dto.setId(null);
-        SysDataDictClassifiedEntity entity = new SysDataDictClassifiedEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDataDictClassifiedMapper.insert(entity);
-
-        return entity.getId();
-    }
-
-    /**
-     * 后台管理-编辑数据字典分类
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdateClassified(AdminSysDataDictClassifiedInsertOrUpdateDTO dto) {
-        log.info("[后台管理-编辑数据字典分类] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        SysDataDictClassifiedEntity entity = new SysDataDictClassifiedEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDataDictClassifiedMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-删除数据字典分类
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminDeleteClassified(Collection<Long> ids) {
-        log.info("[后台管理-删除数据字典分类] >> 入参={}", ids);
-        sysDataDictClassifiedMapper.deleteByIds(ids);
-    }
-
-    /**
-     * 后台管理-分页列表数据字典分类下的字典项
-     */
-    public PageResult<SysDataDictItemBO> adminListItem(PageParam pageParam, AdminSysDataDictItemListDTO dto) {
-        Page<SysDataDictItemEntity> entityPage = sysDataDictItemMapper.selectPage(
-                new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
-                new QueryWrapper<SysDataDictItemEntity>()
-                        .lambda()
-                        // 分类ID
-                        .eq(SysDataDictItemEntity::getClassifiedId, dto.getClassifiedId())
-                        // 排序
-                        .orderByAsc(SysDataDictItemEntity::getSort)
-        );
-
-        return this.itemEntityPage2BOPage(entityPage);
-    }
-
-    /**
-     * 后台管理-新增数据字典项
-     *
-     * @return 主键ID
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public Long adminInsertItem(AdminSysDataDictItemInsertOrUpdateDTO dto) {
-        log.info("[后台管理-新增数据字典项] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        dto.setId(null);
-        SysDataDictItemEntity entity = new SysDataDictItemEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDataDictItemMapper.insert(entity);
-
-        return entity.getId();
-    }
-
-    /**
-     * 后台管理-编辑数据字典项
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdateItem(AdminSysDataDictItemInsertOrUpdateDTO dto) {
-        log.info("[后台管理-编辑数据字典项] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        SysDataDictItemEntity entity = new SysDataDictItemEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDataDictItemMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-删除数据字典项
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminDeleteItem(Collection<Long> ids, Long classifiedId) {
-        log.info("[后台管理-删除数据字典项] >> 分类ID={}  入参={}", classifiedId, ids);
-        sysDataDictItemMapper.delete(
-                new QueryWrapper<SysDataDictItemEntity>()
-                        .lambda()
-                        .eq(SysDataDictItemEntity::getClassifiedId, classifiedId)
-                        .in(SysDataDictItemEntity::getId, ids)
-        );
-    }
-
-    /**
-     * 列举指定分类编码下的所有启用的字典项
-     *
-     * @return 存在则返回字典项列表;不存在或没有符合的字典项,均返回空列表
-     */
-    public List<SysDataDictItemBO> listEnabledItemsByClassifiedCode(@Nonnull String classifiedCode) {
-        SysDataDictClassifiedEntity classified =
-                sysDataDictClassifiedMapper.selectByCode(classifiedCode, EnabledStatusEnum.ENABLED);
-        if (Objects.isNull(classified)) {
-            return Collections.emptyList();
-        }
-        return itemEntityList2BOs(
-                sysDataDictItemMapper.selectList(
-                        new QueryWrapper<SysDataDictItemEntity>()
-                                .lambda()
-                                // 分类ID
-                                .eq(SysDataDictItemEntity::getClassifiedId, classified.getId())
-                                // 状态
-                                .eq(SysDataDictItemEntity::getStatus, EnabledStatusEnum.ENABLED)
-                                // 排序
-                                .orderByAsc(SysDataDictItemEntity::getSort)
-                )
-        );
-    }
-
-    /*
-    ----------------------------------------------------------------
-                        私有方法 private methods
-    ----------------------------------------------------------------
-     */
-
-    /**
-     * 实体转 BO
-     *
-     * @param entity 实体
-     * @return BO
-     */
-    private SysDataDictClassifiedBO entity2BO(SysDataDictClassifiedEntity entity) {
-        if (entity == null) {
-            return null;
-        }
-
-        SysDataDictClassifiedBO bo = new SysDataDictClassifiedBO();
-        BeanUtil.copyProperties(entity, bo);
-
-        // 可以在此处为BO填充字段
-
-        return bo;
-    }
-
-    /**
-     * 实体转 BO
-     *
-     * @param entity 实体
-     * @return BO
-     */
-    private SysDataDictItemBO entity2BO(SysDataDictItemEntity entity) {
-        if (entity == null) {
-            return null;
-        }
-
-        SysDataDictItemBO bo = new SysDataDictItemBO();
-        BeanUtil.copyProperties(entity, bo);
-
-        // 可以在此处为BO填充字段
-
-        return bo;
-    }
-
-    /**
-     * 实体 List 转 BO List
-     *
-     * @param entityList 实体 List
-     * @return BO List
-     */
-    private List<SysDataDictClassifiedBO> classifiedEntityList2BOs(List<SysDataDictClassifiedEntity> entityList) {
-        if (CollUtil.isEmpty(entityList)) {
-            return Collections.emptyList();
-        }
-
-        // 深拷贝
-        List<SysDataDictClassifiedBO> ret = new ArrayList<>(entityList.size());
-        entityList.forEach(
-                entity -> ret.add(this.entity2BO(entity))
-        );
-
-        return ret;
-    }
-
-    /**
-     * 实体 List 转 BO List
-     *
-     * @param entityList 实体 List
-     * @return BO List
-     */
-    private List<SysDataDictItemBO> itemEntityList2BOs(List<SysDataDictItemEntity> entityList) {
-        if (CollUtil.isEmpty(entityList)) {
-            return Collections.emptyList();
-        }
-
-        // 深拷贝
-        List<SysDataDictItemBO> ret = new ArrayList<>(entityList.size());
-        entityList.forEach(
-                entity -> ret.add(this.entity2BO(entity))
-        );
-
-        return ret;
-    }
-
-    /**
-     * 实体分页转 BO 分页
-     *
-     * @param entityPage 实体分页
-     * @return BO 分页
-     */
-    private PageResult<SysDataDictClassifiedBO> classifiedEntityPage2BOPage(Page<SysDataDictClassifiedEntity> entityPage) {
-        return new PageResult<SysDataDictClassifiedBO>()
-                .setCurrent(entityPage.getCurrent())
-                .setSize(entityPage.getSize())
-                .setTotal(entityPage.getTotal())
-                .setRecords(this.classifiedEntityList2BOs(entityPage.getRecords()));
-    }
-
-    /**
-     * 实体分页转 BO 分页
-     *
-     * @param entityPage 实体分页
-     * @return BO 分页
-     */
-    private PageResult<SysDataDictItemBO> itemEntityPage2BOPage(Page<SysDataDictItemEntity> entityPage) {
-        return new PageResult<SysDataDictItemBO>()
-                .setCurrent(entityPage.getCurrent())
-                .setSize(entityPage.getSize())
-                .setTotal(entityPage.getTotal())
-                .setRecords(this.itemEntityList2BOs(entityPage.getRecords()));
-    }
-
-    /**
-     * 检查是否已存在相同数据
-     *
-     * @param dto DTO
-     */
-    private void checkExistence(AdminSysDataDictClassifiedInsertOrUpdateDTO dto) {
-        SysDataDictClassifiedEntity existingEntity = sysDataDictClassifiedMapper.selectOne(
-                new QueryWrapper<SysDataDictClassifiedEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysDataDictClassifiedEntity::getId)
-                        // 分类编码相同
-                        .eq(SysDataDictClassifiedEntity::getCode, dto.getCode())
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
-            throw new BusinessException(400, "已存在相同数据字典分类,请重新输入");
-        }
-    }
-
-    /**
-     * 检查是否已存在相同数据
-     *
-     * @param dto DTO
-     */
-    private void checkExistence(AdminSysDataDictItemInsertOrUpdateDTO dto) {
-        SysDataDictItemEntity existingEntity = sysDataDictItemMapper.selectOne(
-                new QueryWrapper<SysDataDictItemEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysDataDictItemEntity::getId)
-                        // 分类ID相同
-                        .eq(SysDataDictItemEntity::getClassifiedId, dto.getClassifiedId())
-                        // 分类编码相同
-                        .eq(SysDataDictItemEntity::getCode, dto.getCode())
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
-            throw new BusinessException(400, "已存在相同数据字典项,请重新输入");
-        }
-    }
-
-}

+ 0 - 270
src/main/java/com/jtzx/crm/module/sys/service/SysDeptService.java

@@ -1,270 +0,0 @@
-package com.jtzx.crm.module.sys.service;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.context.UserContextHolder;
-import cc.uncarbon.framework.core.exception.BusinessException;
-import com.jtzx.crm.module.sys.constant.SysConstant;
-import com.jtzx.crm.module.sys.entity.SysDeptEntity;
-import com.jtzx.crm.module.sys.enums.SysErrorEnum;
-import com.jtzx.crm.module.sys.mapper.SysDeptMapper;
-import com.jtzx.crm.module.sys.model.interior.UserDeptContainer;
-import com.jtzx.crm.module.sys.model.interior.UserRoleContainer;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysDeptDTO;
-import com.jtzx.crm.module.sys.model.response.SysDeptBO;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-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;
-
-
-/**
- * 部门
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class SysDeptService {
-
-    private final SysDeptMapper sysDeptMapper;
-    private final SysUserDeptRelationService sysUserDeptRelationService;
-    private final SysRoleService sysRoleService;
-
-
-    /**
-     * 后台管理-列表
-     */
-    public List<SysDeptBO> adminList() {
-        return entityList2BOs(sysDeptMapper.sortedList());
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id 主键ID
-     * @return null or BO
-     */
-    public SysDeptBO getOneById(Long id) {
-        return this.getOneById(id, false);
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id               主键ID
-     * @param throwIfInvalidId 是否在 ID 无效时抛出异常
-     * @return null or BO
-     */
-    public SysDeptBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysDeptEntity entity = sysDeptMapper.selectById(id);
-        if (throwIfInvalidId) {
-            SysErrorEnum.INVALID_ID.assertNotNull(entity);
-        }
-
-        return this.entity2BO(entity);
-    }
-
-    /**
-     * 后台管理-新增
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public Long adminInsert(AdminInsertOrUpdateSysDeptDTO dto) {
-        log.info("[后台管理-新增部门] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        if (ObjectUtil.isNull(dto.getParentId())) {
-            dto.setParentId(SysConstant.ROOT_PARENT_ID);
-        }
-
-        dto.setId(null);
-        SysDeptEntity entity = new SysDeptEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDeptMapper.insert(entity);
-
-        return entity.getId();
-    }
-
-    /**
-     * 后台管理-编辑
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdate(AdminInsertOrUpdateSysDeptDTO dto) {
-        log.info("[后台管理-编辑部门] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        if (ObjectUtil.isNull(dto.getParentId())) {
-            dto.setParentId(SysConstant.ROOT_PARENT_ID);
-        }
-
-        SysDeptEntity entity = new SysDeptEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysDeptMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-删除
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminDelete(Collection<Long> ids) {
-        log.info("[后台管理-删除部门] >> 入参={}", ids);
-        sysDeptMapper.deleteByIds(ids);
-    }
-
-    /**
-     * 后台管理-下拉框数据
-     * @param inferiorsOnly 只能看到本部门及以下
-     */
-    public List<SysDeptBO> adminSelectOptions(boolean inferiorsOnly) {
-        if (inferiorsOnly) {
-            UserRoleContainer currentUser = sysRoleService.getCurrentUserRoleContainer();
-//            if (currentUser.isNotAnyAdmin()) {
-//                // 非管理员才会限制,只能看到本部门及以下
-//                UserDeptContainer deptContainer = getCurrentUserDeptContainer(true);
-//                return entityList2BOs(deptContainer.getVisibleDepts());
-//            }
-        }
-        // 能看所有
-        return adminList();
-    }
-
-    /**
-     * 取当前用户关联部门信息
-     * 仅内部使用
-     * @param queryVisibleDept 是否要进一步查询可见部门
-     */
-    protected UserDeptContainer getCurrentUserDeptContainer(boolean queryVisibleDept) {
-        return getSpecifiedUserDeptContainer(UserContextHolder.getUserId(), queryVisibleDept);
-    }
-
-    /**
-     * 取指定用户关联部门信息
-     * 仅内部使用
-     * @param queryVisibleDept 是否要进一步查询可见部门
-     */
-    protected UserDeptContainer getSpecifiedUserDeptContainer(Long specifiedUserId, boolean queryVisibleDept) {
-        List<Long> userDeptIds = sysUserDeptRelationService.getUserDeptIds(specifiedUserId);
-        List<SysDeptEntity> userDepts = null;
-        if (CollUtil.isNotEmpty(userDeptIds)) {
-            userDepts = sysDeptMapper.selectBatchIds(userDeptIds);
-        }
-        if (CollUtil.isEmpty(userDepts)) {
-            userDepts = Collections.emptyList();
-        }
-        UserDeptContainer container = new UserDeptContainer(userDeptIds, userDepts);
-
-        if (queryVisibleDept && container.hasRelatedDepts()) {
-            List<SysDeptEntity> allDepts = sysDeptMapper.sortedList();
-            List<SysDeptEntity> inferiors = determineAllInferiors(allDepts, container.primaryRelatedDept());
-            container.updateVisibleDepts(inferiors);
-        }
-        return container;
-    }
-
-    /*
-    ----------------------------------------------------------------
-                        私有方法 private methods
-    ----------------------------------------------------------------
-     */
-
-    /**
-     * 实体转 BO
-     *
-     * @param entity 实体
-     * @return BO
-     */
-    private SysDeptBO entity2BO(SysDeptEntity entity) {
-        if (entity == null) {
-            return null;
-        }
-
-        SysDeptBO bo = new SysDeptBO();
-        BeanUtil.copyProperties(entity, bo);
-
-        // 可以在此处为BO填充字段
-        if (SysConstant.ROOT_PARENT_ID.equals(bo.getParentId())) {
-            // 返回前端时,不显示 parentId = 0
-            bo.setParentId(null);
-        }
-
-        return bo;
-    }
-
-    /**
-     * 实体 List 转 BO List
-     *
-     * @param entityList 实体 List
-     * @return BO List
-     */
-    private List<SysDeptBO> entityList2BOs(List<SysDeptEntity> entityList) {
-        if (CollUtil.isEmpty(entityList)) {
-            return Collections.emptyList();
-        }
-
-        // 深拷贝
-        List<SysDeptBO> ret = new ArrayList<>(entityList.size());
-        entityList.forEach(
-                entity -> ret.add(this.entity2BO(entity))
-        );
-
-        return ret;
-    }
-
-    /**
-     * 检查是否已存在相同数据
-     *
-     * @param dto DTO
-     */
-    private void checkExistence(AdminInsertOrUpdateSysDeptDTO dto) {
-        SysDeptEntity existingEntity = sysDeptMapper.selectOne(
-                new QueryWrapper<SysDeptEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysDeptEntity::getId)
-                        // 名称相同
-                        .eq(SysDeptEntity::getTitle, dto.getTitle())
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
-            throw new BusinessException(400, "已存在相同部门,请重新输入");
-        }
-    }
-
-    /**
-     * 找出本部门及所有下级部门
-     *
-     * @param start 本部门
-     * @return 本部门 + 所有下级部门
-     */
-    private List<SysDeptEntity> determineAllInferiors(List<SysDeptEntity> entityList, SysDeptEntity start) {
-        // 结果集合
-        List<SysDeptEntity> ret = new ArrayList<>(entityList.size());
-        Deque<SysDeptEntity> deque = new ArrayDeque<>();
-
-        // 转map提高效率
-        Map<Long, List<SysDeptEntity>> groupByParentId = entityList.stream().collect(Collectors.groupingBy(SysDeptEntity::getParentId));
-
-        // 起点
-        ret.add(start);
-        deque.add(start);
-
-        // 循环填充下级部门实例
-        while (CollUtil.isNotEmpty(deque)) {
-            SysDeptEntity parent = deque.pop();
-            List<SysDeptEntity> children = groupByParentId.get(parent.getId());
-            if (CollUtil.isNotEmpty(children)) {
-                ret.addAll(children);
-                deque.addAll(children);
-            }
-        }
-        return ret;
-    }
-}

+ 0 - 245
src/main/java/com/jtzx/crm/module/sys/service/SysParamService.java

@@ -1,245 +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.SysParamEntity;
-import com.jtzx.crm.module.sys.enums.SysErrorEnum;
-import com.jtzx.crm.module.sys.mapper.SysParamMapper;
-import com.jtzx.crm.module.sys.model.request.AdminInsertOrUpdateSysParamDTO;
-import com.jtzx.crm.module.sys.model.request.AdminListSysParamDTO;
-import com.jtzx.crm.module.sys.model.response.SysParamBO;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.text.CharSequenceUtil;
-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
-@Slf4j
-@Service
-public class SysParamService {
-
-    private final SysParamMapper sysParamMapper;
-
-
-    /**
-     * 后台管理-分页列表
-     */
-    public PageResult<SysParamBO> adminList(PageParam pageParam, AdminListSysParamDTO dto) {
-        Page<SysParamEntity> entityPage = sysParamMapper.selectPage(
-                new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
-                new QueryWrapper<SysParamEntity>()
-                        .lambda()
-                        // 键名
-                        .like(CharSequenceUtil.isNotBlank(dto.getName()), SysParamEntity::getName, CharSequenceUtil.cleanBlank(dto.getName()))
-                        // 描述
-                        .like(CharSequenceUtil.isNotBlank(dto.getDescription()), SysParamEntity::getDescription, CharSequenceUtil.cleanBlank(dto.getDescription()))
-                        // 排序
-                        .orderByDesc(SysParamEntity::getCreatedAt)
-        );
-
-        return this.entityPage2BOPage(entityPage);
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id 主键ID
-     * @return null or BO
-     */
-    public SysParamBO getOneById(Long id) {
-        return this.getOneById(id, false);
-    }
-
-    /**
-     * 根据 ID 取详情
-     *
-     * @param id 主键ID
-     * @param throwIfInvalidId 是否在 ID 无效时抛出异常
-     * @return null or BO
-     */
-    public SysParamBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysParamEntity entity = sysParamMapper.selectById(id);
-        if (throwIfInvalidId) {
-            SysErrorEnum.INVALID_ID.assertNotNull(entity);
-        }
-
-        return this.entity2BO(entity);
-    }
-
-    /**
-     * 后台管理-新增
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public Long adminInsert(AdminInsertOrUpdateSysParamDTO dto) {
-        log.info("[后台管理-新增系统参数] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        dto.setId(null);
-        SysParamEntity entity = new SysParamEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysParamMapper.insert(entity);
-
-        return entity.getId();
-    }
-
-    /**
-     * 后台管理-编辑
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminUpdate(AdminInsertOrUpdateSysParamDTO dto) {
-        log.info("[后台管理-编辑系统参数] >> 入参={}", dto);
-        this.checkExistence(dto);
-
-        SysParamEntity entity = new SysParamEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysParamMapper.updateById(entity);
-    }
-
-    /**
-     * 后台管理-删除
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void adminDelete(Collection<Long> ids) {
-        log.info("[后台管理-删除系统参数] >> 入参={}", ids);
-        sysParamMapper.deleteByIds(ids);
-    }
-
-    /**
-     * 根据键名取值
-     *
-     * @param name 键名
-     * @return 成功返回键值,失败返回 null
-     */
-    public String getParamValueByName(String name) {
-        SysParamEntity sysParamEntity = sysParamMapper.selectOne(
-                new QueryWrapper<SysParamEntity>()
-                        .lambda()
-                        .select(SysParamEntity::getValue)
-                        .eq(SysParamEntity::getName, name)
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-        if (sysParamEntity == null) {
-            return null;
-        }
-
-        return sysParamEntity.getValue();
-    }
-
-    /**
-     * 根据键名取值
-     *
-     * @param name         键名
-     * @param defaultValue 默认值
-     * @return 成功返回键值,失败返回 defaultValue
-     */
-    public String getParamValueByName(String name, String defaultValue) {
-        String value = this.getParamValueByName(name);
-        if (value == null) {
-            return defaultValue;
-        }
-
-        return value;
-    }
-
-
-    /*
-    ----------------------------------------------------------------
-                        私有方法 private methods
-    ----------------------------------------------------------------
-     */
-
-    /**
-     * 实体转 BO
-     *
-     * @param entity 实体
-     * @return BO
-     */
-    private SysParamBO entity2BO(SysParamEntity entity) {
-        if (entity == null) {
-            return null;
-        }
-
-        SysParamBO bo = new SysParamBO();
-        BeanUtil.copyProperties(entity, bo);
-
-        // 可以在此处为BO填充字段
-
-        return bo;
-    }
-
-    /**
-     * 实体 List 转 BO List
-     *
-     * @param entityList 实体 List
-     * @return BO List
-     */
-    private List<SysParamBO> entityList2BOs(List<SysParamEntity> entityList) {
-        if (CollUtil.isEmpty(entityList)) {
-            return Collections.emptyList();
-        }
-
-        // 深拷贝
-        List<SysParamBO> ret = new ArrayList<>(entityList.size());
-        entityList.forEach(
-                entity -> ret.add(this.entity2BO(entity))
-        );
-
-        return ret;
-    }
-
-    /**
-     * 实体分页转 BO 分页
-     *
-     * @param entityPage 实体分页
-     * @return BO 分页
-     */
-    private PageResult<SysParamBO> entityPage2BOPage(Page<SysParamEntity> entityPage) {
-        return new PageResult<SysParamBO>()
-                .setCurrent(entityPage.getCurrent())
-                .setSize(entityPage.getSize())
-                .setTotal(entityPage.getTotal())
-                .setRecords(this.entityList2BOs(entityPage.getRecords()));
-    }
-
-    /**
-     * 检查是否已存在相同数据
-     *
-     * @param dto DTO
-     */
-    private void checkExistence(AdminInsertOrUpdateSysParamDTO dto) {
-        SysParamEntity existingEntity = sysParamMapper.selectOne(
-                new QueryWrapper<SysParamEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysParamEntity::getId)
-                        // 描述相同
-                        .eq(SysParamEntity::getDescription, dto.getDescription())
-                        .or()
-                        // 或键名相同
-                        .eq(SysParamEntity::getName, dto.getName())
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
-            throw new BusinessException(400, "已存在相同系统参数,请重新输入");
-        }
-    }
-}

+ 7 - 67
src/main/java/com/jtzx/crm/module/sys/service/SysRoleService.java

@@ -41,7 +41,6 @@ import java.util.stream.Collectors;
 public class SysRoleService {
 
     private final SysRoleMapper sysRoleMapper;
-    //    private final SysUserRoleRelationService sysUserRoleRelationService;
     private final SysUserRoleRelationMapper sysUserRoleRelationMapper;
     private final SysRoleMenuRelationService sysRoleMenuRelationService;
     private final SysMenuService sysMenuService;
@@ -51,7 +50,6 @@ public class SysRoleService {
      * 后台管理-分页列表
      */
     public PageResult<SysRoleBO> adminList(PageParam pageParam, AdminListSysRoleDTO dto) {
-        Set<Long> invisibleRoleIds = determineInvisibleRoleIds();
         Page<SysRoleEntity> entityPage = sysRoleMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysRoleEntity>()
@@ -60,13 +58,11 @@ public class SysRoleService {
                         .like(CharSequenceUtil.isNotBlank(dto.getTitle()), SysRoleEntity::getTitle, CharSequenceUtil.cleanBlank(dto.getTitle()))
                         // 值
                         .like(CharSequenceUtil.isNotBlank(dto.getValue()), SysRoleEntity::getValue, CharSequenceUtil.cleanBlank(dto.getValue()))
-                        // 不显示特定角色
-                        .notIn(CollUtil.isNotEmpty(invisibleRoleIds), SysRoleEntity::getId, invisibleRoleIds)
                         // 排序
                         .orderByDesc(SysRoleEntity::getCreatedAt)
         );
 
-        return this.entityPage2BOPage(entityPage, true);
+        return this.entityPage2BOPage(entityPage);
     }
 
     /**
@@ -97,11 +93,9 @@ public class SysRoleService {
 
     /**
      * 后台管理-新增
-     *
-     * @return 主键ID
      */
     @Transactional(rollbackFor = Exception.class)
-    public Long adminInsert(AdminInsertOrUpdateSysRoleDTO dto) {
+    public void adminInsert(AdminInsertOrUpdateSysRoleDTO dto) {
         log.info("[后台管理-新增后台角色] >> 入参={}", dto);
         preInsertOrUpdateCheck(dto);
         this.checkExistence(dto);
@@ -112,7 +106,6 @@ public class SysRoleService {
 
         sysRoleMapper.insert(entity);
 
-        return entity.getId();
     }
 
     /**
@@ -160,14 +153,11 @@ public class SysRoleService {
      * 后台管理-下拉框数据
      */
     public List<SysRoleBO> adminSelectOptions() {
-        Set<Long> invisibleRoleIds = determineInvisibleRoleIds();
         List<SysRoleEntity> entityList = sysRoleMapper.selectList(
                 new QueryWrapper<SysRoleEntity>()
                         .lambda()
                         // 只取特定字段
                         .select(SysRoleEntity::getId, SysRoleEntity::getTitle)
-                        // 不显示特定角色
-                        .notIn(CollUtil.isNotEmpty(invisibleRoleIds), SysRoleEntity::getId, invisibleRoleIds)
                         // 排序
                         .orderByAsc(SysRoleEntity::getId)
         );
@@ -248,7 +238,7 @@ public class SysRoleService {
         ).stream().map(SysUserRoleRelationEntity::getRoleId).collect(Collectors.toSet());
         List<SysRoleEntity> userRoles = null;
         if (CollUtil.isNotEmpty(userRoleIds)) {
-            userRoles = sysRoleMapper.selectBatchIds(userRoleIds);
+            userRoles = sysRoleMapper.selectByIds(userRoleIds);
         }
         if (CollUtil.isEmpty(userRoles)) {
             userRoles = Collections.emptyList();
@@ -256,32 +246,6 @@ public class SysRoleService {
         return new UserRoleContainer(userRoleIds, userRoles);
     }
 
-    /**
-     * 确定不可见角色IDs
-     * 仅内部使用
-     * 租户管理员:列表中不显示超级管理员角色
-     * 普通角色:列表中不显示超级管理员、租户管理员角色
-     * @return mutable Set,支持外部改变元素
-     */
-    protected Set<Long> determineInvisibleRoleIds() {
-        UserRoleContainer currentUser = getCurrentUserRoleContainer();
-        // 超级管理员:不限制
-        if (currentUser.isAdmin()) {
-            return new HashSet<>();
-        }
-
-        // 普通角色:列表中不显示超级管理员、租户管理员角色
-        Set<Long> ret = sysRoleMapper.selectList(
-                new QueryWrapper<SysRoleEntity>()
-                        .lambda()
-                        // 仅取主键ID
-                        .select(SysRoleEntity::getId)
-                        // 值相符
-                        .eq(SysRoleEntity::getValue, SysConstant.TENANT_ADMIN_ROLE_VALUE)
-        ).stream().map(SysRoleEntity::getId).collect(Collectors.toSet());
-        ret.add(SysConstant.SUPER_ADMIN_ROLE_ID);
-        return ret;
-    }
 
     /*
     ----------------------------------------------------------------
@@ -332,16 +296,15 @@ public class SysRoleService {
      * 实体分页转 BO 分页
      *
      * @param entityPage 实体分页
-     * @param fillMenuIds 是否根据实体ID,查询关联菜单IDs并填充到BO
      * @return BO 分页
      */
-    private PageResult<SysRoleBO> entityPage2BOPage(Page<SysRoleEntity> entityPage, boolean fillMenuIds) {
+    private PageResult<SysRoleBO> entityPage2BOPage(Page<SysRoleEntity> entityPage) {
         return new PageResult<SysRoleBO>()
                 .setCurrent(entityPage.getCurrent())
                 .setSize(entityPage.getSize())
                 .setTotal(entityPage.getTotal())
                 // 需填充菜单IDs
-                .setRecords(this.entityList2BOs(entityPage.getRecords(), fillMenuIds));
+                .setRecords(this.entityList2BOs(entityPage.getRecords(), true));
     }
 
     /**
@@ -363,19 +326,6 @@ public class SysRoleService {
         if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) {
             throw new BusinessException(400, "已存在相同后台角色,请重新输入");
         }
-
-        if (dto.creatingNewTenantAdmin()) {
-            long qty = sysRoleMapper.selectCount(
-                    new QueryWrapper<SysRoleEntity>()
-                            .lambda()
-                            // 租户ID相同
-                            .eq(SysRoleEntity::getTenantId, dto.getTenantId())
-                            // 角色编码相同
-                            .eq(SysRoleEntity::getValue, dto.getValue())
-                            .last(HelioConstant.CRUD.SQL_LIMIT_1)
-            );
-            SysErrorEnum.NEED_DELETE_EXISTING_TENANT_ADMIN_ROLE.assertTrue(qty <= 0L, dto.getTenantId());
-        }
     }
 
     /**
@@ -386,10 +336,6 @@ public class SysRoleService {
             // 角色编码不能为SuperAdmin
             throw new BusinessException(SysErrorEnum.ROLE_VALUE_CANNOT_BE, SysConstant.SUPER_ADMIN_ROLE_VALUE);
         }
-        if (SysConstant.TENANT_ADMIN_ROLE_VALUE.equalsIgnoreCase(dto.getValue()) && !dto.creatingNewTenantAdmin()) {
-            // 除非是新增租户时,同时新增租户管理员角色,否则角色编码不能为Admin
-            throw new BusinessException(SysErrorEnum.ROLE_VALUE_CANNOT_BE, SysConstant.TENANT_ADMIN_ROLE_VALUE);
-        }
 
         boolean isUpdating = Objects.nonNull(dto.getId());
         if (isUpdating) {
@@ -410,10 +356,10 @@ public class SysRoleService {
             throw new BusinessException(SysErrorEnum.CANNOT_DELETE_SUPER_ADMIN_ROLE);
         }
 
-        List<SysRoleEntity> existingEntityList = sysRoleMapper.selectBatchIds(ids);
+        List<SysRoleEntity> existingEntityList = sysRoleMapper.selectByIds(ids);
         for (SysRoleEntity item : existingEntityList) {
             if (item.isAdmin()) {
-                throw new BusinessException(SysErrorEnum.CANNOT_DELETE_TENANT_ADMIN_ROLE);
+                throw new BusinessException(SysErrorEnum.CANNOT_OPERATE_THIS_USER);
             }
         }
 
@@ -438,12 +384,6 @@ public class SysRoleService {
             throw new BusinessException(SysErrorEnum.CANNOT_BIND_MENUS_FOR_SELF);
         }
 
-        // 有且只有当前用户为超级管理员,才可以为租户管理员绑定菜单
-        SysRoleEntity targetRole = sysRoleMapper.selectById(dto.getRoleId());
-        if (!targetRole.isAdmin()) {
-            throw new BusinessException(SysErrorEnum.CANNOT_BIND_MENUS_FOR_TENANT_ADMIN_ROLE);
-        }
-
         if (CollUtil.isNotEmpty(dto.getMenuIds()) && !currentUser.isAdmin()) {
             // 超级管理员之外的角色,都需要校验自身菜单范围是否满足输入值
             Set<Long> visibleMenuIds = sysRoleMenuRelationService.listMenuIdsByRoleIds(currentUser.getRelatedRoleIds());

+ 0 - 91
src/main/java/com/jtzx/crm/module/sys/service/SysUserDeptRelationService.java

@@ -1,91 +0,0 @@
-package com.jtzx.crm.module.sys.service;
-
-import cc.uncarbon.framework.core.constant.HelioConstant;
-import com.jtzx.crm.module.sys.entity.SysUserDeptRelationEntity;
-import com.jtzx.crm.module.sys.mapper.SysUserDeptRelationMapper;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-
-/**
- * 后台用户-部门关联
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class SysUserDeptRelationService {
-
-    private final SysUserDeptRelationMapper sysUserDeptRelationMapper;
-
-
-    /**
-     * 列举用户ID关联的部门IDs
-     *
-     * @return 关联的部门IDs;目前最多只有1个元素
-     */
-    public List<Long> getUserDeptIds(Long userId) {
-        SysUserDeptRelationEntity entity = sysUserDeptRelationMapper.selectOne(
-                new QueryWrapper<SysUserDeptRelationEntity>()
-                        .lambda()
-                        .eq(SysUserDeptRelationEntity::getUserId, userId)
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (entity == null) {
-            return Collections.emptyList();
-        }
-        return Collections.singletonList(entity.getDeptId());
-    }
-
-    /**
-     * 先清理用户ID所有关联关系, 再绑定用户ID与部门ID
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void cleanAndBind(Long userId, Long deptId) {
-        sysUserDeptRelationMapper.delete(
-                new QueryWrapper<SysUserDeptRelationEntity>()
-                        .lambda()
-                        .eq(SysUserDeptRelationEntity::getUserId, userId)
-        );
-
-        if (ObjectUtil.isNotNull(deptId)) {
-            // 需要绑定部门
-            sysUserDeptRelationMapper.insert(
-                    SysUserDeptRelationEntity.builder()
-                            .userId(userId)
-                            .deptId(deptId)
-                            .build()
-            );
-        }
-
-    }
-
-    /**
-     * 列举部门IDs关联的用户IDs
-     */
-    public Set<Long> listUserIdsByDeptIds(Collection<Long> deptIds) {
-        if (CollUtil.isEmpty(deptIds)) {
-            return Collections.emptySet();
-        }
-
-        return sysUserDeptRelationMapper.selectList(
-                new QueryWrapper<SysUserDeptRelationEntity>()
-                        .lambda()
-                        // 只要用户ID
-                        .select(SysUserDeptRelationEntity::getUserId)
-                        .in(SysUserDeptRelationEntity::getDeptId, deptIds)
-        ).stream().map(SysUserDeptRelationEntity::getUserId).collect(Collectors.toSet());
-    }
-
-}

+ 1 - 89
src/main/java/com/jtzx/crm/module/sys/service/SysUserService.java

@@ -21,7 +21,6 @@ import com.jtzx.crm.module.sys.entity.SysUserEntity;
 import com.jtzx.crm.module.sys.enums.SysErrorEnum;
 import com.jtzx.crm.module.sys.enums.SysUserStatusEnum;
 import com.jtzx.crm.module.sys.mapper.SysUserMapper;
-import com.jtzx.crm.module.sys.model.interior.UserDeptContainer;
 import com.jtzx.crm.module.sys.model.interior.UserRoleContainer;
 import com.jtzx.crm.module.sys.model.request.*;
 import com.jtzx.crm.module.sys.model.response.SysUserBO;
@@ -34,7 +33,6 @@ import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigInteger;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -49,9 +47,7 @@ public class SysUserService {
 
     private final SysUserMapper sysUserMapper;
     private final SysRoleService sysRoleService;
-    private final SysDeptService sysDeptService;
     private final SysMenuService sysMenuService;
-    private final SysUserDeptRelationService sysUserDeptRelationService;
     private final SysUserRoleRelationService sysUserRoleRelationService;
     private final SysRoleMenuRelationService sysRoleMenuRelationService;
     private final HelioProperties helioProperties;
@@ -62,22 +58,7 @@ public class SysUserService {
     public PageResult<SysUserBO> adminList(PageParam pageParam, AdminListSysUserDTO dto) {
         // 预处理:根据【手动选择的部门】筛选用户
         Set<Long> deptUserIds = Collections.emptySet();
-        if (dto.needFilterBySelectedDeptId()) {
-            deptUserIds = sysUserDeptRelationService.listUserIdsByDeptIds(Collections.singleton(dto.getSelectedDeptId()));
-            if (CollUtil.isEmpty(deptUserIds)) {
-                // 【手动选择的部门】没有任何用户ID,直接返回空列表
-                return new PageResult<>(pageParam);
-            }
-        }
-
-        // 预处理:根据【只能看到本部门及下级部门原则】筛选用户
-        Set<Long> visibleUserIds = determineVisibleDeptUserIds();
-        if (Objects.equals(CollUtil.getFirst(visibleUserIds), BigInteger.ZERO.longValue())) {
-            // 其实啥也看不到……
-            return new PageResult<>(pageParam);
-        }
 
-        Set<Long> invisibleUserIds = determineInvisibleUserIds();
         Page<SysUserEntity> entityPage = sysUserMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysUserEntity>()
@@ -86,10 +67,6 @@ public class SysUserService {
                         .like(CharSequenceUtil.isNotBlank(dto.getPhoneNo()), SysUserEntity::getPhoneNo, CharSequenceUtil.cleanBlank(dto.getPhoneNo()))
                         // 根据【手动选择的部门ID】筛选用户
                         .in(CollUtil.isNotEmpty(deptUserIds), SysUserEntity::getId, deptUserIds)
-                        // 根据【只能看到本部门及下级部门原则】筛选用户
-                        .in(CollUtil.isNotEmpty(visibleUserIds), SysUserEntity::getId, visibleUserIds)
-                        // 不显示特定用户
-                        .notIn(CollUtil.isNotEmpty(invisibleUserIds), SysUserEntity::getId, invisibleUserIds)
                         // 排序
                         .orderByDesc(SysUserEntity::getCreatedAt)
         );
@@ -115,7 +92,6 @@ public class SysUserService {
      * @return null or BO
      */
     public SysUserBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        dataScopeCheck(Collections.singleton(id));
 
         SysUserEntity entity = sysUserMapper.selectById(id);
         if (throwIfInvalidId) {
@@ -131,18 +107,9 @@ public class SysUserService {
      * @return 主键ID
      */
     @Transactional(rollbackFor = Exception.class)
-    public Long adminInsert(AdminInsertOrUpdateSysUserDTO dto) {
+    public void adminInsert(AdminInsertOrUpdateSysUserDTO dto) {
         log.info("[后台管理-新增后台用户] >> 入参={}", dto);
         this.checkExistence(dto);
-
-        if (Objects.nonNull(dto.getDeptId())) {
-            // 对传入的部门ID,做数据越权检查
-            UserDeptContainer deptContainer = sysDeptService.getCurrentUserDeptContainer(true);
-            if (deptContainer.hasVisibleDepts() && !CollUtil.contains(deptContainer.getVisibleDeptIds(), dto.getDeptId())) {
-                throw new BusinessException(SysErrorEnum.CANNOT_OPERATE_THIS_USER);
-            }
-        }
-
         dto.setId(null);
         SysUserEntity entity = new SysUserEntity();
         BeanUtil.copyProperties(dto, entity);
@@ -154,10 +121,6 @@ public class SysUserService {
                 .setPwd(PwdUtil.encrypt(dto.getPasswordOfNewUser(), salt));
 
         sysUserMapper.insert(entity);
-
-        sysUserDeptRelationService.cleanAndBind(entity.getId(), dto.getDeptId());
-
-        return entity.getId();
     }
 
     /**
@@ -173,9 +136,6 @@ public class SysUserService {
         BeanUtil.copyProperties(dto, entity);
         // 手动处理异名字段
         entity.setPin(dto.getUsername());
-
-        sysUserDeptRelationService.cleanAndBind(dto.getId(), dto.getDeptId());
-
         sysUserMapper.updateById(entity);
     }
 
@@ -376,11 +336,6 @@ public class SysUserService {
 
         // 可以在此处为BO填充字段
         bo.setUsername(entity.getPin());
-        if (fillDeptInfo) {
-            Optional.ofNullable(sysDeptService.getSpecifiedUserDeptContainer(bo.getId(), false))
-                    .map(UserDeptContainer::primaryRelatedDept)
-                    .ifPresent(deptInfo -> bo.setDeptId(deptInfo.getId()).setDeptTitle(deptInfo.getTitle()));
-        }
         return bo;
     }
 
@@ -431,45 +386,7 @@ public class SysUserService {
         }
     }
 
-    /**
-     * 确定本部门及下级部门用户IDs
-     * 返回空集合代表不限制
-     * 返回[0]或有元素集合,表示有限制
-     */
-    private Set<Long> determineVisibleDeptUserIds() {
-        Set<Long> visibleUserIds = Collections.emptySet();
-        UserDeptContainer deptContainer = sysDeptService.getCurrentUserDeptContainer(true);
-        if (deptContainer.hasVisibleDepts()) {
-            visibleUserIds = sysUserDeptRelationService.listUserIdsByDeptIds(deptContainer.getVisibleDeptIds());
-            if (CollUtil.isEmpty(visibleUserIds)) {
-                // 【可见部门】没有任何用户ID,直接返回[0]
-                return Collections.singleton(BigInteger.ZERO.longValue());
-            }
-        }
-        return visibleUserIds;
-    }
 
-    /**
-     * 确定不可见用户IDs
-     * 租户管理员:列表中不显示超级管理员用户
-     * 普通用户:列表中不显示超级管理员、租户管理员用户
-     */
-    private Set<Long> determineInvisibleUserIds() {
-        Set<Long> invisibleRoleIds = sysRoleService.determineInvisibleRoleIds();
-        return sysUserRoleRelationService.listUserIdsByRoleIds(invisibleRoleIds);
-    }
-
-    /**
-     * 数据越权检查
-     */
-    private void dataScopeCheck(Collection<Long> userIds) {
-        Set<Long> visibleUserIds = determineVisibleDeptUserIds();
-        Set<Long> invisibleUserIds = determineInvisibleUserIds();
-        if (CollUtil.isNotEmpty(visibleUserIds) && !CollUtil.containsAll(visibleUserIds, userIds)
-                || CollUtil.isNotEmpty(invisibleUserIds) && CollUtil.containsAny(invisibleUserIds, userIds)) {
-            throw new BusinessException(SysErrorEnum.CANNOT_OPERATE_THIS_USER);
-        }
-    }
 
 
     private void updateLastLoginAt(Long userId, LocalDateTime lastLoginAt) {
@@ -531,9 +448,6 @@ public class SysUserService {
         if (!currentUser.isGroupManager()) {
             throw new BusinessException(SysErrorEnum.CANNOT_OPERATE_THIS_USER);
         }
-
-        dataScopeCheck(ids);
-        // 暂未实现角色层级,一律平级
     }
 
     /**
@@ -569,8 +483,6 @@ public class SysUserService {
 
         // 超级管理员之外的用户,都需要校验自身角色范围是否满足输入值
         currentUserNotSuperAdmin(dto, currentUser);
-
-        dataScopeCheck(Collections.singleton(dto.getUserId()));
     }
 
     /**