From 4d5cc0489c88ca8ce07b368576471ec504a37ba7 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 17:14:47 +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 | 13 +- .../java/com/hivekion/room/bean/MoveTask.java | 114 ++++++++++-------- .../resources/application-rule.properties | 4 +- .../mapper/tbl/BattleSupplierMapper.xml | 2 +- 4 files changed, 76 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index a1ff001..128c0b2 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -30,6 +30,7 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; @@ -202,7 +203,7 @@ public abstract class AbtParentTask implements TaskAction { } protected void updatePath(double speed,TaskAction duringAction, TaskAction finishedAction) { - + AtomicLong duringTime = new AtomicLong(0); ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { @@ -215,16 +216,14 @@ public abstract class AbtParentTask implements TaskAction { if(!this.canMoved.get()){ return; } - log.info("{}-移动中",this.scenarioTask.getResourceId()); - long duringTime = getDuringTime() - taskRelativeTime; - if (duringTime <= 0) { - return; - } + log.info("{}-移动中,canRemove::{}",this.scenarioTask.getResourceId(),this.canMoved.get()); + + if(duringAction!=null){ duringAction.doSomeThing(); } //跑动距离 - double distance = duringTime * speed; + double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; //获取大与此距离的第一个路线点key Entry endPoint = distanceInfoMap.ceilingEntry(distance); diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index d48c134..590f526 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -114,11 +114,13 @@ public class MoveTask extends AbtParentTask implements TaskAction { //获取油品消耗规则 String fuelConsumptionStr = SpringUtil.getBean(Environment.class) .getProperty("fuel.spreed"); - log.info("油料消耗速度::{}",fuelConsumptionStr); + fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) - .getProperty("fuel.warn ", "0")); - log.info("油料最低阈值::{}",fuelThreshold); + .getProperty("fuel.warn", "0")); + + log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{}", this.scenarioTask.getResourceId(), + fuelConsumptionStr, fuelThreshold); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); } catch (Exception e) { @@ -137,27 +139,23 @@ public class MoveTask extends AbtParentTask implements TaskAction { double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; double fuel = getCurrentFuel(); - if (fuel == 0) { - log.error("{}-油料为空",scenarioTask.getResourceId()); + log.info("{}-当前消耗油料::{},当前剩余油料::{}", scenarioTask.getResourceId(), + currentUseUp, fuel); + fuel = fuel - currentUseUp; + if (fuel <= 0) { + log.error("{}-油料为空", scenarioTask.getResourceId()); this.canMoved.set(false); + log.info("{},can:{}", scenarioTask.getResourceId(), this.canMoved.get()); return; } - fuel = fuel - currentUseUp; - log.info("{}-当前油料{}",scenarioTask.getResourceId(),fuel); - Object statisticObj = redis.hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - if (statisticObj != null) { - setCurrentFuel(currentUseUp); - } - redis.hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuelConsume", fuel); + setCurrentFuel(currentUseUp); double totalFuel = statisticBean.getFuel().getTotal(); + log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(), fuel * 100 / totalFuel, + fuelThreshold); if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - log.info("{}-油料不足",scenarioTask.getResourceId()); + log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); this.canMoved.set(false); requestFlag.set(true); //需要产生需求 @@ -189,7 +187,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceFuelRequest() { - log.info("produceFuelRequest...."); + log.info("{}-产生油料保障需求", this.scenarioTask.getResourceId()); SupplierRequest supplierRequest = new SupplierRequest(); supplierRequest.setId(IdUtils.simpleUUID()); supplierRequest.setFromResourceId(scenarioTask.getResourceId()); @@ -203,38 +201,57 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceTask() { - log.info("produceTask...."); - List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) - .selectSupplierResource(scenarioTask.getResourceId()); - if (!resourceList.isEmpty()) { - ScenarioTask task = new ScenarioTask(); - task.setId(IdUtils.simpleUUID()); - task.setScenarioId(scenarioTask.getScenarioId()); - task.setResourceId(scenarioTask.getResourceId()); - task.setTaskType("6"); - task.setSupplierNum(statisticBean.getFuel().getTotal()); - task.setToLat(this.coordinateReference.get().getLat() + ""); - task.setToLng(this.coordinateReference.get().getLng() + ""); - task.setStartTime(LocalDateTime.now()); - task.setFromLat(resourceList.get(0).getLat()); - 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); + try { + log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); + List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) + .selectSupplierResource(scenarioTask.getResourceId()); + log.info("{}-可选保障分队长度{}", scenarioTask.getResourceId(), resourceList.size()); + if (!resourceList.isEmpty()) { + + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(scenarioTask.getResourceId()); + task.setTaskType("6"); + task.setSupplierNum(statisticBean.getFuel().getTotal()); + task.setToLat(this.coordinateReference.get().getLat() + ""); + task.setToLng(this.coordinateReference.get().getLng() + ""); + task.setStartTime(LocalDateTime.now()); + task.setFromLat(resourceList.get(0).getLat()); + task.setFromLng(resourceList.get(0).getLng()); + task.setFromSource("general"); + + log.info("{}-保障分队id::{},from::{},to::{}", this.scenarioTask.getResourceId(), + task.getSupplierResourceId(), task.getFromLat() + "," + task.getFromLng(), + task.getToLat() + "," + task.getToLng()); + + SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); + //增加到房间任务 + SupplierTask supplierTask = new SupplierTask(task, roomId); + //立即执行 + RoomManager.addAction(roomId, 0, supplierTask); + } else { + log.error("{}-没有保障分队可以选择", scenarioTask.getResourceId()); + } + } catch (Exception e) { + log.error("produceTask exception", e); } + } private void insertConsumption(double num) { - log.info("insertConsumption....{}", num); - BattleConsume battleConsume = new BattleConsume(); - battleConsume.setId(IdUtils.simpleUUID()); - battleConsume.setResourceId(scenarioTask.getResourceId()); - battleConsume.setFuel(num); - battleConsume.setConsumeDate(LocalDateTime.now()); - SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); + try{ + log.info("{}-插入油料消耗::{}", this.scenarioTask.getResourceId(), num); + BattleConsume battleConsume = new BattleConsume(); + battleConsume.setId(IdUtils.simpleUUID()); + battleConsume.setResourceId(scenarioTask.getResourceId()); + battleConsume.setFuel(num); + battleConsume.setConsumeDate(LocalDateTime.now()); + SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); + }catch (Exception e){ + log.error("insertConsumption exception", e); + } + } private double getCurrentFuel() { @@ -247,13 +264,16 @@ public class MoveTask extends AbtParentTask implements TaskAction { } return 0; } + private void setCurrentFuel(double num) { Object statisticObj = redis.hget( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo"); if (statisticObj != null) { ScenarioInfo scenarioInfo = JSON.parseObject(statisticObj.toString(), ScenarioInfo.class); - scenarioInfo.getFuel().setCurrent( scenarioInfo.getFuel().getCurrent()-num); + scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent() - num); + redis.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo", JSON.toJSONString(scenarioInfo)); } } } diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index 641f978..3f1e58f 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,12 +3,12 @@ death.warn = 56 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 2 +fuel.warn = 93 medical.warn = 1 death.spreed = 3 injured.spreed = 3 ammunition.spreed = 2.6 food.spreed = 2.3 water.spreed = 3.6 -fuel.spreed = 3.6 +fuel.spreed = 0.04 medical.spreed = 1.6 \ No newline at end of file diff --git a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml index 0de6659..a24e6d4 100644 --- a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml @@ -6,6 +6,6 @@ select id ,lng,lat,scenario_Id as scenarioId, resource_name as resourceName from tbl_scenario_resource where resource_id in - (select supplier_resource_id from tbl_battle_supplier where battle_resoure_id = #{battleResourceId}) + (select supplier_resource_id from tbl_battle_supplier where battle_resource_id = #{battleResourceId})