buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -1,27 +1,21 @@ package cn.lili.controller.lmk; import cn.lili.base.AbsQuery; import cn.lili.group.Update; import cn.lili.group.Add; import cn.lili.modules.lmk.domain.form.VideoFootPrintForm; import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm; import cn.lili.modules.lmk.domain.form.WxVideoForm; import cn.lili.modules.lmk.domain.query.AuthorVideoQuery; import cn.lili.modules.member.entity.dos.FootPrint; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import cn.lili.modules.lmk.service.VideoService; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.form.VideoForm; import cn.lili.modules.lmk.domain.query.VideoQuery; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; /** * 视频内容 前端控制器 @@ -40,13 +34,13 @@ @PostMapping("/publish") @ApiOperation(value = "发布视频", notes = "发布视频") public Result publish(@RequestBody @Validated({Add.class}) VideoForm form) { public Result publish(@RequestBody @Validated({Add.class}) WxVideoForm form) { return videoService.publish(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") public Result update(@RequestBody @Validated(Update.class) VideoForm form) { public Result update(@RequestBody @Validated(Update.class) WxVideoForm form) { return videoService.update(form); } buyer-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java
@@ -1,20 +1,13 @@ package cn.lili.controller.lmk; import cn.lili.base.Result; import cn.lili.group.Update; import cn.lili.modules.lmk.domain.form.VideoForm; import cn.lili.modules.lmk.domain.query.VideoQuery; import cn.lili.modules.lmk.domain.query.WxVideoTagQuery; import cn.lili.modules.lmk.service.VideoService; import cn.lili.modules.lmk.service.VideoTagService; 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.*; import javax.validation.constraints.NotEmpty; import java.util.List; /** * 视频标签 前端控制器 framework/src/main/java/cn/lili/cos/CosSTS.java
@@ -36,5 +36,6 @@ @ApiModelProperty("region") private String region; @ApiModelProperty("端点,用于拼接filekey直接预览") private String endpoint; } framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java
File was renamed from framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java @@ -9,14 +9,13 @@ import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import org.springframework.lang.NonNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.ArrayList; import java.util.Date; import java.util.List; /** @@ -27,7 +26,7 @@ */ @Data @ApiModel(value = "Video表单", description = "视频内容表单") public class VideoForm extends AbsForm { public class WxVideoForm extends AbsForm { @NotBlank(message = "视频不能为空", groups = {Add.class, Update.class}) @@ -41,6 +40,13 @@ @ApiModelProperty("视频封面") @NotBlank(message = "视频封面不能为空", groups = {Add.class, Update.class}) private String cover; @ApiModelProperty("视频内容类型:视频、图片") @NotBlank(message = "视频类型不能为空") private String videoContentType; @ApiModelProperty("图片列表,如果videoContentType是图片,则必须传值") private List<String> videoImgs; @ApiModelProperty("视频标签") @Length(max = 5, message = "最多只能添加五个标签") @@ -60,7 +66,7 @@ @Valid private FileInfoForm fileInfo; public static Video getEntityByForm(@NonNull VideoForm form, Video entity) { public static Video getEntityByForm(@NonNull WxVideoForm form, Video entity) { if(entity == null) { entity = new Video(); } framework/src/main/java/cn/lili/modules/lmk/domain/query/AuthorVideoQuery.java
@@ -1,6 +1,7 @@ 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; @@ -24,5 +25,10 @@ @ApiModelProperty(hidden = true) private Boolean authorSelf; /** * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum */ @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") private String videoType = VideoTypeEnum.VIDEO.getValue(); } framework/src/main/java/cn/lili/modules/lmk/domain/query/ManagerVideoQuery.java
@@ -1,6 +1,7 @@ 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; @@ -29,5 +30,10 @@ @ApiModelProperty("状态") private String status; /** * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum */ @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") private String videoType = VideoTypeEnum.VIDEO.getValue(); } framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
@@ -2,6 +2,8 @@ import cn.lili.base.AbsQuery; import java.util.List; import cn.lili.modules.lmk.enums.general.VideoTypeEnum; import org.springframework.lang.NonNull; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -25,5 +27,10 @@ @ApiModelProperty("视频来源:recommend推荐、author某作者的视频、collect某作者收藏的视频") private String videoFrom; /** * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum */ @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") private String videoType = VideoTypeEnum.VIDEO.getValue(); } framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoContentTypeEnum.java
New file @@ -0,0 +1,46 @@ package cn.lili.modules.lmk.enums.general; import lombok.Getter; import org.apache.commons.lang3.StringUtils; /** * 视频内容类型 * * @author:xp * @date:2025/5/14 10:30 */ @Getter public enum VideoContentTypeEnum { VIDEO("video", "视频"), IMG("img", "图片"), ; private final String value; private final String desc; VideoContentTypeEnum(String value, String desc) { this.value = value; this.desc = desc; } /** * 获取含义 * * @param value * @return */ public static String getDescByValue(String value) { if (StringUtils.isBlank(value)) { return null; } for (VideoContentTypeEnum e : VideoContentTypeEnum.values()){ if (value.equals(e.getValue())) { return e.getDesc(); } } return null; } } framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoTypeEnum.java
New file @@ -0,0 +1,47 @@ package cn.lili.modules.lmk.enums.general; import lombok.Getter; import org.apache.commons.lang3.StringUtils; /** * 视频类型 * * @author:xp * @date:2025/5/14 10:30 */ @Getter public enum VideoTypeEnum { VIDEO("video", "视频"), HEALTH("health", "大健康"), COOK("cook", "神厨"), ; private final String value; private final String desc; VideoTypeEnum(String value, String desc) { this.value = value; this.desc = desc; } /** * 获取含义 * * @param value * @return */ public static String getDescByValue(String value) { if (StringUtils.isBlank(value)) { return null; } for (VideoTypeEnum e : VideoTypeEnum.values()){ if (value.equals(e.getValue())) { return e.getDesc(); } } return null; } } framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -49,7 +49,7 @@ * * @return */ IPage recommendVideo(IPage page); IPage recommendVideo(IPage page, @Param("query") VideoQuery query); /** * 批量更新视频收藏数量 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -23,14 +23,14 @@ * @param form * @return */ Result add(VideoForm form); Result add(WxVideoForm form); /** * 修改 * @param form * @return */ Result update(VideoForm form); Result update(WxVideoForm form); /** * 批量删除 @@ -72,7 +72,7 @@ * @param form * @return */ Result publish(VideoForm form); Result publish(WxVideoForm form); /** * 平台端视频分页 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -6,10 +6,7 @@ import cn.lili.modules.lmk.domain.query.AuthorVideoQuery; import cn.lili.modules.lmk.domain.query.ManagerVideoQuery; 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.enums.general.*; import cn.lili.modules.lmk.service.*; import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.Member; @@ -65,8 +62,8 @@ * @return */ @Override public Result add(VideoForm form) { Video entity = VideoForm.getEntityByForm(form, null); public Result add(WxVideoForm form) { Video entity = WxVideoForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } @@ -77,7 +74,7 @@ * @return */ @Override public Result update(VideoForm form) { public Result update(WxVideoForm form) { Video entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 @@ -151,12 +148,13 @@ @Override @Transactional(rollbackFor = Exception.class) public Result publish(VideoForm form) { public Result publish(WxVideoForm form) { // 1.保存视频 Video video = VideoForm.getEntityByForm(form, null); Video video = WxVideoForm.getEntityByForm(form, null); video.setAuthorId(UserContext.getCurrentUserId()); video.setStatus(VideoStatusEnum.AUDITING.getValue()); video.setCoverUrl(form.getCover()); video.setVideoType(VideoTypeEnum.VIDEO.getValue()); baseMapper.insert(video); // 2.处理标签 List<VideoTagRef> videoTagRefs = form.getTags().stream().map(tag -> { @@ -268,7 +266,7 @@ IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class); switch (query.getVideoFrom()) { case "recommend": baseMapper.recommendVideo(page); baseMapper.recommendVideo(page, query); break; case "author": AuthorVideoQuery query1 = new AuthorVideoQuery(); framework/src/main/java/cn/lili/utils/COSUtil.java
@@ -114,6 +114,7 @@ cosSTS.setStsEndTime(cosSTS.getStsStartTime() + cosConfigProperty.getDurationSeconds() - 30); cosSTS.setBucket(cosConfigProperty.getBucket()); cosSTS.setRegion(cosConfigProperty.getRegion()); cosSTS.setEndpoint(cosConfigProperty.getEndpoint()); return cosSTS; } catch (Exception e) { e.printStackTrace(); framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -141,7 +141,7 @@ ) AS LVT ON LV.id = LVT.video_id </if> WHERE LV.delete_flag = 0 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> @@ -176,7 +176,7 @@ lmk_video LV LEFT JOIN li_member LM ON LV.author_id = LM.id WHERE LV.delete_flag = 0 AND LV.status = '1' LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType} </select> @@ -272,6 +272,7 @@ AND LV.status = '1' </if> AND LV.author_id = #{query.authorId} AND LV.video_type = #{query.videoType} ORDER BY LV.collect_num DESC </select> @@ -305,7 +306,7 @@ INNER JOIN lmk_video LV ON LMC.ref_id = LV.id AND LV.delete_flag = 0 AND LV.status = '1' LEFT JOIN li_member LM ON LV.author_id = LM.id WHERE LMC.delete_flag = 0 AND LMC.user_id = #{query.authorId} AND LMC.collect_type = 'video' LMC.delete_flag = 0 AND LMC.user_id = #{query.authorId} AND LMC.collect_type = 'video' AND LV.video_type = #{query.videoType} ORDER BY LMC.create_time DESC </select> manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -5,20 +5,16 @@ import cn.lili.modules.lmk.domain.form.VideoAuditingForm; import cn.lili.modules.lmk.domain.form.VideoDownForm; import cn.lili.modules.lmk.domain.form.VideoRecommendForm; import cn.lili.modules.lmk.domain.form.WxVideoForm; import cn.lili.modules.lmk.domain.query.ManagerVideoQuery; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import cn.lili.modules.lmk.service.VideoService; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.form.VideoForm; import cn.lili.modules.lmk.domain.query.VideoQuery; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** @@ -38,13 +34,13 @@ @PostMapping @ApiOperation(value = "添加", notes = "添加") public Result add(@RequestBody @Validated(Add.class) VideoForm form) { public Result add(@RequestBody @Validated(Add.class) WxVideoForm form) { return videoService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") public Result update(@RequestBody @Validated(Update.class) VideoForm form) { public Result update(@RequestBody @Validated(Update.class) WxVideoForm form) { return videoService.update(form); }