why 3 년 전
부모
커밋
e4f6be86a9

+ 16 - 8
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbServiceImpl.java

@@ -65,12 +65,18 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
         if (comCntToSnb.getReceivedDay() >= comCntToSnb.getTotalDay()) {
             return Result.of(null, false, "已全部领取完毕");
         }
-        // 计算可领天数. 服务器时间 - 开始时间
-        Integer day = Convert.toInt(DateUtil.betweenDay(comCntToSnb.getBeginTime(), new Date(), true));
-        if (day - comCntToSnb.getReceivedDay() <= 0) {
+        // 计算本次可领天数. 服务器时间 - 开始时间 - 已领取天数
+        Integer day = Convert.toInt(DateUtil.betweenDay(comCntToSnb.getBeginTime(), new Date(), true)) - comCntToSnb.getReceivedDay() + 1;
+        System.out.println("领取开始时间:" + DateUtil.format(comCntToSnb.getBeginTime(), "yyyy-MM-dd"));
+        System.out.println("服务器时间:" + DateUtil.format(new Date(), "yyyy-MM-dd"));
+        System.out.println("已领取:" + comCntToSnb.getReceivedDay() + "天,本次可领取:" + day + "天");
+        if (day <= 0) {
             return Result.of(null, false, "领取失败,今日已领取");
         }
-
+        // 特例:领取周期100天,这个人间隔100以后上线
+        if (day > comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay()) {
+            day = comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay();
+        }
         long time = System.currentTimeMillis() + RedisData.getSnbTimeout();
         String redisKey = StrUtil.format("SNB_SAVE_{}", userId);
 
@@ -102,7 +108,7 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
 //            snbTran.setTranType();
             snbTran.setTranAmount(Convert.toInt(thisReceiveQuantity));
 //            snbTran.setTranPrice();
-            snbTran.setTranDescribe(String.format("user领取SNB、本次领取:{},剩余:", thisReceiveQuantity, comCntToSnb.getTotalQuantity().multiply(comCntToSnb.getReceivedQuantity())));
+            snbTran.setTranDescribe(StrUtil.format("user领取SNB、本次领取:{},剩余:{}", thisReceiveQuantity, comCntToSnb.getTotalQuantity().subtract(comCntToSnb.getReceivedQuantity())));
             snbTran.setIsAdd(1);
             snbTran.setBeforeSnb(0);
             snbTran.setTranSnb(0);
@@ -115,14 +121,16 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
             snbTran.setBeforeSnbPart(Convert.toDouble(comCntToSnb.getReceivedQuantity().subtract(thisReceiveQuantity)));
             // 交易完成后的snb
             snbTran.setAfterSnbPart(Convert.toDouble(comCntToSnb.getReceivedQuantity()));
+            snbTran.setCreateTime(new Date());
             comSnbTranService.save(snbTran);
 
-            // redis解锁
-            redisLock.unlock(redisKey, String.valueOf(time));
             return Result.of(null, false, "领取成功");
+
         } catch (Exception e) {
-            redisLock.unlock(redisKey, String.valueOf(time));
             throw new RuntimeException(e.getMessage());
+        } finally {
+            // redis解锁
+            redisLock.unlock(redisKey, String.valueOf(time));
         }
     }
 }

+ 9 - 9
src/test/java/com/td/boss/ComPlayerDisasterLogTests.java

@@ -85,10 +85,10 @@ class ComPlayerDisasterLogTests {
     @Test
     void getCntToSnb() {
         // 情况一,在名单中
-        String json = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("1002")));
+        String json = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("952")));
         System.out.println(json);
         // 情况二,不在名单中
-        String json2 = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("1000")));
+        String json2 = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("9527")));
         System.out.println(json2);
     }
 
@@ -97,13 +97,13 @@ class ComPlayerDisasterLogTests {
      */
     @Test
     void receiveCntToSnb() {
-        Date begin = DateUtil.parse("2022-03-01");
-        Date end = DateUtil.parse("2022-03-05");
+//        Date begin = DateUtil.parse("2022-03-01");
+//        Date end = DateUtil.parse("2022-03-05");
+//
+//        Integer day = Convert.toInt(DateUtil.betweenDay(begin, end, true));
+//        System.out.println(DateUtil.format(begin, "yyyy-MM-dd") + " 至 " + DateUtil.format(end, "yyyy-MM-dd") + "相差:" + day + "天");
 
-        Integer day = Convert.toInt(DateUtil.betweenDay(begin, end, true));
-        System.out.println(DateUtil.format(begin, "yyyy-MM-dd") + " 至 " + DateUtil.format(end, "yyyy-MM-dd") + "相差:" + day + "天");
-
-//        String json = JSONUtil.toJsonStr(comCntToSnbService.receiveByUserId("1002"));
-//        System.out.println(json);
+        String json = JSONUtil.toJsonStr(comCntToSnbService.receiveByUserId("952"));
+        System.out.println(json);
     }
 }