xst 4 лет назад
Родитель
Сommit
f57fc8608e

+ 1 - 1
src/main/java/com/td/boss/game/complayerland/pojo/ComPlayerDisasterProtected.java

@@ -20,7 +20,7 @@ public class ComPlayerDisasterProtected implements Serializable {
     private Integer dsasterType;
 
     /**
-     * 保护时间
+     * 保护时间 到期时间
      */
     private Date protectTime;
     private String userId;

+ 14 - 0
src/main/java/com/td/boss/game/complayerland/service/ComPlayerDisasterProtectedService.java

@@ -2,11 +2,25 @@ package com.td.boss.game.complayerland.service;
 
 import com.td.boss.common.service.CommonService;
 import com.td.boss.game.complayerland.pojo.ComPlayerDisasterProtected;
+import com.td.boss.game.complayerland.vo.ComPlayerDisasterEnum;
 import com.td.boss.game.complayerland.vo.ComPlayerDisasterProtectedVo;
 
 import java.util.List;
 
 public interface ComPlayerDisasterProtectedService extends CommonService<ComPlayerDisasterProtectedVo, ComPlayerDisasterProtected, String> {
 
+    /**
+     * 获取购买过的历史防护
+     * @param userId
+     * @return
+     */
     List<ComPlayerDisasterProtected> getComPlayerDisasterProtectedByUserIdOrderByProtectTimeDesc(String userId);
+
+    /**
+     * 购买灾难防护 自动延长时间
+     * @param userId 购买者
+     * @param comPlayerDisasterEnum 购买类型
+     * @param days 购买天数
+     */
+    void append(String userId, ComPlayerDisasterEnum comPlayerDisasterEnum, Integer days);
 }

+ 30 - 0
src/main/java/com/td/boss/game/complayerland/service/ComPlayerDisasterProtectedServiceImpl.java

@@ -1,13 +1,18 @@
 package com.td.boss.game.complayerland.service;
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import com.td.boss.common.service.CommonServiceImpl;
 import com.td.boss.game.complayerland.pojo.ComPlayerDisasterProtected;
 import com.td.boss.game.complayerland.repository.ComPlayerDisasterProtectedRepository;
+import com.td.boss.game.complayerland.vo.ComPlayerDisasterEnum;
 import com.td.boss.game.complayerland.vo.ComPlayerDisasterProtectedVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -18,10 +23,35 @@ public class ComPlayerDisasterProtectedServiceImpl extends CommonServiceImpl<Com
 
     /**
      * 按照用户编号获取 防护灾难 记录
+     *
      * @param userId
      * @return
      */
     public List<ComPlayerDisasterProtected> getComPlayerDisasterProtectedByUserIdOrderByProtectTimeDesc(String userId) {
         return repository.getComPlayerDisasterProtectedsByUserId(userId);
     }
+
+    /**
+     * 购买灾难防护 自动延长时间
+     * @param userId 购买者
+     * @param comPlayerDisasterEnum 购买类型
+     * @param days 购买天数
+     */
+    public void append(String userId, ComPlayerDisasterEnum comPlayerDisasterEnum, Integer days) {
+        //获取购买过的历史防护
+        List<ComPlayerDisasterProtected> protectedList = getComPlayerDisasterProtectedByUserIdOrderByProtectTimeDesc(userId);
+        //获取 当前类型 防护时间 倒叙第一条作为最后防御时间
+        Date protectTime = protectedList.stream()
+                .filter(a -> a.getDsasterType().equals(comPlayerDisasterEnum.getCode()))
+                .sorted(Comparator.comparing(ComPlayerDisasterProtected::getProtectTime).reversed())
+                .map(ComPlayerDisasterProtected::getProtectTime).findFirst().orElse(new Date());
+
+        ComPlayerDisasterProtectedVo comPlayerDisasterProtected = new ComPlayerDisasterProtectedVo();
+        comPlayerDisasterProtected.setCreateTime(new Date());
+        comPlayerDisasterProtected.setUserId(userId);
+        comPlayerDisasterProtected.setDsasterType(comPlayerDisasterEnum.getCode());
+        comPlayerDisasterProtected.setDsasterName(comPlayerDisasterEnum.getMsg());
+        comPlayerDisasterProtected.setProtectTime(DateUtil.date(protectTime).offset(DateField.DAY_OF_YEAR, days));
+        save(comPlayerDisasterProtected);
+    }
 }

+ 7 - 15
src/test/java/com/td/boss/ComPlayerDisasterLogTests.java

@@ -37,21 +37,13 @@ class ComPlayerDisasterLogTests {
      */
     @Test
     void playerAddProtected() {
-        ComPlayerDisasterProtectedVo comPlayerDisasterProtected = new ComPlayerDisasterProtectedVo();
-        comPlayerDisasterProtected.setCreateTime(new Date());
-        comPlayerDisasterProtected.setUserId(userId);
-        comPlayerDisasterProtected.setDsasterType(ComPlayerDisasterEnum.ziran.getCode());
-        comPlayerDisasterProtected.setDsasterName(ComPlayerDisasterEnum.ziran.getMsg());
-        comPlayerDisasterProtected.setProtectTime(DateUtil.date(new Date()).offset(DateField.DAY_OF_WEEK, 30));
-        comPlayerDisasterProtectedService.save(comPlayerDisasterProtected);
-
-        comPlayerDisasterProtected = new ComPlayerDisasterProtectedVo();
-        comPlayerDisasterProtected.setCreateTime(new Date());
-        comPlayerDisasterProtected.setUserId(userId);
-        comPlayerDisasterProtected.setDsasterType(ComPlayerDisasterEnum.yeshou.getCode());
-        comPlayerDisasterProtected.setDsasterName(ComPlayerDisasterEnum.yeshou.getMsg());
-        comPlayerDisasterProtected.setProtectTime(DateUtil.date(new Date()).offset(DateField.DAY_OF_WEEK, -30));
-        comPlayerDisasterProtectedService.save(comPlayerDisasterProtected);
+        comPlayerDisasterProtectedService.append(userId,ComPlayerDisasterEnum.ziran,30);
+
+        comPlayerDisasterProtectedService.append(userId,ComPlayerDisasterEnum.yeshou,30);
+
+        comPlayerDisasterProtectedService.append("1003",ComPlayerDisasterEnum.ziran,30);
+
+        comPlayerDisasterProtectedService.append("1003",ComPlayerDisasterEnum.yeshou,30);
     }
 
     /**