| | |
| | | record.setDetailId(detail.getId()); |
| | | record.setOrderId(0L); |
| | | record.setUserId(userId); |
| | | record.setUsedAmount(amount); |
| | | fillUseRecordAmount(record, amount, detail.getGiftRatio()); |
| | | record.setRecordChangeType(1); |
| | | useRecordMapper.insert(record); |
| | | refreshPackageStats(exchangePackage.getId()); |
| | | ExchangeCodeBindResultVO resultVO = new ExchangeCodeBindResultVO(); |
| | |
| | | record.setDetailId(detail.getId()); |
| | | record.setOrderId(dto.getOrderId()); |
| | | record.setUserId(dto.getUserId()); |
| | | record.setUsedAmount(useAmount); |
| | | fillUseRecordAmount(record, useAmount, detail.getGiftRatio()); |
| | | record.setRecordChangeType(2); |
| | | useRecordMapper.insert(record); |
| | | remainingNeed = remainingNeed.subtract(useAmount); |
| | | deductedAmount = deductedAmount.add(useAmount); |
| | |
| | | } |
| | | } |
| | | |
| | | private void fillUseRecordAmount(TExchangeCodeUseRecord record, BigDecimal amount, BigDecimal giftRatio) { |
| | | BigDecimal usedAmount = defaultMoney(amount); |
| | | BigDecimal ratio = giftRatio == null ? BigDecimal.ZERO : giftRatio; |
| | | if (ratio.compareTo(BigDecimal.ZERO) < 0) { |
| | | ratio = BigDecimal.ZERO; |
| | | } |
| | | BigDecimal giftUsedAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | | if (ratio.compareTo(BigDecimal.ZERO) > 0) { |
| | | BigDecimal divisor = BigDecimal.ONE.add(ratio); |
| | | BigDecimal principalAmount = usedAmount.divide(divisor, 2, RoundingMode.HALF_UP); |
| | | giftUsedAmount = usedAmount.subtract(principalAmount).setScale(2, RoundingMode.HALF_UP); |
| | | } |
| | | record.setUsedAmount(usedAmount); |
| | | record.setGiftUsedAmount(giftUsedAmount); |
| | | } |
| | | |
| | | private BigDecimal defaultMoney(BigDecimal amount) { |
| | | return amount == null ? BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP) |
| | | : amount.setScale(2, RoundingMode.HALF_UP); |