package cn.iocoder.yudao.module.trade.convert.cart; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; import cn.iocoder.yudao.module.trade.controller.app.base.sku.AppProductSkuBaseRespVO; import cn.iocoder.yudao.module.trade.controller.app.base.spu.AppProductSpuBaseRespVO; import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppCartListRespVO; import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.ArrayList; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @Mapper public interface TradeCartConvert { TradeCartConvert INSTANCE = Mappers.getMapper(TradeCartConvert.class); default AppCartListRespVO convertList(List carts, List spus, List skus) { Map spuMap = convertMap(spus, ProductSpuRespDTO::getId); Map skuMap = convertMap(skus, ProductSkuRespDTO::getId); // 遍历,开始转换 List validList = new ArrayList<>(carts.size()); List invalidList = new ArrayList<>(); carts.forEach(cart -> { AppCartListRespVO.Cart cartVO = new AppCartListRespVO.Cart(); cartVO.setId(cart.getId()).setCount(cart.getCount()).setSelected(cart.getSelected()); ProductSpuRespDTO spu = spuMap.get(cart.getSpuId()); ProductSkuRespDTO sku = skuMap.get(cart.getSkuId()); cartVO.setSpu(BeanUtils.toBean(spu, AppProductSpuBaseRespVO.class)) .setSku(BeanUtils.toBean(sku, AppProductSkuBaseRespVO.class)); // 如果 SPU 不存在,或者下架,或者库存不足,说明是无效的 if (spu == null || !ProductSpuStatusEnum.isEnable(spu.getStatus()) || spu.getStock() <= 0) { invalidList.add(cartVO); } else { validList.add(cartVO); } }); return new AppCartListRespVO().setValidList(validList).setInvalidList(invalidList); } }