添加的功能:小程序端用户查看当前课程推广码

修改的bug: Web端管理员根据课程id分页查询课程章节
This commit is contained in:
2025-06-24 22:34:58 +08:00
parent ad6eb74170
commit 3d8fd5591e
7 changed files with 181 additions and 5 deletions

View File

@ -20,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.CourseQrcodeApply;
import com.greenorange.promotion.model.entity.ProjectCommission; 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;
@ -27,6 +28,7 @@ import com.greenorange.promotion.model.vo.course.CourseVO;
import com.greenorange.promotion.model.vo.courseChapter.CourseChapterVO; import com.greenorange.promotion.model.vo.courseChapter.CourseChapterVO;
import com.greenorange.promotion.service.common.CommonService; import com.greenorange.promotion.service.common.CommonService;
import com.greenorange.promotion.service.course.CourseChapterService; import com.greenorange.promotion.service.course.CourseChapterService;
import com.greenorange.promotion.service.course.CourseQrcodeApplyService;
import com.greenorange.promotion.service.course.CourseService; import com.greenorange.promotion.service.course.CourseService;
import com.greenorange.promotion.service.wechat.WechatGetQrcodeService; import com.greenorange.promotion.service.wechat.WechatGetQrcodeService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -67,6 +69,9 @@ public class CourseController {
@Resource @Resource
private WechatGetQrcodeService wechatGetQrcodeService; private WechatGetQrcodeService wechatGetQrcodeService;
@Resource
private CourseQrcodeApplyService courseQrcodeApplyService;
/** /**
@ -160,6 +165,27 @@ public class CourseController {
} }
/**
* 小程序端用户查看当前课程推广码
* @param commonRequest 课程id
* @return 课程推广码(view值)
*/
@PostMapping("verify")
@Operation(summary = "小程序端用户查看当前课程推广码", description = "参数课程id权限管理员方法名verifyIsApplyCourseQrcode")
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "课程管理", content = "小程序端用户查看当前课程推广码")
public BaseResponse<String> verifyIsApplyCourseQrcode(@Valid @RequestBody CommonRequest commonRequest, HttpServletRequest request) {
Long userId = (Long) request.getAttribute("userId");
Long courseId = commonRequest.getId();
LambdaQueryWrapper<CourseQrcodeApply> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CourseQrcodeApply::getUserId, userId).eq(CourseQrcodeApply::getCourseId, courseId);
CourseQrcodeApply courseQrcodeApply = courseQrcodeApplyService.getOne(lambdaQueryWrapper);
ThrowUtils.throwIf(courseQrcodeApply == null, ErrorCode.OPERATION_ERROR, "当前用户尚未申请该课程的推广码");
return ResultUtils.success(courseQrcodeApply.getCourseQrcode());
}

View File

@ -0,0 +1,18 @@
package com.greenorange.promotion.mapper;
import com.greenorange.promotion.model.entity.CourseQrcodeApply;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 35880
* @description 针对表【course_qrcode_apply(课程推广码申请表)】的数据库操作Mapper
* @createDate 2025-06-24 22:10:39
* @Entity com.greenorange.promotion.model.entity.CourseQrcodeApply
*/
public interface CourseQrcodeApplyMapper extends BaseMapper<CourseQrcodeApply> {
}

View File

@ -0,0 +1,63 @@
package com.greenorange.promotion.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 课程推广码申请表
* @TableName course_qrcode_apply
*/
@TableName(value ="course_qrcode_apply")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CourseQrcodeApply implements Serializable {
/**
* 课程推广码申请id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 课程id
*/
private Long courseId;
/**
* 课程推广码(view值)
*/
private String courseQrcode;
/**
* 是否删除
*/
private Integer isDelete;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,13 @@
package com.greenorange.promotion.service.course;
import com.greenorange.promotion.model.entity.CourseQrcodeApply;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 35880
* @description 针对表【course_qrcode_apply(课程推广码申请表)】的数据库操作Service
* @createDate 2025-06-24 22:10:39
*/
public interface CourseQrcodeApplyService extends IService<CourseQrcodeApply> {
}

View File

@ -0,0 +1,22 @@
package com.greenorange.promotion.service.course.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.greenorange.promotion.model.entity.CourseQrcodeApply;
import com.greenorange.promotion.service.course.CourseQrcodeApplyService;
import com.greenorange.promotion.mapper.CourseQrcodeApplyMapper;
import org.springframework.stereotype.Service;
/**
* @author 35880
* @description 针对表【course_qrcode_apply(课程推广码申请表)】的数据库操作Service实现
* @createDate 2025-06-24 22:10:39
*/
@Service
public class CourseQrcodeApplyServiceImpl extends ServiceImpl<CourseQrcodeApplyMapper, CourseQrcodeApply>
implements CourseQrcodeApplyService{
}

View File

@ -17,8 +17,10 @@ import com.greenorange.promotion.exception.BusinessException;
import com.greenorange.promotion.mapper.UserInfoMapper; 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.CourseQrcodeApply;
import com.greenorange.promotion.model.entity.FileInfo; import com.greenorange.promotion.model.entity.FileInfo;
import com.greenorange.promotion.model.entity.UserInfo; import com.greenorange.promotion.model.entity.UserInfo;
import com.greenorange.promotion.service.course.CourseQrcodeApplyService;
import com.greenorange.promotion.service.course.CourseService; import com.greenorange.promotion.service.course.CourseService;
import com.greenorange.promotion.service.file.FileInfoService; import com.greenorange.promotion.service.file.FileInfoService;
import com.greenorange.promotion.service.userInfo.UserInfoService; import com.greenorange.promotion.service.userInfo.UserInfoService;
@ -78,6 +80,9 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
@Resource @Resource
private CourseService courseService; private CourseService courseService;
@Resource
private CourseQrcodeApplyService courseQrcodeApplyService;
/** /**
* 获取接口调用凭据 * 获取接口调用凭据
@ -218,16 +223,17 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
UserInfo userInfo = userInfoMapper.selectById(userId); UserInfo userInfo = userInfoMapper.selectById(userId);
String invitationCode = userInfo.getInvitationCode(); String invitationCode = userInfo.getInvitationCode();
// 获取课程信息 // 获取课程信息
Long id = commonRequest.getId(); Long courseId = commonRequest.getId();
Course course = courseService.getById(id); Course course = courseService.getById(courseId);
String courseTitle = course.getName(); String courseTitle = course.getName();
String originalPrice = String.valueOf(course.getOriginPrice()); String originalPrice = String.valueOf(course.getOriginPrice());
String discountPrice = String.valueOf(course.getDiscountPrice()); String discountPrice = String.valueOf(course.getDiscountPrice());
String discountText = "元券后价"; String discountText = "元券后价";
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("page", "pages/loginModule/register/register"); param.put("page", "pages/loginModule/register/register");
param.put("scene", "invitationCode=" + invitationCode + "&courseId=" + id); param.put("scene", "invitationCode=" + invitationCode + "&courseId=" + courseId);
param.put("width", 430); param.put("width", 430);
param.put("check_path", false); param.put("check_path", false);
param.put("env_version", "develop"); param.put("env_version", "develop");
@ -239,7 +245,6 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
.execute() .execute()
.bodyBytes(); .bodyBytes();
String FontType = "Microsoft YaHei UI"; String FontType = "Microsoft YaHei UI";
int FontStyle = Font.PLAIN; int FontStyle = Font.PLAIN;
@ -331,7 +336,16 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
.hashValue(hashValue) .hashValue(hashValue)
.build(); .build();
fileInfoService.save(fileInfo); fileInfoService.save(fileInfo);
return biz + "-" + view;
String viewValue = biz + "-" + view;
// 保存课程推广码申请记录
CourseQrcodeApply courseQrcodeApply = CourseQrcodeApply.builder()
.userId(userId)
.courseId(courseId)
.courseQrcode(viewValue)
.build();
courseQrcodeApplyService.save(courseQrcodeApply);
return viewValue;
} }

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.greenorange.promotion.mapper.CourseQrcodeApplyMapper">
<resultMap id="BaseResultMap" type="com.greenorange.promotion.model.entity.CourseQrcodeApply">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="userId" column="userId" jdbcType="BIGINT"/>
<result property="courseId" column="courseId" jdbcType="BIGINT"/>
<result property="isDelete" column="isDelete" jdbcType="TINYINT"/>
<result property="createTime" column="createTime" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,userId,courseId,
isDelete,createTime,updateTime
</sql>
</mapper>