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: