roomLogQueue = new LinkedBlockingQueue<>(1000);
}
diff --git a/src/main/java/com/hivekion/baseData/service/ScenarioService.java b/src/main/java/com/hivekion/baseData/service/ScenarioService.java
index 6004853..35244f1 100644
--- a/src/main/java/com/hivekion/baseData/service/ScenarioService.java
+++ b/src/main/java/com/hivekion/baseData/service/ScenarioService.java
@@ -5,6 +5,7 @@ import com.hivekion.baseData.entity.Scenario;
import com.hivekion.power.bean.PowerBase;
import com.hivekion.power.bean.ScenarioPowerData;
import java.util.List;
+import java.util.Map;
/**
*
@@ -68,5 +69,5 @@ public interface ScenarioService extends IService {
List allNoContent();
Scenario getScenarioById(Integer id);
-
+ Map scenarioMap();
}
diff --git a/src/main/java/com/hivekion/baseData/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/baseData/service/impl/ScenarioServiceImpl.java
index d57d4d0..bb4dc6e 100644
--- a/src/main/java/com/hivekion/baseData/service/impl/ScenarioServiceImpl.java
+++ b/src/main/java/com/hivekion/baseData/service/impl/ScenarioServiceImpl.java
@@ -7,29 +7,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hivekion.baseData.entity.Scenario;
import com.hivekion.baseData.mapper.ScenarioMapper;
import com.hivekion.baseData.service.ScenarioService;
-import com.hivekion.common.redis.RedisUtil;
-import com.hivekion.environment.entity.SimtoolWeather;
-import com.hivekion.environment.service.SimtoolWeatherService;
-import com.hivekion.power.bean.ActionInfo;
-import com.hivekion.power.bean.AmmunitionInfo;
-import com.hivekion.power.bean.MaterialNumInfo;
-import com.hivekion.power.bean.PersonStatisticInfo;
-import com.hivekion.power.bean.PositionInfo;
import com.hivekion.power.bean.PowerBase;
-import com.hivekion.power.bean.PowerGroup;
import com.hivekion.power.bean.ScenarioPowerData;
-import com.hivekion.scenario.bean.ArraysTag;
-import com.hivekion.scenario.bean.Power;
-import com.hivekion.scenario.bean.PowerSet;
-import com.hivekion.scenario.bean.ScenarioData;
-import com.hivekion.scenario.bean.Unit;
-import com.hivekion.thread.SpringGlobalTaskManager;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.annotation.Resource;
import org.springframework.stereotype.Service;
/**
@@ -45,7 +29,6 @@ public class ScenarioServiceImpl extends ServiceImpl i
ScenarioService {
-
@Override
public List List(Scenario scenario) {
return this.baseMapper.List(scenario);
@@ -166,149 +149,6 @@ public class ScenarioServiceImpl extends ServiceImpl i
// return scenarioPowerData;
}
- private PowerGroup createPowGroup(PowerSet set, ScenarioData scenarioData) {
- PowerGroup group = new PowerGroup();
- //todo
- group.setFight(makePowerbaseList(set.getFightPower(), scenarioData.getUnitList()));
- group.setGuarantee(makePowerbaseList(set.getSafeguardPower(), scenarioData.getUnitList()));
- return group;
- }
-
- private List makePowerbaseList(List arraysTagList,
- List unitList) {
- Map map = new LinkedHashMap<>();
- arraysTagList.forEach(arraysTag -> {
- if (arraysTag.getArray() != null) {
- arraysTag.getArray().forEach(a -> {
- PowerBase base = new PowerBase();
- base.setId(a.getUuid());
- base.setName(a.getText());
- map.put(a.getUuid(), base);
- });
- }
-
- });
- Map unitMap = unitList.stream()
- .collect(Collectors.toMap(Unit::getUuid, a -> a));
- //获取组织
- map.forEach((mapKey, mapValue) -> {
- Unit unit = unitMap.get(mapKey);
- if (unit != null) {
- //设置位置信息
- mapValue.setPosition(createPosition(unit));
- //设置人员统计
- mapValue.setPersonStatistic(createStatistic(unit));
- //设置食品信息
- mapValue.setFoodInfo(createFoodInfo(unit));
- //设置水信息
- mapValue.setWaterInfo(createWaterInfo(unit));
- //油信息
- mapValue.setOilInfo(createOilInfo(unit));
- //药材信息
- mapValue.setMedicalInfo(createMedicalInfo(unit));
- //弹药信息
- mapValue.setAmmunition(createAmmunitionInfo(unit));
- //行动信息
- mapValue.setActionList(createActionInfo(unit));
- }
-
- });
-
- return new ArrayList<>(map.values());
- }
-
- //创建position
- private PositionInfo createPosition(Unit unit) {
- PositionInfo positionInfo = new PositionInfo();
- positionInfo.setHeight(unit.getHeight() == null ? 0.0 : unit.getHeight().doubleValue());//高度
- positionInfo.setLng(unit.getLongitude() == null ? "" : unit.getLongitude().toPlainString());//经度
- positionInfo.setLat(unit.getLatitude() == null ? "" : unit.getLatitude().toPlainString());//纬度
- positionInfo.setSpeed(unit.getSpeed());//速度
- positionInfo.setDirection(unit.getCourse().doubleValue());//方向
- positionInfo.setDeduceTypeName(unit.getDeducType() == 1 ? "红军" : "蓝军"); //推演方类型名称
- positionInfo.setLogisticType(unit.getLogisticsSupportType());
-
- return positionInfo;
- }
-
- //人员统计信息
- private PersonStatisticInfo createStatistic(Unit unit) {
- PersonStatisticInfo personStatisticInfo = new PersonStatisticInfo();
- personStatisticInfo.setTotal(unit.getTeamPeopleNum());
- personStatisticInfo.setCurrent(unit.getTeamPeopleNum() - unit.getDeadPeopleNum());
- personStatisticInfo.setDeath(unit.getDeadPeopleNum());
- personStatisticInfo.setInjured(unit.getHurtPeopleNum());
- return personStatisticInfo;
- }
-
- //食品消耗信息
- private MaterialNumInfo createFoodInfo(Unit unit) {
- MaterialNumInfo materialNumInfo = new MaterialNumInfo();
- materialNumInfo.setStartNum(unit.getTeamFieldOperationsFoodInfo());
- materialNumInfo.setCurrentNum(
- unit.getTeamFieldOperationsFoodInfo() - unit.getPeoFieldOperationsFoodConsume());
- return materialNumInfo;
- }
-
- //水信息
- private MaterialNumInfo createWaterInfo(Unit unit) {
- MaterialNumInfo materialNumInfo = new MaterialNumInfo();
- materialNumInfo.setStartNum(
- unit.getTeamWaterInfo() == null ? 0 : unit.getTeamWaterInfo().doubleValue());
- materialNumInfo.setCurrentNum(
- materialNumInfo.getStartNum() - (unit.getPeoWaterConsume() == null ? 0
- : unit.getPeoWaterConsume()));
- return materialNumInfo;
- }
-
- //油信息
- private MaterialNumInfo createOilInfo(Unit unit) {
- MaterialNumInfo materialNumInfo = new MaterialNumInfo();
- materialNumInfo.setStartNum(unit.getOilInfo() == null ? 0 : unit.getOilInfo().doubleValue());
- //todo
- materialNumInfo.setCurrentNum(unit.getOilInfo() == null ? 0 : unit.getOilInfo().doubleValue());
- return materialNumInfo;
- }
-
- private MaterialNumInfo createMedicalInfo(Unit unit) {
- MaterialNumInfo materialNumInfo = new MaterialNumInfo();
- materialNumInfo.setStartNum(
- unit.getTeamMedicinalInfo() == null ? 0 : unit.getTeamMedicinalInfo().doubleValue());
- materialNumInfo.setStartNum(
- materialNumInfo.getStartNum() - (unit.getPeoHerbMedicalConsume() == null ? 0
- : unit.getPeoHerbMedicalConsume().doubleValue()) - (
- unit.getPeoBloodMedicalConsume() == null ? 0
- : unit.getPeoBloodMedicalConsume().doubleValue()));
- return materialNumInfo;
- }
-
- private AmmunitionInfo createAmmunitionInfo(Unit unit) {
- AmmunitionInfo ammunitionInfo = new AmmunitionInfo();
- //设置轻武器
- ammunitionInfo.setLightArms(
- unit.getLightAmmunitionInfo() == null ? 0 : unit.getLightAmmunitionInfo().doubleValue());
- //设置压制武器
- ammunitionInfo.setSuppressing(
- unit.getSuppressEquipNum() == null ? 0 : unit.getSuppressEquipNum().doubleValue());
-
- return ammunitionInfo;
- }
-
- private List createActionInfo(Unit unit) {
- List list = new ArrayList<>();
-
- JSONArray jsonArray = unit.getFightActionInfo();
- if (jsonArray != null) {
- for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- ActionInfo actionInfo = new ActionInfo();
- actionInfo.setBeginDateTime(jsonObject.getString("StartTime"));
- actionInfo.setEndDateTime(jsonObject.getString("EndTime"));
- list.add(actionInfo);
- }
- }
- return list;
- }
@Override
public void modifyUnitInfo(PowerBase info, Scenario data) {
@@ -370,38 +210,6 @@ public class ScenarioServiceImpl extends ServiceImpl i
return unitMap;
}
- private void modifyPower(String id, String name, Power power) {
- modifyRole(id, name, power.getPower().getRed());
- modifyRole(id, name, power.getPower().getBlue());
-
- }
-
- private void modifyRole(String id, String name, PowerSet role) {
- if (role != null && role.getFightPower() != null) {
- role.getFightPower().forEach(a -> {
- if (a.getArray() != null && !a.getArray().isEmpty()) {
- a.getArray().forEach(guidInfo -> {
- if (guidInfo.getUuid().equals(id)) {
- guidInfo.setText(name);
- }
- });
- }
-
- });
- }
- if (role != null && role.getSafeguardPower() != null) {
- role.getSafeguardPower().forEach(a -> {
- if (a.getArray() != null && !a.getArray().isEmpty()) {
- a.getArray().forEach(guidInfo -> {
- if (guidInfo.getUuid().equals(id)) {
- guidInfo.setText(name);
- }
- });
- }
-
- });
- }
- }
@Override
public List allNoContent() {
@@ -414,10 +222,13 @@ public class ScenarioServiceImpl extends ServiceImpl i
@Override
public Scenario getScenarioById(Integer id) {
-
- return this.baseMapper.selectByScenarioId(id);
+ return this.baseMapper.selectByScenarioId(id);
}
+ @Override
+ public Map scenarioMap() {
+ return this.allNoContent().stream()
+ .collect(Collectors.toMap(Scenario::getId, scenario -> scenario));
-
+ }
}
diff --git a/src/main/java/com/hivekion/enums/ScenarioRoomStatusEnum.java b/src/main/java/com/hivekion/enums/ScenarioRoomStatusEnum.java
new file mode 100644
index 0000000..3237d3e
--- /dev/null
+++ b/src/main/java/com/hivekion/enums/ScenarioRoomStatusEnum.java
@@ -0,0 +1,26 @@
+package com.hivekion.enums;
+
+import lombok.Getter;
+
+/**
+ * [类的简要说明]
+ *
+ * [详细描述,可选]
+ *
+ *
+ * @author LiDongYU
+ * @since 2025/7/22
+ */
+
+public enum ScenarioRoomStatusEnum {
+ INIT(0),
+ STARTED(1),
+ BROKEN(2),
+ FINISHED(3);
+
+ @Getter
+ private final int code;
+ ScenarioRoomStatusEnum(int code) {
+ this.code = code;
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/bean/Group.java b/src/main/java/com/hivekion/enums/TaskEnum.java
similarity index 59%
rename from src/main/java/com/hivekion/scenario/bean/Group.java
rename to src/main/java/com/hivekion/enums/TaskEnum.java
index 9223ac8..b51ed08 100644
--- a/src/main/java/com/hivekion/scenario/bean/Group.java
+++ b/src/main/java/com/hivekion/enums/TaskEnum.java
@@ -1,6 +1,4 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
+package com.hivekion.enums;
/**
* [类的简要说明]
@@ -11,7 +9,10 @@ import lombok.Data;
* @author LiDongYU
* @since 2025/7/22
*/
-@Data
-public class Group {
+public enum TaskEnum {
+ MOVE,
+
+ FIGHT,
+
}
diff --git a/src/main/java/com/hivekion/room/RoomManager.java b/src/main/java/com/hivekion/room/RoomManager.java
new file mode 100644
index 0000000..6843782
--- /dev/null
+++ b/src/main/java/com/hivekion/room/RoomManager.java
@@ -0,0 +1,54 @@
+package com.hivekion.room;
+
+import com.hivekion.room.bean.Room;
+import com.hivekion.room.func.TaskAction;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * [类的简要说明]
+ *
+ * [详细描述,可选]
+ *
+ *
+ * @author LiDongYU
+ * @since 2025/7/22
+ */
+public class RoomManager {
+
+ private static final Map roomsMap = new ConcurrentHashMap<>();
+
+ public static void startRoom(String id, long time) {
+ Room room = new Room(id);
+ roomsMap.put(id, room);
+ room.start(time);
+ }
+
+ public static void stopRoom(String id) {
+ Room room = roomsMap.get(id);
+ if (room != null) {
+ room.stop();
+ }
+ }
+
+ public static void pauseRoom(String id) {
+ Room room = roomsMap.get(id);
+ if (room != null) {
+ room.pause();
+ }
+ }
+
+ public static void resumeRoom(String id) {
+ Room room = roomsMap.get(id);
+ if (room != null) {
+ room.resume();
+ }
+ }
+
+ public static void addAction(String id, long time, TaskAction action) {
+ Room room = roomsMap.get(id);
+ if (room != null) {
+ room.addAction(time, action);
+ }
+ }
+}
diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java
new file mode 100644
index 0000000..f08bf5c
--- /dev/null
+++ b/src/main/java/com/hivekion/room/bean/Room.java
@@ -0,0 +1,139 @@
+package com.hivekion.room.bean;
+
+import com.hivekion.common.uuid.IdUtils;
+import com.hivekion.room.func.TaskAction;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+import lombok.Data;
+
+/**
+ * [类的简要说明]
+ *
+ * [详细描述,可选]
+ *
+ *
+ * @author LiDongYU
+ * @since 2025/7/22
+ */
+@Data
+public class Room implements AutoCloseable {
+
+
+ private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ private ScheduledFuture> future;
+ private String roomId;
+ private Map> actionMap = new ConcurrentHashMap<>();
+
+ //线程池
+ private final ExecutorService actionExecutor =
+ new ThreadPoolExecutor(
+ 5, 5, // corePoolSize, maximumPoolSize
+ 0L, TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(1000), // 有界队列,只允许100个待执行任务
+ new ThreadPoolExecutor.AbortPolicy() // 超出直接抛异常
+ );
+
+ public Room(String roomId) {
+ this.roomId = roomId;
+ }
+
+ /**
+ * 剩余时间
+ */
+ private AtomicLong duringTime = new AtomicLong(0);
+ private AtomicLong totalTime = new AtomicLong(0);
+
+ private int mag = 1;
+
+ //获取剩余时间
+ public long getDuringTime() {
+ return duringTime.get();
+ }
+
+ /**
+ * 启动
+ *
+ * @param time 总时间
+ */
+ public void start(long time) {
+ totalTime.set(time);
+ startTask();
+ }
+
+ /**
+ * 停止
+ */
+ public void stop() {
+ cancelTask();
+ }
+
+ /**
+ * 暂停
+ */
+ public void pause() {
+ cancelTask();
+ }
+ public void resume() {
+ startTask();
+ }
+ /**
+ * 快进
+ *
+ * @param mag 放大倍数
+ */
+ public void magChange(int mag) {
+ this.mag = mag;
+ }
+
+ // 启动定时任务
+ private void startTask() {
+ if (future == null || future.isCancelled()) {
+ future = scheduler.scheduleAtFixedRate(() -> {
+ long curTime = duringTime.addAndGet(this.mag); // 推荐用 addAndGet
+ Map actions = actionMap.get(curTime);
+ if (actions != null && !actions.isEmpty()) {
+ // 先复制key,避免并发删除问题
+ for (Map.Entry entry : actions.entrySet()) {
+ actionExecutor.submit(entry.getValue()::doSomeThing);
+ }
+ // 全部执行后再清空
+ actions.clear();
+ // 或者 actionMap.remove(curTime); 如果你不需要重用这个 key
+ actionMap.remove(curTime);
+ }
+ }, 0, 1, TimeUnit.SECONDS);
+ }
+ }
+
+ // 取消定时任务
+ private void cancelTask() {
+ if (future != null && !future.isCancelled()) {
+ future.cancel(true);
+
+ }
+ }
+
+ public void addAction(long time, TaskAction action) {
+ actionMap.computeIfAbsent(time, k -> new ConcurrentHashMap<>())
+ .put(IdUtils.simpleUUID(), action);
+ }
+
+ @Override
+ public void close() throws Exception {
+ actionMap.clear();
+ if (future != null && !future.isCancelled()) {
+ future.cancel(true);
+ }
+ if (scheduler != null && !scheduler.isShutdown()) {
+ scheduler.shutdown();
+ }
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/bean/EquipInfo.java b/src/main/java/com/hivekion/room/func/TaskAction.java
similarity index 53%
rename from src/main/java/com/hivekion/scenario/bean/EquipInfo.java
rename to src/main/java/com/hivekion/room/func/TaskAction.java
index 976b7b2..ae416e5 100644
--- a/src/main/java/com/hivekion/scenario/bean/EquipInfo.java
+++ b/src/main/java/com/hivekion/room/func/TaskAction.java
@@ -1,6 +1,4 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
+package com.hivekion.room.func;
/**
* [类的简要说明]
@@ -11,7 +9,8 @@ import lombok.Data;
* @author LiDongYU
* @since 2025/7/22
*/
-@Data
-public class EquipInfo {
+@FunctionalInterface
+public interface TaskAction {
+ void doSomeThing();
}
diff --git a/src/main/java/com/hivekion/scenario/TaskFinishedCall.java b/src/main/java/com/hivekion/scenario/TaskFinishedCall.java
deleted file mode 100644
index d9a0614..0000000
--- a/src/main/java/com/hivekion/scenario/TaskFinishedCall.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.hivekion.scenario;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-public interface TaskFinishedCall {
- void doneTask();
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/ArraysTag.java b/src/main/java/com/hivekion/scenario/bean/ArraysTag.java
deleted file mode 100644
index 9049592..0000000
--- a/src/main/java/com/hivekion/scenario/bean/ArraysTag.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class ArraysTag {
- private List Array;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/GuidInfo.java b/src/main/java/com/hivekion/scenario/bean/GuidInfo.java
deleted file mode 100644
index 51933f7..0000000
--- a/src/main/java/com/hivekion/scenario/bean/GuidInfo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class GuidInfo {
- private String Deduc;
- private String OrMin;
- private String Text;
- private String Uuid;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Mount.java b/src/main/java/com/hivekion/scenario/bean/Mount.java
deleted file mode 100644
index 8c12a90..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Mount.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONArray;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class Mount {
- private String Uuid;
- private JSONArray MountsData;
- private Integer MsgType;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/PostInfo.java b/src/main/java/com/hivekion/scenario/bean/PostInfo.java
deleted file mode 100644
index 892877c..0000000
--- a/src/main/java/com/hivekion/scenario/bean/PostInfo.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class PostInfo {
- private Integer PostCount;
- private String PostName;
- private Integer PostId;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Power.java b/src/main/java/com/hivekion/scenario/bean/Power.java
deleted file mode 100644
index b5c159a..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Power.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson2.JSONObject;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class Power {
- private PowerUnion Power;
- private PowerTask Task;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/PowerSet.java b/src/main/java/com/hivekion/scenario/bean/PowerSet.java
deleted file mode 100644
index c00286c..0000000
--- a/src/main/java/com/hivekion/scenario/bean/PowerSet.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class PowerSet {
- private List FightPower;
- private List SafeguardPower;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/PowerTask.java b/src/main/java/com/hivekion/scenario/bean/PowerTask.java
deleted file mode 100644
index 7aa4e1a..0000000
--- a/src/main/java/com/hivekion/scenario/bean/PowerTask.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson2.JSONArray;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class PowerTask {
- private PowerTaskInfo Blue;
- private PowerTaskInfo Red;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/PowerTaskInfo.java b/src/main/java/com/hivekion/scenario/bean/PowerTaskInfo.java
deleted file mode 100644
index 9db8807..0000000
--- a/src/main/java/com/hivekion/scenario/bean/PowerTaskInfo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson2.JSONArray;
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class PowerTaskInfo {
- private List FightTask;
- private List SafeguardTask;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/PowerUnion.java b/src/main/java/com/hivekion/scenario/bean/PowerUnion.java
deleted file mode 100644
index 4db9c4c..0000000
--- a/src/main/java/com/hivekion/scenario/bean/PowerUnion.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class PowerUnion {
- private PowerSet Blue;
- private PowerSet Red;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/RegulationsRule.java b/src/main/java/com/hivekion/scenario/bean/RegulationsRule.java
deleted file mode 100644
index f1aa9fb..0000000
--- a/src/main/java/com/hivekion/scenario/bean/RegulationsRule.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class RegulationsRule {
-
- private Integer KeepDistanceTarget;
- private Boolean AttackDefendElecPowerEdit;
- private Integer WeaControlToDive;
- private Integer WeaControlToGround;
- private Integer OilProvide;
- private Integer AutoEvasion;
- private Integer UseNWeapon;
- private Boolean AlliedForcesOilProvideEdit;
- private Integer WarAppearTarget;
- private Integer OilStatusReturn;
- private Boolean DiscardAmmunitionEdit;
- private Integer AttackWeaponReturn;
- private Integer UseShipAirMissile;
- private Boolean WarAppearTargetEdit;
- private Boolean OilStatusReturnEdit;
- private Integer QuickDispatch;
- private Integer AttackNeglectPlanLine;
- private Boolean UseAIPPropulsionEdit;
- private Integer DamageLevelRedeploy;
- private Boolean WarFuzzyPositionTargetEdit;
- private Integer AirActionTempo;
- private Boolean SelectUnitOilProvideEdit;
- private Boolean UnderAttckNeglectElecEdit;
- private Integer WarFuzzyPositionTarget;
- private Boolean UseNWeaponEdit;
- private Integer WeaControlToSky;
- private Integer DiscardAmmunition;
- private Boolean SurveyMenaceToDiveEdit;
- private Boolean WeaponStatusReturnEdit;
- private Boolean OilStatusPlanEdit;
- private Integer DeducType;
- private Boolean VoyageCenterElecPowerEdit;
- private Boolean OilProvideEdit;
- private Integer SelectUnitOilProvide;
- private Integer OilRedeploy;
- private Integer UnderAttckNeglectElec;
- private Integer DefendWeaponRedeploy;
- private Boolean TorpedoPowerRangeEdit;
- private Integer AutoLoadingTime;
- private Integer AttackDefendElecPower;
- private Boolean KeepDistanceTargetEdit;
- private Integer UseAIPPropulsion;
- private Integer OilReturn;
- private Boolean WeaponStatusPlanEdit;
- private Integer OilStatusPlan;
- private Boolean HangSonarEdit;
- private Integer SkyToGroundShot;
- private Integer HangSonar;
- private Integer Radar;
- private Integer VoyageCenterElecPower;
- private Boolean QuickDispatchEdit;
- private Integer TorpedoPowerRange;
- private Boolean AutoLoadingTimeEdit;
- private Integer WeaControlToSea;
- private Integer AlliedForcesOilProvide;
- private Boolean AvoidSearchElementEdit;
- private Boolean AttackNeglectPlanLineEdit;
- private Integer Sonar;
- private Boolean WeaControlToGroundEdit;
- private Boolean WeaControlToDiveEdit;
- private Boolean WeaControlToSeaEdit;
- private Integer MsgType;
- private Boolean AirActionTempoEdit;
- private Boolean SkyToGroundShotEdit;
- private Boolean WeaControlToSkyEdit;
- private Integer AvoidSearchElement;
- private Integer SurveyMenaceToDive;
- private Integer AttackWeaponRedeploy;
- private Boolean ConsistentSuperiors;
- private Integer DefendWeaponReturn;
- private Integer WeaponStatusReturn;
- private Boolean AutoEvasionEdit;
- private Integer Jammer;
- private Integer WeaponStatusPlan;
- private Integer Laser;
- private Integer DamageLevelReturn;
- private Integer RuleLevelType;
- private Boolean UseShipAirMissileEdit;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Route.java b/src/main/java/com/hivekion/scenario/bean/Route.java
deleted file mode 100644
index 3ea55e7..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Route.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONArray;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class Route {
- private String Uuid;
- private JSONArray FlyPath;
- private Integer MsgType;
- private JSONArray SupportPath;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/ScenarioData.java b/src/main/java/com/hivekion/scenario/bean/ScenarioData.java
deleted file mode 100644
index 0ef7766..0000000
--- a/src/main/java/com/hivekion/scenario/bean/ScenarioData.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONArray;
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class ScenarioData {
- private Integer continueTime;
- private String planDesc;
- private double leftDownLat;
- private String treeList;
- private String planName;
- private double rightUpLon;
- private double leftDownLon;
- private long wasterTime;
- private String planId;
- private String startTime;
- private String author;
- private String planImage;
- private double rightUpLat;
- private String planTime;
- private double leftUpLat;
- private double rightDownLat;
- private String startDate;
- private double leftUpLon;
- private String planDate;
- private RegulationsRule regulationsRule;
-
- private List unitList; //编制
- private List taskList;
- private List periodWeather;
- private List routesList;
- private List groupList;
- private List mountList;
- private List sensorsList;
-
-
-
- private Integer BlueGroupNum;
- private String MetoEnvironment;
- private JSONArray ProAreaList;
- private Integer RedGroupNum;
- private String WeatherInfo;
-
- private JSONArray blockList;
-
-
-
- private String scenTest;
-
-
-
-
-
-
-
-
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Sensors.java b/src/main/java/com/hivekion/scenario/bean/Sensors.java
deleted file mode 100644
index b89fdc9..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Sensors.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONArray;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class Sensors {
- private String Uuid;
- private Integer MsgType;
- private JSONArray SensorsData;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Task.java b/src/main/java/com/hivekion/scenario/bean/Task.java
deleted file mode 100644
index 6fde602..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Task.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONObject;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class Task {
- private JSONObject TargetDetailListInfo;
- private JSONObject UnitAllocation;
- private JSONObject TaskBaseInfo;
- private String Guid;
- private Integer MsgType;
- private Integer DeducType;
- private JSONObject RuleSetInfo;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/TeamPeoWeaInfo.java b/src/main/java/com/hivekion/scenario/bean/TeamPeoWeaInfo.java
deleted file mode 100644
index 10813ce..0000000
--- a/src/main/java/com/hivekion/scenario/bean/TeamPeoWeaInfo.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-public class TeamPeoWeaInfo {
- private Integer OrganId;
- private String OrganName;
- private List EquipInfo;
- private List PostInfo;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Unit.java b/src/main/java/com/hivekion/scenario/bean/Unit.java
deleted file mode 100644
index 2f5dd9b..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Unit.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import java.math.BigDecimal;
-import java.util.List;
-import lombok.Data;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@Data
-@JsonInclude(Include.ALWAYS)
-public class Unit {
- private Integer ChemicalEquipNum;
- private Integer LogisticsSupportType;
- private Integer TeamProvisionFoodInfo;
- private Integer GenericEquipNum;
- private Integer EngineerConsume;
- private Integer CarEquipNum;
- private String TrainLevel;
- private Integer MinesweepAmmunitionInfo;
- private Integer AirEquipNum;
- private Integer PeoShroudBuryConsume;
- private Integer DamageTargetType;
- private Integer PeoBloodMedicalConsume;
- private Integer AntitankAmmunitionConsume;
- private BigDecimal Longitude;
- private Integer MinesweepTotalConsume;
- private Integer LightAmmunitionConsume;
- private Integer PressAmmunitionInfo;
- private Integer HitTarget;
- private Integer TeamPeopleNum;
- private Integer TeamSupportType;
- private Integer TeamFieldOperationsFoodInfo;
- private Integer TeamBurialBagInfo;
- private String FormationName;
- private Integer AntitankAmmunitionInfo;
- private Boolean ElecStatus;
- private Integer TeamBloodInfo;
- private String UnitTeamTreeInfo;
- private Integer AntitankTotalConsume;
- private Integer OilWheelEquipNum;
- private Integer WaterSafeDay;
- private Integer StrikePosition;
- private Integer PressAmmunitionConsume;
- private Integer SuppressConsume;
- private Integer ModelScale;
- private Integer MaterialStrike;
- private Integer ChemicalTotalConsume;
- private Integer LightAmmunitionInfo;
- private String Rname;
- private Integer MsgType;
- private Integer PressTotalConsume;
- private Integer EngineerEquipNum;
- private Integer TeamMedicinalInfo;
- private Integer ExplosivesTotalConsume;
- private Integer ArmorEquipNum;
- private Integer PeoHerbMedicalConsume;
- private Integer AirAmmunitionConsume;
- private Integer LogisticsAspectType;
- private Integer LaserCalType;
- private Integer EquipOilConsume;
- private Integer HurtPeopleNum;
- private Integer ModelSizeChangeMultiple;
- private Integer ChemicalConsume;
- private Integer PeoFieldOperationsFoodConsume;
- private BigDecimal Latitude;
- private String Creator;
- private Integer FoodSafeDay;
- private String Guid;
- private String Name;
- private Integer TeamQuiltInfo;
- private Integer DamageRusult;
- private Integer SmokeFireTotalConsume;
- private Integer SmokeFireAmmunitionConsume;
- private Boolean FoodStatus;
- private Integer UnitType;
- private Integer ChemicalAmmunitionInfo;
- private Integer PeoWaterConsume;
- private Integer OilArmorEquipNum;
- private BigDecimal Course;
- private Integer AirConsume;
- private Boolean OrNotWaterCar;
- private Integer AirAmmunitionInfo;
- private String Flag;
- private Integer EntityType;
- private Integer InveEquipNum;
- private Integer LightTotalConsume;
- private String State;
- private JSONArray FightActionInfo;
- private Integer TeamEquipNum;
- private Integer DeducType;
- private Integer InveConsume;
- private Integer ReactorConsume;
- private Integer ElecSafeDay;
- private Integer ExplosivesAmmunitionInfo;
- private BigDecimal TeamWaterInfo;
- private Integer ArmorConsume;
- private Integer ChemicalAmmunitionConsume;
- private Integer GenericConsume;
- private Integer MinesweepAmmunitionConsume;
- private Integer SmokeFireAmmunitionInfo;
- private Integer PeoProvisionFoodConsume;
- private Integer OilInfo;
- private Integer ExplosivesAmmunitionConsume;
- private Boolean MedicalStatus;
- private Boolean WaterStatus;
- private Integer SuppressEquipNum;
- private BigDecimal Height;
- private Integer DeadPeopleNum;
- private Integer PeoQuiltConsume;
- private Integer ReactorEquipNum;
- private Integer Speed;
- private String Uuid;
- private Integer CarConsume;
- private Integer ThirdFunctionState;
- private Integer MedicalSafeDay;
- private Integer AirTotalConsume;
-
- private List TeamPeoWeaInfo;
- private RegulationsRule RegulationsRule;
-}
diff --git a/src/main/java/com/hivekion/scenario/bean/Weather.java b/src/main/java/com/hivekion/scenario/bean/Weather.java
deleted file mode 100644
index fe7e635..0000000
--- a/src/main/java/com/hivekion/scenario/bean/Weather.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.hivekion.scenario.bean;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-@JsonInclude(Include.ALWAYS)
-public class Weather {
-
-}
diff --git a/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java b/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java
new file mode 100644
index 0000000..fd97cdd
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java
@@ -0,0 +1,75 @@
+package com.hivekion.scenario.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hivekion.common.entity.ResponseData;
+import com.hivekion.common.uuid.IdUtils;
+import com.hivekion.scenario.entity.BattleSupplier;
+import com.hivekion.scenario.entity.ScenarioResource;
+import com.hivekion.scenario.service.IBattleSupplierService;
+import com.hivekion.scenario.service.ScenarioResourceService;
+import com.hivekion.team.entity.Teaminfo;
+import com.hivekion.team.service.ITeaminfoService;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-15
+ */
+@Controller
+@RequestMapping("/battleSupplier")
+public class BattleSupplierController {
+
+ @Resource
+ private IBattleSupplierService battleSupplierService;
+ @Resource
+ private ITeaminfoService teamInfoService;
+ @Resource
+ private ScenarioResourceService resourceService;
+
+ @PostMapping("/save")
+ public ResponseData save(@RequestBody BattleSupplier battleSupplier) {
+ if (battleSupplier.getId() == null) {
+ battleSupplier.setId(IdUtils.simpleUUID());
+ battleSupplierService.save(battleSupplier);
+ } else {
+ battleSupplierService.updateById(battleSupplier);
+ }
+ return ResponseData.success(null);
+ }
+
+ @GetMapping("/remove/{id}")
+ public ResponseData remove(@PathVariable String id) {
+ battleSupplierService.removeById(id);
+ return ResponseData.success(null);
+ }
+
+ @GetMapping("/list")
+ public ResponseData> list(String supplierId) {
+ Map map = teamInfoService.teamInfoMap();
+ Map resourceMap = resourceService.resourceMap();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("supplier_resource_id", supplierId);
+ List list = battleSupplierService.list(queryWrapper);
+ list.forEach(item -> {
+ if (resourceMap.get(item.getBattleResourceId()) != null) {
+ ScenarioResource resource = resourceMap.get(item.getBattleResourceId());
+ if (map.get(resource.getResourceId()) != null) {
+ item.setSupplierResourceName(map.get(resource.getResourceId()).getName());
+ }
+ }
+ });
+ return ResponseData.success(list);
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/controller/RoomLogController.java b/src/main/java/com/hivekion/scenario/controller/RoomLogController.java
new file mode 100644
index 0000000..2d06871
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/controller/RoomLogController.java
@@ -0,0 +1,37 @@
+package com.hivekion.scenario.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hivekion.common.entity.ResponseData;
+import com.hivekion.scenario.entity.RoomLog;
+import com.hivekion.scenario.service.IRoomLogService;
+import java.util.List;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-17
+ */
+@RestController
+@RequestMapping("/scenario/roomLog")
+public class RoomLogController {
+
+ @Resource
+ private IRoomLogService roomLogService;
+
+ @GetMapping("/list")
+ public ResponseData> list(String roomId) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("room_id", roomId==null?"0":roomId);
+ queryWrapper.orderByAsc("log_time");
+ queryWrapper.last("limit 10");
+ List roomLogs = roomLogService.list(queryWrapper);
+ return ResponseData.success(roomLogs);
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java
index 58648ce..c4ff97d 100644
--- a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java
+++ b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java
@@ -9,13 +9,16 @@ import com.hivekion.common.entity.ResponseData;
import com.hivekion.common.enums.ResultCodeEnum;
import com.hivekion.common.security.SecurityUtils;
import com.hivekion.common.uuid.IdUtils;
+import com.hivekion.enums.ScenarioRoomStatusEnum;
import com.hivekion.scenario.bean.ScenarioWsParam;
+import com.hivekion.scenario.entity.RoomLog;
import com.hivekion.scenario.entity.ScenarioRoom;
import com.hivekion.scenario.service.ScenarioRoomService;
import com.hivekion.scenario.service.ScenarioTaskService;
import io.swagger.annotations.ApiOperation;
import java.time.LocalDateTime;
import java.util.List;
+import java.util.Map;
import javax.annotation.Resource;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
@@ -38,12 +41,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/scenario/room")
public class ScenarioRoomController extends BaseController {
- @Resource
- private ScenarioTaskService scenarioTaskService;
+
@Resource
private ScenarioRoomService scenarioRoomService;
@Resource
private ScenarioService scenarioService;
+ @Resource
+ private ScenarioTaskService scenarioTaskService;
+
/**
* 查询想定列表
*
@@ -52,11 +57,16 @@ public class ScenarioRoomController extends BaseController {
@ApiOperation(value = "分页查询房间列表", notes = "")
@GetMapping("/list")
public PagedResultVo list(ScenarioRoom search) {
-
+ Map scenarioMap = scenarioService.scenarioMap();
//设置开始索引
search.setStart(search.getPageSize() * (search.getPageNum() - 1));
//查询结果列表
List list = scenarioRoomService.list(search);
+ for (ScenarioRoom scenarioRoom : list) {
+ if (scenarioMap.get(scenarioRoom.getScenarioId()) != null) {
+ scenarioRoom.setScenarioName(scenarioMap.get(scenarioRoom.getScenarioId()).getName());
+ }
+ }
//查询总数
Long total = scenarioRoomService.count(search);
return list(search, list, total);
@@ -87,24 +97,31 @@ public class ScenarioRoomController extends BaseController {
public ResponseData start(@RequestBody ScenarioRoom room) {
//验证
Scenario scenario = scenarioService.getScenarioById(room.getScenarioId());
- if(scenario==null){
- return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(),"想定不存在",null);
+ if (scenario == null) {
+ return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(), "想定不存在", null);
}
- if(scenarioRoomService.getById(room.getId())==null){
- return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(),"房间不存在",null);
- };
+ if (scenarioRoomService.getById(room.getId()) == null) {
+ return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(), "房间不存在", null);
+ }
+ Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"启动想定",SecurityUtils.getCurrentLoginUser().getUsername())) ;
+
+ scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.STARTED.getCode());
scenarioTaskService.start(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@PostMapping("/break")
public ResponseData breakAWhile(@RequestBody ScenarioRoom room) {
+ Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"暂停想定",SecurityUtils.getCurrentLoginUser().getUsername())) ;
+ scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.BROKEN.getCode());
scenarioTaskService.sleepWhile(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@PostMapping("/wakeUp")
public ResponseData wakeUp(@RequestBody ScenarioRoom room) {
+ Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定继续",SecurityUtils.getCurrentLoginUser().getUsername())) ;
+ scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.STARTED.getCode());
scenarioTaskService.wakeup(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@@ -112,7 +129,7 @@ public class ScenarioRoomController extends BaseController {
@PostMapping("/mag")
public ResponseData mag(@RequestBody ScenarioRoom room) {
synchronized (this) {
-
+ Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定加速/减速",SecurityUtils.getCurrentLoginUser().getUsername())) ;
if (Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId()) == null) {
Global.roomParamMap.put(room.getScenarioId() + "_" + room.getId(), new ScenarioWsParam());
}
@@ -122,8 +139,13 @@ public class ScenarioRoomController extends BaseController {
return ResponseData.success(null);
}
+
+
+
@PostMapping("/stop")
public ResponseData stop(@RequestBody ScenarioRoom room) {
+ Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定结束",SecurityUtils.getCurrentLoginUser().getUsername())) ;
+ scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.FINISHED.getCode());
scenarioTaskService.stop(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
diff --git a/src/main/java/com/hivekion/scenario/entity/BattleSupplier.java b/src/main/java/com/hivekion/scenario/entity/BattleSupplier.java
new file mode 100644
index 0000000..6e7bb9e
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/entity/BattleSupplier.java
@@ -0,0 +1,34 @@
+package com.hivekion.scenario.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ *
+ *
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-15
+ */
+@TableName("TBL_BATTLE_SUPPLIER")
+@ApiModel(value = "BattleSupplier对象", description = "")
+@Data
+public class BattleSupplier implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ @TableId(type = IdType.INPUT)
+ private String id;
+ @TableField(value = "battle_resource_id")
+ private String battleResourceId;
+ @TableField(value = "supplier_resource_id")
+ private String supplierResourceId;
+
+ private String supplierResourceName;
+
+}
diff --git a/src/main/java/com/hivekion/scenario/entity/RoomLog.java b/src/main/java/com/hivekion/scenario/entity/RoomLog.java
new file mode 100644
index 0000000..9efd2e8
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/entity/RoomLog.java
@@ -0,0 +1,45 @@
+package com.hivekion.scenario.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+
+/**
+ *
+ *
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-17
+ */
+@TableName("TBL_ROOM_LOG")
+@ApiModel(value = "RoomLog对象", description = "")
+@Data
+public class RoomLog implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ @TableId(type = IdType.INPUT)
+ private String id;
+ @TableField(value = "room_id")
+ private String roomId;
+ @TableField(value = "log_time")
+ private LocalDateTime logTime;
+
+ private String message;
+ @TableField(value = "user_name")
+ private String userName;
+
+ public static RoomLog createRoomLog(String roomId, String message, String userName) {
+ RoomLog roomLog = new RoomLog();
+ roomLog.setRoomId(roomId);
+ roomLog.setLogTime(LocalDateTime.now());
+ roomLog.setMessage(message);
+ roomLog.setUserName(userName);
+ return roomLog;
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/entity/ScenarioRoom.java b/src/main/java/com/hivekion/scenario/entity/ScenarioRoom.java
index 6c4eceb..87a09cb 100644
--- a/src/main/java/com/hivekion/scenario/entity/ScenarioRoom.java
+++ b/src/main/java/com/hivekion/scenario/entity/ScenarioRoom.java
@@ -38,5 +38,8 @@ public class ScenarioRoom extends SearchInputVo {
private LocalDateTime createTime;
@TableField(exist = false)
private Integer mag;
+ private Integer status = 0;
+ @TableField(exist = false)
+ private String scenarioName;
}
diff --git a/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java b/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java
new file mode 100644
index 0000000..0426a64
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java
@@ -0,0 +1,16 @@
+package com.hivekion.scenario.mapper;
+
+import com.hivekion.scenario.entity.BattleSupplier;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-15
+ */
+public interface BattleSupplierMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/hivekion/scenario/mapper/RoomLogMapper.java b/src/main/java/com/hivekion/scenario/mapper/RoomLogMapper.java
new file mode 100644
index 0000000..5e354a4
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/mapper/RoomLogMapper.java
@@ -0,0 +1,16 @@
+package com.hivekion.scenario.mapper;
+
+import com.hivekion.scenario.entity.RoomLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-17
+ */
+public interface RoomLogMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java b/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java
new file mode 100644
index 0000000..ee247d7
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java
@@ -0,0 +1,19 @@
+package com.hivekion.scenario.service;
+
+import com.hivekion.scenario.entity.BattleSupplier;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+import java.util.Set;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-15
+ */
+public interface IBattleSupplierService extends IService {
+ public Set getBattleResourceBySupplierId(String id);
+ public Set getSupplierIdByBattleId(String id);
+}
diff --git a/src/main/java/com/hivekion/scenario/service/IRoomLogService.java b/src/main/java/com/hivekion/scenario/service/IRoomLogService.java
new file mode 100644
index 0000000..24eee51
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/service/IRoomLogService.java
@@ -0,0 +1,16 @@
+package com.hivekion.scenario.service;
+
+import com.hivekion.scenario.entity.RoomLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-17
+ */
+public interface IRoomLogService extends IService {
+
+}
diff --git a/src/main/java/com/hivekion/scenario/service/ScenarioRoomService.java b/src/main/java/com/hivekion/scenario/service/ScenarioRoomService.java
index 6cd8d96..f8be1e1 100644
--- a/src/main/java/com/hivekion/scenario/service/ScenarioRoomService.java
+++ b/src/main/java/com/hivekion/scenario/service/ScenarioRoomService.java
@@ -15,5 +15,6 @@ import java.util.List;
public interface ScenarioRoomService extends IService {
List list(ScenarioRoom room);
Long count(ScenarioRoom room);
+ void updateStatus(String id,Integer status);
}
diff --git a/src/main/java/com/hivekion/scenario/service/ScenarioTaskService.java b/src/main/java/com/hivekion/scenario/service/ScenarioTaskService.java
index 19bc678..57e3028 100644
--- a/src/main/java/com/hivekion/scenario/service/ScenarioTaskService.java
+++ b/src/main/java/com/hivekion/scenario/service/ScenarioTaskService.java
@@ -17,5 +17,6 @@ public interface ScenarioTaskService extends IService {
void stop(Integer id,String roomId);
void sleepWhile(Integer id,String roomId);
void wakeup(Integer id,String roomId);
+
List queryTaskList(ScenarioTask task);
}
diff --git a/src/main/java/com/hivekion/scenario/service/TaskLogicService.java b/src/main/java/com/hivekion/scenario/service/TaskLogicService.java
deleted file mode 100644
index e0396a1..0000000
--- a/src/main/java/com/hivekion/scenario/service/TaskLogicService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.hivekion.scenario.service;
-
-import com.hivekion.baseData.entity.Scenario;
-import com.hivekion.scenario.TaskFinishedCall;
-import com.hivekion.scenario.entity.ScenarioTask;
-import java.util.List;
-
-/**
- * [类的简要说明]
- *
- * [详细描述,可选]
- *
- *
- * @author LiDongYU
- * @since 2025/7/22
- */
-public interface TaskLogicService {
-
- //移动任务
- void handleMoveTask(ScenarioTask task, Scenario scenario, String roomId,double speed,
- TaskFinishedCall call);
- //战斗任务
- void handleBattleTask(ScenarioTask task, Scenario scenario, String roomId,
- List injuredTimeList);
- //保障任务
-
- void supplierTask(ScenarioTask task,Scenario scenario, String roomId);
-
-
-}
diff --git a/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java
new file mode 100644
index 0000000..d11c8a6
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java
@@ -0,0 +1,41 @@
+package com.hivekion.scenario.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hivekion.scenario.entity.BattleSupplier;
+import com.hivekion.scenario.mapper.BattleSupplierMapper;
+import com.hivekion.scenario.service.IBattleSupplierService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-15
+ */
+@Service
+public class BattleSupplierServiceImpl extends ServiceImpl implements IBattleSupplierService {
+
+ @Override
+ public Set getBattleResourceBySupplierId(String id) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("supplier_resource_id",id);
+ List list = this.list(queryWrapper);
+ return list.stream().map(BattleSupplier::getBattleResourceId).collect(Collectors.toSet());
+ }
+
+ @Override
+ public Set getSupplierIdByBattleId(String id) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("battle_resource_id",id);
+ List list = this.list(queryWrapper);
+
+ return list.stream().map(BattleSupplier::getSupplierResourceId).collect(Collectors.toSet());
+ }
+}
diff --git a/src/main/java/com/hivekion/scenario/service/impl/RoomLogServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/RoomLogServiceImpl.java
new file mode 100644
index 0000000..ca42873
--- /dev/null
+++ b/src/main/java/com/hivekion/scenario/service/impl/RoomLogServiceImpl.java
@@ -0,0 +1,20 @@
+package com.hivekion.scenario.service.impl;
+
+import com.hivekion.scenario.entity.RoomLog;
+import com.hivekion.scenario.mapper.RoomLogMapper;
+import com.hivekion.scenario.service.IRoomLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author liDongYu
+ * @since 2025-09-17
+ */
+@Service
+public class RoomLogServiceImpl extends ServiceImpl implements IRoomLogService {
+
+}
diff --git a/src/main/java/com/hivekion/scenario/service/impl/ScenarioRoomServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/ScenarioRoomServiceImpl.java
index 40c3027..3223da3 100644
--- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioRoomServiceImpl.java
+++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioRoomServiceImpl.java
@@ -1,10 +1,9 @@
package com.hivekion.scenario.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hivekion.scenario.entity.ScenarioRoom;
import com.hivekion.scenario.mapper.ScenarioRoomMapper;
import com.hivekion.scenario.service.ScenarioRoomService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Service;
@@ -17,7 +16,8 @@ import org.springframework.stereotype.Service;
* @since 2025-09-03
*/
@Service
-public class ScenarioRoomServiceImpl extends ServiceImpl implements
+public class ScenarioRoomServiceImpl extends
+ ServiceImpl implements
ScenarioRoomService {
@Override
@@ -30,4 +30,10 @@ public class ScenarioRoomServiceImpl extends ServiceImpl implements
ScenarioTaskService {
- @Resource
- private SpringGlobalTaskManager springGlobalTaskManager;
- @Resource
- private RedisUtil redisUtil;
@Resource
private ScenarioService scenarioService;
@Resource
private IWeatherResourceService weatherResourceService;
- @Resource
- private TaskLogicService taskLogicService;
@Override
public void start(Integer scenarioId, String roomId) {
- log.info("scenarioId::{},roomId::{}", scenarioId, roomId);
- Scenario currentScenario = scenarioService.getScenarioById(scenarioId);
- //想定当前持续时间
- redisUtil.hset(roomId + "_" + scenarioId, "duringTime", "0");
- //想定当前状态
- redisUtil.hset(roomId + "_" + scenarioId, "status", "running");
-
- //查询天气数据
- List weatherList = weatherResourceService.list(
- new QueryWrapper()
- .eq("scenario_id", scenarioId));
-
- //放入天气数据
- redisUtil.hset(roomId + "_" + scenarioId, "weather", JSONArray.toJSONString(weatherList));
- //查询任务
- ScenarioTask queryTask = new ScenarioTask();
- queryTask.setScenarioId(scenarioId);
- redisUtil.hset(roomId + "_" + scenarioId, "taskList",
- JSONArray.toJSONString(queryTaskList(queryTask)));
- new Thread(() -> {
-
- springGlobalTaskManager.startPerSecondTask(roomId + "_" + scenarioId + "_task", () -> {
-
- //时间累计
- increaseTime(currentScenario, roomId);
- //天气触发
- weatherTrigger(currentScenario, roomId);
- //任务触发
- // taskTrigger(currentScenario, roomId);
-
- });
- }).start();
+ //查询想定的持续时间
+ Scenario scenario = scenarioService.getScenarioById(scenarioId);
+ if (scenario != null) {
+ long duringTime = Duration.between(scenario.getStartTime(), scenario.getEndTime())
+ .getSeconds();
+ RoomManager.startRoom(roomId, duringTime);
+ addWeatherEvent(scenario, roomId);
+ addTaskEvent(scenario, roomId);
+ }
}
@Override
public void stop(Integer id, String roomId) {
- if (Global.roomParamMap.get(id + "_" + roomId) != null) {
- Global.roomParamMap.get(id + "_" + roomId).setMag(1);
- }
-
- springGlobalTaskManager.cancelTask(roomId + "_" + id + "_task");
+ RoomManager.stopRoom(roomId);
}
@Override
public void sleepWhile(Integer id, String roomId) {
- redisUtil.hset(roomId + "_" + id, "states", "sleep");
+ RoomManager.stopRoom(roomId);
}
@Override
public void wakeup(Integer id, String roomId) {
- redisUtil.hset(roomId + "_" + id, "states", "running");
+ RoomManager.resumeRoom(roomId);
}
- private void increaseTime(Scenario currentScenario, String roomId) {
- try {
-
- int mag = Global.roomParamMap.get(currentScenario.getId() + "_" + roomId) == null ? 1
- : Global.roomParamMap.get(currentScenario.getId() + "_" + roomId).getMag();
- //获取当前状态
- Object statusObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "status");
- log.info("scenario_id:{},status::{}", currentScenario.getId(), statusObj);
- if (statusObj != null && statusObj.toString().equals("running")) {
- int duringTime = getCurrentDuringTime(currentScenario, roomId);
-
- duringTime = duringTime + mag;
- log.info("duringTime::{}", duringTime);
- redisUtil.hset(roomId + "_" + currentScenario.getId(), "duringTime", duringTime + "");
- }
-
-
- } catch (
- Exception e) {
- log.error("error::", e);
- }
-
- }
-
- /**
- * 天气触发
- *
- * @param currentScenario 当前想定
- * @param roomId 房间ID
- */
- private void weatherTrigger(Scenario currentScenario, String roomId) {
- try {
- String weatherResources = (String) redisUtil.hget(roomId + "_" + currentScenario.getId(),
- "weather");
- List weatherList = JSONArray.parseArray(weatherResources,
- WeatherResource.class);
- int duringTime = getCurrentDuringTime(currentScenario, roomId);
-
- for (WeatherResource resource : weatherList) {
-
- if ("init".equals(resource.getStatus())) {
-
- if (currentScenario.getStartTime().plusSeconds(duringTime)
- .isAfter(resource.getLastBegTime())) {
- log.info("{}", "start_" + resource.getWeatherType());
- resource.setStatus("running");
- ResponseCmdInfo responseCmdInfo = new ResponseCmdInfo<>();
- responseCmdInfo.setScenarioId(currentScenario.getId());
- responseCmdInfo.setRoom(roomId);
- responseCmdInfo.setCmdType("start_" + resource.getWeatherType());
- responseCmdInfo.setScenarioId(currentScenario.getId());
- responseCmdInfo.setRoom(roomId);
- Global.sendCmdInfoQueue.add(responseCmdInfo);
- }
-
- }
- if ("running".equals(resource.getStatus())) {
- if (currentScenario.getStartTime().plusSeconds(duringTime)
- .isAfter(resource.getLastEndTime())) {
- log.info("{}", "stopped_" + resource.getWeatherType());
- resource.setStatus("stopped");
- ResponseCmdInfo responseCmdInfo = new ResponseCmdInfo<>();
- responseCmdInfo.setScenarioId(currentScenario.getId());
- responseCmdInfo.setRoom(roomId);
- responseCmdInfo.setCmdType("stop_" + resource.getWeatherType());
- responseCmdInfo.setScenarioId(currentScenario.getId());
- responseCmdInfo.setRoom(roomId);
- Global.sendCmdInfoQueue.add(responseCmdInfo);
- }
- }
-
- }
- redisUtil.hset(roomId + "_" + currentScenario.getId(), "weather",
- JSONArray.toJSONString(weatherList));
-
-
- } catch (Exception ex) {
-
- log.error(ex.getMessage());
- }
-
-
- }
-
- /**
- * 获取当前想定从开始到现在时间
- *
- * @param scenario
- * @param roomId
- * @return
- */
- private int getCurrentDuringTime(Scenario scenario, String roomId) {
- Object duringTime = redisUtil.hget(roomId + "_" + scenario.getId(), "duringTime");
- if (duringTime != null) {
- return Integer.parseInt(duringTime.toString());
- }
- return 0;
- }
-
- private void taskTrigger(Scenario currentScenario, String roomId) {
- try {
-
- Object statusObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "status");
- if (statusObj != null && statusObj.toString().equals("running")) {
- Object taskListObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "taskList");
-
- List taskList = JSONArray.parseArray(taskListObj.toString(),
- ScenarioTask.class);
-
- for (ScenarioTask scenarioTask : taskList) {
- int duringTime = getCurrentDuringTime(currentScenario, roomId);
- log.info("task duringTime::{},{},{}", duringTime,
- currentScenario.getStartTime().plusSeconds(duringTime), scenarioTask.getStartTime());
- if (currentScenario.getStartTime().plusSeconds(duringTime)
- .isAfter(scenarioTask.getStartTime())) {
- switch (scenarioTask.getTaskType()) {
- case "1":
-
- taskLogicService.handleMoveTask(scenarioTask, currentScenario, roomId, 18.0,
- null);
-
- break;
- case "2":
- Random random = new Random();
- List randomIntList = new ArrayList<>();
- long continueSeconds =
- Duration.between(scenarioTask.getStartTime(), scenarioTask.getEndTime())
- .toMinutes() * 60;
- for (int i = 0; i < 5; i++) {
- randomIntList.add(random.nextInt((int) continueSeconds) + 1);
- }
-
- taskLogicService.handleBattleTask(scenarioTask, currentScenario, roomId,
- randomIntList);
-
- break;
- case "4":
- case "5":
- case "6":
- case "7":
- default:
-
- log.info("start a type=7 task");
- taskLogicService.supplierTask(scenarioTask, currentScenario, roomId);
-
-
- }
- }
-
-
- }
-
- redisUtil.hset(roomId + "_" + currentScenario.getId(), "taskList",
- JSONArray.toJSONString(taskList));
- }
- } catch (Exception e) {
- log.error("error::", e);
- }
-
- }
@Override
@@ -279,4 +81,44 @@ public class ScenarioTaskServiceImpl extends
return this.list(queryWrapper);
}
+ /**
+ * 增加天气任务
+ */
+ private void addWeatherEvent(Scenario scenario, String roomId) {
+ List weatherList = weatherResourceService.list();
+ for (WeatherResource weatherResource : weatherList) {
+ long diff = Duration.between(weatherResource.getLastBegTime(), scenario.getStartTime())
+ .getSeconds();
+ //开始
+ RoomManager.addAction(roomId, diff, () -> {
+
+ Global.sendCmdInfoQueue.add(
+ create("start_" + weatherResource.getWeatherType(), scenario, roomId));
+ });
+ //结束
+ long duringTime = Duration.between(weatherResource.getLastBegTime(),
+ weatherResource.getLastEndTime())
+ .getSeconds();
+ RoomManager.addAction(roomId, diff + duringTime, () -> {
+ Global.sendCmdInfoQueue.add(
+ create("stop_" + weatherResource.getWeatherType(), scenario, roomId));
+ });
+ }
+ }
+
+ private void addTaskEvent(Scenario scenario, String roomId) {
+
+
+
+ }
+
+ private ResponseCmdInfo create(String type, Scenario scenario, String roomId) {
+ ResponseCmdInfo responseCmdInfo = new ResponseCmdInfo<>();
+ responseCmdInfo.setScenarioId(scenario.getId());
+ responseCmdInfo.setRoom(roomId);
+ responseCmdInfo.setCmdType(type);
+ responseCmdInfo.setScenarioId(scenario.getId());
+ responseCmdInfo.setRoom(roomId);
+ return responseCmdInfo;
+ }
}
diff --git a/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java
index 97dbcbd..7f59601 100644
--- a/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java
+++ b/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java
@@ -1,27 +1,6 @@
package com.hivekion.scenario.service.impl;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.hivekion.Global;
-import com.hivekion.baseData.entity.Scenario;
-import com.hivekion.common.MultiPointGeoPosition;
-import com.hivekion.common.MultiPointGeoPosition.PositionResult;
-import com.hivekion.common.entity.ResponseCmdInfo;
-import com.hivekion.common.redis.RedisUtil;
-import com.hivekion.scenario.TaskFinishedCall;
-import com.hivekion.scenario.entity.ScenarioTask;
-import com.hivekion.scenario.service.TaskLogicService;
-import com.hivekion.statistic.bean.StatisticBean;
-import com.hivekion.statistic.service.StatisticService;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Resource;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import org.springframework.web.reactive.function.client.WebClient;
/**
* [类的简要说明]
@@ -33,190 +12,156 @@ import org.springframework.web.reactive.function.client.WebClient;
* @since 2025/7/22
*/
@Service
-public class TaskLogicServiceImpl implements TaskLogicService {
+public class TaskLogicServiceImpl {
- @Resource
- private RedisUtil redisUtil;
- @Value("${path.planning.url}")
- private String pathPlanningUrl;
- private final WebClient webClient = WebClient.create();
- @Resource
- private StatisticService statisticService;
- private final static double fuelUseUpPerSecond = 0.1;
- private final static double medicalUseUpPerSecond = 0.1;
- private final static double ammunitionUsePerSecond = 0.1;
-
- @Override
- public void handleMoveTask(ScenarioTask scenarioTask, Scenario currentScenario, String roomId,
- double speed, TaskFinishedCall call) {
- ResponseCmdInfo