From 439fc7bb98129cd1d6f9dab10589d4a24401a5f1 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期一, 13 一月 2025 16:20:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java |  136 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 122 insertions(+), 14 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 81f8194..aa8cea0 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
@@ -144,8 +144,31 @@
 		//查询符合商品类型的商品数据
 		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
 				.in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1));
+		//删除过期的秒杀活动商品
+		List<ShoppingCart> list1 = new ArrayList<>();
+		for (ShoppingCart shoppingCart : list) {
+			if(shoppingCart.getType() == 2){
+				GetSeckillActivityInfo info = new GetSeckillActivityInfo();
+				info.setGoodsId(shoppingCart.getGoodsId());
+				info.setVip(appUser.getVipId());
+				GoodsSeckill data1 = seckillActivityInfoClient.getSeckillActivityInfo(info).getData();
+				if(null != data1){
+					SeckillActivityInfo seckillActivityInfo = seckillActivityInfoClient.getSeckillActivityInfoById(data1.getSeckillActivityInfoId()).getData();
+					if(null != seckillActivityInfo && (seckillActivityInfo.getIsShelves() == 1 &&
+							seckillActivityInfo.getStartTime().isBefore(LocalDateTime.now()) && seckillActivityInfo.getEndTime().isAfter(LocalDateTime.now()))){
+						
+						list1.add(shoppingCart);
+						continue;
+					}
+				}
+				this.removeById(shoppingCart.getId());
+			}else{
+				list1.add(shoppingCart);
+			}
+		}
+		
 		//构建返回数据
-		List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list, null);
+		List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list1, null);
 		return page;
 	}
 
@@ -509,6 +532,10 @@
 		confirmOrderVo.setDiscountAmount(activityAmount);
 		int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
 		confirmOrderVo.setEarnPoint(earnPoint);
+		if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
+			paymentMoney = BigDecimal.ZERO;
+		}
+
 		//支付金额,订单金额-订单优惠
 		confirmOrderVo.setPayMoney(paymentMoney);
 		confirmOrderVo.setResidualPoint(appUser.getAvailablePoint().intValue());
@@ -916,6 +943,10 @@
 				}
 			}
 		}
+		if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
+			paymentMoney = BigDecimal.ZERO;
+		}
+
 		//构建订单明细
 		Order order = new Order();
 		order.setAppUserId(userid);
@@ -1036,21 +1067,98 @@
 		//开始构建支付数据
 		//现金支付
 		paymentMoney = paymentMoney.add(expressFee).setScale(2, RoundingMode.HALF_EVEN);
+		if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
+			paymentMoney = BigDecimal.ZERO;
+		}
 		if(1 == shoppingCartPayment.getPaymentType()){
-			//调起微信支付
-			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(), null);
-			if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
-				return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
+			if(BigDecimal.ZERO.compareTo(paymentMoney) < 0){
+				//调起微信支付
+				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(), 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(jsonObject.toJSONString());
+			}else{
+
+				earnPoint = order.getGetPoint();
+				appUser = appUserClient.getAppUserById(order.getAppUserId());
+				Integer lavePoint = appUser.getLavePoint();
+				paymentMoney = order.getPaymentAmount();
+				//构建积分流水记录
+				if(earnPoint > 0){
+					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.setShopPoint(appUser.getShopPoint() + earnPoint);
+					appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
+					appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint);
+					appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
+					appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + earnPoint1);
+
+					JSONObject jsonObject = new JSONObject();
+					jsonObject.put("shopPoint", earnPoint);
+					jsonObject.put("availablePoint", earnPoint1);
+					if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
+						appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
+						jsonObject.put("transferablePoint", earnPoint1);
+					}
+
+					UserPoint 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());
+					userPoint.setExtention(jsonObject.toJSONString());
+					userPointClient.saveUserPoint(userPoint);
+				}
+				appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
+				appUser.setLastShopTime(LocalDateTime.now());
+				appUserClient.editAppUserById(appUser);
+				//变更等级
+				appUserClient.vipUpgrade(appUser.getId());
+				//修改订支付状态
+				order.setPayStatus(2);
+				//自提
+				if(order.getOrderType() == 1 && StringUtils.isEmpty(order.getAddressJson())){
+					order.setOrderStatus(2);
+				}
+				orderService.updateById(order);
+
+				//处理优惠券
+				if(null != order.getUserCouponId()){
+					UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
+					if(null != userCoupon && null == userCoupon.getUseTime()){
+						userCoupon.setStatus(2);
+						userCoupon.setUseTime(LocalDateTime.now());
+						userCouponClient.editUserCoupon(userCoupon);
+					}
+				}
+				//添加查询快递信息队列
+				if(StringUtils.isNotEmpty(order.getExpressJson())){
+					//一小时后定时查询快递信息
+					redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(1).toEpochSecond(ZoneOffset.UTC));
+				}
+
+				//删除购物车数据
+				userid = tokenService.getLoginUserApplet().getUserid();
+				List<OrderGood> list1 = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId()));
+				List<Integer> goodsIds1 = list1.stream().map(OrderGood::getGoodsId).collect(Collectors.toList());
+				this.remove(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds1));
+
 			}
-			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(jsonObject.toJSONString());
 		}
 		//账户余额
 		BigDecimal redPacketAmount = BigDecimal.ZERO;

--
Gitblit v1.7.1