From a56427e084bbf90c081d0032731250993455de45 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 13 一月 2025 16:18:59 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 157 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 118 insertions(+), 39 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 80522d8..0bd2117 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; } @@ -485,19 +508,26 @@ //满XX才打折,只有现金才能优惠 if((confirmOrderVo.getUseSimultaneously() || (!confirmOrderVo.getUseSimultaneously() && activityAmount.equals(BigDecimal.ZERO))) && null != orderActivityInfo && confirmOrder.getPaymentType() == 1){ + BigDecimal zyh = BigDecimal.ZERO; + OrderActivityInfo activityInfo1 = null; for (OrderActivityInfo activityInfo : orderActivityInfo) { if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){ - confirmOrderVo.setActivityName(activityInfo.getActivityName()); //优惠后的支付金额 BigDecimal multiply = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); //优惠金额 BigDecimal bigDecimal = paymentMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN); - paymentMoney = multiply; - activityAmount = activityAmount.add(bigDecimal); - break; + if(bigDecimal.compareTo(zyh) > 0){ + zyh = bigDecimal; + activityInfo1 = activityInfo; + } } } + if(null != activityInfo1){ + confirmOrderVo.setActivityName(activityInfo1.getActivityName()); + paymentMoney = paymentMoney.subtract(zyh); + activityAmount = activityAmount.add(zyh); + } } confirmOrderVo.setDiscountAmount(activityAmount); int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum(); @@ -704,6 +734,14 @@ } } } + + if(goods.getStatus() == 1){ + throw new RuntimeException(goods.getName() + "商品已被下架"); + } + if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(appUser.getVipId().toString())){ + throw new RuntimeException("无权限购买" + goods.getName()); + } + ids.add(id); } @@ -760,9 +798,6 @@ }else{ for (MyShoppingCartVo myShoppingCartVo : goodsList) { orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber()); - } - if(appUser.getLavePoint().intValue() < orderPoint){ - return R.fail("账户剩余积分不足"); } } //现金的支付金额 @@ -856,17 +891,21 @@ OrderActivityInfo orderActivityInfo1 = null; if((1 == status || null == shoppingCartPayment.getUserCouponId()) && null != orderActivityInfo && shoppingCartPayment.getPaymentType() != 3){ + //找出最优会的金额 + BigDecimal zyh = BigDecimal.ZERO; for (OrderActivityInfo activityInfo : orderActivityInfo) { if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){ BigDecimal paymentMoney1 = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN); - discount = activityInfo.getDiscount(); - paymentMoney = paymentMoney1; - activityAmount = activityAmount.add(bigDecimal); - orderActivityInfo1 = activityInfo; - break; + if(bigDecimal.compareTo(zyh) > 0){ + zyh = bigDecimal; + orderActivityInfo1 = activityInfo; + } } } + + paymentMoney = paymentMoney.subtract(zyh); + activityAmount = activityAmount.add(zyh); } //可获得的消费积分 @@ -931,8 +970,9 @@ } if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){ order.setCouponJson(JSON.toJSONString(couponInfoVo)); + order.setUserCouponId(shoppingCartPayment.getUserCouponId()); } - if(activityAmount.compareTo(BigDecimal.ZERO) > 0){ + if(null != orderActivityInfo1){ order.setActivityJson(JSON.toJSONString(orderActivityInfo1)); } if(null != shoppingCartPayment.getUserAddressId()){ @@ -956,7 +996,7 @@ if(3 == shoppingCartPayment.getPaymentType()){ Integer availablePoint = appUser.getAvailablePoint(); if(availablePoint < orderPoint){ - return R.fail("账户积分不足"); + return R.fail("账户可用积分不足"); } } //判断运费支付是否足够 @@ -1043,27 +1083,28 @@ BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount(); BigDecimal balance = appUser.getBalance(); //红包金额满足支付 - if(paymentMoney.compareTo(totalRedPacketAmount) <= 0){ - totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney); - balance = balance.subtract(paymentMoney); + BigDecimal paymentMoney1 = paymentMoney; + if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){ + totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1); + balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); - redPacketAmount = paymentMoney; + redPacketAmount = paymentMoney1; }else{ - paymentMoney = paymentMoney.subtract(totalRedPacketAmount); + paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount); redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; - if(paymentMoney.compareTo(totalDistributionAmount) <= 0){ - totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney); - balance = balance.subtract(paymentMoney); + if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){ + totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1); + balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); - distributionAmount = paymentMoney; + distributionAmount = paymentMoney1; }else{ - paymentMoney = paymentMoney.subtract(totalDistributionAmount); + paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; - balance = balance.subtract(paymentMoney); + balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); @@ -1128,6 +1169,19 @@ orderService.updateById(order); //删除购物车数据 this.removeBatchByIds(ids); + //处理优惠券 + if(null != order.getUserCouponId()){ + UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); + if(null != userCoupon && null == userCoupon.getUseTime()){ + 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)); + } } //积分支付 if(3 == shoppingCartPayment.getPaymentType()){ @@ -1189,27 +1243,28 @@ BigDecimal totalRedPacketAmount = appUser.getTotalRedPacketAmount(); BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount(); BigDecimal balance = appUser.getBalance(); - if(expressFee.compareTo(totalRedPacketAmount) <= 0){ - totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee); - balance = balance.subtract(expressFee); + BigDecimal expressFee1 = expressFee; + if(expressFee1.compareTo(totalRedPacketAmount) <= 0){ + totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee1); + balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); - redPacketAmount = expressFee; + redPacketAmount = expressFee1; }else{ - expressFee = expressFee.subtract(totalRedPacketAmount); + expressFee1 = expressFee1.subtract(totalRedPacketAmount); redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; - if(expressFee.compareTo(totalDistributionAmount) <= 0){ - totalDistributionAmount = totalDistributionAmount.subtract(expressFee); - balance = balance.subtract(expressFee); + if(expressFee1.compareTo(totalDistributionAmount) <= 0){ + totalDistributionAmount = totalDistributionAmount.subtract(expressFee1); + balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); - distributionAmount = expressFee; + distributionAmount = expressFee1; }else{ - expressFee = expressFee.subtract(totalDistributionAmount); + expressFee1 = expressFee1.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; - balance = balance.subtract(expressFee); + balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); @@ -1223,8 +1278,8 @@ balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); - balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney)); - balanceChangeRecord.setChangeAmount(paymentMoney); + balanceChangeRecord.setBeforeAmount(balance.add(expressFee)); + balanceChangeRecord.setChangeAmount(expressFee); balanceChangeRecord.setAfterAmount(balance); balanceChangeRecord.setDelFlag(0); balanceChangeRecord.setCreateTime(LocalDateTime.now()); @@ -1247,6 +1302,14 @@ orderService.updateById(order); //删除购物车数据 this.removeBatchByIds(ids); + } + //添加查询快递信息队列 + if(StringUtils.isNotEmpty(order.getExpressJson())){ + //一小时后定时查询快递信息 + SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); + JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); + Integer waitTime = jsonObject.getInteger("waitTime"); + redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); } } @@ -1330,6 +1393,22 @@ 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)); + } + //删除购物车数据 Long userid = tokenService.getLoginUserApplet().getUserid(); List<OrderGood> list = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); -- Gitblit v1.7.1