修复课程模块的bug

This commit is contained in:
2025-06-24 21:53:12 +08:00
parent 1f7e1211cf
commit ad6eb74170
10 changed files with 71 additions and 26 deletions

View File

@ -121,15 +121,15 @@ public class CourseChapterController {
} }
/** /**
* Web端管理员分页查询课程章节 * Web端管理员根据课程id分页查询课程章节
* @param courseChapterQueryRequest 课程章节查询请求体 * @param courseChapterQueryRequest 课程章节查询请求体
* @return 课程章节列表 * @return 课程章节列表
*/ */
@PostMapping("page") @PostMapping("page")
@Operation(summary = "Web端管理员分页查询课程章节", description = "参数课程章节查询请求体权限管理员方法名listCourseChapterByPage") @Operation(summary = "Web端管理员根据课程id分页查询课程章节", description = "参数课程章节查询请求体权限管理员方法名listCourseChapterByPageByCourseId")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "课程章节管理", content = "Web端管理员分页查询课程章节") @SysLog(title = "课程章节管理", content = "Web端管理员根据课程id分页查询课程章节")
public BaseResponse<Page<CourseChapterVO>> listCourseChapterByPage(@Valid @RequestBody CourseChapterQueryRequest courseChapterQueryRequest) { public BaseResponse<Page<CourseChapterVO>> listCourseChapterByPageByCourseId(@Valid @RequestBody CourseChapterQueryRequest courseChapterQueryRequest) {
long current = courseChapterQueryRequest.getCurrent(); long current = courseChapterQueryRequest.getCurrent();
long pageSize = courseChapterQueryRequest.getPageSize(); long pageSize = courseChapterQueryRequest.getPageSize();
QueryWrapper<CourseChapter> queryWrapper = courseChapterService.getQueryWrapper(courseChapterQueryRequest); QueryWrapper<CourseChapter> queryWrapper = courseChapterService.getQueryWrapper(courseChapterQueryRequest);

View File

@ -2,12 +2,16 @@ package com.greenorange.promotion.controller.course;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.greenorange.promotion.annotation.RequiresPermission; import com.greenorange.promotion.annotation.RequiresPermission;
import com.greenorange.promotion.annotation.SysLog; import com.greenorange.promotion.annotation.SysLog;
import com.greenorange.promotion.common.BaseResponse; import com.greenorange.promotion.common.BaseResponse;
import com.greenorange.promotion.common.ErrorCode;
import com.greenorange.promotion.common.ResultUtils; import com.greenorange.promotion.common.ResultUtils;
import com.greenorange.promotion.constant.UserConstant; import com.greenorange.promotion.constant.UserConstant;
import com.greenorange.promotion.exception.BusinessException;
import com.greenorange.promotion.exception.ThrowUtils;
import com.greenorange.promotion.model.dto.CommonBatchRequest; import com.greenorange.promotion.model.dto.CommonBatchRequest;
import com.greenorange.promotion.model.dto.CommonRequest; import com.greenorange.promotion.model.dto.CommonRequest;
import com.greenorange.promotion.model.dto.CommonStringRequest; import com.greenorange.promotion.model.dto.CommonStringRequest;
@ -16,6 +20,7 @@ import com.greenorange.promotion.model.dto.course.CourseQueryRequest;
import com.greenorange.promotion.model.dto.course.CourseUpdateRequest; import com.greenorange.promotion.model.dto.course.CourseUpdateRequest;
import com.greenorange.promotion.model.entity.Course; import com.greenorange.promotion.model.entity.Course;
import com.greenorange.promotion.model.entity.CourseChapter; import com.greenorange.promotion.model.entity.CourseChapter;
import com.greenorange.promotion.model.entity.ProjectCommission;
import com.greenorange.promotion.model.vo.course.CourseCardVO; import com.greenorange.promotion.model.vo.course.CourseCardVO;
import com.greenorange.promotion.model.vo.course.CourseDetailVO; import com.greenorange.promotion.model.vo.course.CourseDetailVO;
import com.greenorange.promotion.model.vo.course.CourseVO; import com.greenorange.promotion.model.vo.course.CourseVO;
@ -35,7 +40,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -71,7 +78,7 @@ public class CourseController {
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "课程管理", content = "小程序端用户查看热门课程列表") @SysLog(title = "课程管理", content = "小程序端用户查看热门课程列表")
public BaseResponse<List<CourseCardVO>> miniQueryHotCourseList() { public BaseResponse<List<CourseCardVO>> miniQueryHotCourseList() {
List<Course> courseList = courseService.list(); List<Course> courseList = commonService.findByFieldEqTargetField(Course::getIsShelves, true, courseService);
// 降序排序并取前四个元素 // 降序排序并取前四个元素
courseList = courseList.stream() courseList = courseList.stream()
.sorted((course1, course2) -> Integer.compare(course2.getOrderCount(), course1.getOrderCount())) // 降序排序 .sorted((course1, course2) -> Integer.compare(course2.getOrderCount(), course1.getOrderCount())) // 降序排序
@ -93,8 +100,8 @@ public class CourseController {
@SysLog(title = "课程管理", content = "小程序端用户根据类别查看课程列表") @SysLog(title = "课程管理", content = "小程序端用户根据类别查看课程列表")
public BaseResponse<List<CourseCardVO>> miniQueryCourseByType(@Valid @RequestBody CommonStringRequest commonStringRequest) { public BaseResponse<List<CourseCardVO>> miniQueryCourseByType(@Valid @RequestBody CommonStringRequest commonStringRequest) {
String courseType = commonStringRequest.getTemplateString(); String courseType = commonStringRequest.getTemplateString();
LambdaQueryWrapper<Course> lambdaQueryWrapper = commonService.buildQueryWrapperByField(Course::getType, courseType, courseService); Map<SFunction<Course, ?>, Object> fieldConditions = Map.of(Course::getType, courseType, Course::getIsShelves, true);
List<Course> courseList = courseService.list(lambdaQueryWrapper); List<Course> courseList = commonService.findByFieldEqTargetFields(fieldConditions, courseService);
List<CourseCardVO> courseCardVOS = commonService.convertList(courseList, CourseCardVO.class); List<CourseCardVO> courseCardVOS = commonService.convertList(courseList, CourseCardVO.class);
return ResultUtils.success(courseCardVOS); return ResultUtils.success(courseCardVOS);
} }
@ -167,6 +174,9 @@ public class CourseController {
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "课程管理", content = "web端管理员添加课程") @SysLog(title = "课程管理", content = "web端管理员添加课程")
public BaseResponse<Long> addCourse(@Valid @RequestBody CourseAddRequest courseAddRequest) { public BaseResponse<Long> addCourse(@Valid @RequestBody CourseAddRequest courseAddRequest) {
BigDecimal firstLevelRate = courseAddRequest.getFirstLevelRate();
BigDecimal secondLevelRate = courseAddRequest.getSecondLevelRate();
ThrowUtils.throwIf(firstLevelRate.compareTo(secondLevelRate) < 0, ErrorCode.PARAMS_ERROR, "一级佣金比例不能小于二级佣金比例");
Course course = commonService.copyProperties(courseAddRequest, Course.class); Course course = commonService.copyProperties(courseAddRequest, Course.class);
courseService.save(course); courseService.save(course);
return ResultUtils.success(course.getId()); return ResultUtils.success(course.getId());
@ -240,6 +250,25 @@ public class CourseController {
return ResultUtils.success(courseVO); return ResultUtils.success(courseVO);
} }
/**
* web端管理员上架课程
* @param commonRequest 课程id
* @return 课程信息
*/
@PostMapping("isShelves")
@Operation(summary = "web端管理员上架课程", description = "参数课程查询请求体权限管理员方法名updateCourseShelvesStatus")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "课程管理", content = "web端管理员上架课程")
public BaseResponse<Boolean> updateCourseShelvesStatus(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId();
Course course = courseService.getById(id);
course.setIsShelves(!course.getIsShelves());
courseService.updateById(course);
return ResultUtils.success(true);
}
/** /**
* Web端管理员分页查询课程 * Web端管理员分页查询课程
* @param courseQueryRequest 课程查询请求体 * @param courseQueryRequest 课程查询请求体

View File

@ -103,23 +103,6 @@ public class CourseOrderController {
} }
/**
* 小程序端用户在提交订单页中显示课程信息
* @param commonRequest 课程id
* @return 是否添加成功
*/
@PostMapping("show/info")
@Operation(summary = "小程序端用户在提交订单页中显示课程信息", description = "参数订单id权限管理员方法名showCourseInfo")
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "课程订单管理", content = "小程序端用户在提交订单页中显示课程信息")
public BaseResponse<CourseCardVO> showCourseInfo(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId();
Course course = courseService.getById(id);
CourseCardVO courseCardVO = commonService.copyProperties(course, CourseCardVO.class);
return ResultUtils.success(courseCardVO);
}
/** /**
* 小程序端用户查询课程订单列表 * 小程序端用户查询课程订单列表
* @return 课程订单列表 * @return 课程订单列表

View File

@ -33,6 +33,13 @@ public class CourseQueryRequest extends PageRequest implements Serializable {
private String type; private String type;
/**
* 是否上架(true:上架false:下架)
*/
@Schema(description = "是否上架(true:上架false:下架)", example = "true")
private Boolean isShelves;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@ -5,6 +5,7 @@ import com.greenorange.promotion.model.enums.PreviewPermissionEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -32,6 +33,14 @@ public class CourseChapterQueryRequest extends PageRequest implements Serializab
@Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看")
private String permissions; private String permissions;
/**
* 课程id
*/
@NotNull(message = "课程id不能为null")
@Min(value = 1, message = "课程id不能小于1")
@Schema(description = "课程id", example = "1")
private Long courseId;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -72,6 +72,11 @@ public class Course implements Serializable {
*/ */
private BigDecimal secondLevelRate; private BigDecimal secondLevelRate;
/**
* 是否上架(true:上架false:下架)
*/
private Boolean isShelves;
/** /**
* 是否删除 * 是否删除
*/ */

View File

@ -80,6 +80,12 @@ public class CourseVO implements Serializable {
@Schema(description = "二级佣金比例(%", example = "5") @Schema(description = "二级佣金比例(%", example = "5")
private BigDecimal secondLevelRate; private BigDecimal secondLevelRate;
/**
* 是否上架(true:上架false:下架)
*/
@Schema(description = "是否上架(true:上架false:下架)", example = "true")
private Boolean isShelves;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -25,11 +25,13 @@ public class CourseChapterServiceImpl extends ServiceImpl<CourseChapterMapper, C
*/ */
@Override @Override
public QueryWrapper<CourseChapter> getQueryWrapper(CourseChapterQueryRequest courseChapterQueryRequest) { public QueryWrapper<CourseChapter> getQueryWrapper(CourseChapterQueryRequest courseChapterQueryRequest) {
Long courseId = courseChapterQueryRequest.getCourseId();
String name = courseChapterQueryRequest.getName(); String name = courseChapterQueryRequest.getName();
String permissions = courseChapterQueryRequest.getPermissions(); String permissions = courseChapterQueryRequest.getPermissions();
String sortField = courseChapterQueryRequest.getSortField(); String sortField = courseChapterQueryRequest.getSortField();
String sortOrder = courseChapterQueryRequest.getSortOrder(); String sortOrder = courseChapterQueryRequest.getSortOrder();
QueryWrapper<CourseChapter> queryWrapper = new QueryWrapper<>(); QueryWrapper<CourseChapter> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("courseId", courseId);
queryWrapper.eq(StringUtils.isNotBlank(name), "name", name); queryWrapper.eq(StringUtils.isNotBlank(name), "name", name);
queryWrapper.eq(StringUtils.isNotBlank(permissions), "permissions", permissions); queryWrapper.eq(StringUtils.isNotBlank(permissions), "permissions", permissions);
queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField); queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField);

View File

@ -8,6 +8,7 @@ import com.greenorange.promotion.model.entity.Course;
import com.greenorange.promotion.service.course.CourseService; import com.greenorange.promotion.service.course.CourseService;
import com.greenorange.promotion.mapper.CourseMapper; import com.greenorange.promotion.mapper.CourseMapper;
import com.greenorange.promotion.utils.SqlUtils; import com.greenorange.promotion.utils.SqlUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -28,11 +29,13 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course>
public QueryWrapper<Course> getQueryWrapper(CourseQueryRequest courseQueryRequest) { public QueryWrapper<Course> getQueryWrapper(CourseQueryRequest courseQueryRequest) {
String name = courseQueryRequest.getName(); String name = courseQueryRequest.getName();
String type = courseQueryRequest.getType(); String type = courseQueryRequest.getType();
Boolean isShelves = courseQueryRequest.getIsShelves();
String sortField = courseQueryRequest.getSortField(); String sortField = courseQueryRequest.getSortField();
String sortOrder = courseQueryRequest.getSortOrder(); String sortOrder = courseQueryRequest.getSortOrder();
QueryWrapper<Course> queryWrapper = new QueryWrapper<>(); QueryWrapper<Course> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(name), "name", name); queryWrapper.eq(StringUtils.isNotBlank(name), "name", name);
queryWrapper.eq(StringUtils.isNotBlank(type), "type", type); queryWrapper.eq(StringUtils.isNotBlank(type), "type", type);
queryWrapper.eq(ObjectUtils.isEmpty(isShelves), "isShelves", isShelves);
queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField); queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField);
return queryWrapper; return queryWrapper;
} }

View File

@ -14,6 +14,7 @@ import com.greenorange.promotion.common.ErrorCode;
import com.greenorange.promotion.config.WxAccessToken; import com.greenorange.promotion.config.WxAccessToken;
import com.greenorange.promotion.constant.SystemConstant; import com.greenorange.promotion.constant.SystemConstant;
import com.greenorange.promotion.exception.BusinessException; import com.greenorange.promotion.exception.BusinessException;
import com.greenorange.promotion.mapper.UserInfoMapper;
import com.greenorange.promotion.model.dto.CommonRequest; import com.greenorange.promotion.model.dto.CommonRequest;
import com.greenorange.promotion.model.entity.Course; import com.greenorange.promotion.model.entity.Course;
import com.greenorange.promotion.model.entity.FileInfo; import com.greenorange.promotion.model.entity.FileInfo;
@ -72,7 +73,7 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
private FileInfoService fileInfoService; private FileInfoService fileInfoService;
@Resource @Resource
private UserInfoService userInfoService; private UserInfoMapper userInfoMapper;
@Resource @Resource
private CourseService courseService; private CourseService courseService;
@ -214,7 +215,7 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
} }
// 获取用户邀请码 // 获取用户邀请码
Long userId = (Long) request.getAttribute("userId"); Long userId = (Long) request.getAttribute("userId");
UserInfo userInfo = userInfoService.getById(userId); UserInfo userInfo = userInfoMapper.selectById(userId);
String invitationCode = userInfo.getInvitationCode(); String invitationCode = userInfo.getInvitationCode();
// 获取课程信息 // 获取课程信息
Long id = commonRequest.getId(); Long id = commonRequest.getId();