From eb5d7885fa9e4bd20c0827eec9b4cdd48c47b509 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期二, 07 一月 2025 09:11:20 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 163 +++++++++++++++++++++++++++++++++++------------------- 1 files changed, 105 insertions(+), 58 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 3c5614f..6016597 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 @@ -142,7 +142,8 @@ } List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList()); //查询符合商品类型的商品数据 - List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds)); + List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid) + .in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1)); //构建返回数据 List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list, null); return page; @@ -156,7 +157,7 @@ * @param shopId * @return */ - public Price getPrice(AppUser appUser, Integer goodsId, Integer shopId){ + public Price getPrice(AppUser appUser, Integer goodsId, Integer type, Integer shopId){ //获取支付价格 //秒杀活动>门店特价>地区价格>会员价格 //判断是否有秒杀活动 @@ -165,7 +166,8 @@ info.setGoodsId(goodsId); info.setVip(appUser.getVipId()); GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(info).getData(); - if(null == goodsSeckill){ + //没有秒杀活动或者添加的普通商品则不使用秒杀活动价格 + if(null == goodsSeckill || type == 1){ //没有秒杀价,则判断门店特价 GetGoodsBargainPrice goodsBargainPrice = new GetGoodsBargainPrice(); goodsBargainPrice.setGoodsId(goodsId); @@ -288,9 +290,18 @@ @Override public Long addGoods(ShoppingCart shoppingCart) { Long userid = tokenService.getLoginUserApplet().getUserid(); - shoppingCart.setAppUserId(userid); - this.save(shoppingCart); - return shoppingCart.getId(); + ShoppingCart one = this.getOne(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid) + .eq(ShoppingCart::getGoodsId, shoppingCart.getGoodsId()).eq(ShoppingCart::getType, shoppingCart.getType()).eq(ShoppingCart::getStatus, 1)); + if(null != one){ + one.setNumber(one.getNumber() + shoppingCart.getNumber()); + this.updateById(one); + return one.getId(); + }else{ + shoppingCart.setAppUserId(userid); + shoppingCart.setStatus(1); + this.save(shoppingCart); + return shoppingCart.getId(); + } } @@ -336,12 +347,15 @@ JSONArray objects = JSON.parseArray(goodsJson); Long id = objects.getJSONObject(0).getLong("id"); Integer num1 = objects.getJSONObject(0).getInteger("num"); + Integer type = objects.getJSONObject(0).getInteger("type"); ShoppingCart shoppingCart = new ShoppingCart(); shoppingCart.setAppUserId(userid); shoppingCart.setGoodsId(id.intValue()); shoppingCart.setNumber(num1); - Long shoppingCarId = addGoods(shoppingCart); - confirmOrder.setGoodsJson("[{\"id\": " + shoppingCarId + ", \"num\": " + num1 + "}]"); + shoppingCart.setType(type); + shoppingCart.setStatus(0); + this.save(shoppingCart); + confirmOrder.setGoodsJson("[{\"id\": " + shoppingCart.getId() + ", \"num\": " + num1 + ",\"type\":" + type + "}]"); } AppUser appUser = appUserClient.getAppUserById(userid); Integer shopId = confirmOrder.getShopId(); @@ -362,10 +376,16 @@ confirmOrderVo.setShopName(shop.getName()); //现金支付 if(confirmOrder.getPaymentType() == 1){ - BigDecimal bigDecimal = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get(); + BigDecimal bigDecimal = BigDecimal.ZERO; + for (MyShoppingCartVo myShoppingCartVo : goodsList) { + bigDecimal = bigDecimal.add(myShoppingCartVo.getCash().multiply(new BigDecimal(myShoppingCartVo.getNumber()))); + } confirmOrderVo.setOrderMoney(bigDecimal); }else{ - int sum = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum(); + int sum = 0; + for (MyShoppingCartVo myShoppingCartVo : goodsList) { + sum += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber()); + } confirmOrderVo.setOrderPoint(sum); } //查询当前是否有订单活动 @@ -474,6 +494,7 @@ Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); MyShoppingCartVo vo = new MyShoppingCartVo(); vo.setId(shoppingCart.getId().toString()); + vo.setType(shoppingCart.getType()); vo.setGoodsId(goods.getId()); vo.setHomePicture(goods.getHomePagePicture()); vo.setName(goods.getName()); @@ -488,7 +509,7 @@ } } //获取支付价格 - Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId); + Price price = getPrice(appUser, shoppingCart.getGoodsId(), shoppingCart.getType(), shopId); if(null == price){ price = new Price(); //使用商品的基础价格 @@ -512,6 +533,7 @@ //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){ vo.setPurchaseLimit(false); + vo.setPurchaseLimitNum(-1); }else{ List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8))); List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList()); @@ -565,7 +587,7 @@ //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit()){ - List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8))); + List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).notIn(Order::getOrderStatus, Arrays.asList(5, 6))); List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList()); int sum = 0; if(orderIds.size() > 0){ @@ -881,15 +903,17 @@ //调起微信支付 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(), ""); + 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(rc_result); + return R.ok(jsonObject.toJSONString()); } //账户余额 BigDecimal redPacketAmount = BigDecimal.ZERO; @@ -942,15 +966,17 @@ appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1); } - 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()); - userPointClient.saveUserPoint(userPoint); + 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()); + userPointClient.saveUserPoint(userPoint); + } } appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN)); appUser.setLastShopTime(LocalDateTime.now()); @@ -984,29 +1010,52 @@ if(shoppingCartPayment.getFreightPaymentType() == 1){ //调起微信支付 UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber() + appUser.getId(), expressFee.doubleValue(), order.getOrderType() == 1 ? "购买服务商品快递费" : "购买单品商品快递费", - "快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", appUser.getWxOpenid(), ""); + "快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", 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("MaterialFlowPayment", order.getOrderNumber() + appUser.getId(), second); - return R.ok(rc_result); + return R.ok(jsonObject.toJSONString()); } } - + Integer lavePoint = appUser.getLavePoint(); + //扣减订单支付积分 + appUser.setLavePoint(appUser.getLavePoint() - orderPoint); + appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint); + //可转增积分 + Integer transferablePoint = appUser.getTransferablePoint(); + Integer tra = 0; + if(transferablePoint > 0){ + tra = transferablePoint - orderPoint; + appUser.setTransferablePoint(tra >= 0 ? tra : 0); + } + appUser.setTransferablePoint(appUser.getTransferablePoint() - orderPoint); + + //构建积分流水记录 + 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); + + lavePoint = appUser.getLavePoint(); 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.setLavePoint(appUser.getLavePoint() - orderPoint); - appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint); - appUser.setShopPoint(appUser.getShopPoint() + earnPoint); appUser.setLavePoint(appUser.getLavePoint() + earnPoint); appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1); @@ -1021,16 +1070,17 @@ appUserClient.vipUpgrade(appUser.getId()); //构建积分流水记录 - UserPoint userPoint = new UserPoint(); - userPoint.setType(1); - userPoint.setHistoricalPoint(lavePoint); - Integer point = appUser.getLavePoint() - lavePoint; - userPoint.setVariablePoint(point >= 0 ? point : point * -1); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(appUser.getId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); + if(earnPoint > 0){ + 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()); + userPointClient.saveUserPoint(userPoint); + } //如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单 if(expressFee.compareTo(BigDecimal.ZERO) > 0){ if(shoppingCartPayment.getFreightPaymentType() == 2){ @@ -1145,15 +1195,17 @@ appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1); appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + earnPoint1); - 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()); - userPointClient.saveUserPoint(userPoint); + 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()); + userPointClient.saveUserPoint(userPoint); + } } appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN)); appUser.setLastShopTime(LocalDateTime.now()); @@ -1192,17 +1244,12 @@ Integer earnPoint = order.getGetPoint(); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); Integer lavePoint = appUser.getLavePoint(); - Integer orderPoint = order.getPoint(); PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); - int earnPoint1 = earnPoint; + int earnPoint1 = 0; //计算可用积分比例 if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){ - earnPoint1 = new BigDecimal(earnPoint1).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue(); + earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue(); } - //扣减订单支付积分 - appUser.setLavePoint(appUser.getLavePoint() - orderPoint); - appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint); - appUser.setShopPoint(appUser.getShopPoint() + earnPoint); appUser.setLavePoint(appUser.getLavePoint() + earnPoint); appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1); @@ -1217,13 +1264,13 @@ UserPoint userPoint = new UserPoint(); userPoint.setType(1); userPoint.setHistoricalPoint(lavePoint); - Integer point = appUser.getLavePoint() - lavePoint; - userPoint.setVariablePoint(point >= 0 ? point : point * -1); + userPoint.setVariablePoint(earnPoint); userPoint.setBalance(appUser.getLavePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); + //修改订支付状态 order.setPayStatus(2); //自提 -- Gitblit v1.7.1