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<ComShopFlowerGoodsDAO, ComShopFlowerGoodsDO> 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<ComShopFlowerGoodsAttrDO> 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<Long> 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<PageShopFlowerGoodsVO> comShopStoreVOIPage = this.baseMapper.pageShopGoods(page, pageComShopFlowerGoodsDTO);
|
if (!comShopStoreVOIPage.getRecords().isEmpty()) {
|
comShopStoreVOIPage.getRecords().forEach(shopGoods -> {
|
List<ComShopFlowerGoodsAttrDO> goodsAttrDOs =
|
shopFlowerGoodsAttrDAO.selectList(new QueryWrapper<ComShopFlowerGoodsAttrDO>().lambda()
|
.eq(ComShopFlowerGoodsAttrDO::getGoodsId, shopGoods.getId()));
|
ArrayList<AddShopFlowerGoodsAttrVO> 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<ComShopFlowerGoodsVO> goodsVOIPage = this.baseMapper.pageShopGoodByApps(page, comShopFlowerGoodsDTO);
|
if (!goodsVOIPage.getRecords().isEmpty()) {
|
goodsVOIPage.getRecords().forEach(goodsVo -> {
|
Long goodsId = goodsVo.getId();
|
List<ComShopFlowerGoodsAttrVO> 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<ComShopFlowerGoodsAttrVO> goodsAttrList = new ArrayList<>();
|
List<ComShopFlowerGoodsAttrDO> goodsAttrDOS =
|
shopFlowerGoodsAttrDAO.selectList(new QueryWrapper<ComShopFlowerGoodsAttrDO>().eq("goods_id", goodsId));
|
// List<String> 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<ComShopFlowerOrderGoodsDO>().eq(ComShopFlowerOrderGoodsDO::getGoodsId, goodsId));
|
shopGoods.setOrderNum(orderNum);
|
List<ComShopFlowerEvaluateVO> comShopFlowerEvaluateVOList = comShopFlowerEvaluateDAO.selectListLimit(goodsId);
|
shopGoods.setShopFlowerEvaluateVOList(comShopFlowerEvaluateVOList);
|
Integer evaluateNum = comShopFlowerEvaluateDAO.selectCountByGoodsId(goodsId);
|
shopGoods.setEvaluateNum(evaluateNum);
|
|
List<Long> 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<ComShopFlowerGoodsDO> query =
|
new LambdaQueryWrapper<ComShopFlowerGoodsDO>().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<ComShopFlowerGoodsAttrDO> comShopFlowerGoodsAttrDOS = shopFlowerGoodsAttrDAO
|
.selectList(new LambdaQueryWrapper<ComShopFlowerGoodsAttrDO>().eq(ComShopFlowerGoodsAttrDO::getGoodsId, id));
|
if (addShopFlowerGoodsVO.getGoodsAttrVOList().size() == 0) {
|
shopFlowerGoodsAttrDAO
|
.delete(new LambdaQueryWrapper<ComShopFlowerGoodsAttrDO>().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<Long> attrIds =
|
comShopFlowerGoodsAttrDOS.stream().map(ComShopFlowerGoodsAttrDO::getId).collect(Collectors.toList());
|
List<Long> voAttrIds = addShopFlowerGoodsVO.getGoodsAttrVOList().stream().map(AddShopFlowerGoodsAttrVO::getId)
|
.collect(Collectors.toList());
|
// 需要删除的规格ID——针对编辑时删除了规格的情况
|
List<Long> 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<ComShopFlowerGoodsViewStatisticsDO>()
|
.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<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS = this.baseMapper.countSaleByUserId(userId);
|
Map<String, Integer> collect = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum));
|
return R.ok(collect);
|
}
|
}
|