feat(video): 新增视频评价功能及购买状态查询

- 移除TaskController上的@Deprecated注解
- 在VideoController中新增/checkBuyStatus接口用于查询视频购买状态
- 新增VideoReviewController控制器,提供评价管理功能
- 新增MapTypeHandler用于处理Map类型与JSON字段的转换
- 在VideoMapper中增加countBuyRecordByVideoId方法查询视频购买记录
- 新增视频评价相关实体类、DTO及Mapper接口
- 实现VideoReviewService服务类,支持评价新增、分页查询、统计分析和Excel导出
- 在VideoServiceImpl中实现checkVideoBuyStatus方法
- 修改VideoMapper.xml,关联task表并查询task_params字段
- 新增VideoReviewMapper.xml配置文件,实现评价相关SQL查询
This commit is contained in:
2025-11-17 23:37:04 +08:00
parent ebf05ab189
commit 755ba1153e
18 changed files with 1057 additions and 5 deletions

View File

@@ -45,6 +45,10 @@ public class VideoRespVO {
*/
// 任务id
private Long taskId;
/**
* 任务参数,JSON字符串
*/
private String taskParams;
/**
* 执行任务的机器ID,render_worker.id
*/

View File

@@ -0,0 +1,33 @@
package com.ycwl.basic.model.pc.videoreview.dto;
import lombok.Data;
import java.util.Map;
/**
* 新增视频评价请求DTO
*/
@Data
public class VideoReviewAddReqDTO {
/**
* 视频ID(必填)
*/
private Long videoId;
/**
* 购买评分 1-5(必填)
*/
private Integer rating;
/**
* 文字评价内容(可选)
*/
private String content;
/**
* 机位快速评价JSON(可选)
* 格式: {"角度":5,"清晰度":4,"构图":5}
*/
private Map<String, Integer> cameraPositionRating;
}

View File

@@ -0,0 +1,77 @@
package com.ycwl.basic.model.pc.videoreview.dto;
import lombok.Data;
/**
* 视频评价列表查询请求DTO
*/
@Data
public class VideoReviewListReqDTO {
/**
* 视频ID(可选)
*/
private Long videoId;
/**
* 景区ID(可选)
*/
private Long scenicId;
/**
* 评价人ID(可选)
*/
private Long creator;
/**
* 评分(可选,精确匹配)
*/
private Integer rating;
/**
* 最小评分(可选,范围查询)
*/
private Integer minRating;
/**
* 最大评分(可选,范围查询)
*/
private Integer maxRating;
/**
* 开始时间(可选,格式: yyyy-MM-dd HH:mm:ss)
*/
private String startTime;
/**
* 结束时间(可选,格式: yyyy-MM-dd HH:mm:ss)
*/
private String endTime;
/**
* 关键词搜索(可选,搜索评价内容)
*/
private String keyword;
/**
* 页码(必填,默认1)
*/
private Integer pageNum = 1;
/**
* 每页数量(必填,默认10)
*/
private Integer pageSize = 10;
/**
* 排序字段(可选,默认create_time)
* 可选值: create_time, rating, update_time
*/
private String orderBy = "create_time";
/**
* 排序方向(可选,默认DESC)
* 可选值: ASC, DESC
*/
private String orderDirection = "DESC";
}

View File

@@ -0,0 +1,76 @@
package com.ycwl.basic.model.pc.videoreview.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* 视频评价详情响应DTO
*/
@Data
public class VideoReviewRespDTO {
/**
* 评价ID
*/
private Long id;
/**
* 视频ID
*/
private Long videoId;
/**
* 视频URL(关联查询)
*/
private String videoUrl;
/**
* 景区ID
*/
private Long scenicId;
/**
* 景区名称(关联查询)
*/
private String scenicName;
/**
* 评价人ID(管理员ID)
*/
private Long creator;
/**
* 评价人名称(关联查询)
*/
private String creatorName;
/**
* 购买评分 1-5
*/
private Integer rating;
/**
* 文字评价内容
*/
private String content;
/**
* 机位快速评价JSON
*/
private Map<String, Integer> cameraPositionRating;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}

View File

@@ -0,0 +1,73 @@
package com.ycwl.basic.model.pc.videoreview.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 视频评价统计分析响应DTO
*/
@Data
public class VideoReviewStatisticsRespDTO {
/**
* 总评价数
*/
private Long totalCount;
/**
* 平均评分
*/
private BigDecimal averageRating;
/**
* 评分分布
* key: 评分(1-5), value: 该评分的评价数量
*/
private Map<Integer, Long> ratingDistribution;
/**
* 最近7天评价趋势
* key: 日期(yyyy-MM-dd), value: 该日期的评价数量
*/
private Map<String, Long> recentTrend;
/**
* 景区评价排行(前10)
*/
private List<ScenicReviewRank> scenicRankList;
/**
* 机位评价维度统计
* key: 维度名称, value: 平均分
*/
private Map<String, BigDecimal> cameraPositionAverage;
/**
* 景区评价排行内部类
*/
@Data
public static class ScenicReviewRank {
/**
* 景区ID
*/
private Long scenicId;
/**
* 景区名称
*/
private String scenicName;
/**
* 评价数量
*/
private Long reviewCount;
/**
* 平均评分
*/
private BigDecimal averageRating;
}
}

View File

@@ -0,0 +1,68 @@
package com.ycwl.basic.model.pc.videoreview.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 com.ycwl.basic.handler.MapTypeHandler;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import java.util.Date;
import java.util.Map;
/**
* 视频评价实体类
*/
@Data
@TableName("video_review")
public class VideoReviewEntity {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 视频ID
*/
private Long videoId;
/**
* 景区ID
*/
private Long scenicId;
/**
* 评价人ID(管理员ID)
*/
private Long creator;
/**
* 购买评分 1-5
*/
private Integer rating;
/**
* 文字评价内容
*/
private String content;
/**
* 机位快速评价JSON
* 格式: {"角度":5,"清晰度":4,"构图":5}
*/
@TableField(typeHandler = MapTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private Map<String, Integer> cameraPositionRating;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}