@Service
public class CartServiceImpl implements CartService {
private static final String CART="Cart_";
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private SkuFeign skuFeign;
@Autowired
private SpuFeign spuFeign;
/**
* 添加购物车
* @param skuId
* @param num
*/
@Override
public void add(String skuId, Integer num,String username) {
/**
* 1)查询redis中的数据
* 2) If redis already has, the number of additional, recalculated amount
* 3) If not, add the product to the buffer
* /
the OrderItem orderItem = (the OrderItem) redisTemplate.boundHashOps (the CART username +) .get (skuId); // values from the redis
IF (orderItem =! null ) {
// , renew cart
orderItem.setNum (orderItem.getNum () + NUM);
orderItem.setMoney (orderItem.getNum () * orderItem.getPrice () );
orderItem.setPayMoney (orderItem.getNum () * orderItem.getPrice ());
} the else {
// does not exist, the new cart
Result <Sku> skuResult =skuFeign.findById (skuId);
Sku SKU = skuResult.getData ();
Spu SPU = spuFeign.findByspuId (sku.getSpuId ());
// converting SKU into the OrderItem
orderItem = the this .sku2OrderItem (SKU, SPU, NUM);
}
// stored redis
redisTemplate.boundHashOps (the CART + username) .put (skuId, orderItem); // redis to the stored-value
}
// convert to sku orderItem
Private the orderItem sku2OrderItem (Sku sku, Spu SPU, Integer NUM) {
the orderItem orderItem = new new the orderItem ();
orderItem.setSpuId (sku.getSpuId ());
orderItem.setSkuId (sku.getId ());
orderItem.setName (sku.getName ());
orderItem.setPrice (sku.getPrice ());
orderItem.setNum (NUM);
orderItem.setMoney (NUM * orderItem.getPrice ( )); // Price * quantity
orderItem.setPayMoney (NUM * orderItem.getPrice ()); // amount actually paid
orderItem.setImage (sku.getImage ());
orderItem.setWeight (sku.getWeight () * NUM); // weight = number of individual weight *
// classification ID setting
orderItem.setCategoryId1 (spu.getCategory1Id ());
orderItem.setCategoryId2 (spu.getCategory2Id ());
orderItem.setCategoryId3 (spu.getCategory3Id ());
return orderItem;
}
}
redisTemplate.boundHashOps (the CART + username) .put (skuId, orderItem); // save the value to redis
redisTemplate.boundHashOps (CART + username) .get ( skuId); // the value from redis
noted here boundHashOps redis to this method, when the value stored in the hash type, the key may correspond to a plurality of a plurality of Field, a field corresponding to a value. An object hash stored as one type of benefits: in each field are compared to a string type is stored separately, more save memory.