|
@@ -1,5 +1,7 @@
|
|
|
package com.td.boss.game.complayerland.controller;
|
|
package com.td.boss.game.complayerland.controller;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.RandomUtil;
|
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import com.td.boss.common.controller.*;
|
|
import com.td.boss.common.controller.*;
|
|
|
import com.td.boss.common.pojo.Result;
|
|
import com.td.boss.common.pojo.Result;
|
|
|
import com.td.boss.config.enums.ResultEnum;
|
|
import com.td.boss.config.enums.ResultEnum;
|
|
@@ -8,12 +10,14 @@ import com.td.boss.game.comexplainland.vo.ComExplainLandVo;
|
|
|
import com.td.boss.game.commallseed.service.ComMallSeedService;
|
|
import com.td.boss.game.commallseed.service.ComMallSeedService;
|
|
|
import com.td.boss.game.commallseed.vo.ComMallSeedVo;
|
|
import com.td.boss.game.commallseed.vo.ComMallSeedVo;
|
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerDisasterLog;
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerDisasterLog;
|
|
|
|
|
+import com.td.boss.game.complayerland.pojo.ComPlayerDisasterProtected;
|
|
|
import com.td.boss.game.complayerland.service.ComPlayerDisasterLogService;
|
|
import com.td.boss.game.complayerland.service.ComPlayerDisasterLogService;
|
|
|
import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
|
|
import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
|
|
|
import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
|
|
import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
|
|
|
import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
|
|
import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
|
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerLand;
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerLand;
|
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerLandAndCanSteal;
|
|
import com.td.boss.game.complayerland.pojo.ComPlayerLandAndCanSteal;
|
|
|
|
|
+import com.td.boss.game.complayerland.service.ComPlayerDisasterProtectedService;
|
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandAndPlantVo;
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandAndPlantVo;
|
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandAndUserInfoVo;
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandAndUserInfoVo;
|
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandSimpleVo;
|
|
import com.td.boss.game.complayerland.vo.ComPlayerLandSimpleVo;
|
|
@@ -21,6 +25,8 @@ import com.td.boss.game.complayerland.vo.ComPlayerLandVo;
|
|
|
import com.td.boss.game.complayerland.service.ComPlayerLandService;
|
|
import com.td.boss.game.complayerland.service.ComPlayerLandService;
|
|
|
import com.td.boss.game.complayerlog.service.ComPlayerLogService;
|
|
import com.td.boss.game.complayerlog.service.ComPlayerLogService;
|
|
|
import com.td.boss.game.complayerlog.vo.ComPlayerLogVo;
|
|
import com.td.boss.game.complayerlog.vo.ComPlayerLogVo;
|
|
|
|
|
+import com.td.boss.game.complayerprofit.pojo.ComPlayerProfit;
|
|
|
|
|
+import com.td.boss.game.complayerprofit.service.ComPlayerProfitService;
|
|
|
import com.td.boss.util.*;
|
|
import com.td.boss.util.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -56,6 +62,15 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private ComPlayerDisasterLogService comPlayerDisasterLogService;
|
|
private ComPlayerDisasterLogService comPlayerDisasterLogService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ComPlayerDisasterProtectedService disasterProtectedService;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ComPlayerProfitService comPlayerProfitService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedisLock redisLock;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获取用户土地
|
|
* 获取用户土地
|
|
@@ -77,6 +92,7 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
List<ComPlayerLandAndPlantVo> _simpleVoList = CopyUtil.copyList(comPlayerLands, ComPlayerLandAndPlantVo.class);
|
|
List<ComPlayerLandAndPlantVo> _simpleVoList = CopyUtil.copyList(comPlayerLands, ComPlayerLandAndPlantVo.class);
|
|
|
List<ComPlayerLandAndPlantVo> _list = new ArrayList<>();
|
|
List<ComPlayerLandAndPlantVo> _list = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
_simpleVoList.stream().map(e -> {
|
|
_simpleVoList.stream().map(e -> {
|
|
|
ComPlayerLandAndPlantVo comPlayerLandAndPlantVo = e;
|
|
ComPlayerLandAndPlantVo comPlayerLandAndPlantVo = e;
|
|
@@ -126,6 +142,8 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
//说明可以收获了
|
|
//说明可以收获了
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
|
|
|
+ //生成第一次受灾
|
|
|
|
|
+ _InitFirstDisasterProfit(comPlayerLandAndPlantVo,comMallSeedVo);
|
|
|
} else {
|
|
} else {
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
@@ -195,6 +213,9 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
//说明可以收获了
|
|
//说明可以收获了
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
|
|
|
+ //生成第一次受灾
|
|
|
|
|
+ _InitFirstDisasterProfit(comPlayerLandAndPlantVo,comMallSeedVo);
|
|
|
|
|
+
|
|
|
} else {
|
|
} else {
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
@@ -283,6 +304,8 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
@RequestParam(value = "landId") Integer landId,
|
|
@RequestParam(value = "landId") Integer landId,
|
|
|
@RequestParam(value = "seedId") Integer seedId) {
|
|
@RequestParam(value = "seedId") Integer seedId) {
|
|
|
|
|
|
|
|
|
|
+ long time = System.currentTimeMillis() + RedisData.getPlayerDisastersFirstTimeout();
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
ComPlayerLand comPlayerLand = comPlayerLandService.findByUserIdAndLandId(userId, landId);
|
|
ComPlayerLand comPlayerLand = comPlayerLandService.findByUserIdAndLandId(userId, landId);
|
|
|
//土地数据不存在
|
|
//土地数据不存在
|
|
@@ -410,6 +433,11 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
//说明可以收获了
|
|
//说明可以收获了
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(0);
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(0);
|
|
|
|
|
+
|
|
|
|
|
+ //生成第一次受灾
|
|
|
|
|
+ _InitFirstDisasterProfit(comPlayerLandAndPlantVo,comMallSeedVo);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
} else {
|
|
} else {
|
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantDaysRemaining(DateUtil.getDays(diff).intValue());
|
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
comPlayerLandAndPlantVo.setPlantHoursRemaining(DateUtil.getHours(diff).intValue());
|
|
@@ -445,6 +473,7 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获得某个用个 灾难情况
|
|
* 获得某个用个 灾难情况
|
|
|
|
|
+ *
|
|
|
* @param userId
|
|
* @param userId
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
@@ -454,4 +483,64 @@ public class ComPlayerLandController extends CommonController<ComPlayerLandVo, C
|
|
|
List<ComPlayerDisasterLog> history = comPlayerDisasterLogService.getHistory(userId);
|
|
List<ComPlayerDisasterLog> history = comPlayerDisasterLogService.getHistory(userId);
|
|
|
return Result.of(history);
|
|
return Result.of(history);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private void _InitFirstDisasterProfit(ComPlayerLandAndPlantVo comPlayerLandAndPlantVo,ComMallSeedVo comMallSeedVo){
|
|
|
|
|
+ //这里处理一次判断是否发生过第一次灾难
|
|
|
|
|
+ //todo 添加一个灾难损失,灾难损失的时间点是种植开始到成熟阶段的一个随机时间
|
|
|
|
|
+ // 加个锁判断,是否在其他地方触发了这次灾难计算(自解锁)
|
|
|
|
|
+ long time = System.currentTimeMillis() + RedisData.getPlayerDisastersFirstTimeout();
|
|
|
|
|
+ String _disasterKey = RedisData.getPlayerDisastersFirstKey() + comPlayerLandAndPlantVo.getPlantFlag();
|
|
|
|
|
+ if (redisLock.lock(_disasterKey, String.valueOf(time))) {
|
|
|
|
|
+ //查询当前人员购买防护历史记录
|
|
|
|
|
+ List<ComPlayerDisasterProtected> protectList = disasterProtectedService.getComPlayerDisasterProtectedByUserIdOrderByProtectTimeDesc(comPlayerLandAndPlantVo.getUserId());
|
|
|
|
|
+
|
|
|
|
|
+ //灾难发生时间
|
|
|
|
|
+ Date endDate = com.td.boss.util.DateUtil.getOldDateAddDay(comPlayerLandAndPlantVo.getPlantStart(), comPlayerLandAndPlantVo.getPlantMature());
|
|
|
|
|
+ long randomDate = RandomUtil.randomLong(comPlayerLandAndPlantVo.getPlantStart().getTime(), endDate.getTime());
|
|
|
|
|
+ Date disasterDate = new Date(randomDate);
|
|
|
|
|
+ //获取损失的数据
|
|
|
|
|
+ List<ComPlayerProfit> comPlayerProfits = comPlayerProfitService.findByUserIdAndPlantFlagAndLandId(comPlayerLandAndPlantVo.getUserId(), comPlayerLandAndPlantVo.getPlantFlag(), comPlayerLandAndPlantVo.getConfigLandId());
|
|
|
|
|
+ boolean isNaturalProfit = false,isBeastProfit = false;
|
|
|
|
|
+ for (int j = 0; j < comPlayerProfits.size(); j++) {
|
|
|
|
|
+ ComPlayerProfit _profit = comPlayerProfits.get(j);
|
|
|
|
|
+ if(_profit.getLossType().equals(2)){
|
|
|
|
|
+ isNaturalProfit = true;
|
|
|
|
|
+ }else if(_profit.getLossType().equals(3)){
|
|
|
|
|
+ isBeastProfit = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("用户编号:{},防护历史记录:{}", comPlayerLandAndPlantVo.getUserId(), JSONUtil.toJsonStr(protectList));
|
|
|
|
|
+ //获得对应灾难类型的防护记录 并得到这个 防护到期时间. 自然灾害类型
|
|
|
|
|
+ //如果没有防护或者防护到期。则直接发生灾难进行减产
|
|
|
|
|
+ if(!isNaturalProfit ){
|
|
|
|
|
+ Date _protectedDate = protectList.stream()
|
|
|
|
|
+ .filter(a -> a.getDsasterType().equals(2))
|
|
|
|
|
+ .sorted(Comparator.comparing(ComPlayerDisasterProtected::getProtectTime).reversed())
|
|
|
|
|
+ .map(ComPlayerDisasterProtected::getProtectTime)
|
|
|
|
|
+ .findFirst().orElse(cn.hutool.core.date.DateUtil.parse(null));
|
|
|
|
|
+ //如果没有防护或者防护到期。则直接发生灾难进行减产
|
|
|
|
|
+ if (_protectedDate != null && disasterDate.before(_protectedDate)) {
|
|
|
|
|
+ //灾难的随机时间比防护包时间后,说明防护包到期
|
|
|
|
|
+ //成熟的时候触发第一次自然灾难
|
|
|
|
|
+ comPlayerProfitService.addDisasterAndLoss(CopyUtil.copy(comPlayerLandAndPlantVo, ComPlayerLand.class),
|
|
|
|
|
+ comMallSeedVo, 2);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(!isBeastProfit){
|
|
|
|
|
+ Date _protectedDate = protectList.stream()
|
|
|
|
|
+ .filter(a -> a.getDsasterType().equals(3))
|
|
|
|
|
+ .sorted(Comparator.comparing(ComPlayerDisasterProtected::getProtectTime).reversed())
|
|
|
|
|
+ .map(ComPlayerDisasterProtected::getProtectTime)
|
|
|
|
|
+ .findFirst().orElse(cn.hutool.core.date.DateUtil.parse(null));
|
|
|
|
|
+ //如果没有防护或者防护到期。则直接发生灾难进行减产
|
|
|
|
|
+ if (_protectedDate != null && disasterDate.before(_protectedDate)) {
|
|
|
|
|
+ //灾难的随机时间比防护包时间后,说明防护包到期
|
|
|
|
|
+ //成熟的时候触发第一次自然灾难
|
|
|
|
|
+ comPlayerProfitService.addDisasterAndLoss(CopyUtil.copy(comPlayerLandAndPlantVo, ComPlayerLand.class),
|
|
|
|
|
+ comMallSeedVo, 3);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|