feat: 为我的任务接口添加多维度筛选功能
- 后端:扩展 getMyPublishedTasks 支持 taskTypeId/brandId/categoryId/platformId/taskSubType/minScore/maxScore/timeRange/keyword 筛选 - 后端:扩展 getMyReceivedTasks 支持 taskTypeId/brandId/categoryId/platformId 筛选 - 后端:扩展 getMyDetailCompleterTasks 支持 taskTypeId/brandId/categoryId/platformId 筛选 - 后端:更新 Controller 接收所有筛选参数 - 前端:更新 MyTasksParams 接口添加筛选参数 - 前端:更新 loadPublishedTasks 传递完整筛选参数
This commit is contained in:
parent
785248c5d7
commit
397f4b4040
@ -335,29 +335,42 @@ public class TaskController {
|
||||
return Result.success(taskPage);
|
||||
}
|
||||
|
||||
@Operation(summary = "我的任务", description = "获取当前用户的任务列表")
|
||||
@Operation(summary = "我的任务", description = "获取当前用户的任务列表(支持多维度筛选)")
|
||||
@GetMapping("/my")
|
||||
public Result<IPage<Task>> getMyTasks(
|
||||
@RequestParam(required = false) String role, // publisher、receiver 或 detail_completer
|
||||
@RequestParam(required = false) String status,
|
||||
@RequestParam(required = false) Long taskTypeId,
|
||||
@RequestParam(required = false) Long brandId,
|
||||
@RequestParam(required = false) Long categoryId,
|
||||
@RequestParam(required = false) Long platformId,
|
||||
@RequestParam(required = false) String taskSubType,
|
||||
@RequestParam(required = false) Integer minScore,
|
||||
@RequestParam(required = false) Integer maxScore,
|
||||
@RequestParam(required = false) String timeRange,
|
||||
@RequestParam(required = false) String keyword,
|
||||
@RequestParam(defaultValue = "1") Integer page,
|
||||
@RequestParam(defaultValue = "20") Integer pageSize,
|
||||
@RequestHeader("Authorization") String authHeader) {
|
||||
|
||||
log.info("查询我的任务: role={}, status={}, page={}, pageSize={}",
|
||||
role, status, page, pageSize);
|
||||
log.info("查询我的任务: role={}, status={}, taskTypeId={}, brandId={}, categoryId={}, platformId={}, keyword={}, page={}, pageSize={}",
|
||||
role, status, taskTypeId, brandId, categoryId, platformId, keyword, page, pageSize);
|
||||
|
||||
String token = jwtUtil.extractTokenFromHeader(authHeader);
|
||||
Long userId = jwtUtil.getUserIdFromToken(token);
|
||||
|
||||
IPage<Task> taskPage;
|
||||
if ("publisher".equals(role)) {
|
||||
taskPage = taskService.getMyPublishedTasks(page, pageSize, userId, status);
|
||||
taskPage = taskService.getMyPublishedTasks(page, pageSize, userId, status,
|
||||
taskTypeId, brandId, categoryId, platformId, taskSubType,
|
||||
minScore, maxScore, timeRange, keyword);
|
||||
} else if ("detail_completer".equals(role)) {
|
||||
// 查询用户作为明细完善人的一级需求任务
|
||||
taskPage = taskService.getMyDetailCompleterTasks(page, pageSize, userId, status);
|
||||
taskPage = taskService.getMyDetailCompleterTasks(page, pageSize, userId, status,
|
||||
taskTypeId, brandId, categoryId, platformId);
|
||||
} else {
|
||||
taskPage = taskService.getMyReceivedTasks(page, pageSize, userId, status);
|
||||
taskPage = taskService.getMyReceivedTasks(page, pageSize, userId, status,
|
||||
taskTypeId, brandId, categoryId, platformId);
|
||||
}
|
||||
|
||||
return Result.success(taskPage);
|
||||
|
||||
@ -1332,14 +1332,93 @@ public class TaskService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我发布的任务
|
||||
* 获取我发布的任务(支持多维度筛选)
|
||||
*/
|
||||
public IPage<Task> getMyPublishedTasks(Integer page, Integer pageSize, Long userId, String status) {
|
||||
public IPage<Task> getMyPublishedTasks(Integer page, Integer pageSize, Long userId, String status,
|
||||
Long taskTypeId, Long brandId, Long categoryId, Long platformId, String taskSubType,
|
||||
Integer minScore, Integer maxScore, String timeRange, String keyword) {
|
||||
Page<Task> pageParam = new Page<>(page, pageSize);
|
||||
IPage<Task> taskPage = taskMapper.selectMyPublishedTasks(pageParam, userId, status);
|
||||
|
||||
// 填充子任务统计信息
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.and(w -> w.eq(Task::getPublisherId, userId).or().eq(Task::getDetailCompleterId, userId));
|
||||
wrapper.eq(Task::getDeleted, 0);
|
||||
|
||||
// 状态筛选
|
||||
if (StringUtils.hasText(status)) {
|
||||
wrapper.eq(Task::getStatus, status);
|
||||
} else {
|
||||
wrapper.ne(Task::getStatus, "draft"); // 排除草稿
|
||||
}
|
||||
|
||||
// 任务类型筛选
|
||||
if (taskTypeId != null) {
|
||||
wrapper.eq(Task::getTaskTypeId, taskTypeId);
|
||||
}
|
||||
|
||||
// 品牌筛选
|
||||
if (brandId != null) {
|
||||
wrapper.eq(Task::getBrandId, brandId);
|
||||
}
|
||||
|
||||
// 类目筛选
|
||||
if (categoryId != null) {
|
||||
wrapper.eq(Task::getCategoryId, categoryId);
|
||||
}
|
||||
|
||||
// 平台筛选
|
||||
if (platformId != null) {
|
||||
wrapper.eq(Task::getPlatformId, platformId);
|
||||
}
|
||||
|
||||
// 需求类型筛选
|
||||
if (StringUtils.hasText(taskSubType)) {
|
||||
wrapper.eq(Task::getTaskSubType, taskSubType);
|
||||
}
|
||||
|
||||
// 积分范围筛选
|
||||
if (minScore != null) {
|
||||
wrapper.ge(Task::getScore, minScore);
|
||||
}
|
||||
if (maxScore != null) {
|
||||
wrapper.le(Task::getScore, maxScore);
|
||||
}
|
||||
|
||||
// 时间范围筛选
|
||||
if (StringUtils.hasText(timeRange)) {
|
||||
LocalDateTime startTime = LocalDateTime.now();
|
||||
switch (timeRange) {
|
||||
case "today":
|
||||
startTime = LocalDateTime.now().toLocalDate().atStartOfDay();
|
||||
break;
|
||||
case "week":
|
||||
startTime = LocalDateTime.now().minusWeeks(1);
|
||||
break;
|
||||
case "month":
|
||||
startTime = LocalDateTime.now().minusMonths(1);
|
||||
break;
|
||||
}
|
||||
wrapper.ge(Task::getCreateTime, startTime);
|
||||
}
|
||||
|
||||
// 关键词筛选
|
||||
if (StringUtils.hasText(keyword)) {
|
||||
wrapper.and(w -> w
|
||||
.like(Task::getTitle, keyword)
|
||||
.or()
|
||||
.like(Task::getTaskNo, keyword)
|
||||
.or()
|
||||
.like(Task::getSpuInfo, keyword)
|
||||
);
|
||||
}
|
||||
|
||||
wrapper.orderByDesc(Task::getUpdateTime);
|
||||
|
||||
IPage<Task> taskPage = taskMapper.selectPage(pageParam, wrapper);
|
||||
|
||||
// 填充关联信息和子任务统计信息
|
||||
for (Task task : taskPage.getRecords()) {
|
||||
fillTaskRelatedInfo(task);
|
||||
fillSubTaskStats(task);
|
||||
}
|
||||
|
||||
@ -1347,14 +1426,51 @@ public class TaskService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我接收的任务
|
||||
* 获取我接收的任务(支持多维度筛选)
|
||||
*/
|
||||
public IPage<Task> getMyReceivedTasks(Integer page, Integer pageSize, Long userId, String status) {
|
||||
public IPage<Task> getMyReceivedTasks(Integer page, Integer pageSize, Long userId, String status,
|
||||
Long taskTypeId, Long brandId, Long categoryId, Long platformId) {
|
||||
Page<Task> pageParam = new Page<>(page, pageSize);
|
||||
IPage<Task> taskPage = taskMapper.selectMyReceivedTasks(pageParam, userId, status);
|
||||
|
||||
// 填充子任务统计信息
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.and(w -> w.eq(Task::getReceiverId, userId).or().eq(Task::getDetailCompleterId, userId));
|
||||
wrapper.eq(Task::getDeleted, 0);
|
||||
|
||||
// 状态筛选
|
||||
if (StringUtils.hasText(status)) {
|
||||
wrapper.eq(Task::getStatus, status);
|
||||
} else {
|
||||
wrapper.ne(Task::getStatus, "draft"); // 排除草稿
|
||||
}
|
||||
|
||||
// 任务类型筛选
|
||||
if (taskTypeId != null) {
|
||||
wrapper.eq(Task::getTaskTypeId, taskTypeId);
|
||||
}
|
||||
|
||||
// 品牌筛选
|
||||
if (brandId != null) {
|
||||
wrapper.eq(Task::getBrandId, brandId);
|
||||
}
|
||||
|
||||
// 类目筛选
|
||||
if (categoryId != null) {
|
||||
wrapper.eq(Task::getCategoryId, categoryId);
|
||||
}
|
||||
|
||||
// 平台筛选
|
||||
if (platformId != null) {
|
||||
wrapper.eq(Task::getPlatformId, platformId);
|
||||
}
|
||||
|
||||
wrapper.orderByDesc(Task::getCreateTime);
|
||||
|
||||
IPage<Task> taskPage = taskMapper.selectPage(pageParam, wrapper);
|
||||
|
||||
// 填充关联信息和子任务统计信息
|
||||
for (Task task : taskPage.getRecords()) {
|
||||
fillTaskRelatedInfo(task);
|
||||
fillSubTaskStats(task);
|
||||
}
|
||||
|
||||
@ -1362,10 +1478,11 @@ public class TaskService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我作为明细完善人的一级需求任务
|
||||
* 获取我作为明细完善人的一级需求任务(支持多维度筛选)
|
||||
* 需求部门成员完善任务明细后,可以在"进行中任务"看到这些任务
|
||||
*/
|
||||
public IPage<Task> getMyDetailCompleterTasks(Integer page, Integer pageSize, Long userId, String status) {
|
||||
public IPage<Task> getMyDetailCompleterTasks(Integer page, Integer pageSize, Long userId, String status,
|
||||
Long taskTypeId, Long brandId, Long categoryId, Long platformId) {
|
||||
Page<Task> pageParam = new Page<>(page, pageSize);
|
||||
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
@ -1379,6 +1496,26 @@ public class TaskService {
|
||||
wrapper.eq(Task::getStatus, status);
|
||||
}
|
||||
|
||||
// 任务类型筛选
|
||||
if (taskTypeId != null) {
|
||||
wrapper.eq(Task::getTaskTypeId, taskTypeId);
|
||||
}
|
||||
|
||||
// 品牌筛选
|
||||
if (brandId != null) {
|
||||
wrapper.eq(Task::getBrandId, brandId);
|
||||
}
|
||||
|
||||
// 类目筛选
|
||||
if (categoryId != null) {
|
||||
wrapper.eq(Task::getCategoryId, categoryId);
|
||||
}
|
||||
|
||||
// 平台筛选
|
||||
if (platformId != null) {
|
||||
wrapper.eq(Task::getPlatformId, platformId);
|
||||
}
|
||||
|
||||
// 按更新时间倒序
|
||||
wrapper.orderByDesc(Task::getUpdateTime);
|
||||
|
||||
|
||||
@ -181,6 +181,15 @@ export interface MyTasksParams {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
taskTypeId?: number
|
||||
brandId?: number
|
||||
categoryId?: number
|
||||
platformId?: number
|
||||
taskSubType?: string
|
||||
minScore?: number
|
||||
maxScore?: number
|
||||
timeRange?: string
|
||||
sortBy?: string
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -4375,6 +4375,13 @@ const loadPublishedTasks = async (newFilters?: any) => {
|
||||
role: 'publisher',
|
||||
status: publishedFilters.status || undefined,
|
||||
keyword: publishedFilters.keyword || undefined,
|
||||
taskTypeId: publishedFilters.taskTypeId || undefined,
|
||||
brandId: publishedFilters.brandId || undefined,
|
||||
categoryId: publishedFilters.categoryId || undefined,
|
||||
platformId: publishedFilters.platformId || undefined,
|
||||
timeRange: publishedFilters.timeRange || undefined,
|
||||
minScore: publishedFilters.minScore || undefined,
|
||||
maxScore: publishedFilters.maxScore || undefined,
|
||||
page: publishedPagination.page,
|
||||
pageSize: publishedPagination.pageSize
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user