125 lines
4.5 KiB
Java
125 lines
4.5 KiB
Java
package com.gxwebsoft.shop.service.impl;
|
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
import com.gxwebsoft.shop.entity.Goods;
|
|
import com.gxwebsoft.shop.entity.GoodsSpec;
|
|
import com.gxwebsoft.shop.mapper.CartMapper;
|
|
import com.gxwebsoft.shop.service.CartService;
|
|
import com.gxwebsoft.shop.entity.Cart;
|
|
import com.gxwebsoft.shop.param.CartParam;
|
|
import com.gxwebsoft.common.core.web.PageParam;
|
|
import com.gxwebsoft.common.core.web.PageResult;
|
|
import com.gxwebsoft.shop.vo.CartShopVo;
|
|
import com.gxwebsoft.shop.vo.CartVo;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 购物车Service实现
|
|
*
|
|
* @author 科技小王子
|
|
* @since 2024-07-29 21:02:39
|
|
*/
|
|
@Service
|
|
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart> implements CartService {
|
|
|
|
@Override
|
|
public PageResult<Cart> pageRel(CartParam param) {
|
|
PageParam<Cart, CartParam> page = new PageParam<>(param);
|
|
page.setDefaultOrder("create_time desc");
|
|
List<Cart> list = baseMapper.selectPageRel(page, param);
|
|
return new PageResult<>(list, page.getTotal());
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = {Exception.class})
|
|
public CartVo listRel(CartParam param) {
|
|
List<Cart> list = baseMapper.selectListRel(param);
|
|
// 排序
|
|
PageParam<Cart, CartParam> page = new PageParam<>();
|
|
page.setDefaultOrder("create_time desc");
|
|
final List<Cart> carts = page.sortRecords(list);
|
|
System.out.println("carts = " + carts.size());
|
|
// 整理数据
|
|
final CartVo vo = new CartVo();
|
|
// 计算单品总价
|
|
for (Cart cart : carts) {
|
|
cart.setTotalPrice(cart.getPrice().multiply(BigDecimal.valueOf(cart.getCartNum())));
|
|
}
|
|
// 计算购物车金额
|
|
final Integer cartNum = carts.stream().map(Cart::getCartNum).reduce(Integer::sum).orElse(0);
|
|
final Integer selectNums = carts.stream().filter(d -> d.getSelected().equals(true)).map(Cart::getCartNum).reduce(Integer::sum).orElse(0);
|
|
final BigDecimal totalPrice = carts.stream().filter(d -> d.getSelected().equals(true)).map(Cart::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
// 按店铺ID分组
|
|
final Map<Integer, List<Cart>> collectCart = carts.stream().collect(Collectors.groupingBy(Cart::getMerchantId));
|
|
final ArrayList<CartShopVo> shops = new ArrayList<>();
|
|
if (MapUtil.isNotEmpty(collectCart)) {
|
|
for (Integer shopId : collectCart.keySet()) {
|
|
final CartShopVo shopVo = new CartShopVo();
|
|
shopVo.setShopId(shopId);
|
|
shopVo.setCarts(collectCart.get(shopId));
|
|
if (ObjectUtil.isNotEmpty(collectCart.get(shopId).get(0))) {
|
|
final Cart cart = collectCart.get(shopId).get(0);
|
|
shopVo.setShopName(cart.getMerchantName());
|
|
shopVo.setShopLogo(cart.getImage());
|
|
shopVo.setAddress(cart.getAddress());
|
|
}
|
|
shops.add(shopVo);
|
|
}
|
|
}
|
|
|
|
vo.setShops(shops);
|
|
vo.setTotalPrice(totalPrice);
|
|
vo.setTotalNums(Long.valueOf(cartNum));
|
|
vo.setSelectNums(Long.valueOf(selectNums));
|
|
// updateBatchById(carts);
|
|
|
|
return vo;
|
|
}
|
|
|
|
@Override
|
|
public Cart getByIdRel(Integer id) {
|
|
CartParam param = new CartParam();
|
|
param.setId(id);
|
|
return param.getOne(baseMapper.selectListRel(param));
|
|
}
|
|
|
|
@Override
|
|
public List<Cart> listRelMpj(CartParam param) {
|
|
|
|
// 多表查询
|
|
MPJLambdaWrapper<Cart> mpjLambdaWrapper = new MPJLambdaWrapper<>();
|
|
mpjLambdaWrapper.selectAll(Cart.class)
|
|
.select(Goods::getGoodsName)
|
|
.select(Goods::getImage)
|
|
.leftJoin(Goods.class,Goods::getGoodsId,Cart::getGoodsId).eq(Cart::getUserId,param.getUserId());
|
|
|
|
// 查询选中状态
|
|
if(param.getSelected() != null){
|
|
mpjLambdaWrapper.eq(Cart::getSelected, param.getSelected());
|
|
}
|
|
// 商品类型 0商城 1预定
|
|
if(param.getType() != null){
|
|
mpjLambdaWrapper.eq(Cart::getType,param.getType());
|
|
}
|
|
// 是否为立即购买
|
|
if(param.getIsNew() != null){
|
|
mpjLambdaWrapper.eq(Cart::getIsNew,param.getIsNew());
|
|
}
|
|
// 指定cartId
|
|
if(param.getId() != null){
|
|
mpjLambdaWrapper.eq(Cart::getId,param.getId());
|
|
}
|
|
System.out.println("mpjLambdaWrapper = " + mpjLambdaWrapper);
|
|
return baseMapper.selectJoinList(Cart.class, mpjLambdaWrapper);
|
|
}
|
|
|
|
}
|