package com.fdkankan.ucenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.ucenter.entity.Cart;
import com.fdkankan.ucenter.entity.Goods;
import com.fdkankan.ucenter.entity.User;
import com.fdkankan.ucenter.mapper.ICartMapper;
import com.fdkankan.ucenter.service.ICartService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.ucenter.service.IGoodsService;
import com.fdkankan.ucenter.service.IUserService;
import com.fdkankan.ucenter.vo.request.CartParam;
import com.fdkankan.ucenter.vo.response.CartVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 购物车 服务实现类
*
*
* @author
* @since 2022-07-13
*/
@Service
public class CartServiceImpl extends ServiceImpl implements ICartService {
@Autowired
IUserService userService;
@Autowired
IGoodsService goodsService;
@Override
public void add(CartParam param) {
User user = userService.getByUserName(param.getUserName());
param.setUserId(user.getId());
Cart cartEntity = this.common(param);
if (cartEntity == null){
cartEntity = new Cart();
cartEntity.setUserId(user.getId());
cartEntity.setGoodsId(param.getGoodsId());
cartEntity.setGoodsCount(param.getGoodsCount());
cartEntity.setPayStatus(0);
cartEntity.setSkuSn(param.getSkuSn());
save(cartEntity);
} else {
cartEntity.setGoodsCount(cartEntity.getGoodsCount() + param.getGoodsCount());
updateById(cartEntity);
}
}
@Override
public Cart getByUserIdAndGoodsId(Long userId, Long goodsId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Cart::getUserId,userId);
wrapper.eq(Cart::getGoodsId,goodsId);
List list = this.list(wrapper);
if(list != null && list.size() >0){
return list.get(0);
}
return null;
}
private Cart common(CartParam param){
if(param.getGoodsId() == null){
throw new BusinessException(-1,"商品为空");
}
return this.getByUserIdAndGoodsId(param.getUserId(),param.getGoodsId());
}
@Override
public void delete(CartParam param) {
User user = userService.getByUserName(param.getUserName());
param.setUserId(user.getId());
Cart cartEntity = common(param);
if(cartEntity == null){
return;
}
if(param.getGoodsCount() != 0){
cartEntity.setGoodsCount(param.getGoodsCount());
updateById(cartEntity);
}else {
this.removeById(cartEntity.getId());
}
}
@Override
public List listByUser(String username) {
User user = userService.getByUserName(username);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Cart::getUserId,user.getId());
List list = this.list(wrapper);
List goodsIds = list.parallelStream().map(Cart::getGoodsId).collect(Collectors.toList());
if(goodsIds.size()<=0){
return new ArrayList<>();
}
HashMap goodsHashMap = goodsService.getByIds(goodsIds);
List voList = new ArrayList<>();
for (Cart cart : list) {
Goods goods = goodsHashMap.get(cart.getGoodsId());
if(goods == null){
continue;
}
CartVo cartVo = new CartVo();
BeanUtils.copyProperties(cart,cartVo);
cartVo.setPrice(goods.getGoodsPrice());
voList.add(cartVo);
}
return voList;
}
@Override
public void deleteIds(List ids) {
this.removeByIds(ids);
}
}