peng
2025-06-13 b3bdc131a50234de457d1a7515758b2a169ba038
insert insert 完成大健康后台页面接口(增删改查/上架/下架)
5个文件已修改
3个文件已添加
278 ■■■■■ 已修改文件
framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java
New file
@@ -0,0 +1,54 @@
package cn.lili.modules.lmk.domain.form;
import cn.lili.common.security.context.UserContext;
import cn.lili.group.Add;
import cn.lili.group.Update;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
 * 大健康视频内容
 *
 * @author wp
 * @since 2025-06-12
 */
@Data
@ApiModel(value = "大健康视频内容", description = "大健康视频内容")
public class HealthVideoForm extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** 作者id */
    @ApiModelProperty(value = "主键id")
    private String id;
    @ApiModelProperty(value = "图片封面")
    /** 图片封面 */
    @NotBlank(message = "封面图片不能为空", groups = {Add.class, Update.class})
    private String coverUrl;
    @TableField("video_file_key")
    /** 视频地址 */
    @NotBlank(message = "视频地址不能为空", groups = {Add.class, Update.class})
    private String videoFileKey;
    /** 视频长度(秒) */
//    @NotNull(message = "视频长度不能为空", groups = {Add.class, Update.class})
    private Long videoDuration;
    /** 视频标题 */
    @NotBlank(message = "标题不能为空", groups = {Add.class, Update.class})
    private String title;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java
New file
@@ -0,0 +1,39 @@
package cn.lili.modules.lmk.domain.query;
import cn.lili.base.AbsQuery;
import cn.lili.modules.lmk.enums.general.VideoTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * 视频内容查询
 *
 * @author xp
 * @since 2025-05-16
 */
@Data
@ApiModel(value = "平台端Video查询参数", description = "视频内容查询参数")
public class HealthVideoQuery extends AbsQuery {
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("视频标签")
    private List<String> tagList;
    @ApiModelProperty("作者")
    private String authorId;
    @ApiModelProperty("状态")
    private String status;
    /**
     * @see VideoTypeEnum
     */
    @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频")
    private String videoType = VideoTypeEnum.HEALTH.getValue();
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
@@ -30,6 +30,10 @@
    @ApiModelProperty("图片封面")
    private String coverUrl;
    /** 封面显示地址 */
    @ApiModelProperty("封面显示地址")
    private String coverShowUrl;
    /** 视频地址 */
    @ApiModelProperty("视频地址")
    private String videoFileKey;
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -2,6 +2,7 @@
import cn.lili.modules.lmk.domain.entity.Video;
import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
import cn.lili.modules.lmk.domain.query.VideoQuery;
import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
@@ -112,4 +113,12 @@
     * @return
     */
    WxEditVideoVO wxDetail(@Param("id") String id);
    /**
     * 大健康视频分页
     *
     * @param page
     * @param query
     */
    IPage healthPage(IPage page, @Param("query") HealthVideoQuery query);
}
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -3,6 +3,7 @@
import cn.lili.modules.lmk.domain.entity.Video;
import cn.lili.modules.lmk.domain.form.*;
import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -183,4 +184,33 @@
     * @return
     */
    Result wxDetail(String id);
    /**
     * 大健康视频发布
     *
     * @param form
     * @return
     */
    Result healthVideo(HealthVideoForm form);
    /**
     * 修改大健康视频
     *
     * @param form
     * @return
     */
    Result updateHealthVideo(HealthVideoForm form);
    /**
     * 大健康视频列表
     *
     * @param query
     * @return
     */
    Result healthPage(HealthVideoQuery query);
    /**
     * 删除大健康视频
     * @param id 主键id
     * @return
     */
    Result delHealth(String id);
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -4,6 +4,7 @@
import cn.lili.modules.lmk.domain.entity.*;
import cn.lili.modules.lmk.domain.form.*;
import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
import cn.lili.modules.lmk.domain.vo.*;
import cn.lili.modules.lmk.enums.general.*;
@@ -413,4 +414,60 @@
        vo.setTags(tags);
        return Result.ok().data(vo);
    }
    @Override
    public Result healthVideo(HealthVideoForm form) {
        Video video = new Video();
        BeanUtils.copyProperties(form, video);
        video.setAuthorId(UserContext.getCurrentUserId());
        video.setVideoType(VideoTypeEnum.HEALTH.getValue());
        //设置填充模式 保持比例,完整显示
        video.setVideoFit("contain");
        video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue());
        video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
        baseMapper.insert(video);
        return Result.ok("添加成功");
    }
    @Override
    public Result healthPage(HealthVideoQuery query) {
        IPage<VideoVO> page = PageUtil.getPage(query, VideoVO.class);
        // 1. 先查出视频信息
        baseMapper.healthPage(page, query);
        // 2. 单独查出标签信息
        if (page.getTotal() > 0) {
            Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
                    page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
            // 3. 获取视频临时访问地址、设置视频标签
            page.getRecords().forEach(v -> {
                v.setTagList(tagMap.get(v.getId()));
                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                v.setCoverShowUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
            });
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    @Override
    public Result updateHealthVideo(HealthVideoForm form) {
        Video entity = baseMapper.selectById(form.getId());
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
        baseMapper.updateById(entity);
        return Result.ok("修改成功");
    }
    @Override
    public Result delHealth(String id) {
        Video entity = baseMapper.selectById(id);
        Assert.notNull(entity, "记录不存在");
        String videoType = entity.getVideoType();
        if (!VideoTypeEnum.HEALTH.getValue().equals(videoType)) {
            log.error("删除非大健康视频视频id为------->"+id);
            return Result.error("删除失败");
        }
        baseMapper.deleteById(id);
        return Result.ok("删除成功");
    }
}
framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -350,5 +350,44 @@
        WHERE
            LV.delete_flag = 0 AND LV.id = #{id}
    </select>
    <select id="healthPage" resultMap="BaseResultMap">
        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.collect_num,
        LV.comment_num,
        LV.weight,
        LV.audit_pass_time,
        LV.update_time,
        LV.video_content_type,
        LV.video_type,
        LV.video_imgs,
        LV.id,
        LM.nick_name as authorName
        FROM
        lmk_video LV
        LEFT JOIN li_member LM ON LV.author_id = LM.id
        <if test="query.tagList != null and query.tagList.size > 0">
            INNER JOIN (
            SELECT DISTINCT video_id
            FROM lmk_video_tag_ref
            WHERE video_tag_id IN
            <foreach collection="query.tagList" open="(" item="tagId" close=")" separator=",">#{tagId}</foreach>
            ) AS LVT ON LV.id = LVT.video_id
        </if>
        WHERE
        LV.delete_flag = 0 AND LV.video_type = #{query.videoType}
        <if test="query.title != null and query.title != ''">AND LV.title LIKE CONCAT('%', #{query.title}, '%')</if>
        <if test="query.authorId != null and query.authorId != ''">AND LV.author_id = #{query.authorId}</if>
        <if test="query.status != null and query.status != ''">AND LV.status = #{query.status}</if>
    </select>
</mapper>
manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java
New file
@@ -0,0 +1,44 @@
package cn.lili.controller.lmk;
import cn.lili.base.Result;
import cn.lili.group.Add;
import cn.lili.group.Update;
import cn.lili.modules.lmk.domain.form.HealthVideoForm;
import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
import cn.lili.modules.lmk.service.VideoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Validated
@RequiredArgsConstructor
@Api(value = "大健康", tags = "大健康")
@RestController
@RequestMapping("/manager/lkm/health")
public class HealthController {
    private final VideoService videoService;
    @PostMapping("/healthVideo")
    @ApiOperation(value = "大健康视频发布", notes = "大健康视频发布")
    public Result healthVideo(@RequestBody @Validated(Add.class) HealthVideoForm form) {
        return videoService.healthVideo(form);
    }
    @PostMapping("/updateHealthVideo")
    @ApiOperation(value = "大健康视频发布", notes = "大健康视频发布")
    public Result updateHealthVideo(@RequestBody @Validated(Update.class) HealthVideoForm form) {
        return videoService.updateHealthVideo(form);
    }
    @PostMapping("/page")
    @ApiOperation(value = "大健康视频列表", notes = "大健康视频列表")
    public Result page(@RequestBody HealthVideoQuery query) {
        return videoService.healthPage(query);
    }
    //删除大厨神视频
    @PostMapping("/del/{id}")
    @ApiOperation(value = "删除大厨神视频", notes = "删除大厨神视频")
    public Result delHealth(@PathVariable("id") String id) {
        return videoService.delHealth(id);
    }
}