【研究与学习】悦厚系统商品模块功能设计与数据字典文档(一)---升鲜宝生鲜配送供应链管理系统

【研究与学习】悦厚系统商品模块功能设计与数据字典文档(一)---升鲜宝生鲜配送供应链管理系统

竞品研究推理版|适用于升鲜宝商品中心重构参考

|--------|-----------------------------------------------|
| 项目 | 内容 |
| 文档版本 | V1.0 |
| 生成日期 | 2024-01-09 |
| 适用对象 | 产品经理、后端研发、前端研发、测试、实施、数据建模人员 |
| 文档定位 | 基于公开资料与生鲜配送行业通用业务规则,对悦厚系统商品模块进行竞品级推理与升鲜宝可落地设计 |
| 重要声明 | 本文不是悦厚官方数据库或内部设计,仅用于竞品分析、功能推理和升鲜宝系统重构参考。 |

杭州升鲜宝科技有限公司|内部研发参考

目录

  • 一、资料来源与推理边界
  • 二、商品模块总体定位
  • 三、商品模块业务架构
  • 四、商品模块功能清单
  • 五、商品主数据模型设计
  • 六、关键业务流程设计
  • 七、数据结构总体设计
  • 八、字段级数据字典
  • 九、核心业务规则与校验
  • 十、接口与页面建议
  • 十一、升鲜宝落地改造建议

一、资料来源与推理边界

悦厚系统公开资料主要呈现为产品方案、行业文章、App公开说明和第三方行业排名信息,未公开真实表结构。因此本文采用"公开功能线索 + 生鲜配送业务规律 + 升鲜宝可落地建模经验"的方式进行反推。

|-----------|---------------------------------------------------------------------------------------|
| 资料/依据 | 对商品模块的推理价值 |
| 悦厚官网 | 悦厚定位为面向生鲜企业的SaaS软件,覆盖生鲜配送、智慧门店、社区团购、智慧菜市场、数字菜档、基地数字化产销平台等行业方案。 |
| 悦厚搜狐主页 | 公开文章摘要提到悦厚SCP系统包含线上商城下单、订单管理、智能采购;新零售系统整合称重收银、称重打标、商城接单、会员营销、社区团购、推广分销、供应链对接、连锁管理等功能。 |
| 行业排名文章 | 第三方文章描述悦厚SCP系统聚焦订单、客户、商品、分拣、库存、配送、人员绩效、销售渠道、货款结算、经营报表的数字化升级。 |
| 生鲜行业通用规律 | 生鲜商品必须支持多单位、称重、时价、客户专属价、供应商报价、损耗、批次效期、分拣标签、条码、库存成本联动。 |

1.1 推理边界

  • 本文不声称还原悦厚真实数据库,只给出竞品级、行业级、研发可落地的数据结构建议。
  • 所有表名统一使用 yh_ 前缀,便于与升鲜宝 sxb_/pms_/wms_/oms_ 等体系区分。
  • 字段命名按你之前提出的规则处理:布尔含义统一使用 xxx_flag,不使用 is_xxx;启停字段使用 enabled;业务流程状态使用 xxx_state。
  • 商品模块不是孤立模块,必须同时服务商城下单、采购、库存、分拣、配送、POS、财务和报表。

二、商品模块总体定位

悦厚系统的商品模块应理解为"生鲜主数据中心 + 价格中心 + 单位换算中心 + 供应链作业属性中心",它不是简单的商品档案维护。

|----------|-------------------------------------|
| 服务对象 | 商品模块提供的能力 |
| 对商城 | 提供分类、商品图片、上下架、售价、起订量、限购、搜索别名、推荐标签。 |
| 对订单 | 提供SKU、销售单位、客户专属价、最近成交价、称重标记、缺货替代规则。 |
| 对采购 | 提供采购单位、默认供应商、一品多供、供应商报价、采购提前期、安全库存。 |
| 对库存 | 提供库存单位、批次、效期、库区库位、成本算法、负库存控制。 |
| 对分拣 | 提供分拣单位、称重单位、标签模板、分拣容差、是否复核、是否绑定周转筐。 |
| 对POS | 提供条码、称重码、价格标签、门店价、会员价、收银展示名称。 |
| 对财务 | 提供税率、成本价、毛利分类、损耗率、采购/销售核算口径。 |
| 对报表 | 提供分类、品牌、产地、标签、商品等级、业务类型等统计维度。 |

2.1 商品模块核心设计原则

|-------------|-------------------------------------------|
| 原则 | 说明 |
| 主数据唯一原则 | 商品档案、SKU编码、单位换算、条码必须统一维护,避免订单、采购、库存各自建商品。 |
| SPU/SKU分层原则 | SPU承载商品通用属性,SKU承载规格、条码、单位、价格、库存、分拣作业属性。 |
| 多单位强约束原则 | 销售、采购、库存、称重单位可以不同,但必须通过单位换算表建立明确关系。 |
| 价格可追溯原则 | 基础价、客户价、供应商价、调价单、历史成交价都必须保留来源和生效期。 |
| 生鲜作业优先原则 | 称重、损耗、批次、效期、分拣、标签、缺货替代必须作为一等能力,不应后期硬编码补丁。 |
| 全链路审计原则 | 商品关键字段变更、价格变更、单位变更、上下架变更、导入导出都必须落日志。 |

三、商品模块业务架构

商品中心

├─ 基础主数据:分类 / 品牌 / 产地 / 属性 / 单位 / 标签

├─ 商品主档:SPU / SKU / 规格 / 图片 / 条码 / 别名

├─ 多单位中心:销售单位 / 采购单位 / 库存单位 / 称重单位 / 换算比例

├─ 价格中心:基础价 / 客户价 / 供应商价 / 阶梯价 / 时价 / 调价单

├─ 供应链属性:采购配置 / 库存配置 / 分拣配置 / 损耗规则 / 批次效期

├─ 商城属性:上下架 / 起订量 / 限购 / 商品标签 / 推荐排序 / 缺货替代

├─ 作业属性:条码 / 称重码 / 标签模板 / 分拣容差 / 复核规则

└─ 治理能力:导入导出 / 重复校验 / 审批 / 变更日志 / 数据权限

3.1 核心对象关系

|---------|--------|------------|------------------------------------|
| 对象A | 关系 | 对象B | 说明 |
| 商品分类 | 1:N | 商品SPU | 一个分类下有多个商品,一个商品只能归属一个主分类;可另做多分类扩展。 |
| 商品SPU | 1:N | 商品SKU | 一个商品可以有多个规格SKU。 |
| 商品SKU | 1:N | 单位换算 | 一个SKU可以配置多个可用单位和换算关系。 |
| 商品SKU | 1:N | 商品条码 | 一个SKU可能有普通条码、称重码、供应商码、箱码。 |
| 商品SKU | 1:N | 基础价格 | 同SKU不同单位、不同渠道、不同生效期可有不同价格。 |
| 客户 | N:M | 商品SKU | 通过客户商品价格表建立客户专属价。 |
| 供应商 | N:M | 商品SKU | 通过供应商报价表建立一品多供。 |
| 商品SKU | 1:1/N | 采购/库存/分拣配置 | 可按全局或仓库维度配置作业属性。 |

四、商品模块功能清单

|---------|-------------------------------|----------------------------------|
| 功能域 | 核心功能 | 设计目的 |
| 商品分类管理 | 多级分类、商城分类、采购分类、排序、启停、分类图片 | 解决商品检索、下单展示、采购汇总和报表统计口径不一致的问题 |
| 商品主档管理 | SPU、SKU、规格、品牌、产地、储存方式、保质期、损耗率 | 统一订单、采购、库存、分拣、财务引用的商品标准 |
| 多单位管理 | 销售单位、采购单位、库存单位、称重单位、包装单位、换算比例 | 解决生鲜行业"按箱采购、按斤销售、按只订购、按斤出库"的复杂业务 |
| 价格体系 | 基础价、客户价、等级价、时价、阶梯价、促销价、最近成交价 | 支持不同客户不同价格、每日时价、订单改价和报价单 |
| 供应商报价 | 一品多供、默认供应商、供应商别名、采购单位、报价生效期 | 支撑智能采购和采购比价 |
| 商城售卖配置 | 上下架、起订量、限购、售卖时段、配送日期、缺货替代 | 支撑线上商城、社区团购、门店零售 |
| 称重分拣配置 | 称重标记、分拣容差、标签模板、是否打印客户标签 | 支撑电子秤、分拣任务和多退少补 |
| 库存成本属性 | 是否管库存、库存单位、批次、效期、库区、成本算法 | 支撑实时库存、批次先进先出、成本核算 |
| 条码标签 | 普通条码、称重条码、箱码、供应商码、标签打印 | 支撑POS收银、仓库扫码、装车核货 |
| 导入导出与审计 | Excel批量导入、重复校验、字段校验、变更日志、导出权限 | 支撑实施初始化和主数据治理 |

4.1 商品分类功能设计

|---------|-----------------------|----------------------------|--------|
| 功能点 | 操作/字段 | 规则 | 说明 |
| 分类树维护 | 新增、修改、删除、启停、拖拽排序、分类图片 | 支持多级分类,建议控制在3级以内,避免商城检索复杂。 | |
| 分类用途区分 | 商城分类、采购分类、财务分类、报表分类 | 前期可用同一分类,后期按biz_scope扩展。 | |
| 分类权限 | 按租户、门店、仓库、角色授权 | 不同门店/客户只看到可售分类。 | |
| 分类编码 | 自动编码或手工编码 | 支撑导入、接口同步、报表维度稳定。 | |
| 分类校验 | 同父级分类名称不可重复 | 避免前端树混乱。 | |

4.2 商品档案功能设计

|---------|-----------------------------------------------|-----------------------|
| 功能点 | 字段/对象 | 业务说明 |
| SPU基础信息 | 商品编码、名称、简称、分类、品牌、产地、主图、详情 | 用于统一展示和统计 |
| SKU规格信息 | SKU编码、规格、条码、默认单位、重量体积、启停 | 订单、采购、库存实际使用SKU |
| 生鲜属性 | 是否生鲜、是否称重、储存方式、保质期、损耗率 | 影响分拣、库存、报损、效期预警 |
| 业务开关 | sale_flag、purchase_flag、stock_flag、weigh_flag | 控制商品是否进入销售、采购、库存、称重环节 |
| 商品图片 | 主图、详情图、检验图、视频 | 商城展示、收货验货、追溯展示 |
| 商品别名 | 客户别名、供应商别名、采购别名、搜索别名 | 降低下单、采购和导入匹配错误 |
| 商品标签 | 新品、热销、促销、时令、净菜、冻品、重点商品 | 用于商城运营和报表筛选 |

4.3 多单位换算功能设计

生鲜配送的商品单位设计是商品模块成败关键。必须允许"销售单位、采购单位、库存单位、称重单位"分离,同时又能通过换算关系完成订单、采购、入库、分拣、成本核算。

|--------|-----------|----------|-----------|-----------------------|
| 品类 | 销售单位 | 采购单位 | 库存单位 | 典型处理 |
| 蔬菜类 | 按斤销售 | 按筐/箱采购 | 按斤库存 | 采购入库时按箱收货,系统换算为斤进入库存。 |
| 水果类 | 按箱销售或按斤销售 | 按箱采购 | 按斤/箱库存 | 同一SKU可启用多个销售单位。 |
| 水产类 | 按只订购 | 按斤称重出库 | 按斤库存 | 客户看"只",分拣按"斤"称重,多退少补。 |
| 冻品类 | 按包/箱销售 | 按箱采购 | 按包库存 | 条码和箱码并存。 |
| 净菜类 | 按袋销售 | 按斤采购原料 | 按袋库存或按斤库存 | 涉及加工损耗和成品转换。 |

4.4 价格体系功能设计

|---------|----------|-----------------------------------------|----------------------|
| 优先级 | 价格类型 | 建议表/字段 | 说明 |
| 1 | 客户商品专属价 | yh_customer_goods_price | 指定客户+SKU+单位+生效期命中时优先 |
| 2 | 促销/活动价 | yh_goods_price.price_type=4 | 商城或POS活动期间生效 |
| 3 | 客户等级价 | 扩展表:yh_customer_level_goods_price | 适合大批量客户分层报价 |
| 4 | 商品基础价 | yh_goods_price.price_type=1 | 默认销售价 |
| 5 | 最近成交价 | yh_customer_goods_price.last_deal_price | 可作为报价参考,不建议直接覆盖正式价格 |
| 6 | 手工改价 | 订单明细改价字段 | 需结合权限、审批和日志 |

4.5 采购与供应商报价功能设计

|--------|-----------------|-----------------------|
| 功能 | 规则 | 说明 |
| 默认供应商 | 一个SKU可设置默认供应商 | 智能采购生成采购单时优先使用。 |
| 一品多供 | 一个SKU可以有多个供应商报价 | 支持按价格、品质、交期、库存选择供应商。 |
| 采购单位 | 采购单位可不同于库存单位 | 入库时必须执行单位换算。 |
| 采购提前期 | lead_time_days | 用于采购计划建议日期。 |
| 安全库存 | safe_stock_qty | 用于自动补货建议。 |
| 供应商别名 | 供应商商品名称/编码 | 用于导入供应商报价、采购单回写、对账匹配。 |

4.6 分拣称重与标签功能设计

|--------|----------------------------------------------|---------------------|
| 功能 | 字段 | 说明 |
| 称重商品 | weigh_flag=1 | 分拣任务必须采集实际重量。 |
| 称重单位 | weigh_unit_id | 如客户按只下单,但实际按斤称重。 |
| 分拣容差 | weight_tolerance_rate / weight_tolerance_qty | 超过容差需要异常确认或主管审核。 |
| 标签模板 | label_template_id | 商品标签、客户标签、筐标签、称重标签。 |
| 复核要求 | review_required_flag | 高价值或称重商品建议强制复核。 |
| 缺货登记 | shortage_allow_flag | 允许分拣时登记缺货,回写订单异常。 |

4.7 库存成本属性功能设计

|--------|------------------------------------------|--------------------------|
| 功能 | 字段 | 说明 |
| 库存单位 | stock_unit_id | 库存汇总统一按库存单位存储。 |
| 批次管理 | batch_manage_flag | 肉类、水产、冻品、预制菜建议启用批次。 |
| 效期管理 | shelf_life_manage_flag / shelf_life_days | 临期预警和先进先出必须依赖效期。 |
| 成本算法 | cost_method | 建议支持移动加权、FIFO、标准成本。 |
| 库区库位 | default_area_id / default_location_id | 上架推荐和分拣路径优化。 |
| 负库存控制 | negative_stock_flag | 生鲜企业可按场景允许临时负库存,但必须形成预警。 |

五、商品主数据模型设计

5.1 推荐领域模型

|----------------------|---------|-------------------------|
| 领域对象 | 职责 | 说明 |
| GoodsCategory | 商品分类聚合 | 维护分类树、分类业务用途、商城展示属性。 |
| GoodsSpu | 商品主档聚合根 | 维护商品通用属性,关联分类、品牌、产地、属性。 |
| GoodsSku | 商品规格实体 | 订单、采购、库存、分拣均引用SKU。 |
| GoodsUnitRelation | 单位换算实体 | 控制销售/采购/库存/称重单位和换算。 |
| GoodsPrice | 价格实体 | 基础价、时价、促销价、客户价、供应商价。 |
| GoodsOperationConfig | 作业配置实体 | 采购配置、库存配置、分拣配置、销售配置。 |
| GoodsTrace | 追溯扩展实体 | 产地、批次、检测报告、供应商资质。 |

5.2 商品编码建议

|---------------|--------|-------------------------------|-------------------|
| 字段 | 含义 | 示例规则 | 说明 |
| goods_code | SPU编码 | G + 分类编码 + 6位流水 | 商品主档编码,尽量不随名称改变。 |
| sku_code | SKU编码 | S + SPU编码 + 规格流水 | 订单、采购、库存引用的稳定编码。 |
| unit_code | 单位编码 | UNIT_JIN / UNIT_KG / UNIT_BOX | 避免仅依赖中文单位名。 |
| barcode | 条码 | EAN13/自定义称重码/箱码 | 可多个条码对应同一SKU不同单位。 |
| category_code | 分类编码 | C + 层级 + 流水 | 支持导入和跨系统同步。 |

5.3 商品状态与开关设计

|---------------|--------|---------|-------------------|
| 字段 | 名称 | 取值 | 说明 |
| enabled | 启用状态 | 1启用 0停用 | 主数据启停,不表示业务上架。 |
| sale_flag | 允许销售 | 1是 0否 | 控制是否可进入销售订单。 |
| purchase_flag | 允许采购 | 1是 0否 | 控制是否可进入采购单。 |
| stock_flag | 管理库存 | 1是 0否 | 服务商品、虚拟商品可不管库存。 |
| weigh_flag | 需要称重 | 1是 0否 | 控制分拣、POS是否调用称重设备。 |
| online_flag | 商城上架 | 1是 0否 | 只控制商城展示。 |
| offline_flag | 线下可售 | 1是 0否 | 控制POS、后台开单可售。 |

六、关键业务流程设计

6.1 商品建档流程

新增分类/品牌/产地/单位

→ 新增SPU商品主档

→ 配置SKU规格

→ 配置销售/采购/库存/称重单位

→ 配置条码、图片、标签、别名

→ 配置基础价格、客户价、供应商价

→ 配置采购/库存/分拣/商城售卖属性

→ 审核发布

→ 同步到商城、订单、采购、仓库、POS

6.2 商品单位换算流程

选择SKU

→ 定义库存主单位

→ 配置销售单位、采购单位、称重单位

→ 设置换算比例

→ 标记默认销售/采购/库存/称重单位

→ 校验是否存在闭环冲突

→ 保存后重建商品单位缓存

→ 订单、采购、库存、分拣按换算比例使用

6.3 客户价生效流程

维护客户商品价格

→ 校验客户、SKU、单位、生效期是否冲突

→ 提交审核

→ 审核通过

→ 到达生效日自动生效

→ 客户下单时按价格优先级命中

→ 订单明细记录价格来源

6.4 供应商报价用于采购流程

维护供应商商品报价

→ 设置默认供应商/交期/最小采购量

→ 销售订单审核后生成采购需求

→ 系统按库存缺口计算采购量

→ 根据默认供应商或最低报价推荐采购单

→ 采购员确认

→ 生成采购单

6.5 称重分拣回写订单流程

订单按销售单位下单

→ 分拣任务读取SKU分拣配置

→ 电子秤按称重单位采集重量

→ 系统按单位换算回写实际出货数量

→ 计算实际金额和多退少补

→ 打印客户标签

→ 复核完成后进入配送

七、数据结构总体设计

|----------------------------|----------|--------------------------|
| 表名 | 中文名 | 说明 |
| yh_goods_category | 商品分类表 | 商品分类树,支持商城分类、采购分类、财务分类扩展 |
| yh_goods_brand | 品牌表 | 品牌档案,可用于商城展示、采购识别、报表分析 |
| yh_goods_origin | 产地表 | 产地、基地、区域标签 |
| yh_goods_material | 商品材质/属性表 | 肉类部位、蔬果等级、加工属性等扩展属性 |
| yh_goods_unit | 计量单位表 | 斤、公斤、箱、袋、只、个、包等 |
| yh_goods_spu | 商品SPU主表 | 商品主档,承载商品通用业务属性 |
| yh_goods_sku | 商品SKU表 | 规格级商品,订单、采购、库存、分拣的核心引用 |
| yh_goods_spec_group | 规格组表 | 如颜色、等级、包装、大小 |
| yh_goods_spec_value | 规格值表 | 如大果、中果、A级、B级 |
| yh_goods_sku_spec | SKU规格关系表 | SKU与规格值的多对多关系 |
| yh_goods_unit_relation | 商品单位换算表 | 销售、采购、库存、称重单位之间换算 |
| yh_goods_barcode | 商品条码表 | 普通条码、称重码、供应商条码、箱码 |
| yh_goods_media | 商品媒体表 | 商品主图、详情图、检验图、视频 |
| yh_goods_alias | 商品别名表 | 客户别名、供应商别名、采购别名、分拣别名 |
| yh_goods_label | 商品标签表 | 新品、热销、促销、时令、净菜、冻品 |
| yh_goods_label_rel | 商品标签关系表 | 商品与标签关系 |
| yh_goods_sale_config | 商品销售配置表 | 商城上架、起订量、限购、售卖时段 |
| yh_goods_purchase_config | 商品采购配置表 | 默认供应商、采购单位、采购周期、安全库存 |
| yh_goods_stock_config | 商品库存配置表 | 库存单位、批次、效期、库区、成本算法 |
| yh_goods_sorting_config | 商品分拣配置表 | 称重、标签、容差、分拣方式 |
| yh_goods_price | 商品基础价格表 | 基础销售价、时价、会员价基础 |
| yh_customer_goods_price | 客户商品价格表 | 客户专属价格、账期客户报价 |
| yh_goods_price_adjust | 价格调价单表 | 批量调价、审核、价格生效 |
| yh_goods_price_adjust_item | 调价明细表 | 调价商品明细 |
| yh_supplier_goods_price | 供应商商品报价表 | 供应商采购报价、历史报价 |
| yh_goods_loss_rule | 商品损耗规则表 | 仓储损耗、分拣损耗、配送损耗 |
| yh_goods_trace_template | 追溯属性模板表 | 产地、批次、检测报告、供应商资质字段模板 |
| yh_goods_import_task | 商品导入任务表 | Excel导入批次、错误统计 |
| yh_goods_import_error | 商品导入错误表 | 逐行错误明细 |
| yh_goods_change_log | 商品变更日志表 | 商品、价格、单位、上下架变更审计 |

7.1 表关系说明

yh_goods_category 1 ── N yh_goods_spu

yh_goods_spu 1 ── N yh_goods_sku

yh_goods_sku 1 ── N yh_goods_unit_relation

yh_goods_sku 1 ── N yh_goods_barcode

yh_goods_sku 1 ── N yh_goods_price

yh_goods_sku 1 ── N yh_customer_goods_price

yh_goods_sku 1 ── N yh_supplier_goods_price

yh_goods_sku 1 ── 1/N yh_goods_sale_config

yh_goods_sku 1 ── 1/N yh_goods_purchase_config

yh_goods_sku 1 ── 1/N yh_goods_stock_config

yh_goods_sku 1 ── 1/N yh_goods_sorting_config

yh_goods_spu 1 ── N yh_goods_media

yh_goods_sku 1 ── N yh_goods_alias

yh_goods_sku 1 ── N yh_goods_change_log

八、字段级数据字典

本节为商品模块核心表的字段级建议。研发落地时可按企业实际规模增减字段,但不建议删除单位换算、价格生效期、供应商报价、分拣配置、库存配置、变更日志等关键表。

8.1 yh_goods_category(商品分类表)

|----------------|--------------|--------|-------------------|----------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | 当前租户 | SaaS租户ID;单企业部署可保留 |
| parent_id | BIGINT | Y | 0 | 父级分类ID,0表示根节点 |
| category_code | VARCHAR(64) | Y | | 分类编码,建议唯一 |
| category_name | VARCHAR(100) | Y | | 分类名称 |
| category_level | TINYINT | Y | 1 | 分类层级 |
| category_path | VARCHAR(500) | N | | 分类路径,如 /1/5/12/ |
| biz_scope | TINYINT | Y | 1 | 业务范围:1通用 2商城 3采购 4财务 |
| image_url | VARCHAR(500) | N | | 分类图片 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态:1启用 0停用 |
| del_flag | TINYINT | Y | 0 | 删除标记:0正常 1删除 |
| remark | VARCHAR(500) | N | | 备注 |
| create_by | BIGINT | N | | 创建人 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |
| update_by | BIGINT | N | | 更新人 |
| update_date | DATETIME | N | | 更新时间 |

8.2 yh_goods_brand(品牌表)

|----------------|---------------|--------|-------------------|--------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| brand_code | VARCHAR(64) | Y | | 品牌编码 |
| brand_name | VARCHAR(100) | Y | | 品牌名称 |
| brand_logo_url | VARCHAR(500) | N | | 品牌Logo |
| country_name | VARCHAR(100) | N | | 国家/地区 |
| description | VARCHAR(1000) | N | | 品牌描述 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| del_flag | TINYINT | Y | 0 | 删除标记 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |
| update_date | DATETIME | N | | 更新时间 |

8.3 yh_goods_origin(产地表)

|---------------|--------------|--------|---------|------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| origin_code | VARCHAR(64) | Y | | 产地编码 |
| origin_name | VARCHAR(100) | Y | | 产地名称 |
| province_name | VARCHAR(100) | N | | 省份 |
| city_name | VARCHAR(100) | N | | 城市 |
| district_name | VARCHAR(100) | N | | 区县 |
| base_flag | TINYINT | Y | 0 | 是否基地:1是 0否 |
| supplier_id | BIGINT | N | | 关联供应商/基地 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.4 yh_goods_material(商品材质/属性表)

|---------------|--------------|--------|---------|------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| material_code | VARCHAR(64) | Y | | 属性编码 |
| material_name | VARCHAR(100) | Y | | 属性名称,如净菜、冻品、鲜活、A级 |
| material_type | TINYINT | Y | 1 | 属性类型:1品质等级 2加工方式 3存储属性 4规格属性 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.5 yh_goods_unit(计量单位表)

|---------------|--------------|--------|---------|------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| unit_code | VARCHAR(64) | Y | | 单位编码 |
| unit_name | VARCHAR(50) | Y | | 单位名称,如斤、公斤、箱、只 |
| unit_symbol | VARCHAR(20) | N | | 单位符号 |
| unit_type | TINYINT | Y | 1 | 单位类型:1重量 2数量 3体积 4包装 |
| decimal_scale | INT | Y | 2 | 默认小数位 |
| rounding_mode | TINYINT | Y | 1 | 舍入方式:1四舍五入 2向下截断 3向上取整 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| del_flag | TINYINT | Y | 0 | 删除标记 |
| remark | VARCHAR(500) | N | | 备注 |

8.6 yh_goods_spu(商品SPU主表)

|-----------------|--------------|--------|-------------------|------------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| goods_code | VARCHAR(64) | Y | | 商品编码,企业内唯一 |
| goods_name | VARCHAR(200) | Y | | 商品名称 |
| short_name | VARCHAR(100) | N | | 商品简称/助记名 |
| category_id | BIGINT | Y | | 商品分类ID |
| brand_id | BIGINT | N | | 品牌ID |
| origin_id | BIGINT | N | | 产地ID |
| material_id | BIGINT | N | | 属性/材质ID |
| goods_type | TINYINT | Y | 1 | 商品类型:1普通商品 2生鲜称重 3组合商品 4加工商品 5服务商品 |
| standard_flag | TINYINT | Y | 0 | 是否标品:1标品 0非标品 |
| fresh_flag | TINYINT | Y | 1 | 是否生鲜商品 |
| weigh_flag | TINYINT | Y | 0 | 是否需要称重 |
| batch_flag | TINYINT | Y | 0 | 是否启用批次 |
| shelf_life_flag | TINYINT | Y | 0 | 是否管理保质期 |
| shelf_life_days | INT | N | | 保质期天数 |
| storage_type | TINYINT | Y | 1 | 储存方式:1常温 2冷藏 3冷冻 4鲜活 |
| tax_rate | DECIMAL(8,4) | N | 0 | 税率 |
| loss_rate | DECIMAL(8,4) | N | 0 | 默认损耗率 |
| main_image_url | VARCHAR(500) | N | | 商品主图 |
| description | TEXT | N | | 商品详情/说明 |
| sale_flag | TINYINT | Y | 1 | 是否允许销售 |
| purchase_flag | TINYINT | Y | 1 | 是否允许采购 |
| stock_flag | TINYINT | Y | 1 | 是否管理库存 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| del_flag | TINYINT | Y | 0 | 删除标记 |
| remark | VARCHAR(500) | N | | 备注 |
| create_by | BIGINT | N | | 创建人 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |
| update_by | BIGINT | N | | 更新人 |
| update_date | DATETIME | N | | 更新时间 |

8.7 yh_goods_sku(商品SKU表)

|--------------------------|---------------|--------|-------------------|--------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| spu_id | BIGINT | Y | | 商品SPU ID |
| sku_code | VARCHAR(64) | Y | | SKU编码,企业内唯一 |
| sku_name | VARCHAR(200) | Y | | SKU名称 |
| spec_text | VARCHAR(300) | N | | 规格描述,如 500g/袋、A级大果 |
| barcode | VARCHAR(100) | N | | 默认条码 |
| default_sale_unit_id | BIGINT | N | | 默认销售单位 |
| default_purchase_unit_id | BIGINT | N | | 默认采购单位 |
| default_stock_unit_id | BIGINT | N | | 默认库存单位 |
| default_weigh_unit_id | BIGINT | N | | 默认称重单位 |
| min_order_qty | DECIMAL(18,4) | Y | 0 | 最小起订量 |
| sale_price | DECIMAL(18,4) | N | 0 | 默认销售价 |
| purchase_price | DECIMAL(18,4) | N | 0 | 默认采购价 |
| cost_price | DECIMAL(18,4) | N | 0 | 参考成本价 |
| gross_weight | DECIMAL(18,4) | N | | 毛重 |
| net_weight | DECIMAL(18,4) | N | | 净重 |
| length_value | DECIMAL(18,4) | N | | 长 |
| width_value | DECIMAL(18,4) | N | | 宽 |
| height_value | DECIMAL(18,4) | N | | 高 |
| volume_value | DECIMAL(18,4) | N | | 体积 |
| sale_flag | TINYINT | Y | 1 | 是否可销售 |
| purchase_flag | TINYINT | Y | 1 | 是否可采购 |
| stock_flag | TINYINT | Y | 1 | 是否管库存 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| sort_no | INT | Y | 0 | 排序号 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |
| update_date | DATETIME | N | | 更新时间 |

8.8 yh_goods_spec_group(规格组表)

|-----------------|--------------|--------|---------|-----------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| category_id | BIGINT | N | | 适用分类ID;为空表示通用 |
| spec_group_code | VARCHAR(64) | Y | | 规格组编码 |
| spec_group_name | VARCHAR(100) | Y | | 规格组名称,如等级、包装、大小 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.9 yh_goods_spec_value(规格值表)

|-----------------|--------------|--------|---------|-------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| spec_group_id | BIGINT | Y | | 规格组ID |
| spec_value_code | VARCHAR(64) | Y | | 规格值编码 |
| spec_value_name | VARCHAR(100) | Y | | 规格值名称,如A级、大果、500g |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.10 yh_goods_sku_spec(SKU规格关系表)

|-----------------|--------------|--------|---------|---------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| spec_group_id | BIGINT | Y | | 规格组ID |
| spec_value_id | BIGINT | Y | | 规格值ID |
| spec_group_name | VARCHAR(100) | Y | | 规格组名称快照 |
| spec_value_name | VARCHAR(100) | Y | | 规格值名称快照 |

8.11 yh_goods_unit_relation(商品单位换算表)

|-----------------------|---------------|--------|---------|-----------------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| from_unit_id | BIGINT | Y | | 来源单位ID |
| to_unit_id | BIGINT | Y | | 目标单位ID |
| convert_rate | DECIMAL(18,8) | Y | 1 | 换算比例:1 from_unit = convert_rate to_unit |
| reverse_rate | DECIMAL(18,8) | N | | 反向比例,可由系统计算 |
| sale_flag | TINYINT | Y | 0 | 是否允许销售使用 |
| purchase_flag | TINYINT | Y | 0 | 是否允许采购使用 |
| stock_flag | TINYINT | Y | 0 | 是否允许库存使用 |
| weigh_flag | TINYINT | Y | 0 | 是否允许称重使用 |
| default_sale_flag | TINYINT | Y | 0 | 是否默认销售单位 |
| default_purchase_flag | TINYINT | Y | 0 | 是否默认采购单位 |
| default_stock_flag | TINYINT | Y | 0 | 是否默认库存单位 |
| default_weigh_flag | TINYINT | Y | 0 | 是否默认称重单位 |
| precision_scale | INT | Y | 4 | 该换算后的数量小数位 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注;例如"1箱=20斤,按采购箱入库后转斤库存" |

8.12 yh_goods_barcode(商品条码表)

|-----------------|--------------|--------|-------------------|--------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| unit_id | BIGINT | N | | 条码对应单位 |
| barcode | VARCHAR(100) | Y | | 条码值 |
| barcode_type | TINYINT | Y | 1 | 条码类型:1普通条码 2称重码 3箱码 4供应商码 5二维码 |
| weigh_code_flag | TINYINT | Y | 0 | 是否称重条码 |
| supplier_id | BIGINT | N | | 供应商条码对应供应商 |
| default_flag | TINYINT | Y | 0 | 是否默认条码 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |

8.13 yh_goods_media(商品媒体表)

|------------|--------------|--------|---------|----------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| spu_id | BIGINT | Y | | SPU ID |
| sku_id | BIGINT | N | | SKU ID,可为空 |
| media_type | TINYINT | Y | 1 | 媒体类型:1主图 2详情图 3检验图 4视频 5文件 |
| media_url | VARCHAR(500) | Y | | 媒体地址 |
| media_name | VARCHAR(200) | N | | 媒体名称 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.14 yh_goods_alias(商品别名表)

|-------------|--------------|--------|---------|-------------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| alias_name | VARCHAR(200) | Y | | 别名 |
| alias_type | TINYINT | Y | 1 | 别名类型:1客户别名 2供应商别名 3采购别名 4分拣别名 5搜索别名 |
| customer_id | BIGINT | N | | 客户ID,客户别名时填写 |
| supplier_id | BIGINT | N | | 供应商ID,供应商别名时填写 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.15 yh_goods_label(商品标签表)

|-------------|--------------|--------|---------|----------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| label_code | VARCHAR(64) | Y | | 标签编码 |
| label_name | VARCHAR(100) | Y | | 标签名称 |
| label_type | TINYINT | Y | 1 | 标签类型:1商城 2业务 3风控 4加工 |
| color_value | VARCHAR(20) | N | | 前端显示颜色 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.16 yh_goods_label_rel(商品标签关系表)

|-------------|----------|--------|-------------------|--------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| spu_id | BIGINT | Y | | SPU ID |
| sku_id | BIGINT | N | | SKU ID |
| label_id | BIGINT | Y | | 标签ID |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |

8.17 yh_goods_sale_config(商品销售配置表)

|--------------------|---------------|--------|---------|-----------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| sale_channel | TINYINT | Y | 1 | 销售渠道:1商城 2后台 3POS 4社区团购 5全部 |
| sale_unit_id | BIGINT | Y | | 销售单位ID |
| online_flag | TINYINT | Y | 1 | 是否线上上架 |
| offline_flag | TINYINT | Y | 1 | 是否线下可售 |
| start_sale_time | DATETIME | N | | 开始售卖时间 |
| end_sale_time | DATETIME | N | | 结束售卖时间 |
| min_order_qty | DECIMAL(18,4) | Y | 0 | 最小起订量 |
| max_order_qty | DECIMAL(18,4) | N | | 单次最大购买量 |
| step_qty | DECIMAL(18,4) | Y | 1 | 下单步长 |
| stock_display_flag | TINYINT | Y | 1 | 商城是否显示库存 |
| shortage_sale_flag | TINYINT | Y | 0 | 是否允许缺货销售 |
| substitute_flag | TINYINT | Y | 0 | 是否允许替代商品 |
| substitute_sku_id | BIGINT | N | | 默认替代SKU |
| sort_no | INT | Y | 0 | 商城排序 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.18 yh_goods_purchase_config(商品采购配置表)

|-----------------------|---------------|--------|---------|------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| default_supplier_id | BIGINT | N | | 默认供应商ID |
| purchase_unit_id | BIGINT | Y | | 默认采购单位ID |
| min_purchase_qty | DECIMAL(18,4) | Y | 0 | 最小采购量 |
| purchase_step_qty | DECIMAL(18,4) | Y | 1 | 采购步长 |
| lead_time_days | INT | Y | 1 | 采购提前期天数 |
| auto_purchase_flag | TINYINT | Y | 1 | 是否参与自动采购建议 |
| safe_stock_qty | DECIMAL(18,4) | N | 0 | 安全库存量 |
| max_stock_qty | DECIMAL(18,4) | N | | 最高库存量 |
| supplier_compare_flag | TINYINT | Y | 1 | 是否参与供应商比价 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.19 yh_goods_stock_config(商品库存配置表)

|------------------------|---------|--------|---------|------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| warehouse_id | BIGINT | N | | 仓库ID;为空表示全局默认 |
| stock_unit_id | BIGINT | Y | | 库存单位ID |
| stock_manage_flag | TINYINT | Y | 1 | 是否管理库存 |
| batch_manage_flag | TINYINT | Y | 0 | 是否管理批次 |
| shelf_life_manage_flag | TINYINT | Y | 0 | 是否管理效期 |
| shelf_life_days | INT | N | | 默认保质期天数 |
| near_expire_days | INT | N | | 临期预警天数 |
| negative_stock_flag | TINYINT | Y | 0 | 是否允许负库存 |
| cost_method | TINYINT | Y | 1 | 成本算法:1移动加权 2FIFO 3标准成本 |
| default_area_id | BIGINT | N | | 默认库区 |
| default_location_id | BIGINT | N | | 默认库位 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.20 yh_goods_sorting_config(商品分拣配置表)

|-----------------------|---------------|--------|---------|-----------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| sorting_unit_id | BIGINT | Y | | 分拣单位ID |
| weigh_flag | TINYINT | Y | 0 | 是否称重分拣 |
| weigh_unit_id | BIGINT | N | | 称重单位ID |
| weight_tolerance_rate | DECIMAL(8,4) | N | 0 | 称重容差比例 |
| weight_tolerance_qty | DECIMAL(18,4) | N | 0 | 称重容差数量 |
| label_template_id | BIGINT | N | | 标签模板ID |
| print_label_flag | TINYINT | Y | 0 | 分拣是否打印标签 |
| basket_required_flag | TINYINT | Y | 0 | 是否必须绑定周转筐 |
| review_required_flag | TINYINT | Y | 1 | 是否需要复核 |
| shortage_allow_flag | TINYINT | Y | 1 | 是否允许缺货登记 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.21 yh_goods_price(商品基础价格表)

|----------------------|---------------|--------|---------|--------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| unit_id | BIGINT | Y | | 价格单位ID |
| price_type | TINYINT | Y | 1 | 价格类型:1基础销售价 2会员价 3时价 4促销价 5门店价 |
| price_value | DECIMAL(18,4) | Y | 0 | 价格 |
| min_qty | DECIMAL(18,4) | N | 0 | 阶梯起始数量 |
| max_qty | DECIMAL(18,4) | N | | 阶梯结束数量 |
| effective_start_date | DATE | N | | 生效开始日期 |
| effective_end_date | DATE | N | | 生效结束日期 |
| channel_type | TINYINT | Y | 0 | 渠道:0通用 1商城 2后台 3POS 4团购 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| audit_state | TINYINT | Y | 20 | 审核状态:10待审 20通过 30驳回 |
| remark | VARCHAR(500) | N | | 备注 |

8.22 yh_customer_goods_price(客户商品价格表)

|----------------------|---------------|--------|---------|-------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| customer_id | BIGINT | Y | | 客户ID |
| sku_id | BIGINT | Y | | SKU ID |
| unit_id | BIGINT | Y | | 价格单位ID |
| price_value | DECIMAL(18,4) | Y | 0 | 客户专属价格 |
| price_source | TINYINT | Y | 1 | 来源:1手工报价 2历史成交 3合同价 4导入 |
| min_qty | DECIMAL(18,4) | N | 0 | 阶梯起始数量 |
| max_qty | DECIMAL(18,4) | N | | 阶梯结束数量 |
| effective_start_date | DATE | N | | 生效开始日期 |
| effective_end_date | DATE | N | | 生效结束日期 |
| last_deal_price | DECIMAL(18,4) | N | | 最近成交价 |
| last_deal_date | DATE | N | | 最近成交日期 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| audit_state | TINYINT | Y | 20 | 审核状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.23 yh_goods_price_adjust(价格调价单表)

|----------------|--------------|--------|-------------------|-------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| adjust_no | VARCHAR(64) | Y | | 调价单号 |
| adjust_name | VARCHAR(200) | Y | | 调价主题 |
| adjust_type | TINYINT | Y | 1 | 调价类型:1基础价 2客户价 3供应商价 4促销价 |
| effective_date | DATE | Y | | 生效日期 |
| adjust_state | TINYINT | Y | 10 | 状态:10草稿 20待审 30已审核 40已生效 90作废 |
| audit_by | BIGINT | N | | 审核人 |
| audit_time | DATETIME | N | | 审核时间 |
| remark | VARCHAR(500) | N | | 备注 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |

8.24 yh_goods_price_adjust_item(调价明细表)

|---------------|---------------|--------|---------|-----------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| adjust_id | BIGINT | Y | | 调价单ID |
| customer_id | BIGINT | N | | 客户ID;客户价调价时填写 |
| supplier_id | BIGINT | N | | 供应商ID;供应商价调价时填写 |
| sku_id | BIGINT | Y | | SKU ID |
| unit_id | BIGINT | Y | | 单位ID |
| before_price | DECIMAL(18,4) | N | | 调整前价格 |
| after_price | DECIMAL(18,4) | Y | | 调整后价格 |
| change_rate | DECIMAL(8,4) | N | | 变动比例 |
| change_reason | VARCHAR(500) | N | | 调价原因 |

8.25 yh_supplier_goods_price(供应商商品报价表)

|-----------------------|---------------|--------|---------|---------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| supplier_id | BIGINT | Y | | 供应商ID |
| sku_id | BIGINT | Y | | SKU ID |
| unit_id | BIGINT | Y | | 采购单位ID |
| quote_price | DECIMAL(18,4) | Y | 0 | 供应商报价 |
| tax_rate | DECIMAL(8,4) | N | 0 | 税率 |
| min_purchase_qty | DECIMAL(18,4) | N | 0 | 最小采购量 |
| delivery_days | INT | N | | 交货天数 |
| quality_level | VARCHAR(50) | N | | 品质等级 |
| effective_start_date | DATE | N | | 生效开始日期 |
| effective_end_date | DATE | N | | 生效结束日期 |
| default_supplier_flag | TINYINT | Y | 0 | 是否默认供应商 |
| enabled | TINYINT | Y | 1 | 启用状态 |
| remark | VARCHAR(500) | N | | 备注 |

8.26 yh_goods_loss_rule(商品损耗规则表)

|------------------------|---------------|--------|---------|----------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| sku_id | BIGINT | Y | | SKU ID |
| rule_scope | TINYINT | Y | 1 | 规则范围:1仓储 2分拣 3加工 4配送 5采购验收 |
| loss_rate | DECIMAL(8,4) | Y | 0 | 损耗率 |
| loss_qty_limit | DECIMAL(18,4) | N | | 损耗数量上限 |
| auto_loss_flag | TINYINT | Y | 0 | 是否自动生成报损 |
| approval_required_flag | TINYINT | Y | 1 | 超限是否审批 |
| effective_start_date | DATE | N | | 生效开始日期 |
| effective_end_date | DATE | N | | 生效结束日期 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.27 yh_goods_trace_template(追溯属性模板表)

|---------------|--------------|--------|---------|----------------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| category_id | BIGINT | N | | 适用分类ID |
| template_code | VARCHAR(64) | Y | | 模板编码 |
| template_name | VARCHAR(100) | Y | | 模板名称 |
| field_code | VARCHAR(64) | Y | | 追溯字段编码,如 origin, batch_no, test_report |
| field_name | VARCHAR(100) | Y | | 追溯字段名称 |
| field_type | TINYINT | Y | 1 | 字段类型:1文本 2日期 3图片 4文件 5枚举 |
| required_flag | TINYINT | Y | 0 | 是否必填 |
| sort_no | INT | Y | 0 | 排序号 |
| enabled | TINYINT | Y | 1 | 启用状态 |

8.28 yh_goods_import_task(商品导入任务表)

|---------------|--------------|--------|-------------------|---------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| task_no | VARCHAR(64) | Y | | 导入任务号 |
| file_name | VARCHAR(200) | Y | | 文件名 |
| file_url | VARCHAR(500) | N | | 文件地址 |
| import_type | TINYINT | Y | 1 | 导入类型:1商品 2价格 3单位 4供应商报价 |
| total_count | INT | Y | 0 | 总行数 |
| success_count | INT | Y | 0 | 成功行数 |
| fail_count | INT | Y | 0 | 失败行数 |
| task_state | TINYINT | Y | 10 | 状态:10处理中 20成功 30部分失败 40失败 |
| operator_id | BIGINT | N | | 操作人 |
| create_date | DATETIME | Y | CURRENT_TIMESTAMP | 创建时间 |

8.29 yh_goods_import_error(商品导入错误表)

|----------------|---------------|--------|---------|---------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| task_id | BIGINT | Y | | 导入任务ID |
| row_no | INT | Y | | Excel行号 |
| field_name | VARCHAR(100) | N | | 错误字段 |
| origin_value | VARCHAR(500) | N | | 原始值 |
| error_message | VARCHAR(1000) | Y | | 错误说明 |
| fix_suggestion | VARCHAR(1000) | N | | 修复建议 |

8.30 yh_goods_change_log(商品变更日志表)

|---------------|--------------|--------|-------------------|------------------------------|
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| id | BIGINT | Y | 雪花ID | 主键 |
| tenant_id | BIGINT | Y | | 租户ID |
| biz_table | VARCHAR(100) | Y | | 变更表名 |
| biz_id | BIGINT | Y | | 业务ID |
| biz_code | VARCHAR(64) | N | | 商品/单据编码 |
| change_type | TINYINT | Y | 1 | 变更类型:1新增 2修改 3启停 4删除 5审核 6导入 |
| field_name | VARCHAR(100) | N | | 字段名 |
| before_value | TEXT | N | | 变更前值 |
| after_value | TEXT | N | | 变更后值 |
| operator_id | BIGINT | N | | 操作人ID |
| operator_name | VARCHAR(100) | N | | 操作人名称 |
| operate_time | DATETIME | Y | CURRENT_TIMESTAMP | 操作时间 |
| remark | VARCHAR(500) | N | | 备注 |

九、核心业务规则与校验

|--------------|----------------------------------------------------------------------|
| 规则 | 详细说明 |
| 商品编码唯一 | goods_code 在租户内唯一,不允许重复;导入时重复编码默认更新,重复名称需提示人工确认。 |
| SKU编码唯一 | sku_code 在租户内唯一,订单、采购、库存、分拣只允许引用有效SKU。 |
| 分类同级不重名 | 同一个parent_id下category_name不可重复。 |
| 单位名称唯一 | unit_name 在租户内唯一;同义单位如公斤/kg应使用别名或符号,不应建两套单位。 |
| 库存主单位唯一 | 每个SKU只能有一个default_stock_flag=1的单位换算关系。 |
| 默认销售单位唯一 | 每个SKU每个销售渠道建议只有一个默认销售单位。 |
| 价格生效期不可重叠 | 同一客户/同一SKU/同一单位/同一价格类型的有效期不允许重叠。 |
| 供应商报价不可冲突 | 同一供应商/同一SKU/同一单位/同一生效期不可重复报价。 |
| 称重商品必须配置称重单位 | weigh_flag=1时必须配置default_weigh_unit_id或sorting_config.weigh_unit_id。 |
| 批次商品必须配置效期规则 | batch_manage_flag=1时建议同时配置shelf_life_manage_flag和near_expire_days。 |
| 商品停用前校验 | 存在未完成订单、采购单、库存或客户价生效时,不允许直接删除,只允许停用。 |
| 价格修改必须留痕 | 基础价、客户价、供应商价变更必须写入goods_change_log或调价单。 |

9.1 单位换算校验重点

|---------|-------------------------------------------------|
| 校验点 | 说明 |
| 禁止零比例 | convert_rate 必须大于0。 |
| 禁止重复关系 | 同一SKU的from_unit_id + to_unit_id不可重复。 |
| 禁止互相矛盾 | 如 1箱=20斤,同时又配置1箱=18斤,必须禁止。 |
| 允许非固定换算 | 部分水产、蔬果存在浮动换算,可扩展range_min/range_max或按批次记录实际换算。 |
| 订单留快照 | 订单明细必须保存下单时单位、单价和换算比例,避免后续调整影响历史订单。 |

9.2 价格命中规则

价格计算建议顺序:

  1. 指定客户价:customer_id + sku_id + unit_id + delivery_date 命中有效期

  2. 活动/促销价:sku_id + unit_id + channel + 当前日期命中

  3. 客户等级价:customer_level + sku_id/category_id 命中

  4. 基础销售价:sku_id + unit_id 命中

  5. 最近成交价:仅作为参考或快捷填充,不建议直接作为正式价

  6. 手工改价:需要权限、原因、审批、日志

十、接口与页面建议

|---------|---------------------------------------|---------------|
| 功能域 | 接口建议 | 说明 |
| 商品分类 | GET /goods/categories/tree | 获取分类树 |
| 商品分类 | POST /goods/categories | 新增分类 |
| 商品档案 | GET /goods/spu/page | 商品分页查询 |
| 商品档案 | POST /goods/spu | 新增SPU与SKU基础信息 |
| 商品档案 | PUT /goods/spu/{id} | 修改SPU |
| SKU管理 | POST /goods/sku | 新增SKU |
| SKU管理 | PUT /goods/sku/{id}/enable | 启停SKU |
| 单位换算 | POST /goods/sku/{skuId}/units | 保存SKU单位换算 |
| 价格管理 | GET /goods/prices/page | 价格分页查询 |
| 客户价 | POST /goods/customer-prices/import | 导入客户价格 |
| 供应商报价 | POST /goods/supplier-prices | 维护供应商报价 |
| 商城配置 | PUT /goods/sku/{skuId}/sale-config | 保存商城售卖配置 |
| 分拣配置 | PUT /goods/sku/{skuId}/sorting-config | 保存分拣称重配置 |
| 库存配置 | PUT /goods/sku/{skuId}/stock-config | 保存库存成本配置 |
| 导入导出 | POST /goods/import | 商品批量导入 |
| 审计日志 | GET /goods/{skuId}/change-logs | 查看商品变更日志 |

10.1 页面原型字段建议

|-------------|-----------------------------------------------|-------------------------|
| 页面 | 关键字段 | 说明 |
| 商品列表页 | 分类、商品编码、商品名称、SKU编码、规格、销售价、库存单位、是否称重、是否上架、启用状态 | 支持高级查询、导入导出、批量上下架、批量调价。 |
| 商品编辑页-基础信息 | 分类、名称、品牌、产地、属性、储存方式、保质期、主图、详情 | SPU级信息。 |
| 商品编辑页-SKU规格 | SKU编码、规格、条码、默认销售单位、默认采购单位、库存单位、重量体积 | SKU级信息。 |
| 商品编辑页-单位换算 | 来源单位、目标单位、换算比例、销售/采购/库存/称重开关、默认标记 | 必须做强校验。 |
| 商品编辑页-价格 | 基础价、客户价、供应商价、调价记录、历史成交价 | 建议拆Tab页。 |
| 商品编辑页-作业配置 | 采购配置、库存配置、分拣配置、商城配置 | 将复杂配置分区,避免一个大表单。 |
| 商品详情页 | 基础资料、价格、单位、库存、采购、分拣、日志 | 方便客服、采购、仓库快速定位问题。 |

十一、升鲜宝落地改造建议

|--------------|----------------------------|-----------------------------|
| 阶段 | 建设内容 | 价值 |
| 第一阶段:主数据治理 | 统一分类、SPU、SKU、单位、条码、别名 | 先解决商品重复、单位混乱、订单/采购/库存口径不一致。 |
| 第二阶段:多单位中心 | 建立SKU单位换算表,区分销售/采购/库存/称重单位 | 支撑生鲜配送核心业务。 |
| 第三阶段:价格中心 | 基础价、客户价、供应商价、调价单、价格日志 | 解决客户价和每日时价管理。 |
| 第四阶段:作业配置 | 采购配置、库存配置、分拣配置、商城配置 | 把商品能力下沉到各业务流。 |
| 第五阶段:分拣称重 | 电子秤、称重码、标签模板、分拣容差、多退少补 | 提升生鲜履约效率。 |
| 第六阶段:数据治理与审计 | 导入任务、错误报告、变更日志、导出审计 | 适合实施和长期运维。 |

11.1 与升鲜宝现有设计的结合点

|-----------|----------------------------------------------------------------------------|
| 升鲜宝模块 | 结合建议 |
| pms商品模块 | 可将本文SPU/SKU/单位/分类/品牌/媒体模型并入pms_goods、pms_goods_sku、pms_unit_relation等现有结构。 |
| OMS订单模块 | 订单明细必须保存sku_id、unit_id、unit_price、price_source、unit_convert_rate快照。 |
| WMS库存模块 | 库存汇总建议按warehouse_id + sku_id + stock_unit_id管理,流水保存业务单据与单位换算。 |
| 采购模块 | 采购需求按sku_id汇总,采购单使用purchase_unit_id,入库时换算为stock_unit_id。 |
| 分拣模块 | 分拣任务读取sorting_config,称重数据回写actual_qty/actual_weight。 |
| 财务模块 | 客户价、成本价、损耗率影响应收、毛利、成本结转。 |

11.2 最小可落地表清单

|---------|-------------------------------------------------------------------------------------------------------------------------------|
| 优先级 | 表清单 |
| 必须先做 | yh_goods_category, yh_goods_unit, yh_goods_spu, yh_goods_sku, yh_goods_unit_relation, yh_goods_price, yh_customer_goods_price |
| 第二批做 | yh_supplier_goods_price, yh_goods_barcode, yh_goods_media, yh_goods_alias, yh_goods_sale_config, yh_goods_purchase_config |
| 第三批做 | yh_goods_stock_config, yh_goods_sorting_config, yh_goods_loss_rule, yh_goods_price_adjust, yh_goods_change_log |
| 后续增强 | yh_goods_trace_template, yh_goods_import_task, yh_goods_import_error, 标签体系、多语言体系、AI识别商品图像 |

十二、参考资料

升鲜宝并不是简单地照搬竞品页面,而重点学习与参考其"商品主数据贯通订单、采购、库存、分拣、配送、财务"的业务思想。商品模块如果设计不清楚,后续订单、库存、成本、分拣、报价都会出现重复补丁。

相关推荐
升鲜宝供应链及收银系统源代码服务3 小时前
【研究与学习】易订货商品模块设计分析文档字段级数据字典 + 表关系 + 单位换算 + 价格/库存/促销链路(一)---升鲜宝生鲜配送供应链管理系统
生鲜配送源代码·供应链源代码·生鲜供应链源代码·竞品学习与研究·供应链源代码出售
升鲜宝供应链及收银系统源代码服务1 天前
【研究与学习】菜小秘后台 SaaS 租户运营控制、费用管理系统数据字典及功能设计方案详细文档(一)---升鲜宝生鲜配送供应链管理系统
生鲜配送·生鲜配送源代码·供应链源码·收银系统源代码·农批系统·分拣系统源代码
升鲜宝供应链及收银系统源代码服务3 天前
升鲜宝云仓供应链管理系统 数据库数据字典设计 (一)---升鲜宝生鲜配送供应链管理系统
java·生鲜配送源代码·供应链源代码·生鲜供应链源代码·企业erp源代码·云仓供应链管理系统
升鲜宝供应链及收银系统源代码服务13 天前
升鲜宝后端 API 与手机端 API 开发说明(一)---升鲜宝生鲜配送供应链管理系统重构版
生鲜配送源代码·生鲜供应链管理系统·升鲜宝生鲜配送源代码·后端app与手机端
升鲜宝供应链及收银系统源代码服务15 天前
通用明细列表控件设计与开发文档(一)---升鲜宝生鲜配送供应链管理软件重构方案
重构·生鲜配送·生鲜配送源代码·供应链源代码·生鲜供应链源代码·企业erp源代码
升鲜宝供应链及收银系统源代码服务15 天前
管理类软件通用高级查询组件(一)---升鲜宝生鲜配送供应链管理软件重构方案
java·重构·生鲜配送源代码·供应链源代码·生鲜供应链源代码
升鲜宝供应链及收银系统源代码服务18 天前
升鲜宝 生鲜配送供应链管理系统,订单模块OMS 重构版 MySQL DDL详尽说明文档与重构说明
生鲜配送·生鲜配送源代码·供应链源代码·生鲜供应链源代码·企业erp源代码·升鲜宝供应链源代码
升鲜宝供应链及收银系统源代码服务19 天前
OMS 订单模块重构正式文档(一)---升鲜宝生鲜配送供应链管理系统
java·开发语言·重构·生鲜配送源代码·生鲜供应链源代码
升鲜宝供应链及收银系统源代码服务20 天前
数据字典国际化完整方案字典类型主表 + 字典类型国际化子表 + 字典明细主表 + 字典明细国际化子表(一)----升鲜宝生鲜配送供应链管理系统源代码
国际化·数据字典·多语言·生鲜配送·供应链源代码