@Service
общественного класса CartServiceImpl реализует CartService {
частной статическая окончательная Струнной КОРЗИНА = «Cart_» ;
@Autowired
личное RedisTemplate redisTemplate;
@Autowired
частный SkuFeign skuFeign;
@Autowired
частный SpuFeign spuFeign;
/ **
*添加购物车
* @param skuId
* @param Num
* /
@Override
общественности недействительными добавить (String skuId, Integer Num, String имя пользователя) {
/ **
* 1)查询Redis中的数据
* 2) Если Redis уже есть, количество дополнительного, пересчитанной суммы
* 3) Если нет, то добавить продукт в буфер
* /
OrderItem OrderItem = (The OrderItem) redisTemplate.boundHashOps (ВОЗ имя пользователя +) .get (skuId); // значения из Redis
IF (OrderItem! = NULL ) {
// , обновляют телеги
orderItem.setNum (orderItem.getNum () + NUM);
orderItem.setMoney (orderItem.getNum () * orderItem.getPrice () );
orderItem.setPayMoney (orderItem.getNum () * orderItem.getPrice ());
} еще {
// не существует, новая корзина
Результат <Sku> skuResult =skuFeign.findById (skuId);
Sku ы = skuResult.getData ();
СПУ СПУ = spuFeign.findByspuId (sku.getSpuId ());
// преобразование SKU в OrderItem
OrderItem = на эту .sku2OrderItem (ы, СПУ, NUM);
}
// сохраненные Redis
redisTemplate.boundHashOps (ВОЗ + имя пользователя) .Put (skuId, OrderItem); // Redis к хранимой стоимости
}
// преобразовать в СКУ OrderItem
Private OrderItem sku2OrderItem (Sku SKU, SPU SPU, Integer NUM) {
в OrderItem OrderItem = новый новый 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 ( )); // цена * количество
orderItem.setPayMoney (NUM * orderItem.getPrice ()); // количество фактически уплаченной
orderItem.setImage (sku.getImage ());
orderItem.setWeight (sku.getWeight () * NUM); // вес = количество индивидуального веса *
// установка классификации ID
orderItem.setCategoryId1 (spu.getCategory1Id ());
orderItem.setCategoryId2 (spu.getCategory2Id ());
orderItem.setCategoryId3 (spu.getCategory3Id ());
вернуться OrderItem;
}
}
redisTemplate.boundHashOps (телега + имя пользователя) .Put (skuId, OrderItem); // сохранить значение в Redis
redisTemplate.boundHashOps (CART + имя пользователя) .get ( skuId); // значение из Redis
отметить boundHashOps Redis к этому способу, когда значение , сохраненное в типе хэш, ключ может соответствовать множеству множества поля, поле , соответствующее значению. Объект хэш хранится в виде одного типа преимуществ: в каждой области сравниваются с типом строка хранится отдельно, более экономии памяти.