升鲜宝生鲜配送供应链管理系统——云商品库功能设计(一)

import zipfile
import os

# 1. Original Schema Content (Extracted from source)
original_sql_content = """
/*
  升鲜宝 - 云商品库(原版提取)
  对应表前缀: platform_
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 1. 平台商品品牌表
-- ----------------------------
DROP TABLE IF EXISTS `platform_brand`;
CREATE TABLE `platform_brand` (
  `id` bigint NOT NULL COMMENT '主键id',
  `brand_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌名称',
  `brand_url` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌logo',
  `brand_index` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌首字母',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品品牌表';

-- ----------------------------
-- 2. 平台商品类别表
-- ----------------------------
DROP TABLE IF EXISTS `platform_category`;
CREATE TABLE `platform_category` (
  `id` bigint NOT NULL COMMENT '主键id',
  `pid` bigint DEFAULT '0' COMMENT '父id',
  `level` int DEFAULT NULL COMMENT '分类级别:1->1级;2->2级',
  `category_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型编码',
  `category_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型名称',
  `category_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类别图像',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品类别表';

-- ----------------------------
-- 3. 平台商品表 (核心主档)
-- ----------------------------
DROP TABLE IF EXISTS `platform_material`;
CREATE TABLE `platform_material` (
  `id` bigint NOT NULL COMMENT '主键id',
  `material_code` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品编码',
  `material_name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品名称',
  `category_id` bigint DEFAULT NULL COMMENT '商品类型id',
  `brand_id` bigint DEFAULT NULL COMMENT '商品品牌id',
  `unit_id` bigint DEFAULT NULL COMMENT '最小单位id',
  `material_property` int DEFAULT NULL COMMENT '商品性质  0=非标品  1=标品',
  `gb_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '国标码',
  `material_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '中文描述',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  `shelf_status` int DEFAULT '0' COMMENT '上架状态 0=未上架 1=已上架',
  `synchronous` tinyint DEFAULT '0' COMMENT '是否已同步 0=未同步 1=已同步',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品表';

-- ----------------------------
-- 4. 已导入的云商品表 (租户关系)
-- ----------------------------
DROP TABLE IF EXISTS `platform_material_goods`;
CREATE TABLE `platform_material_goods` (
  `id` bigint NOT NULL COMMENT '主键id',
  `material_id` bigint NOT NULL DEFAULT '0' COMMENT '已导入的云商品id',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='已导入的云商品表';

-- ----------------------------
-- 5. 平台商品素材表
-- ----------------------------
DROP TABLE IF EXISTS `platform_media`;
CREATE TABLE `platform_media` (
  `id` bigint NOT NULL COMMENT '主键id',
  `media_group_id` bigint DEFAULT NULL COMMENT '素材组id',
  `media_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '素材名称',
  `media_type` int DEFAULT '0' COMMENT '素材类型 0=图片,1=视频,2=文件',
  `media_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '素材图片地址',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品素材表';

-- ----------------------------
-- 6. 平台商品素材组表
-- ----------------------------
DROP TABLE IF EXISTS `platform_media_group`;
CREATE TABLE `platform_media_group` (
  `id` bigint NOT NULL COMMENT '主键id',
  `media_group_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '素材组名称',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  `category_id` bigint DEFAULT NULL COMMENT '商品分类',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品素材组表';

-- ----------------------------
-- 7. 平台商品素材映射表
-- ----------------------------
DROP TABLE IF EXISTS `platform_media_mapping`;
CREATE TABLE `platform_media_mapping` (
  `id` bigint NOT NULL COMMENT '主键id',
  `media_id` bigint DEFAULT NULL COMMENT '媒体id=platform_media.id',
  `material_id` bigint DEFAULT NULL COMMENT '商品id=platform_material.id',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `major` tinyint(1) DEFAULT '0' COMMENT '是否为主媒体 0=否, 1=是',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品素材映射表';

-- ----------------------------
-- 8. 平台商品单位表
-- ----------------------------
DROP TABLE IF EXISTS `platform_unit`;
CREATE TABLE `platform_unit` (
  `id` bigint NOT NULL COMMENT '主键id',
  `unit_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单位名称',
  `unit_type` int DEFAULT NULL COMMENT '单位类型(0=计件,1=计重)',
  `enabled` int NOT NULL DEFAULT '1' COMMENT '1 启用 0 禁用  默认1',
  `del_flag` int NOT NULL DEFAULT '0' COMMENT '1:删除 0:正常',
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `creator` bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
  `create_date` bigint DEFAULT NULL COMMENT '创建时间',
  `updater` bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
  `update_date` bigint DEFAULT NULL COMMENT '修改时间',
  `remark` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `use_count` int DEFAULT '0' COMMENT '引用次数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='平台商品单位表';

SET FOREIGN_KEY_CHECKS = 1;
"""

# 2. Optimized Schema Content (Architect Design)
optimized_sql_content = """
/*
  升鲜宝 - 云商品库(架构师优化版)
  对应表前缀: std_ (Standard)
  设计目标: 支持一品多码、行业模版一键初始化、租户订阅同步
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 1. 标准商品主表 (SPU Core)
-- ----------------------------
DROP TABLE IF EXISTS `std_product_spu`;
CREATE TABLE `std_product_spu` (
  `id` bigint NOT NULL COMMENT '主键',
  `spu_code` varchar(64) NOT NULL COMMENT '云端唯一编码(系统自动生成)',
  `gb_code` varchar(64) DEFAULT NULL COMMENT '国家标准分类码(国标)',
  
  `category_id` bigint NOT NULL COMMENT '标准分类ID',
  `brand_id` bigint DEFAULT 0 COMMENT '标准品牌ID',
  
  `product_name` varchar(200) NOT NULL COMMENT '标准名称(如: 可口可乐)',
  `product_alias` varchar(500) DEFAULT NULL COMMENT '别名/搜索词(如: 可乐, 快乐水, CocaCola)',
  `product_type` tinyint DEFAULT 1 COMMENT '类型: 1=标品(有条码), 2=非标品(生鲜/称重)',
  
  `std_unit_id` bigint NOT NULL COMMENT '基础计量单位ID(最小单位)',
  `spec_desc` varchar(100) DEFAULT NULL COMMENT '规格描述(如: 330ml)',
  
  `shelf_life_days` int DEFAULT 0 COMMENT '保质期(天)',
  `storage_condition` tinyint DEFAULT 1 COMMENT '存储条件: 1=常温, 2=冷藏, 3=冷冻',
  
  `main_image` varchar(500) DEFAULT NULL COMMENT '官方主图URL',
  `status` tinyint DEFAULT 1 COMMENT '1=启用, 0=禁用',
  `source_origin` varchar(50) DEFAULT 'SYSTEM' COMMENT '来源: SYSTEM=官方, CROWD=众包',
  
  `created_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_spu_code` (`spu_code`),
  KEY `idx_name` (`product_name`)
) COMMENT='云端标准商品主表(SPU)';

-- ----------------------------
-- 2. 标准条码库 (核心: 0秒建档)
-- ----------------------------
DROP TABLE IF EXISTS `std_product_barcode`;
CREATE TABLE `std_product_barcode` (
  `id` bigint NOT NULL COMMENT '主键',
  `spu_id` bigint NOT NULL COMMENT '关联标准SPU',
  `barcode` varchar(64) NOT NULL COMMENT 'GTIN/EAN-13条形码',
  
  `unit_id` bigint NOT NULL COMMENT '条码对应的单位ID',
  `pack_qty` decimal(10,2) DEFAULT 1.00 COMMENT '包装内的基础单位数量(如: 箱码对应的数量是24)',
  
  `is_primary` tinyint DEFAULT 0 COMMENT '是否为主条码',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_barcode` (`barcode`),
  KEY `idx_spu` (`spu_id`)
) COMMENT='云端标准条码库(一品多码)';

-- ----------------------------
-- 3. 标准单位换算库
-- ----------------------------
DROP TABLE IF EXISTS `std_product_unit_convert`;
CREATE TABLE `std_product_unit_convert` (
  `id` bigint NOT NULL,
  `spu_id` bigint NOT NULL,
  `unit_id_from` bigint NOT NULL COMMENT '源单位(如: 箱)',
  `unit_id_to` bigint NOT NULL COMMENT '目标单位(如: 瓶)',
  `conversion_rate` decimal(12,4) NOT NULL COMMENT '换算率(如: 24)',
  `is_standard` tinyint DEFAULT 1 COMMENT '是否行业标准换算',
  PRIMARY KEY (`id`),
  KEY `idx_spu` (`spu_id`)
) COMMENT='云端多单位换算规则库';

-- ----------------------------
-- 4. 行业/场景模版表 (核心: 裂变赋能)
-- ----------------------------
DROP TABLE IF EXISTS `std_industry_template`;
CREATE TABLE `std_industry_template` (
  `id` bigint NOT NULL,
  `template_name` varchar(100) NOT NULL COMMENT '模版名称(如: 川菜火锅店, 商务酒店, 企业食堂)',
  `industry_type` varchar(50) COMMENT '行业类型',
  `cover_image` varchar(500) COMMENT '封面图',
  `sku_count` int DEFAULT 0 COMMENT '包含商品数',
  `download_count` int DEFAULT 0 COMMENT '引用次数',
  `created_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) COMMENT='行业初始化商品模版';

DROP TABLE IF EXISTS `std_industry_template_item`;
CREATE TABLE `std_industry_template_item` (
  `id` bigint NOT NULL,
  `template_id` bigint NOT NULL COMMENT '关联模版ID',
  `spu_id` bigint NOT NULL COMMENT '关联商品SPU',
  `recommend_price` decimal(10,2) COMMENT '建议零售价',
  `recommend_stock_min` int COMMENT '建议最低库存',
  PRIMARY KEY (`id`),
  KEY `idx_tpl` (`template_id`)
) COMMENT='行业模版商品明细';

-- ----------------------------
-- 5. 租户订阅关系表 (核心: 数据同步)
-- ----------------------------
DROP TABLE IF EXISTS `std_product_subscription`;
CREATE TABLE `std_product_subscription` (
  `id` bigint NOT NULL,
  `tenant_id` bigint NOT NULL COMMENT '租户ID(ShopID或CompanyID)',
  `spu_id` bigint NOT NULL COMMENT '云端SPU ID',
  `local_goods_id` bigint NOT NULL COMMENT '租户本地商品ID',
  `sync_strategy` tinyint DEFAULT 1 COMMENT '同步策略: 1=完全跟随, 2=仅同步图片, 3=不更新',
  `last_sync_time` bigint COMMENT '最后同步时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_spu` (`tenant_id`, `spu_id`)
) COMMENT='租户商品订阅/引用关系表';

-- ----------------------------
-- 6. 众包审核暂存表 (核心: 库的自动生长)
-- ----------------------------
DROP TABLE IF EXISTS `std_product_audit`;
CREATE TABLE `std_product_audit` (
  `id` bigint NOT NULL,
  `barcode` varchar(64) NOT NULL,
  `product_name` varchar(200) NOT NULL,
  `submitter_tenant_id` bigint COMMENT '提交者租户ID',
  `submit_images` text COMMENT '提交的图片',
  `status` tinyint DEFAULT 0 COMMENT '0=待审核, 1=通过, 2=驳回',
  `audit_remark` varchar(200) COMMENT '审核意见',
  `created_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_barcode` (`barcode`)
) COMMENT='云商品众包审核暂存表';

SET FOREIGN_KEY_CHECKS = 1;
"""

# 3. Write files
file1_name = "1_original_platform_schema.sql"
file2_name = "2_optimized_std_schema.sql"
zip_name = "Cloud_Product_Library_DB.zip"

with open(file1_name, "w", encoding="utf-8") as f:
    f.write(original_sql_content)

with open(file2_name, "w", encoding="utf-8") as f:
    f.write(optimized_sql_content)

# 4. Create Zip
with zipfile.ZipFile(zip_name, 'w') as zipf:
    zipf.write(file1_name)
    zipf.write(file2_name)

# Cleanup source files to keep environment clean
os.remove(file1_name)
os.remove(file2_name)

zip_name

  

posted @ 2026-02-10 13:08  升鲜宝供应链系统源码  阅读(4)  评论(0)    收藏  举报