From a79996fedf6be3af3292495d394e0f0250b71d4c Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 28 六月 2024 17:50:41 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java | 69 +++++++++++++++++++++++++++++----- 1 files changed, 59 insertions(+), 10 deletions(-) diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java index af31d48..04491b7 100644 --- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java +++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java @@ -18,6 +18,7 @@ import com.ruoyi.study.api.domain.TUser; import com.ruoyi.study.api.feignClient.StudyClient; import com.ruoyi.study.api.vo.UserPersonalCenterVO; +import com.ruoyi.system.api.model.LoginUserParent; import org.redisson.api.RSemaphore; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; @@ -67,7 +68,10 @@ String key = String.format(RedisConstants.GOOD_STOCK, goods.getId()); List<TOrder> orderList = orderService.lambdaQuery().eq(TOrder::getGoodsId, goodId) .eq(TOrder::getDisabled, 0).list(); - int sum = orderList.stream().map(TOrder::getCount).mapToInt(Integer::intValue).sum(); + int sum = 0; + if (!orderList.isEmpty()) { + sum = orderList.stream().map(TOrder::getCount).mapToInt(Integer::intValue).sum(); + } // 计算商品剩余可兑换数量 int number = goods.getTotal() - sum; if (number <= 0) { @@ -101,6 +105,17 @@ return R.exchangeError("兑换失败,当前剩余积分不足!"); } if (null != good.getTotal()) { + // 检查库存总数是否足够 + List<TOrder> order = orderService.lambdaQuery().eq(TOrder::getGoodsId, goodId) + .eq(TOrder::getDisabled, 0).list(); + if (!order.isEmpty()) { + int totalNumber = order.stream().map(TOrder::getCount).collect(Collectors.toList()) + .stream().mapToInt(Integer::intValue).sum(); + boolean canBuy = good.getTotal() - totalNumber >= number; + if (!canBuy) { + throw new GlobalException("商品库存不足,兑换失败!"); + } + } // 检查用户兑换数量是否超过单用户最大兑换数量 List<TOrder> orderList = orderService.lambdaQuery().eq(TOrder::getUserId, user.getId()) .eq(TOrder::getGoodsId, goodId).list(); @@ -126,9 +141,6 @@ } // 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务) boolean result = exchangeGood(goodExchange, recipient, number, goodId, needIntegral); - // 扣除库存 - result = result && this.lambdaUpdate().set(TGoods::getTotal, good.getTotal() - number) - .eq(TGoods::getId, good.getId()).update(); if (!result) { semaphore.release(number); return R.exchangeError("商品兑换失败!"); @@ -146,11 +158,27 @@ Integer goodId, int needIntegral) { // 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务) TOrder order = orderInfo(goodExchange, recipient, number, goodId, needIntegral); + order.setProvince(recipient.getProvince()); + order.setCity(recipient.getCity()); boolean result = orderService.save(order); // 远程调用,生成积分明细 result = result && studyClient.addIntegralDetail(Constants.BURDEN + needIntegral, Constants.SHOPPING_CONSUME).getData(); // 扣除用户积分 result = result && studyClient.exchangeIntegral(needIntegral, Constants.BURDEN).getData(); + return result; + } + + private Boolean exchangeGoodParent(GoodExchangeDTO goodExchange, Recipient recipient, Integer number, + Integer goodId, int needIntegral) { + // 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务) + TOrder order = orderInfoParent(goodExchange, recipient, number, goodId, needIntegral); + order.setProvince(recipient.getProvince()); + order.setCity(recipient.getCity()); + boolean result = orderService.save(order); + // 远程调用,生成积分明细 + result = result && studyClient.addIntegralDetailParent(Constants.BURDEN + needIntegral, Constants.SHOPPING_CONSUME).getData(); + // 扣除用户积分 + result = result && studyClient.exchangeIntegralParent(needIntegral, Constants.BURDEN).getData(); return result; } @@ -163,12 +191,15 @@ if (null == good) { return R.exchangeError("商品不存在,请稍后重试!"); } + LoginUserParent loginUser1 = tokenService.getLoginUser1(); + if (null == loginUser1) { + return R.tokenError("登录失效"); + } // 校验用户积分是否足够兑换 - UserPersonalCenterVO userPersonalCenter = studyClient.userInfo().getData(); - if (null == userPersonalCenter) { + TUser user = studyClient.userInfoParent().getData(); + if (null == user) { throw new GlobalException("用户信息获取失败!"); } - TUser user = userPersonalCenter.getUser(); int needIntegral = good.getIntegral() * number; if (user.getIntegral() < needIntegral) { return R.exchangeError("兑换失败,当前剩余积分不足!"); @@ -198,7 +229,7 @@ return R.exchangeError("当前商品库存不足"); } // 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务) - boolean result = exchangeGood(goodExchange, recipient, number, goodId, needIntegral); + boolean result = exchangeGoodParent(goodExchange, recipient, number, goodId, needIntegral); // 扣除库存 result = result && this.lambdaUpdate().set(TGoods::getTotal, good.getTotal() - number) .eq(TGoods::getId, good.getId()).update(); @@ -207,7 +238,7 @@ return R.exchangeError("商品兑换失败!"); } } else { - boolean result = exchangeGood(goodExchange, recipient, number, goodId, needIntegral); + boolean result = exchangeGoodParent(goodExchange, recipient, number, goodId, needIntegral); if (!result) { return R.exchangeError("商品兑换失败!"); } @@ -223,10 +254,28 @@ order.setGoodsId(goodId); order.setCount(number); order.setState(1); + order.setRemark(goodExchange.getRemark()); order.setIntegral(needIntegral); order.setConsigneeName(recipient.getRecipient()); order.setConsigneePhone(recipient.getRecipientPhone()); - order.setConsigneeAddress(recipient.getAddress()); + order.setConsigneeAddress(recipient.getProvince() + recipient.getCity() + recipient.getAddress()); + order.setDisabled(Boolean.FALSE); + return order; + } + + private TOrder orderInfoParent(GoodExchangeDTO goodExchange, Recipient recipient, Integer number, Integer goodId, int needIntegral) { + TOrder order = new TOrder(); + order.setOrderNumber(goodExchange.getOrderNumber()); + order.setUserId(tokenService.getLoginUser1().getUserid()); + order.setInsertTime(new Date()); + order.setGoodsId(goodId); + order.setCount(number); + order.setState(1); + order.setRemark(goodExchange.getRemark()); + order.setIntegral(needIntegral); + order.setConsigneeName(recipient.getRecipient()); + order.setConsigneePhone(recipient.getRecipientPhone()); + order.setConsigneeAddress(recipient.getProvince() + recipient.getCity() + recipient.getAddress()); order.setDisabled(Boolean.FALSE); return order; } -- Gitblit v1.7.1