xiangpei
2025-06-04 434ea8cef0d23ee20b6047631ef4afa371b43eb3
视频主页接口完善、视频地址暂时写死
7个文件已修改
3个文件已添加
292 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/AuthorVideoQuery.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoOption.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -103,4 +103,10 @@
    public Result homePageInfoEdit(@RequestBody @Validated VideoHomePageInfoForm form) {
        return videoService.homePageInfoEdit(form);
    }
    @GetMapping("/wx/detail/{id}")
    @ApiOperation(value = "小程序-获取视频详情", notes = "小程序-获取视频详情")
    public Result wxDetail(@PathVariable("id") String id) {
        return videoService.wxDetail(id);
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/AuthorVideoQuery.java
@@ -18,5 +18,11 @@
    @ApiModelProperty("作者id")
    private String authorId;
    /**
     * 是否是本人查询
     */
    @ApiModelProperty(hidden = true)
    private Boolean authorSelf;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoOption.java
New file
@@ -0,0 +1,27 @@
package cn.lili.modules.lmk.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
/**
 * @author:xp
 * @date:2025/6/4 14:23
 */
@Data
@AllArgsConstructor
public class VideoOption {
    /**
     * 命令标识
     *
     */
    private String command;
    /**
     * 展示值
     *
     */
    private String label;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java
New file
@@ -0,0 +1,62 @@
package cn.lili.modules.lmk.domain.vo;
import cn.lili.base.AbsVo;
import cn.lili.modules.lmk.domain.entity.Video;
import cn.lili.modules.lmk.domain.form.WxVideoTagForm;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.lang.NonNull;
import java.util.List;
/**
 * 视频内容展示
 *
 * @author xp
 * @since 2025-05-16
 */
@Data
@ApiModel(value = "视频内容响应数据", description = "视频内容响应数据")
public class WxEditVideoVO extends AbsVo {
    /** 图片封面 */
    @ApiModelProperty("图片封面")
    private String coverUrl;
    private String coverFileKey;
    /** 视频地址 */
    @ApiModelProperty("视频地址")
    private String videoFileKey;
    private String videoUrl;
    @ApiModelProperty("视频标签")
    private List<WxVideoTagForm> tags;
    /** 视频填充模式 */
    @ApiModelProperty("视频填充模式")
    private String videoFit;
    /** 视频标题 */
    @ApiModelProperty("视频标题")
    private String title;
    /** 商品信息 */
    @ApiModelProperty("商品信息")
    private String goodsId;
    @ApiModelProperty("视频长度:秒")
    private Long videoDuration;
    public static WxEditVideoVO getVoByEntity(@NonNull Video entity, WxEditVideoVO vo) {
        if(vo == null) {
            vo = new WxEditVideoVO();
        }
        BeanUtils.copyProperties(entity, vo);
        return vo;
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
@@ -68,6 +68,13 @@
    @ApiModelProperty("评论数")
    private Long commentNum;
    /** 视频拥有的操作 */
    @ApiModelProperty("视频支持的操作")
    private List<VideoOption> options;
    @ApiModelProperty("视频状态")
    private String status;
    public static WxVideoVO getVoByEntity(@NonNull Video entity, WxVideoVO vo) {
        if(vo == null) {
framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java
New file
@@ -0,0 +1,72 @@
package cn.lili.modules.lmk.enums.general;
import cn.lili.modules.lmk.domain.vo.VideoOption;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * 视频支持的操作
 *
 * @author:xp
 * @date:2025/5/14 10:30
 */
@Getter
public enum VideoSupportOpEnum {
    UP("UP", "发布"),
    DOWN("DOWN", "下架"),
    DELETE("DELETE", "删除"),
    EDIT("EDIT", "编辑"),
    ;
    private final String value;
    private final String desc;
    VideoSupportOpEnum(String value, String desc) {
        this.value = value;
        this.desc = desc;
    }
    /**
     * 根据视频状态获取到对应的操作
     *
     * @param status
     * @return
     */
    public static List<VideoOption> getVideoOpByStatus(String status) {
        if (VideoStatusEnum.AUDITING.getValue().equals(status)) {
            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DELETE.value, DELETE.desc));
        } else if (VideoStatusEnum.DISABLE.getValue().equals(status)) {
            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(UP.value, UP.desc), new VideoOption(DELETE.value, DELETE.desc));
        } else if (VideoStatusEnum.PUBLISHED.getValue().equals(status)) {
            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DOWN.value, DOWN.desc), new VideoOption(DELETE.value, DELETE.desc));
        } else if (VideoStatusEnum.REJECT.getValue().equals(status)) {
            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DELETE.value, DELETE.desc));
        }
        return new ArrayList<>();
    }
    /**
     * 获取含义
     *
     * @param value
     * @return
     */
    public static String getDescByValue(String value) {
        if (StringUtils.isBlank(value)) {
            return null;
        }
        for (VideoSupportOpEnum e : VideoSupportOpEnum.values()){
            if (value.equals(e.getValue())) {
                return e.getDesc();
            }
        }
        return null;
    }
}
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -3,17 +3,17 @@
import cn.lili.modules.lmk.domain.entity.Video;
import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
import cn.lili.modules.lmk.domain.query.VideoQuery;
import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
import cn.lili.modules.lmk.domain.vo.VideoAccountVO;
import cn.lili.modules.lmk.domain.vo.WxVideoVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.lili.modules.lmk.domain.vo.VideoVO;
import cn.lili.modules.lmk.domain.form.VideoForm;
import cn.lili.modules.lmk.domain.query.VideoQuery;
import java.util.List;
import cn.lili.modules.lmk.domain.vo.WxEditVideoVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * 视频内容 Mapper 接口
@@ -104,4 +104,12 @@
     * @param query
     */
    IPage getAuthorCollectVideoPage(IPage page, @Param("query") AuthorVideoQuery query);
    /**
     * 小程序-视频详情
     *
     * @param id
     * @return
     */
    WxEditVideoVO wxDetail(@Param("id") String id);
}
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -175,4 +175,12 @@
     * @return
     */
    Result homePageInfoEdit(VideoHomePageInfoForm form);
    /**
     * 小程序-视频详情
     *
     * @param id
     * @return
     */
    Result wxDetail(String id);
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -8,6 +8,7 @@
import cn.lili.modules.lmk.domain.vo.*;
import cn.lili.modules.lmk.enums.general.TagCreateTypeEnum;
import cn.lili.modules.lmk.enums.general.VideoStatusEnum;
import cn.lili.modules.lmk.enums.general.VideoSupportOpEnum;
import cn.lili.modules.lmk.enums.general.ViewTypeEnum;
import cn.lili.modules.lmk.service.*;
import cn.lili.modules.member.entity.dos.FootPrint;
@@ -56,6 +57,7 @@
    private final MySubscribeService mySubscribeService;
    private final MemberService memberService;
    private final VideoAccountService videoAccountService;
    /**
     * 添加
@@ -130,7 +132,7 @@
        Assert.notNull(vo, "记录不存在");
        List<SimpleVideoTagVO> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(id));
        vo.setTagList(tags);
        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
//        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
        return Result.ok().data(vo);
    }
@@ -276,7 +278,7 @@
            case "collect":
                AuthorVideoQuery query2 = new AuthorVideoQuery();
                query2.setAuthorId(query.getAuthorId());
                baseMapper.getAuthorVideoPage(page, query2);
                baseMapper.getAuthorCollectVideoPage(page, query2);
                break;
            default:
                break;
@@ -295,7 +297,8 @@
                v.setGoods(new VideoGoodsVO());
                v.setTagList(tagMap.get(v.getId()));
                v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
//                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
                v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
            });
@@ -352,10 +355,13 @@
    @Override
    public Result getAuthorVideoPage(AuthorVideoQuery query) {
        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
        query.setAuthorSelf(UserContext.getCurrentUserId().equals(query.getAuthorId()));
        baseMapper.getAuthorVideoPage(page, query);
        for (WxVideoVO vo : page.getRecords()) {
            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoUrl()));
//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
            vo.setOptions(VideoSupportOpEnum.getVideoOpByStatus(vo.getStatus()));
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
@@ -366,7 +372,8 @@
        baseMapper.getAuthorCollectVideoPage(page, query);
        for (WxVideoVO vo : page.getRecords()) {
            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoUrl()));
//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
            vo.setCollected(Boolean.TRUE);
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
@@ -386,4 +393,26 @@
                .update();
        return Result.ok("保存成功");
    }
    @Override
    public Result wxDetail(String id) {
        WxEditVideoVO vo = baseMapper.wxDetail(id);
        if (Objects.isNull(vo)) {
            return Result.error("视频不存在");
        }
        vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
//        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
        vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
        List<WxVideoTagForm> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(vo.getId()))
                .stream()
                .map(i -> {
                    WxVideoTagForm tag = new WxVideoTagForm();
                    tag.setTagName(i.getTagName());
                    tag.setId(i.getId());
                    return tag;
                })
                .collect(Collectors.toList());
        vo.setTags(tags);
        return Result.ok().data(vo);
    }
}
framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -37,6 +37,7 @@
        <result column="title" property="title" />
        <result column="collect_num" property="collectNum" />
        <result column="comment_num" property="commentNum" />
        <result column="status" property="status" />
    </resultMap>
@@ -253,7 +254,11 @@
            lmk_video LV
                LEFT JOIN li_member LM ON LV.author_id = LM.id
        WHERE
            LV.delete_flag = 0 AND LV.status = '1' AND LV.author_id = #{query.authorId}
            LV.delete_flag = 0
            <if test="!query.authorSelf">
                AND LV.status = '1'
            </if>
            AND LV.author_id = #{query.authorId}
        ORDER BY
            LV.collect_num DESC
    </select>
@@ -290,4 +295,42 @@
            LMC.create_time DESC
    </select>
    <!-- 微信视频编辑详情 -->
    <resultMap id="WxEditResultMap" type="cn.lili.modules.lmk.domain.vo.WxEditVideoVO">
        <id column="id" property="id"/>
        <result column="cover_url" property="coverFileKey" />
        <result column="video_file_key" property="videoFileKey" />
        <result column="video_fit" property="videoFit" />
        <result column="title" property="title" />
        <result column="video_duration" property="videoDuration" />
        <result column="goods_id" property="goodsId" />
    </resultMap>
    <select id="wxDetail" resultMap="WxEditResultMap">
        SELECT
            LV.author_id,
            LV.cover_url,
            LV.video_fit,
            LV.video_duration,
            LV.video_file_key,
            LV.title,
            LV.goods_id,
            LV.goods_view_num,
            LV.goods_order_num,
            LV.recommend,
            LV.status,
            LV.play_num,
            LV.comment_num,
            LV.collect_num,
            LV.weight,
            LV.audit_pass_time,
            LV.update_time,
            LV.id
        FROM
            lmk_video LV
        WHERE
            LV.delete_flag = 0 AND LV.id = #{id}
    </select>
</mapper>