diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseChapterController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseChapterController.java index 9cf88d9..691b806 100644 --- a/src/main/java/com/greenorange/promotion/controller/course/CourseChapterController.java +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseChapterController.java @@ -121,15 +121,15 @@ public class CourseChapterController { } /** - * Web端管理员分页查询课程章节 + * Web端管理员根据课程id分页查询课程章节 * @param courseChapterQueryRequest 课程章节查询请求体 * @return 课程章节列表 */ @PostMapping("page") - @Operation(summary = "Web端管理员分页查询课程章节", description = "参数:课程章节查询请求体,权限:管理员,方法名:listCourseChapterByPage") + @Operation(summary = "Web端管理员根据课程id分页查询课程章节", description = "参数:课程章节查询请求体,权限:管理员,方法名:listCourseChapterByPageByCourseId") @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "课程章节管理", content = "Web端管理员分页查询课程章节") - public BaseResponse> listCourseChapterByPage(@Valid @RequestBody CourseChapterQueryRequest courseChapterQueryRequest) { + @SysLog(title = "课程章节管理", content = "Web端管理员根据课程id分页查询课程章节") + public BaseResponse> listCourseChapterByPageByCourseId(@Valid @RequestBody CourseChapterQueryRequest courseChapterQueryRequest) { long current = courseChapterQueryRequest.getCurrent(); long pageSize = courseChapterQueryRequest.getPageSize(); QueryWrapper queryWrapper = courseChapterService.getQueryWrapper(courseChapterQueryRequest); diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseController.java index f5cb332..e2f5407 100644 --- a/src/main/java/com/greenorange/promotion/controller/course/CourseController.java +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseController.java @@ -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.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.greenorange.promotion.annotation.RequiresPermission; import com.greenorange.promotion.annotation.SysLog; import com.greenorange.promotion.common.BaseResponse; +import com.greenorange.promotion.common.ErrorCode; import com.greenorange.promotion.common.ResultUtils; 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.CommonRequest; 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.entity.Course; 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.CourseDetailVO; 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.RestController; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @@ -71,7 +78,7 @@ public class CourseController { @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) @SysLog(title = "课程管理", content = "小程序端用户查看热门课程列表") public BaseResponse> miniQueryHotCourseList() { - List courseList = courseService.list(); + List courseList = commonService.findByFieldEqTargetField(Course::getIsShelves, true, courseService); // 降序排序并取前四个元素 courseList = courseList.stream() .sorted((course1, course2) -> Integer.compare(course2.getOrderCount(), course1.getOrderCount())) // 降序排序 @@ -93,8 +100,8 @@ public class CourseController { @SysLog(title = "课程管理", content = "小程序端用户根据类别查看课程列表") public BaseResponse> miniQueryCourseByType(@Valid @RequestBody CommonStringRequest commonStringRequest) { String courseType = commonStringRequest.getTemplateString(); - LambdaQueryWrapper lambdaQueryWrapper = commonService.buildQueryWrapperByField(Course::getType, courseType, courseService); - List courseList = courseService.list(lambdaQueryWrapper); + Map, Object> fieldConditions = Map.of(Course::getType, courseType, Course::getIsShelves, true); + List courseList = commonService.findByFieldEqTargetFields(fieldConditions, courseService); List courseCardVOS = commonService.convertList(courseList, CourseCardVO.class); return ResultUtils.success(courseCardVOS); } @@ -167,6 +174,9 @@ public class CourseController { @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @SysLog(title = "课程管理", content = "web端管理员添加课程") public BaseResponse 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); courseService.save(course); return ResultUtils.success(course.getId()); @@ -240,6 +250,25 @@ public class CourseController { 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 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端管理员分页查询课程 * @param courseQueryRequest 课程查询请求体 diff --git a/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java index 0c10d7e..df6f711 100644 --- a/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java +++ b/src/main/java/com/greenorange/promotion/controller/course/CourseOrderController.java @@ -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 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 课程订单列表 diff --git a/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java b/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java index 4cde7cb..747798c 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/course/CourseQueryRequest.java @@ -33,6 +33,13 @@ public class CourseQueryRequest extends PageRequest implements Serializable { private String type; + /** + * 是否上架(true:上架,false:下架) + */ + @Schema(description = "是否上架(true:上架,false:下架)", example = "true") + private Boolean isShelves; + + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java index ebafd95..006c82a 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/courseChapter/CourseChapterQueryRequest.java @@ -5,6 +5,7 @@ import com.greenorange.promotion.model.enums.PreviewPermissionEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; @@ -32,6 +33,14 @@ public class CourseChapterQueryRequest extends PageRequest implements Serializab @Schema(description = "试看权限[全集试看,部分试看,关闭,开启]", example = "全集试看") private String permissions; + /** + * 课程id + */ + @NotNull(message = "课程id不能为null") + @Min(value = 1, message = "课程id不能小于1") + @Schema(description = "课程id", example = "1") + private Long courseId; + @Serial private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/greenorange/promotion/model/entity/Course.java b/src/main/java/com/greenorange/promotion/model/entity/Course.java index 60754a0..36ffc81 100644 --- a/src/main/java/com/greenorange/promotion/model/entity/Course.java +++ b/src/main/java/com/greenorange/promotion/model/entity/Course.java @@ -72,6 +72,11 @@ public class Course implements Serializable { */ private BigDecimal secondLevelRate; + /** + * 是否上架(true:上架,false:下架) + */ + private Boolean isShelves; + /** * 是否删除 */ diff --git a/src/main/java/com/greenorange/promotion/model/vo/course/CourseVO.java b/src/main/java/com/greenorange/promotion/model/vo/course/CourseVO.java index 31de0b2..44add9c 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/course/CourseVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/course/CourseVO.java @@ -80,6 +80,12 @@ public class CourseVO implements Serializable { @Schema(description = "二级佣金比例(%)", example = "5") private BigDecimal secondLevelRate; + /** + * 是否上架(true:上架,false:下架) + */ + @Schema(description = "是否上架(true:上架,false:下架)", example = "true") + private Boolean isShelves; + @Serial private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/greenorange/promotion/service/course/impl/CourseChapterServiceImpl.java b/src/main/java/com/greenorange/promotion/service/course/impl/CourseChapterServiceImpl.java index 0906500..22fc60b 100644 --- a/src/main/java/com/greenorange/promotion/service/course/impl/CourseChapterServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/course/impl/CourseChapterServiceImpl.java @@ -25,11 +25,13 @@ public class CourseChapterServiceImpl extends ServiceImpl getQueryWrapper(CourseChapterQueryRequest courseChapterQueryRequest) { + Long courseId = courseChapterQueryRequest.getCourseId(); String name = courseChapterQueryRequest.getName(); String permissions = courseChapterQueryRequest.getPermissions(); String sortField = courseChapterQueryRequest.getSortField(); String sortOrder = courseChapterQueryRequest.getSortOrder(); QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("courseId", courseId); queryWrapper.eq(StringUtils.isNotBlank(name), "name", name); queryWrapper.eq(StringUtils.isNotBlank(permissions), "permissions", permissions); queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), sortField); diff --git a/src/main/java/com/greenorange/promotion/service/course/impl/CourseServiceImpl.java b/src/main/java/com/greenorange/promotion/service/course/impl/CourseServiceImpl.java index d01bcbb..64c87df 100644 --- a/src/main/java/com/greenorange/promotion/service/course/impl/CourseServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/course/impl/CourseServiceImpl.java @@ -8,6 +8,7 @@ import com.greenorange.promotion.model.entity.Course; import com.greenorange.promotion.service.course.CourseService; import com.greenorange.promotion.mapper.CourseMapper; import com.greenorange.promotion.utils.SqlUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -28,11 +29,13 @@ public class CourseServiceImpl extends ServiceImpl public QueryWrapper getQueryWrapper(CourseQueryRequest courseQueryRequest) { String name = courseQueryRequest.getName(); String type = courseQueryRequest.getType(); + Boolean isShelves = courseQueryRequest.getIsShelves(); String sortField = courseQueryRequest.getSortField(); String sortOrder = courseQueryRequest.getSortOrder(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(name), "name", name); 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); return queryWrapper; } diff --git a/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java b/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java index 0106285..126aca7 100644 --- a/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/wechat/impl/WechatGetQrcodeServiceImpl.java @@ -14,6 +14,7 @@ import com.greenorange.promotion.common.ErrorCode; import com.greenorange.promotion.config.WxAccessToken; import com.greenorange.promotion.constant.SystemConstant; import com.greenorange.promotion.exception.BusinessException; +import com.greenorange.promotion.mapper.UserInfoMapper; import com.greenorange.promotion.model.dto.CommonRequest; import com.greenorange.promotion.model.entity.Course; import com.greenorange.promotion.model.entity.FileInfo; @@ -72,7 +73,7 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService { private FileInfoService fileInfoService; @Resource - private UserInfoService userInfoService; + private UserInfoMapper userInfoMapper; @Resource private CourseService courseService; @@ -214,7 +215,7 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService { } // 获取用户邀请码 Long userId = (Long) request.getAttribute("userId"); - UserInfo userInfo = userInfoService.getById(userId); + UserInfo userInfo = userInfoMapper.selectById(userId); String invitationCode = userInfo.getInvitationCode(); // 获取课程信息 Long id = commonRequest.getId();