1.
phpcjl
2024-12-09 3d6c34f45d76b78151d6586f93acca2943698b08
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -20,6 +20,7 @@
import com.ruoyi.order.model.Order;
import com.ruoyi.order.model.OrderGood;
import com.ruoyi.order.model.ShoppingCart;
import com.ruoyi.order.service.CommissionService;
import com.ruoyi.order.service.OrderGoodService;
import com.ruoyi.order.service.OrderService;
import com.ruoyi.order.service.ShoppingCartService;
@@ -97,6 +98,9 @@
   
   @Resource
   private BalanceChangeRecordClient balanceChangeRecordClient;
   @Resource
   private CommissionService commissionService;
   
   
   
@@ -417,35 +421,37 @@
      paymentUserCoupon.setType(confirmOrder.getType());
      if(confirmOrder.getPaymentType() == 1){
         List<PaymentUserCouponVo> data = userCouponClient.getPaymentUserCoupon(paymentUserCoupon).getData();
         for (PaymentUserCouponVo couponInfo : data) {
            List<Integer> forGoodIds = couponInfo.getForGoodIds();
            //全部商品适用
            if(null == forGoodIds){
               //满减券
               if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){
                  couponInfo.setAvailable(true);
               }
               //代金券和折扣券
               if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
                  couponInfo.setAvailable(true);
               }
            }else{
               //部分商品适用
               BigDecimal goodsMoney = BigDecimal.ZERO;
               for (MyShoppingCartVo myShoppingCartVo : goodsList) {
                  Integer goodsId = myShoppingCartVo.getGoodsId();
                  BigDecimal cash = myShoppingCartVo.getCash();
                  if(forGoodIds.contains(goodsId)){
                     goodsMoney = goodsMoney.add(cash);
         if(null != data){
            for (PaymentUserCouponVo couponInfo : data) {
               List<Integer> forGoodIds = couponInfo.getForGoodIds();
               //全部商品适用
               if(null == forGoodIds){
                  //满减券
                  if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){
                     couponInfo.setAvailable(true);
                  }
               }
               //满减
               if(1 == couponInfo.getCouponType() && couponInfo.getConditionAmount().compareTo(goodsMoney) <= 0){
                  couponInfo.setAvailable(true);
               }
               //代金券
               if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
                  couponInfo.setAvailable(true);
                  //代金券和折扣券
                  if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
                     couponInfo.setAvailable(true);
                  }
               }else{
                  //部分商品适用
                  BigDecimal goodsMoney = BigDecimal.ZERO;
                  for (MyShoppingCartVo myShoppingCartVo : goodsList) {
                     Integer goodsId = myShoppingCartVo.getGoodsId();
                     BigDecimal cash = myShoppingCartVo.getCash();
                     if(forGoodIds.contains(goodsId)){
                        goodsMoney = goodsMoney.add(cash);
                     }
                  }
                  //满减
                  if(1 == couponInfo.getCouponType() && couponInfo.getConditionAmount().compareTo(goodsMoney) <= 0){
                     couponInfo.setAvailable(true);
                  }
                  //代金券
                  if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
                     couponInfo.setAvailable(true);
                  }
               }
            }
         }
@@ -489,7 +495,7 @@
      for (ShoppingCart shoppingCart : list) {
         Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
         MyShoppingCartVo vo = new MyShoppingCartVo();
         vo.setId(shoppingCart.getId());
         vo.setId(shoppingCart.getId().toString());
         vo.setGoodsId(goods.getId());
         vo.setHomePicture(goods.getHomePagePicture());
         vo.setName(goods.getName());
@@ -506,6 +512,7 @@
         //获取支付价格
         Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
         if(null == price){
            price = new Price();
            //使用商品的基础价格
            price.setCash(1 == goods.getCashPayment() ? goods.getSellingPrice() : null);
            price.setPoint(1 == goods.getPointPayment() ? goods.getIntegral() : null);
@@ -523,7 +530,7 @@
         goodsShop.setGoodsId(shoppingCart.getGoodsId());
         goodsShop.setShopId(shopId);
         GoodsShop goodsShop1 = goodsShopClient.getGoodsShop(goodsShop).getData();
         vo.setVerifiable(null == goodsShop1 ? false : true);
         vo.setVerifiable(goods.getAppointStore() == 1 && null == goodsShop1 ? false : true);
         //判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
         if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){
            vo.setPurchaseLimit(false);
@@ -622,12 +629,15 @@
      if(data.size() != goodsList.size()){
         String goodsName = "";
         for (Integer goodsId : goodsIds) {
            if(!collect.contains(goodsId)){
               goodsName = goodsClient.getGoodsById(goodsId).getData().getName();
            Goods goods = goodsClient.getGoodsById(goodsId).getData();
            if(1 == goods.getAppointStore() && !collect.contains(goodsId)){
               goodsName = goods.getName();
               break;
            }
         }
         return R.fail(goodsName + "不能在该门店核销");
         if(StringUtils.isNotEmpty(goodsName)){
            return R.fail(goodsName + "不能在该门店核销");
         }
      }
      //开始构建支付信息
      //现金支付的订单金额
@@ -816,13 +826,22 @@
      order.setShopId(shoppingCartPayment.getShopId());
      order.setDelFlag(0);
      order.setCreateTime(LocalDateTime.now());
      order.setExpressPayMethod(shoppingCartPayment.getFreightPaymentType());
      
      if(2 == shoppingCartPayment.getPaymentType()){
         BigDecimal balance = appUser.getBalance();
         if(balance.compareTo(paymentMoney.add(expressFee)) < 0){
         if(balance.compareTo(paymentMoney) < 0){
            return R.fail("账户余额不足");
         }
      }
      //判断运费支付是否足够
      if(null != shoppingCartPayment.getFreightPaymentType() && 2 == shoppingCartPayment.getFreightPaymentType() && expressFee.compareTo(BigDecimal.ZERO) > 0){
         BigDecimal balance = appUser.getBalance();
         if(balance.compareTo(expressFee) < 0){
            return R.fail("账户余额不足");
         }
      }
      orderService.save(order);
      //构建订单明细数据
      for (MyShoppingCartVo myShoppingCartVo : goodsList) {
@@ -838,10 +857,11 @@
         }
         for (int i = 0; i < objects.size(); i++) {
            Long id = objects.getJSONObject(i).getLong("id");
            if(myShoppingCartVo.getId().equals(id)){
            if(myShoppingCartVo.getId().equals(id.toString())){
               ShoppingCart shoppingCart = this.getById(id);
               Integer num1 = objects.getJSONObject(i).getInteger("num");
               orderGood.setNum(num1);
               Goods goods1 = goodsClient.getGoodsById(myShoppingCartVo.getGoodsId()).getData();
               Goods goods1 = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
               orderGood.setGoodJson(JSON.toJSONString(goods1));
               break;
            }
@@ -960,11 +980,64 @@
            userPoint.setObjectId(order.getId());
            userPointClient.saveUserPoint(userPoint);
         }
         //修改订支付状态
         order.setPayStatus(2);
         orderService.updateById(order);
         //删除购物车数据
         this.removeBatchByIds(ids);
         //如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单
         if(expressFee.compareTo(BigDecimal.ZERO) > 0){
            if(shoppingCartPayment.getFreightPaymentType() == 1){
               //调起微信支付
            }
            if(shoppingCartPayment.getFreightPaymentType() == 2){
               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);
                  appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                  appUser.setBalance(balance);
               }else{
                  expressFee = expressFee.subtract(totalRedPacketAmount);
                  totalRedPacketAmount = BigDecimal.ZERO;
                  if(expressFee.compareTo(totalDistributionAmount) <= 0){
                     totalDistributionAmount = totalDistributionAmount.subtract(expressFee);
                     balance = balance.subtract(expressFee);
                     appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                     appUser.setTotalDistributionAmount(totalDistributionAmount);
                     appUser.setBalance(balance);
                  }else{
                     expressFee = expressFee.subtract(totalDistributionAmount);
                     totalDistributionAmount = BigDecimal.ZERO;
                     balance = balance.subtract(expressFee);
                     appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                     appUser.setTotalDistributionAmount(totalDistributionAmount);
                     appUser.setBalance(balance);
                  }
               }
               appUserClient.editAppUserById(appUser);
               //构建余额明细变动记录
               BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
               balanceChangeRecord.setAppUserId(appUser.getId());
               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());
               balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
               //修改订支付状态
               order.setPayStatus(2);
               orderService.updateById(order);
               //删除购物车数据
               this.removeBatchByIds(ids);
            }
         }else{
            //修改订支付状态
            order.setPayStatus(2);
            orderService.updateById(order);
            //删除购物车数据
            this.removeBatchByIds(ids);
         }
      }
      return R.ok();
   }