diff --git a/src/main/java/com/hivekion/room/RoomManager.java b/src/main/java/com/hivekion/room/RoomManager.java index c2beaa6..b616a3d 100644 --- a/src/main/java/com/hivekion/room/RoomManager.java +++ b/src/main/java/com/hivekion/room/RoomManager.java @@ -23,10 +23,10 @@ public class RoomManager { private static final Map roomsMap = new ConcurrentHashMap<>(); - public static void startRoom(String id, Scenario scenario, long time) { + public static void startRoom(String id, Scenario scenario, long duringTime) { Room room = new Room(id, scenario); roomsMap.put(id, room); - room.start(time); + room.start(duringTime); } public static void stopRoom(String id) { diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 49b1b54..c55ebbf 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -90,7 +90,6 @@ public abstract class AbtParentTask implements TaskAction { private StatisticBean statisticBean; - public AbtParentTask(ScenarioTask scenarioTask, String roomId) { this.scenarioTask = scenarioTask; this.roomId = roomId; @@ -250,11 +249,16 @@ public abstract class AbtParentTask implements TaskAction { schedule.scheduleWithFixedDelay(() -> { try { + Room room = RoomManager.getRoom(this.roomId); + if (room == null || room.isTimeExpired()) { + log.error("房间不存在或者已经到达想定结束时间"); + return; + } if (this.getRoomStatus()) { //自动生成的任务不需要判断油量;不要在生成新的任务 - log.info("{}-fromSource::{}",scenarioTask.getResourceId(),scenarioTask.getFromSource()); - if(!"general".equals(scenarioTask.getFromSource())) { + log.info("{}-fromSource::{}", scenarioTask.getResourceId(), scenarioTask.getFromSource()); + if (!"general".equals(scenarioTask.getFromSource())) { double currentFuel = getCurrentFuel(); double totalFuel = statisticBean.getFuel().getTotal(); log.info("totalFuel::{}", totalFuel); @@ -282,7 +286,6 @@ public abstract class AbtParentTask implements TaskAction { } } - if (distanceInfoMap.isEmpty()) { return; } @@ -290,7 +293,7 @@ public abstract class AbtParentTask implements TaskAction { if (duringAction != null) { duringAction.doSomeThing(); } - log.info("移动中..... 放大系数{}",RoomManager.getMag(roomId)); + log.info("移动中..... 放大系数{}", RoomManager.getMag(roomId)); //跑动距离 double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; @@ -348,7 +351,7 @@ public abstract class AbtParentTask implements TaskAction { this.scenarioTask.getResourceId()); editScenarioInfo.getJbxx().getTeam().setLat(coordinate.getLat() + ""); editScenarioInfo.getJbxx().getTeam().setLng(coordinate.getLng() + ""); - setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId()); + setEditScenarioInfo(editScenarioInfo, scenarioTask.getResourceId()); pushStatus(scenarioTask.getResourceId()); } else if (Double.compare(distance, endPoint.getKey()) == 0) { @@ -399,7 +402,7 @@ public abstract class AbtParentTask implements TaskAction { return JSON.parseObject(updJsonStr, EditScenarioInfo.class); } - protected void setEditScenarioInfo(EditScenarioInfo editScenarioInfo,String resourceId) { + protected void setEditScenarioInfo(EditScenarioInfo editScenarioInfo, String resourceId) { SpringUtil.getBean(RedisUtil.class).hset( this.scenarioTask.getScenarioId() + "-" + roomId + "-" + resourceId, "updScenarioInfo", JSON.toJSONString(editScenarioInfo)); @@ -473,7 +476,6 @@ public abstract class AbtParentTask implements TaskAction { // 找出油料保障分队 for (ScenarioResource resource : resourceList) { - Teaminfo teaminfo = teamInfoMap.get(resource.getResourceId()); if ("SUPPLIER_FUEL".equals(teaminfo.getRoleCode())) { diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 40aa2c4..a224ea4 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -109,7 +109,9 @@ public class Room implements AutoCloseable { */ public void start(long time) { status.set(true); + log.info("想定持续时间{}", time); totalTime.set(time); + startTask(); //初始化系统资源 物资人员等信息 initRoomParam(); @@ -158,7 +160,10 @@ public class Room implements AutoCloseable { public long getDuringTime() { return duringTime.get(); } - + //是否到达想定结束时间 + public boolean isTimeExpired() { + return totalTime.get() - duringTime.get() <= 0; + } // 启动定时任务 private void startTask() { @@ -174,6 +179,7 @@ public class Room implements AutoCloseable { if (totalTime.get() - curTime > 0) { sendRemainTime((totalTime.get() - curTime)); } else { + log.info("想定结束,持续时间{}", curTime); future.cancel(true); scheduler.shutdownNow(); } @@ -182,7 +188,12 @@ public class Room implements AutoCloseable { if (!actions.isEmpty()) { actions.forEach((key, action) -> { action.forEach((taskAction, task) -> { - actionExecutor.submit(task::doSomeThing); + try { + actionExecutor.submit(task::doSomeThing); + } catch (Exception e) { + log.error("error::", e); + } + }); }); @@ -207,7 +218,7 @@ public class Room implements AutoCloseable { } @Override - public void close() throws Exception { + public void close() { actionMap.clear(); if (future != null && !future.isCancelled()) { future.cancel(true); @@ -218,7 +229,7 @@ public class Room implements AutoCloseable { } private void sendRemainTime(long remainTime) { - + log.info("remain_time{}", remainTime); Map timeMap = new HashMap<>(); timeMap.put("update_time_str", utils.formatSeconds(remainTime)); timeMap.put("remain_time", remainTime); @@ -273,17 +284,7 @@ public class Room implements AutoCloseable { resourcePathMap.put(resourceId, obj); } - public Object getResourcePath(String resourceId) { - return resourcePathMap.get(resourceId); - } - public void addResourceLastPosition(String resourceId, Coordinate obj) { - resourceCoordinateMap.put(resourceId, obj); - } - - public Coordinate getResourceLastPosition(String resourceId) { - return resourceCoordinateMap.get(resourceId); - } public Map getPathMap() { return resourcePathMap; diff --git a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java index ac89768..a51421c 100644 --- a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java +++ b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java @@ -164,7 +164,7 @@ public class ScenarioRoomController extends BaseController { ResponseCmdInfo respObj = new ResponseCmdInfo<>(); Map dataMap = new HashMap<>(); dataMap.put("mag", mag); - dataMap.put("status", RoomManager.getRoom(room.getId()).getStatus()); + dataMap.put("status", RoomManager.getRoom(room.getId())==null?0:RoomManager.getRoom(room.getId()).getStatus()); respObj.setData(dataMap); respObj.setRoom(room.getId()); respObj.setScenarioId(room.getScenarioId()); diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 80b6080..ad78788 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,9 +1,9 @@ spring.datasource.dynamic.primary=dm spring.datasource.dynamic.strict=false -spring.datasource.dynamic.datasource.dm.url=jdbc:dm://192.168.0.53:5236/SIMULATION +spring.datasource.dynamic.datasource.dm.url=jdbc:dm://127.0.0.1:5236/SIMULATION spring.datasource.dynamic.datasource.dm.driver-class-name=dm.jdbc.driver.DmDriver spring.datasource.dynamic.datasource.dm.username=SYSDBA -spring.datasource.dynamic.datasource.dm.password=Admin123 +spring.datasource.dynamic.datasource.dm.password=SYSDBA001 spring.redis.database=0 spring.redis.host=127.0.0.1 @@ -51,4 +51,4 @@ get.all.user = http://127.0.0.1/oauth2Server/api/outside/syncUserAll #get.all.dept=http://127.0.0.1/oatuh2Server/api/outside/synDeptAll logout.url=http://127.0.0.1:99/oauth2Server/oauth2/logout -path.planning.url=http://127.0.0.1:8989/route +path.planning.url=http://192.168.0.53:8989/route