100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 乐优商城第九天 第十天 (商品规格参数模版的新增 商品的新增)

乐优商城第九天 第十天 (商品规格参数模版的新增 商品的新增)

时间:2023-03-16 20:51:55

相关推荐

乐优商城第九天 第十天 (商品规格参数模版的新增 商品的新增)

乐优商城第9,10两天,商品的新增,是整个后台系统最难的地方,尤其是前端页面,这里把中心放在后端代码和业务逻辑上

spu是一种商品的总称,比如小米8

sku是细分领域,比如xiaomi8星空黑64G

商品的新增涉及4张表,spu,spudetail,sku,store

其实就是两张表spu和sku,但是spudetail数据量太为庞大,而且不常用,我们采取了垂直拆分的方式,而sku的库存,因为要经常读写,所以我们这里单独拆出了一张表stoke,为了读写分离。

我们这里有个很重要的数据库思想

我们想一下,商品的规格参数信息数不胜数,我们如何操作,才能够让规格参数更好操作呢,我们来事想到了,每一个分类对应一个模版,因为同一个细分领域的事物,他一般就有相同的属性,所以,我们这里以分类id为id,建立一个模版,一个分类具有一个json格式的模版,这样商品的规格模版问题就完美解决了。

那么,参数模版的问题就被顺利地解决了

我们可以开始商品的新增了

首先,点击页面的新增按钮,会弹出对话框,

此时,我们需要去数据库中查询商品的分类信息,当我们选择完毕之后,我们会根据选择的cid,去查询他对应的品牌的信息

然后品牌就可以填写了。 接下来就是一些简单信息的填写,spu和spudetail的信息就填写完成。

接下来,是sku页面的显示,第一个页面是全局属性,是根据模版中的global来显示的

接下来,就是sku的特殊属性,特殊属性会根据笛卡尔积枢纽工程若干个,我们可以根据需求选择

最后,提交的时候,因为数据量过大,我们以json的格式进行提交

格式如下:

{

"categories": [

{

"name": "手机",

"id": 74

},

{

"name": "手机通讯",

"id": 75

},

{

"name": "手机",

"id": 76

}

],

"brandId": 1528,

"title": "1111",

"subTitle": "1",

"spuDetail": {

"packingList": "1",

"afterService": "1",

"description": "<p>11111</p>",

"specTemplate": "{\"机身颜色\":[\"111111\"],\"内存\":[\"1GB及以下\"],\"机身存储\":[\"8GB及以下\"]}",

"specifications": "[{\"group\":\"主体\",\"params\":[{\"k\":\"品牌\",\"searchable\":false,\"global\":true,\"v\":\"1\"},{\"k\":\"型号\",\"searchable\":false,\"global\":true,\"v\":\"1\"},{\"k\":\"上市年份\",\"searchable\":false,\"global\":true,\"numerical\":true,\"unit\":\"年\",\"v\":\"1\"}]},{\"group\":\"基本信息\",\"params\":[{\"k\":\"机身颜色\",\"searchable\":false,\"global\":false},{\"k\":\"机身重量(g)\",\"searchable\":false,\"global\":true,\"numerical\":true,\"unit\":\"g\",\"v\":\"1\"},{\"k\":\"机身材质工艺\",\"searchable\":false,\"global\":true,\"v\":\"1\"}]},{\"group\":\"操作系统\",\"params\":[{\"k\":\"操作系统\",\"searchable\":true,\"global\":true,\"v\":\"IOS\"}]},{\"group\":\"主芯片\",\"params\":[{\"k\":\"CPU品牌\",\"searchable\":true,\"global\":true,\"v\":\"骁龙(Snapdragon)\"},{\"k\":\"CPU型号\",\"searchable\":false,\"global\":true,\"v\":\"1\"},{\"k\":\"CPU核数\",\"searchable\":true,\"global\":true,\"v\":\"二核\"},{\"k\":\"CPU频率\",\"searchable\":true,\"global\":true,\"numerical\":true,\"unit\":\"GHz\",\"v\":\"1\"}]},{\"group\":\"存储\",\"params\":[{\"k\":\"内存\",\"searchable\":true,\"global\":false,\"numerical\":false,\"unit\":\"\"},{\"k\":\"机身存储\",\"searchable\":true,\"global\":false,\"numerical\":false,\"unit\":\"\"}]},{\"group\":\"屏幕\",\"params\":[{\"k\":\"主屏幕尺寸(英寸)\",\"searchable\":true,\"global\":true,\"numerical\":true,\"unit\":\"英寸\",\"v\":\"1\"},{\"k\":\"分辨率\",\"searchable\":false,\"global\":true,\"v\":\"1\"}]},{\"group\":\"摄像头\",\"params\":[{\"k\":\"前置摄像头\",\"searchable\":true,\"global\":true,\"numerical\":true,\"unit\":\"万\",\"v\":\"1\"},{\"k\":\"后置摄像头\",\"searchable\":true,\"global\":true,\"numerical\":true,\"unit\":\"万\",\"v\":\"1\"}]},{\"group\":\"电池信息\",\"params\":[{\"k\":\"电池容量(mAh)\",\"searchable\":true,\"global\":true,\"numerical\":true,\"unit\":\"mAh\",\"v\":\"1\"}]}]"

},

"cid1": 74,

"cid2": 75,

"cid3": 76,

"skus": [

{

"id": null,

"enable": true,

"title": "1111 8GB及以下 1GB及以下 111111",

"images": "",

"ownSpec": "{\"机身存储\":\"8GB及以下\",\"内存\":\"1GB及以下\",\"机身颜色\":\"111111\"}",

"indexes": "0_0_0",

"stock": null

}

]

}

这样,spu和sku的数据就齐全了,spu,spudetail,skus(一个sku的集合),这样就全了

下面,我们来到后端代码的书写

首先,我们是post方式提交,而且是json,我们用@ResquestBody来接收

@PostMappingpublicResponseEntity<Void> addGoods(@RequestBodyGoodsBogoods){this.goodsService.addGoods(goods);returnResponseEntity.status(HttpStatus.OK).body(null);}

goods是一个实体类,里面包含了我们要提交的所有数据

public classGoodsBoextendsSpu{privateSpuDetailspuDetail;privateList<Sku> skus;

继承自spu,新增spudetail,skus,这样就可以完美接收传过来的数据了,然后就是四个表的数据的新增

,数据的新增很简单,直接亮出代码

public voidaddGoods(GoodsBogoods) { //保存spuSpuspu =newSpu(); BeanUtils.copyProperties(goods, spu);longcurrentTimeMillis =System.currentTimeMillis();Datedate =newDate(currentTimeMillis); spu.setSaleable(true); spu.setValid(true); spu.setCreateTime(date); spu.setLastUpdateTime(date); spuMapper.insertSelective(spu); //保存spuDetailSpuDetailspuDetail = goods.getSpuDetail(); spuDetail.setSpuId(spu.getId()); spuDetailMapper.insertSelective(spuDetail); //保存sku和store List<Sku> skus = goods.getSkus();for(Skusku : skus) { sku.setSpuId(spu.getId()); sku.setEnable(true); sku.setCreateTime(date); sku.setLastUpdateTime(date); skuMapper.insertSelective(sku);Stockstock =newStock();Longstocks = sku.getStock(); stock.setStock(stocks); stock.setSkuId(sku.getId()); stockMapper.insertSelective(stock); }

当然了,这当中,我肯定也遇到了各种问题,其中最叼的一个坑是数据类型的不一致,前端传过来的库存字段stock是一个对象,而我后端接收的是一个基本数据类型,这样导致,我的addGoods方法根本进不来。。。。。。。。这个是最大方的坑,可能以后还会经常遇到吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。