From f7e2789a576b2db4217d20d5cfdeb20249c83a5b Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 24 七月 2025 17:47:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java | 9 ++
framework/src/main/resources/mapper/lmk/VideoMapper.xml | 34 +++++++++++
framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java | 1
manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java | 6 +
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java | 8 ++
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java | 82 +++++++++++++++++++++++++++
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java | 2
manager-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java | 17 +++++
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java | 2
9 files changed, 157 insertions(+), 4 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
index e3d5481..829acb3 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -47,6 +47,8 @@
*/
IPage recommendVideo(IPage page, @Param("query") VideoQuery query);
+ List<WxVideoVO> recommendVideoList(@Param("query") VideoQuery query);
+
IPage recommendHealthVideo(IPage page, @Param("query") WxHealthVideoQuery query);
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
index 95b6784..71b4f53 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -62,7 +62,13 @@
* @param form
* @return
*/
- Result publish(WxVideoForm form);
+ Result publish(WxVideoForm form); /**
+ * 鍙戝竷瑙嗛
+ *
+ * @param form
+ * @return
+ */
+ Result systemPublish(WxVideoForm form);
/**
* 骞冲彴绔棰戝垎椤�
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 204b995..04a8b16 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
@@ -4,6 +4,7 @@
import cn.lili.cache.CachePrefix;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.CommonUtil;
import cn.lili.elasticsearch.EsSuffix;
import cn.lili.modules.lmk.constant.RedisKeyExpireConstant;
import cn.lili.modules.lmk.domain.dto.VideoEsUpdateDTO;
@@ -46,6 +47,7 @@
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import cn.lili.utils.PageUtil;
@@ -54,6 +56,8 @@
import org.springframework.util.Assert;
import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -201,6 +205,81 @@
videoTag = new VideoTag();
videoTag.setTagName(tag.getTagName());
videoTag.setCreateType(TagCreateTypeEnum.USER.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
+ @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());
}
@@ -472,6 +551,9 @@
switch (query.getVideoFrom()) {
case "recommend":// 鍔犺浇鎺ㄨ崘瑙嗛
baseMapper.recommendVideo(page, query);
+ //鎺ㄨ崘瑙嗛閲嶆柊鎺掑簭
+ List<WxVideoVO> records = page.getRecords();
+ Collections.shuffle(records);
break;
case "author": // 鍔犺浇瑙嗛涓婚〉鎴戝彂甯冪殑瑙嗛
AuthorVideoQuery query1 = new AuthorVideoQuery();
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
index 75a473a..480dce4 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
@@ -150,6 +150,7 @@
.list().stream().map(entity -> {
return WxVideoTagVO.getVoByEntity(entity, null);
}).collect(Collectors.toList());
+ break;
case "SEARCH":
tags = new LambdaQueryChainWrapper<>(baseMapper)
.orderByDesc(VideoTag::getUseNum)
@@ -158,6 +159,7 @@
.list().stream().map(entity -> {
return WxVideoTagVO.getVoByEntity(entity, null);
}).collect(Collectors.toList());
+ break;
}
return Result.ok().data(tags);
}
diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java
index 7b4943b..42f560f 100644
--- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java
@@ -145,6 +145,7 @@
List<FreightTemplateChild> list = new ArrayList<>();
for (FreightTemplateChild freightTemplateChild : freightTemplateVO.getFreightTemplateChildList()) {
freightTemplateChild.setFreightTemplateId(freightTemplate.getId());
+ freightTemplateChild.setId(null);
list.add(freightTemplateChild);
}
//娣诲姞妯℃澘瀛愬唴瀹�
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index ca87dfc..77fe601 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -267,6 +267,40 @@
ORDER BY
LV.create_time DESC
</select>
+ <select id="recommendVideoList" 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.thumbs_up_num,
+ LV.weight,
+ LV.audit_pass_time,
+ LV.update_time,
+ LV.create_time,
+ LV.video_content_type,
+ LV.video_type,
+ LV.video_imgs,
+ LV.id,
+ LM.nick_name as authorName,
+ LM.face as authorAvatar
+ FROM
+ lmk_video LV
+ LEFT JOIN li_member LM ON LV.author_id = LM.id
+ WHERE
+ LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType}
+ ORDER BY
+ LV.create_time DESC
+ </select>
<select id="goodsSimilarlyPage" resultMap="WxResultMap">
SELECT
diff --git a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
index b252dab..9271290 100644
--- a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
+++ b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
@@ -63,7 +63,14 @@
@ApiOperation(value = "鍒嗛〉鑾峰彇鍟嗗搧鍒楄〃")
@GetMapping(value = "/sku/list")
public ResultMessage<IPage<GoodsSku>> getSkuByPage(GoodsSearchParams goodsSearchParams) {
- return ResultUtil.data(goodsSkuService.getGoodsSkuByPage(goodsSearchParams));
+ IPage<GoodsSku> goodsSkuByPage = goodsSkuService.getGoodsSkuByPage(goodsSearchParams);
+ goodsSkuByPage.getRecords().forEach(goodsSku -> {
+ String thumbnail = goodsSku.getThumbnail();
+ if (StringUtils.isNotBlank(thumbnail)&&!thumbnail.contains("http")) {
+ goodsSku.setThumbnail(cosUtil.getPreviewUrl(goodsSku.getThumbnail()));
+ }
+ });
+ return ResultUtil.data(goodsSkuByPage);
}
@ApiOperation(value = "鍒嗛〉鑾峰彇寰呭鏍稿晢鍝�")
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java b/manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java
index 364f2cd..44f6447 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -37,7 +37,11 @@
@Qualifier("videoEsServiceImpl")
private final EsService esService;
-
+ @PostMapping("/publish")
+ @ApiOperation(value = "鍙戝竷瑙嗛", notes = "鍙戝竷瑙嗛")
+ public Result publish(@RequestBody @Validated({Add.class}) WxVideoForm form) {
+ return videoService.systemPublish(form);
+ }
@DeleteMapping("/{id}")
@ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
public Result removeById(@PathVariable("id") String id) {
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java b/manager-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java
index 3c4c400..da5b57d 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/VideoTagController.java
@@ -2,6 +2,11 @@
import cn.lili.group.Update;
import cn.lili.group.Add;
+import cn.lili.modules.lmk.domain.form.WxVideoForm;
+import cn.lili.modules.lmk.domain.query.VideoGoodsEsQuery;
+import cn.lili.modules.lmk.domain.query.WxVideoTagQuery;
+import cn.lili.modules.lmk.service.VideoService;
+import cn.lili.modules.search.service.EsGoodsSearchService;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import lombok.RequiredArgsConstructor;
@@ -31,7 +36,17 @@
public class VideoTagController {
private final VideoTagService videoTagService;
-
+ private final EsGoodsSearchService goodsSearchService;
+ @GetMapping("/recommend")
+ @ApiOperation(value = "鎺ㄨ崘鏍囩", notes = "鎺ㄨ崘鏍囩")
+ public Result recommend(WxVideoTagQuery query) {
+ return videoTagService.recommend(query);
+ }
+ @ApiOperation(value = "鍟嗗搧鍒嗛〉-鍙戝竷瑙嗛鏃跺叧鑱斿晢鍝�")
+ @GetMapping("/video/es")
+ public Result videoGoodsEsPage(VideoGoodsEsQuery query) {
+ return goodsSearchService.videoGoodsEsPage(query);
+ }
@PostMapping
@ApiOperation(value = "娣诲姞", notes = "娣诲姞")
public Result add(@RequestBody @Validated(Add.class) VideoTagForm form) {
--
Gitblit v1.8.0