第七篇商城系统-商品发布-sku和spu管理(代码片段)

波波烤鸭 波波烤鸭     2022-11-30     306

关键词:

商品服务

1.新增商品

1.1 品牌的关联

1.1.1 PubSub依赖缺失

打开新增商品页面的时候会出现的错误提示:

原因是缺少:PubSub相关依赖

解决办法

  • 使用npm添加依赖:npm install --save pubsub-js(失败的话使用此命令:cnpm install --save pubsub-js)
  • 在src下的main.js中引用:
    import PubSub from ‘pubsub-js’
    Vue.prototype.PubSub = PubSub
  • 在.eslintrc.js中添加一下配置

1.1.2 品牌关联

拷贝对应的前端页面文件

添加后端对应的服务

然后service中查询处理

最后的显示效果

1.1.3 会员等级

  首先我们需要启动会员模块,并且配置对应的网关路由信息

1.1.4 规格参数

  在新增商品的第二步我们就需要设置对应的规格参数,而这些规格参数是根据前面一步选择的三级分类来查询出来的。

  响应对应的数据,我们需要先创建对应的VO对象。

package com.msb.mall.product.vo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.msb.mall.product.entity.AttrEntity;
import lombok.Data;

import java.util.List;

@Data
public class AttrGroupWithAttrsVo 
    /**
     * 分组id
     */
    @TableId
    private Long attrGroupId;
    /**
     * 组名
     */
    private String attrGroupName;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 描述
     */
    private String descript;
    /**
     * 组图标
     */
    private String icon;
    /**
     * 所属分类id
     */
    private Long catelogId;

    // 关联对应的属性信息
    private List<AttrEntity> attrs;


  然后创建对应的controller

  然后创建对应的service

1.2 发布商品

1.2.1 VO 接收数据

  前端页面提交的JSON数据非常复杂,我们需要在后端服务通过对应的VO对象来接收这些相关的数据。

然后通过在线的json格式处理工具生成对应的VO工具类

1.2.2 保存对应的数据

  需要保存的数据拆解为一下六个部分。

1.2.3 保存商品基本信息

1.2.4 保存商品描述

需要注意的地方:

1.2.4 保存图集信息

1.2.5 保存规格参数

1.2.6 SKU基本信息存储

1.2.7 SKU的图集

1.2.8 SKU的销售属性

1.3 远程服务调用

1.3.1 满减,折扣,会员价保存

在coupon服务中定义相关的接口及处理的service

然后我们在Product服务中来处理接口的调用

然后在商品的service中完成服务的调用

完成满减折扣和会员价的service存储

    public void saveSkuReduction(SkuReductionDTO dto) 
        // 5.3 保存满减信息,折扣,会员价
        // mall_sms: sms_sku_ladder sms_full_reduction sms_member_price
        // 1.折扣
        SkuLadderEntity ladderEntity = new SkuLadderEntity();
        ladderEntity.setSkuId(dto.getSkuId());
        ladderEntity.setFullCount(dto.getFullCount());
        ladderEntity.setDiscount(dto.getDiscount());
        ladderEntity.setAddOther(dto.getCountStatus());
        if(ladderEntity.getFullCount() > 0)
            ladderService.save(ladderEntity);
        
        // 2.满减
        SkuFullReductionEntity fullReductionEntity = new SkuFullReductionEntity();
        BeanUtils.copyProperties(dto,fullReductionEntity);
        if(fullReductionEntity.getFullPrice().compareTo(new BigDecimal(0)) == 1)
            this.save(fullReductionEntity);
        
        // 3.会员价
        List<MemberPriceEntity> memberPriceEntities = dto.getMemberPrice().stream().map(item -> 
            MemberPriceEntity priceEntity = new MemberPriceEntity();
            priceEntity.setSkuId(dto.getSkuId());
            priceEntity.setMemberLevelId(item.getId());
            priceEntity.setMemberPrice(item.getPrice());
            priceEntity.setAddOther(1); // 是否可叠加
            return priceEntity;
        ).collect(Collectors.toList());
        memberPriceService.saveBatch(memberPriceEntities);
    

1.3.2 会员积分存储

会员积分信息也是存储在Coupon服务中,我们同样需要通过Fegin来调用。

2.SPU管理

  提供不同条件的检索,分类,品牌,状态,关键字检索。

  后台我们需要在Service中完成对应的操作。

    /**
     * SPU信息检索
     * 分页查询
     * 分类 品牌 状态 关键字查询
     * @param params
     * @return
     */
    @Override
    public PageUtils queryPageByCondition(Map<String, Object> params) 
        QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>();
        // 设置对应的检索条件
        // 1. 关键字查询
        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(key))
            // 需要添加关键字查询
            wrapper.and((w)->
                w.eq("id",key)
                        .or().like("spu_name",key)
                        .or().like("spu_description",key);
            );
        
        // status
        String status = (String) params.get("status");
        if(!StringUtils.isEmpty(status))
            wrapper.eq("publish_status",status);
        
        // catalogId
        String catalogId = (String) params.get("catalogId");
        if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId))
            wrapper.eq("catalog_id",catalogId);
        
        // brandId
        String brandId = (String) params.get("brandId");
        if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId))
            wrapper.eq("brand_id",brandId);
        

        IPage<SpuInfoEntity> page = this.page(
                new Query<SpuInfoEntity>().getPage(params),
                wrapper
        );
        return new PageUtils(page);
    

  然后解决页面显示数据的问题,比如类别和品牌显示的编号,创建时间和更新时间显示格式问题。

重启服务

上面的是设置全局的格式化方式,如果我也特殊设置,这时我们可以在对应的entity对象的属性上通过@JsonFormat 来指定,此处指定的会覆盖掉全局的设置。

针对显示的分类和品牌显示id的问题,我们需要通过对应的vo对象来传输,同时我们需要在service中完成对应的逻辑

显示的效果

3.商品管理

  商品管理也就是我们讲的SKU管理。实现多条件的检索,比如 类别,品牌,价格区间。关键字等查询。

    /**
     * SKU 信息检索的方法
     * 类别
     * 品牌
     * 价格区间
     * 检索的关键字
     * 分页查询
     *
     * @param params
     * @return
     */
    @Override
    public PageUtils queryPageByCondition(Map<String, Object> params) 
        QueryWrapper<SkuInfoEntity> wrapper = new QueryWrapper<>();
        // 检索关键字
        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(key))
            wrapper.and(w->
               w.eq("sku_id",key).or().like("sku_name",key);
            );
        

        // 分类
        String catalogId = (String)params.get("catalogId");
        if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId))
            wrapper.eq("catalog_id",catalogId);
        
        // 品牌
        String brandId = (String)params.get("brandId");
        if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId))
            wrapper.eq("brand_id",brandId);
        
        // 价格区间
        String min = (String) params.get("min");
        if(!StringUtils.isEmpty(min))
            wrapper.ge("price",min);
        
        String max = (String) params.get("max");
        if(!StringUtils.isEmpty(max))
            try 
                // 如果max=0那么我们也不需要加这个条件
                BigDecimal bigDecimal = new BigDecimal(max);
                if(bigDecimal.compareTo(new BigDecimal(0)) == 1)
                    // 说明 max > 0
                    wrapper.le("price",max);
                
            catch (Exception e)
                e.printStackTrace();
            
        
        IPage<SkuInfoEntity> page = this.page(
                new Query<SkuInfoEntity>().getPage(params),
                wrapper
        );

        return new PageUtils(page);
    

第五篇商城系统-商品属性管理(代码片段)

业务开发-基础业务-属性管理1.SKU和SPU介绍  商城系统中的商品信息肯定避免不了SPU和SKU这两个概念1.1SKU和SPU关系SPU=StandardProductUnit(标准化产品单元)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的... 查看详情

第五篇商城系统-商品属性管理(代码片段)

业务开发-基础业务-属性管理1.SKU和SPU介绍  商城系统中的商品信息肯定避免不了SPU和SKU这两个概念1.1SKU和SPU关系SPU=StandardProductUnit(标准化产品单元)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的... 查看详情

谷粒商城--spu和sku(代码片段)

目录1.SPU和SKU概念2.表的关系理解3.导入前端代码4.完善后端接口 5.属性分组详情 6.规格参数详情7.销售属性详情8.分组与属性关联9.发布商品10.仓库服务1.SPU和SKU概念SPU:standardproductunit(标准化产品单元):是商品信息聚合... 查看详情

商城项目14_商品新增vo抽取修改vo新增逻辑代码的具体落地spu检测sku检测流程图(代码片段)

文章目录①.商品新增vo抽取②.修改新增的vo③.新增商品的逻辑④.保存商品核心代码⑤.商品管理-SPU检测⑥.商品管理-SKU检测⑦.商品保持流程图-超级重要写在最前面,商品新增最重要的需要把前端的流程看懂,需要把对应的逻辑搞... 查看详情

商城项目14_商品新增vo抽取修改vo新增逻辑代码的具体落地spu检测sku检测流程图(代码片段)

文章目录①.商品新增vo抽取②.修改新增的vo③.新增商品的逻辑④.保存商品核心代码⑤.商品管理-SPU检测⑥.商品管理-SKU检测⑦.商品保持流程图-超级重要写在最前面,商品新增最重要的需要把前端的流程看懂,需要把对应的逻辑搞... 查看详情

商城项目11_商品spusku详解表结构属性分组列表展示修改新增分类级联更新(代码片段)

文章目录①.商品SPU和SKU管理②.详解SPU、SKU表结构③.属性分组-列表展示④.属性分组-新增修改⑤.品牌分类关联与级联更新⑥.商品服务-分页配置①.商品SPU和SKU管理①.SPU:standardproductunit(标准化产品单元):是商品信息聚合的最小单... 查看详情

商城系统答辩题目

文章目录1.商品的sku和spu的区别?2.商品分类查询实现?3.商品添加的实现?4.什么是跨域?5.跨域问题怎么解决的?6.商品表结构怎么设置的?7.你商品推荐怎么实现的?8.什么是ajax请求?1.商品的sku... 查看详情

美多商城项目:商品数据库表设计准备商品数据首页广告商品列表页(代码片段)

一、商品数据库表设计1.1 SPU和SKU在电商中对于商品,有两个重要的概念:SPU和SKU1.SPU介绍SPU=StandardProductUnit(标准产品单位)SPU是商品信息聚合的最小单位,是一组可服用、易检索的标准化信息的集合,... 查看详情

电商系统设计之商品管理

...样化展示,还能支撑在复杂环境下,商品信息在订单中的系统流转。SKU:中文译为最小存货单位,英文全称为StockKeepingUnit,简称SKU,定义为保存库存控制的最小可用单位。SPU:英文standardproductunit,标准化产品单元,是商品信息... 查看详情

sku和spu在商品中啥意思呢

...存管理等。SPU,是standardproductunit,标准化产品单元,是商品信息聚合的最小单位,属性值、特性相同的商品就可以成为一个SPU。例如:品牌苹果+型号:5s可以确定一个产品,即SPU;再加上颜色白色,尺码4.0,即表示一个SKU;SPU+... 查看详情

(10)商品管理

...除stock然后删除sku新增sku和stock更新spu和spuDetail搭建前台系统live-server  --port=9002配置host文件配置nginxcommonjs:getUrlParam、formatprice、formatDate、stringify、parse 查看详情

电商通用型商品中心设计(代码片段)

...品的基本概念商品中心是电商各个系统的最基础单元,为商城、订单,优惠促销、库存、仓储物流等系统提供基础数据。电商的基本术语。SKU:(StockKeepingUint,即库存量单位),库存控制的最小可用单位。例如“iPhone7Plus128G银... 查看详情

spu与sku区别小结

...,都有SPU和SKU,只是叫法不同而已。以某宝和某东为例,商品这个名词在某宝中叫item,而某东叫product。所以某宝中看不到SPU,而是商品ID。SPU,StandardProductUnit标准化产品单元,是商品信息聚合的最小单位,是一组可复用、易检索... 查看详情

spu和sku都是什么意思

...两个概念SPU和SKUSPU=StandardProductUnit(标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。在商品信息电子化过程中,商品的特性可以由多个“属性|属性... 查看详情

谷粒商城--整合elasticsearch和商品的上架(代码片段)

整合Elasticsearch和商品的上架一、整合ESES常用概念索引,类型,文档是什么?倒排索引相关度分数score的计算安装ES和Kibana快速安装ESkibana初步检索_catES的增删改查新增文档put新增post新增区别查询文档乐观锁的使用更新... 查看详情

sku跟spu有啥区别?

...号的简称,每种产品均对应有唯一的SKU号。单品:对一种商品而言,当其品牌、型号、配置、等级、花色、包装容量、单位、生产日期、保质期、用途、价格、产地等属性与其他商品存在不同时,可称为一个单品。首先,搞清楚... 查看详情

电商系统——商品管理模型

商品管理是电商系统的核心模块之一,非常重要,下图是商品管理模块的商品物理模型图,当然实际使用时还需根据特定业务进行调整:下面对上图中的一些表从概念上进行说明:1. 什么是SPU与SKU  SPU全名StandardProductUnit(... 查看详情

什么是spu和sku

...概念SPU与SKU SPU=StandardProductUnit(标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。 例如... 查看详情