package com.iotechn.unimall.app.api.cart; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dobbinsoft.fw.core.exception.AppServiceException; import com.dobbinsoft.fw.core.exception.ServiceException; import com.iotechn.unimall.biz.service.category.CategoryBizService; import com.iotechn.unimall.data.domain.CartDO; import com.iotechn.unimall.data.dto.CartDTO; import com.iotechn.unimall.data.exception.ExceptionDefinition; import com.iotechn.unimall.data.mapper.CartMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by rize on 2019/7/3. */ @Service public class CartServiceImpl implements CartService { @Autowired private CartMapper cartMapper; @Autowired private CategoryBizService categoryBizService; @Override @Transactional(rollbackFor = Exception.class) public Boolean addCartItem(Long skuId, Integer num, Long userId) throws ServiceException { CartDO cartFromDB = cartMapper.selectOne( new QueryWrapper() .eq("sku_id", skuId) .eq("user_id", userId)); CartDO cartDO = new CartDO(); Date now = new Date(); if (cartFromDB != null) { //若非空 cartDO.setId(cartFromDB.getId()); cartDO.setNum(cartFromDB.getNum() + num); cartDO.setGmtUpdate(now); return cartMapper.updateById(cartDO) > 0; } else { //不存在,则添加购物车 cartDO.setSkuId(skuId); cartDO.setNum(num); cartDO.setUserId(userId); cartDO.setGmtUpdate(now); cartDO.setGmtCreate(now); return cartMapper.insert(cartDO) > 0; } } @Override @Transactional(rollbackFor = Exception.class) public Boolean subCartItem(Long skuId, Integer num, Long userId) throws ServiceException { CartDO cartFromDB = cartMapper.selectOne( new QueryWrapper() .eq("sku_id", skuId) .eq("user_id", userId)); CartDO cartDO = new CartDO(); if (cartDO != null) { cartDO.setId(cartFromDB.getId()); cartDO.setNum(cartFromDB.getNum() - num); if (cartDO.getNum() <= 0) { //直接删除此商品 return cartMapper.deleteById(cartDO.getId()) > 0; } else { return cartMapper.updateById(cartDO) > 0; } } return false; } @Override @Transactional(rollbackFor = Exception.class) public Boolean removeCartItem(Long cartId, Long userId) throws ServiceException { return cartMapper.delete( new QueryWrapper() .eq("id", cartId) .eq("user_id", userId)) > 0; } @Override @Transactional(rollbackFor = Exception.class) public Boolean removeCartItemBatch(String cartIdList, Long userId) throws ServiceException { if (StringUtils.isEmpty(cartIdList)) { throw new AppServiceException(ExceptionDefinition.PARAM_CHECK_FAILED); } String[] split = cartIdList.split(","); if (split.length == 0) { throw new AppServiceException(ExceptionDefinition.PARAM_CHECK_FAILED); } List array = new ArrayList<>(split.length); for (String idRaw : split) { array.add(Long.parseLong(idRaw)); } return cartMapper.delete( new QueryWrapper() .in("id", array) .eq("user_id", userId)) > 0; } @Override @Transactional public Boolean removeCartAll(Long userId) throws ServiceException { return cartMapper.delete( new QueryWrapper() .eq("user_id", userId)) > 0; } @Override public Integer updateCartItemNum(Long cartId, Integer num, Long userId) throws ServiceException { CartDO cartDO = new CartDO(); cartDO.setNum(num); Integer update = cartMapper.update(cartDO, new QueryWrapper() .eq("id", cartId) .eq("user_id", userId)); if (update > 0) { return num; } throw new AppServiceException(ExceptionDefinition.CART_UPDATE_FAILED); } @Override public Integer countCart(Long userId) throws ServiceException { return cartMapper.countCart(userId); } @Override public List getCartList(Long userId) throws ServiceException { List cartList = cartMapper.getCartList(userId); for (CartDTO cartDTO : cartList) { List categoryFamily = categoryBizService.getCategoryFamily(cartDTO.getCategoryId()); cartDTO.setCategoryIdList(categoryFamily); } return cartList; } }