From dcbe07e3d56ae4a53a064c11e44905ecb57a8d2a Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Thu, 18 Sep 2025 15:23:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E6=96=97=E4=BB=BB=E5=8A=A1=E6=B6=88?= =?UTF-8?q?=E8=80=97=E8=B5=84=E6=BA=90=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hivekion/room/bean/BattleRootTask.java | 87 ++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index de91523..624b142 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -1,7 +1,18 @@ package com.hivekion.room.bean; +import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson2.JSONObject; import com.hivekion.Global; +import com.hivekion.common.entity.ResponseCmdInfo; +import com.hivekion.common.redis.RedisUtil; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.statistic.bean.*; +import com.hivekion.statistic.service.StatisticService; +import com.hivekion.statistic.service.impl.StatisticServiceImpl; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * [类的简要说明] @@ -14,14 +25,88 @@ import com.hivekion.scenario.entity.ScenarioTask; */ public class BattleRootTask extends AbtParentTask { + private StatisticService statisticService = null; + private RedisUtil redisUtil = null; + + private static final Double TEAM_SPREED = 1.2D; + private static final Integer PERSON_SPREED = 3; + private static final Double AMMUNITION_SPREED = 2.6D; + private static final Double FOOD_SPREED = 2.3D; + private static final Double WATER_SPREED = 3.6D; + private static final Double FUEL_SPREED = 3.6D; + private static final Double MEDICAL_SPREED = 1.6D; + + public BattleRootTask(ScenarioTask scenarioTask,String roomId) { super(scenarioTask,roomId); } + + private void initBean(){ + if(statisticService == null) { + statisticService = SpringUtil.getBean("statisticService"); + } + if(redisUtil == null) { + redisUtil = SpringUtil.getBean("redisUtil"); + } + } //执行一次 @Override public void doSomeThing() { - //会知道想定ID, resourceId; + this.initBean(); + if(this.getRoomStatus()) { + long initduringTime = this.getDuringTime(); + StatisticBean statisticBean = statisticService.statistic(scenarioTask.getResourceId()); +// statisticBean.getAmmunition().getCurrent() + //初始化本次战斗任务各种资源数 + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition",statisticBean.getAmmunition().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food",statisticBean.getFood().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel",statisticBean.getFuel().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical",statisticBean.getMedical().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water",statisticBean.getWater().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person",statisticBean.getPerson().getCurrent()); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime",initduringTime); + //定时检查统计各种资源消耗量 + ScheduledExecutorService schedule = Executors.newScheduledThreadPool( + 1); + schedule.scheduleWithFixedDelay(() -> { + long duringTime = getDuringTime(); + long lastDuringTime = (long) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime"); + long intervalDuringTime = duringTime - lastDuringTime; + double ammunition = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition"); + double food = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food"); + double fuel = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel"); + double medical = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical"); + double water = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water"); + int person = (int) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person"); + + // + double teamConsume = intervalDuringTime * TEAM_SPREED; + long personConsume = intervalDuringTime* PERSON_SPREED ; + Double ammunitionConsume = intervalDuringTime * AMMUNITION_SPREED; + Double foodConsume = intervalDuringTime * FOOD_SPREED; + Double waterConsume = intervalDuringTime * WATER_SPREED; + Double fuelConsume = intervalDuringTime * FUEL_SPREED; + Double medicalConsume = intervalDuringTime * MEDICAL_SPREED; + + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition",ammunition-ammunitionConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food",food-foodConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel",fuel-foodConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical",medical-medicalConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water",water-waterConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person",person-personConsume); + redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime",duringTime); + ResponseCmdInfo sendConsumeMsg = new ResponseCmdInfo<>(); + //推送消耗數據 + Global.sendCmdInfoQueue.add(sendConsumeMsg); + + }, 0, 10, TimeUnit.SECONDS); + + //房间统一管理定时器;房间关闭后,定时器销毁 + addScheduledExecutorServiceRefenceToRoom(schedule); + } + + }