任务相关

This commit is contained in:
李玉东 2025-09-22 17:09:53 +08:00
parent 3c8b8a5ce6
commit 79850327fb
5 changed files with 31 additions and 28 deletions

View File

@ -23,10 +23,10 @@ public class RoomManager {
private static final Map<String, Room> roomsMap = new ConcurrentHashMap<>(); private static final Map<String, Room> 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); Room room = new Room(id, scenario);
roomsMap.put(id, room); roomsMap.put(id, room);
room.start(time); room.start(duringTime);
} }
public static void stopRoom(String id) { public static void stopRoom(String id) {

View File

@ -90,7 +90,6 @@ public abstract class AbtParentTask implements TaskAction {
private StatisticBean statisticBean; private StatisticBean statisticBean;
public AbtParentTask(ScenarioTask scenarioTask, String roomId) { public AbtParentTask(ScenarioTask scenarioTask, String roomId) {
this.scenarioTask = scenarioTask; this.scenarioTask = scenarioTask;
this.roomId = roomId; this.roomId = roomId;
@ -250,6 +249,11 @@ public abstract class AbtParentTask implements TaskAction {
schedule.scheduleWithFixedDelay(() -> { schedule.scheduleWithFixedDelay(() -> {
try { try {
Room room = RoomManager.getRoom(this.roomId);
if (room == null || room.isTimeExpired()) {
log.error("房间不存在或者已经到达想定结束时间");
return;
}
if (this.getRoomStatus()) { if (this.getRoomStatus()) {
//自动生成的任务不需要判断油量不要在生成新的任务 //自动生成的任务不需要判断油量不要在生成新的任务
@ -282,7 +286,6 @@ public abstract class AbtParentTask implements TaskAction {
} }
} }
if (distanceInfoMap.isEmpty()) { if (distanceInfoMap.isEmpty()) {
return; return;
} }
@ -473,7 +476,6 @@ public abstract class AbtParentTask implements TaskAction {
// 找出油料保障分队 // 找出油料保障分队
for (ScenarioResource resource : resourceList) { for (ScenarioResource resource : resourceList) {
Teaminfo teaminfo = teamInfoMap.get(resource.getResourceId()); Teaminfo teaminfo = teamInfoMap.get(resource.getResourceId());
if ("SUPPLIER_FUEL".equals(teaminfo.getRoleCode())) { if ("SUPPLIER_FUEL".equals(teaminfo.getRoleCode())) {

View File

@ -109,7 +109,9 @@ public class Room implements AutoCloseable {
*/ */
public void start(long time) { public void start(long time) {
status.set(true); status.set(true);
log.info("想定持续时间{}", time);
totalTime.set(time); totalTime.set(time);
startTask(); startTask();
//初始化系统资源 物资人员等信息 //初始化系统资源 物资人员等信息
initRoomParam(); initRoomParam();
@ -158,7 +160,10 @@ public class Room implements AutoCloseable {
public long getDuringTime() { public long getDuringTime() {
return duringTime.get(); return duringTime.get();
} }
//是否到达想定结束时间
public boolean isTimeExpired() {
return totalTime.get() - duringTime.get() <= 0;
}
// 启动定时任务 // 启动定时任务
private void startTask() { private void startTask() {
@ -174,6 +179,7 @@ public class Room implements AutoCloseable {
if (totalTime.get() - curTime > 0) { if (totalTime.get() - curTime > 0) {
sendRemainTime((totalTime.get() - curTime)); sendRemainTime((totalTime.get() - curTime));
} else { } else {
log.info("想定结束,持续时间{}", curTime);
future.cancel(true); future.cancel(true);
scheduler.shutdownNow(); scheduler.shutdownNow();
} }
@ -182,7 +188,12 @@ public class Room implements AutoCloseable {
if (!actions.isEmpty()) { if (!actions.isEmpty()) {
actions.forEach((key, action) -> { actions.forEach((key, action) -> {
action.forEach((taskAction, task) -> { action.forEach((taskAction, task) -> {
try {
actionExecutor.submit(task::doSomeThing); actionExecutor.submit(task::doSomeThing);
} catch (Exception e) {
log.error("error::", e);
}
}); });
}); });
@ -207,7 +218,7 @@ public class Room implements AutoCloseable {
} }
@Override @Override
public void close() throws Exception { public void close() {
actionMap.clear(); actionMap.clear();
if (future != null && !future.isCancelled()) { if (future != null && !future.isCancelled()) {
future.cancel(true); future.cancel(true);
@ -218,7 +229,7 @@ public class Room implements AutoCloseable {
} }
private void sendRemainTime(long remainTime) { private void sendRemainTime(long remainTime) {
log.info("remain_time{}", remainTime);
Map<String, Object> timeMap = new HashMap<>(); Map<String, Object> timeMap = new HashMap<>();
timeMap.put("update_time_str", utils.formatSeconds(remainTime)); timeMap.put("update_time_str", utils.formatSeconds(remainTime));
timeMap.put("remain_time", remainTime); timeMap.put("remain_time", remainTime);
@ -273,17 +284,7 @@ public class Room implements AutoCloseable {
resourcePathMap.put(resourceId, obj); 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<String, Object> getPathMap() { public Map<String, Object> getPathMap() {
return resourcePathMap; return resourcePathMap;

View File

@ -164,7 +164,7 @@ public class ScenarioRoomController extends BaseController {
ResponseCmdInfo<Object> respObj = new ResponseCmdInfo<>(); ResponseCmdInfo<Object> respObj = new ResponseCmdInfo<>();
Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("mag", mag); 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.setData(dataMap);
respObj.setRoom(room.getId()); respObj.setRoom(room.getId());
respObj.setScenarioId(room.getScenarioId()); respObj.setScenarioId(room.getScenarioId());

View File

@ -1,9 +1,9 @@
spring.datasource.dynamic.primary=dm spring.datasource.dynamic.primary=dm
spring.datasource.dynamic.strict=false 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.driver-class-name=dm.jdbc.driver.DmDriver
spring.datasource.dynamic.datasource.dm.username=SYSDBA 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.database=0
spring.redis.host=127.0.0.1 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 #get.all.dept=http://127.0.0.1/oatuh2Server/api/outside/synDeptAll
logout.url=http://127.0.0.1:99/oauth2Server/oauth2/logout 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