Просмотр исходного кода

Merge branch 'master' of http://81.70.224.233:10080/slambb/FragrantTown_Server_Local

slambb 4 лет назад
Родитель
Сommit
63adf2a0bd

+ 4 - 7
src/main/java/com/td/boss/game/comcnttosnb/pojo/ComCntToSnb.java

@@ -19,11 +19,11 @@ import java.util.Date;
 public class ComCntToSnb implements Serializable {
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    private Integer id;
+    private Long id;
     /**
-     * 用户id
+     * 钱包地址
      */
-    private String userId;
+    private String address;
     /**
      * 需要返还的总数
      */
@@ -32,10 +32,7 @@ public class ComCntToSnb implements Serializable {
      * 已领取数量
      */
     private BigDecimal receivedQuantity;
-    /**
-     * 单位数量(每天可领取量)
-     */
-    private BigDecimal unitQuantity;
+
     /**
      * 领取总天数
      */

+ 2 - 2
src/main/java/com/td/boss/game/comcnttosnb/repository/ComCntToSnbRespository.java

@@ -2,6 +2,7 @@ package com.td.boss.game.comcnttosnb.repository;
 
 import com.td.boss.common.repository.CommonRepository;
 import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
@@ -9,6 +10,5 @@ import java.util.Optional;
 @Repository
 public interface ComCntToSnbRespository extends CommonRepository<ComCntToSnb, Integer> {
 
-    Optional<ComCntToSnb> findByUserId(String userId);
-
+    ComCntToSnb findByAddress(String address);
 }

+ 29 - 11
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbServiceImpl.java

@@ -22,7 +22,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.swing.plaf.ProgressBarUI;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 
 @Slf4j
@@ -46,7 +48,11 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
      */
     @Override
     public ComCntToSnbVo findByUserId(String userId) {
-        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByUserId(userId).orElse(null);
+        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
+        if (comUsersVo == null || StrUtil.isBlank(comUsersVo.getAddress())) {
+            return null;
+        }
+        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByAddress(comUsersVo.getAddress());
         return comCntToSnb == null ? null : CopyUtil.copy(comCntToSnb, ComCntToSnbVo.class);
     }
 
@@ -59,14 +65,20 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result<String> receiveByUserId(String userId) {
-
-        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByUserId(userId).orElse(null);
+        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
+        if (comUsersVo == null || StrUtil.isBlank(comUsersVo.getAddress())) {
+            return Result.of(null, false, "未找到用户或钱包地址");
+        }
+        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByAddress(comUsersVo.getAddress());
         if (comCntToSnb == null || comCntToSnb.getStatus().equals(0)) {
             return Result.of(null, false, "非法领取");
         }
         if (comCntToSnb.getReceivedDay() >= comCntToSnb.getTotalDay()) {
             return Result.of(null, false, "已全部领取完毕");
         }
+        if (comCntToSnb.getBeginTime() == null) {
+            return Result.of(null, false, "未设置领取开始时间");
+        }
         // 服务器时间
         Date serverDate = new Date();
         // 未到领取时间
@@ -82,11 +94,6 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
         if (day <= 0) {
             return Result.of(null, false, "领取失败,今日已领取");
         }
-        // 特例:领取周期100天,这个人间隔100以后上线
-        if (day > comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay()) {
-            day = comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay();
-            log.info("由于本次领取天数大于剩余领取天数,所以最终领取天数:" + day);
-        }
         long time = System.currentTimeMillis() + RedisData.getSnbTimeout();
         String redisKey = StrUtil.format("SNB_SAVE_{}", userId);
 
@@ -95,9 +102,21 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
             if (!redisLock.lock(redisKey, String.valueOf(time))) {
                 return Result.of(null, false, ResultEnum.SEED_SALE_SAVE_LOCK.getMessage(), ResultEnum.SEED_SALE_SAVE_LOCK.getCode());
             }
-
+            // 单次领取数量
+            BigDecimal receiveNum = NumberUtil.round(NumberUtil.div(comCntToSnb.getTotalQuantity(), comCntToSnb.getTotalDay()), 2, RoundingMode.DOWN);
+            log.info("每天领取数量:" + receiveNum);
             // 本次领取量
-            BigDecimal thisReceiveQuantity = NumberUtil.mul(comCntToSnb.getUnitQuantity(), day);
+            BigDecimal thisReceiveQuantity;
+            // 特例:领取周期100天,这个人间隔100以后上线
+            if (day >= comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay()) {
+                day = comCntToSnb.getTotalDay() - comCntToSnb.getReceivedDay();
+                log.info("由于本次领取天数大于剩余领取天数,所以最终领取天数:" + day);
+                thisReceiveQuantity = NumberUtil.sub(comCntToSnb.getTotalQuantity(), NumberUtil.mul(comCntToSnb.getReceivedDay(), receiveNum));
+            } else {
+                // 本次领取量
+                thisReceiveQuantity = NumberUtil.mul(receiveNum, day);
+            }
+
             comCntToSnb.setReceivedQuantity(comCntToSnb.getReceivedQuantity().add(thisReceiveQuantity));
             // 本次领取天数
             comCntToSnb.setReceivedDay(comCntToSnb.getReceivedDay() + day);
@@ -105,7 +124,6 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
             comCntToSnbRespository.save(comCntToSnb);
 
             // 更新comUsers snb+
-            ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
             comUsersVo.setSnbPart(comUsersVo.getSnbPart() + Convert.toDouble(thisReceiveQuantity));
             comUsersService.save(comUsersVo);
 

+ 1 - 9
src/main/java/com/td/boss/game/comcnttosnb/vo/ComCntToSnbVo.java

@@ -16,11 +16,7 @@ import java.util.Date;
 @Data
 public class ComCntToSnbVo implements Serializable {
 
-    private Integer id;
-    /**
-     * 用户id
-     */
-    private String userId;
+    private Long id;
     /**
      * 需要返还的总数
      */
@@ -29,10 +25,6 @@ public class ComCntToSnbVo implements Serializable {
      * 已领取数量
      */
     private BigDecimal receivedQuantity;
-    /**
-     * 单位数量(每天可领取量)
-     */
-    private BigDecimal unitQuantity;
     /**
      * 领取总天数
      */

+ 5 - 5
src/main/resources/application.yml

@@ -48,9 +48,9 @@ spring:
 
   #数据库配置
   datasource:
-    url: jdbc:mysql://123.57.252.53:6688/dragon_town?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8
-    username: root #dragon_town #root
-    password:  FzCebFq6Xy0CDTXJ #zddeiBmp8c5T6TR6 #9ab8fad748dead93
+    url: jdbc:mysql://127.0.0.1:6688/dragon_town?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8
+    username: dragon_town #dragon_town #root
+    password:  zddeiBmp8c5T6TR6 #zddeiBmp8c5T6TR6 #9ab8fad748dead93
     driver-class-name: com.mysql.cj.jdbc.Driver
     hikari:
       minimum-idle: 5
@@ -62,9 +62,9 @@ spring:
       connection-test-query: SELECT 1
 
   redis:
-    host: 123.57.252.53
+    host: 127.0.0.1
     port: 6379
-    password: heihei
+    password:
     data: #工程中只是把redis作为缓存,并未使用redis作为数据持久化存储源repository使用.
       redis:
         repositories:

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

@@ -1,14 +1,13 @@
 package com.td.boss;
 
-import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.game.comcnttosnb.service.ComCntToSnbService;
 import com.td.boss.game.complayerland.pojo.ComPlayerDisasterLog;
-import com.td.boss.game.complayerland.service.ComPlayerDisasterProtectedService;
 import com.td.boss.game.complayerland.service.ComPlayerDisasterLogService;
+import com.td.boss.game.complayerland.service.ComPlayerDisasterProtectedService;
 import com.td.boss.game.complayerland.vo.ComPlayerDisasterEnum;
 import com.td.boss.game.complayerland.vo.ComPlayerDisasterProtectedVo;
 import org.junit.jupiter.api.Test;
@@ -88,7 +87,7 @@ class ComPlayerDisasterLogTests {
         String json = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("952")));
         System.out.println(json);
         // 情况二,不在名单中
-        String json2 = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("9527")));
+        String json2 = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("13")));
         System.out.println(json2);
     }
 
@@ -103,7 +102,8 @@ class ComPlayerDisasterLogTests {
 //        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("952"));
+        String json = JSONUtil.toJsonStr(comCntToSnbService.receiveByUserId("13"));
         System.out.println(json);
+
     }
 }