| | |
| | | } |
| | | |
| | | BigDecimal cashAmount = merchandise.getCash() == null ? BigDecimal.ZERO : merchandise.getCash(); |
| | | // 门票优惠后的订单现金应付总额;支付参数必须使用该金额,不能再使用商品原价。 |
| | | BigDecimal ticketPayableCashAmount = null; |
| | | UserCoupon usedCoupon = null; |
| | | if (exchangeType.getGoodsType() == 3 && exchangeType.getCouponId() != null && exchangeType.getCouponId() != 0) { |
| | | if (exchangeType.getExchangeType() == 1) { |
| | |
| | | .divide(BigDecimal.valueOf(exchangeType.getNums() == null ? 1 : exchangeType.getNums()), 2, java.math.RoundingMode.HALF_UP); |
| | | } else if (Integer.valueOf(2).equals(coupon.getType())) { |
| | | BigDecimal deduction = rule.getBigDecimal("conditionalAmount"); |
| | | if (deduction == null) { |
| | | if (deduction == null || orderCash.compareTo(deduction) < 0) { |
| | | return ResultUtil.error("该优惠券无法使用"); |
| | | } |
| | | cashAmount = orderCash.subtract(deduction).max(BigDecimal.ZERO) |
| | | ticketPayableCashAmount = orderCash.subtract(deduction).max(BigDecimal.ZERO); |
| | | cashAmount = ticketPayableCashAmount |
| | | .divide(BigDecimal.valueOf(exchangeType.getNums() == null ? 1 : exchangeType.getNums()), 2, java.math.RoundingMode.HALF_UP); |
| | | } else { |
| | | return ResultUtil.error("该优惠券不支持购买门票"); |
| | |
| | | } else { |
| | | goodsNums = exchangeType.getNums(); |
| | | } |
| | | BigDecimal cashPaymentAmount = ticketPayableCashAmount == null |
| | | ? cashAmount.multiply(BigDecimal.valueOf(goodsNums)) |
| | | : ticketPayableCashAmount; |
| | | |
| | | TAppUser user = appUserService.getById(userIdFormRedis); |
| | | if (merchandise.getIntegral() != null) { |
| | |
| | | if (exchangeType.getExchangeType() == 1) { |
| | | pointsMerchandise.setPayStatus(2); |
| | | pointsMerchandise.setPaymentTime(new Date()); |
| | | } else if (cashPaymentAmount.compareTo(BigDecimal.ZERO) == 0) { |
| | | // 优惠券将现金部分完全抵扣时,不能向第三方支付发起 0 元或原价支付。 |
| | | pointsMerchandise.setPayStatus(2); |
| | | pointsMerchandise.setPaymentTime(new Date()); |
| | | } else { |
| | | pointsMerchandise.setPayStatus(1); |
| | | } |
| | |
| | | pointsMerchandise.setIntegral(merchandise.getIntegral() * goodsNums); |
| | | } |
| | | if (exchangeType.getExchangeType() == 2 || exchangeType.getExchangeType() == 3) { |
| | | pointsMerchandise.setCash(cashAmount); |
| | | pointsMerchandise.setCash(exchangeType.getGoodsType() == 3 ? cashPaymentAmount : cashAmount); |
| | | pointsMerchandise.setCashPayType(exchangeType.getPayType()); |
| | | } |
| | | |
| | |
| | | BeanUtils.copyProperties(pointsMerchandise, userPointsMerchandise); |
| | | // 一笔订单只能关联一次优惠券,避免拆分门票后重复计入优惠金额。 |
| | | userPointsMerchandise.setUserCouponId(null); |
| | | if (exchangeType.getGoodsType() == 3) { |
| | | // 门票拆单后仅首条保留订单总实付金额,避免支付/收入统计重复累加。 |
| | | userPointsMerchandise.setCash(BigDecimal.ZERO); |
| | | } |
| | | userPointsMerchandises.add(userPointsMerchandise); |
| | | } |
| | | System.err.println("新增额外购买记录"+userPointsMerchandises); |
| | |
| | | } |
| | | |
| | | } |
| | | if ((m * goodsNums) == 0 && pointsMerchandise.getPayStatus() == 2) { |
| | | if (pointsMerchandise.getPayStatus() == 2 && exchangeType.getExchangeType() != 1 |
| | | && cashPaymentAmount.compareTo(BigDecimal.ZERO) == 0) { |
| | | // 积分+现金商品被优惠券抵扣为零元时,仍需扣除积分;不等待支付回调。 |
| | | if (exchangeType.getExchangeType() == 2 && merchandise.getIntegral() != null |
| | | && merchandise.getIntegral() > 0 |
| | | && !dealAppUserIntegral(userIdFormRedis, tAppUser, merchandise.getIntegral() * goodsNums)) { |
| | | return ResultUtil.error("用户积分不足!"); |
| | | } |
| | | returnModel.setReturnId(returnId); |
| | | return ResultUtil.success(returnModel); |
| | | } |
| | |
| | | } else if (merchandise.getType() == 1) { |
| | | return WechatPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); |
| | | } else if (merchandise.getType() == 3) { |
| | | return WechatPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); |
| | | return WechatPayment(merchandise.getType(), cashPaymentAmount, code, merchandise.getId()); |
| | | } |
| | | } catch (Exception e) { |
| | | return ResultUtil.runErr(); |
| | |
| | | case 2: |
| | | if (merchandise.getType() == 2) { |
| | | return AlipayPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(exchangeType.getStuIds().size())), code, merchandise.getId()); |
| | | } else if (merchandise.getType() == 3) { |
| | | return AlipayPayment(merchandise.getType(), cashPaymentAmount, code, merchandise.getId()); |
| | | } else { |
| | | return AlipayPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); |
| | | } |
| | |
| | | try { |
| | | if (merchandise.getType() == 2) { |
| | | return WechatPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(exchangeType.getStuIds().size())), code, merchandise.getId()); |
| | | } else if (merchandise.getType() == 3) { |
| | | return WechatPayment(merchandise.getType(), cashPaymentAmount, code, merchandise.getId()); |
| | | } else { |
| | | return WechatPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); |
| | | } |
| | |
| | | case 2: |
| | | if (merchandise.getType() == 2) { |
| | | return AlipayPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(exchangeType.getStuIds().size())), code, merchandise.getId()); |
| | | } else if (merchandise.getType() == 3) { |
| | | return AlipayPayment(merchandise.getType(), cashPaymentAmount, code, merchandise.getId()); |
| | | } else { |
| | | return AlipayPayment(merchandise.getType(), cashAmount.multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); |
| | | } |