puzhibing
2025-01-02 210828d1a6947596fe00ab30fcd8725c6714dde4
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -101,12 +101,6 @@
   @Resource
   private UserChangeLogClient userChangeLogClient;
   @Resource
   private PointSettingClient pointSettingClient;
   
@@ -175,6 +169,7 @@
            area.setCityCode(appUser.getCityCode());
            area.setProvinceCode(appUser.getProvinceCode());
            area.setVip(appUser.getVipId());
            area.setGoodsId(goodsId);
            GoodsArea goodsArea = goodsAreaClient.getGoodsArea(area).getData();
            if(null == goodsArea){
               //没有地区价格,则使用会员价格
@@ -191,6 +186,7 @@
                  price.setSuperiorSubcommission(goodsVip.getSuperiorSubcommission());
                  price.setSuperiorRebatePoints(goodsVip.getSuperiorRebatePoints());
                  price.setSuperiorType(goodsVip.getSuperiorType());
                  price.setSuperiorPriceType(goodsVip.getSuperiorPriceType());
                  price.setServuceShopCharges(goodsVip.getServuceShopCharges());
                  price.setServuceShopPoints(goodsVip.getServuceShopPoints());
                  price.setTechnicianPoints(goodsVip.getTechnicianPoints());
@@ -208,6 +204,7 @@
               price.setSuperiorSubcommission(goodsArea.getSuperiorSubcommission());
               price.setSuperiorRebatePoints(goodsArea.getSuperiorRebatePoints());
               price.setSuperiorType(goodsArea.getSuperiorType());
               price.setSuperiorPriceType(goodsArea.getSuperiorPriceType());
               price.setServuceShopCharges(goodsArea.getServuceShopCharges());
               price.setServuceShopPoints(goodsArea.getServuceShopPoints());
               price.setTechnicianPoints(goodsArea.getTechnicianPoints());
@@ -232,6 +229,7 @@
            price.setSuperiorSubcommission(goodsArea.getSuperiorSubcommission());
            price.setSuperiorRebatePoints(goodsArea.getSuperiorRebatePoints());
            price.setSuperiorType(goodsArea.getSuperiorType());
            price.setSuperiorPriceType(goodsArea.getSuperiorPriceType());
            price.setServuceShopCharges(goodsArea.getServuceShopCharges());
            price.setServuceShopPoints(goodsArea.getServuceShopPoints());
            price.setTechnicianPoints(goodsArea.getTechnicianPoints());
@@ -258,7 +256,8 @@
         price.setEarnSpendingPoints(goodsSeckill.getEarnSpendingPoints());
         price.setSuperiorSubcommission(goodsSeckill.getSuperiorSubcommission());
         price.setSuperiorRebatePoints(goodsSeckill.getSuperiorRebatePoints());
         price.setSuperiorType(String.valueOf(goodsSeckill.getSuperiorType()));
         price.setSuperiorType(goodsSeckill.getSuperiorType());
         price.setSuperiorPriceType(goodsSeckill.getSuperiorPriceType());
         price.setServuceShopCharges(goodsSeckill.getServuceShopCharges());
         price.setServuceShopPoints(goodsSeckill.getServuceShopPoints());
         price.setTechnicianPoints(goodsSeckill.getTechnicianPoints());
@@ -367,7 +366,7 @@
         confirmOrderVo.setDiscountAmount(orderMoney.subtract(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
      }
      BaseSetting baseSetting = baseSettingClient.getBaseSetting(4).getData();
      confirmOrderVo.setUseSimultaneously(baseSetting.getContent().equals("1"));
      confirmOrderVo.setUseSimultaneously(JSON.parseObject(baseSetting.getContent()).getInteger("status") == 1);
      int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
      confirmOrderVo.setEarnPoint(earnPoint);
      //支付金额,订单金额-订单优惠
@@ -389,7 +388,7 @@
         List<PaymentUserCouponVo> data = userCouponClient.getPaymentUserCoupon(paymentUserCoupon).getData();
         if(null != data){
            for (PaymentUserCouponVo couponInfo : data) {
               List<Integer> forGoodIds = couponInfo.getForGoodIds();
               List<String> forGoodIds = couponInfo.getForGoodIds();
               //全部商品适用
               if(null == forGoodIds){
                  //满减券
@@ -516,6 +515,7 @@
         vo.setSuperiorSubcommission(price.getSuperiorSubcommission());
         vo.setSuperiorRebatePoints(price.getSuperiorRebatePoints());
         vo.setSuperiorType(price.getSuperiorType());
         vo.setSuperiorPriceType(price.getSuperiorPriceType());
         vo.setServuceShopCharges(price.getServuceShopCharges());
         vo.setServuceShopPoints(price.getServuceShopPoints());
         vo.setTechnicianPoints(price.getTechnicianPoints());
@@ -596,7 +596,7 @@
         String goodsName = "";
         for (Integer goodsId : goodsIds) {
            Goods goods = goodsClient.getGoodsById(goodsId).getData();
            if(1 == goods.getAppointStore() && !collect.contains(goodsId)){
            if(goods.getType() == 1 && 1 == goods.getAppointStore() && !collect.contains(goodsId)){
               goodsName = goods.getName();
               break;
            }
@@ -617,7 +617,6 @@
            orderMoney = orderMoney.add(myShoppingCartVo.getCash().multiply(new BigDecimal(myShoppingCartVo.getNumber())));
         }
      }else{
         orderPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum();
         for (MyShoppingCartVo myShoppingCartVo : goodsList) {
            orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
         }
@@ -641,9 +640,10 @@
      if(null != shoppingCartPayment.getUserCouponId() && 3 != shoppingCartPayment.getPaymentType()){
         couponInfoVo = userCouponClient.getCouponInfo(shoppingCartPayment.getUserCouponId()).getData();
         String forGoodIds = couponInfoVo.getForGoodIds();
         List<Integer> parseArray = JSON.parseArray(forGoodIds, Integer.class);
         String[] split = forGoodIds.split(",");
         List<String> parseArray = Arrays.asList(split);
         //全部商品
         if(parseArray.contains(-1)){
         if("-1".equals(forGoodIds)){
            //满减
            if(1 == couponInfoVo.getCouponType() && couponInfoVo.getConditionAmount().compareTo(paymentMoney) <= 0){
               paymentMoney = paymentMoney.subtract(couponInfoVo.getDiscountAmount());
@@ -670,7 +670,7 @@
            paymentMoney = BigDecimal.ZERO;
            BigDecimal goodsMoney = BigDecimal.ZERO;
            for (MyShoppingCartVo myShoppingCartVo : goodsList) {
               Integer goodsId = myShoppingCartVo.getGoodsId();
               String goodsId = myShoppingCartVo.getGoodsId().toString();
               BigDecimal cash = myShoppingCartVo.getCash();
               if(parseArray.contains(goodsId)){
                  goodsMoney = goodsMoney.add(cash);
@@ -808,6 +808,12 @@
            return R.fail("账户余额不足");
         }
      }
      if(3 == shoppingCartPayment.getPaymentType()){
         Integer availablePoint = appUser.getAvailablePoint();
         if(availablePoint < orderPoint){
            return R.fail("账户积分不足");
         }
      }
      //判断运费支付是否足够
      if(null != shoppingCartPayment.getFreightPaymentType() && 2 == shoppingCartPayment.getFreightPaymentType() && expressFee.compareTo(BigDecimal.ZERO) > 0){
         BigDecimal balance = appUser.getBalance();
@@ -846,6 +852,7 @@
         orderGood.setSuperiorSubcommission(myShoppingCartVo.getSuperiorSubcommission());
         orderGood.setSuperiorRebatePoints(myShoppingCartVo.getSuperiorRebatePoints());
         orderGood.setSuperiorType(myShoppingCartVo.getSuperiorType());
         orderGood.setSuperiorPriceType(myShoppingCartVo.getSuperiorPriceType());
         orderGood.setServuceShopCharges(myShoppingCartVo.getServuceShopCharges());
         orderGood.setServuceShopPoints(myShoppingCartVo.getServuceShopPoints());
         orderGood.setTechnicianPoints(myShoppingCartVo.getTechnicianPoints());
@@ -903,17 +910,21 @@
         //构建积分流水记录
         if(earnPoint > 0){
            PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
            int earnPoint1 = earnPoint;
            int earnPoint1 = 0;
            if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
               earnPoint1 = earnPoint1 * (100 - pointSetting.getBuyPoint());
               earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
            }
            appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
            appUser.setLavePoint(appUser.getLavePoint() + earnPoint1);
            appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
            appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint);
            appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
            if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
               appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
            }
            UserPoint userPoint = new UserPoint();
            userPoint.setType(1);
            userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint1);
            userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
            userPoint.setVariablePoint(earnPoint);
            userPoint.setBalance(appUser.getLavePoint());
            userPoint.setCreateTime(LocalDateTime.now());
@@ -924,6 +935,8 @@
         appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
         appUser.setLastShopTime(LocalDateTime.now());
         appUserClient.editAppUserById(appUser);
         //变更等级
         appUserClient.vipUpgrade(appUser.getId());
         //构建余额明细变动记录
         BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
         balanceChangeRecord.setAppUserId(appUser.getId());
@@ -943,26 +956,31 @@
         orderService.updateById(order);
         //删除购物车数据
         this.removeBatchByIds(ids);
         //检查消费积分满足后升级会员
         vipUpgrade(appUser);
      }
      //积分支付
      if(3 == shoppingCartPayment.getPaymentType()){
         Integer lavePoint = appUser.getLavePoint();
         PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
         int earnPoint1 = earnPoint;
         int earnPoint1 = 0;
         //计算可用积分比例
         if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
            earnPoint1 = earnPoint1 * (100 - pointSetting.getBuyPoint());
            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() + earnPoint1);
         appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
         appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
         if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
            appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
         }
         appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint);
         appUser.setLastShopTime(LocalDateTime.now());
         appUserClient.editAppUserById(appUser);
         //检查消费积分满足后升级会员
         vipUpgrade(appUser);
         //变更等级
         appUserClient.vipUpgrade(appUser.getId());
         //构建积分流水记录
         UserPoint userPoint = new UserPoint();
@@ -1065,47 +1083,4 @@
   }
   /**
    * 会员等级变化
    * @param appUser
    */
   public void vipUpgrade(AppUser appUser){
      Integer shopPoint = appUser.getShopPoint();
      Integer vipId = appUser.getVipId();
      //钻石会员
      VipSetting vipSetting3 = vipSettingClient.getVipSetting(3).getData();
      Integer vipLevelUpShopRole = vipSetting3.getVipLevelUpShopRole();
      Integer vipLevelUpShop = vipSetting3.getVipLevelUpShop();
      if(null != vipLevelUpShopRole && 1 == vipLevelUpShopRole && appUser.getVipId() < 3 && shopPoint >= vipLevelUpShop){
         appUser.setVipId(3);
         appUserClient.editAppUserById(appUser);
         //添加等级变化记录
         UserChangeLog userChangeLog = new UserChangeLog();
         userChangeLog.setDelFlag(0);
         userChangeLog.setCreateTime(LocalDateTime.now());
         userChangeLog.setAppUserId(appUser.getId());
         userChangeLog.setBeforeVipId(vipId);
         userChangeLog.setAfterVipId(appUser.getVipId());
         userChangeLog.setChangeType(1);
         userChangeLogClient.saveUserChangeLog(userChangeLog);
         return;
      }
      //黄金会员
      VipSetting vipSetting2 = vipSettingClient.getVipSetting(2).getData();
      vipLevelUpShopRole = vipSetting2.getVipLevelUpShopRole();
      vipLevelUpShop = vipSetting2.getVipLevelUpShop();
      if(null != vipLevelUpShopRole && 1 == vipLevelUpShopRole && appUser.getVipId() < 2 && shopPoint >= vipLevelUpShop){
         appUser.setVipId(2);
         appUserClient.editAppUserById(appUser);
         //添加等级变化记录
         UserChangeLog userChangeLog = new UserChangeLog();
         userChangeLog.setDelFlag(0);
         userChangeLog.setCreateTime(LocalDateTime.now());
         userChangeLog.setAppUserId(appUser.getId());
         userChangeLog.setBeforeVipId(vipId);
         userChangeLog.setAfterVipId(appUser.getVipId());
         userChangeLog.setChangeType(1);
         userChangeLogClient.saveUserChangeLog(userChangeLog);
      }
   }
}