升鲜宝云商品库功能设计与数据库表结构详细文档(一)---升鲜宝生鲜配送供应链管理系统源代码服务
升鲜宝云商品库功能设计与数据库表结构详细文档
平台公共商品模板市场 / 快速初始化商品中心 / 不参与业务核算
|--------|------------------------------------------------|
| 项目 | 内容 |
| 文档版本 | V1.0 |
| 适用系统 | 升鲜宝供应链管理系统 / SaaS平台 |
| 技术栈建议 | Spring Boot + MyBatis-Plus + MySQL 8.0 + Redis |
| 核心口径 | platform_ 是软件公司公共云商品库;pms_ 是供应链公司自己的公司商品中心 |
| 生成日期 | 2023-05-09 |
一、文档目标与核心结论
本文件用于指导开发人员重构升鲜宝云商品库模块,将云商品库设计为"平台公共商品模板市场",帮助购买升鲜宝软件的供应链公司、商户或客户快速初始化商品中心,而不是让云商品库直接参与订单、采购、库存、成本等业务核算。
- 云商品库只属于软件公司平台侧,表前缀统一使用 platform_。
- 平台商品被客户选择后,复制/导入到该客户自己的 pms_ 公司商品中心。
- 导入后的 pms_ 商品才参与 B2B 客户订单、公司采购、公司库存 wms_、门店商品配置等业务链路。
- 云商品库面向商业化,应支持行业商品包、一键导入、版本发布、导入映射、素材库、多语言和批量维护。
- 前端让客户看到的是简单的"商品市场/模板包",后端用 SPU/SKU/SKU_UNIT 保证扩展性。
核心架构图

二、业务边界与模块定位
|---------|--------------|----------|--------------|-------------------------------------|
| 模块 | 表前缀 | 归属 | 是否参与业务核算 | 说明 |
| 云商品库 | platform_ | 软件公司平台 | 否 | 平台公共商品模板市场,给客户快速初始化商品资料 |
| 公司商品中心 | pms_ | 供应链公司/租户 | 是 | 导入后形成客户自己的商品中心,进入业务链路 |
| B2B客户订单 | oms_ | 供应链公司业务 | 是 | 公司卖给B2B客户,使用 pms_ 公司商品体系 |
| 公司库存成本 | wms_ | 供应链公司业务 | 是 | 库存与成本主核算使用 product_sku_id + unit_id |
| 客户自用进销存 | cwms_ | B2B客户侧 | 是,但属于客户自用 | 客户订货端附带的简单库存,不代表供应链公司的公司库存 |
| 门店商品体系 | mall_shop_* | 自营实体门店 | 是 | 门店卖给会员/POS走门店商品规格ID |
三、商业化功能设计
3.1 功能菜单
|----------|----------|----------|---------------------------------------------------|
| 一级菜单 | 二级功能 | 使用角色 | 说明 |
| 云商品库 | 商品浏览 | 客户/运营 | 按行业、分类、品牌、关键字浏览平台商品 |
| 云商品库 | 商品详情 | 客户/运营 | 查看图片、规格、单位、建议售价、模板信息 |
| 云商品库 | 商品包市场 | 客户/运营 | 按行业选择商品模板包,例如学校食堂、生鲜配送、水产、冻品、粮油 |
| 云商品库 | 导入清单 | 客户 | 勾选商品后统一确认导入范围和导入模式 |
| 云商品库 | 导入到商品中心 | 客户/实施 | 生成 pms_goods / pms_goods_sku / pms_goods_sku_unit |
| 云商品库 | 已导入商品 | 客户/实施 | 查看平台商品与本公司 pms_ 商品的映射关系 |
| 平台运营 | 平台商品维护 | 软件公司运营 | 维护平台商品、SKU、单位、图片、版本 |
| 平台运营 | 商品包维护 | 软件公司运营 | 维护不同行业的模板包和默认必选商品 |
| 平台运营 | 素材库 | 软件公司运营 | 维护商品图片、详情图、分类图、品牌图 |
| 平台运营 | 版本发布 | 软件公司运营 | 发布商品资料版本,客户可选择同步更新 |
3.2 典型客户上线流程
- 客户开通升鲜宝系统后进入"云商品库"。
- 选择所属行业,例如生鲜配送、学校食堂、水产、冻品、粮油、华人超市。
- 选择一个或多个商品模板包,也可以单独搜索商品加入导入清单。
- 系统检查客户 pms_ 中是否已有相同编码、条码、名称的商品。
- 客户确认是否自动创建分类、品牌、单位,是否复制图片,是否导入SKU和销售单位。
- 系统生成导入任务,批量创建 pms_goods、pms_goods_sku、pms_goods_sku_unit、pms_goods_media 等公司商品数据。
- 写入平台商品与公司商品映射,后续平台商品更新时可以提示客户是否同步。
3.3 商业化价值
- 减少新客户上线录入商品资料的时间。
- 平台统一维护高质量商品图片和分类,提升客户商城展示效果。
- 通过行业商品包提升软件产品的交付标准化能力。
- 通过导入映射和版本更新,让平台商品资料可以持续运营。
- 平台云商品库可以成为后续AI识别商品、自动补全资料、行业模板收费的基础。
四、现有 platform_ 表结构诊断
4.1 当前 E-R 图

|-------------------------|----------|------------------------------------------------------------------|---------------------------------------------|
| 当前表 | 当前定位 | 主要字段/关系 | 问题诊断 |
| platform_brand | 平台商品品牌 | brand_name、brand_url、brand_index | 缺少品牌编码、别名、多语言、启用范围、行业标签 |
| platform_category | 平台商品类别 | pid、level、category_code、category_name | 支持树形,但缺少path、leaf_flag、行业编码、导入映射策略 |
| platform_unit | 平台单位 | unit_name、unit_type | 缺少unit_code、小数位、舍入规则、国际化字段 |
| platform_material | 平台商品表 | material_code、material_name、category_id、brand_id、unit_id、gb_code | 命名不直观,缺少SKU、销售单位、规格、参考价格、行业标签、版本 |
| platform_material_goods | 已导入云商品 | material_id | 只能记录商品已导入,无法记录租户、pms映射、导入版本、失败原因 |
| platform_media_group | 平台商品素材组 | media_group_name、category_id | 可保留,但需要增强用途、行业、标签 |
| platform_media | 平台素材 | media_name、media_type、media_url | 缺少尺寸、md5、文件大小、来源、版权信息 |
| platform_media_mapping | 商品素材映射 | media_id、material_id、major | 只能关联material,不能关联SKU/SKU_UNIT,也缺少usage_type |
4.2 当前结构的核心问题
- 没有清晰的 SPU / SKU / SKU_UNIT 分层,难以承载规格、包装、销售单位和模板导入。
- platform_material 命名容易误解为"原料/材质",商业化表达不够直观。
- 缺少商品包、导入任务、导入映射、发布版本等商业化 SaaS 必备能力。
- 当前"已导入云商品表"没有租户维度和 pms_ 映射,无法防止重复导入,也无法支持增量更新。
- 素材体系方向正确,但无法区分主图、详情图、资质图、分类图、品牌图等业务用途。
五、目标数据库模型设计
5.1 目标 E-R 图:商品主数据

5.2 目标 E-R 图:商品包

5.3 目标 E-R 图:导入与业务链路

5.4 推荐表清单
|------------------------------|-------------|------------------------|-----------------------------------|
| 表名 | 中文名 | 建议动作 | 核心作用 |
| platform_category | 平台商品分类 | 保留增强 | 分类树、行业归属、导入到pms分类的基础 |
| platform_brand | 平台品牌 | 保留增强 | 品牌资料、logo、品牌首字母、多语言 |
| platform_unit | 平台单位 | 保留增强 | 平台标准单位、单位类型、小数位 |
| platform_goods | 平台商品SPU | 新增/替代platform_material | 平台公共商品主档 |
| platform_goods_sku | 平台商品SKU | 新增 | 规格、条码、包装、重量体积 |
| platform_goods_sku_unit | 平台SKU销售单位 | 新增 | 平台销售最小粒度,用于导入生成pms_goods_sku_unit |
| platform_goods_unit_relation | 平台商品单位换算 | 新增 | 销售/采购/库存参考单位及换算 |
| platform_media | 平台素材 | 保留增强 | 图片、视频、文件、详情素材 |
| platform_goods_media | 平台商品素材关系 | 新增/替代mapping | 支持SPU/SKU/SKU_UNIT多层素材映射 |
| platform_goods_package | 平台商品模板包 | 新增 | 行业商品包、上线模板 |
| platform_goods_package_item | 模板包明细 | 新增 | 商品包与商品关系 |
| platform_import_task | 导入任务 | 新增 | 记录客户导入批次和任务状态 |
| platform_import_record | 导入明细 | 新增 | 记录每个商品导入结果、失败原因 |
| platform_company_mapping | 平台商品与公司商品映射 | 新增 | 平台ID到pms_ ID的映射,支持防重和更新 |
| platform_goods_i18n | 平台商品多语言 | 可选新增 | 支持海外/多语言业务 |
| platform_publish_log | 发布日志 | 新增 | 平台商品资料版本发布记录 |
六、核心数据库表结构设计
以下DDL为重构建议,可以作为新版本表结构蓝本。若需要保留历史表,可先新建目标表,再做数据迁移。
6.1 platform_goods:平台商品SPU表
CREATE TABLE platform_goods (
id BIGINT NOT NULL COMMENT '主键ID',
platform_goods_code VARCHAR(64) NOT NULL COMMENT '平台商品编码',
goods_name VARCHAR(200) NOT NULL COMMENT '商品名称',
category_id BIGINT DEFAULT NULL COMMENT '平台分类ID=platform_category.id',
brand_id BIGINT DEFAULT NULL COMMENT '平台品牌ID=platform_brand.id',
default_unit_id BIGINT DEFAULT NULL COMMENT '默认单位ID=platform_unit.id',
goods_property TINYINT DEFAULT 1 COMMENT '商品性质 0非标品 1标品',
gb_code VARCHAR(64) DEFAULT NULL COMMENT '国标码/标准编码',
main_bar_code VARCHAR(128) DEFAULT NULL COMMENT '主条码',
origin_place VARCHAR(128) DEFAULT NULL COMMENT '产地',
storage_method VARCHAR(128) DEFAULT NULL COMMENT '存储方式',
shelf_life_days INT DEFAULT NULL COMMENT '保质期天数',
selling_point VARCHAR(500) DEFAULT NULL COMMENT '商品卖点',
goods_desc MEDIUMTEXT COMMENT '商品描述',
cover_image VARCHAR(500) DEFAULT NULL COMMENT '封面图',
industry_code VARCHAR(64) DEFAULT NULL COMMENT '行业编码',
publish_status TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1已发布 2已下架',
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
imported_count INT DEFAULT 0 COMMENT '被导入次数',
enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用状态',
del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记',
sort_code INT NOT NULL DEFAULT 1 COMMENT '排序码',
creator BIGINT DEFAULT NULL COMMENT '创建人',
create_date BIGINT DEFAULT NULL COMMENT '创建时间',
updater BIGINT DEFAULT NULL COMMENT '修改人',
update_date BIGINT DEFAULT NULL COMMENT '修改时间',
remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id),
UNIQUE KEY uk_platform_goods_code (platform_goods_code),
KEY idx_platform_goods_category (category_id),
KEY idx_platform_goods_brand (brand_id),
KEY idx_platform_goods_name (goods_name),
KEY idx_platform_goods_publish (publish_status, enabled, del_flag)
) COMMENT='平台云商品SPU表';
6.2 platform_goods_sku:平台商品SKU表
CREATE TABLE platform_goods_sku (
id BIGINT NOT NULL COMMENT '主键ID',
goods_id BIGINT NOT NULL COMMENT '平台商品ID=platform_goods.id',
platform_sku_code VARCHAR(64) NOT NULL COMMENT '平台SKU编码',
sku_name VARCHAR(200) DEFAULT NULL COMMENT 'SKU名称/规格名称',
bar_code VARCHAR(128) DEFAULT NULL COMMENT 'SKU条码',
spec_text VARCHAR(255) DEFAULT NULL COMMENT '规格描述',
length DECIMAL(12,3) DEFAULT NULL COMMENT '长',
width DECIMAL(12,3) DEFAULT NULL COMMENT '宽',
height DECIMAL(12,3) DEFAULT NULL COMMENT '高',
weight DECIMAL(12,3) DEFAULT NULL COMMENT '重量',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
sort_code INT NOT NULL DEFAULT 1,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_platform_sku_code (platform_sku_code),
KEY idx_platform_sku_goods (goods_id),
KEY idx_platform_sku_barcode (bar_code)
) COMMENT='平台云商品SKU表';
6.3 platform_goods_sku_unit:平台SKU销售单位表
CREATE TABLE platform_goods_sku_unit (
id BIGINT NOT NULL COMMENT '主键ID',
goods_id BIGINT NOT NULL COMMENT '平台商品ID',
sku_id BIGINT NOT NULL COMMENT '平台SKU ID',
unit_id BIGINT NOT NULL COMMENT '单位ID=platform_unit.id',
platform_sku_unit_code VARCHAR(64) NOT NULL COMMENT '平台销售商品编码',
sale_flag TINYINT NOT NULL DEFAULT 1 COMMENT '是否可销售/订货',
default_sale_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认销售单位',
reference_price DECIMAL(12,3) DEFAULT 0.000 COMMENT '参考销售价',
reference_cost_price DECIMAL(12,3) DEFAULT 0.000 COMMENT '参考成本价',
min_order_qty DECIMAL(12,3) DEFAULT 1.000 COMMENT '建议起订量',
bar_code VARCHAR(128) DEFAULT NULL COMMENT '单位条码',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
sort_code INT NOT NULL DEFAULT 1,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_platform_sku_unit_code (platform_sku_unit_code),
KEY idx_platform_sku_unit_sku (sku_id),
KEY idx_platform_sku_unit_goods (goods_id, unit_id)
) COMMENT='平台云商品SKU销售单位表';
6.4 platform_goods_unit_relation:平台商品单位换算表
CREATE TABLE platform_goods_unit_relation (
id BIGINT NOT NULL COMMENT '主键ID',
goods_id BIGINT NOT NULL COMMENT '平台商品ID',
sku_id BIGINT DEFAULT NULL COMMENT '平台SKU ID,可为空',
from_unit_id BIGINT NOT NULL COMMENT '来源单位',
to_unit_id BIGINT NOT NULL COMMENT '目标单位',
convert_rate DECIMAL(18,6) NOT NULL DEFAULT 1.000000 COMMENT '换算比例',
sale_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否销售单位',
purchase_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否采购参考单位',
inventory_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否库存参考单位',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
sort_code INT NOT NULL DEFAULT 1,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
KEY idx_platform_unit_relation_goods (goods_id),
KEY idx_platform_unit_relation_sku (sku_id),
KEY idx_platform_unit_relation_unit (from_unit_id, to_unit_id)
) COMMENT='平台云商品单位换算表';
6.5 platform_goods_package / platform_goods_package_item:商品模板包
CREATE TABLE platform_goods_package (
id BIGINT NOT NULL COMMENT '主键ID',
package_code VARCHAR(64) NOT NULL COMMENT '商品包编码',
package_name VARCHAR(200) NOT NULL COMMENT '商品包名称',
industry_code VARCHAR(64) DEFAULT NULL COMMENT '行业编码',
package_desc VARCHAR(500) DEFAULT NULL COMMENT '商品包说明',
cover_image VARCHAR(500) DEFAULT NULL COMMENT '封面图',
goods_count INT DEFAULT 0 COMMENT '商品数量',
publish_status TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1已发布 2下架',
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
sort_code INT NOT NULL DEFAULT 1,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_platform_package_code (package_code),
KEY idx_platform_package_industry (industry_code)
) COMMENT='平台云商品模板包表';
CREATE TABLE platform_goods_package_item (
id BIGINT NOT NULL COMMENT '主键ID',
package_id BIGINT NOT NULL COMMENT '商品包ID',
goods_id BIGINT NOT NULL COMMENT '平台商品ID',
required_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否必选商品',
sort_code INT NOT NULL DEFAULT 1,
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_package_goods (package_id, goods_id),
KEY idx_package_item_goods (goods_id)
) COMMENT='平台云商品模板包明细表';
6.6 platform_import_task / platform_import_record:导入任务与明细
CREATE TABLE platform_import_task (
id BIGINT NOT NULL COMMENT '主键ID',
tenant_id BIGINT DEFAULT NULL COMMENT '租户/公司ID',
task_code VARCHAR(64) NOT NULL COMMENT '导入任务编号',
import_type TINYINT NOT NULL DEFAULT 1 COMMENT '1选品导入 2商品包导入 3Excel导入',
import_mode TINYINT NOT NULL DEFAULT 2 COMMENT '1仅主档 2商品+SKU+单位 3完整导入',
total_count INT DEFAULT 0 COMMENT '总数量',
success_count INT DEFAULT 0 COMMENT '成功数量',
fail_count INT DEFAULT 0 COMMENT '失败数量',
task_status TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1处理中 2成功 3部分失败 4失败',
overwrite_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否覆盖已有商品',
copy_media_flag TINYINT NOT NULL DEFAULT 1 COMMENT '是否复制图片',
create_category_flag TINYINT NOT NULL DEFAULT 1 COMMENT '是否自动创建分类',
create_brand_flag TINYINT NOT NULL DEFAULT 1 COMMENT '是否自动创建品牌',
create_unit_flag TINYINT NOT NULL DEFAULT 1 COMMENT '是否自动创建单位',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_import_task_code (task_code),
KEY idx_import_task_tenant (tenant_id, task_status)
) COMMENT='平台商品导入任务表';
CREATE TABLE platform_import_record (
id BIGINT NOT NULL COMMENT '主键ID',
task_id BIGINT NOT NULL COMMENT '导入任务ID',
tenant_id BIGINT DEFAULT NULL COMMENT '租户/公司ID',
platform_goods_id BIGINT NOT NULL COMMENT '平台商品ID',
platform_sku_id BIGINT DEFAULT NULL COMMENT '平台SKU ID',
platform_sku_unit_id BIGINT DEFAULT NULL COMMENT '平台SKU单位ID',
pms_goods_id BIGINT DEFAULT NULL COMMENT '公司商品ID',
pms_product_sku_id BIGINT DEFAULT NULL COMMENT '公司SKU ID',
pms_sku_unit_id BIGINT DEFAULT NULL COMMENT '公司销售最小粒度ID',
import_status TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1成功 2失败 3跳过',
fail_reason VARCHAR(500) DEFAULT NULL COMMENT '失败原因',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
KEY idx_import_record_task (task_id),
KEY idx_import_record_platform (platform_goods_id, platform_sku_id, platform_sku_unit_id)
) COMMENT='平台商品导入明细表';
6.7 platform_company_mapping:平台商品与公司商品映射表
CREATE TABLE platform_company_mapping (
id BIGINT NOT NULL COMMENT '主键ID',
tenant_id BIGINT DEFAULT NULL COMMENT '租户ID/公司ID',
platform_goods_id BIGINT NOT NULL COMMENT '平台商品ID',
platform_sku_id BIGINT DEFAULT NULL COMMENT '平台SKU ID',
platform_sku_unit_id BIGINT DEFAULT NULL COMMENT '平台SKU单位ID',
pms_goods_id BIGINT DEFAULT NULL COMMENT '公司商品ID=pms_goods.id',
pms_product_sku_id BIGINT DEFAULT NULL COMMENT '公司SKU ID=pms_goods_sku.id',
pms_sku_unit_id BIGINT DEFAULT NULL COMMENT '公司销售最小粒度ID=pms_goods_sku_unit.id',
import_task_id BIGINT DEFAULT NULL COMMENT '导入任务ID',
import_status TINYINT NOT NULL DEFAULT 1 COMMENT '1成功 2失败 3已更新',
platform_version INT DEFAULT NULL COMMENT '导入时平台商品版本',
enabled TINYINT NOT NULL DEFAULT 1,
del_flag TINYINT NOT NULL DEFAULT 0,
creator BIGINT DEFAULT NULL,
create_date BIGINT DEFAULT NULL,
updater BIGINT DEFAULT NULL,
update_date BIGINT DEFAULT NULL,
remark VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_tenant_platform_goods (tenant_id, platform_goods_id),
KEY idx_mapping_pms_goods (pms_goods_id),
KEY idx_mapping_platform_sku_unit (platform_sku_unit_id)
) COMMENT='平台商品导入公司商品中心映射表';
七、导入到 pms_ 的落地流程

|--------|----------|-------------------------------------------------|------------------------|
| 步骤 | 处理内容 | 落库/调用 | 关键校验 |
| 1 | 选择商品或商品包 | platform_goods / platform_goods_package | 仅允许已发布、启用、未删除的商品 |
| 2 | 创建导入任务 | platform_import_task | 记录租户、导入模式、是否复制图片、是否覆盖 |
| 3 | 重复检查 | pms_goods / pms_goods_sku / pms_goods_sku_unit | 按编码、条码、名称、平台映射检查 |
| 4 | 自动创建基础资料 | pms_goods_category / pms_brand / pms_goods_unit | 根据导入配置决定是否自动创建 |
| 5 | 创建公司商品 | pms_goods | 复制商品名称、分类、品牌、描述、图片等 |
| 6 | 创建SKU | pms_goods_sku | 复制规格、条码、规格属性 |
| 7 | 创建销售最小粒度 | pms_goods_sku_unit | 生成公司 sku_unit_id |
| 8 | 复制媒体 | pms_goods_media | 主图、详情图、视频按usage_type复制 |
| 9 | 写入映射 | platform_company_mapping | 防止重复导入,支持后续版本更新 |
| 10 | 返回结果 | platform_import_record | 成功/失败/跳过明细 |
八、后端开发设计
8.1 模块包建议
com.sxb.platform
├── category 平台分类
├── brand 平台品牌
├── unit 平台单位
├── goods 平台商品SPU
├── sku 平台商品SKU
├── skuunit 平台销售最小粒度
├── relation 平台单位换算
├── media 平台素材库
├── package 商品模板包
├── importtask 导入任务
└── mapping 平台商品与pms商品映射
8.2 Service 接口建议
public interface PlatformGoodsService {
Page<PlatformGoodsVO> page(PlatformGoodsQuery query);
PlatformGoodsDetailVO detail(Long goodsId);
Long create(PlatformGoodsCreateDTO dto);
void update(PlatformGoodsUpdateDTO dto);
void publish(Long goodsId);
void offline(Long goodsId);
}
public interface PlatformGoodsPackageService {
Page<PlatformGoodsPackageVO> page(PlatformPackageQuery query);
PlatformGoodsPackageDetailVO detail(Long packageId);
void addGoods(Long packageId, List<Long> goodsIds);
void removeGoods(Long packageId, List<Long> goodsIds);
void publish(Long packageId);
}
public interface PlatformImportService {
Long createImportTask(PlatformImportCreateDTO dto);
PlatformImportResultVO executeImport(Long taskId);
PlatformImportPreviewVO previewImport(PlatformImportPreviewDTO dto);
void syncUpdatedPlatformGoods(Long mappingId);
}
8.3 API 接口清单
|---------------------------------------------|--------|---------|------------------------|
| 接口 | 方法 | 说明 | 返回/动作 |
| /api/platform/goods/page | GET | 云商品分页查询 | 商品卡片列表 |
| /api/platform/goods/{id} | GET | 云商品详情 | SPU/SKU/SKU_UNIT/图片/单位 |
| /api/platform/packages/page | GET | 商品包分页查询 | 行业商品包列表 |
| /api/platform/packages/{id} | GET | 商品包详情 | 商品包商品明细 |
| /api/platform/import/preview | POST | 导入预览 | 重复检查、待创建分类品牌单位 |
| /api/platform/import/tasks | POST | 创建导入任务 | 返回taskId |
| /api/platform/import/tasks/{taskId}/execute | POST | 执行导入 | 生成pms_商品 |
| /api/platform/import/tasks/{taskId}/result | GET | 查询导入结果 | 成功/失败明细 |
| /api/platform/mappings/page | GET | 已导入商品查询 | 平台商品与pms映射 |
| /api/platform/mappings/{id}/sync | POST | 同步平台更新 | 更新pms商品资料 |
九、前端页面设计建议
|----------|----------------------------|--------------------------|
| 页面 | 核心区域 | 关键交互 |
| 云商品库首页 | 行业筛选、分类树、品牌筛选、搜索框、商品卡片 | 加入导入清单、查看详情、按商品包筛选 |
| 商品详情页 | 基础信息、规格、销售单位、单位换算、图片素材 | 一键导入、加入导入清单 |
| 商品包市场 | 行业卡片、商品包卡片、商品数量、适用场景 | 一键导入商品包、预览商品 |
| 导入确认页 | 待导入列表、重复项、导入模式、勾选项 | 是否创建分类/品牌/单位、是否复制图片、是否覆盖 |
| 导入结果页 | 成功、失败、跳过、失败原因 | 重新导入失败项、查看pms商品 |
| 平台运营商品维护 | SPU/SKU/SKU_UNIT编辑、图片、发布状态 | 草稿、发布、下架、版本更新 |
| 平台素材库 | 素材分组、图片/视频、用途标签 | 批量上传、绑定商品、设置主图 |
十、数据迁移方案
|-------------------------|---------------------------------------------------|---------------------------------------------------------------------------------------------------|
| 旧表 | 新表 | 迁移说明 |
| platform_material | platform_goods | material_code -> platform_goods_code,material_name -> goods_name,category_id/brand_id/unit_id保留 |
| platform_material | platform_goods_sku | 初期可为每个旧商品生成一个默认SKU,sku_name可取material_name或"默认规格" |
| platform_material | platform_goods_sku_unit | 按unit_id生成一个默认销售单位,platform_sku_unit_code可由商品编码+单位生成 |
| platform_category | platform_category | 保留并增加path、leaf_flag、industry_code等字段 |
| platform_brand | platform_brand | 保留并增加brand_code、brand_alias、brand_logo等字段 |
| platform_unit | platform_unit | 保留并增加unit_code、decimal_places、rounding_method |
| platform_media_mapping | platform_goods_media | material_id映射到goods_id,media_id保留,major迁移为major_flag |
| platform_material_goods | platform_import_record / platform_company_mapping | 按已有导入记录补充租户和pms映射;无法确认的记录标记为历史兼容 |
十一、索引与性能建议
- 商品浏览高频条件:category_id、brand_id、goods_name、publish_status、enabled、del_flag。
- 平台商品编码、SKU编码、SKU_UNIT编码必须唯一,便于导入和对账。
- 导入映射表必须建立 tenant_id + platform_goods_id 唯一索引,防止同一客户重复导入同一平台商品。
- 素材映射表应按 goods_id、sku_id、sku_unit_id、media_id 建索引,支持商品详情快速加载图片。
- 商品包明细表应按 package_id + goods_id 建唯一索引,防止一个商品包重复加入同一商品。
- Redis缓存建议:平台分类树、品牌列表、单位列表、已发布商品包列表。
十二、开发验收清单
|---------|------------------------------------------|
| 验收项 | 必须满足 |
| 业务边界 | platform_ 不直接参与订单、采购、库存、成本核算 |
| 导入链路 | 平台商品可以一键导入到 pms_,并生成映射记录 |
| 商品包 | 可以按行业创建商品包并批量导入 |
| 防重复导入 | 同一租户重复导入同一平台商品时能识别并提示 |
| 版本更新 | 平台商品版本更新后,已导入客户能看到更新提示 |
| 图片素材 | 商品主图、详情图可随商品一起复制到 pms_ |
| 基础资料 | 导入时可自动创建分类、品牌、单位 |
| 失败处理 | 导入失败有失败原因,可重试失败项 |
| 权限控制 | 平台运营维护 platform_;客户只能浏览已发布商品并导入到自己的 pms_ |
| 数据隔离 | 导入任务、导入记录、映射表必须带租户/公司维度 |
十三、最终落地建议
- 第一阶段:保留旧表,新增目标表,完成平台商品浏览和商品包导入的主流程。
- 第二阶段:把 platform_material 数据迁移为 platform_goods + 默认SKU + 默认SKU_UNIT。
- 第三阶段:补齐平台商品包、导入任务、导入映射、版本发布。
- 第四阶段:对接 pms_ 公司商品中心,实现完整导入和增量更新。
- 第五阶段:开放图片素材库、多语言、行业模板市场、AI商品识别等商业化能力。
一句话总结:升鲜宝云商品库要做成"平台公共商品模板市场",面向客户快速初始化 pms_ 公司商品中心;platform_ 负责模板和资料复用,pms_ 才进入业务核算。