商城服务商品详情数据接口实现
This commit is contained in:
parent
7d20ddd53e
commit
0e994a168c
|
|
@ -1,27 +1,37 @@
|
||||||
package com.xjs.mall.product.controller.web;
|
package com.xjs.mall.product.controller.web;
|
||||||
|
|
||||||
|
import com.xjs.mall.product.service.SkuInfoService;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemVo;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 详情页面控制器
|
* 详情页面控制器
|
||||||
|
*
|
||||||
* @author xiejs
|
* @author xiejs
|
||||||
* @since 2022-05-12
|
* @since 2022-05-12
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
public class ItemController {
|
public class ItemController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SkuInfoService skuInfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 展示当前Sku的详情
|
* 展示当前Sku的详情
|
||||||
* @param skuId
|
*
|
||||||
* @return
|
* @param skuId 商品id
|
||||||
|
* @return 跳转
|
||||||
*/
|
*/
|
||||||
@GetMapping("/{skuId}.html")
|
@GetMapping("/{skuId}.html")
|
||||||
public String skuItem(@PathVariable Long skuId) {
|
public String skuItem(@PathVariable Long skuId, Model model) {
|
||||||
|
|
||||||
System.out.println(skuId);
|
SkuItemVo vo = skuInfoService.item(skuId);
|
||||||
|
|
||||||
|
model.addAttribute("item", vo);
|
||||||
|
|
||||||
return "item";
|
return "item";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,25 @@ package com.xjs.mall.product.dao;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.xjs.mall.product.entity.AttrGroupEntity;
|
import com.xjs.mall.product.entity.AttrGroupEntity;
|
||||||
|
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 属性分组
|
* 属性分组
|
||||||
*
|
*
|
||||||
* @author xiejs
|
* @author xiejs
|
||||||
* @email 1294405880@qq.com
|
* @email 1294405880@qq.com
|
||||||
* @date 2022-03-15 10:16:53
|
* @date 2022-03-15 10:16:53
|
||||||
*/
|
*/
|
||||||
public interface AttrGroupDao extends BaseMapper<AttrGroupEntity> {
|
public interface AttrGroupDao extends BaseMapper<AttrGroupEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 Spu Id 获取具有 Attrs 的 Attr 组
|
||||||
|
*
|
||||||
|
* @param spuId spuId
|
||||||
|
* @return SpuItemAttrGroupVo
|
||||||
|
*/
|
||||||
|
List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(@Param("spuId") Long spuId, @Param("catalogId") Long catalogId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,24 @@ package com.xjs.mall.product.dao;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sku销售属性&值
|
* sku销售属性&值
|
||||||
*
|
*
|
||||||
* @author xiejs
|
* @author xiejs
|
||||||
* @email 1294405880@qq.com
|
* @email 1294405880@qq.com
|
||||||
* @date 2022-03-15 10:16:53
|
* @date 2022-03-15 10:16:53
|
||||||
*/
|
*/
|
||||||
public interface SkuSaleAttrValueDao extends BaseMapper<SkuSaleAttrValueEntity> {
|
public interface SkuSaleAttrValueDao extends BaseMapper<SkuSaleAttrValueEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 Spu Id 获取销售属性
|
||||||
|
* @param spuId spuId
|
||||||
|
* @return list
|
||||||
|
*/
|
||||||
|
List<SkuItemSaleAttrVo> getSaleAttrsBySpuId(@Param("spuId") Long spuId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.xjs.mall.product.service;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.xjs.mall.product.entity.AttrGroupEntity;
|
import com.xjs.mall.product.entity.AttrGroupEntity;
|
||||||
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
|
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
|
||||||
|
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
|
||||||
import com.xjs.utils.PageUtils;
|
import com.xjs.utils.PageUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -36,9 +37,18 @@ public interface AttrGroupService extends IService<AttrGroupEntity> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据分类id查出所有的分组以及这些组里面的属性
|
* 根据分类id查出所有的分组以及这些组里面的属性
|
||||||
|
*
|
||||||
* @param categoryId 分类id
|
* @param categoryId 分类id
|
||||||
* @return list
|
* @return list
|
||||||
*/
|
*/
|
||||||
List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long categoryId);
|
List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long categoryId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 Spu Id 获取具有 Attrs 的 Attr 组
|
||||||
|
*
|
||||||
|
* @param spuId spuId
|
||||||
|
* @return SpuItemAttrGroupVo
|
||||||
|
*/
|
||||||
|
List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(Long spuId, Long catalogId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package com.xjs.mall.product.service;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.xjs.mall.product.entity.SkuImagesEntity;
|
import com.xjs.mall.product.entity.SkuImagesEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sku图片
|
* sku图片
|
||||||
*
|
*
|
||||||
|
|
@ -12,5 +14,11 @@ import com.xjs.mall.product.entity.SkuImagesEntity;
|
||||||
*/
|
*/
|
||||||
public interface SkuImagesService extends IService<SkuImagesEntity> {
|
public interface SkuImagesService extends IService<SkuImagesEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按 Sku Id 获取图片
|
||||||
|
* @param skuId skuid
|
||||||
|
* @return image实体
|
||||||
|
*/
|
||||||
|
List<SkuImagesEntity> getImagesBySkuId(Long skuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.xjs.mall.product.service;
|
package com.xjs.mall.product.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemVo;
|
||||||
import com.xjs.utils.PageUtils;
|
import com.xjs.utils.PageUtils;
|
||||||
import com.xjs.mall.product.entity.SkuInfoEntity;
|
import com.xjs.mall.product.entity.SkuInfoEntity;
|
||||||
|
|
||||||
|
|
@ -36,5 +37,12 @@ public interface SkuInfoService extends IService<SkuInfoEntity> {
|
||||||
* @return list
|
* @return list
|
||||||
*/
|
*/
|
||||||
List<SkuInfoEntity> getSkusBySpuId(Long spuId);
|
List<SkuInfoEntity> getSkusBySpuId(Long spuId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询商品详情
|
||||||
|
* @param skuId 商品id
|
||||||
|
* @return 商品详情vo
|
||||||
|
*/
|
||||||
|
SkuItemVo item(Long skuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,9 @@ package com.xjs.mall.product.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sku销售属性&值
|
* sku销售属性&值
|
||||||
|
|
@ -12,5 +15,11 @@ import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
||||||
*/
|
*/
|
||||||
public interface SkuSaleAttrValueService extends IService<SkuSaleAttrValueEntity> {
|
public interface SkuSaleAttrValueService extends IService<SkuSaleAttrValueEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 Spu Id 获取销售属性
|
||||||
|
* @param spuId spuId
|
||||||
|
* @return list
|
||||||
|
*/
|
||||||
|
List<SkuItemSaleAttrVo> getSaleAttrsBySpuId(Long spuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import com.xjs.mall.product.service.AttrService;
|
||||||
import com.xjs.mall.product.service.CategoryService;
|
import com.xjs.mall.product.service.CategoryService;
|
||||||
import com.xjs.mall.product.vo.AttrGroupResponseVo;
|
import com.xjs.mall.product.vo.AttrGroupResponseVo;
|
||||||
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
|
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
|
||||||
|
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
|
||||||
import com.xjs.utils.PageUtils;
|
import com.xjs.utils.PageUtils;
|
||||||
import com.xjs.utils.Query;
|
import com.xjs.utils.Query;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
@ -82,11 +83,11 @@ public class AttrGroupServiceImpl extends ServiceImpl<AttrGroupDao, AttrGroupEnt
|
||||||
//先查询中间表是否有数据,有数据代表该数据被引用,则不能删除
|
//先查询中间表是否有数据,有数据代表该数据被引用,则不能删除
|
||||||
List<AttrAttrgroupRelationEntity> relationEntityList = attrAttrgroupRelationService
|
List<AttrAttrgroupRelationEntity> relationEntityList = attrAttrgroupRelationService
|
||||||
.list(new LambdaQueryWrapper<AttrAttrgroupRelationEntity>()
|
.list(new LambdaQueryWrapper<AttrAttrgroupRelationEntity>()
|
||||||
.eq(AttrAttrgroupRelationEntity::getAttrGroupId, id));
|
.eq(AttrAttrgroupRelationEntity::getAttrGroupId, id));
|
||||||
|
|
||||||
if (CollUtil.isEmpty(relationEntityList)) {
|
if (CollUtil.isEmpty(relationEntityList)) {
|
||||||
super.removeById(id);
|
super.removeById(id);
|
||||||
}else {
|
} else {
|
||||||
throw new MallException("含有被引用的规格参数未删除,请先删除规格参数");
|
throw new MallException("含有被引用的规格参数未删除,请先删除规格参数");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -113,12 +114,19 @@ public class AttrGroupServiceImpl extends ServiceImpl<AttrGroupDao, AttrGroupEnt
|
||||||
//2、查询所有属性
|
//2、查询所有属性
|
||||||
return attrGroupEntities.stream().map(group -> {
|
return attrGroupEntities.stream().map(group -> {
|
||||||
AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
|
AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
|
||||||
BeanUtils.copyProperties(group,attrsVo);
|
BeanUtils.copyProperties(group, attrsVo);
|
||||||
List<AttrEntity> attrs = attrService.getRelationAttr(attrsVo.getAttrGroupId());
|
List<AttrEntity> attrs = attrService.getRelationAttr(attrsVo.getAttrGroupId());
|
||||||
attrsVo.setAttrs(attrs);
|
attrsVo.setAttrs(attrs);
|
||||||
return attrsVo;
|
return attrsVo;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(Long spuId, Long catalogId) {
|
||||||
|
//查出当前spu对应的所有属性的分组信息以及分组下的所有属性对应的值
|
||||||
|
|
||||||
|
return super.baseMapper.getAttrGroupWithAttrsBySpuId(spuId,catalogId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,25 @@
|
||||||
package com.xjs.mall.product.service.impl;
|
package com.xjs.mall.product.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.xjs.mall.product.dao.SkuImagesDao;
|
import com.xjs.mall.product.dao.SkuImagesDao;
|
||||||
import com.xjs.mall.product.entity.SkuImagesEntity;
|
import com.xjs.mall.product.entity.SkuImagesEntity;
|
||||||
import com.xjs.mall.product.service.SkuImagesService;
|
import com.xjs.mall.product.service.SkuImagesService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@Service("skuImagesService")
|
@Service("skuImagesService")
|
||||||
public class SkuImagesServiceImpl extends ServiceImpl<SkuImagesDao, SkuImagesEntity> implements SkuImagesService {
|
public class SkuImagesServiceImpl extends ServiceImpl<SkuImagesDao, SkuImagesEntity> implements SkuImagesService {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SkuImagesEntity> getImagesBySkuId(Long skuId) {
|
||||||
|
SkuImagesDao skuImagesDao = super.baseMapper;
|
||||||
|
|
||||||
|
return skuImagesDao.selectList(new LambdaQueryWrapper<SkuImagesEntity>()
|
||||||
|
.eq(SkuImagesEntity::getSkuId, skuId));
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
import com.xjs.mall.product.dao.SkuInfoDao;
|
import com.xjs.mall.product.dao.SkuInfoDao;
|
||||||
import com.xjs.mall.product.entity.BrandEntity;
|
import com.xjs.mall.product.entity.*;
|
||||||
import com.xjs.mall.product.entity.CategoryEntity;
|
import com.xjs.mall.product.service.*;
|
||||||
import com.xjs.mall.product.entity.SkuInfoEntity;
|
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
|
||||||
import com.xjs.mall.product.entity.SpuInfoEntity;
|
import com.xjs.mall.product.vo.sku.SkuItemVo;
|
||||||
import com.xjs.mall.product.service.BrandService;
|
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
|
||||||
import com.xjs.mall.product.service.CategoryService;
|
|
||||||
import com.xjs.mall.product.service.SkuInfoService;
|
|
||||||
import com.xjs.mall.product.service.SpuInfoService;
|
|
||||||
import com.xjs.mall.product.vo.spu.SkuInfoVo;
|
import com.xjs.mall.product.vo.spu.SkuInfoVo;
|
||||||
import com.xjs.utils.PageUtils;
|
import com.xjs.utils.PageUtils;
|
||||||
import com.xjs.utils.Query;
|
import com.xjs.utils.Query;
|
||||||
|
|
@ -34,6 +31,14 @@ public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> i
|
||||||
private CategoryService categoryService;
|
private CategoryService categoryService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private BrandService brandService;
|
private BrandService brandService;
|
||||||
|
@Autowired
|
||||||
|
private SkuImagesService skuImagesService;
|
||||||
|
@Autowired
|
||||||
|
private SpuInfoDescService spuInfoDescService;
|
||||||
|
@Autowired
|
||||||
|
private AttrGroupService attrGroupService;
|
||||||
|
@Autowired
|
||||||
|
private SkuSaleAttrValueService skuSaleAttrValueService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveSkuInfo(SkuInfoEntity skuInfoEntity) {
|
public void saveSkuInfo(SkuInfoEntity skuInfoEntity) {
|
||||||
|
|
@ -93,8 +98,38 @@ public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> i
|
||||||
@Override
|
@Override
|
||||||
public List<SkuInfoEntity> getSkusBySpuId(Long spuId) {
|
public List<SkuInfoEntity> getSkusBySpuId(Long spuId) {
|
||||||
LambdaQueryWrapper<SkuInfoEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SkuInfoEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(SkuInfoEntity::getSpuId,spuId);
|
wrapper.eq(SkuInfoEntity::getSpuId, spuId);
|
||||||
return super.list(wrapper);
|
return super.list(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SkuItemVo item(Long skuId) {
|
||||||
|
SkuItemVo skuItemVo = new SkuItemVo();
|
||||||
|
|
||||||
|
//1、spu基本信息获取 pms_sku_info
|
||||||
|
SkuInfoEntity skuInfoEntity = this.getById(skuId);
|
||||||
|
skuItemVo.setInfo(skuInfoEntity);
|
||||||
|
|
||||||
|
Long spuId = skuInfoEntity.getSpuId();
|
||||||
|
Long catalogId = skuInfoEntity.getCatalogId();
|
||||||
|
|
||||||
|
//2、sku的图片信息 pms_sku_images
|
||||||
|
List<SkuImagesEntity> skuImagesEntityList = skuImagesService.getImagesBySkuId(skuId);
|
||||||
|
skuItemVo.setImages(skuImagesEntityList);
|
||||||
|
|
||||||
|
//3、获取spu的销售属性组合
|
||||||
|
List<SkuItemSaleAttrVo> skuItemSaleAttrVoList = skuSaleAttrValueService.getSaleAttrsBySpuId(spuId);
|
||||||
|
skuItemVo.setSaleAttr(skuItemSaleAttrVoList);
|
||||||
|
|
||||||
|
//4、获取spu的介绍
|
||||||
|
SpuInfoDescEntity spuInfoDescEntity = spuInfoDescService.getById(spuId);
|
||||||
|
skuItemVo.setDesc(spuInfoDescEntity);
|
||||||
|
|
||||||
|
//5、获取spu的规格参数信息
|
||||||
|
List<SpuItemAttrGroupVo> attrGroupVos = attrGroupService.getAttrGroupWithAttrsBySpuId(spuId, catalogId);
|
||||||
|
skuItemVo.setGroupAttrs(attrGroupVos);
|
||||||
|
|
||||||
|
return skuItemVo;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,23 @@
|
||||||
package com.xjs.mall.product.service.impl;
|
package com.xjs.mall.product.service.impl;
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import java.util.Map;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.xjs.utils.PageUtils;
|
|
||||||
import com.xjs.utils.Query;
|
|
||||||
|
|
||||||
import com.xjs.mall.product.dao.SkuSaleAttrValueDao;
|
import com.xjs.mall.product.dao.SkuSaleAttrValueDao;
|
||||||
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
|
||||||
import com.xjs.mall.product.service.SkuSaleAttrValueService;
|
import com.xjs.mall.product.service.SkuSaleAttrValueService;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@Service("skuSaleAttrValueService")
|
@Service("skuSaleAttrValueService")
|
||||||
public class SkuSaleAttrValueServiceImpl extends ServiceImpl<SkuSaleAttrValueDao, SkuSaleAttrValueEntity> implements SkuSaleAttrValueService {
|
public class SkuSaleAttrValueServiceImpl extends ServiceImpl<SkuSaleAttrValueDao, SkuSaleAttrValueEntity> implements SkuSaleAttrValueService {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SkuItemSaleAttrVo> getSaleAttrsBySpuId(Long spuId) {
|
||||||
|
SkuSaleAttrValueDao baseMapper = super.baseMapper;
|
||||||
|
|
||||||
|
return baseMapper.getSaleAttrsBySpuId(spuId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.xjs.mall.product.vo.sku;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 带有 Sku Id VO 的 Attr 值
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString
|
||||||
|
public class AttrValueWithSkuIdVO {
|
||||||
|
private String attrValue;
|
||||||
|
|
||||||
|
private String skuIds;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package com.xjs.mall.product.vo.sku;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 秒杀 Sku Vo
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SeckillSkuVo {
|
||||||
|
/**
|
||||||
|
* 活动id
|
||||||
|
*/
|
||||||
|
private Long promotionId;
|
||||||
|
/**
|
||||||
|
* 活动场次id
|
||||||
|
*/
|
||||||
|
private Long promotionSessionId;
|
||||||
|
/**
|
||||||
|
* 商品id
|
||||||
|
*/
|
||||||
|
private Long skuId;
|
||||||
|
/**
|
||||||
|
* 秒杀价格
|
||||||
|
*/
|
||||||
|
private BigDecimal seckillPrice;
|
||||||
|
/**
|
||||||
|
* 秒杀总量
|
||||||
|
*/
|
||||||
|
private Integer seckillCount;
|
||||||
|
/**
|
||||||
|
* 每人限购数量
|
||||||
|
*/
|
||||||
|
private Integer seckillLimit;
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
private Integer seckillSort;
|
||||||
|
|
||||||
|
//当前商品秒杀的开始时间
|
||||||
|
private Long startTime;
|
||||||
|
|
||||||
|
//当前商品秒杀的结束时间
|
||||||
|
private Long endTime;
|
||||||
|
|
||||||
|
//当前商品秒杀的随机码
|
||||||
|
private String randomCode;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.xjs.mall.product.vo.sku;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sku 项目销售 Attr Vo
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString
|
||||||
|
public class SkuItemSaleAttrVo {
|
||||||
|
private Long attrId;
|
||||||
|
|
||||||
|
private String attrName;
|
||||||
|
|
||||||
|
private List<AttrValueWithSkuIdVO> attrValues;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.xjs.mall.product.vo.sku;
|
||||||
|
|
||||||
|
import com.xjs.mall.product.entity.SkuImagesEntity;
|
||||||
|
import com.xjs.mall.product.entity.SkuInfoEntity;
|
||||||
|
import com.xjs.mall.product.entity.SpuInfoDescEntity;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品详情vo
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class SkuItemVo {
|
||||||
|
//1、sku基本信息的获取 pms_sku_info
|
||||||
|
private SkuInfoEntity info;
|
||||||
|
|
||||||
|
private boolean hasStock = true;
|
||||||
|
|
||||||
|
//2、sku的图片信息 pms_sku_images
|
||||||
|
private List<SkuImagesEntity> images;
|
||||||
|
|
||||||
|
//3、获取spu的销售属性组合
|
||||||
|
private List<SkuItemSaleAttrVo> saleAttr;
|
||||||
|
|
||||||
|
//4、获取spu的介绍
|
||||||
|
private SpuInfoDescEntity desc;
|
||||||
|
|
||||||
|
//5、获取spu的规格参数信息
|
||||||
|
private List<SpuItemAttrGroupVo> groupAttrs;
|
||||||
|
|
||||||
|
//6、秒杀商品的优惠信息
|
||||||
|
private SeckillSkuVo seckillSkuVo;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.xjs.mall.product.vo.sku;
|
||||||
|
|
||||||
|
import com.xjs.mall.product.vo.spu.Attr;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spu 项目属性组 Vo
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SpuItemAttrGroupVo {
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
private List<Attr> attrs;
|
||||||
|
}
|
||||||
|
|
@ -13,5 +13,28 @@
|
||||||
<result property="catelogId" column="catelog_id"/>
|
<result property="catelogId" column="catelog_id"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="spuAttrGroup" type="com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo">
|
||||||
|
<result property="groupName" column="attr_group_name"/>
|
||||||
|
<collection property="attrs" ofType="com.xjs.mall.product.vo.spu.Attr">
|
||||||
|
<result property="attrId" column="attr_id"/>
|
||||||
|
<result property="attrName" column="attr_name"/>
|
||||||
|
<result property="attrValue" column="attr_value"/>
|
||||||
|
</collection>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
</mapper>
|
|
||||||
|
<select id="getAttrGroupWithAttrsBySpuId" resultMap="spuAttrGroup">
|
||||||
|
SELECT product.spu_id,
|
||||||
|
pag.attr_group_id,
|
||||||
|
pag.attr_group_name,
|
||||||
|
product.attr_id,
|
||||||
|
product.attr_name,
|
||||||
|
product.attr_value
|
||||||
|
FROM pms_product_attr_value product
|
||||||
|
LEFT JOIN pms_attr_attrgroup_relation paar ON product.attr_id = paar.attr_id
|
||||||
|
LEFT JOIN pms_attr_group pag ON paar.attr_group_id = pag.attr_group_id
|
||||||
|
WHERE product.spu_id = #{spuId}
|
||||||
|
AND pag.catelog_id = #{catalogId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<mapper namespace="com.xjs.mall.product.dao.SkuSaleAttrValueDao">
|
<mapper namespace="com.xjs.mall.product.dao.SkuSaleAttrValueDao">
|
||||||
|
|
||||||
<!-- 可根据自己的需求,是否要使用 -->
|
<!-- 可根据自己的需求,是否要使用 -->
|
||||||
<resultMap type="com.xjs.mall.product.entity.SkuSaleAttrValueEntity" id="skuSaleAttrValueMap">
|
<resultMap type="com.xjs.mall.product.entity.SkuSaleAttrValueEntity" id="skuSaleAttrValueMap">
|
||||||
<result property="id" column="id"/>
|
<result property="id" column="id"/>
|
||||||
<result property="skuId" column="sku_id"/>
|
<result property="skuId" column="sku_id"/>
|
||||||
|
|
@ -13,5 +13,27 @@
|
||||||
<result property="attrSort" column="attr_sort"/>
|
<result property="attrSort" column="attr_sort"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="skuItemSaleAttrVo" type="com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo">
|
||||||
|
<result column="attr_id" property="attrId"></result>
|
||||||
|
<result column="attr_name" property="attrName"></result>
|
||||||
|
<collection property="attrValues" ofType="com.xjs.mall.product.vo.sku.AttrValueWithSkuIdVO">
|
||||||
|
<result column="attr_value" property="attrValue"></result>
|
||||||
|
<result column="sku_ids" property="skuIds"></result>
|
||||||
|
</collection>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
</mapper>
|
<select id="getSaleAttrsBySpuId" resultMap="skuItemSaleAttrVo">
|
||||||
|
SELECT ssav.attr_id attr_id,
|
||||||
|
ssav.attr_name attr_name,
|
||||||
|
ssav.attr_value,
|
||||||
|
group_concat(DISTINCT info.sku_id ) sku_ids
|
||||||
|
FROM pms_sku_info info
|
||||||
|
LEFT JOIN pms_sku_sale_attr_value ssav ON ssav.sku_id = info.sku_id
|
||||||
|
WHERE info.spu_id = #{spuId}
|
||||||
|
GROUP BY ssav.attr_id,
|
||||||
|
ssav.attr_name,
|
||||||
|
ssav.attr_value
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.xjs.mall.product.service.impl;
|
||||||
|
|
||||||
|
import com.xjs.mall.product.MallProductApp;
|
||||||
|
import com.xjs.mall.product.service.AttrGroupService;
|
||||||
|
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@SpringBootTest(classes = MallProductApp.class)
|
||||||
|
class AttrGroupServiceImplTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AttrGroupService attrGroupService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getAttrGroupWithAttrsBySpuId() {
|
||||||
|
List<SpuItemAttrGroupVo> group = attrGroupService.getAttrGroupWithAttrsBySpuId(1505547655116955650L, 225L);
|
||||||
|
|
||||||
|
System.out.println(group);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.xjs.mall.product.service.impl;
|
||||||
|
|
||||||
|
import com.xjs.mall.product.MallProductApp;
|
||||||
|
import com.xjs.mall.product.service.SkuSaleAttrValueService;
|
||||||
|
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-05-12
|
||||||
|
*/
|
||||||
|
@SpringBootTest(classes = MallProductApp.class)
|
||||||
|
class SkuSaleAttrValueServiceImplTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SkuSaleAttrValueService skuSaleAttrValueService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getSaleAttrsBySpuId() {
|
||||||
|
List<SkuItemSaleAttrVo> saleAttrsBySpuId = skuSaleAttrValueService.getSaleAttrsBySpuId(1505566927104974849L);
|
||||||
|
System.out.println(saleAttrsBySpuId);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue