当前位置:首页 > 科技  > 软件

一文搞懂大厂商品中心设计!

来源: 责编: 时间:2024-06-27 07:57:25 258观看
导读1 雪花算法使用IdWorker idWorker=new IdWorker(1,1);for(int i=0;i<10000;i++){ long id = idWorker.nextId(); System.out.println(id);}配置分布式ID生成器将IdWorker.java拷贝到util包在工程的resources下

1 雪花算法使用

IdWorker idWorker=new IdWorker(1,1);for(int i=0;i<10000;i++){    long id = idWorker.nextId();    System.out.println(id);}

配置分布式ID生成器

  • 将IdWorker.java拷贝到util包
  • 在工程的resources下新增applicationContext-service.xml
<!‐‐雪花ID生成器‐‐><bean id="idWorker" class="com.qingcheng.util.IdWorker">    <constructor‐arg index="0" value="1"></constructor‐arg>    <constructor‐arg index="1" value="1"></constructor‐arg></bean>

2 新增和修改商品

2.1 表结构

t_spu 表

字段名称
RAc28资讯网——每日最新资讯28at.com

字段含义
RAc28资讯网——每日最新资讯28at.com

字段类型
RAc28资讯网——每日最新资讯28at.com

字段长度
RAc28资讯网——每日最新资讯28at.com

备注
RAc28资讯网——每日最新资讯28at.com

id
RAc28资讯网——每日最新资讯28at.com

主键
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

sn
RAc28资讯网——每日最新资讯28at.com

货号
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

name
RAc28资讯网——每日最新资讯28at.com

SPU名
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

caption
RAc28资讯网——每日最新资讯28at.com

副标题
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

brand_id
RAc28资讯网——每日最新资讯28at.com

品牌ID
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

category1_id
RAc28资讯网——每日最新资讯28at.com

一级分类
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

category2_id
RAc28资讯网——每日最新资讯28at.com

二级分类
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

category3_id
RAc28资讯网——每日最新资讯28at.com

三级分类
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

template_id
RAc28资讯网——每日最新资讯28at.com

模板ID
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

freight_id
RAc28资讯网——每日最新资讯28at.com

运费模板id
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

image
RAc28资讯网——每日最新资讯28at.com

图片
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

images
RAc28资讯网——每日最新资讯28at.com

图片列表
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

sale_service
RAc28资讯网——每日最新资讯28at.com

售后服务
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

introduction
RAc28资讯网——每日最新资讯28at.com

介绍
RAc28资讯网——每日最新资讯28at.com

TEXT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

spec_items
RAc28资讯网——每日最新资讯28at.com

规格列表
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

para_items
RAc28资讯网——每日最新资讯28at.com

参数列表
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

sale_num
RAc28资讯网——每日最新资讯28at.com

销量
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

comment_num
RAc28资讯网——每日最新资讯28at.com

评论数
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

is_marketable
RAc28资讯网——每日最新资讯28at.com

是否上架
RAc28资讯网——每日最新资讯28at.com

CHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

is_enable_spec
RAc28资讯网——每日最新资讯28at.com

是否启用规格
RAc28资讯网——每日最新资讯28at.com

CHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

is_delete
RAc28资讯网——每日最新资讯28at.com

是否删除
RAc28资讯网——每日最新资讯28at.com

CHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

status
RAc28资讯网——每日最新资讯28at.com

审核状态
RAc28资讯网——每日最新资讯28at.com

CHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

t_sku 表

字段名称
RAc28资讯网——每日最新资讯28at.com

字段含义
RAc28资讯网——每日最新资讯28at.com

字段类型
RAc28资讯网——每日最新资讯28at.com

字段长度
RAc28资讯网——每日最新资讯28at.com

备注
RAc28资讯网——每日最新资讯28at.com

id
RAc28资讯网——每日最新资讯28at.com

商品id
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

sn
RAc28资讯网——每日最新资讯28at.com

商品条码
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

name
RAc28资讯网——每日最新资讯28at.com

SKU名称
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

price
RAc28资讯网——每日最新资讯28at.com

价格(分)
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

num
RAc28资讯网——每日最新资讯28at.com

库存数量
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

alert_num
RAc28资讯网——每日最新资讯28at.com

库存预警数量
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

image
RAc28资讯网——每日最新资讯28at.com

商品图片
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

images
RAc28资讯网——每日最新资讯28at.com

商品图片列表
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

weight
RAc28资讯网——每日最新资讯28at.com

重量(克)
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

create_time
RAc28资讯网——每日最新资讯28at.com

创建时间
RAc28资讯网——每日最新资讯28at.com

DATETIME
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

update_time
RAc28资讯网——每日最新资讯28at.com

更新时间
RAc28资讯网——每日最新资讯28at.com

DATETIME
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

spu_id
RAc28资讯网——每日最新资讯28at.com

SPUID
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

category_id
RAc28资讯网——每日最新资讯28at.com

类目ID
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

category_name
RAc28资讯网——每日最新资讯28at.com

类目名称
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

brand_name
RAc28资讯网——每日最新资讯28at.com

品牌名称
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

spec
RAc28资讯网——每日最新资讯28at.com

规格
RAc28资讯网——每日最新资讯28at.com

VARCHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

sale_num
RAc28资讯网——每日最新资讯28at.com

销量
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

comment_num
RAc28资讯网——每日最新资讯28at.com

评论数
RAc28资讯网——每日最新资讯28at.com

INT
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

status
RAc28资讯网——每日最新资讯28at.com

商品状态 1-正常,2-下架,3-删除
RAc28资讯网——每日最新资讯28at.com

CHAR
RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com


RAc28资讯网——每日最新资讯28at.com

2.2 需求与实现

2.2.1 需求分析

详见静态原型。RAc28资讯网——每日最新资讯28at.com

2.2.2 实现思路

前端传递给后端的数据格式:RAc28资讯网——每日最新资讯28at.com

{    "spu": {        "name": "这个是商品名称",        "caption": "这个是副标题",        "brandId": 12,        "category1Id": 558,        "category2Id": 559,        "category3Id": 560,        "freightId": 10,        "image": "http://www.qingcheng.com/image/1.jpg",        "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",        "introduction": "这个是商品详情,html代码",        "paraItems": {            "出厂年份": "2019",            "赠品": "充电器"        },        "saleService": "七天包退,闪电退货",        "sn": "020102331",        "specItems": {            "颜色": [                "红",                "绿"            ],            "机身内存": [                "64G",                "8G"            ]        },        "templateId": 42    },    "skuList": [        {            "sn": "10192010292",            "num": 100,            "alertNum": 20,            "price": 900000,            "spec": {                "颜色": "红",                "机身内存": "64G"            },            "image": "http://www.qingcheng.com/image/1.jpg",            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",            "status": "1",            "weight": 130        },        {            "sn": "10192010293",            "num": 100,            "alertNum": 20,            "price": 600000,            "spec": {                "颜色": "绿",                "机身内存": "8G"            },            "image": "http://www.qingcheng.com/image/1.jpg",            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",            "status": "1",            "weight": 130        }    ]}

2.3 代码实现

2.3.1 SPU与SKU列表的保存

/*** 商品组合实体类 */public class Goods implements Serializable {    private Spu spu;    private List<Sku> skuList;}

SpuServiceImpl新增方法:RAc28资讯网——每日最新资讯28at.com

@Autowiredprivate SkuMapper skuMapper;@Autowired  private IdWorker idWorker;@Autowiredprivate CategoryMapper categoryMapper;/*** 保存商品* @param goods 商品组合实体类*/@Transactionalpublic void saveGoods(Goods goods) {    // 保存一个spu的信息    Spu spu = goods.getSpu();    spu.setId(idWorker.nextId()+"");    spuMapper.insert(spu);        //保存sku列表的信息    Date date=new Date();    //分类对象    Category category = categoryMapper.selectByPrimaryKey(spu.getCategory3Id());    List<Sku> skuList = goods.getSkuList();    for (Sku sku:skuList){        sku.setId(idWorker.nextId()+"");        sku.setSpuId(spu.getId());        //sku名称 =spu名称+规格值列表        String name=spu.getName();        //sku.getSpec() {"颜色":"红","机身内存":"64G"}        Map<String,String> specMap = JSON.parseObject(sku.getSpec(), Map.class);        for(String value:specMap.values()){            name+=" "+value;        }        sku.setName(name);//名称        sku.setCreateTime(date);//创建日期        sku.setUpdateTime(date);//修改日期        sku.setCategoryId(spu.getCategory3Id());//分类id        sku.setCategoryName(category.getName());//分类名称        sku.setCommentNum(0);//评论数        sku.setSaleNum(0);//销售数量        skuMapper.insert(sku);    }}

该方法要对两个表操作,需添加事务:RAc28资讯网——每日最新资讯28at.com

@Service(interfaceClass=SpuService.class)

在类上加@Transactional,并在@Service注解中指定接口为SpuService.class。RAc28资讯网——每日最新资讯28at.com

SpuController修改add方法:RAc28资讯网——每日最新资讯28at.com

@PostMapping("/save")public Result save(@RequestBody Goods goods){    spuService.saveGoods(goods);    return new Result();}

3 建立分类与品牌的关联

3.1 需求

Q:为什么要建立分类与品牌的关联?RAc28资讯网——每日最新资讯28at.com

A:因为我们在前台搜索时,需要通过分类找到品牌列表。RAc28资讯网——每日最新资讯28at.com

Q:分类与品牌是什么关系?RAc28资讯网——每日最新资讯28at.com

A:多对多。RAc28资讯网——每日最新资讯28at.com

Q:在什么地方添加关系?RAc28资讯网——每日最新资讯28at.com

A:我们不在后台单独实现分类与品牌的关联,而是在添加商品时自动添加关联。RAc28资讯网——每日最新资讯28at.com

3.2 实现思路

  • 设计中间表tb_category_brand表
  • 创建实体类、数据访问接口
  • 在添加商品的saveGoods方法中添加代码逻辑 ,将SPU的品牌编号和分类编号一起插入到(中间表)

3.3 代码

创建实体类

@Table(name="tb_category_brand")@Datapublic class CategoryBrand implements Serializable {    @Id    private Integer categoryId;    @Id     private Integer brandId;}

联合主键,templateId和brandId都有@Id注解。RAc28资讯网——每日最新资讯28at.com

新建数据访问接口

public interface CategoryBrandMapper extends Mapper<CategoryBrand> {}

修改saveGoods方法

CategoryBrand categoryBrand =new CategoryBrand();categoryBrand.setBrandId(spu.getBrandId());categoryBrand.setCategoryId(spu.getCategory3Id());int count=categoryBrandMapper.selectCount(categoryBrand);if(count==0) {    categoryBrandMapper.insert(categoryBrand);}

4 根据ID查询商品

根据id 查询SPU和SKU列表 ,显示效果:RAc28资讯网——每日最新资讯28at.com

{    "spu": {        "brandId": 0,        "caption": "111",        "category1Id": 558,        "category2Id": 559,        "category3Id": 560,        "commentNum": null,        "freightId": null,        "id": 149187842867993,        "image": null,        "images": null,        "introduction": null,        "isDelete": null,        "isEnableSpec": "0",        "isMarketable": "1",        "name": "黑马智能手机",        "paraItems": null,        "saleNum": null,        "saleService": null,        "sn": null,        "specItems": null,        "status": null,        "templateId": 42    },    "skuList": [        {            "alertNum": null,            "brandName": "金立(Gionee)",            "categoryId": 560,            "categoryName": "手机",            "commentNum": null,            "createTime": "2018‐11‐06 10:17:08",            "id": 1369324,            "image": null,            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",            "name": "黑马智能手机",            "num": 100,            "price": 900000,            "saleNum": null,            "sn": "",            "spec": null,            "spuId": 149187842867993,            "status": "1",            "updateTime": "2018‐11‐06 10:17:08",            "weight": null        },        {            "alertNum": null,            "brandName": "金立(Gionee)",            "categoryId": 560,            "categoryName": "手机",            "commentNum": null,            "createTime": "2018‐11‐06 10:17:08",            "id": 1369325,            "image": null,            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",            "name": "黑马智能手机",            "num": 100,            "price": 900000,            "saleNum": null,            "sn": "",            "spec": null,            "spuId": 149187842867993,            "status": "1",            "updateTime": "2018‐11‐06 10:17:08",            "weight": null        }    ]}

4.1 代码

SpuService方法

/*** 根据ID查询商品* @param id * @return*/public Goods findGoodsById(String id){    //查询spu    Spu spu = spuMapper.selectByPrimaryKey(id);        //查询SKU 列表    Example example=new Example(Sku.class);    Example.Criteria criteria = example.createCriteria();    criteria.andEqualTo("spuId",id);    List<Sku> skuList = skuMapper.selectByExample(example);        //封装,返回    Goods goods=new Goods();    goods.setSpu(spu);    goods.setSkuList(skuList);    return goods;}

SpuController

@GetMapping("/findGoodsById")public Goods findGoodsById(Long id){    return spuService.findGoodsById(id);}

5 保存修改

实现思路

  • 修改与新增共用同一个方法
  • 通过spu的id判断当前操作是新增还是修改
  • 如果是新增需要设置spu的id,对spu执行的是insert操作
  • 如果修改则需要删除原来的sku列表,对spu执行的是updateByPrimaryKeySelective操作
  • sku列表的插入部分的代码要判断sku是否有id,如果有id则不重新生成id

代码实现

修改SpuServiceImpl的saveGoods:RAc28资讯网——每日最新资讯28at.com

/*** 保存商品* @param goods*/@Transactionalpublic void saveGoods(Goods goods) {    //保存一个spu的信息    Spu spu = goods.getSpu();    if(spu.getId()==null){//新增商品        spu.setId(idWorker.nextId()+"");        spuMapper.insert(spu);    }else{ //修改        //删除原来的sku列表        Example example=new Example(Sku.class);        Example.Criteria criteria = example.createCriteria();        criteria.andEqualTo("spuId",spu.getId());        skuMapper.deleteByExample(example);        //执行spu的修改        spuMapper.updateByPrimaryKeySelective(spu);    }    //保存sku列表的信息    List<Sku> skuList = goods.getSkuList();    for (Sku sku:skuList){        if(sku.getId()==null){//新增            sku.setId(idWorker.nextId()+"");            sku.setCreateTime(date);//创建日期        }        //添加sku    }//建立分类和品牌的关联}

6 未启用规格的sku处理

6.1 需求分析

有些商品没区分规格,即一个spu对应一个sku ,这时sku列表只传递一条记录,且无规格(spec)属性,要对其判断,避免因空值产生异常。RAc28资讯网——每日最新资讯28at.com

6.2 实现思路

在saveGoods方法的sku列表循环中添加代码,判断RAc28资讯网——每日最新资讯28at.com

// 构建SKU名称,采用SPU+规格值组装if(sku.getSpec()==null || "".equals(sku.getSpec())){    sku.setSpec("{}");}

7 商品审核与上下架

7.1 商品审核

7.1.1 需求分析与实现思路

商品审核:新录入的商品是未审核状态,也是未上架状态。RAc28资讯网——每日最新资讯28at.com

实现思路

  • 修改审核状态,如果审核状态为1,则上架状态也修改为1
  • 记录商品审核记录
  • 记录商品日志

7.1.2 代码实现

/*** 商品审核* @param id* @param status* @param message*/@Transactionalpublic void audit(String id, String status, String message) {    //1.修改状态 审核状态和上架状态    Spu spu = new Spu();    spu.setId(id);    spu.setStatus(status);    if("1".equals(status)){//审核通过        spu.setIsMarketable("1");//自动上架    }    spuMapper.updateByPrimaryKeySelective(spu);        //2.记录商品审核记录        //3.记录商品日志}
@GetMapping("/audit")public Result audit(Long id){    spuService.audit(id);    return new Result();}

7.2 下架商品

7.2.1 需求与实现思路

下架商品,修改上下架状态为下架。下架商品不修改审核状态。 下架商品需要记录商品日志。RAc28资讯网——每日最新资讯28at.com

7.2.2 代码实现

/*** 下架商品* @param id*/public void pull(String id) {    Spu spu = spuMapper.selectByPrimaryKey(id);    spu.setIsMarketable("0");//下架状态    spuMapper.updateByPrimaryKeySelective(spu);}
@GetMapping("/pull")public Result pull(String id){    spuService.pull(id);    return new Result();}

7.3 上架商品

7.3.1 需求分析

将商品修改为上架状态,需要验证该商品是否审核通过,未审核通过的商品不能上架。 上架商品需要记录商品日志。RAc28资讯网——每日最新资讯28at.com

7.3.2 代码实现

通过审核的商品才能上架:RAc28资讯网——每日最新资讯28at.com

/*** 商品上架* @param id*/public void put(String id) {    //1.修改状态    Spu spu = spuMapper.selectByPrimaryKey(id);    if(!"1".equals(spu.getStatus())){        throw new RuntimeException("此商品未通过审核");    }    spu.setIsMarketable("1");    spuMapper.updateByPrimaryKeySelective(spu);        //2.记录商品日志}
@GetMapping("/put")public Result put(String id){    spuService.put(id);    return new Result();}

7.4 批量上下架

7.4.1 需求分析

前端传递一组商品ID,后端进行批量上下架处理,处理后给前端返回处理的条数RAc28资讯网——每日最新资讯28at.com

7.4.2 代码实现

/*** 批量上架商品* @param ids*/public int putMany(Long[] ids) {    Spu spu=new Spu();    spu.setIsMarketable("1");//上架        //批量修改    Example example=new Example(Spu.class);    Example.Criteria criteria = example.createCriteria();    criteria.andIn("id", Arrays.asList(ids));//id    criteria.andEqualTo("isMarketable","0");//下架    criteria.andEqualTo("status","1");//审核通过的    criteria.andEqualTo("isDelete","0");//非删除的    return spuMapper.updateByExampleSelective(spu, example);}
@GetMapping("/putMany")public Result putMany(Long[] ids){    int count = spuService.putMany(ids);    return new Result(0,"上架"+count+"个商品");}

8 删除与还原商品

8.1 需求分析

删除商品并非物理删除(真正的执行删除数据),而是通过将表中某字段标记为删除状态。RAc28资讯网——每日最新资讯28at.com

还原商品实际就是将删除状态再修改回来。RAc28资讯网——每日最新资讯28at.com

如果商品需要物理删除,必须是先逻辑删除才能进行物理删除,删除前需要检查状态。RAc28资讯网——每日最新资讯28at.com

8.2 实现思路

  • 逻辑删除商品,修改spu表is_delete字段为1
  • 商品回收站显示spu表is_delete字段为1的记录
  • 回收商品,修改spu表is_delete字段为0

本文链接:http://www.28at.com/showinfo-26-96760-0.html一文搞懂大厂商品中心设计!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 日志打印的这10个坑,你至少踩过一个...

下一篇: 2024 最新最全 VS Code 插件推荐!

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top