You've already forked FrameTour-BE
feat(video): 完善视频评价功能,增加问题机位和标签管理
- 新增VideoReviewSourceEnum枚举,定义评价来源类型(订单、渲染) - 添加LongListTypeHandler和StringListTypeHandler,处理数据库JSON字段与Java列表转换 - 修改VideoReviewEntity实体类,将机位评价改为问题机位ID列表和问题标签列表 - 创建AdminVideoReviewLogReqDTO和AdminVideoReviewLogRespDTO,实现管理后台评价日志查询 - 在VideoReviewController中增加管理后台分页查询评价日志接口 - 更新视频评价添加逻辑,验证来源参数并记录问题机位和标签信息 - 修改
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
package com.ycwl.basic.model.pc.videoreview.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 管理后台视频评价日志查询请求DTO
|
||||
*/
|
||||
@Data
|
||||
public class AdminVideoReviewLogReqDTO {
|
||||
|
||||
/**
|
||||
* 评价ID(可选,精确查询)
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 视频ID(可选)
|
||||
*/
|
||||
private Long videoId;
|
||||
|
||||
/**
|
||||
* 景区ID(可选)
|
||||
*/
|
||||
private Long scenicId;
|
||||
|
||||
/**
|
||||
* 评价人ID(可选)
|
||||
*/
|
||||
private Long creator;
|
||||
|
||||
/**
|
||||
* 评价人名称(可选,模糊查询)
|
||||
*/
|
||||
private String creatorName;
|
||||
|
||||
/**
|
||||
* 评分(可选,精确匹配)
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* 模板ID(可选)
|
||||
*/
|
||||
private Long templateId;
|
||||
|
||||
/**
|
||||
* 模板名称(可选,模糊查询)
|
||||
*/
|
||||
private String templateName;
|
||||
|
||||
/**
|
||||
* 是否有机位评价(可选)
|
||||
* true: 仅查询有机位评价的记录
|
||||
* false: 仅查询无机位评价的记录
|
||||
* null: 不限制
|
||||
*/
|
||||
private Boolean hasCameraRating;
|
||||
|
||||
/**
|
||||
* 问题机位ID(可选,筛选包含该机位ID的评价)
|
||||
* 任意一个问题机位匹配即可
|
||||
*/
|
||||
private Long problemDeviceId;
|
||||
|
||||
/**
|
||||
* 问题标签(可选,筛选包含该标签的评价)
|
||||
* 任意一个标签匹配即可
|
||||
*/
|
||||
private String problemTag;
|
||||
|
||||
/**
|
||||
* 来源(可选,筛选指定来源的评价)
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 页码(必填,默认1)
|
||||
*/
|
||||
private Integer pageNum = 1;
|
||||
|
||||
/**
|
||||
* 每页数量(必填,默认20)
|
||||
*/
|
||||
private Integer pageSize = 20;
|
||||
|
||||
/**
|
||||
* 排序字段(可选,默认create_time)
|
||||
* 可选值: create_time, rating, update_time, id
|
||||
*/
|
||||
private String orderBy = "create_time";
|
||||
|
||||
/**
|
||||
* 排序方向(可选,默认DESC)
|
||||
* 可选值: ASC, DESC
|
||||
*/
|
||||
private String orderDirection = "DESC";
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.ycwl.basic.model.pc.videoreview.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 管理后台视频评价日志响应DTO
|
||||
*/
|
||||
@Data
|
||||
public class AdminVideoReviewLogRespDTO {
|
||||
|
||||
/**
|
||||
* 评价ID
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 视频ID
|
||||
*/
|
||||
private Long videoId;
|
||||
|
||||
/**
|
||||
* 视频URL(关联查询)
|
||||
*/
|
||||
private String videoUrl;
|
||||
|
||||
/**
|
||||
* 模板ID(关联查询video表)
|
||||
*/
|
||||
private Long templateId;
|
||||
|
||||
/**
|
||||
* 模板名称(关联查询)
|
||||
*/
|
||||
private String templateName;
|
||||
|
||||
/**
|
||||
* 景区ID
|
||||
*/
|
||||
private Long scenicId;
|
||||
|
||||
/**
|
||||
* 景区名称(关联查询)
|
||||
*/
|
||||
private String scenicName;
|
||||
|
||||
/**
|
||||
* 评价人ID(管理员ID)
|
||||
*/
|
||||
private Long creator;
|
||||
|
||||
/**
|
||||
* 评价人名称(关联查询)
|
||||
*/
|
||||
private String creatorName;
|
||||
|
||||
/**
|
||||
* 评价人账号(关联查询,管理后台显示)
|
||||
*/
|
||||
private String creatorAccount;
|
||||
|
||||
/**
|
||||
* 购买评分 1-5
|
||||
*/
|
||||
private Integer rating;
|
||||
|
||||
/**
|
||||
* 文字评价内容
|
||||
*/
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 有问题的机位ID列表
|
||||
* 格式: [12345, 12346, 12347]
|
||||
*/
|
||||
private List<Long> problemDeviceIds;
|
||||
|
||||
/**
|
||||
* 问题机位数量(方便前端展示)
|
||||
*/
|
||||
private Integer problemDeviceCount;
|
||||
|
||||
/**
|
||||
* 问题标签列表
|
||||
* 格式: ["画面模糊", "抖动严重", "色彩异常"]
|
||||
*/
|
||||
private List<String> problemTags;
|
||||
|
||||
/**
|
||||
* 来源
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 来源ID
|
||||
* 用于溯源,关联订单ID或渲染任务ID等
|
||||
*/
|
||||
private Long sourceId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@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;
|
||||
|
||||
/**
|
||||
* 操作时长(创建到更新的时间差,单位:秒)
|
||||
*/
|
||||
private Long operationDuration;
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package com.ycwl.basic.model.pc.videoreview.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 新增视频评价请求DTO
|
||||
@@ -26,9 +26,28 @@ public class VideoReviewAddReqDTO {
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 机位评价JSON(可选)
|
||||
* 格式: {"12345": 5, "12346": 4}
|
||||
* key为机位ID,value为该机位的评分(1-5)
|
||||
* 有问题的机位ID列表(可选)
|
||||
* 格式: [12345, 12346, 12347]
|
||||
* 选择有问题的机位ID
|
||||
*/
|
||||
private Map<String, Integer> cameraPositionRating;
|
||||
private List<Long> problemDeviceIds;
|
||||
|
||||
/**
|
||||
* 问题标签列表(可选)
|
||||
* 格式: ["画面模糊", "抖动严重", "色彩异常"]
|
||||
* 可多选问题标签
|
||||
*/
|
||||
private List<String> problemTags;
|
||||
|
||||
/**
|
||||
* 来源(必填)
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 来源ID(可选)
|
||||
* 用于溯源,关联订单ID或渲染任务ID等
|
||||
*/
|
||||
private Long sourceId;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,24 @@ public class VideoReviewListReqDTO {
|
||||
*/
|
||||
private String keyword;
|
||||
|
||||
/**
|
||||
* 问题机位ID(可选,筛选包含该机位ID的评价)
|
||||
* 任意一个问题机位匹配即可
|
||||
*/
|
||||
private Long problemDeviceId;
|
||||
|
||||
/**
|
||||
* 问题标签(可选,筛选包含该标签的评价)
|
||||
* 任意一个标签匹配即可
|
||||
*/
|
||||
private String problemTag;
|
||||
|
||||
/**
|
||||
* 来源(可选,筛选指定来源的评价)
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 页码(必填,默认1)
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 视频评价详情响应DTO
|
||||
@@ -68,11 +68,28 @@ public class VideoReviewRespDTO {
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 机位评价JSON
|
||||
* 格式: {"12345": 5, "12346": 4}
|
||||
* key为机位ID,value为该机位的评分(1-5)
|
||||
* 有问题的机位ID列表
|
||||
* 格式: [12345, 12346, 12347]
|
||||
*/
|
||||
private Map<String, Integer> cameraPositionRating;
|
||||
private List<Long> problemDeviceIds;
|
||||
|
||||
/**
|
||||
* 问题标签列表
|
||||
* 格式: ["画面模糊", "抖动严重", "色彩异常"]
|
||||
*/
|
||||
private List<String> problemTags;
|
||||
|
||||
/**
|
||||
* 来源
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 来源ID
|
||||
* 用于溯源,关联订单ID或渲染任务ID等
|
||||
*/
|
||||
private Long sourceId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
|
||||
@@ -40,10 +40,10 @@ public class VideoReviewStatisticsRespDTO {
|
||||
private List<ScenicReviewRank> scenicRankList;
|
||||
|
||||
/**
|
||||
* 机位评价统计
|
||||
* key: 机位ID, value: 该机位的平均评分
|
||||
* 问题机位统计
|
||||
* key: 机位ID, value: 该机位被标记为问题的次数
|
||||
*/
|
||||
private Map<String, BigDecimal> cameraPositionAverage;
|
||||
private Map<Long, Long> problemDeviceStatistics;
|
||||
|
||||
/**
|
||||
* 景区评价排行内部类
|
||||
|
||||
@@ -4,12 +4,13 @@ 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 com.ycwl.basic.handler.LongListTypeHandler;
|
||||
import com.ycwl.basic.handler.StringListTypeHandler;
|
||||
import lombok.Data;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 视频评价实体类
|
||||
@@ -50,12 +51,32 @@ public class VideoReviewEntity {
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 机位评价JSON
|
||||
* 格式: {"12345": 5, "12346": 4}
|
||||
* key为机位ID,value为该机位的评分(1-5)
|
||||
* 有问题的机位ID列表
|
||||
* 格式: [12345, 12346, 12347]
|
||||
* 存储被标记为有问题的机位ID
|
||||
*/
|
||||
@TableField(typeHandler = MapTypeHandler.class, jdbcType = JdbcType.VARCHAR)
|
||||
private Map<String, Integer> cameraPositionRating;
|
||||
@TableField(typeHandler = LongListTypeHandler.class, jdbcType = JdbcType.VARCHAR)
|
||||
private List<Long> problemDeviceIds;
|
||||
|
||||
/**
|
||||
* 问题标签列表
|
||||
* 格式: ["画面模糊", "抖动严重", "色彩异常"]
|
||||
* 存储视频或机位的问题标签,可多选
|
||||
*/
|
||||
@TableField(typeHandler = StringListTypeHandler.class, jdbcType = JdbcType.VARCHAR)
|
||||
private List<String> problemTags;
|
||||
|
||||
/**
|
||||
* 来源
|
||||
* 固定值: ORDER(订单), RENDER(渲染)
|
||||
*/
|
||||
private String source;
|
||||
|
||||
/**
|
||||
* 来源ID
|
||||
* 用于溯源,关联订单ID或渲染任务ID等
|
||||
*/
|
||||
private Long sourceId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
|
||||
Reference in New Issue
Block a user