SKU商品信息录入思路以及代码具体实现 - Springboot+AngularJS
SKU:
SKU=Stock Keeping Unit(库存量单位),即库存进出计量的单位,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。当下已经被我们引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
针对电商而言,SKU有另外的注解:
1、SKU是指一款商品,每款都有出现一个SKU,便于电商品牌识别商品。
2、一款商品多色,则是有多个SKU,例:一件衣服,有红色、白色、蓝色,则SKU编码也不相同,如相同则会出现混淆,发错货。
与SPU关系:
SPU = Standard Product Unit (标准化产品单元)
SPU 是商品信息聚合的最小单位。
例如:品牌苹果+型号:5s可以确定一个产品,即SPU
再加上颜色白色,尺码4.0,即表示一个SKU
SPU + 颜色 + 尺码,就是一个SKU,SKU是从属于SPU的关系
实现思路:
1、先定义一个初始化的不带规格名称的集合,只有一条记录
2、每选一个规格选项,则增加一行
3、如何实现增加一行?克隆
4、克隆分两种:浅克隆与深克隆(后端可以使用fastJSON)4.1、浅克隆:var a={}; var b=a; 当a发生改变时,b会跟着变化,b变化时a也会跟着变化,因为两个是同一引用地址4.2、深克隆:var a={'name':'helloworld'}; var b={'name':'helloworld'}; a与b的内容完全一样,但是两个对象。5、深克隆其实就是重新构建一个对象,将所有的值都复制到b,但逐个属性复制效率低,所以可以利用js中JSON类中的stringify()方法(将对象转成JSON字符串)
5.1、先利用stringify()方法,将对象转成JSON字符串,再使用parse()方法转回对象var b=JSON.parse(JSON.stringify(a));6、规格项后半部分较为固定,但前半部分是动态获取的,如何展示?
//6.1、构造一个集合,集合中的对象就代表每一个规格项,spec:{}代表的就是动态获取的部分,将其封装成对象(规格项作为key) var list=[{spec:{'网络':'4G','屏幕':'6.5寸'},'price':1024,'count':1024}]7、数据最终提交到item表中,item的标题由后端负责拼接:xxx手机+选中的规格项
代码实现:
1、前端创建SKU列表:
//创建SKU列表
$scope.createItemList=function(){//组合实体类中定义,构建初始值,列表初始化(需要深克隆,所以需要事先构建)$scope.entity.itemList=[{spec:{},price:0,num:99999,status:'0',isDefault:'0'}];//根据页面所选择的规格项来循环var items = $scope.entity.goodsDesc.specificationItems;for(var i=0;i
2、AngularJS的controller层定义私有方法:
//Controller私有方法
addColumn=function(list,columnName,columnValues){//获取原来的集合,返回生成后的集合var newList=[];//循环原列表,得到集合中的每一条记录for(var i=0;i
3、后台实现方法:
/*** 增加*/@Overridepublic void add(Goods goods) {//商品状态为未审核goods.getGoods().setAuditStatus("0");//插入商品基本信息goodsMapper.insert(goods.getGoods()); //将商品基本表信息id给商品扩展表信息id goods.getGoodsDesc().setGoodsId(goods.getGoods().getId());//插入扩展表信息goodsDescMapper.insert(goods.getGoodsDesc());if("1".equals(goods.getGoods().getIsEnableSpec())) {//获取到前端封装好的列表数据for (TbItem item: goods.getItemList()) {//构建标题 SPU名称+规格选项值String title = goods.getGoods().getGoodsName();//SPU名称//前端传过来的spec,解析之后就是:{"内存":"16G","网络":"全网通"}Map map = JSON.parseObject(item.getSpec());for(String key:map.keySet()) {title += " "+map.get(key);}item.setTitle(title);setItemValues(item, goods);itemMapper.insert(item);}}else {//没有启用规格选项TbItem item = new TbItem();item.setTitle(goods.getGoods().getGoodsName());item.setPrice(goods.getGoods().getPrice());item.setNum(99999);item.setStatus("1");item.setIsDefault("1");//避免存入null数据item.setSpec("{}");setItemValues(item, goods);itemMapper.insert(item);}}private void setItemValues(TbItem item, Goods goods) {//商品分类item.setCategoryid(goods.getGoods().getCategory3Id());//创建日期、更新日期item.setCreateTime(new Date());item.setUpdateTime(new Date());//商品iditem.setGoodsId(goods.getGoods().getId());//商家iditem.setSellerId(goods.getGoods().getSellerId());//分类名称TbItemCat itemCat = itemCatMapper.selectByPrimaryKey(goods.getGoods().getCategory3Id());item.setCategory(itemCat.getName());//品牌名称TbBrand brand = brandMapper.selectByPrimaryKey(goods.getGoods().getBrandId());item.setBrand(brand.getName());//商家名称(店铺名称)TbSeller seller = sellerMapper.selectByPrimaryKey(goods.getGoods().getSellerId());item.setSeller(seller.getNickName());//图片List
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
