商品微服务介绍

商品分类管理模块介绍

商品分类简介

分类是通过比较事物之间的相似性,把具有某些共同点或相似特征的事物归于一个不确定集合的逻辑方法。对事物进行分类的作用是使一个大集合中的内容条理清楚、层次分明。分类在电商中也叫类目。要设计一个商品管理系统,首先需要把分类系统做好,因为它是商品管理系统非常基础和重要的一个环节。

商品分类就是对商品分门别类。有的商品是衣服,有的商品是数码产品,还有的商品是美妆/护理产品等。这样处理的好处是方便用户筛选和辨别。以天猫商城和京东商城为例,在商城首页中很大一部分版面都可以进行分类的选择。用户在这里可以通过分类设置快速进入对应的商品列表页面并进行商品选择。

天猫商城分类页面如图 4-1 所示。

image 2025 04 23 12 59 26 253
Figure 1. 图4-1 天猫商城分类页面

京东商城分类页面如图 4-2 所示。

image 2025 04 23 13 00 59 403
Figure 2. 图4-2 京东商城分类页面

分类层级设计

通过观察天猫商城和京东商城的分类页面,能够看出二者分类层级的设计方法。在不同的层级下,商城系统需要对商品做进一步的归类操作。因为商品规模和业务不同,所以不同层级的展现效果也不同。天猫商城和京东商城在分类层级的设计思路上是相同的,即三级分层。

如果不设置一定的分类层级,过多的商品类目会给用户筛选带来困难。在设置分类层级后,用户在查找商品时可以遵循 “先大类后小类” 的原则。比如,用户想买一部手机,可以先在一级分类中筛选并定位到 “手机/数码”,然后在二级分类下进行筛选。

当然,也有人提出设计更多层级的分类,如四级分类、五级分类等。层级太多,一是对用户不太友好,不利于搜索;二是对后台管理人员不友好,不方便管理。目前,大部分商城系统选择的分类层级是三级,新蜂商城的商品分类也被设置成三级

商品分类管理模块的主要功能

关于商品分类管理模块的项目改造,主要是针对后台管理系统进行接口开发,具体功能可以整理为以下两点。

  1. 分类数据的设置。

  2. 商品与分类的挂靠和关联。

分类数据的设置包括分类信息的添加、修改等操作,这些数据的存在使得用户可以在商城端进行筛选。商品与分类的挂靠和关联是指将商品信息与分类信息建立联系。比如,在商品表中设置一个分类 id 的关联字段,商品与分类二者之间就产生了关联关系,这样就能够通过对应的分类搜索到对应的商品列表。

在设置分类数据时,对应的页面效果如图 4-3 所示。可以进行添加、修改和删除操作,页面中的操作会调用后端所开发的接口。

image 2025 04 23 13 05 47 509
Figure 3. 图4-3 分类管理页面效果

商品分类表结构设计

商品分类被设置成三个层级,不过在设计表时并没有做成三张表,因为大部分字段都是一样的,所以就选择增加一个 category_level 字段来区分分类的层级,同时使用 parent_id 字段进行上下级类目之间的关联,分类表的字段设计如下:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_goods_db`
/*!40100 DEFAULT CHARACTER SET utf8 */;
USE 'newbee_mall_cloud_goods_db';

# 创建商品分类表

DROP TABLE IF EXISTS 'tb_newbee_mall_goods_category';

CREATE TABLE 'tb_newbee_mall_goods_category' (
  'category_id' bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id',
  'category_level' tinyint(4) NOT NULL DEFAULT '0' COMMENT '分类级别(1-一级分类 2-二级分类 3-三级分类)',
  'parent_id' bigint(20) NOT NULL DEFAULT '0' COMMENT '父分类id',
  'category_name' varchar(50) NOT NULL DEFAULT '' COMMENT '分类名称',
  'category_rank' int(11) NOT NULL DEFAULT '0' COMMENT '排序值(字段越大越靠前)',
  'is_deleted' tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',
  'create_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  'create_user' int(11) NOT NULL DEFAULT '0' COMMENT '创建者id',
  'update_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  'update_user' int(11) DEFAULT '0' COMMENT '修改者id',
  PRIMARY KEY ('category_id') USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

商品分类表的字段及每个字段对应的含义都在上面的代码中做了介绍,读者可以对照理解,并正确地把建表 SQL 语句导入数据库。这里只给出了建表语句,如果需要一些测试分类数据,可以到本实战项目的开源仓库下载商品微服务初始化的 SQL 语句,笔者准备了 100 多条分类数据用于功能测试。另外,如果想对功能进行改造,读者也可以自行根据该 SQL 语句进行扩展。

商品管理模块介绍

在购物网站中,购物行为必然建立在商品的基础上。作为交易的基础,商品管理模块可以说是电商系统最重要的部分,是整个电商系统的数据基础,用于记录与商品有关的数据,虽然系统逻辑不复杂,但是操作的数据比较多,需要掌控细节,订单、营销、支付、物流等环节都需要从商品管理模块中获取和操作数据。

  1. 商品管理模块的主要功能

    本节的项目改造主要针对后台管理系统中商品管理模块进行接口开发,主要功能如下。

    1. 商品添加接口。

    2. 商品修改接口。

    3. 商品列表接口。

    4. 商品上架接口与商品下架接口。

    在设置商品数据时,对应的页面效果如图 4-4 所示。可以进行添加、修改等操作,页面中的操作会调用后端所开发的这些接口。

    image 2025 04 23 13 09 15 253
    Figure 4. 图4-4 商品管理页面效果
  2. 商品信息表结构设计

为了设计商品信息表的字段,笔者参考了一些知名线上商城的设计,如天猫商城和京东商城的商品详情页,通过观察其中的内容可以大致得出一些商品信息的必要字段。天猫商城和京东商城的商品详情页显示内容分别如图 4-5 和图 4-6 所示。

image 2025 04 23 13 09 45 796
Figure 5. 图4-5 天猫商城的商品详情页
image 2025 04 23 13 10 01 155
Figure 6. 图4-6 京东商城的商品详情页

简单来说,用户在阿里系、京东系等商品信息长期引导下形成了使用习惯,商品信息的设计和模块划分比较一致,这种模式已经渐渐地沉淀下来并形成一种无形的规则,主要分为:

  1. 商品图片;

  2. 商品基本信息;

  3. 商品详情。

通过图 4-5 和图 4-6 中的一些信息可以得出商品信息表的必要字段:

  1. 商品名称;

  2. 商品简介;

  3. 商品原价;

  4. 商品实际售价;

  5. 商品详情内容;

  6. 商品主图/商品封面图。

以上字段是商品信息实体应该具有的基本字段,新蜂商城在此基础上增加了几个字段:

  1. 商品库存(订单出库及仓库数据统计);

  2. 分类 id(与商品类目的关联关系);

  3. 销售状态(可以控制商品是否能够正常销售)。

最终,商品信息表的设计如下,在数据库中直接执行如下 SQL 语句即可。

use 'newbee_mall_cloud_goods_db';

DROP TABLE IF EXISTS 'tb_newbee_mall_goods_info';

# 创建商品信息表
CREATE TABLE 'tb_newbee_mall_goods_info' (
  'goods_id' bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品信息表主键id',
  'goods_name' varchar(200) NOT NULL DEFAULT '' COMMENT '商品名称',
  'goods_intro' varchar(200) NOT NULL DEFAULT '' COMMENT '商品简介',
  'goods_category_id' bigint(20) NOT NULL DEFAULT '0' COMMENT '关联分类id',
  'goods_cover_img' varchar(200) NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品主图',
  'goods_carousel' varchar(500) NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品轮播图',
  'goods_detail_content' text NOT NULL COMMENT '商品详情',
  'original_price' int(11) NOT NULL DEFAULT '1' COMMENT '商品原价',
  'selling_price' int(11) NOT NULL DEFAULT '1' COMMENT '商品实际售价',
  'stock_num' int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品库存数量',
  'tag' varchar(20) NOT NULL DEFAULT '' COMMENT '商品标签',
  'goods_sell_status' tinyint(4) NOT NULL DEFAULT '0' COMMENT '商品上架状态 1-上架; 0-下架',
  'create_user' int(11) NOT NULL DEFAULT '0' COMMENT '添加者主键id',
  'create_time' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  'update_user' int(11) NOT NULL DEFAULT '0' COMMENT '修改者主键id',
  'update_time' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY ('goods_id') USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

商品信息表的字段及每个字段对应的含义都在上面的 SQL 语句中做了介绍,读者可以对照理解,并正确地把建表 SQL 语句导入数据库。这里只给出了建表语句,如果需要测试商品数据,可以到本实战项目的开源仓库下载商品微服务初始化的 SQL 语句,笔者在其中准备了近千条商品数据用于功能测试。另外,想要对功能进行改造,读者也可以自行根据该 SQL 语句进行扩展。