framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenVideoTypeRef.java
New file @@ -0,0 +1,37 @@ package cn.lili.modules.lmk.domain.entity; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * 厨神视频标签关系表 * * @author wp * @since 2025-06-13 */ @Data @TableName("lmk_kitchen_video_type_ref") public class KitchenVideoTypeRef implements Serializable { private static final long serialVersionUID = 1L; @TableId @ApiModelProperty(value = "唯一标识", hidden = true) private String id; @TableField("video_id") /** 视频id */ private String videoId; @TableField("kitchen_type_id") /** 厨神标签id */ private String kitchenTypeId; } framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoForm.java
New file @@ -0,0 +1,59 @@ package cn.lili.modules.lmk.domain.form; import cn.lili.group.Add; import cn.lili.group.Update; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Size; import java.util.List; /** * 厨神视频发布 * * @author wp * @since 2025-06-12 */ @Data @ApiModel(value = "厨神视频发布", description = "厨神视频发布") public class KitchenVideoForm 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; /** 标签列表 */ @Size(min = 1,max = 5, message = "标签列表不能为空",groups = {Add.class, Update.class}) private List<String> checkKitchenType; } framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoTypeRefForm.java
New file @@ -0,0 +1,42 @@ package cn.lili.modules.lmk.domain.form; import cn.lili.group.Update; import cn.lili.group.Add; import cn.lili.base.AbsForm; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import org.springframework.beans.BeanUtils; 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.Date; /** * 厨神视频标签关系表表单 * * @author wp * @since 2025-06-13 */ @Data @ApiModel(value = "KitchenVideoTypeRef表单", description = "厨神视频标签关系表表单") public class KitchenVideoTypeRefForm extends AbsForm { @NotBlank(message = "视频id不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("视频id") private String videoId; @NotBlank(message = "厨神标签id不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("厨神标签id") private String kitchenTypeId; public static KitchenVideoTypeRef getEntityByForm(@NonNull KitchenVideoTypeRefForm form, KitchenVideoTypeRef entity) { if(entity == null) { entity = new KitchenVideoTypeRef(); } BeanUtils.copyProperties(form, entity); return entity; } } framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoQuery.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 KitchenVideoQuery extends AbsQuery { @ApiModelProperty("标题") private String title; @ApiModelProperty("视频标签") private List<String> typeList; @ApiModelProperty("作者") private String authorId; @ApiModelProperty("状态") private String status; /** * @see VideoTypeEnum */ @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") private String videoType = VideoTypeEnum.COOK.getValue(); } framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoTypeRefQuery.java
New file @@ -0,0 +1,22 @@ package cn.lili.modules.lmk.domain.query; import cn.lili.base.AbsQuery; import java.util.List; import org.springframework.lang.NonNull; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * 厨神视频标签关系表查询 * * @author wp * @since 2025-06-13 */ @Data @ApiModel(value = "KitchenVideoTypeRef查询参数", description = "厨神视频标签关系表查询参数") public class KitchenVideoTypeRefQuery extends AbsQuery { } framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeRefVO.java
New file @@ -0,0 +1,39 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import java.util.List; import org.springframework.lang.NonNull; import org.springframework.beans.BeanUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 厨神视频标签关系表展示 * * @author wp * @since 2025-06-13 */ @Data @ApiModel(value = "厨神视频标签关系表响应数据", description = "厨神视频标签关系表响应数据") public class KitchenVideoTypeRefVO extends AbsVo { /** 视频id */ @ApiModelProperty("视频id") private String videoId; /** 厨神标签id */ @ApiModelProperty("厨神标签id") private String kitchenTypeId; public static KitchenVideoTypeRefVO getVoByEntity(@NonNull KitchenVideoTypeRef entity, KitchenVideoTypeRefVO vo) { if(vo == null) { vo = new KitchenVideoTypeRefVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeVO.java
New file @@ -0,0 +1,34 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; /** * 厨神视频标签关系表展示 * * @author wp * @since 2025-06-13 */ @Data @ApiModel(value = "厨神视频标签关系表响应数据", description = "厨神视频标签关系表响应数据") public class KitchenVideoTypeVO extends AbsVo { /** 视频id */ @ApiModelProperty("视频id") private String videoId; /** 分类id */ @ApiModelProperty("分类id") private String id; /** 分类名称 */ @ApiModelProperty("分类名称") private String typeName; } framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java
New file @@ -0,0 +1,116 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.Video; 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.Date; import java.util.List; /** * 视频内容展示 * * @author xp * @since 2025-05-16 */ @Data @ApiModel(value = "视频内容响应数据", description = "视频内容响应数据") public class KitchenVideoVO extends AbsVo { /** 作者id */ @ApiModelProperty("作者id") private String authorId; private String authorName; /** 图片封面 */ @ApiModelProperty("图片封面") private String coverUrl; /** 封面显示地址 */ @ApiModelProperty("封面显示地址") private String coverShowUrl; /** 视频地址 */ @ApiModelProperty("视频地址") private String videoFileKey; private String videoUrl; @ApiModelProperty("视频标签") private List<KitchenVideoTypeVO> typeList; @ApiModelProperty("视频内容类型:视频、图片") private String videoContentType; @ApiModelProperty("视频类型:视频、大健康、神厨") private String videoType; @ApiModelProperty(value = "图片列表,json数组", hidden = true) private String videoImgs; @ApiModelProperty("图片列表") private List<String> imgs; /** 视频填充模式 */ @ApiModelProperty("视频填充模式") private String videoFit; @ApiModelProperty("视频长度:秒") private Long videoDuration; /** 视频标题 */ @ApiModelProperty("视频标题") private String title; /** 商品id */ @ApiModelProperty("商品id") private String goodsId; /** 商品查看次数 */ @ApiModelProperty("商品查看次数") private Long goodsViewNum; /** 商品下单次数 */ @ApiModelProperty("商品下单次数") private Long goodsOrderNum; /** 是否推荐 */ @ApiModelProperty("是否推荐") private Boolean recommend; /** 状态 */ @ApiModelProperty("状态") private String status; /** 播放量 */ @ApiModelProperty("播放量") private Long playNum; /** 收藏数 */ @ApiModelProperty("收藏数") private Long collectNum; /** 评论数 */ @ApiModelProperty("评论数") private Long commentNum; /** 权重 */ @ApiModelProperty("权重") private double weight; /** 审核通过时间 */ @ApiModelProperty("审核通过时间") private Date auditPassTime; public static KitchenVideoVO getVoByEntity(@NonNull Video entity, KitchenVideoVO vo) { if(vo == null) { vo = new KitchenVideoVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenVideoTypeRefMapper.java
New file @@ -0,0 +1,37 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO; import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm; import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 厨神视频标签关系表 Mapper 接口 * * @author wp * @since 2025-06-13 */ @Mapper public interface KitchenVideoTypeRefMapper extends BaseMapper<KitchenVideoTypeRef> { /** * id查找厨神视频标签关系表 * @param id * @return */ KitchenVideoTypeRefVO getById(String id); /** * 分页 */ IPage getPage(IPage page, @Param("query") KitchenVideoTypeRefQuery query); List<KitchenVideoTypeVO> getTypeByVideoIds(@Param("videoIds") List<String> videoIds); } framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -1,10 +1,7 @@ package cn.lili.modules.lmk.mapper; 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.query.*; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import cn.lili.modules.lmk.domain.vo.VideoAccountVO; import cn.lili.modules.lmk.domain.vo.VideoVO; @@ -121,4 +118,6 @@ * @param query */ IPage healthPage(IPage page, @Param("query") HealthVideoQuery query); IPage kitchenPage(IPage page, @Param("query") KitchenVideoQuery query); } framework/src/main/java/cn/lili/modules/lmk/service/KitchenVideoTypeRefService.java
New file @@ -0,0 +1,70 @@ package cn.lili.modules.lmk.service; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO; import com.baomidou.mybatisplus.extension.service.IService; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm; import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 厨神视频标签关系表 服务类 * * @author wp * @since 2025-06-13 */ public interface KitchenVideoTypeRefService extends IService<KitchenVideoTypeRef> { /** * 添加 * @param form * @return */ Result add(KitchenVideoTypeRefForm form); /** * 修改 * @param form * @return */ Result update(KitchenVideoTypeRefForm form); /** * 批量删除 * @param ids * @return */ Result remove(List<String> ids); /** * id删除 * @param id * @return */ Result removeById(String id); /** * 分页查询 * @param query * @return */ Result page(KitchenVideoTypeRefQuery query); /** * 根据id查找 * @param id * @return */ Result detail(String id); /** * 列表 * @return */ Result all(); List<KitchenVideoTypeVO> getTypeByVideoIds(List<String> videoIds); } framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -1,14 +1,15 @@ package cn.lili.modules.lmk.service; import cn.lili.group.Add; 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.query.*; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import com.baomidou.mybatisplus.extension.service.IService; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.query.VideoQuery; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; /** @@ -213,4 +214,18 @@ * @return */ Result delHealth(String id); Result addKitchenVideo( KitchenVideoForm form); Result updateKitchenVideo( KitchenVideoForm form); /** * 厨神视频列表 * * @param query * @return */ Result KitchenVideoQuery(KitchenVideoQuery query); Result delKitchen(String id); } framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenVideoTypeRefServiceImpl.java
New file @@ -0,0 +1,126 @@ package cn.lili.modules.lmk.service.impl; import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO; import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef; import cn.lili.modules.lmk.mapper.KitchenVideoTypeRefMapper; import cn.lili.modules.lmk.service.KitchenVideoTypeRefService; import cn.lili.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm; import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO; import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import cn.lili.utils.PageUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * 厨神视频标签关系表 服务实现类 * * @author wp * @since 2025-06-13 */ @Service @RequiredArgsConstructor public class KitchenVideoTypeRefServiceImpl extends ServiceImpl<KitchenVideoTypeRefMapper, KitchenVideoTypeRef> implements KitchenVideoTypeRefService { private final KitchenVideoTypeRefMapper kitchenVideoTypeRefMapper; /** * 添加 * @param form * @return */ @Override public Result add(KitchenVideoTypeRefForm form) { KitchenVideoTypeRef entity = KitchenVideoTypeRefForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(KitchenVideoTypeRefForm form) { KitchenVideoTypeRef entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(KitchenVideoTypeRefQuery query) { IPage<KitchenVideoTypeRefVO> page = PageUtil.getPage(query, KitchenVideoTypeRefVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(String id) { KitchenVideoTypeRefVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List<KitchenVideoTypeRef> entities = baseMapper.selectList(null); List<KitchenVideoTypeRefVO> vos = entities.stream() .map(entity -> KitchenVideoTypeRefVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @Override public List<KitchenVideoTypeVO> getTypeByVideoIds(List<String> videoIds) { return baseMapper.getTypeByVideoIds(videoIds); } } framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -3,9 +3,7 @@ import cn.lili.common.security.context.UserContext; 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.query.*; import cn.lili.modules.lmk.domain.vo.*; import cn.lili.modules.lmk.enums.general.*; import cn.lili.modules.lmk.service.*; @@ -18,10 +16,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.mapper.VideoMapper; import cn.lili.base.Result; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.lili.modules.lmk.domain.query.VideoQuery; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -56,6 +54,7 @@ private final MySubscribeService mySubscribeService; private final MemberService memberService; private final VideoAccountService videoAccountService; private final KitchenVideoTypeRefService kitchenVideoTypeRefService; /** @@ -482,4 +481,92 @@ baseMapper.deleteById(id); return Result.ok("删除成功"); } @Override @Transactional(rollbackFor = Exception.class) public Result addKitchenVideo(KitchenVideoForm form) { Video video = new Video(); BeanUtils.copyProperties(form, video); video.setAuthorId(UserContext.getCurrentUserId()); video.setVideoType(VideoTypeEnum.COOK.getValue()); //设置填充模式 保持比例,完整显示 video.setVideoFit("contain"); video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue()); video.setStatus(VideoStatusEnum.PUBLISHED.getValue()); baseMapper.insert(video); String id = video.getId(); List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> { KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef(); //设置视频id kitchenVideoTypeRef.setVideoId(id); //设置标签id kitchenVideoTypeRef.setKitchenTypeId(item); return kitchenVideoTypeRef; } ).collect(Collectors.toList()); kitchenVideoTypeRefService.saveBatch(collect); return Result.ok("添加成功"); } @Override @Transactional(rollbackFor = Exception.class) public Result updateKitchenVideo(KitchenVideoForm form) { Video video = baseMapper.selectById(form.getId()); Assert.notNull(video, "记录不存在"); BeanUtils.copyProperties(form, video); baseMapper.updateById(video); //删除原来的类型关系 kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery() .eq(KitchenVideoTypeRef::getVideoId, form.getId())); String id = video.getId(); List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> { KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef(); //设置视频id kitchenVideoTypeRef.setVideoId(id); //设置标签id kitchenVideoTypeRef.setKitchenTypeId(item); return kitchenVideoTypeRef; } ).collect(Collectors.toList()); kitchenVideoTypeRefService.saveBatch(collect); return Result.ok("修改成功"); } @Override public Result KitchenVideoQuery(KitchenVideoQuery query) { IPage<KitchenVideoVO> page = PageUtil.getPage(query, KitchenVideoVO.class); // 1. 先查出视频信息 baseMapper.kitchenPage(page, query); // 2. 单独查出标签信息 if (page.getTotal() > 0) { Map<String, List<KitchenVideoTypeVO>> typeMap = kitchenVideoTypeRefService .getTypeByVideoIds( page.getRecords() .stream().map(KitchenVideoVO::getId).collect(Collectors.toList())) .stream().collect(Collectors.groupingBy(KitchenVideoTypeVO::getVideoId)); // 3. 获取视频临时访问地址、设置视频标签 page.getRecords().forEach(v -> { v.setTypeList(typeMap.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 @Transactional(rollbackFor = Exception.class) public Result delKitchen(String id) { Video entity = baseMapper.selectById(id); Assert.notNull(entity, "记录不存在"); String videoType = entity.getVideoType(); if (!VideoTypeEnum.COOK.getValue().equals(videoType)) { log.error("删除非大神厨视频视频id为------->"+id); return Result.error("删除失败"); } baseMapper.deleteById(id); kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery() .eq(KitchenVideoTypeRef::getVideoId, id)); return Result.ok("删除成功"); } } framework/src/main/resources/mapper/lmk/KitchenVideoTypeRefMapper.xml
New file @@ -0,0 +1,53 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.lili.modules.lmk.mapper.KitchenVideoTypeRefMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO"> <id column="id" property="id"/> <result column="video_id" property="videoId" /> <result column="kitchen_type_id" property="kitchenTypeId" /> </resultMap> <select id="getById" resultMap="BaseResultMap"> SELECT LKVTR.video_id, LKVTR.kitchen_type_id, LKVTR.id FROM lmk_kitchen_video_type_ref LKVTR WHERE LKVTR.id = #{id} AND LKVTR.delete_flag = 0 </select> <select id="getPage" resultMap="BaseResultMap"> SELECT LKVTR.video_id, LKVTR.kitchen_type_id, LKVTR.id FROM lmk_kitchen_video_type_ref LKVTR WHERE LKVTR.delete_flag = 0 </select> <select id="getTypeByVideoIds" resultType="cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO"> SELECT LKVTR.video_id, LKT.id, LKT.type_name FROM lmk_kitchen_video_type_ref LKVTR JOIN lmk_kitchen_type LKT ON LKVTR.kitchen_type_id = LKT.id WHERE LKVTR.video_id IN <foreach collection="videoIds" open="(" item="videoId" close=")" separator=",">#{videoId}</foreach> </select> </mapper> framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -27,6 +27,31 @@ <result column="video_type" property="videoType" /> <result column="video_imgs" property="videoImgs" /> </resultMap> <!-- 通用查询映射结果 --> <resultMap id="KitchenVideoMap" type="cn.lili.modules.lmk.domain.vo.KitchenVideoVO"> <id column="id" property="id"/> <result column="author_id" property="authorId" /> <result column="authorName" property="authorName" /> <result column="cover_url" property="coverUrl" /> <result column="video_file_key" property="videoFileKey" /> <result column="video_fit" property="videoFit" /> <result column="title" property="title" /> <result column="goods_id" property="goodsId" /> <result column="goods_view_num" property="goodsViewNum" /> <result column="video_duration" property="videoDuration" /> <result column="goods_order_num" property="goodsOrderNum" /> <result column="recommend" property="recommend" /> <result column="status" property="status" /> <result column="play_num" property="playNum" /> <result column="collect_num" property="collectNum" /> <result column="comment_num" property="commentNum" /> <result column="weight" property="weight" /> <result column="audit_pass_time" property="auditPassTime" /> <result column="update_time" property="updateTime" /> <result column="video_content_type" property="videoContentType" /> <result column="video_type" property="videoType" /> <result column="video_imgs" property="videoImgs" /> </resultMap> <!-- 微信推荐视频 --> <resultMap id="WxResultMap" type="cn.lili.modules.lmk.domain.vo.WxVideoVO"> @@ -393,4 +418,45 @@ <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> <select id="kitchenPage" resultMap="KitchenVideoMap"> 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.typeList != null and query.typeList.size > 0"> INNER JOIN ( SELECT DISTINCT video_id FROM lmk_kitchen_video_type_ref WHERE kitchen_type_id IN <foreach collection="query.typeList" 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/KitchenVideoController.java
New file @@ -0,0 +1,59 @@ 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.form.KitchenTypeForm; import cn.lili.modules.lmk.domain.form.KitchenVideoForm; import cn.lili.modules.lmk.domain.query.HealthVideoQuery; import cn.lili.modules.lmk.domain.query.KitchenTypeQuery; import cn.lili.modules.lmk.domain.query.KitchenVideoQuery; import cn.lili.modules.lmk.service.KitchenTypeService; 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.*; import javax.validation.constraints.NotEmpty; import java.util.List; /** * 厨神视频 前端控制器 * * @author wp * @since 2025-06-13 */ @Validated @RequiredArgsConstructor @Api(value = "厨神视频", tags = "厨神视频管理") @RestController @RequestMapping("/manager/lmk/kitchen-video") public class KitchenVideoController { private final VideoService videoService; @PostMapping("/addKitchenVideo") @ApiOperation(value = "厨神视频发布", notes = "厨神视频发布") public Result addKitchenVideo(@RequestBody @Validated(Add.class) KitchenVideoForm form) { return videoService.addKitchenVideo(form); } @PostMapping("/updateKitchenVideo") @ApiOperation(value = "厨神视频修改", notes = "厨神视频修改") public Result updateKitchenVideo(@RequestBody @Validated(Update.class) KitchenVideoForm form) { return videoService.updateKitchenVideo(form); } @PostMapping("/page") @ApiOperation(value = "厨神视频列表", notes = "厨神视频列表") public Result page(@RequestBody KitchenVideoQuery query) { return videoService.KitchenVideoQuery(query); } @PostMapping("/del/{id}") @ApiOperation(value = "删除大厨神视频", notes = "删除大厨神视频") public Result delKitchen(@PathVariable("id") String id) { return videoService.delKitchen(id); } }