From 13faa6b31d14566d7505b4feb8b5742cc681fcf6 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期三, 23 七月 2025 17:55:13 +0800 Subject: [PATCH] 后台发布视频 --- framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 162 insertions(+), 13 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java index ad439e9..da35abc 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java @@ -247,6 +247,81 @@ String destination = rocketmqCustomProperties.getVideoTopic() + ":" + VideoTagsEnum.ES_DOC_ADD_OR_UPDATE.name(); rocketMQTemplate.asyncSend(destination, JSON.toJSONString(videoIndex), RocketmqSendCallbackBuilder.commonCallback()); return Result.ok("鍙戝竷鎴愬姛锛岃棰戝鏍镐腑~"); + } @Override + @Transactional(rollbackFor = Exception.class) + public Result systemPublish(WxVideoForm form) { + // 1.淇濆瓨瑙嗛 + Video video = WxVideoForm.getEntityByForm(form, null); + video.setAuthorId(UserContext.getCurrentUserId()); + video.setStatus(VideoStatusEnum.PUBLISHED.getValue()); + video.setCoverUrl(form.getCover()); + video.setVideoType(VideoTypeEnum.VIDEO.getValue()); + video.setRecommend(Boolean.FALSE); + if (VideoContentTypeEnum.IMG.getValue().equals(form.getVideoContentType())) { + video.setVideoImgs(JSON.toJSONString(form.getVideoImgs())); + } + baseMapper.insert(video); + // 2.澶勭悊鏍囩 + List<SimpleVideoTagVO> esTagList = new ArrayList<>(2); + List<VideoTagRef> videoTagRefs = form.getTags().stream().map(tag -> { + VideoTagRef videoTagRef = new VideoTagRef(); + videoTagRef.setVideoId(video.getId()); + if (StringUtils.isBlank(tag.getId())) { + VideoTag videoTag = new LambdaQueryChainWrapper<>(videoTagService.getBaseMapper()) + .eq(VideoTag::getTagName, tag.getTagName()) + .one(); + if (Objects.nonNull(videoTag)) { + videoTagRef.setVideoTagId(videoTag.getId()); + } else { + videoTag = new VideoTag(); + videoTag.setTagName(tag.getTagName()); + videoTag.setCreateType(TagCreateTypeEnum.SYSTEM.getValue()); + videoTagService.save(videoTag); + videoTagRef.setVideoTagId(videoTag.getId()); + } + } else { + videoTagRef.setVideoTagId(tag.getId()); + } + SimpleVideoTagVO esTag = new SimpleVideoTagVO(); + esTag.setVideoId(video.getId()); + esTag.setTagName(tag.getTagName()); + esTag.setId(tag.getId()); + esTagList.add(esTag); + return videoTagRef; + }).collect(Collectors.toList()); + videoTagRefService.saveBatch(videoTagRefs); + // 3. 淇濆瓨瑙嗛鏂囦欢淇℃伅 + lmkFileService.addByForm(form.getFileInfo()); + // 4. 澶勭悊閫夋嫨鐨勫晢鍝� + List<VideoGoods> videoGoods = new ArrayList<>(2); + if (CollectionUtils.isNotEmpty(form.getGoodsList())) { + for (int i = 0; i < form.getGoodsList().size(); i++) { + VideoGoods e = new VideoGoods(); + e.setVideoId(video.getId()); + e.setGoodsId(form.getGoodsList().get(i).getGoodsId()); + e.setGoodsSkuId(form.getGoodsList().get(i).getGoodsSkuId()); + e.setGoodsNum(form.getGoodsList().get(i).getGoodsNum()); + e.setOrderNum(i); + videoGoodsService.save(e); + } + videoGoodsService.saveBatch(videoGoods); + } + // 5. 鏋勫缓es涓暟鎹紝mq寮傛澶勭悊 + VideoIndex videoIndex = new VideoIndex(); + BeanUtils.copyProperties(video, videoIndex); + videoIndex.setAuthorName(UserContext.getCurrentUser().getNickName()); + videoIndex.setAuthorAvatar(UserContext.getCurrentUser().getFace()); + videoIndex.setCoverFileKey(video.getCoverUrl()); + List<VideoGoodsDetailVO> esGoodsList = videoGoods.stream().map(goods -> { + VideoGoodsDetailVO vo = new VideoGoodsDetailVO(); + BeanUtils.copyProperties(goods, vo); + return vo; + }).collect(Collectors.toList()); + videoIndex.setGoodsList(esGoodsList); + videoIndex.setTagList(esTagList); + String destination = rocketmqCustomProperties.getVideoTopic() + ":" + VideoTagsEnum.ES_DOC_ADD_OR_UPDATE.name(); + rocketMQTemplate.asyncSend(destination, JSON.toJSONString(videoIndex), RocketmqSendCallbackBuilder.commonCallback()); + return Result.ok("鍙戝竷鎴愬姛锛岃棰戝鏍镐腑~"); } @Override @@ -492,11 +567,22 @@ baseMapper.getAuthorLikeVideoPage(page, query3); break; case "search": // 鍔犺浇es鎼滅储瑙嗛 - VideoEsQuery query4 = new VideoEsQuery(); - BeanUtils.copyProperties(query, query4); - query4.setPageNumber((int) query.getPageNumber()); - query4.setPageSize((int) query.getPageSize()); - return this.esSearch(query4); + VideoEsQuery videoEsQuery = new VideoEsQuery(); + BeanUtils.copyProperties(query, videoEsQuery); + videoEsQuery.setPageNumber((int) query.getPageNumber()); + videoEsQuery.setPageSize((int) query.getPageSize()); + return this.esSearch(videoEsQuery); + case "goodsSimilarly": // 鎮寕鐩稿悓鍟嗗搧鐨勬帹鑽愯棰� + GoodsSimilarlyQuery goodsSimilarlyQuery = new GoodsSimilarlyQuery(); + BeanUtils.copyProperties(query, goodsSimilarlyQuery); + baseMapper.goodsSimilarlyPage(page, goodsSimilarlyQuery); + break; + case "history": + VideoHistoryQuery videoHistoryQuery = new VideoHistoryQuery(); + BeanUtils.copyProperties(query, videoHistoryQuery); + videoHistoryQuery.setUserId(UserContext.getCurrentUserId()); + baseMapper.getHistoryPage(page, videoHistoryQuery); + break; default: break; } @@ -520,6 +606,7 @@ v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -592,9 +679,10 @@ public Result healthRecommendVideo(WxHealthVideoQuery query) { IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class); //鑾峰彇澶у仴搴疯棰戝垪琛� - baseMapper.recommendHealthVideo(page,query); + baseMapper.recommendHealthVideo(page,query); if (page.getTotal() > 0) { page.getRecords().forEach(v -> { + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -617,6 +705,7 @@ IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class); baseMapper.wxKitchenVideoQuery(page, query); page.getRecords().forEach(v -> { + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -667,13 +756,24 @@ @Override public Result saveViewRecord(VideoFootPrintForm form) { - FootPrint footPrint = new FootPrint(); - footPrint.setViewType(ViewTypeEnum.VIDEO.getValue()); - footPrint.setRefId(form.getVideoId()); - footPrint.setMemberId(UserContext.getCurrentUserId()); - footPrint.setViewDuration(form.getViewDuration()); - footPrint.setPlayAt(form.getPlayAt()); - footprintService.saveFootprint(footPrint); + FootPrint one = new LambdaQueryChainWrapper<>(footprintService.getBaseMapper()) + .eq(FootPrint::getRefId, form.getVideoId()) + .eq(FootPrint::getMemberId, UserContext.getCurrentUserId()) + .eq(FootPrint::getViewType, ViewTypeEnum.VIDEO.getValue()) + .one(); + if (Objects.nonNull(one)) { + one.setViewDuration(one.getViewDuration() + form.getViewDuration()); + one.setPlayAt(form.getPlayAt()); + footprintService.updateById(one); + } else { + FootPrint footPrint = new FootPrint(); + footPrint.setViewType(ViewTypeEnum.VIDEO.getValue()); + footPrint.setRefId(form.getVideoId()); + footPrint.setMemberId(UserContext.getCurrentUserId()); + footPrint.setViewDuration(form.getViewDuration()); + footPrint.setPlayAt(form.getPlayAt()); + footprintService.saveFootprint(footPrint); + } return Result.ok(); } @@ -715,6 +815,7 @@ v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -753,6 +854,7 @@ v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -790,6 +892,7 @@ v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -1194,6 +1297,7 @@ // 鍒ゆ柇鏄惁鍏虫敞浣滆�呫�佹槸鍚︾偣璧炪�佹槸鍚︽敹钘� wxVideoVO.setCollected(CollectionUtils.isNotEmpty(collectMap.get(wxVideoVO.getId()))); wxVideoVO.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(wxVideoVO.getId()))); + wxVideoVO.setAuthorAvatar(cosUtil.getPreviewUrl(wxVideoVO.getAuthorAvatar())); if (UserContext.getCurrentUserId().equals(wxVideoVO.getAuthorId())) { wxVideoVO.setSubscribeThisAuthor(Boolean.TRUE); } else { @@ -1210,4 +1314,49 @@ }).collect(Collectors.toList()); return Result.ok().data(vos).total(searchHits.getTotalHits()); } + + @Override + public Result getHistoryPage(VideoHistoryQuery query) { + query.setUserId(UserContext.getCurrentUserId()); + IPage<VideoHistoryVO> page = PageUtil.getPage(query, VideoHistoryVO.class); + baseMapper.getHistoryPage(page, query); + if (CollectionUtils.isNotEmpty(page.getRecords())) { + if (page.getTotal() > 0) { + List<String> videoIds = page.getRecords().stream().map(VideoHistoryVO::getId).collect(Collectors.toList()); + Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(videoIds) + .stream() + .collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId)); + Map<String, List<SimpleMyCollectVO>> collectMap = myCollectService.getCollectsByVideoIds(videoIds) + .stream() + .collect(Collectors.groupingBy(SimpleMyCollectVO::getRefId)); + Map<String, List<SimpleMyThumbsUpVO>> thumbsUpMap = thumbsUpRecordService.getThumbssByVideoIds(videoIds) + .stream() + .collect(Collectors.groupingBy(SimpleMyThumbsUpVO::getRefId)); + List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId()); + // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佹槸鍚︾偣璧炪�佷綔鑰呮槸鍚﹀叧娉� + page.getRecords().forEach(v -> { + v.setTagList(tagMap.get(v.getId())); + v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId()))); + v.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(v.getId()))); + v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); + v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); + v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); + v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar())); + if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { + v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); + v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); + } 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())); + } + if (CollectionUtils.isNotEmpty(v.getGoodsList())) { + v.getGoodsList().stream().forEach(goods -> { + goods.setThumbnail(cosUtil.getPreviewUrl(goods.getThumbnail())); + }); + } + v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId())); + }); + } + } + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } } -- Gitblit v1.8.0