From 3924e206f6a1c6fa0e4f353a9a8112d542c90280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Fri, 19 Sep 2025 20:01:21 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/MoveRootTask.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/MoveRootTask.java b/src/main/java/com/hivekion/room/bean/MoveRootTask.java index 4c38ce2..3dfa3dd 100644 --- a/src/main/java/com/hivekion/room/bean/MoveRootTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveRootTask.java @@ -5,8 +5,10 @@ import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.uuid.IdUtils; import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; +import com.hivekion.scenario.entity.BattleConsume; import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.scenario.service.impl.BattleConsumeServiceImpl; import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl; import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl; import com.hivekion.statistic.bean.StatisticBean; @@ -50,7 +52,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { /** * 消耗任务间隔 */ - private final int consumptionTaskInterval = 5; + private final int consumptionTaskInterval = 10; /** * redis 服务类 */ @@ -65,7 +67,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { @Override public void doSomeThing() { - log.info("move task running:{}",scenarioTask.getResourceId()); + log.info("move task running:{}", scenarioTask.getResourceId()); initEnv(); //初始化环境 initPath(); //初始化路径 @@ -77,7 +79,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { * 初始化环境 */ private void initEnv() { - try{ + try { //获取油品消耗规则 String fuelConsumptionStr = SpringUtil.getBean(Environment.class) .getProperty("fuel_spreed"); @@ -86,15 +88,15 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { .getProperty("fuel.warn ", "0")); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); - }catch (Exception e){ - log.error("init env exception",e); + } catch (Exception e) { + log.error("init env exception", e); } } private void fuelConsumption() { - try{ + try { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { @@ -124,12 +126,13 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { } } //插入消耗表 + insertConsumption(currentUseUp); } }, 0, consumptionTaskInterval, TimeUnit.SECONDS); - }catch (Exception e){ - log.error("fuel consumption exception",e); + } catch (Exception e) { + log.error("fuel consumption exception", e); } @@ -166,12 +169,20 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { task.setFromLng(resourceList.get(0).getLng()); task.setFromSource("general"); SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); - //增加到房间任务 + //增加到房间任务 SupplierTask supplierTask = new SupplierTask(task, roomId); //立即执行 RoomManager.addAction(roomId, 0, supplierTask); } } + + private void insertConsumption(double num) { + BattleConsume battleConsume = new BattleConsume(); + battleConsume.setId(IdUtils.simpleUUID()); + battleConsume.setResourceId(scenarioTask.getResourceId()); + battleConsume.setFuel(num); + SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); + } } From 07aeee82d020ae4d6d03da8fd94cb543a84a908e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Sat, 20 Sep 2025 11:10:20 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/hivekion/room/bean/MoveRootTask.java | 5 +++++ src/main/java/com/hivekion/room/bean/Room.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/com/hivekion/room/bean/MoveRootTask.java b/src/main/java/com/hivekion/room/bean/MoveRootTask.java index 3dfa3dd..a585c16 100644 --- a/src/main/java/com/hivekion/room/bean/MoveRootTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveRootTask.java @@ -127,6 +127,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { } //插入消耗表 insertConsumption(currentUseUp); + } @@ -181,8 +182,12 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { battleConsume.setId(IdUtils.simpleUUID()); battleConsume.setResourceId(scenarioTask.getResourceId()); battleConsume.setFuel(num); + battleConsume.setConsumeDate(LocalDateTime.now()); SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); } + private void pushStatus(double num){ + + } } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 14b7ee5..0e9b211 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -92,6 +92,8 @@ public class Room implements AutoCloseable { status.set(true); totalTime.set(time); startTask(); + //初始化系统资源 物资人员等信息 + } /** @@ -195,4 +197,8 @@ public class Room implements AutoCloseable { public boolean isRunning() { return status.get(); } + //统一推送方法 + protected void pushStatus(String resourceId){ + + } } From a23584f415407200e96157b9d6a1fea6876ce46d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Sat, 20 Sep 2025 11:12:38 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/hivekion/room/bean/Room.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 0e9b211..7fc1543 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -102,6 +102,15 @@ public class Room implements AutoCloseable { public void stop() { status.set(false); cancelTask(); + futures.forEach((key, value) -> { + try { + if (!value.isShutdown()) { + value.shutdownNow(); + } + } catch (Exception e) { + log.error("error::", e); + } + }); } /** @@ -122,7 +131,6 @@ public class Room implements AutoCloseable { } - // 启动定时任务 private void startTask() { if (future == null || future.isCancelled()) { @@ -197,8 +205,9 @@ public class Room implements AutoCloseable { public boolean isRunning() { return status.get(); } + //统一推送方法 - protected void pushStatus(String resourceId){ + protected void pushStatus(String resourceId) { } } From 299a4e20a42fc5bb10310b411522bebe6539146a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Sat, 20 Sep 2025 11:15:10 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/hivekion/room/bean/AbtParentTask.java | 4 ++++ src/main/java/com/hivekion/room/bean/MoveRootTask.java | 4 +--- src/main/java/com/hivekion/room/bean/Room.java | 3 --- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 257dc74..060748f 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -301,6 +301,10 @@ public abstract class AbtParentTask implements TaskAction { //房间统一管理定时器;房间关闭后,定时器销毁 addScheduledExecutorServiceRefenceToRoom(schedule); } + //统一推送方法 + protected void pushStatus(String resourceId) { + + } } interface BizTaskOnTiming { diff --git a/src/main/java/com/hivekion/room/bean/MoveRootTask.java b/src/main/java/com/hivekion/room/bean/MoveRootTask.java index a585c16..bbab72d 100644 --- a/src/main/java/com/hivekion/room/bean/MoveRootTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveRootTask.java @@ -127,7 +127,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { } //插入消耗表 insertConsumption(currentUseUp); - + pushStatus(scenarioTask.getResourceId()); } @@ -185,9 +185,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { battleConsume.setConsumeDate(LocalDateTime.now()); SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); } - private void pushStatus(double num){ - } } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 7fc1543..9d364b1 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -206,8 +206,5 @@ public class Room implements AutoCloseable { return status.get(); } - //统一推送方法 - protected void pushStatus(String resourceId) { - } } From 361edfe77432f20a2f591bd6961643f0647144d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Sat, 20 Sep 2025 12:07:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/AbtParentTask.java | 12 ++- .../bean/{MoveRootTask.java => MoveTask.java} | 34 ++++++- .../com/hivekion/room/bean/SupplierTask.java | 92 +++++++++++++++++-- .../service/impl/ScenarioTaskServiceImpl.java | 4 +- 4 files changed, 123 insertions(+), 19 deletions(-) rename src/main/java/com/hivekion/room/bean/{MoveRootTask.java => MoveTask.java} (86%) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 060748f..ad27186 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -197,12 +197,12 @@ public abstract class AbtParentTask implements TaskAction { } } - protected void updatePath(double speed, TaskAction action) { + protected void updatePath(double speed,TaskAction duringAction, TaskAction finishedAction) { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { - + log.info("task is running...."); try { if (this.getRoomStatus()) { if (distanceInfoMap.isEmpty()) { @@ -212,7 +212,9 @@ public abstract class AbtParentTask implements TaskAction { if (duringTime <= 0) { return; } - + if(duringAction!=null){ + duringAction.doSomeThing(); + } //跑动距离 double distance = duringTime * speed; @@ -278,8 +280,8 @@ public abstract class AbtParentTask implements TaskAction { scenarioTask.getScenarioId(), dataMap)); } else { - if (action != null) { - action.doSomeThing(); + if (finishedAction != null) { + finishedAction.doSomeThing(); } //完成路径 Global.sendCmdInfoQueue.add( diff --git a/src/main/java/com/hivekion/room/bean/MoveRootTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java similarity index 86% rename from src/main/java/com/hivekion/room/bean/MoveRootTask.java rename to src/main/java/com/hivekion/room/bean/MoveTask.java index bbab72d..6fc4779 100644 --- a/src/main/java/com/hivekion/room/bean/MoveRootTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -1,6 +1,8 @@ package com.hivekion.room.bean; import cn.hutool.extra.spring.SpringUtil; +import com.hivekion.Global; +import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.uuid.IdUtils; import com.hivekion.room.RoomManager; @@ -16,7 +18,9 @@ import com.hivekion.statistic.service.impl.StatisticServiceImpl; import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.service.impl.SupplierRequestServiceImpl; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -34,7 +38,7 @@ import org.springframework.core.env.Environment; * @since 2025/7/22 */ @Slf4j -public class MoveRootTask extends AbtParentTask implements TaskAction { +public class MoveTask extends AbtParentTask implements TaskAction { /** * 速度 换算为100Km/小时 @@ -60,7 +64,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { private StatisticBean statisticBean; - public MoveRootTask(ScenarioTask scenarioTask, String roomId) { + public MoveTask(ScenarioTask scenarioTask, String roomId) { super(scenarioTask, roomId); } @@ -71,7 +75,31 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { initEnv(); //初始化环境 initPath(); //初始化路径 - updatePath(SPEED, null); //更新路径 + updatePath(SPEED, new TaskAction() { + @Override + public void doSomeThing() { + //推送移动任务 + Map map = new HashMap<>(); + map.put("duringTime",getDuringTime()); + map.put("id",scenarioTask.getResourceId()); + map.put("roomStatus",true); + map.put("type",scenarioTask.getType()); + + Global.sendCmdInfoQueue.add( + ResponseCmdInfo.create("moveTask", roomId, + scenarioTask.getScenarioId(), map)); + } + + @Override + public String getId() { + return ""; + } + + @Override + public String getType() { + return ""; + } + },null); //更新路径 fuelConsumption();//油品消耗 } diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index 244935d..0638a31 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -1,11 +1,15 @@ package com.hivekion.room.bean; import cn.hutool.extra.spring.SpringUtil; +import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; +import java.util.HashMap; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; /** * [类的简要说明] @@ -16,6 +20,7 @@ import com.hivekion.statistic.service.StatisticService; * @author LiDongYU * @since 2025/7/22 */ +@Slf4j public class SupplierTask extends AbtParentTask implements TaskAction { public SupplierTask(ScenarioTask scenarioTask, String roomId) { @@ -28,10 +33,11 @@ public class SupplierTask extends AbtParentTask implements TaskAction { StatisticBean statistic = SpringUtil.getBean(StatisticService.class) .statistic(scenarioTask.getResourceId()); initPath(); //初始化路径 - updatePath(30, new TaskAction() { + updatePath(30, null, new TaskAction() { @Override public void doSomeThing() { + log.info("supplier team is arrived "); //达到终点点后,给目标补充物资 switch (scenarioTask.getTaskType()) { case "4": @@ -51,7 +57,8 @@ public class SupplierTask extends AbtParentTask implements TaskAction { break; } //推送最新状态信息 - + pushStatus(scenarioTask.getResourceId()); + pushStatus(scenarioTask.getResourceId()); } @Override @@ -68,44 +75,111 @@ public class SupplierTask extends AbtParentTask implements TaskAction { private void supplierMedical(StatisticBean statistic) { + //增加被保障分队的量 SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "medical", statistic.getMedical().getTotal()+""); + "medical", statistic.getMedical().getTotal() + ""); + //获取保障任务的药品信息 + Object supplierObj = SpringUtil.getBean(RedisUtil.class) + .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "medical"); + //减少保障分队的量 + if (supplierObj != null) { + double supplierMedical = Double.parseDouble(supplierObj.toString()); + double remain = supplierMedical - statistic.getMedical().getTotal(); + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "medical", remain + ""); + } } private void supplierFuel(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuel", statistic.getFuel().getTotal()+""); + "fuel", statistic.getFuel().getTotal() + ""); + Object supplierObj = SpringUtil.getBean(RedisUtil.class) + .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "fuel"); + //减少保障分队的量 + if (supplierObj != null) { + double supplierMedical = Double.parseDouble(supplierObj.toString()); + + double remain = supplierMedical - statistic.getFuel().getTotal(); + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "fuel", remain + ""); + } } private void supplierAmmunition(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "ammunition", statistic.getAmmunition().getTotal()+""); + "ammunition", statistic.getAmmunition().getTotal() + ""); + Object supplierObj = SpringUtil.getBean(RedisUtil.class) + .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "ammunition"); + //减少保障分队的量 + if (supplierObj != null) { + double supplierMedical = Double.parseDouble(supplierObj.toString()); + double remain = supplierMedical - statistic.getAmmunition().getTotal(); + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "ammunition", remain + ""); + } } private void supplierWater(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "water", statistic.getWater().getTotal()+""); + "water", statistic.getWater().getTotal() + ""); + Object supplierObj = SpringUtil.getBean(RedisUtil.class) + .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "water"); + //减少保障分队的量 + if (supplierObj != null) { + double supplierMedical = Double.parseDouble(supplierObj.toString()); + double remain = supplierMedical - statistic.getWater().getTotal(); + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "water", remain + ""); + } } private void supplierFood(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "food", statistic.getFood().getTotal()+""); + "food", statistic.getFood().getTotal() + ""); + Object supplierObj = SpringUtil.getBean(RedisUtil.class) + .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "food"); + //减少保障分队的量 + if (supplierObj != null) { + double supplierMedical = Double.parseDouble(supplierObj.toString()); + + double remain = supplierMedical - statistic.getFood().getTotal(); + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + + scenarioTask.getSupplierResourceId(), + "food", remain + ""); + } } - - } diff --git a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java index 0e02b62..306ffa7 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -11,7 +11,7 @@ import com.hivekion.baseData.service.ScenarioService; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.room.RoomManager; import com.hivekion.room.bean.BattleRootTask; -import com.hivekion.room.bean.MoveRootTask; +import com.hivekion.room.bean.MoveTask; import com.hivekion.room.bean.SupplierTask; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; @@ -155,7 +155,7 @@ public class ScenarioTaskServiceImpl extends //移动任务 case "1": log.info("move task::{}",diff); - MoveRootTask moveRootTask = new MoveRootTask(task, roomId); + MoveTask moveRootTask = new MoveTask(task, roomId); RoomManager.addAction(roomId, diff, moveRootTask); respObj.setCmdType("moveTask"); respObj.setData(JSON.toJSONString(moveRootTask));