| | |
| | | public Result esSearch(VideoEsQuery query) { |
| | | return videoService.esSearch(query); |
| | | } |
| | | |
| | | @PostMapping("/goods/similarly") |
| | | @ApiOperation(value = "挂相同商品的视频", notes = "挂相同商品的视频") |
| | | public Result goodsSimilarly(@RequestBody VideoQuery query) { |
| | | return videoService.recommendVideo(query); |
| | | } |
| | | } |
| | |
| | | @ApiModelProperty("文件原始名") |
| | | private String originalFileName; |
| | | |
| | | private String url; |
| | | |
| | | private String cover; |
| | | |
| | | } |
New file |
| | |
| | | package cn.lili.modules.lmk.domain.query; |
| | | |
| | | import cn.lili.base.AbsQuery; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author:xp |
| | | * @date:2025/7/2 10:08 |
| | | */ |
| | | @Data |
| | | @ApiModel("相同商品视频") |
| | | public class GoodsSimilarlyQuery extends AbsQuery { |
| | | |
| | | // TODO 查询挂了同一商品的视频不应该区分是推荐视频还是大健康,该字段只是先写在这,暂时不用 |
| | | @ApiModelProperty("视频类型") |
| | | private String videoType; |
| | | |
| | | @ApiModelProperty("商品id,这里用商品id而不是skuId") |
| | | private List<String> goodsIds; |
| | | |
| | | @ApiModelProperty("当前的视频id,查询时直接排除该视频") |
| | | private String currentVideoId; |
| | | } |
| | |
| | | @ApiModel(value = "Video查询参数", description = "视频内容查询参数") |
| | | public class VideoQuery extends AbsQuery { |
| | | |
| | | /* ----------------------------- author某作者的视频、collect某作者收藏的视频、like某作者点赞的视频 ------------------------------- */ |
| | | @ApiModelProperty("作者id") |
| | | private String authorId; |
| | | |
| | | @ApiModelProperty("视频来源:recommend推荐、author某作者的视频、collect某作者收藏的视频、like某作者点赞的视频") |
| | | @ApiModelProperty("视频来源:recommend推荐、author某作者的视频、collect某作者收藏的视频、like某作者点赞的视频、search搜索、goodsSimilarly查挂同一商品的视频") |
| | | private String videoFrom; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum |
| | |
| | | @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") |
| | | private String videoType = VideoTypeEnum.VIDEO.getValue(); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /* ----------------------------- search搜索 ------------------------------- */ |
| | | @ApiModelProperty("搜索视频的关键词") |
| | | private String keyword; |
| | | |
| | | /* ----------------------------- goodsSimilarly查挂同一商品的视频 ------------------------------- */ |
| | | @ApiModelProperty("商品id,这里用商品id而不是skuId") |
| | | private List<String> goodsIds; |
| | | |
| | | @ApiModelProperty("当前的视频id,查询时直接排除该视频") |
| | | private String currentVideoId; |
| | | } |
| | | |
| | |
| | | IPage managerPage(IPage page, @Param("query") ManagerVideoQuery query); |
| | | |
| | | /** |
| | | * 查出5个推荐视频 |
| | | * 查推荐视频 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | * @return |
| | | */ |
| | | List<VideoIndex> getEsPage(@Param("start") int start, @Param("pageSize") int pageSize); |
| | | |
| | | /** |
| | | * 查询挂了同一商品的视频 |
| | | * |
| | | * @param page |
| | | * @param goodsSimilarlyQuery |
| | | */ |
| | | IPage goodsSimilarlyPage(IPage page, @Param("query") GoodsSimilarlyQuery goodsSimilarlyQuery); |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | Result esSearch(VideoEsQuery query); |
| | | |
| | | } |
| | |
| | | baseMapper.getAuthorLikeVideoPage(page, query3); |
| | | break; |
| | | case "search": // 加载es搜索视频 |
| | | VideoEsQuery query4 = new VideoEsQuery(); |
| | | BeanUtils.copyProperties(query, query4); |
| | | query4.setPageNumber((int) query.getPageNumber()); |
| | | query4.setPageSize((int) query.getPageSize()); |
| | | return this.esSearch(query4); |
| | | VideoEsQuery videoEsQuery = new VideoEsQuery(); |
| | | BeanUtils.copyProperties(query, videoEsQuery); |
| | | videoEsQuery.setPageNumber((int) query.getPageNumber()); |
| | | videoEsQuery.setPageSize((int) query.getPageSize()); |
| | | return this.esSearch(videoEsQuery); |
| | | case "goodsSimilarly": |
| | | GoodsSimilarlyQuery goodsSimilarlyQuery = new GoodsSimilarlyQuery(); |
| | | BeanUtils.copyProperties(query, goodsSimilarlyQuery); |
| | | baseMapper.goodsSimilarlyPage(page, goodsSimilarlyQuery); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | }).collect(Collectors.toList()); |
| | | return Result.ok().data(vos).total(searchHits.getTotalHits()); |
| | | } |
| | | |
| | | } |
| | |
| | | ORDER BY |
| | | LV.create_time DESC |
| | | </select> |
| | | |
| | | <select id="goodsSimilarlyPage" resultMap="WxResultMap"> |
| | | SELECT |
| | | LV.author_id, |
| | | LV.cover_url, |
| | | LV.video_fit, |
| | | LV.video_duration, |
| | | LV.video_file_key, |
| | | LV.title, |
| | | LV.goods_view_num, |
| | | LV.goods_order_num, |
| | | LV.recommend, |
| | | LV.status, |
| | | LV.play_num, |
| | | LV.comment_num, |
| | | LV.collect_num, |
| | | LV.thumbs_up_num, |
| | | LV.weight, |
| | | LV.audit_pass_time, |
| | | LV.update_time, |
| | | LV.create_time, |
| | | LV.video_content_type, |
| | | LV.video_type, |
| | | LV.video_imgs, |
| | | LV.id, |
| | | CASE |
| | | WHEN LM.nick_name IS NOT NULL THEN LM.nick_name |
| | | WHEN LM.nick_name IS NULL THEN (SELECT nick_name FROM li_admin_user WHERE id = LV.author_id) |
| | | ELSE '' |
| | | END as authorName, |
| | | CASE |
| | | WHEN LM.face IS NOT NULL THEN LM.face |
| | | WHEN LM.face IS NULL THEN (SELECT avatar FROM li_admin_user WHERE id = LV.author_id) |
| | | ELSE '' |
| | | END as authorAvatar |
| | | FROM |
| | | lmk_video LV |
| | | INNER JOIN lmk_video_goods LVG ON LVG.video_id = LV.id AND LVG.goods_id in <foreach collection="query.goodsIds" open="(" item="goodsId" close=")" separator=",">#{goodsId}</foreach> |
| | | LEFT JOIN li_member LM ON LV.author_id = LM.id |
| | | WHERE |
| | | LV.delete_flag = 0 AND LV.status = '1' AND LV.id != #{query.currentVideoId} |
| | | ORDER BY |
| | | LV.create_time DESC |
| | | </select> |
| | | |
| | | <select id="recommendHealthVideo" resultMap="WxResultMap"> |
| | | SELECT |
| | | LV.author_id, |