peng
6 天以前 75f9783d5a70a5f037e3b34dc0e479069e63c0e9
update 修改后台/销售端商品上架
9个文件已修改
1个文件已添加
164 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
    @PostMapping("/view/record")
    @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
@@ -49,6 +49,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
@@ -304,8 +304,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()));
                }
@@ -317,6 +317,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
@@ -206,6 +206,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列表")