package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.GoodsMapper; import com.doumee.dao.business.GoodsSkuMapper; import com.doumee.dao.business.GoodsorderDetailMapper; import com.doumee.dao.business.ShopcartMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.web.request.goods.AddCartGoodsRequest; import com.doumee.dao.web.request.goods.UpdCartGoodsRequest; import com.doumee.dao.web.response.goods.CartGoodsResponse; import com.doumee.service.business.ShopcartService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * 购物车信息表Service实现 * @author 江蹄蹄 * @date 2023/03/21 15:48 */ @Service public class ShopcartServiceImpl implements ShopcartService { @Autowired private ShopcartMapper shopcartMapper; @Autowired private GoodsMapper goodsMapper; @Autowired private GoodsSkuMapper goodsSkuMapper; @Autowired private GoodsorderDetailMapper goodsorderDetailMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override public Integer create(Shopcart shopcart) { shopcartMapper.insert(shopcart); return shopcart.getId(); } @Override public void deleteById(Integer id) { shopcartMapper.deleteById(id); } @Override public void delete(Shopcart shopcart) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(shopcart); shopcartMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } shopcartMapper.deleteBatchIds(ids); } @Override public void updateById(Shopcart shopcart) { shopcartMapper.updateById(shopcart); } @Override public void updateByIdInBatch(List shopcarts) { if (CollectionUtils.isEmpty(shopcarts)) { return; } for (Shopcart shopcart: shopcarts) { this.updateById(shopcart); } } @Override public Shopcart findById(Integer id) { return shopcartMapper.selectById(id); } @Override public Shopcart findOne(Shopcart shopcart) { QueryWrapper wrapper = new QueryWrapper<>(shopcart); return shopcartMapper.selectOne(wrapper); } @Override public List findList(Shopcart shopcart) { QueryWrapper wrapper = new QueryWrapper<>(shopcart); return shopcartMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Shopcart::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(Shopcart::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(Shopcart::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(Shopcart::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(Shopcart::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(Shopcart::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(Shopcart::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(Shopcart::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Shopcart::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getMemberId() != null) { queryWrapper.lambda().eq(Shopcart::getMemberId, pageWrap.getModel().getMemberId()); } if (pageWrap.getModel().getProductId() != null) { queryWrapper.lambda().eq(Shopcart::getProductId, pageWrap.getModel().getProductId()); } if (pageWrap.getModel().getNum() != null) { queryWrapper.lambda().eq(Shopcart::getNum, pageWrap.getModel().getNum()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(shopcartMapper.selectPage(page, queryWrapper)); } @Override public long count(Shopcart shopcart) { QueryWrapper wrapper = new QueryWrapper<>(shopcart); return shopcartMapper.selectCount(wrapper); } /****************************************移动端接口开始********************************************************************/ /** * 购物车商品列表接口 * @param pageWrap * @return */ @Override public IPage cartGoodsPage(PageWrap pageWrap, Integer memberId) { IPage page = shopcartMapper.cartGoodsPage(pageWrap.toPage(),memberId); String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode(); page.getRecords().forEach(i->{ i.setImgUrl(fullUrl + i.getImgUrl()); }); return page; } /** * 购物车商品数量 * @param memberId * @return */ @Override public Integer cartGoodsTypeNum(Integer memberId) { return shopcartMapper.selectList(new QueryWrapper().lambda() .eq(Shopcart::getMemberId,memberId) .eq(Shopcart::getIsdeleted,Constants.ZERO) ).size(); } /** * 更新购物车数量 * @param updCartGoodsRequest */ @Override @Transactional(rollbackFor = Exception.class) public void updateUnm(UpdCartGoodsRequest updCartGoodsRequest){ Shopcart shopcart = shopcartMapper.selectById(updCartGoodsRequest.getId()); if(Objects.isNull(shopcart)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到购物车信息"); } if(!shopcart.getMemberId().equals(updCartGoodsRequest.getMemberId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"登录人与购物车归属人不一致,无法修改"); }; if(updCartGoodsRequest.getNum().equals(Constants.ZERO)){ shopcartMapper.deleteById(updCartGoodsRequest.getId()); }else{ shopcart.setNum(updCartGoodsRequest.getNum()); shopcart.setEditDate(new Date()); shopcart.setEditor(updCartGoodsRequest.getMemberId()); shopcartMapper.updateById(shopcart); } } /** * 新增购物车商品信息 * @param addCartGoodsRequest */ @Override @Transactional(rollbackFor = Exception.class) public void addCart(AddCartGoodsRequest addCartGoodsRequest){ //查询购物车是否存在当前选中的商品信息 Shopcart shopcart = shopcartMapper.selectOne(new QueryWrapper() .eq("MEMBER_ID",addCartGoodsRequest.getMemberId()) .eq("GOODS_SKU_ID",addCartGoodsRequest.getGoodsSkuId()) ); // Goods goods = goodsMapper.selectById(addCartGoodsRequest.getGoodsId()); // if(Objects.isNull(goods)){ // throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到商品信息"); // } // if(!goods.getType().equals(Constants.ZERO)){ // throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"非商城商品无法加入购物车"); // } GoodsSku goodsSku = goodsSkuMapper.selectById(addCartGoodsRequest.getGoodsSkuId()); if(Objects.isNull(goodsSku)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到商品SKU信息"); } if(!Objects.isNull(shopcart)){ shopcart.setNum(shopcart.getNum() + addCartGoodsRequest.getNum()); shopcart.setEditDate(new Date()); shopcart.setEditor(addCartGoodsRequest.getMemberId()); shopcartMapper.updateById(shopcart); }else{ Shopcart newShopCart = new Shopcart(); newShopCart.setNum(addCartGoodsRequest.getNum()); newShopCart.setProductId(addCartGoodsRequest.getGoodsId()); newShopCart.setCreator(addCartGoodsRequest.getMemberId()); newShopCart.setCreateDate(new Date()); newShopCart.setGoodsSkuId(addCartGoodsRequest.getGoodsSkuId()); newShopCart.setIsdeleted(Constants.ZERO); newShopCart.setMemberId(addCartGoodsRequest.getMemberId()); shopcartMapper.insert(newShopCart); } } /** * 订单加入购物车 * @param orderId * @param memberId */ @Override @Transactional(rollbackFor = Exception.class) public void orderToCart(Integer orderId,Integer memberId){ List goodsOrderDetailList = goodsorderDetailMapper.selectList(new QueryWrapper() .eq("ORDER_ID",orderId)); if(!Objects.isNull(goodsOrderDetailList)&&goodsOrderDetailList.size()>Constants.ZERO){ for (GoodsorderDetail goodsOrderDetail:goodsOrderDetailList ) { //查询sku是否还存在 GoodsSku goodsSku = goodsSkuMapper.selectById(goodsOrderDetail.getGoodsSkuId()); if(!Objects.isNull(goodsSku) &&goodsSku.getStatus().equals(Constants.ZERO) &&goodsSku.getIsdeleted().equals(Constants.ZERO)){ //查询购物车是否存在该商品SKU信息 Shopcart shopcart = shopcartMapper.selectOne(new QueryWrapper().eq("MEMBER_ID",memberId) .eq("GOODS_SKU_ID",goodsSku.getId())); if(Objects.isNull(shopcart)){ shopcart = new Shopcart(); shopcart.setNum(goodsOrderDetail.getGoodsNum()); shopcart.setProductId(goodsOrderDetail.getGoodsNum()); shopcart.setCreator(memberId); shopcart.setCreateDate(new Date()); shopcart.setGoodsSkuId(goodsSku.getId()); shopcart.setIsdeleted(Constants.ZERO); shopcart.setMemberId(memberId); shopcartMapper.insert(shopcart); }else{ shopcart.setNum(shopcart.getNum() + goodsOrderDetail.getGoodsNum()); shopcart.setEditor(memberId); shopcart.setEditDate(new Date()); shopcartMapper.updateById(shopcart); } } } } } }