From 0e658cc8f0eeed84609c554e03b96ab40a2fa9fc Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Thu, 28 Mar 2024 14:39:27 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20=E8=BF=9C=E7=A8=8B?=
=?UTF-8?q?=E8=B0=83=E7=94=A8=E5=88=9B=E5=BB=BA=E5=92=8C=E5=BC=95=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: bunny <1319900154@qq.com>
---
spzx-service-client/pom.xml | 24 +++++++
.../service-product-client/pom.xml | 4 --
.../feign/product/ProductFeignClient.java | 15 +++++
spzx-service/service-cart/pom.xml | 9 ++-
.../com/atguigu/cart/CartApplication.java | 4 ++
.../cart/controller/CartController.java | 28 ++++++++
.../com/atguigu/cart/service/CartService.java | 11 ++++
.../cart/service/impl/CartServiceImpl.java | 64 +++++++++++++++++++
spzx-service/service-product/pom.xml | 13 +---
.../product/controller/ProductController.java | 7 ++
.../product/service/ProductService.java | 8 +++
.../service/impl/ProductServiceImpl.java | 11 ++++
.../src/main/resources/application.yml | 4 +-
13 files changed, 179 insertions(+), 23 deletions(-)
create mode 100644 spzx-service-client/service-product-client/src/main/java/com/atguigu/feign/product/ProductFeignClient.java
create mode 100644 spzx-service/service-cart/src/main/java/com/atguigu/cart/controller/CartController.java
create mode 100644 spzx-service/service-cart/src/main/java/com/atguigu/cart/service/CartService.java
create mode 100644 spzx-service/service-cart/src/main/java/com/atguigu/cart/service/impl/CartServiceImpl.java
diff --git a/spzx-service-client/pom.xml b/spzx-service-client/pom.xml
index 27835ee..18c214d 100644
--- a/spzx-service-client/pom.xml
+++ b/spzx-service-client/pom.xml
@@ -23,5 +23,29 @@
+
+ com.atguigu
+ common-util
+ 1.0-SNAPSHOT
+
+
+
+ com.atguigu
+ spzx-model
+ 1.0-SNAPSHOT
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+
+
diff --git a/spzx-service-client/service-product-client/pom.xml b/spzx-service-client/service-product-client/pom.xml
index c8e6e6f..11597e9 100644
--- a/spzx-service-client/service-product-client/pom.xml
+++ b/spzx-service-client/service-product-client/pom.xml
@@ -16,8 +16,4 @@
UTF-8
-
-
-
-
diff --git a/spzx-service-client/service-product-client/src/main/java/com/atguigu/feign/product/ProductFeignClient.java b/spzx-service-client/service-product-client/src/main/java/com/atguigu/feign/product/ProductFeignClient.java
new file mode 100644
index 0000000..8f9dfde
--- /dev/null
+++ b/spzx-service-client/service-product-client/src/main/java/com/atguigu/feign/product/ProductFeignClient.java
@@ -0,0 +1,15 @@
+package com.atguigu.feign.product;
+
+import com.atguigu.spzx.model.entity.product.ProductSku;
+import com.atguigu.spzx.model.vo.result.Result;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+@Component
+@FeignClient(value = "service-product")
+public interface ProductFeignClient {
+ @GetMapping("getBySkuId/{skuId}")
+ Result getBySkuId(@PathVariable("skuId") Long skuId);
+}
diff --git a/spzx-service/service-cart/pom.xml b/spzx-service/service-cart/pom.xml
index 3d7467a..c4bf5d5 100644
--- a/spzx-service/service-cart/pom.xml
+++ b/spzx-service/service-cart/pom.xml
@@ -1,4 +1,4 @@
-
4.0.0
@@ -19,10 +19,9 @@
- junit
- junit
- 3.8.1
- test
+ com.atguigu
+ service-product-client
+ 1.0-SNAPSHOT
diff --git a/spzx-service/service-cart/src/main/java/com/atguigu/cart/CartApplication.java b/spzx-service/service-cart/src/main/java/com/atguigu/cart/CartApplication.java
index 672e6f2..06dfce8 100644
--- a/spzx-service/service-cart/src/main/java/com/atguigu/cart/CartApplication.java
+++ b/spzx-service/service-cart/src/main/java/com/atguigu/cart/CartApplication.java
@@ -3,9 +3,13 @@ package com.atguigu.cart;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
// 排除数据库的自动化配置,Cart微服务不需要访问数据库
+@ComponentScan("com.atguigu")
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+@EnableFeignClients(basePackages = {"com.atguigu"})
public class CartApplication {
public static void main(String[] args) {
SpringApplication.run(CartApplication.class, args);
diff --git a/spzx-service/service-cart/src/main/java/com/atguigu/cart/controller/CartController.java b/spzx-service/service-cart/src/main/java/com/atguigu/cart/controller/CartController.java
new file mode 100644
index 0000000..716db4c
--- /dev/null
+++ b/spzx-service/service-cart/src/main/java/com/atguigu/cart/controller/CartController.java
@@ -0,0 +1,28 @@
+package com.atguigu.cart.controller;
+
+import com.atguigu.cart.service.CartService;
+import com.atguigu.spzx.model.vo.result.Result;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+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;
+
+@Tag(name = "购物车接口")
+@RestController
+@RequestMapping("api/order/cart")
+public class CartController {
+ @Autowired
+ private CartService cartService;
+
+ @Operation(summary = "添加购物车")
+ @GetMapping("auth/addToCart/{skuId}/{skuNum}")
+ public Result addToCart(@Parameter(name = "skuId", description = "商品skuId", required = true) @PathVariable("skuId") Long skuId,
+ @Parameter(name = "skuNum", description = "数量", required = true) @PathVariable("skuNum") Integer skuNum) {
+ cartService.addToCart(skuId, skuNum);
+ return Result.success();
+ }
+}
\ No newline at end of file
diff --git a/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/CartService.java b/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/CartService.java
new file mode 100644
index 0000000..89d1b53
--- /dev/null
+++ b/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/CartService.java
@@ -0,0 +1,11 @@
+package com.atguigu.cart.service;
+
+public interface CartService {
+ /**
+ * 添加购物车
+ *
+ * @param skuId 商品的ID值
+ * @param skuNum 商品数量
+ */
+ void addToCart(Long skuId, Integer skuNum);
+}
diff --git a/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/impl/CartServiceImpl.java b/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/impl/CartServiceImpl.java
new file mode 100644
index 0000000..9cc33c0
--- /dev/null
+++ b/spzx-service/service-cart/src/main/java/com/atguigu/cart/service/impl/CartServiceImpl.java
@@ -0,0 +1,64 @@
+package com.atguigu.cart.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.atguigu.cart.service.CartService;
+import com.atguigu.context.BaseContext;
+import com.atguigu.feign.product.ProductFeignClient;
+import com.atguigu.spzx.model.entity.h5.CartInfo;
+import com.atguigu.spzx.model.entity.product.ProductSku;
+import com.atguigu.utils.EmptyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+public class CartServiceImpl implements CartService {
+ @Autowired
+ private RedisTemplate redisTemplate;
+ @Autowired
+ private EmptyUtil emptyUtil;
+ @Autowired
+ private ProductFeignClient productFeignClient;
+
+ /**
+ * 添加购物车
+ *
+ * @param skuId 商品的ID值
+ * @param skuNum 商品数量
+ */
+ @Override
+ public void addToCart(Long skuId, Integer skuNum) {
+ Long userId = BaseContext.getUserInfo().getId();
+ // 获取key名称
+ String cartKey = userId.toString();
+ Object cartInfoJson = redisTemplate.opsForHash().get(cartKey, String.valueOf(skuId));
+ // 如果不为空
+ CartInfo cartInfo = null;
+ if (cartInfoJson != null) {
+ cartInfo = JSON.parseObject(cartInfoJson.toString(), CartInfo.class);
+ // 数量相加
+ cartInfo.setSkuNum(cartInfo.getSkuNum() + skuNum);
+ // 购物车状态为选中
+ cartInfo.setIsChecked(1);
+ cartInfo.setUpdateTime(new Date());
+ } else {
+ cartInfo = new CartInfo();
+ // 远程调用,根据skuId获取商品
+ // 购物车数据是从商品详情得到 {skuInfo}
+ ProductSku productSku = productFeignClient.getBySkuId(skuId).getData();
+ cartInfo.setCartPrice(productSku.getSalePrice());
+ cartInfo.setSkuNum(skuNum);
+ cartInfo.setSkuId(skuId);
+ cartInfo.setUserId(userId);
+ cartInfo.setImgUrl(productSku.getThumbImg());
+ cartInfo.setSkuName(productSku.getSkuName());
+ cartInfo.setIsChecked(1);
+ cartInfo.setCreateTime(new Date());
+ cartInfo.setUpdateTime(new Date());
+ }
+ // 将商品数据存储到购物车中
+ redisTemplate.opsForHash().put(cartKey, String.valueOf(skuId), JSON.toJSONString(cartInfo));
+ }
+}
diff --git a/spzx-service/service-product/pom.xml b/spzx-service/service-product/pom.xml
index f47184d..65c7891 100644
--- a/spzx-service/service-product/pom.xml
+++ b/spzx-service/service-product/pom.xml
@@ -20,16 +20,5 @@
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 8
- 8
-
-
-
-
+
diff --git a/spzx-service/service-product/src/main/java/com/atguigu/product/controller/ProductController.java b/spzx-service/service-product/src/main/java/com/atguigu/product/controller/ProductController.java
index 016af4a..5951ab6 100644
--- a/spzx-service/service-product/src/main/java/com/atguigu/product/controller/ProductController.java
+++ b/spzx-service/service-product/src/main/java/com/atguigu/product/controller/ProductController.java
@@ -37,4 +37,11 @@ public class ProductController {
return Result.success(vo);
}
+
+ @Operation(summary = "获取ProductSku")
+ @GetMapping("getBySkuId/{skuId}")
+ public Result getBySkuId(@PathVariable Long skuId) {
+ ProductSku productSku = productService.getBySkuId(skuId);
+ return Result.success(productSku);
+ }
}
\ No newline at end of file
diff --git a/spzx-service/service-product/src/main/java/com/atguigu/product/service/ProductService.java b/spzx-service/service-product/src/main/java/com/atguigu/product/service/ProductService.java
index d6b30ca..15fe5b1 100644
--- a/spzx-service/service-product/src/main/java/com/atguigu/product/service/ProductService.java
+++ b/spzx-service/service-product/src/main/java/com/atguigu/product/service/ProductService.java
@@ -32,4 +32,12 @@ public interface ProductService {
* @return ProductItemVo
*/
ProductItemVo item(Long skuId);
+
+ /**
+ * 获取ProductSku
+ *
+ * @param skuId Id
+ * @return 获取ProductSku
+ */
+ ProductSku getBySkuId(Long skuId);
}
diff --git a/spzx-service/service-product/src/main/java/com/atguigu/product/service/impl/ProductServiceImpl.java b/spzx-service/service-product/src/main/java/com/atguigu/product/service/impl/ProductServiceImpl.java
index 74e35f6..cf8e427 100644
--- a/spzx-service/service-product/src/main/java/com/atguigu/product/service/impl/ProductServiceImpl.java
+++ b/spzx-service/service-product/src/main/java/com/atguigu/product/service/impl/ProductServiceImpl.java
@@ -89,4 +89,15 @@ public class ProductServiceImpl implements ProductService {
productItemVo.setSkuSpecValueMap(skuSpecValueMap);
return productItemVo;
}
+
+ /**
+ * 获取ProductSku
+ *
+ * @param skuId Id
+ * @return 获取ProductSku
+ */
+ @Override
+ public ProductSku getBySkuId(Long skuId) {
+ return productSkuMapper.getById(skuId);
+ }
}
diff --git a/spzx-service/service-product/src/main/resources/application.yml b/spzx-service/service-product/src/main/resources/application.yml
index f76f396..f5e3e40 100644
--- a/spzx-service/service-product/src/main/resources/application.yml
+++ b/spzx-service/service-product/src/main/resources/application.yml
@@ -1,12 +1,12 @@
server:
port: 8511
spring:
+ application:
+ name: service-product
profiles:
active: dev
main:
allow-bean-definition-overriding: true
- application:
- name: service-product
cloud:
nacos:
discovery: