From 9f9cb97cbc6a3faa90fd9ee12768c5c77cead691 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: Sun, 21 Sep 2025 04:31:48 +0800 Subject: [PATCH 1/2] =?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 --- .../java/com/hivekion/room/RoomManager.java | 4 + .../com/hivekion/room/bean/AbtParentTask.java | 116 +++++++++++++----- .../hivekion/room/bean/BattleRootTask.java | 2 +- .../java/com/hivekion/room/bean/MoveTask.java | 7 +- .../mapper/ScenarioResourceMapper.java | 4 +- .../service/ScenarioResourceService.java | 2 + .../impl/ScenarioResourceServiceImpl.java | 5 + .../service/impl/ScenarioTaskServiceImpl.java | 4 +- .../resources/application-rule.properties | 2 +- .../mapper/tbl/ScenarioResourceMapper.xml | 8 +- 10 files changed, 113 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/hivekion/room/RoomManager.java b/src/main/java/com/hivekion/room/RoomManager.java index f84d22d..c2beaa6 100644 --- a/src/main/java/com/hivekion/room/RoomManager.java +++ b/src/main/java/com/hivekion/room/RoomManager.java @@ -1,11 +1,13 @@ package com.hivekion.room; +import com.alibaba.fastjson2.JSON; import com.hivekion.baseData.entity.Scenario; import com.hivekion.room.bean.Room; import com.hivekion.room.func.TaskAction; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; +import lombok.extern.slf4j.Slf4j; /** * [类的简要说明] @@ -16,6 +18,7 @@ import java.util.concurrent.ScheduledExecutorService; * @author LiDongYU * @since 2025/7/22 */ +@Slf4j public class RoomManager { private static final Map roomsMap = new ConcurrentHashMap<>(); @@ -48,6 +51,7 @@ public class RoomManager { } public static void addAction(String id, long time, TaskAction action) { + log.info("增加任务::time::{},action::{}",time, JSON.toJSONString(action)); Room room = roomsMap.get(id); if (room != null) { room.addAction(time, action); diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index f1da22d..324a5f3 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -17,6 +17,7 @@ import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl; +import com.hivekion.scenario.service.impl.ScenarioResourceServiceImpl; import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl; import com.hivekion.statistic.bean.EditScenarioInfo; import com.hivekion.statistic.bean.ScenarioInfo; @@ -24,6 +25,8 @@ import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.impl.StatisticServiceImpl; import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.service.impl.SupplierRequestServiceImpl; +import com.hivekion.team.entity.Teaminfo; +import com.hivekion.team.service.impl.TeaminfoServiceImpl; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; @@ -84,16 +87,7 @@ public abstract class AbtParentTask implements TaskAction { private final AtomicBoolean requestFlag = new AtomicBoolean(false); private StatisticBean statisticBean; - //线程池 -// protected ThreadPoolExecutor executor = new ThreadPoolExecutor( -// 5, // 核心线程数 -// 10, // 最大线程数 -// 60L, // 空闲线程存活时间 -// TimeUnit.SECONDS, // 时间单位 -// new LinkedBlockingQueue<>(100), // 任务队列 -// new CustomThreadFactory("MyPool"), // 线程工厂 -// new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 -// ); + public AbtParentTask(ScenarioTask scenarioTask, String roomId) { this.scenarioTask = scenarioTask; @@ -259,6 +253,7 @@ public abstract class AbtParentTask implements TaskAction { double currentFuel = getCurrentFuel(); double totalFuel = statisticBean.getFuel().getTotal(); + log.info("totalFuel::{}", totalFuel); if (currentFuel <= 0 || totalFuel <= 0) { log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId()); return; @@ -288,7 +283,7 @@ public abstract class AbtParentTask implements TaskAction { if (duringAction != null) { duringAction.doSomeThing(); } - log.info("移动中....."); + log.info("移动中..... 放大系数{}",RoomManager.getMag(roomId)); //跑动距离 double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; @@ -459,35 +454,39 @@ public abstract class AbtParentTask implements TaskAction { private void produceTask(double fuel) { try { + Map teamInfoMap = SpringUtil.getBean(TeaminfoServiceImpl.class) + .teamInfoMap(); log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) .selectSupplierResource(scenarioTask.getResourceId()); log.info("{}-可选保障分队长度{}", scenarioTask.getResourceId(), resourceList.size()); if (!resourceList.isEmpty()) { + ScenarioResource supplierResource = null; + // 找出油料保障分队 + for (ScenarioResource resource : resourceList) { + Teaminfo teaminfo = teamInfoMap.get(resource.getResourceId()); - ScenarioTask task = new ScenarioTask(); - task.setId(IdUtils.simpleUUID()); - task.setScenarioId(scenarioTask.getScenarioId()); - task.setResourceId(resourceList.get(0).getId()); - task.setTaskType("6"); - task.setInsureResourceId(scenarioTask.getResourceId()); - task.setSupplierNum(statisticBean.getFuel().getTotal() - fuel); - 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"); + if ("SUPPLIER_FUEL".equals(teaminfo.getRoleCode())) { + supplierResource = resource; + + break; + } + } + if (supplierResource == null) { + log.error("找不到对应的油料保障分队"); + return; + } + //找出油料仓库 + List resources = SpringUtil.getBean(ScenarioResourceServiceImpl.class) + .selectResourceByRoleCode(scenarioTask.getScenarioId(), "WARE_FUEL_HOUSE"); + if (resources.isEmpty()) { + log.error("找不到油料仓库"); + return; + } + + produceMoveTask(supplierResource, resources.get(0), this.coordinateReference.get(), fuel); - log.info("{}-保障分队id::{},from::{},to::{}", this.scenarioTask.getInsureResourceId(), - task.getResourceId(), 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()); } @@ -496,6 +495,59 @@ public abstract class AbtParentTask implements TaskAction { } } + + private void produceMoveTask(ScenarioResource supplierResource, ScenarioResource fuelResource, + Coordinate coordinate, double minusFuel) { + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(supplierResource.getId()); + task.setTaskType("1"); + + task.setFromLat(supplierResource.getLat()); + task.setFromLng(supplierResource.getLng()); + task.setToLat(fuelResource.getLat()); + task.setToLng(fuelResource.getLng()); + task.setStartTime(LocalDateTime.now()); + task.setFromSource("general"); + SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); + MoveTask moveTask = new MoveTask(task, this.roomId, new TaskAction() { + @Override + public void doSomeThing() { + //创建一个保障任务 + + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(supplierResource.getId()); + task.setTaskType("6"); + task.setInsureResourceId(scenarioTask.getResourceId()); + task.setSupplierNum(statisticBean.getFuel().getTotal() - minusFuel); + task.setToLat(coordinate.getLat() + ""); + task.setToLng(coordinate.getLng() + ""); + task.setStartTime(LocalDateTime.now()); + task.setFromLat(fuelResource.getLat()); + task.setFromLng(fuelResource.getLng()); + task.setFromSource("general"); + SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); + SupplierTask supplierTask = new SupplierTask(task, roomId); + RoomManager.addAction(roomId, 0, supplierTask); + } + + @Override + public String getId() { + return ""; + } + + @Override + public String getType() { + return ""; + } + }); + //立即执行 + RoomManager.addAction(roomId, 0, moveTask); + } + } interface BizTaskOnTiming { diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 39087d4..b522cb4 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -229,7 +229,7 @@ public class BattleRootTask extends AbtParentTask { String death = SpringUtil.getBean(Environment.class).getProperty("death.warn"); String injured = SpringUtil.getBean(Environment.class).getProperty("injured.warn"); String ammunition = SpringUtil.getBean(Environment.class).getProperty("ammunition.warn"); - log.info("===========person ammunition==={}===={}====={}========",death,injured,ammunition); + // log.info("===========person ammunition==={}===={}====={}========",death,injured,ammunition); String saveJsonStr= (String) redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); ScenarioInfo scenarioInfo =JSONObject.parseObject(saveJsonStr,ScenarioInfo.class); Double restAmmunition = Double.valueOf(scenarioInfo.getAmmunition().getCurrent()); diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 89c2aec..9be3695 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -44,11 +44,12 @@ public class MoveTask extends AbtParentTask implements TaskAction { */ private final int consumptionTaskInterval = 5; + private final TaskAction finishedAction; - - public MoveTask(ScenarioTask scenarioTask, String roomId) { + public MoveTask(ScenarioTask scenarioTask, String roomId,TaskAction finishedAction) { super(scenarioTask, roomId); + this.finishedAction = finishedAction; } @@ -83,7 +84,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { public String getType() { return ""; } - }, null); //更新路径 + }, this.finishedAction); //更新路径 fuelConsumption();//油品消耗 } diff --git a/src/main/java/com/hivekion/scenario/mapper/ScenarioResourceMapper.java b/src/main/java/com/hivekion/scenario/mapper/ScenarioResourceMapper.java index 255bef5..bb9ac78 100644 --- a/src/main/java/com/hivekion/scenario/mapper/ScenarioResourceMapper.java +++ b/src/main/java/com/hivekion/scenario/mapper/ScenarioResourceMapper.java @@ -2,6 +2,8 @@ package com.hivekion.scenario.mapper; import com.hivekion.scenario.entity.ScenarioResource; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; /** *

@@ -12,5 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2025-09-09 */ public interface ScenarioResourceMapper extends BaseMapper { - + List selectResourceByRoleCode(@Param("scenarioId") Integer scenarioId,@Param("roleCode") String roleCode ); } diff --git a/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java b/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java index d4b7e88..7f0ce27 100644 --- a/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java +++ b/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java @@ -4,6 +4,7 @@ import com.hivekion.scenario.entity.ScenarioResource; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Map; +import org.apache.ibatis.annotations.Param; /** *

@@ -17,4 +18,5 @@ public interface ScenarioResourceService extends IService { List getResourceList(ScenarioResource resource); Map resourceMap(); List getResourceListByScenarioId(Integer scenarioId); + List selectResourceByRoleCode( Integer scenarioId, String roleCode ); } diff --git a/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java index a0d367f..1f9c354 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java @@ -113,4 +113,9 @@ public class ScenarioResourceServiceImpl extends queryWrapper.eq("scenario_id", scenarioId); return this.list(queryWrapper); } + + @Override + public List selectResourceByRoleCode(Integer scenarioId, String roleCode) { + return this.baseMapper.selectResourceByRoleCode(scenarioId, roleCode); + } } 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 f0197e9..cd8a5b0 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -157,8 +157,8 @@ public class ScenarioTaskServiceImpl extends switch (task.getTaskType()) { //移动任务 case "1": - log.info("move task::{}",diff); - MoveTask moveRootTask = new MoveTask(task, roomId); + + MoveTask moveRootTask = new MoveTask(task, roomId,null); RoomManager.addAction(roomId, diff, moveRootTask); respObj.setCmdType("moveTask"); respObj.setData(JSON.toJSONString(moveRootTask)); diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index f39607c..2737c03 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,7 +3,7 @@ death.warn = 56 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 80.6 +fuel.warn = 99.3 medical.warn = 1 death.spreed = 3 injured.spreed = 3 diff --git a/src/main/resources/mapper/tbl/ScenarioResourceMapper.xml b/src/main/resources/mapper/tbl/ScenarioResourceMapper.xml index d941381..5520346 100644 --- a/src/main/resources/mapper/tbl/ScenarioResourceMapper.xml +++ b/src/main/resources/mapper/tbl/ScenarioResourceMapper.xml @@ -1,5 +1,11 @@ - + From 92f0b52980f9bdb82719f18f4ef1815cf1440b11 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: Sun, 21 Sep 2025 05:40:40 +0800 Subject: [PATCH 2/2] =?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 | 57 +++++++++++-------- .../java/com/hivekion/room/bean/MoveTask.java | 2 +- .../java/com/hivekion/room/bean/Room.java | 16 ++++++ .../controller/ScenarioRoomController.java | 32 ++++++++--- .../thread/HandleReceiveRunnable.java | 19 ++++++- .../resources/application-rule.properties | 2 +- .../mapper/tbl/BattleSupplierMapper.xml | 2 +- .../mapper/tbl/ScenarioResourceMapper.xml | 2 +- 8 files changed, 96 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 324a5f3..d6bfa10 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -60,6 +60,8 @@ import org.springframework.web.reactive.function.client.WebClient; @Slf4j public abstract class AbtParentTask implements TaskAction { + + protected final AtomicBoolean taskFinishedStatus = new AtomicBoolean(false); /** * 油料消耗速率 */ @@ -250,32 +252,37 @@ public abstract class AbtParentTask implements TaskAction { try { if (this.getRoomStatus()) { + //自动生成的任务不需要判断油量;不要在生成新的任务 + log.info("{}-fromSource::{}",scenarioTask.getResourceId(),scenarioTask.getFromSource()); + if(!"general".equals(scenarioTask.getFromSource())) { + double currentFuel = getCurrentFuel(); + double totalFuel = statisticBean.getFuel().getTotal(); + log.info("totalFuel::{}", totalFuel); + if (currentFuel <= 0 || totalFuel <= 0) { + log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId()); + return; + } - double currentFuel = getCurrentFuel(); - double totalFuel = statisticBean.getFuel().getTotal(); - log.info("totalFuel::{}", totalFuel); - if (currentFuel <= 0 || totalFuel <= 0) { - log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId()); - return; + log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(), + currentFuel * 100 / totalFuel, + fuelThreshold); + if (currentFuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { + log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); + + requestFlag.set(true); + //需要产生需求 + produceFuelRequest(); + //产生任务 + produceTask(currentFuel); + return; + } + if (currentFuel * 100 / totalFuel < fuelThreshold) { + log.error("{}:油量不足停止移动,等待补给", this.scenarioTask.getResourceId()); + return; + } } - log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(), - currentFuel * 100 / totalFuel, - fuelThreshold); - if (currentFuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); - requestFlag.set(true); - //需要产生需求 - produceFuelRequest(); - //产生任务 - produceTask(currentFuel); - return; - } - if (currentFuel * 100 / totalFuel < fuelThreshold) { - log.error("{}:油量不足停止移动,等待补给", this.scenarioTask.getResourceId()); - return; - } if (distanceInfoMap.isEmpty()) { return; } @@ -361,7 +368,7 @@ public abstract class AbtParentTask implements TaskAction { if (finishedAction != null) { finishedAction.doSomeThing(); } - + taskFinishedStatus.set(true); //完成路径 Global.sendCmdInfoQueue.add( ResponseCmdInfo.create(WsCmdTypeEnum.PATH_FINISHED.getCode(), roomId, @@ -456,6 +463,7 @@ public abstract class AbtParentTask implements TaskAction { try { Map teamInfoMap = SpringUtil.getBean(TeaminfoServiceImpl.class) .teamInfoMap(); + log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) .selectSupplierResource(scenarioTask.getResourceId()); @@ -464,6 +472,8 @@ public abstract class AbtParentTask implements TaskAction { ScenarioResource supplierResource = null; // 找出油料保障分队 for (ScenarioResource resource : resourceList) { + + Teaminfo teaminfo = teamInfoMap.get(resource.getResourceId()); if ("SUPPLIER_FUEL".equals(teaminfo.getRoleCode())) { @@ -510,6 +520,7 @@ public abstract class AbtParentTask implements TaskAction { task.setToLng(fuelResource.getLng()); task.setStartTime(LocalDateTime.now()); task.setFromSource("general"); + log.info("承担保障任务的resourceId::{}", supplierResource.getId()); SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); MoveTask moveTask = new MoveTask(task, this.roomId, new TaskAction() { @Override diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 9be3695..aacff44 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -98,7 +98,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { schedule.scheduleWithFixedDelay(() -> { if (getRoomStatus()) { double currentFuel = getCurrentFuel(); - if(currentFuel > 0) { + if(currentFuel > 0&&!"general".equals(scenarioTask.getFromSource())&&!taskFinishedStatus.get()) { double currentUseUp = consumptionTaskInterval*RoomManager.getMag(roomId) * SPEED / 1000 * fuelConsumption; log.info("{}-当前消耗油料::{},当前剩余油料::{}", scenarioTask.getResourceId(), diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 5d3b568..41a4974 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -110,6 +110,7 @@ public class Room implements AutoCloseable { startTask(); //初始化系统资源 物资人员等信息 initRoomParam(); + pushRoomInfo(); } /** @@ -117,6 +118,7 @@ public class Room implements AutoCloseable { */ public void stop() { status.set(false); + pushRoomInfo(); cancelTask(); futures.forEach((key, value) -> { try { @@ -133,12 +135,15 @@ public class Room implements AutoCloseable { * 暂停 */ public void pause() { + status.set(false); + pushRoomInfo(); cancelTask(); } public void resume() { status.set(true); + pushRoomInfo(); startTask(); } @@ -272,4 +277,15 @@ public class Room implements AutoCloseable { public Map getScenarioResourceMap() { return scenarioResourceMap; } + private void pushRoomInfo(){ + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + Map dataMap = new HashMap<>(); + dataMap.put("mag", this.getMag()); + dataMap.put("status", this.getStatus()); + respObj.setData(dataMap); + respObj.setRoom(this.getRoomId()); + respObj.setScenarioId(this.getScenario().getId()); + respObj.setCmdType("room_info"); + Global.sendCmdInfoQueue.add(respObj); + } } diff --git a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java index 6ffa79b..c70294e 100644 --- a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java +++ b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java @@ -5,11 +5,13 @@ import com.hivekion.baseData.controller.BaseController; import com.hivekion.baseData.entity.Scenario; import com.hivekion.baseData.service.ScenarioService; import com.hivekion.common.entity.PagedResultVo; +import com.hivekion.common.entity.ResponseCmdInfo; 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.room.RoomManager; import com.hivekion.scenario.bean.ScenarioWsParam; import com.hivekion.scenario.entity.RoomLog; import com.hivekion.scenario.entity.ScenarioRoom; @@ -18,6 +20,7 @@ import com.hivekion.scenario.service.ScenarioRoomService; import com.hivekion.scenario.service.ScenarioTaskService; import io.swagger.annotations.ApiOperation; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -143,17 +146,30 @@ public class ScenarioRoomController extends BaseController { SecurityUtils.getCurrentLoginUser().getUsername())); if (Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId()) == null) { - Global.roomParamMap.put(room.getScenarioId() + "_" + room.getId(), new ScenarioWsParam(room.getMag())); - }else{ - ScenarioWsParam magValue = Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId()); + Global.roomParamMap.put(room.getScenarioId() + "_" + room.getId(), + new ScenarioWsParam(room.getMag())); + } else { + ScenarioWsParam magValue = Global.roomParamMap.get( + room.getScenarioId() + "_" + room.getId()); magValue.setMag(room.getMag()); } - - log.info("magValue:{}",Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId())); + pushRoomInfo(room.getMag(), room); + log.info("magValue:{}", Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId())); } return ResponseData.success(null); } + private void pushRoomInfo(Integer mag, ScenarioRoom room) { + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + Map dataMap = new HashMap<>(); + dataMap.put("mag", mag); + dataMap.put("status", RoomManager.getRoom(room.getId()).getStatus()); + respObj.setData(dataMap); + respObj.setRoom(room.getId()); + respObj.setScenarioId(room.getScenarioId()); + respObj.setCmdType("room_info"); + Global.sendCmdInfoQueue.add(respObj); + } @PostMapping("/stop") public ResponseData stop(@RequestBody ScenarioRoom room) { @@ -173,13 +189,13 @@ public class ScenarioRoomController extends BaseController { room.setScenario(scenario); room.setScenarioName(scenario.getName()); room.setRoomLogs(roomLogService.roomLogListLimit10(id)); - if (Global.roomParamMap.get(scenario.getId()+"_"+id) == null) { + if (Global.roomParamMap.get(scenario.getId() + "_" + id) == null) { ScenarioWsParam scenarioWsParam = new ScenarioWsParam(1); scenarioWsParam.setMag(1); - Global.roomParamMap.put(scenario.getId()+"_"+id, scenarioWsParam); + Global.roomParamMap.put(scenario.getId() + "_" + id, scenarioWsParam); room.setMag(1); } else { - room.setMag(Global.roomParamMap.get(scenario.getId()+"_"+id).getMag()); + room.setMag(Global.roomParamMap.get(scenario.getId() + "_" + id).getMag()); } } return ResponseData.success(room); diff --git a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java index d359835..7f2d3d1 100644 --- a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java +++ b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java @@ -59,6 +59,9 @@ public class HandleReceiveRunnable implements Runnable { case "get_init_path": handleGetInitPath(requestCmdInfo); break; + case "get_room_info": + handleGetRootInfo(requestCmdInfo); + break; default: break; @@ -69,7 +72,21 @@ public class HandleReceiveRunnable implements Runnable { log.error("error::", e); } } - + private void handleGetRootInfo(RequestCmdInfo requestCmdInfo){ + log.info("接收到获取到房间信息::{}", JSON.toJSONString(requestCmdInfo)); + Room room = RoomManager.getRoom(requestCmdInfo.getRoom()); + if (room != null) { + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + Map dataMap = new HashMap<>(); + dataMap.put("mag", room.getMag()); + dataMap.put("status", room.getStatus()); + respObj.setData(dataMap); + respObj.setRoom(requestCmdInfo.getRoom()); + respObj.setScenarioId(requestCmdInfo.getScenarioId()); + respObj.setCmdType("room_info"); + Global.sendCmdInfoQueue.add(respObj); + } + } private void handleGetInitPath(RequestCmdInfo requestCmdInfo) { log.info("接收到请求路线信息::{}", JSON.toJSONString(requestCmdInfo)); Room room = RoomManager.getRoom(requestCmdInfo.getRoom()); diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index 2737c03..0e71ef1 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,7 +3,7 @@ death.warn = 56 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 99.3 +fuel.warn = 99.99 medical.warn = 1 death.spreed = 3 injured.spreed = 3 diff --git a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml index 41ac80f..636b1bc 100644 --- a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml @@ -3,7 +3,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">