From cbf2486983b77a27af9968bbb362cb8d43789115 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期三, 26 三月 2025 15:30:53 +0800 Subject: [PATCH] 修改统计bug和部分功能修改 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 228 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 133 insertions(+), 95 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 64920fb..134fe1a 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 @@ -14,6 +14,7 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.event.PayEvent; import com.ruoyi.order.mapper.ShoppingCartMapper; import com.ruoyi.order.model.Order; import com.ruoyi.order.model.OrderBalancePayment; @@ -31,6 +32,7 @@ import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; import com.ruoyi.other.api.vo.GetSeckillActivityInfo; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -41,6 +43,9 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j @@ -105,12 +110,6 @@ private CommissionService commissionService; @Resource - private VipSettingClient vipSettingClient; - - @Resource - private UserChangeLogClient userChangeLogClient; - - @Resource private PointSettingClient pointSettingClient; @Resource @@ -118,6 +117,9 @@ @Resource private RedisTemplate redisTemplate; + + @Resource + private ApplicationEventPublisher applicationEventPublisher; @@ -142,6 +144,9 @@ throw new RuntimeException("根据类型(1=服务商品,2=单品商品)获取商品数据失败"); } List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList()); + if(goodsIds.isEmpty()){ + return new ArrayList<>(); + } //查询符合商品类型的商品数据 List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid) .in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1)); @@ -330,9 +335,27 @@ @Override public Long addGoods(ShoppingCart shoppingCart) { Long userid = tokenService.getLoginUserApplet().getUserid(); - Integer goodsSaleNum = orderService.getGoodsSaleNum(shoppingCart.getGoodsId(), null, userid); + long goodsSaleNum = orderService.getGoodsSaleNum(shoppingCart.getGoodsId(), null, userid); + long count = count(new LambdaQueryWrapper<ShoppingCart>() + .eq(ShoppingCart::getGoodsId, shoppingCart.getGoodsId()) + .eq(ShoppingCart::getStatus,1) + .eq(ShoppingCart::getAppUserId, userid)); + goodsSaleNum += count; Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); - if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && (goodsSaleNum + shoppingCart.getNumber()) > goods.getPurchaseLimit()){ + + Integer maxNum = 0; + if(shoppingCart.getType() == 2){ + R<SeckillActivityInfo> r = seckillActivityInfoClient.getSeckillActivityInfoByGoodsId(shoppingCart.getGoodsId()); + if (R.isError(r)){ + throw new ServiceException("获取秒杀商品失败!"); + } + SeckillActivityInfo seckillActivityInfo = r.getData(); + maxNum = seckillActivityInfo.getMaxNum(); + }else { + maxNum = goods.getPurchaseLimit(); + } + + if(null != goods.getPurchaseLimit() && -1 != maxNum && (goodsSaleNum + shoppingCart.getNumber()) > maxNum){ throw new ServiceException("超出购买数量限制"); } ShoppingCart one = this.getOne(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid) @@ -358,13 +381,7 @@ @Override public R setGoodsNumber(SetGoodsNumber setGoodsNumber) { - Long userid = tokenService.getLoginUserApplet().getUserid(); ShoppingCart shoppingCart = this.getById(setGoodsNumber.getId()); - Integer goodsSaleNum = orderService.getGoodsSaleNum(shoppingCart.getGoodsId(), null, userid); - Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); - if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && (goodsSaleNum + shoppingCart.getNumber()) > goods.getPurchaseLimit()){ - throw new ServiceException("超出购买数量限制"); - } if(0 >= setGoodsNumber.getNumber()){ return R.fail("修改数量不能小于等于0"); } @@ -372,7 +389,9 @@ if(null != shoppingCart){ Goods goods1 = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); - if(null != goods1.getPurchaseLimit() && -1 != goods1.getPurchaseLimit() && goods1.getPurchaseLimit() < setGoodsNumber.getNumber()){ + if(null != goods1.getPurchaseLimit() && -1 != goods1.getPurchaseLimit() + && goods1.getPurchaseLimit() < setGoodsNumber.getNumber() + && setGoodsNumber.getNumber() >= shoppingCart.getNumber()){ return R.fail("修改数量不能大于限购数量"); } @@ -1130,22 +1149,23 @@ 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); + if(earnPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(1); + userPoint.setVariablePoint(earnPoint); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(appUser.getId()); + userPoint.setObjectId(order.getId()); + userPoint.setExtention(jsonObject.toJSONString()); + userPoint.setChangeDirection(1); + 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()); + applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser))); //修改订支付状态 order.setPayStatus(2); //自提 @@ -1182,33 +1202,36 @@ BigDecimal balance = appUser.getBalance(); //红包金额满足支付 BigDecimal paymentMoney1 = paymentMoney; - if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){ - totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1); - balance = balance.subtract(paymentMoney1); - appUser.setTotalRedPacketAmount(totalRedPacketAmount); - appUser.setBalance(balance); - redPacketAmount = paymentMoney1; - }else{ - paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount); - redPacketAmount = totalRedPacketAmount; - totalRedPacketAmount = BigDecimal.ZERO; - if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){ - totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1); - balance = balance.subtract(paymentMoney1); - appUser.setTotalRedPacketAmount(totalRedPacketAmount); - appUser.setTotalDistributionAmount(totalDistributionAmount); - appUser.setBalance(balance); - distributionAmount = paymentMoney1; - }else{ - paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount); - totalDistributionAmount = BigDecimal.ZERO; - balance = balance.subtract(paymentMoney1); - appUser.setTotalRedPacketAmount(totalRedPacketAmount); - appUser.setTotalDistributionAmount(totalDistributionAmount); - appUser.setBalance(balance); - distributionAmount = totalDistributionAmount; - } - } + balance = balance.subtract(paymentMoney1); + appUser.setBalance(balance); + +// if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){ +// totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1); +// balance = balance.subtract(paymentMoney1); +// appUser.setTotalRedPacketAmount(totalRedPacketAmount); +// appUser.setBalance(balance); +// redPacketAmount = paymentMoney1; +// }else{ +// paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount); +// redPacketAmount = totalRedPacketAmount; +// totalRedPacketAmount = BigDecimal.ZERO; +// if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){ +//// totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1); +// balance = balance.subtract(paymentMoney1); +// appUser.setTotalRedPacketAmount(totalRedPacketAmount); +//// appUser.setTotalDistributionAmount(totalDistributionAmount); +// appUser.setBalance(balance); +// distributionAmount = paymentMoney1; +// }else{ +// paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount); +// totalDistributionAmount = BigDecimal.ZERO; +// balance = balance.subtract(paymentMoney1); +// appUser.setTotalRedPacketAmount(totalRedPacketAmount); +//// appUser.setTotalDistributionAmount(totalDistributionAmount); +// appUser.setBalance(balance); +// distributionAmount = totalDistributionAmount; +// } +// } //构建积分流水记录 if(earnPoint > 0){ PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); @@ -1233,13 +1256,12 @@ 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()); userPoint.setExtention(jsonObject.toJSONString()); + userPoint.setChangeDirection(1); userPointClient.saveUserPoint(userPoint); } } @@ -1247,18 +1269,17 @@ appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); //变更等级 - appUserClient.vipUpgrade(appUser.getId()); + applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser))); //构建余额明细变动记录 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); - balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney)); balanceChangeRecord.setChangeAmount(paymentMoney); - balanceChangeRecord.setAfterAmount(balance); balanceChangeRecord.setDelFlag(0); balanceChangeRecord.setCreateTime(LocalDateTime.now()); + balanceChangeRecord.setChangeDirection(-1); balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord); //修改订支付状态 order.setPayStatus(2); @@ -1314,21 +1335,22 @@ } //构建积分流水记录 - 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); + if(orderPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(11); + userPoint.setVariablePoint(orderPoint); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(appUser.getId()); + userPoint.setObjectId(order.getId()); + userPoint.setExtention((tra >= 0 ? orderPoint : transferablePoint) + ""); + userPoint.setChangeDirection(-1); + userPointClient.saveUserPoint(userPoint); + } appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); //变更等级 - appUserClient.vipUpgrade(appUser.getId()); + applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser))); //积分支付不返佣 @@ -1353,7 +1375,7 @@ totalDistributionAmount = totalDistributionAmount.subtract(expressFee1); balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); - appUser.setTotalDistributionAmount(totalDistributionAmount); +// appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); distributionAmount = expressFee1; }else{ @@ -1361,7 +1383,7 @@ totalDistributionAmount = BigDecimal.ZERO; balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); - appUser.setTotalDistributionAmount(totalDistributionAmount); +// appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); distributionAmount = totalDistributionAmount; } @@ -1374,11 +1396,10 @@ balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); - balanceChangeRecord.setBeforeAmount(balance.add(expressFee)); balanceChangeRecord.setChangeAmount(expressFee); - balanceChangeRecord.setAfterAmount(balance); balanceChangeRecord.setDelFlag(0); balanceChangeRecord.setCreateTime(LocalDateTime.now()); + balanceChangeRecord.setChangeDirection(-1); balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord); //修改订支付状态 order.setPayStatus(2); @@ -1410,8 +1431,18 @@ orderBalancePayment.setDistributionAmount(distributionAmount); orderBalancePaymentService.save(orderBalancePayment); } + + commissionService.calculationCommissionUser(order.getId()); return R.ok(order.getId().toString()); } + + + + + + + + public String getNumber(Integer size){ @@ -1459,28 +1490,32 @@ 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); + if(earnPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(1); + userPoint.setVariablePoint(earnPoint); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(appUser.getId()); + userPoint.setObjectId(order.getId()); + userPoint.setExtention(jsonObject.toJSONString()); + userPoint.setChangeDirection(1); + 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()); + applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser))); //修改订支付状态 order.setPayStatus(2); //自提 if(order.getOrderType() == 1 && StringUtils.isEmpty(order.getAddressJson())){ order.setOrderStatus(2); } + + String r7TrxNo = uniPayCallbackResult.getR9_BankTrxNo(); + order.setSerialNumber(r7TrxNo); orderService.updateById(order); //处理优惠券 @@ -1503,6 +1538,8 @@ for (Integer goodsId : goodsIds) { goodsClient.editGoodsNum(goodsId, 1); } + + commissionService.calculationCommissionUser(order.getId()); return R.ok(); } @@ -1538,23 +1575,24 @@ } //构建积分流水记录 - 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); + if(orderPoint > 0){ + UserPoint userPoint = new UserPoint(); + userPoint.setType(11); + userPoint.setVariablePoint(orderPoint); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(appUser.getId()); + userPoint.setObjectId(order.getId()); + userPoint.setExtention((tra >= 0 ? orderPoint : transferablePoint) + ""); + userPoint.setChangeDirection(-1); + userPointClient.saveUserPoint(userPoint); + } //积分支付不反积分 appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); //变更等级 - appUserClient.vipUpgrade(appUser.getId()); + applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser))); //修改订支付状态 order.setPayStatus(2); -- Gitblit v1.7.1