You've already forked FrameTour-BE
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:
@@ -45,6 +45,10 @@ public class VideoRespVO {
|
||||
*/
|
||||
// 任务id
|
||||
private Long taskId;
|
||||
/**
|
||||
* 任务参数,JSON字符串
|
||||
*/
|
||||
private String taskParams;
|
||||
/**
|
||||
* 执行任务的机器ID,render_worker.id
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user