package com.panzhihua.service_community.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.panzhihua.common.exceptions.ServiceException; import com.panzhihua.common.model.dtos.shop.ComShopFlowerGoodsDTO; import com.panzhihua.common.model.dtos.shop.PageComShopFlowerGoodsDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.convenient.ConvenientMerchantVO; import com.panzhihua.common.model.vos.shop.*; import com.panzhihua.common.utlis.DifferentLongListUtil; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.model.dos.*; import com.panzhihua.service_community.service.ComShopFlowerGoodsAttrService; import com.panzhihua.service_community.service.ComShopFlowerGoodsService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; /** * @ClassName: ComShopFlowerGoodsServiceImpl * @Author: yh * @Date: 2022/11/8 17:17 * @Description: 商品 */ @Service @Slf4j public class ComShopFlowerGoodsServiceImpl extends ServiceImpl implements ComShopFlowerGoodsService { @Resource private ComShopFlowerGoodsAttrService comShopFlowerGoodsAttrService; @Resource private ComShopFlowerGoodsAttrDAO shopFlowerGoodsAttrDAO; @Resource private ConvenientMerchantDAO convenientMerchantDAO; @Resource private ConvenientGoodsCategoryDAO convenientGoodsCategoryDAO; @Resource private ComShopFlowerOrderGoodsDAO comShopFlowerOrderGoodsDAO; @Resource private ComShopFlowerEvaluateDAO comShopFlowerEvaluateDAO; @Resource private ComShopFlowerGoodsViewStatisticsDAO comShopFlowerGoodsViewStatisticsDAO; @Override @Transactional(rollbackFor = Exception.class) public R saveShopFlowerGoods(AddShopFlowerGoodsVO addShopFlowerGoodsVO) { if (addShopFlowerGoodsVO == null) { return R.ok("500", "数据为空!"); } ComShopFlowerGoodsDO shopGoodsDO = new ComShopFlowerGoodsDO(); BeanUtils.copyProperties(addShopFlowerGoodsVO, shopGoodsDO); shopGoodsDO.setOriginalPrice(addShopFlowerGoodsVO.getPrice()); shopGoodsDO.setSale(0); int goodsId = this.baseMapper.insert(shopGoodsDO); if (goodsId > 0) { //保存规格 ArrayList goodsAttrDOS = Lists.newArrayList(); ComShopFlowerGoodsDO goodDO = this.baseMapper.selectById(shopGoodsDO.getId()); addShopFlowerGoodsVO.getGoodsAttrVOList().forEach(goodsAttr -> { // 维护商品规格表 if (goodDO == null) { throw new ServiceException("商品id不存在!"); } ComShopFlowerGoodsAttrDO shopGoodsAttrDO = new ComShopFlowerGoodsAttrDO(); shopGoodsAttrDO.setGoodsId(shopGoodsDO.getId()); shopGoodsAttrDO.setStoreId(goodDO.getStoreId()); shopGoodsAttrDO.setGoodsName(goodDO.getName()); shopGoodsAttrDO.setGoodsAttrName(goodsAttr.getGoodsAttrName()); shopGoodsAttrDO.setIsDefault(1); shopGoodsAttrDO.setPrice(goodsAttr.getPrice()); shopGoodsAttrDO.setCollatePrice(goodsAttr.getCollatePrice()); shopGoodsAttrDO.setFreeShippingPrice(goodsAttr.getFreeShippingPrice()); shopGoodsAttrDO.setAttrPic(goodsAttr.getAttrPic()); shopGoodsAttrDO.setStock(goodsAttr.getStock()); shopGoodsAttrDO.setSale(0); goodsAttrDOS.add(shopGoodsAttrDO); }); if (goodsAttrDOS.size() > 0) { comShopFlowerGoodsAttrService.saveBatch(goodsAttrDOS); } //保存商品分类 Long goodId = shopGoodsDO.getId(); if (nonNull(goodId)) { //添加分类 List categoryIds = addShopFlowerGoodsVO.getCategoryIds(); categoryIds.forEach(categoryId -> { ConvenientGoodsCategoryDO convenientGoodsCategoryDO = convenientGoodsCategoryDAO.selectById(categoryId); convenientGoodsCategoryDAO.createGoodsCategoryRelation(Snowflake.getId(),goodId, categoryId, convenientGoodsCategoryDO.getName(), convenientGoodsCategoryDO.getCreatedBy()); }); } } return R.ok(); } /** * 分页查询 * * @param pageComShopFlowerGoodsDTO 查询参数 * @return */ @Override public R pageFlowerGoodsList(PageComShopFlowerGoodsDTO pageComShopFlowerGoodsDTO) { long pageNum = pageComShopFlowerGoodsDTO.getPageNum() != null ? pageComShopFlowerGoodsDTO.getPageNum() : 1; long pageSize = pageComShopFlowerGoodsDTO.getPageSize() != null ? pageComShopFlowerGoodsDTO.getPageSize() : 10; Page page = new Page<>(pageNum, pageSize); IPage comShopStoreVOIPage = this.baseMapper.pageShopGoods(page, pageComShopFlowerGoodsDTO); if (!comShopStoreVOIPage.getRecords().isEmpty()) { comShopStoreVOIPage.getRecords().forEach(shopGoods -> { List goodsAttrDOs = shopFlowerGoodsAttrDAO.selectList(new QueryWrapper().lambda() .eq(ComShopFlowerGoodsAttrDO::getGoodsId, shopGoods.getId())); ArrayList goodsAttrVOList = Lists.newArrayList(); StringBuilder sbr = new StringBuilder(); int stock = 0; for (ComShopFlowerGoodsAttrDO oneGoodsAttrDO : goodsAttrDOs) { AddShopFlowerGoodsAttrVO goodsAttrVO = new AddShopFlowerGoodsAttrVO(); BeanUtils.copyProperties(oneGoodsAttrDO, goodsAttrVO); goodsAttrVO.setId(oneGoodsAttrDO.getId()); goodsAttrVOList.add(goodsAttrVO); stock = stock +oneGoodsAttrDO.getStock(); sbr.append(oneGoodsAttrDO.getGoodsAttrName()).append(" "); } shopGoods.setGoodsAttrName(sbr.toString()); shopGoods.setGoodsAttrs(goodsAttrVOList); if (CollUtil.isNotEmpty(goodsAttrDOs)){ shopGoods.setGoodsPic(goodsAttrDOs.get(0).getAttrPic()); } //设置商品总浏览量 shopGoods.setViewNum(comShopFlowerGoodsViewStatisticsDAO.selectTotalViewNum(shopGoods.getId())); String categoryNames = convenientGoodsCategoryDAO.selectCategoryScopeByGoodsId(shopGoods.getId()); shopGoods.setCategoryName(categoryNames); shopGoods.setStock(stock); }); } return R.ok(comShopStoreVOIPage); } /** * 分页查询商品列表 * * @param comShopFlowerGoodsDTO 请求参数 * @return */ @Override public R pageShopFlowerGoodsByApp(ComShopFlowerGoodsDTO comShopFlowerGoodsDTO) { Page page = new Page<>(comShopFlowerGoodsDTO.getPageNum(), comShopFlowerGoodsDTO.getPageSize()); IPage goodsVOIPage = this.baseMapper.pageShopGoodByApps(page, comShopFlowerGoodsDTO); if (!goodsVOIPage.getRecords().isEmpty()) { goodsVOIPage.getRecords().forEach(goodsVo -> { Long goodsId = goodsVo.getId(); List goodsAttrList = shopFlowerGoodsAttrDAO.getGoodsAttr(goodsId); if (!goodsAttrList.isEmpty()) { ComShopFlowerGoodsAttrVO comShopFlowerGoodsAttrVO = goodsAttrList.get(0); goodsVo.setGoodsAttrList(goodsAttrList); goodsVo.setGoodsPic(comShopFlowerGoodsAttrVO.getAttrPic()); goodsVo.setOriginalPrice(comShopFlowerGoodsAttrVO.getPrice()); goodsVo.setCollatePrice(comShopFlowerGoodsAttrVO.getCollatePrice()); goodsVo.setFreeShippingPrice(comShopFlowerGoodsAttrVO.getFreeShippingPrice()); } //设置商品总浏览量 goodsVo.setViewNum(comShopFlowerGoodsViewStatisticsDAO.selectTotalViewNum(goodsId)); }); } return R.ok(goodsVOIPage); } @Override public R shopFlowerGoodsDetail(Long goodsId) { // 根据id查询商品信息 ComShopFlowerGoodsDO goodsDO = this.baseMapper.selectById(goodsId); if (goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.deleteStatus.yes)) { return R.fail(403, "商品不存在"); } // if (!goodsDO.getStatus().equals(ComShopFlowerGoodsDO.status.sell)) { // return R.fail(405, "商品已下架"); // } // 根据商品id查询商品规格信息 List goodsAttrList = new ArrayList<>(); List goodsAttrDOS = shopFlowerGoodsAttrDAO.selectList(new QueryWrapper().eq("goods_id", goodsId)); // List images = new ArrayList<>(); int stock = 0; for (ComShopFlowerGoodsAttrDO attrDO : goodsAttrDOS) { ComShopFlowerGoodsAttrVO goodsAttrVO = new ComShopFlowerGoodsAttrVO(); BeanUtils.copyProperties(attrDO, goodsAttrVO); String attrPic = attrDO.getAttrPic(); // images.add(attrPic); goodsAttrList.add(goodsAttrVO); stock = stock +attrDO.getStock(); } // 查询商品店铺信息 ConvenientMerchantDO convenientMerchantDO = convenientMerchantDAO.selectById(goodsDO.getStoreId()); ConvenientMerchantVO convenientMerchantVO = new ConvenientMerchantVO(); BeanUtils.copyProperties(convenientMerchantDO, convenientMerchantVO); BigDecimal score = comShopFlowerEvaluateDAO.statisticsScore(convenientMerchantDO.getId()); convenientMerchantVO.setScore(null == score ? BigDecimal.ZERO : NumberUtil.round(score, 1)); // 设置值 ComShopFlowerGoodsVO shopGoods = new ComShopFlowerGoodsVO(); BeanUtils.copyProperties(goodsDO, shopGoods); shopGoods.setGoodsAttrList(goodsAttrList); shopGoods.setConvenientMerchantVO(convenientMerchantVO); // shopGoods.setImages(StringUtils.join(images,",")); Integer orderNum = comShopFlowerOrderGoodsDAO.selectCount(new LambdaQueryWrapper().eq(ComShopFlowerOrderGoodsDO::getGoodsId, goodsId)); shopGoods.setOrderNum(orderNum); List comShopFlowerEvaluateVOList = comShopFlowerEvaluateDAO.selectListLimit(goodsId); shopGoods.setShopFlowerEvaluateVOList(comShopFlowerEvaluateVOList); Integer evaluateNum = comShopFlowerEvaluateDAO.selectCountByGoodsId(goodsId); shopGoods.setEvaluateNum(evaluateNum); List categoryIds = convenientGoodsCategoryDAO.selectCategoryIdsForGoods(goodsId); shopGoods.setCategoryIds(categoryIds); ComShopFlowerGoodsAttrVO comShopFlowerGoodsAttrVO = goodsAttrList.get(0); shopGoods.setOriginalPrice(comShopFlowerGoodsAttrVO.getPrice()); shopGoods.setCollatePrice(comShopFlowerGoodsAttrVO.getCollatePrice()); shopGoods.setFreeShippingPrice(comShopFlowerGoodsAttrVO.getFreeShippingPrice()); shopGoods.setStock(stock); return R.ok(shopGoods); } @Override @Transactional(rollbackFor = Exception.class) public R editFlowerShopGoods(Long id, AddShopFlowerGoodsVO addShopFlowerGoodsVO) { if (addShopFlowerGoodsVO == null) { return R.ok("500", "数据为空!"); } LambdaQueryWrapper query = new LambdaQueryWrapper().eq(ComShopFlowerGoodsDO::getId, id); ComShopFlowerGoodsDO shopGoodsDO = new ComShopFlowerGoodsDO(); BeanUtils.copyProperties(addShopFlowerGoodsVO, shopGoodsDO); shopGoodsDO.setOriginalPrice(addShopFlowerGoodsVO.getPrice()); int update = this.baseMapper.update(shopGoodsDO, query); if (update < 1) { throw new ServiceException("修改失败"); } // 修改规格表 List comShopFlowerGoodsAttrDOS = shopFlowerGoodsAttrDAO .selectList(new LambdaQueryWrapper().eq(ComShopFlowerGoodsAttrDO::getGoodsId, id)); if (addShopFlowerGoodsVO.getGoodsAttrVOList().size() == 0) { shopFlowerGoodsAttrDAO .delete(new LambdaQueryWrapper().eq(ComShopFlowerGoodsAttrDO::getGoodsId, id)); ComShopFlowerGoodsAttrDO comShopFlowerGoodsAttrDO = new ComShopFlowerGoodsAttrDO(); comShopFlowerGoodsAttrDO.setGoodsId(id); comShopFlowerGoodsAttrDO.setStoreId(shopGoodsDO.getStoreId()); comShopFlowerGoodsAttrDO.setGoodsName(addShopFlowerGoodsVO.getName()); comShopFlowerGoodsAttrDO.setGoodsAttrName("默认"); comShopFlowerGoodsAttrDO.setAttrPic(addShopFlowerGoodsVO.getGoodsPic()); comShopFlowerGoodsAttrDO.setIsDefault(1); comShopFlowerGoodsAttrDO.setPrice(addShopFlowerGoodsVO.getPrice()); shopFlowerGoodsAttrDAO.insert(comShopFlowerGoodsAttrDO); } else { List attrIds = comShopFlowerGoodsAttrDOS.stream().map(ComShopFlowerGoodsAttrDO::getId).collect(Collectors.toList()); List voAttrIds = addShopFlowerGoodsVO.getGoodsAttrVOList().stream().map(AddShopFlowerGoodsAttrVO::getId) .collect(Collectors.toList()); // 需要删除的规格ID——针对编辑时删除了规格的情况 List deleteIds = DifferentLongListUtil.getDiffrent(attrIds, voAttrIds); if (deleteIds.size() != 0) { shopFlowerGoodsAttrDAO.deleteBatchIds(deleteIds); } addShopFlowerGoodsVO.getGoodsAttrVOList().forEach(goodsAttr -> { ComShopFlowerGoodsAttrDO comShopGoodsAttrDO = shopFlowerGoodsAttrDAO.selectById(goodsAttr.getId()); if (comShopGoodsAttrDO != null) { comShopGoodsAttrDO.setPrice(goodsAttr.getPrice()); comShopGoodsAttrDO.setCollatePrice(goodsAttr.getCollatePrice()); comShopGoodsAttrDO.setFreeShippingPrice(goodsAttr.getFreeShippingPrice()); comShopGoodsAttrDO.setGoodsAttrName(goodsAttr.getGoodsAttrName()); comShopGoodsAttrDO.setAttrPic(goodsAttr.getAttrPic()); comShopGoodsAttrDO.setStock(goodsAttr.getStock()); shopFlowerGoodsAttrDAO.updateById(comShopGoodsAttrDO); } else { comShopGoodsAttrDO = new ComShopFlowerGoodsAttrDO(); comShopGoodsAttrDO.setGoodsId(id); comShopGoodsAttrDO.setStoreId(shopGoodsDO.getStoreId()); comShopGoodsAttrDO.setGoodsName(shopGoodsDO.getName()); comShopGoodsAttrDO.setGoodsAttrName(goodsAttr.getGoodsAttrName()); comShopGoodsAttrDO.setIsDefault(1); comShopGoodsAttrDO.setPrice(goodsAttr.getPrice()); comShopGoodsAttrDO.setCollatePrice(goodsAttr.getCollatePrice()); comShopGoodsAttrDO.setFreeShippingPrice(goodsAttr.getFreeShippingPrice()); comShopGoodsAttrDO.setAttrPic(goodsAttr.getAttrPic()); comShopGoodsAttrDO.setStock(goodsAttr.getStock()); comShopGoodsAttrDO.setSale(0); shopFlowerGoodsAttrDAO.insert(comShopGoodsAttrDO); } }); } return R.ok(); } @Override @Transactional(rollbackFor = Exception.class) public R deleteShopFlowerGoods(Long id) { ComShopFlowerGoodsDO comShopFlowerGoodsDO = this.baseMapper.selectById(id); comShopFlowerGoodsDO.setDeleteStatus(ComShopFlowerGoodsDO.deleteStatus.yes); this.baseMapper.updateById(comShopFlowerGoodsDO); return R.ok(); } @Override @Transactional(rollbackFor = Exception.class) public R changeStatus(Long id, Integer status) { ComShopFlowerGoodsDO shopGoodsDO = this.baseMapper.selectById(id); if (shopGoodsDO == null) { return R.fail("id有误!"); } shopGoodsDO.setStatus(status); this.baseMapper.updateById(shopGoodsDO); return R.ok(); } @Override public R incrGoodsView(Long goodsId) { ComShopFlowerGoodsDO comShopFlowerGoodsDO = this.baseMapper.selectById(goodsId); if (isNull(comShopFlowerGoodsDO)) { return R.fail("商品不存在"); } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String nowDate = simpleDateFormat.format(new Date()); ComShopFlowerGoodsViewStatisticsDO statisticsDO = comShopFlowerGoodsViewStatisticsDAO.selectOne(new LambdaQueryWrapper() .eq(ComShopFlowerGoodsViewStatisticsDO::getGoodsId, goodsId).eq(ComShopFlowerGoodsViewStatisticsDO::getStatisticDate, nowDate)); if (isNull(statisticsDO)) { comShopFlowerGoodsViewStatisticsDAO.createTodayStatistic(goodsId,nowDate); } else { comShopFlowerGoodsViewStatisticsDAO.incrViewNum(goodsId, nowDate); } return R.ok(); } @Override public R countSaleByUserId(Long userId){ List comShopOrderStoreIdCountVOS = this.baseMapper.countSaleByUserId(userId); Map collect = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); return R.ok(collect); } }