商城服务商品详情数据接口实现

pull/254/head
xjs 3 years ago
parent 7d20ddd53e
commit 0e994a168c

@ -1,27 +1,37 @@
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.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
*
*
* @author xiejs
* @since 2022-05-12
*/
@Controller
public class ItemController {
@Autowired
private SkuInfoService skuInfoService;
/**
* Sku
* @param skuId
* @return
*
* @param skuId id
* @return
*/
@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";
}

@ -2,6 +2,10 @@ package com.xjs.mall.product.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
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;
/**
*
@ -12,4 +16,11 @@ import com.xjs.mall.product.entity.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,6 +2,10 @@ package com.xjs.mall.product.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
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&
@ -12,4 +16,10 @@ import com.xjs.mall.product.entity.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.xjs.mall.product.entity.AttrGroupEntity;
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
import com.xjs.utils.PageUtils;
import java.util.List;
@ -36,9 +37,18 @@ public interface AttrGroupService extends IService<AttrGroupEntity> {
/**
* id
*
* @param categoryId id
* @return list
*/
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.xjs.mall.product.entity.SkuImagesEntity;
import java.util.List;
/**
* sku
*
@ -12,5 +14,11 @@ import com.xjs.mall.product.entity.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;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xjs.mall.product.vo.sku.SkuItemVo;
import com.xjs.utils.PageUtils;
import com.xjs.mall.product.entity.SkuInfoEntity;
@ -36,5 +37,12 @@ public interface SkuInfoService extends IService<SkuInfoEntity> {
* @return list
*/
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.xjs.mall.product.entity.SkuSaleAttrValueEntity;
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
import java.util.List;
/**
* sku&
@ -12,5 +15,11 @@ import com.xjs.mall.product.entity.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.vo.AttrGroupResponseVo;
import com.xjs.mall.product.vo.AttrGroupWithAttrsVo;
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
import com.xjs.utils.PageUtils;
import com.xjs.utils.Query;
import org.apache.commons.lang3.StringUtils;
@ -120,5 +121,12 @@ public class AttrGroupServiceImpl extends ServiceImpl<AttrGroupDao, AttrGroupEnt
}).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;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjs.mall.product.dao.SkuImagesDao;
import com.xjs.mall.product.entity.SkuImagesEntity;
import com.xjs.mall.product.service.SkuImagesService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("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.ruoyi.common.core.utils.StringUtils;
import com.xjs.mall.product.dao.SkuInfoDao;
import com.xjs.mall.product.entity.BrandEntity;
import com.xjs.mall.product.entity.CategoryEntity;
import com.xjs.mall.product.entity.SkuInfoEntity;
import com.xjs.mall.product.entity.SpuInfoEntity;
import com.xjs.mall.product.service.BrandService;
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.entity.*;
import com.xjs.mall.product.service.*;
import com.xjs.mall.product.vo.sku.SkuItemSaleAttrVo;
import com.xjs.mall.product.vo.sku.SkuItemVo;
import com.xjs.mall.product.vo.sku.SpuItemAttrGroupVo;
import com.xjs.mall.product.vo.spu.SkuInfoVo;
import com.xjs.utils.PageUtils;
import com.xjs.utils.Query;
@ -34,6 +31,14 @@ public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> i
private CategoryService categoryService;
@Autowired
private BrandService brandService;
@Autowired
private SkuImagesService skuImagesService;
@Autowired
private SpuInfoDescService spuInfoDescService;
@Autowired
private AttrGroupService attrGroupService;
@Autowired
private SkuSaleAttrValueService skuSaleAttrValueService;
@Override
public void saveSkuInfo(SkuInfoEntity skuInfoEntity) {
@ -97,4 +102,34 @@ public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> i
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;
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.xjs.utils.PageUtils;
import com.xjs.utils.Query;
import com.xjs.mall.product.dao.SkuSaleAttrValueDao;
import com.xjs.mall.product.entity.SkuSaleAttrValueEntity;
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")
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"/>
</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>
<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>

@ -13,5 +13,27 @@
<result property="attrSort" column="attr_sort"/>
</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>
<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…
Cancel
Save