update:调整数据同步用户-部门,用户-岗位同步顺序
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package com.zt.plat.module.system.api.userdept;
|
||||
|
||||
import com.zt.plat.framework.common.pojo.CommonResult;
|
||||
import com.zt.plat.module.system.api.userdept.dto.UserDeptRespDTO;
|
||||
import com.zt.plat.module.system.api.userdept.dto.UserDeptSaveReqDTO;
|
||||
import com.zt.plat.module.system.enums.ApiConstants;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户-部门关系 Feign API
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@FeignClient(name = ApiConstants.NAME)
|
||||
@Tag(name = "RPC 服务 - 用户部门关系")
|
||||
public interface UserDeptApi {
|
||||
|
||||
String PREFIX = ApiConstants.PREFIX + "/user-dept";
|
||||
|
||||
@PostMapping(PREFIX + "/create")
|
||||
@Operation(summary = "新增用户部门关系")
|
||||
CommonResult<Long> createUserDept(@RequestBody UserDeptSaveReqDTO reqVO);
|
||||
|
||||
@PutMapping(PREFIX + "/update")
|
||||
@Operation(summary = "修改用户部门关系")
|
||||
CommonResult<Boolean> updateUserDept(@RequestBody UserDeptSaveReqDTO reqVO);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete")
|
||||
@Operation(summary = "删除用户部门关系")
|
||||
@Parameter(name = "id", description = "关系编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserDept(@RequestParam("id") Long id);
|
||||
|
||||
@GetMapping(PREFIX + "/get")
|
||||
@Operation(summary = "通过ID查询用户部门关系")
|
||||
@Parameter(name = "id", description = "关系编号", example = "1", required = true)
|
||||
CommonResult<UserDeptRespDTO> getUserDept(@RequestParam("id") Long id);
|
||||
|
||||
@GetMapping(PREFIX + "/list-by-user-id")
|
||||
@Operation(summary = "通过用户ID查询用户部门关系列表")
|
||||
@Parameter(name = "userId", description = "用户编号", example = "1", required = true)
|
||||
CommonResult<List<UserDeptRespDTO>> getUserDeptListByUserId(@RequestParam("userId") Long userId);
|
||||
|
||||
@GetMapping(PREFIX + "/list-by-dept-id")
|
||||
@Operation(summary = "通过部门ID查询用户部门关系列表")
|
||||
@Parameter(name = "deptId", description = "部门编号", example = "1", required = true)
|
||||
CommonResult<List<UserDeptRespDTO>> getUserDeptListByDeptId(@RequestParam("deptId") Long deptId);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete-by-user-id")
|
||||
@Operation(summary = "通过用户ID删除用户部门关系")
|
||||
@Parameter(name = "userId", description = "用户编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserDeptByUserId(@RequestParam("userId") Long userId);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete-by-dept-id")
|
||||
@Operation(summary = "通过部门ID删除用户部门关系")
|
||||
@Parameter(name = "deptId", description = "部门编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserDeptByDeptId(@RequestParam("deptId") Long deptId);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.zt.plat.module.system.api.userdept.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 用户部门关系 Response DTO
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@Schema(description = "RPC 服务 - 用户部门关系 Response DTO")
|
||||
@Data
|
||||
public class UserDeptRespDTO {
|
||||
|
||||
@Schema(description = "关系编号", example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号", example = "1")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "部门编号", example = "100")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "备注", example = "主部门")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.zt.plat.module.system.api.userdept.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户部门关系创建/修改 Request DTO
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@Schema(description = "RPC 服务 - 用户部门关系创建/修改 Request DTO")
|
||||
@Data
|
||||
public class UserDeptSaveReqDTO {
|
||||
|
||||
@Schema(description = "关系编号", example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号", example = "1", required = true)
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "部门编号", example = "100", required = true)
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "备注", example = "主部门")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.zt.plat.module.system.api.userpost;
|
||||
|
||||
import com.zt.plat.framework.common.pojo.CommonResult;
|
||||
import com.zt.plat.module.system.api.userpost.dto.UserPostRespDTO;
|
||||
import com.zt.plat.module.system.api.userpost.dto.UserPostSaveReqDTO;
|
||||
import com.zt.plat.module.system.enums.ApiConstants;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户-岗位关系 Feign API
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@FeignClient(name = ApiConstants.NAME)
|
||||
@Tag(name = "RPC 服务 - 用户岗位关系")
|
||||
public interface UserPostApi {
|
||||
|
||||
String PREFIX = ApiConstants.PREFIX + "/user-post";
|
||||
|
||||
@PostMapping(PREFIX + "/create")
|
||||
@Operation(summary = "新增用户岗位关系")
|
||||
CommonResult<Long> createUserPost(@RequestBody UserPostSaveReqDTO reqVO);
|
||||
|
||||
@PutMapping(PREFIX + "/update")
|
||||
@Operation(summary = "修改用户岗位关系")
|
||||
CommonResult<Boolean> updateUserPost(@RequestBody UserPostSaveReqDTO reqVO);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete")
|
||||
@Operation(summary = "删除用户岗位关系")
|
||||
@Parameter(name = "id", description = "关系编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserPost(@RequestParam("id") Long id);
|
||||
|
||||
@GetMapping(PREFIX + "/get")
|
||||
@Operation(summary = "通过ID查询用户岗位关系")
|
||||
@Parameter(name = "id", description = "关系编号", example = "1", required = true)
|
||||
CommonResult<UserPostRespDTO> getUserPost(@RequestParam("id") Long id);
|
||||
|
||||
@GetMapping(PREFIX + "/list-by-user-id")
|
||||
@Operation(summary = "通过用户ID查询用户岗位关系列表")
|
||||
@Parameter(name = "userId", description = "用户编号", example = "1", required = true)
|
||||
CommonResult<List<UserPostRespDTO>> getUserPostListByUserId(@RequestParam("userId") Long userId);
|
||||
|
||||
@GetMapping(PREFIX + "/list-by-post-id")
|
||||
@Operation(summary = "通过岗位ID查询用户岗位关系列表")
|
||||
@Parameter(name = "postId", description = "岗位编号", example = "1", required = true)
|
||||
CommonResult<List<UserPostRespDTO>> getUserPostListByPostId(@RequestParam("postId") Long postId);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete-by-user-id")
|
||||
@Operation(summary = "通过用户ID删除用户岗位关系")
|
||||
@Parameter(name = "userId", description = "用户编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserPostByUserId(@RequestParam("userId") Long userId);
|
||||
|
||||
@DeleteMapping(PREFIX + "/delete-by-post-id")
|
||||
@Operation(summary = "通过岗位ID删除用户岗位关系")
|
||||
@Parameter(name = "postId", description = "岗位编号", example = "1", required = true)
|
||||
CommonResult<Boolean> deleteUserPostByPostId(@RequestParam("postId") Long postId);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.zt.plat.module.system.api.userpost.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 用户岗位关系 Response DTO
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@Schema(description = "RPC 服务 - 用户岗位关系 Response DTO")
|
||||
@Data
|
||||
public class UserPostRespDTO {
|
||||
|
||||
@Schema(description = "关系编号", example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号", example = "1")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "岗位编号", example = "100")
|
||||
private Long postId;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.zt.plat.module.system.api.userpost.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户岗位关系创建/修改 Request DTO
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
@Schema(description = "RPC 服务 - 用户岗位关系创建/修改 Request DTO")
|
||||
@Data
|
||||
public class UserPostSaveReqDTO {
|
||||
|
||||
@Schema(description = "关系编号", example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号", example = "1", required = true)
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "岗位编号", example = "100", required = true)
|
||||
private Long postId;
|
||||
}
|
||||
@@ -35,34 +35,16 @@ public class DatabusUserDeptProviderApiImpl implements DatabusUserDeptProviderAp
|
||||
|
||||
@Override
|
||||
public CommonResult<CursorPageResult<DatabusUserDeptData>> getPageByCursor(CursorPageReqDTO reqDTO) {
|
||||
// 构建游标查询条件
|
||||
LambdaQueryWrapper<UserDeptDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
// 游标条件:create_time > cursorTime OR (create_time = cursorTime AND id > cursorId)
|
||||
if (!reqDTO.isFirstPage()) {
|
||||
queryWrapper.and(w -> w
|
||||
.gt(UserDeptDO::getCreateTime, reqDTO.getCursorTime())
|
||||
.or(o -> o
|
||||
.eq(UserDeptDO::getCreateTime, reqDTO.getCursorTime())
|
||||
.gt(UserDeptDO::getId, reqDTO.getCursorId())
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// 租户过滤(如果指定)
|
||||
if (reqDTO.getTenantId() != null) {
|
||||
queryWrapper.eq(UserDeptDO::getTenantId, reqDTO.getTenantId());
|
||||
}
|
||||
|
||||
// 按 create_time, id 升序排列,确保顺序稳定
|
||||
queryWrapper.orderByAsc(UserDeptDO::getCreateTime)
|
||||
.orderByAsc(UserDeptDO::getId);
|
||||
|
||||
// 多查一条判断是否有更多数据
|
||||
int limit = reqDTO.getBatchSize() != null ? reqDTO.getBatchSize() : 100;
|
||||
queryWrapper.last("LIMIT " + (limit + 1));
|
||||
|
||||
List<UserDeptDO> list = userDeptMapper.selectList(queryWrapper);
|
||||
// ⚠️ 使用关联查询,只查询 userSource = 2 的用户的部门关系
|
||||
List<UserDeptDO> list = userDeptMapper.selectPageByCursorWithUserSource(
|
||||
reqDTO.isFirstPage() ? null : reqDTO.getCursorTime(),
|
||||
reqDTO.isFirstPage() ? null : reqDTO.getCursorId(),
|
||||
reqDTO.getTenantId(),
|
||||
limit + 1
|
||||
);
|
||||
|
||||
// 判断是否有更多
|
||||
boolean hasMore = list.size() > limit;
|
||||
@@ -82,14 +64,11 @@ public class DatabusUserDeptProviderApiImpl implements DatabusUserDeptProviderAp
|
||||
// 获取最后一条数据的游标
|
||||
UserDeptDO last = list.get(list.size() - 1);
|
||||
|
||||
// 首次查询时返回总数
|
||||
// 首次查询时返<EFBFBD><EFBFBD><EFBFBD>总数
|
||||
Long total = null;
|
||||
if (reqDTO.isFirstPage()) {
|
||||
LambdaQueryWrapper<UserDeptDO> countWrapper = new LambdaQueryWrapper<>();
|
||||
if (reqDTO.getTenantId() != null) {
|
||||
countWrapper.eq(UserDeptDO::getTenantId, reqDTO.getTenantId());
|
||||
}
|
||||
total = userDeptMapper.selectCount(countWrapper);
|
||||
// ⚠️ 只统计 userSource = 2 的用户的部门关系
|
||||
total = userDeptMapper.countWithUserSource(reqDTO.getTenantId());
|
||||
}
|
||||
|
||||
return success(CursorPageResult.of(
|
||||
@@ -128,11 +107,8 @@ public class DatabusUserDeptProviderApiImpl implements DatabusUserDeptProviderAp
|
||||
|
||||
@Override
|
||||
public CommonResult<Long> count(Long tenantId) {
|
||||
LambdaQueryWrapper<UserDeptDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (tenantId != null) {
|
||||
queryWrapper.eq(UserDeptDO::getTenantId, tenantId);
|
||||
}
|
||||
return success(userDeptMapper.selectCount(queryWrapper));
|
||||
// ⚠️ 只统计 userSource = 2 的用户的部门关系
|
||||
return success(userDeptMapper.countWithUserSource(tenantId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,31 +35,16 @@ public class DatabusUserPostProviderApiImpl implements DatabusUserPostProviderAp
|
||||
|
||||
@Override
|
||||
public CommonResult<CursorPageResult<DatabusUserPostData>> getPageByCursor(CursorPageReqDTO reqDTO) {
|
||||
// 构建游标查询条件
|
||||
LambdaQueryWrapper<UserPostDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
// 游标条件:create_time > cursorTime OR (create_time = cursorTime AND id > cursorId)
|
||||
if (!reqDTO.isFirstPage()) {
|
||||
queryWrapper.and(w -> w
|
||||
.gt(UserPostDO::getCreateTime, reqDTO.getCursorTime())
|
||||
.or(o -> o
|
||||
.eq(UserPostDO::getCreateTime, reqDTO.getCursorTime())
|
||||
.gt(UserPostDO::getId, reqDTO.getCursorId())
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// 注意:UserPostDO 没有租户字段,忽略 tenantId 过滤
|
||||
|
||||
// 按 create_time, id 升序排列,确保顺序稳定
|
||||
queryWrapper.orderByAsc(UserPostDO::getCreateTime)
|
||||
.orderByAsc(UserPostDO::getId);
|
||||
|
||||
// 多查一条判断是否有更多数据
|
||||
int limit = reqDTO.getBatchSize() != null ? reqDTO.getBatchSize() : 100;
|
||||
queryWrapper.last("LIMIT " + (limit + 1));
|
||||
|
||||
List<UserPostDO> list = userPostMapper.selectList(queryWrapper);
|
||||
// ⚠️ 使用关联查询,只查询 userSource = 2 的用户的岗位关系
|
||||
List<UserPostDO> list = userPostMapper.selectPageByCursorWithUserSource(
|
||||
reqDTO.isFirstPage() ? null : reqDTO.getCursorTime(),
|
||||
reqDTO.isFirstPage() ? null : reqDTO.getCursorId(),
|
||||
reqDTO.getTenantId(),
|
||||
limit + 1
|
||||
);
|
||||
|
||||
// 判断是否有更多
|
||||
boolean hasMore = list.size() > limit;
|
||||
@@ -82,7 +67,8 @@ public class DatabusUserPostProviderApiImpl implements DatabusUserPostProviderAp
|
||||
// 首次查询时返回总数
|
||||
Long total = null;
|
||||
if (reqDTO.isFirstPage()) {
|
||||
total = userPostMapper.selectCount(new LambdaQueryWrapper<>());
|
||||
// ⚠️ 只统计 userSource = 2 的用户的岗位关系
|
||||
total = userPostMapper.countWithUserSource(reqDTO.getTenantId());
|
||||
}
|
||||
|
||||
return success(CursorPageResult.of(
|
||||
@@ -121,8 +107,8 @@ public class DatabusUserPostProviderApiImpl implements DatabusUserPostProviderAp
|
||||
|
||||
@Override
|
||||
public CommonResult<Long> count(Long tenantId) {
|
||||
// 注意:UserPostDO 没有租户字段,返回全量总数
|
||||
return success(userPostMapper.selectCount(new LambdaQueryWrapper<>()));
|
||||
// ⚠️ 只统计 userSource = 2 的用户的岗位关系
|
||||
return success(userPostMapper.countWithUserSource(tenantId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -54,6 +54,9 @@ public class DatabusUserProviderApiImpl implements DatabusUserProviderApi {
|
||||
// 构建游标查询条件
|
||||
LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
// ⚠️ 只同步 userSource = 2 的用户
|
||||
queryWrapper.eq(AdminUserDO::getUserSource, 2);
|
||||
|
||||
// 游标条件:create_time > cursorTime OR (create_time = cursorTime AND id > cursorId)
|
||||
if (!reqDTO.isFirstPage()) {
|
||||
queryWrapper.and(w -> w
|
||||
@@ -100,6 +103,8 @@ public class DatabusUserProviderApiImpl implements DatabusUserProviderApi {
|
||||
Long total = null;
|
||||
if (reqDTO.isFirstPage()) {
|
||||
LambdaQueryWrapper<AdminUserDO> countWrapper = new LambdaQueryWrapper<>();
|
||||
// ⚠️ 只统计 userSource = 2 的用户
|
||||
countWrapper.eq(AdminUserDO::getUserSource, 2);
|
||||
if (reqDTO.getTenantId() != null) {
|
||||
countWrapper.eq(AdminUserDO::getTenantId, reqDTO.getTenantId());
|
||||
}
|
||||
@@ -143,6 +148,8 @@ public class DatabusUserProviderApiImpl implements DatabusUserProviderApi {
|
||||
@Override
|
||||
public CommonResult<Long> count(Long tenantId) {
|
||||
LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
// ⚠️ 只统计 userSource = 2 的用户
|
||||
queryWrapper.eq(AdminUserDO::getUserSource, 2);
|
||||
if (tenantId != null) {
|
||||
queryWrapper.eq(AdminUserDO::getTenantId, tenantId);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,10 @@ import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.zt.plat.module.system.dal.dataobject.dept.UserPostDO;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@@ -29,4 +32,44 @@ public interface UserPostMapper extends BaseMapperX<UserPostDO> {
|
||||
default void deleteByUserId(Long userId) {
|
||||
delete(Wrappers.lambdaUpdate(UserPostDO.class).eq(UserPostDO::getUserId, userId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 游标分页查询用户-岗位关系(只查询 userSource = 2 的用户)
|
||||
* @param cursorTime 游标时间
|
||||
* @param cursorId 游标ID
|
||||
* @param tenantId 租户ID(可选)
|
||||
* @param limit 限制数量
|
||||
* @return 用户岗位关系列表
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT up.* FROM system_user_post up " +
|
||||
"INNER JOIN system_users u ON up.user_id = u.id " +
|
||||
"WHERE u.user_source = 2 " +
|
||||
"AND up.deleted = 0 " +
|
||||
"<if test='tenantId != null'> AND up.tenant_id = #{tenantId} </if>" +
|
||||
"<if test='cursorTime != null'>" +
|
||||
" AND (up.create_time > #{cursorTime} " +
|
||||
" OR (up.create_time = #{cursorTime} AND up.id > #{cursorId}))" +
|
||||
"</if>" +
|
||||
"ORDER BY up.create_time ASC, up.id ASC " +
|
||||
"LIMIT #{limit}" +
|
||||
"</script>")
|
||||
List<UserPostDO> selectPageByCursorWithUserSource(@Param("cursorTime") LocalDateTime cursorTime,
|
||||
@Param("cursorId") Long cursorId,
|
||||
@Param("tenantId") Long tenantId,
|
||||
@Param("limit") Integer limit);
|
||||
|
||||
/**
|
||||
* 统计用户-岗位关系数量(只统计 userSource = 2 的用户)
|
||||
* @param tenantId 租户ID(可选)
|
||||
* @return 数量
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT COUNT(*) FROM system_user_post up " +
|
||||
"INNER JOIN system_users u ON up.user_id = u.id " +
|
||||
"WHERE u.user_source = 2 " +
|
||||
"AND up.deleted = 0 " +
|
||||
"<if test='tenantId != null'> AND up.tenant_id = #{tenantId} </if>" +
|
||||
"</script>")
|
||||
Long countWithUserSource(@Param("tenantId") Long tenantId);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,10 @@ import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.zt.plat.module.system.dal.dataobject.userdept.UserDeptDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -45,4 +48,44 @@ public interface UserDeptMapper extends BaseMapperX<UserDeptDO> {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 游标分页查询用户-部门关系(只查询 userSource = 2 的用户)
|
||||
* @param cursorTime 游标时间
|
||||
* @param cursorId 游标ID
|
||||
* @param tenantId 租户ID(可选)
|
||||
* @param limit 限制数量
|
||||
* @return 用户部门关系列表
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT ud.* FROM system_user_dept ud " +
|
||||
"INNER JOIN system_users u ON ud.user_id = u.id " +
|
||||
"WHERE u.user_source = 2 " +
|
||||
"AND ud.deleted = 0 " +
|
||||
"<if test='tenantId != null'> AND ud.tenant_id = #{tenantId} </if>" +
|
||||
"<if test='cursorTime != null'>" +
|
||||
" AND (ud.create_time > #{cursorTime} " +
|
||||
" OR (ud.create_time = #{cursorTime} AND ud.id > #{cursorId}))" +
|
||||
"</if>" +
|
||||
"ORDER BY ud.create_time ASC, ud.id ASC " +
|
||||
"LIMIT #{limit}" +
|
||||
"</script>")
|
||||
List<UserDeptDO> selectPageByCursorWithUserSource(@Param("cursorTime") LocalDateTime cursorTime,
|
||||
@Param("cursorId") Long cursorId,
|
||||
@Param("tenantId") Long tenantId,
|
||||
@Param("limit") Integer limit);
|
||||
|
||||
/**
|
||||
* 统计用户-部门关系数量(只统计 userSource = 2 的用户)
|
||||
* @param tenantId 租户ID(可选)
|
||||
* @return 数量
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT COUNT(*) FROM system_user_dept ud " +
|
||||
"INNER JOIN system_users u ON ud.user_id = u.id " +
|
||||
"WHERE u.user_source = 2 " +
|
||||
"AND ud.deleted = 0 " +
|
||||
"<if test='tenantId != null'> AND ud.tenant_id = #{tenantId} </if>" +
|
||||
"</script>")
|
||||
Long countWithUserSource(@Param("tenantId") Long tenantId);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user