diff --git a/liang-springcloud-alibaba-goods-service/pom.xml b/liang-springcloud-alibaba-goods-service/pom.xml
index f61586b..354d11e 100644
--- a/liang-springcloud-alibaba-goods-service/pom.xml
+++ b/liang-springcloud-alibaba-goods-service/pom.xml
@@ -35,6 +35,13 @@
5.8.0
+
+ org.projectlombok
+ lombok
+ 1.18.26
+ provided
+
+
com.baomidou
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/ProductController.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/ProductController.java
new file mode 100644
index 0000000..f3d953f
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/ProductController.java
@@ -0,0 +1,69 @@
+package com.liang.sca.goods.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.liang.sca.goods.mapper.ProductSkuMapper;
+import com.liang.sca.goods.mapper.ProductSpuMapper;
+import com.liang.sca.goods.model.ProductSku;
+import com.liang.sca.goods.model.ProductSpu;
+import com.liang.sca.goods.model.vo.ProductVo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/product")
+public class ProductController {
+
+ @Autowired
+ private ProductSpuMapper spuMapper;
+
+ @Autowired
+ private ProductSkuMapper skuMapper;
+
+ @GetMapping("/infos")
+ public List queryInfos(){
+ QueryWrapper queryWrapper = new QueryWrapper();
+ List list = spuMapper.selectList(queryWrapper);
+ List productVos = BeanUtil.copyToList(list, ProductVo.class);
+ for (ProductVo vo : productVos) {
+ QueryWrapper skuQueryWrapper = new QueryWrapper();
+ skuQueryWrapper.eq("spu_id", vo.getSpuId());
+ List skus = skuMapper.selectList(skuQueryWrapper);
+ vo.setSkus(skus);
+ }
+ return productVos;
+ }
+
+ @GetMapping("/infos/{spuId}")
+ public ProductVo queryInfos(@PathVariable int spuId){
+ ProductSpu productSpu = spuMapper.selectById(spuId);
+ ProductVo productVo = new ProductVo();
+ BeanUtils.copyProperties(productSpu, productVo);
+ QueryWrapper skuQueryWrapper = new QueryWrapper<>();
+ skuQueryWrapper.eq("spu_id", spuId);
+ List productSkus = skuMapper.selectList(skuQueryWrapper);
+ productVo.setSkus(productSkus);
+ return productVo;
+ }
+
+ @RequestMapping("/buy/{skuId}/{counts}")
+ public void buyGodds(@PathVariable BigInteger skuId, @PathVariable int counts){
+ ProductSku productSku = skuMapper.selectById(skuId);
+ int skuStore = productSku.getSkuStore() - counts;
+ productSku.setSkuStore(skuStore);
+ skuMapper.updateById(productSku);
+ ProductSpu productSpu = spuMapper.selectById(productSku.getSpuId());
+ int spuStore = productSpu.getSpuStore() - counts;
+ productSpu.setSpuStore(spuStore);
+ spuMapper.updateById(productSpu);
+ }
+}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/SecKillController.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/SecKillController.java
index 2bbf106..a8a628b 100644
--- a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/SecKillController.java
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/controller/SecKillController.java
@@ -1,7 +1,9 @@
package com.liang.sca.goods.controller;
import com.liang.sca.goods.mapper.GoodsInfoMapper;
+import com.liang.sca.goods.mapper.ProductSkuMapper;
import com.liang.sca.goods.model.GoodsInfo;
+import com.liang.sca.goods.model.ProductSku;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
@@ -17,23 +19,22 @@ public class SecKillController {
private RedisTemplate redisTemplate;
@Autowired
- private GoodsInfoMapper goodsInfoMapper;
+ private ProductSkuMapper skuMapper;
/**
* 创建秒杀活动
- * @param id 商品信息表的主键 ID
* @return 操作结果信息
*/
- @RequestMapping("/create/{id}")
- public String createSecKillActivity(@PathVariable int id) {
+ @RequestMapping("/create/{skuId}")
+ public String createSecKillActivity(@PathVariable int skuId) {
// 根据 id 查询 tb_goods_info 表
- GoodsInfo goodsInfo = goodsInfoMapper.selectById(id);
- if (goodsInfo == null) {
+ ProductSku productSku = skuMapper.selectById(skuId);
+ if (productSku == null) {
return "商品信息不存在";
}
// 以 goodsId 为 key,将库存放入 redis 中
- String key = "seckill:goods:" + goodsInfo.getGoodsId();
- redisTemplate.opsForValue().set(key, goodsInfo.getGoodsStore());
+ String key = "seckill:product:" + skuId;
+ redisTemplate.opsForValue().set(key, productSku.getSkuStore());
return "秒杀活动创建成功";
}
}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSkuMapper.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSkuMapper.java
new file mode 100644
index 0000000..e534c8b
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSkuMapper.java
@@ -0,0 +1,9 @@
+package com.liang.sca.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.liang.sca.goods.model.ProductSku;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProductSkuMapper extends BaseMapper {
+}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSpuMapper.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSpuMapper.java
new file mode 100644
index 0000000..f90b65b
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/mapper/ProductSpuMapper.java
@@ -0,0 +1,9 @@
+package com.liang.sca.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.liang.sca.goods.model.ProductSpu;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProductSpuMapper extends BaseMapper {
+}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSku.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSku.java
new file mode 100644
index 0000000..3cc9642
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSku.java
@@ -0,0 +1,33 @@
+package com.liang.sca.goods.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@TableName("tb_product_sku")
+@Data
+public class ProductSku implements Serializable {
+
+ @TableId("sku_id")
+ private Long skuId;
+
+ @TableField("spu_id")
+ private Long spuId;
+
+ @TableField("sku_property")
+ private String skuProperty;
+
+ @TableField("sku_property_value")
+ private String skuPropertyValue;
+
+ @TableField("sku_store")
+ private Integer skuStore;
+
+ @TableField("sku_price")
+ private BigDecimal skuPrice;
+
+}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSpu.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSpu.java
new file mode 100644
index 0000000..ea90366
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/ProductSpu.java
@@ -0,0 +1,38 @@
+package com.liang.sca.goods.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@TableName("tb_product_spu")
+@Data
+public class ProductSpu implements Serializable {
+
+ @TableId("spu_id")
+ private Long spuId;
+
+ @TableField("spu_name")
+ private String spuName;
+
+ @TableField("spu_type")
+ private String spuType;
+
+ @TableField("spu_price")
+ private BigDecimal spuPrice;
+
+ @TableField("spu_store")
+ private Integer spuStore;
+
+ @TableField("spu_detail")
+ private String spuDetail;
+
+ @TableField("spu_sales_count")
+ private Integer spuSalesCount;
+
+ @TableField("spu_score")
+ private BigDecimal spuScore;
+}
diff --git a/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/vo/ProductVo.java b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/vo/ProductVo.java
new file mode 100644
index 0000000..1f7c8c8
--- /dev/null
+++ b/liang-springcloud-alibaba-goods-service/src/main/java/com/liang/sca/goods/model/vo/ProductVo.java
@@ -0,0 +1,30 @@
+package com.liang.sca.goods.model.vo;
+
+import com.liang.sca.goods.model.ProductSku;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class ProductVo {
+
+ private Long spuId;
+
+ private String spuName;
+
+ private String spuType;
+
+ private BigDecimal spuPrice;
+
+ private Integer spuStore;
+
+ private String spuDetail;
+
+ private Integer spuSalesCount;
+
+ private BigDecimal spuScore;
+
+ private List skus;
+
+}