From 19dc96e814330dd957515b5eb4a57396af41b3b3 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 13 一月 2025 15:10:19 +0800 Subject: [PATCH] 修改快递查询逻辑 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 132 +++++++++++++++++++++++++++++++------------ 1 files changed, 94 insertions(+), 38 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..81f8194 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 @@ -485,19 +485,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 +711,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 +775,6 @@ }else{ for (MyShoppingCartVo myShoppingCartVo : goodsList) { orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber()); - } - if(appUser.getLavePoint().intValue() < orderPoint){ - return R.fail("账户剩余积分不足"); } } //现金的支付金额 @@ -856,17 +868,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 +947,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 +973,7 @@ if(3 == shoppingCartPayment.getPaymentType()){ Integer availablePoint = appUser.getAvailablePoint(); if(availablePoint < orderPoint){ - return R.fail("账户积分不足"); + return R.fail("账户可用积分不足"); } } //判断运费支付是否足够 @@ -1043,27 +1060,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 +1146,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 +1220,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 +1255,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 +1279,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 +1370,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