From 85846516f1986a3320d0909be4e392936b142aa3 Mon Sep 17 00:00:00 2001
From: YunaiV <>
Date: Thu, 21 Feb 2019 20:12:29 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=88=E6=9C=AA=E5=AE=8C=E6=88=90=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 25 ++++++
pom.xml | 21 +++++
product/pom.xml | 21 +++++
product/product-application/pom.xml | 52 ++++++++++++
.../mall/product/ProductRestApplication.java | 13 +++
.../iocoder/mall/product/bo/ProductSkuBO.java | 15 ++++
.../iocoder/mall/product/bo/ProductSpuBO.java | 15 ++++
.../controller/ProductCategoryController.java | 22 +++++
.../controller/ProductSpuController.java | 31 +++++++
.../mall/product/dao/ProductSpuDAO.java | 15 ++++
.../product/dataobject/ProductAttrDO.java | 34 ++++++++
.../dataobject/ProductAttrValueDO.java | 38 +++++++++
.../product/dataobject/ProductCategoryDO.java | 52 ++++++++++++
.../mall/product/dataobject/ProductSkuDO.java | 59 +++++++++++++
.../mall/product/dataobject/ProductSpuDO.java | 82 +++++++++++++++++++
.../product/dataobject/ProductStockDO.java | 38 +++++++++
.../product/service/ProductSpuService.java | 23 ++++++
.../mall/product/vo/ProductCategoryVO.java | 4 +
.../mall/product/vo/ProductSpuListVO.java | 16 ++++
.../iocoder/mall/product/vo/ProductSpuVO.java | 4 +
.../src/main/resources/application.properties | 15 ++++
product/product-service-api/pom.xml | 14 ++++
.../service/api/ProductSpuService.java | 4 +
23 files changed, 613 insertions(+)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 product/pom.xml
create mode 100644 product/product-application/pom.xml
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/ProductRestApplication.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSkuBO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSpuBO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductCategoryController.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductSpuController.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dao/ProductSpuDAO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductStockDO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/service/ProductSpuService.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductCategoryVO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuListVO.java
create mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuVO.java
create mode 100644 product/product-application/src/main/resources/application.properties
create mode 100644 product/product-service-api/pom.xml
create mode 100644 product/product-service-api/src/main/java/cn/iocoder/mall/product/service/api/ProductSpuService.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..08c97607f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+/build/
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 000000000..1caaaca08
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.3.RELEASE
+
+
+
+ cn.iocoder.mall
+ mall-parent
+ 1.0-SNAPSHOT
+
+ product
+
+ pom
+
+
\ No newline at end of file
diff --git a/product/pom.xml b/product/pom.xml
new file mode 100644
index 000000000..eb58b3c4c
--- /dev/null
+++ b/product/pom.xml
@@ -0,0 +1,21 @@
+
+
+
+ mall-parent
+ cn.iocoder.mall
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ product
+ pom
+
+ product-application
+ product-service
+ product-service-api
+
+
+
+
\ No newline at end of file
diff --git a/product/product-application/pom.xml b/product/product-application/pom.xml
new file mode 100644
index 000000000..01a6224d5
--- /dev/null
+++ b/product/product-application/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ product
+ cn.iocoder.mall
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ product-rest
+
+
+
+ cn.iocoder.mall
+ product-service-api
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.alibaba
+ dubbo
+ 2.6.5
+
+
+
+ com.alibaba.boot
+ dubbo-spring-boot-starter
+ 0.2.1.RELEASE
+
+
+
+ org.apache.curator
+ curator-framework
+ 2.12.0
+
+
+
+
+
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/ProductRestApplication.java b/product/product-application/src/main/java/cn/iocoder/mall/product/ProductRestApplication.java
new file mode 100644
index 000000000..0af823ca0
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/ProductRestApplication.java
@@ -0,0 +1,13 @@
+package cn.iocoder.mall.product;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ProductRestApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProductRestApplication.class, args);
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSkuBO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSkuBO.java
new file mode 100644
index 000000000..858ab2272
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSkuBO.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.product.bo;
+
+public class ProductSkuBO {
+
+ private Integer id;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSpuBO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSpuBO.java
new file mode 100644
index 000000000..06b881899
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/bo/ProductSpuBO.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.product.bo;
+
+public class ProductSpuBO {
+
+ private Integer id;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductCategoryController.java b/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductCategoryController.java
new file mode 100644
index 000000000..fbe5d1b62
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductCategoryController.java
@@ -0,0 +1,22 @@
+package cn.iocoder.mall.product.controller;
+
+import cn.iocoder.mall.product.vo.ProductCategoryVO;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/product/category")
+public class ProductCategoryController {
+
+ // TODO 获得父编号为 id 的分类们 后面,使用 swagger 注释
+ @GetMapping
+ public List list(@RequestParam("id") Integer id) {
+ return new ArrayList<>();
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductSpuController.java b/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductSpuController.java
new file mode 100644
index 000000000..a11b616b3
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/controller/ProductSpuController.java
@@ -0,0 +1,31 @@
+package cn.iocoder.mall.product.controller;
+
+import cn.iocoder.mall.product.bo.ProductSpuBO;
+import cn.iocoder.mall.product.service.ProductSpuService;
+import cn.iocoder.mall.product.vo.ProductSpuListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/product/spu")
+public class ProductSpuController {
+
+ @Autowired
+ private ProductSpuService productSpuService;
+
+ // TODO 详情
+ @GetMapping("/info")
+ public ProductSpuBO info(@RequestParam("id") Integer id) {
+ return productSpuService.getProductSpu(id);
+ }
+
+ // TODO 分页
+ @GetMapping("/list")
+ public ProductSpuListVO list() {
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dao/ProductSpuDAO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dao/ProductSpuDAO.java
new file mode 100644
index 000000000..84ff091ae
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dao/ProductSpuDAO.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.product.dao;
+
+import cn.iocoder.mall.product.dataobject.ProductSpuDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class ProductSpuDAO {
+
+ public ProductSpuDO selectById(Integer id) {
+ ProductSpuDO spu = new ProductSpuDO();
+ spu.setId(id);
+ return spu;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java
new file mode 100644
index 000000000..450e8e075
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java
@@ -0,0 +1,34 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * Product 规格
+ */
+public class ProductAttrDO {
+
+ /**
+ * 规格编号
+ */
+ private Integer id;
+ /**
+ * 名称
+ */
+ private String name;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 最后更新时间
+ */
+ private Date updateTime;
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java
new file mode 100644
index 000000000..9ebdb6672
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * Product 规格值
+ */
+public class ProductAttrValueDO {
+
+ /**
+ * 规格值编号
+ */
+ private Integer id;
+ /**
+ * 规格编号
+ */
+ private Integer attrId;
+ /**
+ * 规格值
+ */
+ private String name;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 最后更新时间
+ */
+ private Date updateTime;
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java
new file mode 100644
index 000000000..4b944551c
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java
@@ -0,0 +1,52 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * 商品分类
+ */
+public class ProductCategoryDO {
+
+ /**
+ * 分类编号
+ */
+ private Integer id;
+ /**
+ * 父分类编号
+ *
+ * 如果不存在父级,则 pid = 0 。
+ */
+ private Integer pid;
+ /**
+ * 名称
+ */
+ private String name;
+ /**
+ * 描述
+ */
+ private String description;
+ /**
+ * 分类图片
+ */
+ private String picURL;
+ /**
+ * 排序值
+ */
+ private Integer sort;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 最后更新时间
+ */
+ private Date updateTime;
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+
+}
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
new file mode 100644
index 000000000..737c0eaf6
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
@@ -0,0 +1,59 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * 商品 SKU
+ */
+public class ProductSkuDO {
+
+ /**
+ * sku 编号
+ */
+ private Integer id;
+ /**
+ * 商品编号
+ */
+ private Integer itemId;
+
+ // TODO 店铺编号
+
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+ /**
+ * 图片地址
+ */
+ private String picURL;
+ /**
+ * 规格值({@link ProductAttrDO})数组
+ *
+ * 数组,以逗号分隔
+ */
+ private String attrs;
+ /**
+ * 价格,单位分
+ */
+ private Integer price;
+ /**
+ * 商品在付款减库存的状态下,该Sku上未付款的订单数量
+ */
+ private Integer withHoldQuantity;
+ /**
+ * 销量
+ */
+ private Integer soldNum;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
new file mode 100644
index 000000000..f406b7f8b
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
@@ -0,0 +1,82 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * 商品 SPU
+ */
+public class ProductSpuDO {
+
+ // ========== 基础字段 =========
+
+ /**
+ * SPU 编号
+ */
+ private Integer id;
+
+ // TODO 店铺编号
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 最后更新时间
+ */
+ private Date updateTime;
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+
+ // ========== 基本信息 =========
+ /**
+ * SPU 名字
+ */
+ private String name;
+ /**
+ * SPU 描述
+ */
+ private String descrption;
+ /**
+ * 分类编号
+ */
+ private Integer cid;
+ /**
+ * 商品主图地址
+ *
+ * 数组,以逗号分隔
+ *
+ * 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张
+ */
+ private String picURLs;
+
+ // TODO 价格库存
+
+ // TODO 运费信息
+
+ // ========== 其他信息 =========
+ /**
+ * 是否上架商品(是否可见)。
+ *
+ * true 为已上架
+ * false 为已下架
+ */
+ private Boolean visible;
+ /**
+ * 排序字段
+ */
+ private Integer order;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductStockDO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductStockDO.java
new file mode 100644
index 000000000..ff1e814ae
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/dataobject/ProductStockDO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.mall.product.dataobject;
+
+import java.util.Date;
+
+/**
+ * Product 库存
+ */
+public class ProductStockDO {
+
+ /**
+ * 编号,自增
+ */
+ private Integer id;
+ /**
+ * SKU 编号
+ */
+ private Integer skuId;
+ /**
+ * 库存数
+ */
+ private Integer quantity;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 最后更新时间
+ */
+ private Date updateTime;
+ /**
+ * 状态
+ *
+ * 1-正常
+ * 2-删除
+ */
+ private Integer status;
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/service/ProductSpuService.java b/product/product-application/src/main/java/cn/iocoder/mall/product/service/ProductSpuService.java
new file mode 100644
index 000000000..b74d83122
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/service/ProductSpuService.java
@@ -0,0 +1,23 @@
+package cn.iocoder.mall.product.service;
+
+import cn.iocoder.mall.product.bo.ProductSpuBO;
+import cn.iocoder.mall.product.dao.ProductSpuDAO;
+import cn.iocoder.mall.product.dataobject.ProductSpuDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service // 实际上不用添加。添加的原因是,必须 Spring 报错提示
+@com.alibaba.dubbo.config.annotation.Service
+public class ProductSpuService implements cn.iocoder.mall.product.service.api.ProductSpuService {
+
+ @Autowired
+ private ProductSpuDAO productSpuDAO;
+
+ public ProductSpuBO getProductSpu(Integer id) {
+ ProductSpuDO productSpuDO = productSpuDAO.selectById(id);
+ ProductSpuBO productSpuBO = new ProductSpuBO(); // TODO 芋艿,后面改下
+ productSpuBO.setId(productSpuDO.getId());
+ return productSpuBO;
+ }
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductCategoryVO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductCategoryVO.java
new file mode 100644
index 000000000..d6e1fbf0c
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductCategoryVO.java
@@ -0,0 +1,4 @@
+package cn.iocoder.mall.product.vo;
+
+public class ProductCategoryVO {
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuListVO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuListVO.java
new file mode 100644
index 000000000..3b70bbf35
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuListVO.java
@@ -0,0 +1,16 @@
+package cn.iocoder.mall.product.vo;
+
+import java.util.List;
+
+public class ProductSpuListVO {
+
+ /**
+ * SPU 数组
+ */
+ private List list;
+ /**
+ * 是否还有下一页
+ */
+ private Boolean hasNext;
+
+}
\ No newline at end of file
diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuVO.java b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuVO.java
new file mode 100644
index 000000000..8e2e1b892
--- /dev/null
+++ b/product/product-application/src/main/java/cn/iocoder/mall/product/vo/ProductSpuVO.java
@@ -0,0 +1,4 @@
+package cn.iocoder.mall.product.vo;
+
+public class ProductSpuVO {
+}
diff --git a/product/product-application/src/main/resources/application.properties b/product/product-application/src/main/resources/application.properties
new file mode 100644
index 000000000..3bb6630a7
--- /dev/null
+++ b/product/product-application/src/main/resources/application.properties
@@ -0,0 +1,15 @@
+# Spring boot application
+spring.application.name=product-rest
+# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
+dubbo.scan.base-packages=cn.iocoder.mall.product.service
+
+# Dubbo Protocol
+dubbo.protocol.name=dubbo
+## Random port
+dubbo.protocol.port=-1
+
+## Dubbo Registry
+dubbo.registry.address=zookeeper://127.0.0.1:2181
+
+## DemoService version
+demo.service.version=1.0.0
\ No newline at end of file
diff --git a/product/product-service-api/pom.xml b/product/product-service-api/pom.xml
new file mode 100644
index 000000000..e85bd9c75
--- /dev/null
+++ b/product/product-service-api/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ product
+ cn.iocoder.mall
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ product-service-api
+
+
\ No newline at end of file
diff --git a/product/product-service-api/src/main/java/cn/iocoder/mall/product/service/api/ProductSpuService.java b/product/product-service-api/src/main/java/cn/iocoder/mall/product/service/api/ProductSpuService.java
new file mode 100644
index 000000000..5529bfeaa
--- /dev/null
+++ b/product/product-service-api/src/main/java/cn/iocoder/mall/product/service/api/ProductSpuService.java
@@ -0,0 +1,4 @@
+package cn.iocoder.mall.product.service.api;
+
+public interface ProductSpuService {
+}