Browse Source

修复特殊情况下速率没加成的情况

xudm 2 months ago
parent
commit
7e20710386

+ 5 - 3
src/main/java/com/xs/core/mq/consumer/GoldCoinProductMessageConsumer.java

@@ -134,17 +134,19 @@ public class GoldCoinProductMessageConsumer {
 
             // 计算旧速率的金币产出
             long oldRateDuration = Math.min(rateUpdateTimestamp - lastTimestamp, timeDifference);
-            BigDecimal oldRate = new BigDecimal(goldCoinProdState.getDurableRate());
+            BigDecimal oldRate = new BigDecimal(goldCoinProdState.getCurrentRate());
             newValue = currentValue.add(oldRate.multiply(BigDecimal.valueOf(oldRateDuration)));
 
             // 计算新速率的金币产出
             long newRateDuration = timeDifference - oldRateDuration;
+            String newRateStr = upgradesState.getCurrentRate();
+            //时间差大于0,再计算新速率的值
             if (newRateDuration > 0) {
-                String newRateStr = upgradesState.getCurrentRate();
                 BigDecimal newRate = new BigDecimal(newRateStr != null ? newRateStr : "0");
                 newValue = newValue.add(newRate.multiply(BigDecimal.valueOf(newRateDuration)));
-                goldCoinProdState.setCurrentRate(newRateStr);
             }
+            // 处理速率升级的状态
+            goldCoinProdState.setCurrentRate(newRateStr);
             goldCoinProdState.setDurableRate(upgradesState.getDurableRate());
             goldCoinProdState.setTemporaryRate(upgradesState.getTemporaryRate());
             upgradesState.setRateUpdateFlag(2);

+ 5 - 0
src/main/java/com/xs/core/utils/InviteCodeGenerator.java

@@ -3,6 +3,8 @@ package com.xs.core.utils;
 import cn.hutool.crypto.digest.DigestUtil;
 import jakarta.xml.bind.DatatypeConverter;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.security.SecureRandom;
 
 public class InviteCodeGenerator {
@@ -65,5 +67,8 @@ public class InviteCodeGenerator {
         for (int i = 0; i < 5; i++) {
             System.out.println("邀请码 " + (i + 1) + ": " + generateInviteCode());
         }
+
+        BigDecimal rateNum = new BigDecimal("5").divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+        System.out.println(rateNum.toPlainString());
     }
 }