feat: 新增首页 & 论坛 API接口
This commit is contained in:
parent
2f9a3cdbac
commit
d7f8a56a53
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
@ -36,14 +36,13 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 帖子接口
|
* 图表接口
|
||||||
*
|
*
|
||||||
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
|
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
|
||||||
* @from <a href="https://yupi.icu">编程导航知识星球</a>
|
* @from <a href="https://yupi.icu">编程导航知识星球</a>
|
||||||
@ -70,6 +69,366 @@ public class ChartController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ThreadPoolExecutor threadPoolExecutor;
|
private ThreadPoolExecutor threadPoolExecutor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取本周每天图表生成成功数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/week/success/count")
|
||||||
|
public BaseResponse<List<Integer>> getWeekChartSuccessCount(HttpServletRequest request) {
|
||||||
|
// 获取本周的开始日期(周一)和结束日期(周日)
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date weekStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.add(Calendar.DATE, 6);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date weekEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 创建存储每天成功数量的列表
|
||||||
|
List<Integer> dailySuccessCounts = new ArrayList<>();
|
||||||
|
|
||||||
|
// 查询本周每天的成功图表数量
|
||||||
|
calendar.setTime(weekStart);
|
||||||
|
for (int i = 0; i < 7; i++) {
|
||||||
|
Date dayStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date dayEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 查询当天成功的图表数量
|
||||||
|
QueryWrapper<Chart> successQuery = new QueryWrapper<>();
|
||||||
|
successQuery.in("status", Arrays.asList("succeed", "success"));
|
||||||
|
successQuery.between("createTime", dayStart, dayEnd);
|
||||||
|
successQuery.eq("isDelete", false);
|
||||||
|
long successCount = chartService.count(successQuery);
|
||||||
|
|
||||||
|
dailySuccessCounts.add((int) successCount);
|
||||||
|
|
||||||
|
// 移动到下一天
|
||||||
|
calendar.add(Calendar.DATE, 1);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResultUtils.success(dailySuccessCounts);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户本周每天图表生成成功数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/my/week/success/count")
|
||||||
|
public BaseResponse<List<Integer>> getMyWeekChartSuccessCount(HttpServletRequest request) {
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
|
||||||
|
// 获取本周的开始日期(周一)和结束日期(周日)
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date weekStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.add(Calendar.DATE, 6);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date weekEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 创建存储每天成功数量的列表
|
||||||
|
List<Integer> dailySuccessCounts = new ArrayList<>();
|
||||||
|
|
||||||
|
// 查询本周每天的成功图表数量
|
||||||
|
calendar.setTime(weekStart);
|
||||||
|
for (int i = 0; i < 7; i++) {
|
||||||
|
Date dayStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date dayEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 查询当天成功的图表数量
|
||||||
|
QueryWrapper<Chart> successQuery = new QueryWrapper<>();
|
||||||
|
successQuery.in("status", Arrays.asList("succeed", "success"));
|
||||||
|
successQuery.between("createTime", dayStart, dayEnd);
|
||||||
|
successQuery.eq("userId", loginUser.getId());
|
||||||
|
successQuery.eq("isDelete", false);
|
||||||
|
long successCount = chartService.count(successQuery);
|
||||||
|
|
||||||
|
dailySuccessCounts.add((int) successCount);
|
||||||
|
|
||||||
|
// 移动到下一天
|
||||||
|
calendar.add(Calendar.DATE, 1);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResultUtils.success(dailySuccessCounts);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取今日图表生成个数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/today/count")
|
||||||
|
public BaseResponse<Long> getTodayChartCount(HttpServletRequest request) {
|
||||||
|
// 获取今天的开始时间(00:00:00)和结束时间(23:59:59)
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date todayStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date todayEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Chart> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.between("createTime", todayStart, todayEnd);
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
// 查询今日创建的图表数量
|
||||||
|
long count = chartService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户今日图表生成个数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/my/today/count")
|
||||||
|
public BaseResponse<Long> getMyTodayChartCount(HttpServletRequest request) {
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
|
||||||
|
// 获取今天的开始时间(00:00:00)和结束时间(23:59:59)
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date todayStart = calendar.getTime();
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 999);
|
||||||
|
Date todayEnd = calendar.getTime();
|
||||||
|
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Chart> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.between("createTime", todayStart, todayEnd);
|
||||||
|
queryWrapper.eq("userId", loginUser.getId());
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
// 查询当前用户今日创建的图表数量
|
||||||
|
long count = chartService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取图表生成的成功率
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/gen/success-rate")
|
||||||
|
// @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
|
public BaseResponse<Double> getChartGenerationSuccessRate(HttpServletRequest request) {
|
||||||
|
// 只允许管理员访问
|
||||||
|
|
||||||
|
// 查询所有已完成的任务(状态为succeed或failed)
|
||||||
|
QueryWrapper<Chart> completedQuery = new QueryWrapper<>();
|
||||||
|
completedQuery.in("status", Arrays.asList("succeed", "failed", "success"));
|
||||||
|
completedQuery.eq("isDelete", false);
|
||||||
|
long completedCount = chartService.count(completedQuery);
|
||||||
|
|
||||||
|
if (completedCount == 0) {
|
||||||
|
// 如果没有完成的任务,返回0或null
|
||||||
|
return ResultUtils.success(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询成功的任务
|
||||||
|
QueryWrapper<Chart> successQuery = new QueryWrapper<>();
|
||||||
|
successQuery.in("status", Arrays.asList("succeed", "success"));
|
||||||
|
successQuery.eq("isDelete", false);
|
||||||
|
long successCount = chartService.count(successQuery);
|
||||||
|
|
||||||
|
// 计算成功率
|
||||||
|
double successRate = (double) successCount / completedCount;
|
||||||
|
|
||||||
|
return ResultUtils.success(successRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户图表生成的成功率
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/my/gen/success-rate")
|
||||||
|
public BaseResponse<Double> getMyChartGenerationSuccessRate(HttpServletRequest request) {
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
|
||||||
|
// 查询当前用户所有已完成的任务
|
||||||
|
QueryWrapper<Chart> completedQuery = new QueryWrapper<>();
|
||||||
|
completedQuery.in("status", Arrays.asList("succeed", "failed", "success"));
|
||||||
|
completedQuery.eq("userId", loginUser.getId());
|
||||||
|
completedQuery.eq("isDelete", false);
|
||||||
|
long completedCount = chartService.count(completedQuery);
|
||||||
|
|
||||||
|
if (completedCount == 0) {
|
||||||
|
// 如果没有完成的任务,返回0
|
||||||
|
return ResultUtils.success(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询当前用户成功的任务
|
||||||
|
QueryWrapper<Chart> successQuery = new QueryWrapper<>();
|
||||||
|
successQuery.in("status", Arrays.asList("succeed", "success"));
|
||||||
|
successQuery.eq("userId", loginUser.getId());
|
||||||
|
successQuery.eq("isDelete", false);
|
||||||
|
long successCount = chartService.count(successQuery);
|
||||||
|
|
||||||
|
// 计算成功率
|
||||||
|
double successRate = (double) successCount / completedCount;
|
||||||
|
|
||||||
|
return ResultUtils.success(successRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取详细的图表生成统计信息
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/gen/stats")
|
||||||
|
//@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
|
public BaseResponse<Map<String, Object>> getChartGenerationStats(HttpServletRequest request) {
|
||||||
|
// 只允许管理员访问
|
||||||
|
|
||||||
|
Map<String, Object> statsMap = new HashMap<>();
|
||||||
|
|
||||||
|
// 查询总任务数
|
||||||
|
QueryWrapper<Chart> totalQuery = new QueryWrapper<>();
|
||||||
|
totalQuery.eq("isDelete", false);
|
||||||
|
long totalCount = chartService.count(totalQuery);
|
||||||
|
statsMap.put("totalCount", totalCount);
|
||||||
|
|
||||||
|
// 查询等待中的任务数
|
||||||
|
QueryWrapper<Chart> waitingQuery = new QueryWrapper<>();
|
||||||
|
waitingQuery.eq("status", "wait");
|
||||||
|
waitingQuery.eq("isDelete", false);
|
||||||
|
long waitingCount = chartService.count(waitingQuery);
|
||||||
|
statsMap.put("waitingCount", waitingCount);
|
||||||
|
|
||||||
|
// 查询运行中的任务数
|
||||||
|
QueryWrapper<Chart> runningQuery = new QueryWrapper<>();
|
||||||
|
runningQuery.eq("status", "running");
|
||||||
|
runningQuery.eq("isDelete", false);
|
||||||
|
long runningCount = chartService.count(runningQuery);
|
||||||
|
statsMap.put("runningCount", runningCount);
|
||||||
|
|
||||||
|
// 查询成功的任务数
|
||||||
|
QueryWrapper<Chart> successQuery = new QueryWrapper<>();
|
||||||
|
successQuery.in("status", Arrays.asList("succeed", "success"));
|
||||||
|
successQuery.eq("isDelete", false);
|
||||||
|
long successCount = chartService.count(successQuery);
|
||||||
|
statsMap.put("successCount", successCount);
|
||||||
|
|
||||||
|
// 查询失败的任务数
|
||||||
|
QueryWrapper<Chart> failedQuery = new QueryWrapper<>();
|
||||||
|
failedQuery.eq("status", "failed");
|
||||||
|
failedQuery.eq("isDelete", false);
|
||||||
|
long failedCount = chartService.count(failedQuery);
|
||||||
|
statsMap.put("failedCount", failedCount);
|
||||||
|
|
||||||
|
// 计算成功率
|
||||||
|
double successRate = totalCount > 0 ? (double) successCount / totalCount : 0;
|
||||||
|
statsMap.put("successRate", successRate);
|
||||||
|
|
||||||
|
// 计算已完成任务的成功率
|
||||||
|
long completedCount = successCount + failedCount;
|
||||||
|
double completedSuccessRate = completedCount > 0 ? (double) successCount / completedCount : 0;
|
||||||
|
statsMap.put("completedSuccessRate", completedSuccessRate);
|
||||||
|
|
||||||
|
return ResultUtils.success(statsMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取图表总数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/count")
|
||||||
|
public BaseResponse<Long> countCharts(HttpServletRequest request) {
|
||||||
|
// 只允许管理员访问
|
||||||
|
// @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
|
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Chart> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
// 如果只需要查询当前用户的图表总数,可以取消注释以下代码
|
||||||
|
// User loginUser = userService.getLoginUser(request);
|
||||||
|
// queryWrapper.eq("userId", loginUser.getId());
|
||||||
|
|
||||||
|
long count = chartService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户的图表总数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/my/count")
|
||||||
|
public BaseResponse<Long> countMyCharts(HttpServletRequest request) {
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
|
||||||
|
QueryWrapper<Chart> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("userId", loginUser.getId());
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
long count = chartService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建
|
* 创建
|
||||||
*
|
*
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
package com.yupi.springbootinit.controller;
|
package com.yupi.springbootinit.controller;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@ -49,6 +50,62 @@ public class PostController {
|
|||||||
|
|
||||||
// region 增删改查
|
// region 增删改查
|
||||||
|
|
||||||
|
@GetMapping("/list/all")
|
||||||
|
public BaseResponse<List<PostVO>> listAllPosts(HttpServletRequest request) {
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Post> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
queryWrapper.orderByDesc("createTime"); // 按创建时间降序排序
|
||||||
|
queryWrapper.last("limit 100"); // 限制最多返回100条记录
|
||||||
|
|
||||||
|
// 查询所有帖子
|
||||||
|
List<Post> postList = postService.list(queryWrapper);
|
||||||
|
|
||||||
|
// 将帖子列表转换为 PostVO 列表
|
||||||
|
List<PostVO> postVOList = postService.getPostVOList(postList, request);
|
||||||
|
|
||||||
|
return ResultUtils.success(postVOList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取帖子总数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/count")
|
||||||
|
public BaseResponse<Long> countPosts(HttpServletRequest request) {
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Post> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
// 查询帖子总数
|
||||||
|
long count = postService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户的帖子总数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/my/count")
|
||||||
|
public BaseResponse<Long> countMyPosts(HttpServletRequest request) {
|
||||||
|
User loginUser = userService.getLoginUser(request);
|
||||||
|
|
||||||
|
// 创建查询条件
|
||||||
|
QueryWrapper<Post> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("userId", loginUser.getId());
|
||||||
|
queryWrapper.eq("isDelete", false);
|
||||||
|
|
||||||
|
// 查询当前用户的帖子总数
|
||||||
|
long count = postService.count(queryWrapper);
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建
|
* 创建
|
||||||
*
|
*
|
||||||
@ -260,4 +317,6 @@ public class PostController {
|
|||||||
return ResultUtils.success(result);
|
return ResultUtils.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -290,4 +290,21 @@ public class UserController {
|
|||||||
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户总数
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/count")
|
||||||
|
//@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
|
public BaseResponse<Long> countUsers(HttpServletRequest request) {
|
||||||
|
// 默认只有管理员可以查看用户总数
|
||||||
|
long count = userService.count();
|
||||||
|
return ResultUtils.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import com.yupi.springbootinit.model.dto.post.PostQueryRequest;
|
|||||||
import com.yupi.springbootinit.model.entity.Post;
|
import com.yupi.springbootinit.model.entity.Post;
|
||||||
import com.yupi.springbootinit.model.vo.PostVO;
|
import com.yupi.springbootinit.model.vo.PostVO;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 帖子服务
|
* 帖子服务
|
||||||
@ -57,4 +58,14 @@ public interface PostService extends IService<Post> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Page<PostVO> getPostVOPage(Page<Post> postPage, HttpServletRequest request);
|
Page<PostVO> getPostVOPage(Page<Post> postPage, HttpServletRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取帖子封装列表
|
||||||
|
*
|
||||||
|
* @param postList
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PostVO> getPostVOList(List<Post> postList, HttpServletRequest request);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,62 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements Po
|
|||||||
@Resource
|
@Resource
|
||||||
private ElasticsearchRestTemplate elasticsearchRestTemplate;
|
private ElasticsearchRestTemplate elasticsearchRestTemplate;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取帖子封装列表
|
||||||
|
*
|
||||||
|
* @param postList
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PostVO> getPostVOList(List<Post> postList, HttpServletRequest request) {
|
||||||
|
if (CollUtil.isEmpty(postList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 关联查询用户信息
|
||||||
|
Set<Long> userIdSet = postList.stream().map(Post::getUserId).collect(Collectors.toSet());
|
||||||
|
Map<Long, List<User>> userIdUserListMap = userService.listByIds(userIdSet).stream()
|
||||||
|
.collect(Collectors.groupingBy(User::getId));
|
||||||
|
|
||||||
|
// 2. 已登录,获取用户点赞、收藏状态
|
||||||
|
Map<Long, Boolean> postIdHasThumbMap = new HashMap<>();
|
||||||
|
Map<Long, Boolean> postIdHasFavourMap = new HashMap<>();
|
||||||
|
User loginUser = userService.getLoginUserPermitNull(request);
|
||||||
|
if (loginUser != null) {
|
||||||
|
Set<Long> postIdSet = postList.stream().map(Post::getId).collect(Collectors.toSet());
|
||||||
|
// 获取点赞
|
||||||
|
QueryWrapper<PostThumb> postThumbQueryWrapper = new QueryWrapper<>();
|
||||||
|
postThumbQueryWrapper.in("postId", postIdSet);
|
||||||
|
postThumbQueryWrapper.eq("userId", loginUser.getId());
|
||||||
|
List<PostThumb> postPostThumbList = postThumbMapper.selectList(postThumbQueryWrapper);
|
||||||
|
postPostThumbList.forEach(postPostThumb -> postIdHasThumbMap.put(postPostThumb.getPostId(), true));
|
||||||
|
|
||||||
|
// 获取收藏
|
||||||
|
QueryWrapper<PostFavour> postFavourQueryWrapper = new QueryWrapper<>();
|
||||||
|
postFavourQueryWrapper.in("postId", postIdSet);
|
||||||
|
postFavourQueryWrapper.eq("userId", loginUser.getId());
|
||||||
|
List<PostFavour> postFavourList = postFavourMapper.selectList(postFavourQueryWrapper);
|
||||||
|
postFavourList.forEach(postFavour -> postIdHasFavourMap.put(postFavour.getPostId(), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 填充信息
|
||||||
|
return postList.stream().map(post -> {
|
||||||
|
PostVO postVO = PostVO.objToVo(post);
|
||||||
|
Long userId = post.getUserId();
|
||||||
|
User user = null;
|
||||||
|
if (userIdUserListMap.containsKey(userId)) {
|
||||||
|
user = userIdUserListMap.get(userId).get(0);
|
||||||
|
}
|
||||||
|
postVO.setUser(userService.getUserVO(user));
|
||||||
|
postVO.setHasThumb(postIdHasThumbMap.getOrDefault(post.getId(), false));
|
||||||
|
postVO.setHasFavour(postIdHasFavourMap.getOrDefault(post.getId(), false));
|
||||||
|
return postVO;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validPost(Post post, boolean add) {
|
public void validPost(Post post, boolean add) {
|
||||||
if (post == null) {
|
if (post == null) {
|
||||||
|
@ -8,9 +8,9 @@ spring:
|
|||||||
# todo 需替换配置
|
# todo 需替换配置
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/hebi
|
url: jdbc:mysql://110.40.62.21:3306/hebi
|
||||||
username: root
|
username: hebi
|
||||||
password: tianyinmiao
|
password: 123456
|
||||||
# Redis 配置
|
# Redis 配置
|
||||||
# todo 需替换配置
|
# todo 需替换配置
|
||||||
redis:
|
redis:
|
||||||
|
@ -8,9 +8,9 @@ spring:
|
|||||||
# todo 需替换配置
|
# todo 需替换配置
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/hebi
|
url: jdbc:mysql://110.40.62.21:3306/hebi
|
||||||
username: root
|
username: hebi
|
||||||
password: tianyinmiao
|
password: 123456
|
||||||
# Redis 配置
|
# Redis 配置
|
||||||
# todo 需替换配置
|
# todo 需替换配置
|
||||||
redis:
|
redis:
|
||||||
|
@ -21,9 +21,9 @@ spring:
|
|||||||
# todo 需替换配置
|
# todo 需替换配置
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/hebi
|
url: jdbc:mysql://110.40.62.21:3306/hebi
|
||||||
username: root
|
username: hebi
|
||||||
password: tianyinmiao
|
password: 123456
|
||||||
# Redis 配置
|
# Redis 配置
|
||||||
# todo 需替换配置,然后取消注释
|
# todo 需替换配置,然后取消注释
|
||||||
redis:
|
redis:
|
||||||
|
@ -23,3 +23,4 @@
|
|||||||
userId,createTime,updateTime,isDelete
|
userId,createTime,updateTime,isDelete
|
||||||
</sql>
|
</sql>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
<!--图表-->
|
@ -27,3 +27,4 @@
|
|||||||
on p.id = pf.postId ${ew.customSqlSegment}
|
on p.id = pf.postId ${ew.customSqlSegment}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
<!--点赞-->
|
@ -31,3 +31,4 @@
|
|||||||
where updateTime >= #{minUpdateTime}
|
where updateTime >= #{minUpdateTime}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
<!--帖子-->
|
BIN
src/test/.DS_Store
vendored
Normal file
BIN
src/test/.DS_Store
vendored
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user