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] =?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));