From eb5d7885fa9e4bd20c0827eec9b4cdd48c47b509 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 07 一月 2025 09:11:20 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java |  163 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 105 insertions(+), 58 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
index 3c5614f..6016597 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -142,7 +142,8 @@
 		}
 		List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList());
 		//查询符合商品类型的商品数据
-		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds));
+		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
+				.in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1));
 		//构建返回数据
 		List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list, null);
 		return page;
@@ -156,7 +157,7 @@
 	 * @param shopId
 	 * @return
 	 */
-	public Price getPrice(AppUser appUser, Integer goodsId, Integer shopId){
+	public Price getPrice(AppUser appUser, Integer goodsId, Integer type, Integer shopId){
 		//获取支付价格
 		//秒杀活动>门店特价>地区价格>会员价格
 		//判断是否有秒杀活动
@@ -165,7 +166,8 @@
 		info.setGoodsId(goodsId);
 		info.setVip(appUser.getVipId());
 		GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(info).getData();
-		if(null == goodsSeckill){
+		//没有秒杀活动或者添加的普通商品则不使用秒杀活动价格
+		if(null == goodsSeckill || type == 1){
 			//没有秒杀价,则判断门店特价
 			GetGoodsBargainPrice goodsBargainPrice = new GetGoodsBargainPrice();
 			goodsBargainPrice.setGoodsId(goodsId);
@@ -288,9 +290,18 @@
 	@Override
 	public Long addGoods(ShoppingCart shoppingCart) {
 		Long userid = tokenService.getLoginUserApplet().getUserid();
-		shoppingCart.setAppUserId(userid);
-		this.save(shoppingCart);
-		return shoppingCart.getId();
+		ShoppingCart one = this.getOne(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
+				.eq(ShoppingCart::getGoodsId, shoppingCart.getGoodsId()).eq(ShoppingCart::getType, shoppingCart.getType()).eq(ShoppingCart::getStatus, 1));
+		if(null != one){
+			one.setNumber(one.getNumber() + shoppingCart.getNumber());
+			this.updateById(one);
+			return one.getId();
+		}else{
+			shoppingCart.setAppUserId(userid);
+			shoppingCart.setStatus(1);
+			this.save(shoppingCart);
+			return shoppingCart.getId();
+		}
 	}
 
 
@@ -336,12 +347,15 @@
 			JSONArray objects = JSON.parseArray(goodsJson);
 			Long id = objects.getJSONObject(0).getLong("id");
 			Integer num1 = objects.getJSONObject(0).getInteger("num");
+			Integer type = objects.getJSONObject(0).getInteger("type");
 			ShoppingCart shoppingCart = new ShoppingCart();
 			shoppingCart.setAppUserId(userid);
 			shoppingCart.setGoodsId(id.intValue());
 			shoppingCart.setNumber(num1);
-			Long shoppingCarId = addGoods(shoppingCart);
-			confirmOrder.setGoodsJson("[{\"id\": " + shoppingCarId + ", \"num\": " + num1 + "}]");
+			shoppingCart.setType(type);
+			shoppingCart.setStatus(0);
+			this.save(shoppingCart);
+			confirmOrder.setGoodsJson("[{\"id\": " + shoppingCart.getId() + ", \"num\": " + num1 + ",\"type\":" + type + "}]");
 		}
 		AppUser appUser = appUserClient.getAppUserById(userid);
 		Integer shopId = confirmOrder.getShopId();
@@ -362,10 +376,16 @@
 		confirmOrderVo.setShopName(shop.getName());
 		//现金支付
 		if(confirmOrder.getPaymentType() == 1){
-			BigDecimal bigDecimal = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get();
+			BigDecimal bigDecimal = BigDecimal.ZERO;
+			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
+				bigDecimal = bigDecimal.add(myShoppingCartVo.getCash().multiply(new BigDecimal(myShoppingCartVo.getNumber())));
+			}
 			confirmOrderVo.setOrderMoney(bigDecimal);
 		}else{
-			int sum = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum();
+			int sum = 0;
+			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
+				sum += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
+			}
 			confirmOrderVo.setOrderPoint(sum);
 		}
 		//查询当前是否有订单活动
@@ -474,6 +494,7 @@
 			Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
 			MyShoppingCartVo vo = new MyShoppingCartVo();
 			vo.setId(shoppingCart.getId().toString());
+			vo.setType(shoppingCart.getType());
 			vo.setGoodsId(goods.getId());
 			vo.setHomePicture(goods.getHomePagePicture());
 			vo.setName(goods.getName());
@@ -488,7 +509,7 @@
 				}
 			}
 			//获取支付价格
-			Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
+			Price price = getPrice(appUser, shoppingCart.getGoodsId(), shoppingCart.getType(), shopId);
 			if(null == price){
 				price = new Price();
 				//使用商品的基础价格
@@ -512,6 +533,7 @@
 			//判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
 			if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){
 				vo.setPurchaseLimit(false);
+				vo.setPurchaseLimitNum(-1);
 			}else{
 				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8)));
 				List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
@@ -565,7 +587,7 @@
 			//判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
 			Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
 			if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit()){
-				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8)));
+				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).notIn(Order::getOrderStatus, Arrays.asList(5, 6)));
 				List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
 				int sum = 0;
 				if(orderIds.size() > 0){
@@ -881,15 +903,17 @@
 			//调起微信支付
 			String goodsNames = goodsList.stream().map(MyShoppingCartVo::getName).collect(Collectors.joining("\n"));
 			UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber(), paymentMoney.doubleValue(), order.getOrderType() == 1 ? "购买服务商品" : "购买单品商品",
-					goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), "");
+					goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), null);
 			if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
 				return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
 			}
 			String rc_result = uniPayResult.getRc_Result();
+			JSONObject jsonObject = JSON.parseObject(rc_result);
+			jsonObject.put("orderId", order.getId().toString());
 			//将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
 			long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
 			redisTemplate.opsForZSet().add("OrderPayment", order.getOrderNumber(), second);
-			return R.ok(rc_result);
+			return R.ok(jsonObject.toJSONString());
 		}
 		//账户余额
 		BigDecimal redPacketAmount = BigDecimal.ZERO;
@@ -942,15 +966,17 @@
 					appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
 				}
 
-				UserPoint userPoint = new UserPoint();
-				userPoint.setType(1);
-				userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
-				userPoint.setVariablePoint(earnPoint);
-				userPoint.setBalance(appUser.getLavePoint());
-				userPoint.setCreateTime(LocalDateTime.now());
-				userPoint.setAppUserId(appUser.getId());
-				userPoint.setObjectId(order.getId());
-				userPointClient.saveUserPoint(userPoint);
+				if(earnPoint > 0){
+					UserPoint userPoint = new UserPoint();
+					userPoint.setType(1);
+					userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
+					userPoint.setVariablePoint(earnPoint);
+					userPoint.setBalance(appUser.getLavePoint());
+					userPoint.setCreateTime(LocalDateTime.now());
+					userPoint.setAppUserId(appUser.getId());
+					userPoint.setObjectId(order.getId());
+					userPointClient.saveUserPoint(userPoint);
+				}
 			}
 			appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
 			appUser.setLastShopTime(LocalDateTime.now());
@@ -984,29 +1010,52 @@
 				if(shoppingCartPayment.getFreightPaymentType() == 1){
 					//调起微信支付
 					UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber() + appUser.getId(), expressFee.doubleValue(), order.getOrderType() == 1 ? "购买服务商品快递费" : "购买单品商品快递费",
-							"快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", appUser.getWxOpenid(), "");
+							"快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", appUser.getWxOpenid(), null);
 					if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
 						return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
 					}
 					String rc_result = uniPayResult.getRc_Result();
+					JSONObject jsonObject = JSON.parseObject(rc_result);
+					jsonObject.put("orderId", order.getId().toString());
 					//将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
 					long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
 					redisTemplate.opsForZSet().add("MaterialFlowPayment", order.getOrderNumber() + appUser.getId(), second);
-					return R.ok(rc_result);
+					return R.ok(jsonObject.toJSONString());
 				}
 			}
-			
+
 			Integer lavePoint = appUser.getLavePoint();
+			//扣减订单支付积分
+			appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
+			appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
+			//可转增积分
+			Integer transferablePoint = appUser.getTransferablePoint();
+			Integer tra = 0;
+			if(transferablePoint > 0){
+				tra = transferablePoint - orderPoint;
+				appUser.setTransferablePoint(tra >= 0 ? tra : 0);
+			}
+			appUser.setTransferablePoint(appUser.getTransferablePoint() - orderPoint);
+
+			//构建积分流水记录
+			UserPoint userPoint = new UserPoint();
+			userPoint.setType(11);
+			userPoint.setHistoricalPoint(lavePoint);
+			userPoint.setVariablePoint(orderPoint);
+			userPoint.setBalance(appUser.getLavePoint());
+			userPoint.setCreateTime(LocalDateTime.now());
+			userPoint.setAppUserId(appUser.getId());
+			userPoint.setObjectId(order.getId());
+			userPoint.setExtention((tra >= 0 ? orderPoint : transferablePoint) + "");
+			userPointClient.saveUserPoint(userPoint);
+
+			lavePoint = appUser.getLavePoint();
 			PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
 			int earnPoint1 = 0;
 			//计算可用积分比例
 			if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
 				earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
 			}
-			//扣减订单支付积分
-			appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
-			appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
-			
 			appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
 			appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
 			appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
@@ -1021,16 +1070,17 @@
 			appUserClient.vipUpgrade(appUser.getId());
 
 			//构建积分流水记录
-			UserPoint userPoint = new UserPoint();
-			userPoint.setType(1);
-			userPoint.setHistoricalPoint(lavePoint);
-			Integer point = appUser.getLavePoint() - lavePoint;
-			userPoint.setVariablePoint(point >= 0 ? point : point * -1);
-			userPoint.setBalance(appUser.getLavePoint());
-			userPoint.setCreateTime(LocalDateTime.now());
-			userPoint.setAppUserId(appUser.getId());
-			userPoint.setObjectId(order.getId());
-			userPointClient.saveUserPoint(userPoint);
+			if(earnPoint > 0){
+				userPoint = new UserPoint();
+				userPoint.setType(1);
+				userPoint.setHistoricalPoint(lavePoint);
+				userPoint.setVariablePoint(earnPoint);
+				userPoint.setBalance(appUser.getLavePoint());
+				userPoint.setCreateTime(LocalDateTime.now());
+				userPoint.setAppUserId(appUser.getId());
+				userPoint.setObjectId(order.getId());
+				userPointClient.saveUserPoint(userPoint);
+			}
 			//如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单
 			if(expressFee.compareTo(BigDecimal.ZERO) > 0){
 				if(shoppingCartPayment.getFreightPaymentType() == 2){
@@ -1145,15 +1195,17 @@
 			appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
 			appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + earnPoint1);
 			
-			UserPoint userPoint = new UserPoint();
-			userPoint.setType(1);
-			userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
-			userPoint.setVariablePoint(earnPoint);
-			userPoint.setBalance(appUser.getLavePoint());
-			userPoint.setCreateTime(LocalDateTime.now());
-			userPoint.setAppUserId(appUser.getId());
-			userPoint.setObjectId(order.getId());
-			userPointClient.saveUserPoint(userPoint);
+			if(earnPoint > 0){
+				UserPoint userPoint = new UserPoint();
+				userPoint.setType(1);
+				userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
+				userPoint.setVariablePoint(earnPoint);
+				userPoint.setBalance(appUser.getLavePoint());
+				userPoint.setCreateTime(LocalDateTime.now());
+				userPoint.setAppUserId(appUser.getId());
+				userPoint.setObjectId(order.getId());
+				userPointClient.saveUserPoint(userPoint);
+			}
 		}
 		appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
 		appUser.setLastShopTime(LocalDateTime.now());
@@ -1192,17 +1244,12 @@
 		Integer earnPoint = order.getGetPoint();
 		AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
 		Integer lavePoint = appUser.getLavePoint();
-		Integer orderPoint = order.getPoint();
 		PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
-		int earnPoint1 = earnPoint;
+		int earnPoint1 = 0;
 		//计算可用积分比例
 		if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
-			earnPoint1 = new BigDecimal(earnPoint1).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
+			earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
 		}
-		//扣减订单支付积分
-		appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
-		appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
-		
 		appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
 		appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
 		appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
@@ -1217,13 +1264,13 @@
 		UserPoint userPoint = new UserPoint();
 		userPoint.setType(1);
 		userPoint.setHistoricalPoint(lavePoint);
-		Integer point = appUser.getLavePoint() - lavePoint;
-		userPoint.setVariablePoint(point >= 0 ? point : point * -1);
+		userPoint.setVariablePoint(earnPoint);
 		userPoint.setBalance(appUser.getLavePoint());
 		userPoint.setCreateTime(LocalDateTime.now());
 		userPoint.setAppUserId(appUser.getId());
 		userPoint.setObjectId(order.getId());
 		userPointClient.saveUserPoint(userPoint);
+
 		//修改订支付状态
 		order.setPayStatus(2);
 		//自提

--
Gitblit v1.7.1