framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
framework/src/main/resources/mapper/lmk/VideoMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java | ●●●●● 补丁 | 查看 | 原始文档 | 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); } }