一文搞懂大厂商品中心设计!

news2024/11/24 10:05:19

点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~

任何文章不要过度深思!

万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」

不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人

怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

2bb9a8c772ca066dd724007e2e822c2b.png

1 雪花算法使用

IdWorker idWorker=new IdWorker(1,1);
for(int i=0;i<10000;i++){
    long id = idWorker.nextId();
    System.out.println(id);
}

配置分布式ID生成器

  • 将IdWorker.java拷贝到util包

  • 在工程的resources下新增applicationContext-service.xml

<!‐‐雪花ID生成器‐‐>
<bean id="idWorker" class="com.qingcheng.util.IdWorker">
    <constructor‐arg index="0" value="1"></constructor‐arg>
    <constructor‐arg index="1" value="1"></constructor‐arg>
</bean>

2 新增和修改商品

2.1 表结构

t_spu 表
字段名称字段含义字段类型字段长度备注
id主键VARCHAR

sn货号VARCHAR

nameSPU名VARCHAR

caption副标题VARCHAR

brand_id品牌IDINT

category1_id一级分类INT

category2_id二级分类INT

category3_id三级分类INT

template_id模板IDINT

freight_id运费模板idINT

image图片VARCHAR

images图片列表VARCHAR

sale_service售后服务VARCHAR

introduction介绍TEXT

spec_items规格列表VARCHAR

para_items参数列表VARCHAR

sale_num销量INT

comment_num评论数INT

is_marketable是否上架CHAR

is_enable_spec是否启用规格CHAR

is_delete是否删除CHAR

status审核状态CHAR

t_sku 表
字段名称字段含义字段类型字段长度备注
id商品idVARCHAR

sn商品条码VARCHAR

nameSKU名称VARCHAR

price价格(分)INT

num库存数量INT

alert_num库存预警数量INT

image商品图片VARCHAR

images商品图片列表VARCHAR

weight重量(克)INT

create_time创建时间DATETIME

update_time更新时间DATETIME

spu_idSPUIDVARCHAR

category_id类目IDINT

category_name类目名称VARCHAR

brand_name品牌名称VARCHAR

spec规格VARCHAR

sale_num销量INT

comment_num评论数INT

status商品状态 1-正常,2-下架,3-删除CHAR

2.2 需求与实现

2.2.1 需求分析

详见静态原型。

2.2.2 实现思路

前端传递给后端的数据格式:

{
    "spu": {
        "name": "这个是商品名称",
        "caption": "这个是副标题",
        "brandId": 12,
        "category1Id": 558,
        "category2Id": 559,
        "category3Id": 560,
        "freightId": 10,
        "image": "http://www.qingcheng.com/image/1.jpg",
        "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
        "introduction": "这个是商品详情,html代码",
        "paraItems": {
            "出厂年份": "2019",
            "赠品": "充电器"
        },
        "saleService": "七天包退,闪电退货",
        "sn": "020102331",
        "specItems": {
            "颜色": [
                "红",
                "绿"
            ],
            "机身内存": [
                "64G",
                "8G"
            ]
        },
        "templateId": 42
    },
    "skuList": [
        {
            "sn": "10192010292",
            "num": 100,
            "alertNum": 20,
            "price": 900000,
            "spec": {
                "颜色": "红",
                "机身内存": "64G"
            },
            "image": "http://www.qingcheng.com/image/1.jpg",
            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
            "status": "1",
            "weight": 130
        },
        {
            "sn": "10192010293",
            "num": 100,
            "alertNum": 20,
            "price": 600000,
            "spec": {
                "颜色": "绿",
                "机身内存": "8G"
            },
            "image": "http://www.qingcheng.com/image/1.jpg",
            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
            "status": "1",
            "weight": 130
        }
    ]
}

2.3 代码实现

2.3.1 SPU与SKU列表的保存
/**
* 商品组合实体类 
*/
public class Goods implements Serializable {

    private Spu spu;

    private List<Sku> skuList;
}

SpuServiceImpl新增方法:

@Autowired
private SkuMapper skuMapper;
@Autowired  
private IdWorker idWorker;
@Autowired
private CategoryMapper categoryMapper;

/**
* 保存商品
* @param goods 商品组合实体类
*/
@Transactional
public void saveGoods(Goods goods) {
    // 保存一个spu的信息
    Spu spu = goods.getSpu();
    spu.setId(idWorker.nextId()+"");
    spuMapper.insert(spu);
    
    //保存sku列表的信息
    Date date=new Date();
    //分类对象
    Category category = categoryMapper.selectByPrimaryKey(spu.getCategory3Id());
    List<Sku> skuList = goods.getSkuList();
    for (Sku sku:skuList){
        sku.setId(idWorker.nextId()+"");
        sku.setSpuId(spu.getId());

        //sku名称 =spu名称+规格值列表
        String name=spu.getName();
        //sku.getSpec() {"颜色":"红","机身内存":"64G"}
        Map<String,String> specMap = JSON.parseObject(sku.getSpec(), Map.class);
        for(String value:specMap.values()){
            name+=" "+value;
        }
        sku.setName(name);//名称
        sku.setCreateTime(date);//创建日期
        sku.setUpdateTime(date);//修改日期
        sku.setCategoryId(spu.getCategory3Id());//分类id
        sku.setCategoryName(category.getName());//分类名称
        sku.setCommentNum(0);//评论数
        sku.setSaleNum(0);//销售数量

        skuMapper.insert(sku);
    }
}

该方法要对两个表操作,需添加事务:

@Service(interfaceClass=SpuService.class)

在类上加@Transactional,并在@Service注解中指定接口为SpuService.class。

SpuController修改add方法:

@PostMapping("/save")
public Result save(@RequestBody Goods goods){
    spuService.saveGoods(goods);
    return new Result();
}

3 建立分类与品牌的关联

3.1 需求

Q:为什么要建立分类与品牌的关联?

A:因为我们在前台搜索时,需要通过分类找到品牌列表。

Q:分类与品牌是什么关系?

A:多对多。

Q:在什么地方添加关系?

A:我们不在后台单独实现分类与品牌的关联,而是在添加商品时自动添加关联。

3.2 实现思路

  • 设计中间表tb_category_brand表

  • 创建实体类、数据访问接口

  • 在添加商品的saveGoods方法中添加代码逻辑 ,将SPU的品牌编号和分类编号一起插入到(中间表)

3.3 代码

创建实体类
@Table(name="tb_category_brand")
@Data
public class CategoryBrand implements Serializable {
    @Id
    private Integer categoryId;
    @Id 
    private Integer brandId;
}

联合主键,templateId和brandId都有@Id注解。

新建数据访问接口
public interface CategoryBrandMapper extends Mapper<CategoryBrand> {
}
修改saveGoods方法
CategoryBrand categoryBrand =new CategoryBrand();
categoryBrand.setBrandId(spu.getBrandId());
categoryBrand.setCategoryId(spu.getCategory3Id());
int count=categoryBrandMapper.selectCount(categoryBrand);
if(count==0) {
    categoryBrandMapper.insert(categoryBrand);
}

4 根据ID查询商品

根据id 查询SPU和SKU列表 ,显示效果:

{
    "spu": {
        "brandId": 0,
        "caption": "111",
        "category1Id": 558,
        "category2Id": 559,
        "category3Id": 560,
        "commentNum": null,
        "freightId": null,
        "id": 149187842867993,
        "image": null,
        "images": null,
        "introduction": null,
        "isDelete": null,
        "isEnableSpec": "0",
        "isMarketable": "1",
        "name": "黑马智能手机",
        "paraItems": null,
        "saleNum": null,
        "saleService": null,
        "sn": null,
        "specItems": null,
        "status": null,
        "templateId": 42
    },
    "skuList": [
        {
            "alertNum": null,
            "brandName": "金立(Gionee)",
            "categoryId": 560,
            "categoryName": "手机",
            "commentNum": null,
            "createTime": "2018‐11‐06 10:17:08",
            "id": 1369324,
            "image": null,
            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",
            "name": "黑马智能手机",
            "num": 100,
            "price": 900000,
            "saleNum": null,
            "sn": "",
            "spec": null,
            "spuId": 149187842867993,
            "status": "1",
            "updateTime": "2018‐11‐06 10:17:08",
            "weight": null
        },
        {
            "alertNum": null,
            "brandName": "金立(Gionee)",
            "categoryId": 560,
            "categoryName": "手机",
            "commentNum": null,
            "createTime": "2018‐11‐06 10:17:08",
            "id": 1369325,
            "image": null,
            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",
            "name": "黑马智能手机",
            "num": 100,
            "price": 900000,
            "saleNum": null,
            "sn": "",
            "spec": null,
            "spuId": 149187842867993,
            "status": "1",
            "updateTime": "2018‐11‐06 10:17:08",
            "weight": null
        }
    ]
}

4.1 代码

SpuService方法
/**
* 根据ID查询商品
* @param id 
* @return
*/
public Goods findGoodsById(String id){
    //查询spu
    Spu spu = spuMapper.selectByPrimaryKey(id);
    
    //查询SKU 列表
    Example example=new Example(Sku.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andEqualTo("spuId",id);
    List<Sku> skuList = skuMapper.selectByExample(example);
    
    //封装,返回
    Goods goods=new Goods();
    goods.setSpu(spu);
    goods.setSkuList(skuList);
    return goods;
}
SpuController
@GetMapping("/findGoodsById")
public Goods findGoodsById(Long id){
    return spuService.findGoodsById(id);
}

5 保存修改

实现思路
  • 修改与新增共用同一个方法

  • 通过spu的id判断当前操作是新增还是修改

  • 如果是新增需要设置spu的id,对spu执行的是insert操作

  • 如果修改则需要删除原来的sku列表,对spu执行的是updateByPrimaryKeySelective操作

  • sku列表的插入部分的代码要判断sku是否有id,如果有id则不重新生成id

代码实现

修改SpuServiceImpl的saveGoods:

/**
* 保存商品
* @param goods
*/
@Transactional
public void saveGoods(Goods goods) {
    //保存一个spu的信息
    Spu spu = goods.getSpu();
    if(spu.getId()==null){//新增商品
        spu.setId(idWorker.nextId()+"");
        spuMapper.insert(spu);
    }else{ //修改
        //删除原来的sku列表
        Example example=new Example(Sku.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("spuId",spu.getId());
        skuMapper.deleteByExample(example);

        //执行spu的修改
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    //保存sku列表的信息
    List<Sku> skuList = goods.getSkuList();
    for (Sku sku:skuList){
        if(sku.getId()==null){//新增
            sku.setId(idWorker.nextId()+"");
            sku.setCreateTime(date);//创建日期
        }
        //添加sku
    }

//建立分类和品牌的关联
}

6 未启用规格的sku处理

6.1 需求分析

有些商品没区分规格,即一个spu对应一个sku ,这时sku列表只传递一条记录,且无规格(spec)属性,要对其判断,避免因空值产生异常。

6.2 实现思路

在saveGoods方法的sku列表循环中添加代码,判断

// 构建SKU名称,采用SPU+规格值组装
if(sku.getSpec()==null || "".equals(sku.getSpec())){
    sku.setSpec("{}");
}

7 商品审核与上下架

7.1 商品审核

7.1.1 需求分析与实现思路

商品审核:新录入的商品是未审核状态,也是未上架状态。

实现思路
  • 修改审核状态,如果审核状态为1,则上架状态也修改为1

  • 记录商品审核记录

  • 记录商品日志

7.1.2 代码实现
/**
* 商品审核
* @param id
* @param status
* @param message
*/
@Transactional
public void audit(String id, String status, String message) {
    //1.修改状态 审核状态和上架状态
    Spu spu = new Spu();
    spu.setId(id);
    spu.setStatus(status);
    if("1".equals(status)){//审核通过
        spu.setIsMarketable("1");//自动上架
    }
    spuMapper.updateByPrimaryKeySelective(spu);
    
    //2.记录商品审核记录
    
    //3.记录商品日志
}
@GetMapping("/audit")
public Result audit(Long id){
    spuService.audit(id);
    return new Result();
}

7.2 下架商品

7.2.1 需求与实现思路

下架商品,修改上下架状态为下架。下架商品不修改审核状态。 下架商品需要记录商品日志。

7.2.2 代码实现
/**
* 下架商品
* @param id
*/
public void pull(String id) {
    Spu spu = spuMapper.selectByPrimaryKey(id);
    spu.setIsMarketable("0");//下架状态
    spuMapper.updateByPrimaryKeySelective(spu);
}
@GetMapping("/pull")
public Result pull(String id){
    spuService.pull(id);
    return new Result();
}

7.3 上架商品

7.3.1 需求分析

将商品修改为上架状态,需要验证该商品是否审核通过,未审核通过的商品不能上架。 上架商品需要记录商品日志。

7.3.2 代码实现

通过审核的商品才能上架:

/**
* 商品上架
* @param id
*/
public void put(String id) {
    //1.修改状态
    Spu spu = spuMapper.selectByPrimaryKey(id);
    if(!"1".equals(spu.getStatus())){
        throw new RuntimeException("此商品未通过审核");
    }
    spu.setIsMarketable("1");
    spuMapper.updateByPrimaryKeySelective(spu);
    
    //2.记录商品日志
}
@GetMapping("/put")
public Result put(String id){
    spuService.put(id);
    return new Result();
}

7.4 批量上下架

7.4.1 需求分析

前端传递一组商品ID,后端进行批量上下架处理,处理后给前端返回处理的条数

7.4.2 代码实现
/**
* 批量上架商品
* @param ids
*/
public int putMany(Long[] ids) {
    Spu spu=new Spu();
    spu.setIsMarketable("1");//上架
    
    //批量修改
    Example example=new Example(Spu.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andIn("id", Arrays.asList(ids));//id
    criteria.andEqualTo("isMarketable","0");//下架
    criteria.andEqualTo("status","1");//审核通过的
    criteria.andEqualTo("isDelete","0");//非删除的
    return spuMapper.updateByExampleSelective(spu, example);
}
@GetMapping("/putMany")
public Result putMany(Long[] ids){
    int count = spuService.putMany(ids);
    return new Result(0,"上架"+count+"个商品");
}

8 删除与还原商品

8.1 需求分析

删除商品并非物理删除(真正的执行删除数据),而是通过将表中某字段标记为删除状态。

还原商品实际就是将删除状态再修改回来。

如果商品需要物理删除,必须是先逻辑删除才能进行物理删除,删除前需要检查状态。

8.2 实现思路

  • 逻辑删除商品,修改spu表is_delete字段为1

  • 商品回收站显示spu表is_delete字段为1的记录

  • 回收商品,修改spu表is_delete字段为0

写在最后

公众号JavaEdge 专注分享软件开发全生态相关技术文章视频教程资源、热点资讯等,如果喜欢我的分享,给 🐟🐟 点一个 👍 或者 ➕关注 都是对我最大的支持。

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习途径等等。

4fccaca393bc49e633bc02a4ecc802bb.jpeg添加好友备注【技术群交流】拉你进技术交流群

关注公众号后,在后台私信:

  • 回复【架构师】,获取架构师学习资源教程

  • 回复【面试】,获取最新最全的互联网大厂面试资料

  • 回复【简历】,获取各种样式精美、内容丰富的简历模板

  • 回复 路线图,获取直升Java P7技术管理的全网最全学习路线图

  • 回复 大数据,获取Java转型大数据研发的全网最全思维导图

  • 更多教程资源应有尽有,欢迎关注,慢慢获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1651702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SOCKET编程(1):基本概念

基本概念 socket分类 socket提供了**流(stream)和数据报(datagram)**两种通信机制&#xff0c;即流socket和数据报socket 流socket基于TCP协议&#xff0c;是一个有序、可靠、双向字节流的通道&#xff0c;传输数据不会丢失、不会重复、顺序也不会错乱 数据报socket基于UDP…

面试笔记——工厂模式(简单工厂、工厂方法模式、抽象工厂模式)

场景需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其两个子类&#xff08;美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】&#xff09;&#xff1b;再设计一个咖啡店类&#xff08;CoffeeStore&#xff09…

提升Go语言数学运算能力:math包使用指南

提升Go语言数学运算能力&#xff1a;math包使用指南 介绍数学函数的使用基本数学运算幂和根的计算三角函数对数计算 特殊数学常数和函数数学常数超越数学函数错误处理和精度问题 高级应用实例统计数据的标准偏差计算利用三角函数解决实际问题 性能优化技巧避免不必要的函数调用…

FebHost:为什么注册法国.FR域名?

注册 .FR 域名&#xff0c;意味着您的网站将主要面向法国市场。法国不仅是欧盟内购买力第二强的经济体&#xff0c;也是全球第七大经济体。值得注意的是&#xff0c;法语是29个国家的官方语言&#xff0c;使用人数约达2.7亿。一旦您拥有了 .FR 域名&#xff0c;就能向这个具有强…

如何查看近50年的历史影像?

天地图最近上线了2024版&#xff0c;全面更新了覆盖全国的在线地图服务。 本次更新首次开放多时相卫星影像&#xff0c;可查看32个省级节点近半个世纪的历史影像。 2024版天地图有哪些更新&#xff1f; 2024版天地图的更新优化主要包括&#xff1a; 1、新增上海市黄浦区、徐…

PHPStudy 下载PHP提示“当前网络不稳定,下载失败”

错误信息 当前网络不稳定&#xff0c;下载失败 获取下载链接失败&#xff0c;请检查网络 假查网络 问题原因 xp.cn服务器的网络不稳定&#xff0c;不是你电脑的网络问题。 解决办法 第一步&#xff1a;下载现成的PHP文件 直接下载现成的文件&#xff0c;放到php目录。 将…

如何用多个高斯泼溅合成新的场景【3DGS】

3D高斯泼溅&#xff08;3D Gaussian Splatting&#xff09;作为一种突破性摄影测量和可视化技术作为 SIGGRAPH 2023 上发表的研究论文的一部分发布。我相信3DGS是允许像你我这样的日常用户扫描 3D 的最佳现代方法并保留有机材料的精细细节&#xff0c;尤其是植物、树木、花卉和…

SQL注入实例(sqli-labs/less-1)

初始网页 从网页可知传递的参数名为 id&#xff0c;并且为数字类型 1、得知数据表有多少列 1.1 使用联合查询查找列数&#xff08;效率低&#xff09; http://localhost/sqli-labs-master/Less-1/?id1 union select 1,2 -- 1.2 使用order by查找列数&#xff08;效率高&…

Java | Leetcode Java题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…

HADOOP之YARN详解

目录 一、YARN的简介 1.1 MapReduce 1.x 1.1.1 MapReduce 1.x的角色 1.2 YARN的介绍 1.3 YARN的设计思想 二 YARN的配置 1. mapred-site.xml 2. yarn-site.xml ​编辑 3. hadoop-env.sh 4. 分发到其他节点 5.YARN的服务启停 6. 任务测试 三 YARN的历史日志 1. 历…

寻找最佳App分发平台:小猪APP分发脱颖而出

在当今移动应用市场日益饱和的环境下&#xff0c;选择一个合适的App分发平台对于开发者来说至关重要。这不仅关系到应用能否快速触达目标用户&#xff0c;还直接影响到品牌的塑造与市场份额的争夺。本文将深入探讨几大关键因素&#xff0c;帮助开发者判断哪个App分发平台最适合…

数据库管理-第185期 23ai:一套关系型数据干掉多套JSON存储(20240508)

数据库管理185期 2024-05-08 数据库管理-第185期 23ai:一套关系型数据干掉多套JSON存储&#xff08;20240508&#xff09;1 上期示例说明2 两个参数2.1 NEST/UNNEST2.2 CHECK/NOCHECK 3 一数多用3.1 以用户维度输出订单信息3.2 以产品维度3.3 以产品种类维度 4 美化输出总结 数…

Debian——安装syzkaller——2024

系统:Debian 远程连接——我是不想安装tools没有办法复制黏贴,所以远程,根据个人情况选择是否远程连接 就是说使用Windows自带的远程mstsc,使用的不是ssh22端口,是TCP 3389端口 mkdir debian cd debian 二:安装go编译器 打开终端。使用wget命令从官方网站或可信的镜像…

Flink 部署模式

目录 概述 部署模式 会话模式&#xff08;Session Mode&#xff09; 单作业模式(Per-Job Mode) 应用模式(Application Mode) 运行模式&#xff08;资源管理模式&#xff09; Standalone运行模式 会话模式部署 应用模式部署 Yarn运行模式 会话模式部署 单作业模式部…

「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)

本教程将指导您如何生成一个可运行的Google Web Toolkit (GWT) 2.1和Spring应用程序&#xff0c;该应用程序为域模型实现了CRUD应用程序模式。在本教程中&#xff0c;您将学习如何&#xff1a; 安装Google Eclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译…

护眼灯作用大吗?分享五款优质护眼台灯,守护视力健康

护眼灯作用大吗&#xff1f;这是许多人在考虑选购护眼台灯时会思考的问题。其实只要是有使用过护眼台灯的会发现&#xff0c;它发散出来的光线柔和&#xff0c;能够有效防蓝光、眩光&#xff0c;这样的光线环境对眼睛十分友好&#xff0c;从而能够有效缓解视觉疲劳。随着现代生…

图片8位, 16位,24位,32位原理,以及如何进行补位互转

写在前面&#xff1a;之前一直没有这个概念&#xff0c;以为像素就是十六进制如 #FFFFFF&#xff0c;或者rgb(255,255,255) 即可实现颜色定义&#xff0c;理解相当肤浅&#xff0c;接触到一个物联网项目&#xff0c;写底层的童鞋让我把16位如 0*FFFF转为24位去显示在浏览器&…

美业SaaS系统多门店收银系统源码-【分润常见问题】讲解(二)

美业管理系统源码 博弈美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 分润常见问题&#xff1a; 4、若产品的服务方分润>0&#xff0c;则销售方分润和服…

考研管理类联考(专业代码199)数学基础【3】函数、方程、不等式

一、函数 1.一次函数 y kx b(k≠0) 的图象及性质 2.二次函数y ax^2 bx c的图象和性质 3.指数函数y a^x &#xff08; a&#xff1e;0&#xff0c;且a≠1&#xff09;的图象和性质 4.对数函数y logₐx ( a&#xff1e;0&#xff0c;且a≠1)的图象与性质 二、方程 1.一元…

大数据和AI在半导体生产系统中的应用

大数据和AI在半导体生产系统中的应用场景非常广泛,涉及从设计、制造到质量控制和市场分析的各个环节。以下是一些具体的半导体大数据应用场景、技术原理、以及实现这些应用的具体做法和方法: 01、半导体大数据应用场景 1. 预测性维护 - **应用场景**:预测设备故障,提前…