diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index f5df59b..01b38db 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -10,12 +10,20 @@ import com.hivekion.baseData.service.ScenarioService; import com.hivekion.common.MultiPointGeoPosition; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; +import com.hivekion.common.uuid.IdUtils; import com.hivekion.enums.WsCmdTypeEnum; import com.hivekion.room.RoomManager; 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.ScenarioTaskServiceImpl; import com.hivekion.statistic.bean.ScenarioInfo; -import java.time.Duration; +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 java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -50,6 +58,11 @@ import org.springframework.web.reactive.function.client.WebClient; @Slf4j public abstract class AbtParentTask implements TaskAction { + /** + * 油料消耗速率 + */ + protected double fuelConsumption = 0; + protected double fuelThreshold = 0; /** * 开始点坐标 */ @@ -64,31 +77,33 @@ public abstract class AbtParentTask implements TaskAction { protected final String roomId; //http请求 protected WebClient webClient = WebClient.create(); - protected final AtomicBoolean canMoved = new AtomicBoolean(true); - protected final AtomicReference coordinateReference = new AtomicReference<>(); + protected final AtomicReference coordinateReference = new AtomicReference<>(); /** - * 任务相对与想定的开始时间 + * 需求产生标志 */ - private long taskRelativeTime = 0; + 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() // 拒绝策略 - ); +// 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; this.roomId = roomId; Scenario scenario = SpringUtil.getBean(ScenarioService.class) .getScenarioById(scenarioTask.getScenarioId()); - taskRelativeTime = Math.abs( - Duration.between(scenario.getStartTime(), scenarioTask.getStartTime()).getSeconds()); + statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) + .statistic(scenarioTask.getResourceId()); + initEnv(); } public void addScheduledExecutorServiceRefenceToRoom( @@ -131,6 +146,28 @@ public abstract class AbtParentTask implements TaskAction { addScheduledExecutorServiceRefenceToRoom(schedule); } + /** + * 初始化环境 + */ + private void initEnv() { + try { + //获取油品消耗规则 + String fuelConsumptionStr = SpringUtil.getBean(Environment.class) + .getProperty("fuel.spreed"); + + fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); + fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) + .getProperty("fuel.warn", "0")); + + log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{},当前油料::{}", + this.scenarioTask.getResourceId(), + fuelConsumptionStr, fuelThreshold, getCurrentFuel()); + + } catch (Exception e) { + log.error("init env exception", e); + } + + } protected void initPath() { try { @@ -145,6 +182,8 @@ public abstract class AbtParentTask implements TaskAction { + "&points_encoded=false" + "&algorithm=alternative_route&alternative_route.max_paths=3"; log.info("params:;{}", params); + Room room = RoomManager.getRoom(this.roomId); + Map resourceMap = room.getScenarioResourceMap(); //获取路线信息 String result = webClient.get().uri(params) .retrieve() @@ -161,9 +200,10 @@ public abstract class AbtParentTask implements TaskAction { Map dataMap = new HashMap<>(); dataMap.put("resourceId", scenarioTask.getResourceId()); dataMap.put("points", coordinates); - - if(RoomManager.getRoom(roomId)!=null){ - RoomManager.getRoom(roomId).addResourcePath(this.scenarioTask.getResourceId(),coordinates); + dataMap.put("teamType",resourceMap.get(this.scenarioTask.getResourceId()).getType()); + if (RoomManager.getRoom(roomId) != null) { + RoomManager.getRoom(roomId) + .addResourcePath(this.scenarioTask.getResourceId(), coordinates); } //推送路径任务 Global.sendCmdInfoQueue.add( @@ -215,19 +255,40 @@ public abstract class AbtParentTask implements TaskAction { schedule.scheduleWithFixedDelay(() -> { try { + if (this.getRoomStatus()) { + + double currentFuel = getCurrentFuel(); + if (currentFuel < 0) { + log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId()); + return; + } + double totalFuel = statisticBean.getFuel().getTotal(); + 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; } - if (!this.canMoved.get()) { - return; - } - log.info("{}-移动中,canRemove::{}", this.scenarioTask.getResourceId(), - this.canMoved.get()); if (duringAction != null) { duringAction.doSomeThing(); } + log.info("移动中....."); //跑动距离 double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; @@ -237,7 +298,6 @@ public abstract class AbtParentTask implements TaskAction { endPoint = distanceInfoMap.lastEntry(); } - //ws数据 List dataList = new ArrayList<>(); HashMap dataMap = new HashMap<>(); @@ -298,7 +358,6 @@ public abstract class AbtParentTask implements TaskAction { finishedAction.doSomeThing(); } - //完成路径 Global.sendCmdInfoQueue.add( ResponseCmdInfo.create(WsCmdTypeEnum.PATH_FINISHED.getCode(), roomId, @@ -339,7 +398,9 @@ public abstract class AbtParentTask implements TaskAction { respObj.setScenarioId(scenarioTask.getScenarioId()); respObj.setCmdType("scenarioInfo"); Global.sendCmdInfoQueue.add(respObj); - String updJsonStr= (String) redisUtil.hget(this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"updScenarioInfo"); + String updJsonStr = (String) redisUtil.hget( + this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "updScenarioInfo"); ResponseCmdInfo respUpdObj = new ResponseCmdInfo<>(); respUpdObj.setData(updJsonStr); respUpdObj.setRoom(roomId); @@ -348,6 +409,71 @@ public abstract class AbtParentTask implements TaskAction { Global.sendCmdInfoQueue.add(respObj); } + protected double getCurrentFuel() { + Object statisticObj = redisUtil.hget( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo"); + + if (statisticObj != null) { + ScenarioInfo scenarioInfo = JSON.parseObject(statisticObj.toString(), ScenarioInfo.class); + return scenarioInfo.getFuel().getCurrent(); + } + return 0; + } + + private void produceFuelRequest() { + log.info("{}-产生油料保障需求", this.scenarioTask.getResourceId()); + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(String.valueOf(statisticBean.getFuel().getTotal())); + supplierRequest.setSupplierType("fuel"); + supplierRequest.setGeneralTime(LocalDateTime.now()); + supplierRequest.setLat(scenarioTask.getToLat()); + supplierRequest.setLng(scenarioTask.getToLng()); + supplierRequest.setHandleFlag(1); + SpringUtil.getBean(SupplierRequestServiceImpl.class).save(supplierRequest); + } + + private void produceTask(double fuel) { + try { + log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); + List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) + .selectSupplierResource(scenarioTask.getResourceId()); + log.info("{}-可选保障分队长度{}", scenarioTask.getResourceId(), resourceList.size()); + if (!resourceList.isEmpty()) { + + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(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"); + + 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()); + } + } catch (Exception e) { + log.error("produceTask exception", e); + } + + } } 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 fee7aa9..01d021a 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -17,6 +17,7 @@ import com.hivekion.statistic.service.StatisticService; import com.hivekion.statistic.service.impl.StatisticServiceImpl; import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.service.ISupplierRequestService; +import java.util.concurrent.atomic.AtomicBoolean; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; import org.springframework.util.CollectionUtils; @@ -47,15 +48,13 @@ public class BattleRootTask extends AbtParentTask { private IBattleConsumeService battleConsumeService; - private static final Integer DEATH_SPREED = 3; - private static final Integer INJURED_SPREED = 3; - private static final Double AMMUNITION_SPREED = 2.6D; + private static final Double FOOD_SPREED = 2.3D; private static final Double WATER_SPREED = 3.6D; private static final Double FUEL_SPREED = 3.6D; private static final Double MEDICAL_SPREED = 1.6D; - + private final AtomicBoolean isAlreadyProduceTask = new AtomicBoolean(false); public BattleRootTask(ScenarioTask scenarioTask,String roomId) { super(scenarioTask,roomId); @@ -196,6 +195,10 @@ public class BattleRootTask extends AbtParentTask { battleConsume.setResourceId(scenarioTask.getResourceId()); battleConsume.setConsumeDate(currentDateTime); battleConsumeService.save(battleConsume); + if(injuredConsume>2&&!isAlreadyProduceTask.get()){ + //产生一个 + + } }catch (Exception ex){ ex.printStackTrace(); log.error("==================推送消耗數據 失败============================================",ex.getMessage()); diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index bef7165..63045d8 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -9,26 +9,16 @@ import com.hivekion.common.uuid.IdUtils; import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.BattleConsume; -import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.service.impl.BattleConsumeServiceImpl; -import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl; -import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl; import com.hivekion.statistic.bean.ScenarioInfo; -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 java.time.LocalDateTime; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; import lombok.extern.slf4j.Slf4j; -import org.springframework.core.env.Environment; /** * [类的简要说明] @@ -46,15 +36,8 @@ public class MoveTask extends AbtParentTask implements TaskAction { * 速度 换算为100Km/小时 */ private final double SPEED = 27; - /** - * 需求产生标志 - */ - private final AtomicBoolean requestFlag = new AtomicBoolean(false); - /** - * 油料消耗速率 - */ - private double fuelConsumption = 0; - private double fuelThreshold = 0; + + /** * 消耗任务间隔 */ @@ -63,7 +46,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { * redis 服务类 */ private final RedisUtil redis = SpringUtil.getBean(RedisUtil.class); - private StatisticBean statisticBean; + public MoveTask(ScenarioTask scenarioTask, String roomId) { @@ -75,7 +58,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { public void doSomeThing() { log.info("move task running:{},fuel::{}", scenarioTask.getResourceId(), getCurrentFuel()); - initEnv(); //初始化环境 + initPath(); //初始化路径 updatePath(SPEED, new TaskAction() { @Override @@ -106,28 +89,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { fuelConsumption();//油品消耗 } - /** - * 初始化环境 - */ - private void initEnv() { - try { - //获取油品消耗规则 - String fuelConsumptionStr = SpringUtil.getBean(Environment.class) - .getProperty("fuel.spreed"); - fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); - fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) - .getProperty("fuel.warn", "0")); - - log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{},当前油料::{}", this.scenarioTask.getResourceId(), - fuelConsumptionStr, fuelThreshold,getCurrentFuel()); - statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) - .statistic(scenarioTask.getResourceId()); - } catch (Exception e) { - log.error("init env exception", e); - } - - } private void fuelConsumption() { @@ -135,49 +97,29 @@ public class MoveTask extends AbtParentTask implements TaskAction { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { - if (getRoomStatus() && this.canMoved.get()) { - double currentUseUp = consumptionTaskInterval*RoomManager.getMag(roomId) * SPEED / 1000 * fuelConsumption; + if (getRoomStatus()) { + double currentFuel = getCurrentFuel(); + if(currentFuel > 0) { + double currentUseUp = consumptionTaskInterval*RoomManager.getMag(roomId) * SPEED / 1000 * fuelConsumption; - double fuel = getCurrentFuel(); - log.info("{}-当前消耗油料::{},当前剩余油料::{}", scenarioTask.getResourceId(), - currentUseUp, fuel); - fuel = fuel - currentUseUp; - if (fuel <= 0) { - log.error("{}-油料为空", scenarioTask.getResourceId()); - this.canMoved.set(false); - log.info("{},can:{}", scenarioTask.getResourceId(), this.canMoved.get()); - return; - } + log.info("{}-当前消耗油料::{},当前剩余油料::{}", scenarioTask.getResourceId(), + currentUseUp, currentFuel); - setCurrentFuel(currentUseUp); - double totalFuel = statisticBean.getFuel().getTotal(); - log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(), fuel * 100 / totalFuel, - fuelThreshold); - if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); - this.canMoved.set(false); - requestFlag.set(true); - //需要产生需求 - produceFuelRequest(); - //产生任务 - produceTask(fuel); + + //插入消耗表 + insertConsumption(currentUseUp); + pushStatus(scenarioTask.getResourceId()); + setCurrentFuel(currentUseUp); } - //插入消耗表 - insertConsumption(currentUseUp); - pushStatus(scenarioTask.getResourceId()); - } - if (!this.canMoved.get()) { - //判断油料是否满足 - double totalFuel = statisticBean.getFuel().getTotal(); - if (Double.compare(this.getCurrentFuel(), totalFuel) >= 0) { - this.canMoved.set(true); - } + + } + }, 0, consumptionTaskInterval, TimeUnit.SECONDS); } catch (Exception e) { log.error("fuel consumption exception", e); @@ -186,59 +128,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } - private void produceFuelRequest() { - log.info("{}-产生油料保障需求", this.scenarioTask.getResourceId()); - SupplierRequest supplierRequest = new SupplierRequest(); - supplierRequest.setId(IdUtils.simpleUUID()); - supplierRequest.setFromResourceId(scenarioTask.getResourceId()); - supplierRequest.setSupplierNum(String.valueOf(statisticBean.getFuel().getTotal())); - supplierRequest.setSupplierType("fuel"); - supplierRequest.setGeneralTime(LocalDateTime.now()); - supplierRequest.setLat(scenarioTask.getToLat()); - supplierRequest.setLng(scenarioTask.getToLng()); - supplierRequest.setHandleFlag(1); - SpringUtil.getBean(SupplierRequestServiceImpl.class).save(supplierRequest); - } - private void produceTask(double fuel) { - try { - log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); - List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) - .selectSupplierResource(scenarioTask.getResourceId()); - log.info("{}-可选保障分队长度{}", scenarioTask.getResourceId(), resourceList.size()); - if (!resourceList.isEmpty()) { - - ScenarioTask task = new ScenarioTask(); - task.setId(IdUtils.simpleUUID()); - task.setScenarioId(scenarioTask.getScenarioId()); - task.setResourceId(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"); - - 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()); - } - } catch (Exception e) { - log.error("produceTask exception", e); - } - - } private void insertConsumption(double num) { try{ @@ -255,17 +145,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } - private double getCurrentFuel() { - Object statisticObj = redis.hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - if (statisticObj != null) { - ScenarioInfo scenarioInfo = JSON.parseObject(statisticObj.toString(), ScenarioInfo.class); - return scenarioInfo.getFuel().getCurrent(); - } - return 0; - } private void setCurrentFuel(double num) { Object statisticObj = redis.hget( diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 7496882..5d3b568 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -50,6 +50,7 @@ public class Room implements AutoCloseable { private Map resourceCoordinateMap = new ConcurrentHashMap<>(); //资源路线path private Map resourcePathMap = new ConcurrentHashMap<>(); + private Map scenarioResourceMap = new ConcurrentHashMap<>(); /** * 任务管理相关 */ @@ -243,7 +244,9 @@ public class Room implements AutoCloseable { scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(), "updScenarioInfo", JSON.toJSONString(updScenarioInfo)); } - + scenario.getResourceList().forEach(resource -> { + scenarioResourceMap.put(resource.getId(), resource); + }); } @@ -266,4 +269,7 @@ public class Room implements AutoCloseable { public Map getPathMap() { return resourcePathMap; } + public Map getScenarioResourceMap() { + return scenarioResourceMap; + } } diff --git a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java index 2063cac..d359835 100644 --- a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java +++ b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java @@ -4,9 +4,11 @@ import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.hivekion.Global; import com.hivekion.common.entity.RequestCmdInfo; +import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.room.RoomManager; import com.hivekion.room.bean.Room; -import com.hivekion.ws.WsServer; +import com.hivekion.scenario.entity.ScenarioResource; +import java.util.HashMap; import java.util.Map; import lombok.extern.slf4j.Slf4j; @@ -28,7 +30,7 @@ public class HandleReceiveRunnable implements Runnable { try { RequestCmdInfo requestCmdInfo = Global.receiveCmdInfoQueue.take(); - + handleMessage(requestCmdInfo); //消息分发业务bean处理 if (SpringUtil.getBean(WebsocketMsgWrapper.class) != null) { try { @@ -51,6 +53,7 @@ public class HandleReceiveRunnable implements Runnable { } private void handleMessage(RequestCmdInfo requestCmdInfo) { + try { switch (requestCmdInfo.getCmdType()) { case "get_init_path": @@ -68,17 +71,27 @@ public class HandleReceiveRunnable implements Runnable { } private void handleGetInitPath(RequestCmdInfo requestCmdInfo) { - log.info("接收到请求路线信息::{}",JSON.toJSONString(requestCmdInfo)); + log.info("接收到请求路线信息::{}", JSON.toJSONString(requestCmdInfo)); Room room = RoomManager.getRoom(requestCmdInfo.getRoom()); - if(room!=null){ + if (room != null) { Map pathMap = room.getPathMap(); - pathMap.forEach((k,v)->{ - try{ - WsServer.sendMessage(requestCmdInfo.getScenarioId(),requestCmdInfo.getRoom(), - JSON.toJSONString(v)); + pathMap.forEach((k, v) -> { + try { + Map dataMap = new HashMap<>(); + Map resourceMap = room.getScenarioResourceMap(); + dataMap.put("teamType", resourceMap.get(k).getType()); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); - }catch (Exception e){ - log.error("error::",e); + dataMap.put("resourceId", k); + dataMap.put("points", v); + respObj.setData(dataMap); + respObj.setRoom(requestCmdInfo.getRoom()); + respObj.setScenarioId(requestCmdInfo.getScenarioId()); + respObj.setCmdType("path_init"); + Global.sendCmdInfoQueue.add(respObj); + + } catch (Exception e) { + log.error("error::", e); } }); diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index 9e11408..a113a26 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -1,5 +1,6 @@ package com.hivekion.ws; +import com.alibaba.fastjson2.JSON; import com.hivekion.Global; import com.hivekion.common.entity.RequestCmdInfo; import java.util.Map; @@ -90,6 +91,8 @@ public class WsServer { RequestCmdInfo requestCmdInfo = new RequestCmdInfo(); requestCmdInfo.setScenarioId((scenarioId)); requestCmdInfo.setRoom(room); + requestCmdInfo.setCmdType(JSON.parseObject(message,RequestCmdInfo.class).getCmdType()); + requestCmdInfo.setMessage(message); Global.receiveCmdInfoQueue.add(requestCmdInfo); } catch (Exception e) {