尚品汇_第5章_ 商品sku保存

尚品汇_第5章_ 商品sku保存

一、业务介绍

1.1 数据库表结构

根据以上的需求,以此将SKU关联的数据库表结构设计为如下:
在这里插入图片描述

1.2 数据准备

1.1 平台属性添加

在这里插入图片描述

1.2 商品spu管理

在这里插入图片描述

添加销售属性信息

在这里插入图片描述

二、保存skuInfo功能

2.1 图片加载功能

功能分析:图片列表是根据spuId得来,涉及到的数据库表spu_image

2.1.1 添加接口实现类

接口


/**
 * 根据spuId 查询spuImageList
 * @param spuId
 * @return
 */
List<SpuImage> getSpuImageList(Long spuId);

实现类

@Override
public List<SpuImage> getSpuImageList(Long spuId) {
    QueryWrapper<SpuImage> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("spu_id", spuId);
    return spuImageMapper.selectList(queryWrapper);
}

2.1.2 添加控制器

controller

@Api(tags = "商品SKU接口")
@RestController
@RequestMapping("admin/product")
public class SkuManageController {

    @Autowired
    private ManageService manageService;

    /**
     * 根据spuId 查询spuImageList
     * @param spuId
     * @return
     */
    @GetMapping("spuImageList/{spuId}")
    public Result<List<SpuImage>> getSpuImageList(@PathVariable("spuId") Long spuId) {
        List<SpuImage> spuImageList = manageService.getSpuImageList(spuId);
        return Result.ok(spuImageList);
    }
}

2.2 销售属性

2.2.1 编写接口以及实现类

接口:

/**
 * 根据spuId 查询销售属性集合
 * @param spuId
 * @return
 */
List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);

实现类:

@Override
public List<SpuSaleAttr> getSpuSaleAttrList(Long spuId) {
    return spuSaleAttrMapper.selectSpuSaleAttrList(spuId);
}

mapper

@Mapper
public interface SpuSaleAttrMapper extends BaseMapper<SpuSaleAttr> {
    // 根据spuId 查询销售属性集合
    List<SpuSaleAttr> selectSpuSaleAttrList(Long spuId);

}

SpuSaleAttrMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.atguigu.gmall.product.mapper.SpuSaleAttrMapper">


    <resultMap id="spuSaleAttrMap" type="com.atguigu.gmall.model.product.SpuSaleAttr" autoMapping="true">

    <id property="id" column="id"></id>
    <!--一对多-->
    <collection property="spuSaleAttrValueList" ofType="com.atguigu.gmall.model.product.SpuSaleAttrValue" autoMapping="true">
        <id property="id" column="sale_attr_value_id"></id>
    </collection>

</resultMap>

<sql id="spuSaleAttr"> 
sa.id ,sa.spu_id, sa.sale_attr_name,sa.base_sale_attr_id,
    sv.id sale_attr_value_id,
    sv.sale_attr_value_name
</sql>
<select id="selectSpuSaleAttrList" resultMap="spuSaleAttrMap">
    select
      <include refid="spuSaleAttr"></include>
    from spu_sale_attr sa inner join spu_sale_attr_value  sv
    on  sa.spu_id=sv.spu_id and sa.base_sale_attr_id=sv.base_sale_attr_id
    where  sa.spu_id=#{spu_id}
</select>
</mapper>

2.2.2 编写控制器

/**
 * 根据spuId 查询销售属性集合
 * @param spuId
 * @return
 */
@GetMapping("spuSaleAttrList/{spuId}")
public Result<List<SpuSaleAttr>> getSpuSaleAttrList(@PathVariable("spuId") Long spuId) {
    List<SpuSaleAttr> spuSaleAttrList = manageService.getSpuSaleAttrList(spuId);
    return Result.ok(spuSaleAttrList);
}

2.3 点击保存按钮

2.3.1 创建mapper

创建对应数据库表实体类,以及接口mapper
@Mapper
public interface SkuInfoMapper extends BaseMapper<SkuInfo> {
}
@Mapper
public interface SkuImageMapper extends BaseMapper<SkuImage> {
}
@Mapper
public interface SkuAttrValueMapper extends BaseMapper<SkuAttrValue> {
}
@Mapper
public interface SkuSaleAttrValueMapper extends BaseMapper<SkuSaleAttrValue> {

}

2.3.2 编写接口与实现

接口

/**
 * 保存数据
 * @param skuInfo
 */
void saveSkuInfo(SkuInfo skuInfo);

实现类

实现类
@Override
@Transactional(rollbackFor = Exception.class)
public void saveSkuInfo(SkuInfo skuInfo) {
    /*
        skuInfo 库存单元表 --- spuInfo!
        skuImage 库存单元图片表 --- spuImage!
        skuSaleAttrValue sku销售属性值表{sku与销售属性值的中间表} --- skuInfo ,spuSaleAttrValue
        skuAttrValue sku与平台属性值的中间表 --- skuInfo ,baseAttrValue
     */
    skuInfoMapper.insert(skuInfo);
    List<SkuImage> skuImageList = skuInfo.getSkuImageList();
    if (skuImageList != null && skuImageList.size() > 0) {
        // 循环遍历
        for (SkuImage skuImage : skuImageList) {
            skuImage.setSkuId(skuInfo.getId());
            skuImageMapper.insert(skuImage);
        }
    }

    List<SkuSaleAttrValue> skuSaleAttrValueList = skuInfo.getSkuSaleAttrValueList();
    // 调用判断集合方法
    if (!CollectionUtils.isEmpty(skuSaleAttrValueList)) {
        for (SkuSaleAttrValue skuSaleAttrValue : skuSaleAttrValueList) {
            skuSaleAttrValue.setSkuId(skuInfo.getId());
            skuSaleAttrValue.setSpuId(skuInfo.getSpuId());
            skuSaleAttrValueMapper.insert(skuSaleAttrValue);
        }
    }

    List<SkuAttrValue> skuAttrValueList = skuInfo.getSkuAttrValueList();
    if (!CollectionUtils.isEmpty(skuAttrValueList)) {
        for (SkuAttrValue skuAttrValue : skuAttrValueList) {
            skuAttrValue.setSkuId(skuInfo.getId());
            skuAttrValueMapper.insert(skuAttrValue);
        }
    }
}

2.3.3 编写控制器

SkuManageController

/**
 * 保存sku
 * @param skuInfo
 * @return
 */
@PostMapping("saveSkuInfo")
public Result saveSkuInfo(@RequestBody SkuInfo skuInfo) {
    // 调用服务层
    manageService.saveSkuInfo(skuInfo);
    return Result.ok();
}

2.4 查询sku列表以及上下架处理

在ManageService 中添加

/**
 * SKU分页列表
 * @param pageParam
 * @return
 */
IPage<SkuInfo> getPage(Page<SkuInfo> pageParam);
/**
 * 商品上架
 * @param skuId
 */
void onSale(Long skuId);

/**
 * 商品下架
 * @param skuId
 */
void cancelSale(Long skuId);


接口实现类
@Override
public IPage<SkuInfo> getPage(Page<SkuInfo> pageParam) {
   QueryWrapper<SkuInfo> queryWrapper = new QueryWrapper<>();
   queryWrapper.orderByDesc("id");

   IPage<SkuInfo> page = skuInfoMapper.getPage(pageParam, queryWrapper);
   return page;
}

@Override
@Transactional
public void onSale(Long skuId) {
    // 更改销售状态
        SkuInfo skuInfoUp = new SkuInfo();
    skuInfoUp.setId(skuId);
    skuInfoUp.setIsSale(1);
    skuInfoMapper.updateById(skuInfoUp);
}

@Override
@Transactional
public void cancelSale(Long skuId) {
    // 更改销售状态
        SkuInfo skuInfoUp = new SkuInfo();
    skuInfoUp.setId(skuId);
    skuInfoUp.setIsSale(0);
    skuInfoMapper.updateById(skuInfoUp);
}

2.4.2 编写控制器

BaseManageController 控制器

/**
 * SKU分页列表
 * @param page
 * @param limit
 * @return
 */
@GetMapping("/list/{page}/{limit}")
public Result index(
        @PathVariable Long page,
        @PathVariable Long limit) {

    Page<SkuInfo> pageParam = new Page<>(page, limit);
    IPage<SkuInfo> pageModel = manageService.getPage(pageParam);
    return Result.ok(pageModel);
}

/**
 * 商品上架
 * @param skuId
 * @return
 */
@GetMapping("onSale/{skuId}")
public Result onSale(@PathVariable("skuId") Long skuId) {
    manageService.onSale(skuId);
    return Result.ok();
}

/**
 * 商品下架
 * @param skuId
 * @return
 */
@GetMapping("cancelSale/{skuId}")
public Result cancelSale(@PathVariable("skuId") Long skuId) {
    manageService.cancelSale(skuId);
    return Result.ok();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值