Pārlūkot izejas kodu

fix 购物车列表价格展示

zoujiajian 2 gadi atpakaļ
vecāks
revīzija
1a2a87ab0e

+ 9 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ShoppingCartDon.java

@@ -3,6 +3,8 @@ package com.cyksj.model.entity;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 项目名: yhlxj
  * 文件名: ShoppingCartDon
@@ -18,5 +20,12 @@ public class ShoppingCartDon extends BaseEntity{
 
 	private Long skuId;
 
+	private BigDecimal price;
+
+	/**
+	 * 是否是特定价格
+	 */
+	private Boolean isSpecificPrice;
+
 	private Integer num;
 }

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ShoppingCartDonReq.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDonReq
+ * 创建者: JavaZou
+ * 创建时间:2023/10/16 17:03
+ */
+@Getter
+@Setter
+public class ShoppingCartDonReq {
+	private Long userId;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Integer num;
+
+	private BigDecimal price;
+}

+ 20 - 6
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuDetailView.java

@@ -1,11 +1,13 @@
  package com.cyksj.model.views;
 
-import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.SearchBean;
-import lombok.Getter;
-import lombok.Setter;
+ import com.ejlchina.searcher.bean.DbField;
+ import com.ejlchina.searcher.bean.SearchBean;
+ import lombok.Getter;
+ import lombok.Setter;
 
-/**
+ import java.math.BigDecimal;
+
+ /**
  * 项目名: yhlxj
  * 文件名: GoodsDonSkuDetailView
  * 创建者: JavaZou
@@ -33,4 +35,16 @@ public class GoodsDonSkuDetailView {
 
 	@DbField("g.status")
 	private Boolean goodsSkuStatus;
-}
+
+	@DbField("sku.price")
+	private BigDecimal price;
+
+	@DbField("sku.price")
+	private BigDecimal specificPrice;
+
+	 /**
+	  * 特定购买平台
+	  */
+	 @DbField("sku.specific_goods_ids")
+	 private String specificGoodsIds;
+ }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ShoppingCartDonView.java

@@ -5,6 +5,7 @@ import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -36,6 +37,9 @@ public class ShoppingCartDonView {
 	@DbField("sc.num")
 	private Integer num;
 
+	@DbField("sc.price")
+	private BigDecimal price;
+
 	@DbField("sc.created_time")
 	private Date createdTime;
 }

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/order/ShoppingCartDonService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.order;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.ShoppingCartDon;
+import com.cyksj.model.request.ShoppingCartDonReq;
 import com.cyksj.model.request.UnifiedOrderPayReq;
 import com.cyksj.model.views.ShoppingCartDonPayDetailView;
 
@@ -12,7 +13,7 @@ import com.cyksj.model.views.ShoppingCartDonPayDetailView;
  * 创建时间:2023/10/12 16:01
  */
 public interface ShoppingCartDonService extends IService<ShoppingCartDon> {
-	void addGoodsShoppingCart(ShoppingCartDon goodsCartDon);
+	void addGoodsShoppingCart(ShoppingCartDonReq goodsCartDon) throws Exception;
 
 	ShoppingCartDonPayDetailView unifiedPayShoppingCartGoods(UnifiedOrderPayReq unifiedOrderPayReq);
 }

+ 37 - 2
netflix-service/src/main/java/com/cyksj/service/order/impl/ShoppingCartOrderServiceImpl.java

@@ -1,23 +1,31 @@
 package com.cyksj.service.order.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.order.ShoppingCartDonMapper;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.ShoppingCartDon;
 import com.cyksj.model.request.OrderPayRequest;
+import com.cyksj.model.request.ShoppingCartDonReq;
 import com.cyksj.model.request.UnifiedOrderPayReq;
 import com.cyksj.model.views.GoodsDonSkuDetailView;
 import com.cyksj.model.views.ShoppingCartDonPayDetailView;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.order.ShoppingCartDonService;
 import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 项目名: yhlxj
@@ -32,13 +40,15 @@ public class ShoppingCartOrderServiceImpl extends ServiceImpl<ShoppingCartDonMap
 
 	private final OrderDonService orderDonService;
 	@Override
-	public void addGoodsShoppingCart(ShoppingCartDon goodsCartDon) {
+	public void addGoodsShoppingCart(ShoppingCartDonReq req) throws Exception {
 		//最多添加购物车数量30
 		int count = this.count(Wrappers.lambdaQuery(ShoppingCartDon.class)
-				.eq(ShoppingCartDon::getUserId, goodsCartDon.getUserId()));
+				.eq(ShoppingCartDon::getUserId, req.getUserId()));
 		if (count >= 30) {
 			throw BusinessRuntimeException.getInstance("最多添加30件商品至购物车");
 		}
+		ShoppingCartDon goodsCartDon = new ShoppingCartDon();
+		BeanUtil.copyProperties(req, goodsCartDon);
 		Long skuId = goodsCartDon.getSkuId();
 		if (skuId == null) {
 			throw BusinessRuntimeException.getInstance("请指定商品添加至购物车");
@@ -54,9 +64,34 @@ public class ShoppingCartOrderServiceImpl extends ServiceImpl<ShoppingCartDonMap
 		if (!goodsDonSkuDetailView.getGoodsSkuStatus()) {
 			throw BusinessRuntimeException.getInstance("该商品规格已下架..");
 		}
+		BigDecimal shopCartPrice = goodsCartDon.getPrice();
+		if (shopCartPrice == null) {
+			throw BusinessRuntimeException.getInstance("添加购物车的商品价格为空");
+		}
+		BigDecimal price = goodsDonSkuDetailView.getPrice();
+		BigDecimal specificPrice = goodsDonSkuDetailView.getSpecificPrice();
+		String specificGoodsIdsStr = goodsDonSkuDetailView.getSpecificGoodsIds();
+		Boolean isSpecificPrice = false;
+		if (specificPrice != null && shopCartPrice.compareTo(specificPrice) == 0) {
+			//是否满足特定价格添加至购物车
+			Set<Long> specificGoodsIds = Jsons.parseSet(specificGoodsIdsStr, Long.class);
+			Number number = beanSearcher.searchCount(OrderDon.class, MapUtils.builder().field(OrderDon::getGoodsId, specificGoodsIds).op(Operator.InList)
+					.field(OrderDon::getUserId, goodsCartDon.getUserId())
+					.field(OrderDon::getStatus, Constant.noOrderAllStatus).op(Operator.NotIn)
+					.build());
+			if (number.intValue() == 0) {
+				throw BusinessRuntimeException.getInstance("您不满足该商品的特定价格要求");
+			}
+			isSpecificPrice = true;
+			goodsCartDon.setIsSpecificPrice(true);
+		}
+		if (!isSpecificPrice && shopCartPrice.compareTo(price) < 0) {
+			shopCartPrice = price;
+		}
 		if (goodsCartDon.getNum() == null) {
 			goodsCartDon.setNum(1);
 		}
+		goodsCartDon.setPrice(shopCartPrice);
 		goodsCartDon.setGoodsId(goodsDonSkuDetailView.getGoodsId());
 		goodsCartDon.setSkuId(skuId);
 		this.save(goodsCartDon);

+ 3 - 4
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderShopCartController.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.entity.ShoppingCartDon;
-import com.cyksj.model.request.OrderPayRequest;
+import com.cyksj.model.request.ShoppingCartDonReq;
 import com.cyksj.model.request.UnifiedOrderPayReq;
 import com.cyksj.model.views.ShoppingCartDonPayDetailView;
 import com.cyksj.model.views.ShoppingCartDonView;
@@ -18,9 +18,8 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
 
-/**
+/** server/购物车
  * 项目名: yhlxj
  * 文件名: OrderShopCartController
  * 创建者: JavaZou
@@ -40,7 +39,7 @@ public class OrderShopCartController {
 	 * 将商品添加至购物车
 	 */
 	@PostMapping("/add")
-	public Result<String> addGoodsShoppingCart(@RequestBody ShoppingCartDon goods) {
+	public Result<String> addGoodsShoppingCart(@RequestBody ShoppingCartDonReq goods) throws Exception {
 		long userId = StpUserUtil.getLoginIdAsLong();
 		goods.setUserId(userId);
 		shoppingCartDonService.addGoodsShoppingCart(goods);