xiangpei
2025-07-03 ae2f87e9ac4e81e6479c726634411f4634d494f4
相似视频
7个文件已修改
1个文件已添加
130 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -148,4 +148,10 @@
    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);
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
@@ -28,4 +28,8 @@
    @ApiModelProperty("文件原始名")
    private String originalFileName;
    private String url;
    private String cover;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java
New file
@@ -0,0 +1,27 @@
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;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
@@ -21,11 +21,16 @@
@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
@@ -33,7 +38,21 @@
    @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;
}
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -41,7 +41,7 @@
    IPage managerPage(IPage page, @Param("query") ManagerVideoQuery query);
    /**
     * 查出5个推荐视频
     * 查推荐视频
     *
     * @return
     */
@@ -155,4 +155,12 @@
     * @return
     */
    List<VideoIndex> getEsPage(@Param("start") int start, @Param("pageSize") int pageSize);
    /**
     * 查询挂了同一商品的视频
     *
     * @param page
     * @param goodsSimilarlyQuery
     */
    IPage goodsSimilarlyPage(IPage page, @Param("query") GoodsSimilarlyQuery goodsSimilarlyQuery);
}
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -297,4 +297,5 @@
     * @return
     */
    Result esSearch(VideoEsQuery query);
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -492,11 +492,16 @@
                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;
        }
@@ -1210,4 +1215,5 @@
        }).collect(Collectors.toList());
        return Result.ok().data(vos).total(searchHits.getTotalHits());
    }
}
framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -243,6 +243,51 @@
        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,