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<items.length;i++){
		$scope.entity.itemList = addColumn($scope.entity.itemList,items[i].attributeName,items[i].attributeValue); 		
	}
	
}

2、AngularJS的controller层定义私有方法:

//Controller私有方法
addColumn=function(list,columnName,columnValues){
	//获取原来的集合,返回生成后的集合
	var newList=[];
	//循环原列表,得到集合中的每一条记录
	for(var i=0;i<list.length;i++){
		var oldRow = list[i];
		
		for(var j=0;j<columnValues.length;j++){
			var newRow = JSON.parse(JSON.stringify(oldRow));
			newRow.spec[columnName] = columnValues[j];
			newList.push(newRow);
		}
	}
	
	return newList;
}

3、后台实现方法:

        /**
	 * 增加
	 */
	@Override
	public 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<String, Object> 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());
		
		//商品id
		item.setGoodsId(goods.getGoods().getId());
		//商家id
		item.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<Map> list = JSON.parseArray(goods.getGoodsDesc().getItemImages(), Map.class);
		if(list.size() > 0) {
			item.setImage((String)list.get(0).get("url"));
		}
		
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phubing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值