Administrator
2025-05-09 320e9165ac6cc6d90978fbef3074a8ed9add1790
src/main/java/com/taoke/autopay/manager/UserCreditExchangeManager.java
@@ -62,7 +62,6 @@
        }
        // 如果是红包兑换,判断用户兑换频率
        if (exchangeType == CreditExchangeRecord.ExchangeType.FUND_EXCHANGE) {
            checkRedPacketExchangeFrequency(userId);
@@ -78,7 +77,7 @@
        if (exchangeType == CreditExchangeRecord.ExchangeType.FUND_EXCHANGE) {
            // 计算可兑换金额(如果是红包兑换)
            BigDecimal exchangeAmount = calculateExchangeAmount(request.getUid(), request.getConsumedCredits());
            BigDecimal exchangeAmount = calculateExchangeAmount(request.getUid(), request.getConsumedCredits(), true);
            exchangeRecord.setExchangeValue(exchangeAmount);
        }
@@ -123,6 +122,7 @@
            throw new UserCreditExchangeException(UserCreditExchangeException.CODE_COMMON, "兑换已处理");
        }
        // 如果是红包兑换,调用通过兑换逻辑(TODO)
        if (exchangeRecord.getExchangeType() == CreditExchangeRecord.ExchangeType.FUND_EXCHANGE) {
            try {
@@ -141,6 +141,7 @@
                        .exchangeStatusDescription("兑换已通过")
                        .updateTime(new Date())
                .build());
    }
    /**
@@ -205,11 +206,12 @@
    /**
     * 计算兑换金额
     *
     * @param uid
     * @param credit
     * @return
     */
    public BigDecimal calculateExchangeAmount(Long uid, int credit) throws UserCreditExchangeException{
    public BigDecimal calculateExchangeAmount(Long uid, int credit, boolean forExchange) throws UserCreditExchangeException {
        long count =  userCreditExchangeRecordService.countExchangeRecords(CreditExchangeRecordMapper.DaoQuery.builder()
                .uid(uid).build());
        Date nowDate =  new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(System.currentTimeMillis(),"yyyyMMddHHmm"),"yyyyMMddHHmm"));
@@ -240,11 +242,12 @@
            }
            money = new BigDecimal(credit).multiply(rates.get(0).getRate()).setScale(2, RoundingMode.HALF_UP);
        }
        if (forExchange) {
        CreditSetting setting =  creditSettingService.getSettingCacheByType(CreditSetting.CreditSettingType.MINIMUM_EXCHANGE_AMOUNT, nowDate);
        if(setting!=null&& new BigDecimal(setting.getValue()).compareTo(money)>0){
            throw new UserCreditExchangeException(UserCreditExchangeException.CODE_COMMON,String.format("兑换金额不能低于%s元",setting.getValue()));
        }
        }
        return money;
    }
}