buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -6,6 +6,8 @@ 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.lmk.domain.query.HealthVideoQuery; import cn.lili.modules.lmk.domain.query.WxHealthVideoQuery; import org.springframework.validation.annotation.Validated; import lombok.RequiredArgsConstructor; import java.util.List; @@ -67,6 +69,11 @@ public Result recommendVideo(VideoQuery query) { return videoService.recommendVideo(query); } @GetMapping("/health/recommend") @ApiOperation(value = "大健康视频推荐", notes = "大健康视频推荐") public Result healthRecommendVideo(WxHealthVideoQuery query) { return videoService.healthRecommendVideo(query); } @GetMapping("/goods/detail/{videoId}") @ApiOperation(value = "视频商品查看", notes = "视频商品查看") framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
@@ -14,6 +14,8 @@ import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.xkcoding.http.util.StringUtil; import io.swagger.annotations.ApiModel; @@ -87,12 +89,15 @@ private Double grade; @ApiModelProperty(value = "缩略图路径") @TableField(updateStrategy = FieldStrategy.IGNORED) private String thumbnail; @ApiModelProperty(value = "小图路径") @TableField(updateStrategy = FieldStrategy.IGNORED) private String small; @ApiModelProperty(value = "原图路径") @TableField(updateStrategy = FieldStrategy.IGNORED) private String original; @ApiModelProperty(value = "店铺分类id") @@ -129,6 +134,7 @@ private String mobileIntro; @ApiModelProperty(value = "商品视频") @TableField(updateStrategy = FieldStrategy.IGNORED) private String goodsVideo; framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java
@@ -41,11 +41,13 @@ import cn.lili.mybatis.util.PageUtil; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; @@ -121,6 +123,9 @@ @Autowired private Cache<GoodsVO> cache; @Autowired private COSUtil cosUtil; @Override public List<Goods> getByBrandIds(List<String> brandIds) { LambdaQueryWrapper<Goods> lambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -172,7 +177,7 @@ //检查商品 this.checkGoods(goods); //向goods加入图片 if (goodsOperationDTO.getGoodsGalleryList().size() > 0) { if (goodsOperationDTO.getGoodsGalleryList()!=null&& !goodsOperationDTO.getGoodsGalleryList().isEmpty()) { this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); } //添加商品参数 @@ -201,7 +206,14 @@ //检查商品信息 this.checkGoods(goods); //向goods加入图片 this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); if (goodsOperationDTO.getGoodsGalleryList() != null&& !goodsOperationDTO.getGoodsGalleryList().isEmpty()) { this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); }else { goods.setOriginal(null); goods.setSmall(null); goods.setThumbnail(null); goodsGalleryService.removeByGoodsId(goodsId); } //添加商品参数 if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) { goods.setParams(JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList())); @@ -227,6 +239,17 @@ //缓存获取,如果没有则读取缓存 GoodsVO goodsVO = cache.get(CachePrefix.GOODS.getPrefix() + goodsId); if (goodsVO != null) { // List<String> goodsGalleryList = goodsVO.getGoodsGalleryList(); // if (goodsGalleryList != null && !goodsGalleryList.isEmpty()) { // List<String> galleryList = goodsGalleryList.stream().map(item -> { // if (StringUtils.isNotBlank(item)&&!item.contains("http")) { // return cosUtil.getPreviewUrl(item); // }else { // return item; // } // }).collect(Collectors.toList()); // goodsVO.setGoodsGalleryList(galleryList); // } return goodsVO; } //查询商品信息 @@ -245,6 +268,12 @@ List<GoodsGallery> galleryList = goodsGalleryService.goodsGalleryList(goodsId); for (GoodsGallery goodsGallery : galleryList) { images.add(goodsGallery.getOriginal()); // String original = goodsGallery.getOriginal(); // if (StringUtils.isNotBlank(original)&&!original.contains("http")) { // images.add(cosUtil.getPreviewUrl(original)); // }else { // images.add(goodsGallery.getOriginal()); // } } goodsVO.setGoodsGalleryList(images); //商品sku赋值 framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java
New file @@ -0,0 +1,25 @@ 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; /** * 微信小程序大健康查询参数 * * @author wp * @since 2025-05-16 */ @Data @ApiModel(value = "微信小程序大健康查询参数", description = "微信小程序大健康查询参数") public class WxHealthVideoQuery extends AbsQuery { /** * @see VideoTypeEnum */ @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频") private String videoType = VideoTypeEnum.HEALTH.getValue(); } framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -46,6 +46,8 @@ */ IPage recommendVideo(IPage page, @Param("query") VideoQuery query); IPage recommendHealthVideo(IPage page, @Param("query") WxHealthVideoQuery query); /** * 批量更新视频收藏数量 * framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -124,6 +124,8 @@ */ Result recommendVideo(VideoQuery query); Result healthRecommendVideo(WxHealthVideoQuery query); /** * 批量更新视频收藏数量 * framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -317,8 +317,8 @@ v.setTagList(tagMap.get(v.getId())); v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId()))); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { // v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4"); v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); // v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4"); } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) { v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList())); } @@ -330,6 +330,25 @@ } @Override public Result healthRecommendVideo(WxHealthVideoQuery query) { IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class); //获取大健康视频列表 baseMapper.recommendHealthVideo(page,query); if (page.getTotal() > 0) { page.getRecords().forEach(v -> { if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); // v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4"); } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) { v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(cosUtil::getPreviewUrl).collect(Collectors.toList())); } v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); }); } return Result.ok().data(page.getRecords()); } @Override @Transactional(rollbackFor = Exception.class) public void updateCollectNumBatch(List<CollectTypeNumVO> numList) { // 按500条数据进行拆分 framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -231,6 +231,37 @@ WHERE LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType} </select> <select id="recommendHealthVideo" resultMap="WxResultMap"> 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.comment_num, LV.collect_num, LV.weight, LV.audit_pass_time, LV.update_time, LV.video_content_type, LV.video_type, LV.video_imgs, LV.id, LAU.nick_name AS authorName, LAU.avatar AS authorAvatar FROM lmk_video LV LEFT JOIN li_admin_user LAU ON LV.author_id = LAU.id WHERE LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType} AND LV.video_content_type = 'video' </select> <update id="updateCollectNumBatch"> manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
@@ -5,6 +5,7 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -14,6 +15,7 @@ import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -25,6 +27,8 @@ import javax.validation.constraints.NotEmpty; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 管理端,商品管理接口 @@ -47,6 +51,9 @@ @Autowired private GoodsSkuService goodsSkuService; @Autowired private COSUtil cosUtil; @ApiOperation(value = "分页获取") @GetMapping(value = "/list") public ResultMessage<IPage<Goods>> getByPage(GoodsSearchParams goodsSearchParams) { @@ -63,7 +70,18 @@ @GetMapping(value = "/auth/list") public ResultMessage<IPage<Goods>> getAuthPage(GoodsSearchParams goodsSearchParams) { goodsSearchParams.setAuthFlag(GoodsAuthEnum.TOBEAUDITED.name()); return ResultUtil.data(goodsService.queryByParams(goodsSearchParams)); IPage<Goods> page = goodsService.queryByParams(goodsSearchParams); page.getRecords().forEach(item -> { String original = item.getOriginal(); String goodsVideo = item.getGoodsVideo(); if (StringUtils.isNotBlank(original)&&!original.contains("http")) { item.setOriginal(cosUtil.getPreviewUrl(original)); } if (StringUtils.isNotBlank(goodsVideo)&&!goodsVideo.contains("http")) { item.setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo)); } }); return ResultUtil.data(page); } @PreventDuplicateSubmissions seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java
@@ -8,6 +8,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -25,6 +26,7 @@ import cn.lili.modules.statistics.aop.enums.PageViewEnum; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -70,6 +72,8 @@ */ @Autowired private GoodsSkuService goodsSkuService; @Autowired private COSUtil cosUtil; @ApiOperation(value = "分页获取商品列表") @@ -78,7 +82,16 @@ //获取当前登录商家账号 String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); goodsSearchParams.setStoreId(storeId); return ResultUtil.data(goodsService.queryByParams(goodsSearchParams)); IPage<Goods> page = goodsService.queryByParams(goodsSearchParams); page.getRecords().forEach(goodsVO -> { if (StringUtils.isNotBlank(goodsVO.getOriginal())&& !goodsVO.getOriginal().contains("http")) { goodsVO.setOriginal(cosUtil.getPreviewUrl(goodsVO.getOriginal())); } if (StringUtils.isNotBlank(goodsVO.getGoodsVideo())&& !goodsVO.getGoodsVideo().contains("http")) { goodsVO.setGoodsVideo(cosUtil.getPreviewUrl(goodsVO.getGoodsVideo())); } }); return ResultUtil.data(page); } @ApiOperation(value = "分页获取商品Sku列表")