PMS商品域完整 DDL 脚本 及 系统功能设计规格书,这套底层模型能够完美支撑生鲜行业特有的“多单位销售”、“双单位称重核算”以及“非标品临采”等复杂场景。

PMS商品域完整 DDL 脚本 及 系统功能设计规格书,这套底层模型能够完美支撑生鲜行业特有的“多单位销售”、“双单位称重核算”以及“非标品临采”等复杂场景。

第一部分:升鲜宝 PMS 商品域完整 DDL 脚本

一、 基础字典层 (支撑商品维度的基础基石)

SQL
 
/* 1. 商品分类表 (无限极树形结构,纯净主数据) */
DROP TABLE IF EXISTS `pms_category`;
CREATE TABLE `pms_category` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0' COMMENT '所属机构/租户ID',
  `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父级分类ID,顶级为0',
  
  `category_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类编码',
  `category_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称',
  `category_icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类图标',
  `inv_control_enabled` tinyint(1) DEFAULT '1' COMMENT '是否控制库存:0=不控制,1=控制',
  
  `sort_code` int NOT NULL DEFAULT '1' COMMENT '排序码',
  `enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1=启用,0=禁用',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除:0=正常,1=删除',
  `create_time` bigint DEFAULT NULL COMMENT '创建时间(毫秒时间戳)',
  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_org_parent` (`org_id`, `parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品分类表';

/* 2. 商品品牌表 */
DROP TABLE IF EXISTS `pms_brand`;
CREATE TABLE `pms_brand` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0' COMMENT '所属机构/租户ID',
  `brand_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌编码',
  `brand_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '品牌名称',
  `brand_logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌Logo',
  `brand_initial` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌首字母(A-Z)',
  
  `sort_code` int NOT NULL DEFAULT '1',
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品品牌表';

/* 3. 基础单位表 */
DROP TABLE IF EXISTS `pms_unit`;
CREATE TABLE `pms_unit` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0',
  `unit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '单位编码',
  `unit_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单位名称(如:箱、kg)',
  `unit_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '计量属性:0=计件,1=计重',
  
  `sort_code` int NOT NULL DEFAULT '1',
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-基础计量单位表';

/* 4. 存储方式表 */
DROP TABLE IF EXISTS `pms_storage_method`;
CREATE TABLE `pms_storage_method` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0',
  `method_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '存储方式名称(如:常温/冷冻)',
  `temperature_range` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '温度范围(如 0℃~4℃)',
  
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品存储方式表';

/* 5. 标签表 */
DROP TABLE IF EXISTS `pms_tag`;
CREATE TABLE `pms_tag` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0',
  `tag_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标签名称(如:有机、助农)',
  `tag_icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '图标地址',
  `tag_type` tinyint NOT NULL DEFAULT '0' COMMENT '表现类型:0=文字,1=图标',
  
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品标签表';

二、 核心数据层 (SPU -> 物理SKU -> 销售规格组合)

(注:彻底剥离所有关于价格的定义,仅维护客观实体及其物理/包装属性)

SQL
 
/* 6. 商品 SPU 主表 */
DROP TABLE IF EXISTS `pms_goods`;
CREATE TABLE `pms_goods` (
  `id` bigint NOT NULL COMMENT '主键ID (SPU ID)',
  `org_id` bigint NOT NULL DEFAULT '0' COMMENT '所属机构/租户ID',
  `category_id` bigint NOT NULL DEFAULT '0' COMMENT '分类ID',
  `brand_id` bigint DEFAULT '0' COMMENT '品牌ID',
  `storage_method_id` bigint DEFAULT NULL COMMENT '存储方式ID',
  
  `goods_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品编码(全局唯一)',
  `goods_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称',
  `mnemonic_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '拼音助记码',
  `selling_point` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品卖点',
  `origin_place` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产地',
  
  `goods_property` tinyint NOT NULL DEFAULT '1' COMMENT '商品性质:0=非标品(称重生鲜), 1=标品(计件工业品)',
  `goods_type` tinyint NOT NULL DEFAULT '0' COMMENT '商品类别:0=正常建档, 1=临时商品(支撑“一包豆芽菜”临采场景)',
  `spec_type` tinyint NOT NULL DEFAULT '0' COMMENT '规格类型:0=单规格, 1=多规格',
  `tax_rate` decimal(5,2) DEFAULT '0.00' COMMENT '进销项默认税率(%)',
  `shelf_life_days` int DEFAULT '0' COMMENT '保质期天数',
  
  `media_urls` json DEFAULT NULL COMMENT '图文视频集:[{"type":"image","url":"...","main_status":true}]',
  `goods_desc` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '图文详情',
  
  `shelf_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'SPU全局上下架状态:0=下架, 1=上架',
  `recommend_status` tinyint(1) DEFAULT '0' COMMENT '推荐状态:0=否,1=是',
  
  `sort_code` int DEFAULT '1',
  `enabled` tinyint(1) DEFAULT '1',
  `del_flag` tinyint(1) DEFAULT '0',
  `creator_id` bigint DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `updater_id` bigint DEFAULT '0',
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_goods_code_org` (`goods_code`, `org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品主表(SPU)';

/* 7. 物理规格表 (SKU) - 仓储、采购、加工认准的唯一实体 */
DROP TABLE IF EXISTS `pms_sku`;
CREATE TABLE `pms_sku` (
  `id` bigint NOT NULL COMMENT '主键ID (物理 SKU ID)',
  `org_id` bigint NOT NULL DEFAULT '0',
  `goods_id` bigint NOT NULL COMMENT '关联SPU ID',
  
  `sku_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '物理规格编码',
  `sku_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '物理规格名称(如:冻鸡爪)',
  
  /* 双单位管理核心:解决“非标重”问题 */
  `base_unit_id` bigint NOT NULL COMMENT '【主单位】(仓配及财务核算绝对基准单位,如:KG)',
  `dual_unit_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '双单位标记:0=单单位, 1=开启双单位过磅称重',
  `aux_unit_id` bigint DEFAULT NULL COMMENT '【辅单位】(物流作业搬运单位,如:箱)',
  `standard_ratio` decimal(10,4) DEFAULT '1.0000' COMMENT '标准理论换算率 (如 1箱=20kg,填20.0000)',
  
  `processing_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'BOM加工产出物标记:0=否,1=是',
  
  `sort_code` int DEFAULT '1',
  `enabled` tinyint(1) DEFAULT '1',
  `del_flag` tinyint(1) DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_goods_id` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-物理商品规格表(SKU - 仅供仓配采加工使用)';

/* 8. 销售包装组合表 (SKU_UNIT) - 订单与销售认准的包装马甲 */
DROP TABLE IF EXISTS `pms_sku_unit`;
CREATE TABLE `pms_sku_unit` (
  `id` bigint NOT NULL COMMENT '主键ID (前端商城与OMS销售挂载的唯一ID)',
  `org_id` bigint NOT NULL DEFAULT '0',
  `sku_id` bigint NOT NULL COMMENT '关联底层物理SKU ID',
  `unit_id` bigint NOT NULL COMMENT '当前销售包装单位ID (如: 份、盒、整箱)',
  
  `full_sku_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '销售全称(如: 红富士_10kg整箱装)',
  `bar_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '销售条码/UPC',
  `plu_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '生鲜电子秤PLU码',
  
  /* 多单位换算引擎:解决“多包装销售”问题 */
  `base_unit_ratio` decimal(10,4) NOT NULL DEFAULT '1.0000' COMMENT '与底层物理主单位的固定换算比',
  
  /* 物流包裹属性(只挂载在销售包装层) */
  `length` decimal(10,3) DEFAULT '0.000' COMMENT '外包装长(cm)',
  `width` decimal(10,3) DEFAULT '0.000' COMMENT '外包装宽(cm)',
  `height` decimal(10,3) DEFAULT '0.000' COMMENT '外包装高(cm)',
  `gross_weight` decimal(10,3) DEFAULT '0.000' COMMENT '毛重(kg)',
  `net_weight` decimal(10,3) DEFAULT '0.000' COMMENT '净重(kg)',
  `volume` decimal(10,4) DEFAULT '0.0000' COMMENT '体积(m³)',
  
  /* 周转物料捆绑 */
  `box_id` bigint DEFAULT NULL COMMENT '配套周转筐ID',
  `box_count` int DEFAULT '0' COMMENT '单次发货需扣减周转筐数量',
  `box_pattern` tinyint DEFAULT '0' COMMENT '周转筐扣减模式:0=固定,1=按发货,2=按下单',
  
  `sort_code` int DEFAULT '1',
  `enabled` tinyint(1) DEFAULT '1',
  `del_flag` tinyint(1) DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_sku_unit` (`sku_id`, `unit_id`),
  KEY `idx_bar_code` (`bar_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-销售规格包装组合表(仅供前端售卖与OMS订单转换使用)';

三、 供应链辅助定义层 (货源、阈值、标签映射)

SQL
 
/* 9. 商品-供应商来源映射表 (无价格版,仅作合规采购字典) */
DROP TABLE IF EXISTS `pms_sku_supplier`;
CREATE TABLE `pms_sku_supplier` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0',
  `sku_id` bigint NOT NULL COMMENT '物理SKU ID (采购买的是物理货)',
  `supplier_id` bigint NOT NULL COMMENT '供应商ID',
  `purchase_unit_id` bigint NOT NULL COMMENT '向该供应商采购的默认包装单位ID',
  
  `supplier_item_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '供应商系统货号',
  `supply_weight` decimal(5,2) DEFAULT '1.00' COMMENT '智能派单采购分配权重',
  `primary_flag` tinyint(1) DEFAULT '0' COMMENT '首选供应商标识:0=否, 1=是',
  
  `sort_code` int DEFAULT '1',
  `enabled` tinyint(1) DEFAULT '1',
  `del_flag` tinyint(1) DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_sku_supplier` (`sku_id`, `supplier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品供应商采购白名单映射表';

/* 10. 商品分拣与采购安全库存预警表 (针对物理库存) */
DROP TABLE IF EXISTS `pms_sku_threshold`;
CREATE TABLE `pms_sku_threshold` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `org_id` bigint NOT NULL DEFAULT '0',
  `sku_id` bigint NOT NULL COMMENT '物理SKU ID',
  
  `pick_threshold_qty` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '分拣预警阈值',
  `pur_threshold_qty` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '采购安全库存',
  
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` bigint DEFAULT NULL,
  `update_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_sku` (`sku_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-分拣与采购安全库存阈值表';

/* 11. 商品-标签映射表 */
DROP TABLE IF EXISTS `pms_goods_tag_mapping`;
CREATE TABLE `pms_goods_tag_mapping` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `goods_id` bigint NOT NULL COMMENT '商品 SPU ID',
  `tag_id` bigint NOT NULL COMMENT '标签 ID',
  `create_time` bigint DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_goods_tag` (`goods_id`, `tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PMS-商品与标签映射关联表';

第二部分:升鲜宝 PMS 商品域系统功能设计规格书

1. 概述 (Overview)

升鲜宝 PMS 商品域(Product Management System)是整个供应链系统的核心主数据基石。经过架构重构,本域彻底执行**“销、存、采三权分立”“去价化”**原则。 PMS 的唯一职责是:准确描述客观商品的物理属性、物流包装、销售表现形态以及基础采购字典映射,绝不干涉任何B2B定价逻辑、客户可见性逻辑及仓内作业流程。

2. 核心架构模型 (Core Architecture Model)

系统采用三层商品数据结构,完美解耦“如何卖”与“如何管”:

  • SPU(pms_goods:定义商品的名片(如“红富士苹果”),承载图文详情、类目、品牌。

  • 物理 SKU(pms_sku:定义仓库和采购眼中的“真实物体”。解决生鲜**双单位(非标重)**核心痛点,建立主辅单位并行的核算底座。

  • 销售包装 SKU_UNIT(pms_sku_unit:定义前端商城的“销售马甲”。解决**多单位(Multi-UOM)**售卖痛点。它负责定义“按个、按箱”对应的独立条码和物理包裹尺寸,通过 base_unit_ratio 与物理 SKU 打通。

3. 核心功能模块划分 (Functional Modules)

3.1 基础字典管理
  • 无限极类目树:维护 pms_category,去除层级字段依赖,支持灵活拖拽。

  • 计量单位库:维护 pms_unit,明确定义每个单位属于“计件”还是“计重”属性,为 OMS 订单换算及 WMS 出入库过磅提供基础支撑。

3.2 物理商品建档与管控 (SKU 层)
  • 双单位称重机制:针对生鲜冻品、肉类等品类,强制开启 dual_unit_flag。设定主单位(如 KG)作为财务及库存绝对核算标准,设定辅单位(如 箱)作为仓配作业指导,解决“按箱捡货、按重算钱”的误差。

  • 临时商品(临采)容错引擎:通过 goods_type=1 标识,允许采购人员在无标准化建档的情况下,通过输入商品名静默生成一条 SPU->SKU 链路,实现“非目录商品的零摩擦越库直发”。

3.3 销售包装与条码管理 (SKU_UNIT 层)
  • 多包装发布:为同一个物理 SKU 自由挂载多个销售包装组合。为每一个包装分配独立的 PLU 码(对接生鲜电子秤)和 UPC 条形码。

  • 周转物料绑定:为特定销售包装(如“10kg原筐装”)绑定对应的 box_id(周转筐),当订单生成时,OMS 可依据此包装配置自动计算客户需抵扣的筐押金或数量。

3.4 供应链字典映射
  • 采购白名单:维护 pms_sku_supplier。定义某个物理 SKU 允许从哪些供应商处采购,并绑定其在供应商系统中的专属货号。此模块为“智能缺货采购(MRP)”提供唯一合法的上游数据源池,防范采购乱挂账。

4. 对外边界约束

  • 无价格:该域不产生任何基于客户或供应商的价格单据。所有价格获取均通过调用独立的 定价域(Pricing Domain)

  • 无权限拦截:该域默认暴露全量库给内部微服务,前端面向具体客户的商品屏蔽和专供上架过滤,交由 客户/价格域 提供的拦截器进行处理。

posted @ 2026-02-14 11:21  升鲜宝供应链系统源码  阅读(6)  评论(0)    收藏  举报