|
@@ -1,12 +1,106 @@
|
|
|
package edu.travel.commodity.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import edu.travel.commodity.constant.BaseConstant;
|
|
|
+import edu.travel.commodity.dto.AddShopCartDto;
|
|
|
+import edu.travel.commodity.dto.BaseDto;
|
|
|
+import edu.travel.commodity.entity.ShopProduct;
|
|
|
+import edu.travel.commodity.entity.ShopProductSku;
|
|
|
import edu.travel.commodity.entity.ShopShoppingCart;
|
|
|
import edu.travel.commodity.mapper.ShopShoppingCartMapper;
|
|
|
+import edu.travel.commodity.service.ShopProductService;
|
|
|
+import edu.travel.commodity.service.ShopProductSkuService;
|
|
|
import edu.travel.commodity.service.ShopShoppingCartService;
|
|
|
+import edu.travel.commodity.utils.PageUtil;
|
|
|
+import edu.travel.commodity.utils.TokenData;
|
|
|
+import edu.travel.commodity.vo.ShopCartListVo;
|
|
|
+import edu.travel.commodity.vo.SpecValueVo;
|
|
|
+import edu.travel.exception.BaseException;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
@Service
|
|
|
public class ShopShoppingCartServiceImpl extends ServiceImpl<ShopShoppingCartMapper, ShopShoppingCart> implements ShopShoppingCartService {
|
|
|
+ @Autowired
|
|
|
+ private ShopProductSkuService shopProductSkuService;
|
|
|
+ @Autowired
|
|
|
+ private ShopProductService shopProductService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean addShopCart(AddShopCartDto params) {
|
|
|
+ // 获取用户id
|
|
|
+ String userId = TokenData.getUserId();
|
|
|
+ ShopProduct byId = shopProductService.getById(params.getProductId());
|
|
|
+ LambdaQueryWrapper<ShopProductSku> query = Wrappers.<ShopProductSku>lambdaQuery().eq(ShopProductSku::getProductId, params.getProductId())
|
|
|
+ .eq(ShopProductSku::getSkuId, params.getSkuId());
|
|
|
+ ShopProductSku one = shopProductSkuService.getOne(query);
|
|
|
+ if(byId==null||byId.getStatus().equals(BaseConstant.BASIC_STATUS_YES_NUM)||one==null){
|
|
|
+ throw new BaseException("商品已经下架");
|
|
|
+ }
|
|
|
+
|
|
|
+ ShopShoppingCart shopShoppingCart = new ShopShoppingCart();
|
|
|
+ shopShoppingCart.setProductSkuId(one.getId());
|
|
|
+ shopShoppingCart.setUserId(Long.valueOf(userId));
|
|
|
+ shopShoppingCart.setQuantity(params.getQuantity());
|
|
|
+ return save(shopShoppingCart);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<ShopCartListVo> getShopCartList(BaseDto params) {
|
|
|
+ String userId = TokenData.getUserId();
|
|
|
+ LambdaQueryWrapper<ShopShoppingCart> query = Wrappers.<ShopShoppingCart>lambdaQuery()
|
|
|
+ .eq(ShopShoppingCart::getUserId, userId).orderByDesc(ShopShoppingCart::getCreateTime);
|
|
|
+
|
|
|
+ Page<ShopShoppingCart> page = this.page(new Page<ShopShoppingCart>(params.getCurrentPage(), params.getPageSize()), query);
|
|
|
+ //转换为结果集
|
|
|
+ Page<ShopCartListVo> pageEntity = PageUtil.toPageEntity(page, ShopCartListVo.class);
|
|
|
+ List<ShopCartListVo> records = pageEntity.getRecords();
|
|
|
+ if(ObjectUtil.isEmpty(records)){
|
|
|
+ return pageEntity;
|
|
|
+ }
|
|
|
+ // 商品ID
|
|
|
+ Set<String> collect = records.stream().map(ShopCartListVo::getProductId).collect(Collectors.toSet());
|
|
|
+ List<ShopProduct> shopProducts = shopProductService.listByIds(collect);
|
|
|
+ HashMap<String, ShopProduct> map = new HashMap<>();
|
|
|
+ for (ShopProduct shopProduct : shopProducts) {
|
|
|
+ map.put(shopProduct.getId().toString(), shopProduct);
|
|
|
+ }
|
|
|
+ //商品和sku关联表的id
|
|
|
+ Set<String> productToSkus = records.stream().map(ShopCartListVo::getProductSkuId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ List<ShopProductSku> shopProductSkus = shopProductSkuService.listByIds(productToSkus);
|
|
|
+ HashMap<String, ShopProductSku> productSkuMap = new HashMap<>();
|
|
|
+ for (ShopProductSku shopProduct : shopProductSkus) {
|
|
|
+ productSkuMap.put(shopProduct.getId().toString(), shopProduct);
|
|
|
+ }
|
|
|
+ Set<String> collect1 = records.stream().map(ShopCartListVo::getProductSkuId).collect(Collectors.toSet());
|
|
|
+ Map<String, List<SpecValueVo>> shopProductSkuId = shopProductSkuService.getShopProductSkuId(collect1);
|
|
|
+
|
|
|
+ //封装结果集
|
|
|
+ for (ShopCartListVo record : records) {
|
|
|
+ ShopProduct shopProduct = map.get(record.getProductId());
|
|
|
+ if(!ObjectUtil.isNotEmpty(shopProduct)){
|
|
|
+ record.setProductName(shopProduct.getProductName());
|
|
|
+ record.setDescription(shopProduct.getDescription());
|
|
|
+ ShopProductSku shopProductSku = productSkuMap.get(record.getProductSkuId());
|
|
|
+ if(!ObjectUtil.isNotEmpty(shopProductSku)){
|
|
|
+ record.setSkuImage(shopProductSku.getImageUrl());
|
|
|
+ record.setSalesVolume(shopProductSku.getSalesVolume());
|
|
|
+ record.setPrice(shopProductSku.getPrice());
|
|
|
+ }
|
|
|
+ String productSkuId = record.getProductSkuId();
|
|
|
+ record.setSpecValue(shopProductSkuId.get(productSkuId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pageEntity;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|