电商系统sku设计

2023-10-31

1.sku含义

sku :(stock keeping unit)是库存保存单位。即库存进出量的单位,可以是件,盒等为单位,在使用时候根据不同的业务状态,不同的管理模式来处理。在服装,鞋类使用最普遍
如图所示:
在这里插入图片描述

2.数据库设计

#规格属性表(对应上面的颜色尺码属性 例如specs_id代表颜色,name表示红色,蓝色;specs_id代表尺码,name表示40,42)
CREATE TABLE `mall_specs_value` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `specs_id` int(10) unsigned NOT NULL COMMENT '规格ID  1:颜色 2:尺码 3:材质',
 `name` varchar(100) NOT NULL DEFAULT '' COMMENT '规格属性名',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0',
 `update_time` int(10) unsigned NOT NULL DEFAULT '0',
 `operate_user` varchar(100) NOT NULL DEFAULT '',
 `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `specs_id` (`specs_id`)
);

在这里插入图片描述

#商品sku表,(选中上图中的黑色42尺码的鞋子)
CREATE TABLE `mall_goods_sku` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `goods_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品Id',
 `specs_value_ids` varchar(255) NOT NULL COMMENT '每行规则属性ID 按逗号连接',
 `price` decimal(10,2) unsigned NOT NULL COMMENT '现价',
 `cost_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价',
 `stock` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '库存',
 `status` tinyint(1) NOT NULL DEFAULT '1',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0',
 `update_time` int(10) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `goods_id` (`goods_id`)
) ;

第一行数据表示颜色为白色,材质为windows系统,尺码为20英寸的商品1的现价为1块,原价为1块,库存为1

#商品表
CREATE TABLE `mall_goods` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '商品标题',
 `category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品分类',
 `category_path_id` varchar(20) NOT NULL DEFAULT '' COMMENT '栏目ID path',
 `promotion_title` varchar(255) NOT NULL DEFAULT '' COMMENT '商品促销语',
 `goods_unit` varchar(20) NOT NULL DEFAULT '' COMMENT '商品单位',
 `keywords` varchar(100) NOT NULL DEFAULT '' COMMENT '关键词',
 `sub_title` varchar(100) NOT NULL DEFAULT '' COMMENT '副标题',
 `stock` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '库存',
 `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '现价',
 `cost_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '原价',
 `sku_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品默认的sku_id',
 `is_show_stock` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否显示库存',
 `production_time` varchar(10) NOT NULL DEFAULT '0' COMMENT '生产日期',
 `goods_specs_type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '商品规则 1统一,2多规格',
 `big_image` varchar(255) NOT NULL DEFAULT '' COMMENT '大图',
 `recommend_image` varchar(255) NOT NULL DEFAULT '' COMMENT '商品推荐图',
 `carousel_image` varchar(500) NOT NULL DEFAULT '' COMMENT '详情页轮播图',
 `description` text NOT NULL COMMENT '商品详情',
 `is_index_recommend` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否首页推荐大图商品',
 `goods_specs_data` varchar(255) NOT NULL DEFAULT '' COMMENT '所有规则属性存放json',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0',
 `update_time` int(10) unsigned NOT NULL DEFAULT '0',
 `operate_user` varchar(255) NOT NULL DEFAULT '',
 `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
 `listorder` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段',
 PRIMARY KEY (`id`),
 KEY `title` (`title`),
 KEY `category_path_id` (`category_path_id`)
);

在这里插入图片描述

3.添加商品sku操作逻辑

在这里插入图片描述

数据格式如图所示:在这里插入图片描述

4.添加代码

//good.php
public function insertData($data)
    {
        $this->model->startTrans();
        try{
            $goodsId =  $this->add($data);

            if (!$goodsId){
                return $goodsId;
            }
            //执行数据插入到sku表中
            //如果是统一规格
            if ($data['goods_specs_type'] ==1){
                $goodsSkuData = [
                  "goods_id"=>$goodsId
                ];
            }elseif ($data['goods_specs_type'] == 2){
               $goodsSkuBusiObj = new GoodSku();
               $data['goods_id'] = $goodsId;
                try {
                    $res = $goodsSkuBusiObj->saveAll($data);
                }catch (\Throwable $e){
                    dd($e->getMessage());
                }

               if (!empty($res))
               {

                   //总库存
                   $stock = array_sum(array_column($res,"stock"));

                   $goodsUpdateData  = [
                       "price"=>$res[0]['price'],
                       "cost_price"=>$res[0]['cost_price'],
                       "stock"=>$stock,
                       "sku_id"=>$res[0]['id']
                   ];
                   //执行完毕之后,更新主要表中的数据
                   $goodsRes = $this->model->updateById($goodsId,$goodsUpdateData);

                    if(!$goodsRes)
                    {
                        throw new Exception("insertData:goods主表更新失败");
                    }
               }else{
                   throw new Exception("sku表新增失败");
               }
            }
            // 事务提交
            $this->model->commit();
            return true;

        }catch (\Exception $e){

            $this->model->rollback();
            return show(0,$e->getMessage());
            return false;
        }
    }

//goodsku.php
 public function saveAll($data)
    {
        if (!$data['skus'])
        {
            return false;
        }

        foreach ($data['skus'] as $value)
        {
            $insertData[] = [
              "goods_id" => $data['goods_id'],
              "specs_value_ids" => $value['propvalnames']['propvalids'],
              "price" => $value['propvalnames']['skuSellPrice'],
              "cost_price"=> $value['propvalnames']['skuMarketPrice'],
              "stock" => $value['propvalnames']['skuStock'],
            ];
        }
        try{
            $result = $this->model->saveAll($insertData);
            return $result->toArray();
        }catch (\Exception $e){
            return false;
        }

        return true;

    }

    public function add($data)
    {
        $data['status'] = 1;
        try{
            $this->model->save($data);
        }catch (\Exception $e){
            return 0;
        }
        return $this->model->id;
    }

5.页面

接口返回的api数据格式

{
    "status": 1,
    "message": "OK",
    "result": {
        "title": "Thinkpad E550联想电脑",
        "price": "1.00",
        "cost_price": "1.00",
        "sales_count": 0,
        "stock": 1,
        "gids": {
            "5,12,10": 1,
            "5,12,11": 2,
            "5,13,10": 3,
            "5,13,11": 4,
            "6,12,10": 5,
            "6,12,11": 6,
            "6,13,10": 7,
            "6,13,11": 8
        },
        "image": "http://www.tp6shop.com//storage/upload/20200927/285c86b5682aa680a4efc8f235657645.jpg",
        "sku": [
            {
                "name": "",
                "list": [
                    {
                        "id": "5",
                        "name": "白色",
                        "flag": 1
                    },
                    {
                        "id": "6",
                        "name": "黑色",
                        "flag": 0
                    }
                ]
            },
            {
                "name": "",
                "list": [
                    {
                        "id": "12",
                        "name": "windows系统",
                        "flag": 1
                    },
                    {
                        "id": "13",
                        "name": "linux系统",
                        "flag": 0
                    }
                ]
            },
            {
                "name": "",
                "list": [
                    {
                        "id": "10",
                        "name": "20英寸",
                        "flag": 1
                    },
                    {
                        "id": "11",
                        "name": "30英寸",
                        "flag": 0
                    }
                ]
            }
        ],
        "detail": {
            "d1": {
                "商品编码": 1,
                "上架时间": "2020-09-27 17:36:01"
            },
            "d2": "dsgfdsgsgsggdfghfdgdfg"
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

电商系统sku设计 的相关文章

  • 马上:硬件开关机

    马上 硬件开关机 通过多年与RK3288不同产品的方案公司的接触 梳理并总结RK3288方案常用开关机的方案 PMU RTC 方案 PMU RK808 RTC hym8563 纽扣电池供电 硬件上需要把RTC的中断脚接到RK808的开机引脚
  • Feign负载均衡写法

    Feign主要为了面向接口编程 feign是web service客户端 是接口实现的 而ribbon是通过微服务名字访问通过RestTemplate调用的 如下 在Feign的实现下 我们只需要创建一个接口并使用注解的方式来配置它 类似于
  • 新的分享之路开启,感谢您的陪伴

    分享之初 新学期即将到来之时 我开启了新的分享之路 第一次尝试在微信公众号上分享原创知识 起初 我一直是拒绝的 因为读博异常忙碌 哪有时间去经营一个新的学习天地 并且经过十年的CDSN分享 慢慢养成了力争每一篇文章都是干货 都对得起读者的喜
  • 在Android Studio中添加com.android.support:design的支持

    关于Material Design Google在2015的IO大会上 给我们带来了Material Design的设计规范 同时 也给我们带来了全新的Android Design Support Library 利用这个库在Android
  • window系统默认编码格式GBK怎么理解

    window系统默认编码格式GBK怎么理解 对我们在window 平台编码有什么影响呢 在说明这个问题之前 我们先搞清楚 文件编码格式 编程语言中字节数组转字符串默认使用的编码格式 操作系统默认的编码格式 1 文件编码格式 指的是我们编写的
  • 递归问题

    1 题目分析 1 问题描述 一个人赶着鸭子去每个村庄卖 每经过一个村子卖去所赶鸭子的一半又一只 这样他经过了七个村子后还剩两只鸭子 问他出发时共赶多少只鸭子 经过每个村子卖出多少只鸭子 分析 卖家在经过七个村子后剩下2只鸭子 令duck 2
  • C语言,一维数组实验五

    A C语言实验 最值 描述 有一个长度为n的整数序列 其中最大值和最小值不会出现在序列的第一和最后一个位置 请写一个程序 把序列中的最小值与第一个数交换 最大值与最后一个数交换 输出转换好的序列 输入 输入包括两行 第一行为正整数n 1 n
  • 7-14 求整数段和 (15分)

    7 14 求整数段和 15分 给定两个整数A和B 输出从A到B的所有整数以及这些数的和 输入格式 输入在一行中给出2个整数A和B 其中 100 A B 100 其间以空格分隔 输出格式 首先顺序输出从A到B的所有整数 每5个数字占一行 每个
  • 【03】pytorch 自定义transform操作-踩坑记录

    1 椒盐噪声是什么 就是图片上出现的黑白点 类似于老式电视机出现雪花屏幕的感觉 transforms是pytorch定义的一个类 对图像进行各种变换 进行图像变换的目的是数据增强 使得模型的鲁棒性更加的强 尽管pytorch已经提供了很多的
  • 用numpy里边的random函数生成随机数据&&&同时进行画图练习

    import numpy as np import matplotlib pyplot as plt import sklearn from sklearn linear model import LinearRegression from
  • python 散点图 不同颜色_Python中的散点图和颜色映射

    这是一个例子 import numpy as np import matplotlib pyplot as plt x np random rand 100 y np random rand 100 t np arange 100 plt
  • Java泛型(泛型类、反射、类型通配符)-黑马视频笔记

    泛型 学习参考视频 B站黑马 本文结构 一 什么是泛型 二 泛型类 接口 三 泛型方法 四 类型通配符 五 类型擦除 六 泛型和数组 七 泛型和反射 一 什么是泛型 背景 JAVA推出泛型以前 程序员可以构建一个元素类型为Object的集合
  • vue开发项目(PC端和移动端共用一套代码)(一)

    编写两套代码 通过路由加载不同端的文件 1 创建vue项目 2 基本配置 2 1 html设置 创建两端的vue文件 在App vue中 添加 2 2 路由设置 在router文件夹下 创建m pc两个文件夹 路径如下 router m i
  • MOS管开关设计知识-(五种MOS管开关电路图方式)

    在使用MOS管设计开关电源或者马达驱动电路的时候 大部分人都会考虑MOS的导通电阻 最大电压等 最大电流等 也有很多人仅仅考虑这些因素 这样的电路也许是可以工作的 但并不是优秀的 作为正式的产品设计也是不允许的 下面是我对MOSFET及MO
  • 在Docker上部署FastApi(最新)

    目录 1 文件上传与新建目录 文件目录 2 修改requirements txt文件 3 修改Dockerfile txt文件 4 打包成镜像 5 运行启动 6 查看运行状态与日志 1 文件上传与新建目录 新建以下目录 其中 py文件是自己
  • 使用 github 的 Action 功能实现 Microsoft office E5 订阅自动续订

    在使用期限内 微软会根据 API 调用情况看账号是否是用于开发 如果符合的话 会在距离到期 30 天时自动续期 如果不符合就不给续订了 所以可以使用一些办法多多使用 这样就可以持续续订 可以使用 github 的 Action 实现 默认读
  • python数据可视化03

    一 正弦曲线与余弦曲线图 import numpy as np import matplotlib pyplot as plt plt rcParams font sans serif SimHei plt rcParams axes un

随机推荐

  • Mac和Linux中Apache RocketMQ的安装和使用(亲测有效,不服来战)

    一 项目需要用到Apache RocketMQ Apache RocketMQ is an open source distributed messaging and streaming data platform 这是阿里开源的一个消息中
  • 操作系统(王道)

    1 1 1 操作系统概念 裸机 硬件只听得懂二进制指令 gt 操作系统 属于软件 提供良好交互界面 gt 应用软件 gt 用户使用 操作系统是指控制和管理整个计算机系统的硬件和软件资源 并合理地组织和调度计算机工作和资源的分配 以提供给用户
  • mysql查看所有用户

    使用shell命令MySQL uroot p 输入密码后再select user host from mysql user 结果
  • vue2中使用axios http请求出现的问题解决

    使用axios处理post请求时 出现的问题解决 默认情况下 axios post url params then res gt res data 当url是远程接口链接时 会报404的错误 Uncaught in promise Erro
  • 【论文摘要】标签合并Bamboo: Building Mega-Scale Vision Dataset Continually with Human-Machine Synergy

    Bamboo Building Mega Scale Vision Dataset Continually with Human Machine Synergy 前言 论文链接 https arxiv org pdf 2203 07845
  • git上线流程

    1 本地分支上传远端 git push 2 切换到master主分支 git checkout master 3 拉取最新 git pull 4 新建分支 merge 日期 先切换 git checkout merge 20210528 切
  • 几种常见的排序算法、搜索与二分法查找

    目录 一 排序算法 1 1 冒泡排序 1 2 选择排序 1 3 插入排序 1 4 快速排序 1 5 常见排序算法效率比较 二 搜索 2 1 二分法查找 一 排序算法 1 1 冒泡排序 冒泡排序算法的运作原理 1 比较相邻的元素 如果第一个比
  • 交换机与路由器技术-35-端口多路复用PAT

    目录 一 端口多路复用 PAT 1 1 概述 1 2 端口映射 服务器映射 1 3 配置端口多路复用 1 3 1 方式一 使用单独的公网IP 第一步 定义内网和外网接口 第二步 定义内网地址范围 外网地址 1 使用ACL 允许某个范围的内网
  • 学习C++项目—— 搭建多进程网络服务框架,增加业务和日志,心跳机制

    学习计算机网络编程 一 思路和学习方法 本文学习于 C语言技术网 www freecplus net 在 b 站学习于 C 语言技术网 并加以自己的一些理解和复现 如有侵权会删除 接下来对网络编程继续深入学习 二 网络编程继续深入 2 1
  • beego实现跨域

    使用路由过滤器实现跨域访问 routers router go 的init方法中添加过滤器 beego InsertFilter beego BeforeRouter cors Allow cors Options 允许访问所有源 Allo
  • jquery mobile学习教程之初识Jquery mobile 一

    Jquery Mobile简介 jQuery Mobile 是一个针对触摸体验的 web UI 开发框架 允许您开发跨智能电话和平板电脑工作的移动 web 应用程序 jQuery Mobile 框架构建于 jQuery 内核之上 提供几个功
  • 简单AIDL使用

    1 AIDL准备注意 build gradle buildFeatures aidl true 权限 在调用的APP添加目标APP可见 客户端 否则会有no Font service
  • Hystrix请求熔断与服务降级

    1 1 概述 在微服务架构中 根据业务来拆分成一个个的服务 服务与服务之间可以相互调用 RPC 在Spring Cloud可以用RestTemplate Ribbon和Feign来调用 为了保证其高可用 单个服务通常会集群部署 由于网络原因
  • Flex程序发布

    当你写好了一个Flex程序 想要按照某种方式发布 比如我们在网上见到很多发布后的例子中 在点击右键的时候出现一个菜单 菜单中有一个view source选项 选择这一项就可以预览程序的源码甚至是整个程序的架构 接下来简单介绍下程序的发布来实
  • 写定时任务发送邮件报错(Could not connect to SMTP host:smtp.exmail.qq.com,port:465)

    需求阐述 在写完定时任务发送邮件之后 调试的时候发现报错 Could not connect to SMTP host smtp exmail qq com port 465 一开始我以为是在for循环里发送邮件导致的 把循环禁用掉之后 发
  • systemd配置文件及管理方法详解

    一 systemd文件夹配置文件夹 systemd 配置文件存在于以下三个文件夹中 etc systemd system 存放系统启动的默认级别及启动的unit的软连接 优先级最高 run systemd system 系统执行过程中产生的
  • Log4j工具入门

    Log日志 主要用于记录程序运行的情况 以便于程序在部署之后的排错调试等等 也有利于将这些信息进行持久化 如果不将日志信息保存到文件或数据库 则信息便会丢失 Java Logging API 需JDK1 4版本以上才能支持 java uti
  • SQLPrompt关闭联网

    一 安装步骤概述 下载的破解版本SqlPrompt一般包含有如下两个可执行程序文件 安装步骤 1 安装SQLPrompt xxx 版本号 应用程序 需要关掉Miscrosoft SQL Server Management 2 再打开SQL
  • UDP 概述(主要特点,首部格式 header)

    文章目录 1 UDP 概述 2 UDP的 首部格式 header 1 UDP 概述 UDP只在 IP的数据包服务 之上增加了一点功能 这就是复用和分用的功能以及差错检测的功能 UDP的主要特点 序号 特点 描述 1 无连接 发送数据之前不需
  • 电商系统sku设计

    1 sku含义 sku stock keeping unit 是库存保存单位 即库存进出量的单位 可以是件 盒等为单位 在使用时候根据不同的业务状态 不同的管理模式来处理 在服装 鞋类使用最普遍 如图所示 2 数据库设计 规格属性表 对应上