From 5d0a37b49a32e882b9e19946a014925507f4d54e 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: Mon, 22 Sep 2025 22:17:55 +0800 Subject: [PATCH] =?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 | 62 +++--- .../java/com/hivekion/room/bean/MoveTask.java | 1 + .../com/hivekion/room/bean/SupplierTask.java | 202 +++++------------- .../service/impl/ScenarioTaskServiceImpl.java | 4 +- src/main/java/com/hivekion/ws/WsServer.java | 2 +- .../resources/application-prod.properties | 2 +- .../resources/application-rule.properties | 2 +- 7 files changed, 99 insertions(+), 176 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index c55ebbf..7affc26 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -233,6 +233,7 @@ public abstract class AbtParentTask implements TaskAction { beforeLat = lat; } + log.info("路线节点个数::{},总距离::{}",distanceInfoMap.size(),distanceInfoMap.lastKey()); //设置第一个开始位置 startPoint.set(distanceInfoMap.firstKey()); } @@ -257,21 +258,19 @@ public abstract class AbtParentTask implements TaskAction { 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; } - log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(), - currentFuel * 100 / totalFuel, - fuelThreshold); + if (currentFuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); + log.error("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); requestFlag.set(true); //需要产生需求 @@ -281,7 +280,7 @@ public abstract class AbtParentTask implements TaskAction { return; } if (currentFuel * 100 / totalFuel < fuelThreshold) { - log.error("{}:油量不足停止移动,等待补给", this.scenarioTask.getResourceId()); + return; } } @@ -293,7 +292,7 @@ public abstract class AbtParentTask implements TaskAction { if (duringAction != null) { duringAction.doSomeThing(); } - log.info("移动中..... 放大系数{}", RoomManager.getMag(roomId)); + //跑动距离 double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; @@ -302,7 +301,7 @@ public abstract class AbtParentTask implements TaskAction { if (endPoint == null) { endPoint = distanceInfoMap.lastEntry(); } - + log.info("当前距离{}",distance); //ws数据 List dataList = new ArrayList<>(); HashMap dataMap = new HashMap<>(); @@ -515,36 +514,43 @@ public abstract class AbtParentTask implements TaskAction { task.setScenarioId(scenarioTask.getScenarioId()); task.setResourceId(supplierResource.getId()); task.setTaskType("1"); - + task.setName("油料保障任务-移动第一节点(自动)"); task.setFromLat(supplierResource.getLat()); task.setFromLng(supplierResource.getLng()); task.setToLat(fuelResource.getLat()); task.setToLng(fuelResource.getLng()); task.setStartTime(LocalDateTime.now()); task.setFromSource("general"); - log.info("承担保障任务的resourceId::{}", supplierResource.getId()); + log.info("油料保障任务-移动resourceId::{}", supplierResource.getId()); SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); MoveTask moveTask = new MoveTask(task, this.roomId, new TaskAction() { @Override public void doSomeThing() { - //创建一个保障任务 + if(coordinate!=null){ + //创建一个送达任务 + log.info("目标地址::{},{}",coordinate.getLat(),coordinate.getLng()); + + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(supplierResource.getId()); + task.setTaskType("6"); + task.setName("油料保障任务-移动第二节点(自动)"); + 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); + }else{ + log.error("没有目标地址"); + } - 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 diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 9a256bc..de101e5 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -107,6 +107,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { //修改油料 EditScenarioInfo editScenarioInfo = getEditScenarioInfo( this.scenarioTask.getResourceId()); + editScenarioInfo.getJbxx().getFuel().setCurrent(editScenarioInfo.getJbxx().getFuel().getCurrent()-currentUseUp); setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId()); diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index 3629d32..34857dd 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -1,14 +1,8 @@ package com.hivekion.room.bean; -import cn.hutool.extra.spring.SpringUtil; -import com.alibaba.fastjson2.JSON; -import com.hivekion.common.redis.RedisUtil; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.statistic.bean.EditScenarioInfo; -import com.hivekion.statistic.bean.ScenarioInfo; -import com.hivekion.statistic.bean.StatisticBean; -import com.hivekion.statistic.service.StatisticService; import lombok.extern.slf4j.Slf4j; /** @@ -30,8 +24,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { @Override public void doSomeThing() { - StatisticBean statistic = SpringUtil.getBean(StatisticService.class) - .statistic(scenarioTask.getResourceId()); + initPath(); //初始化路径 updatePath(50, null, new TaskAction() { @@ -41,19 +34,19 @@ public class SupplierTask extends AbtParentTask implements TaskAction { //达到终点点后,给目标补充物资 switch (scenarioTask.getTaskType()) { case "4": - supplierAmmunition(statistic); + supplierAmmunition(); break; case "5": - supplierWater(statistic); + supplierWater(); break; case "6": - supplierFuel(statistic); + supplierFuel(); break; case "7": - supplierFood(statistic); + supplierFood(); break; case "8": - supplierMedical(statistic); + supplierMedical(); break; } //推送最新状态信息 @@ -73,164 +66,87 @@ public class SupplierTask extends AbtParentTask implements TaskAction { }); } - private void supplierMedical(StatisticBean statistic) { - //保障分队 - Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - //被保障分队 - Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo"); - if(supplierObj!=null&&insureObj!=null){ + private void supplierMedical() { + EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId()); + EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId()); - ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); - ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); + if (supplierInfo != null && insuranceInfo != null) { + double insuranceCurrent = insuranceInfo.getJbxx().getMedical().getCurrent(); - scenarioSupplierInfo.getMedical().setCurrent(scenarioInsureInfo.getMedical().getCurrent() - statistic.getMedical().getTotal()); - scenarioInsureInfo.getMedical().setCurrent(statistic.getMedical().getTotal()); + supplierInfo.getJbxx().getMedical().setCurrent( + supplierInfo.getJbxx().getMedical().getCurrent() - insuranceCurrent < 0 ? 0 + : (supplierInfo.getJbxx().getMedical().getCurrent() - insuranceCurrent)); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); - - } - } - - private void supplierFuel(StatisticBean statistic) { - - //保障分队 - Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - //被保障分队 - Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo"); - if(supplierObj!=null&&insureObj!=null){ - - - ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); - ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); - - scenarioSupplierInfo.getFuel().setCurrent(scenarioInsureInfo.getFuel().getCurrent() - statistic.getFuel().getTotal()); - - scenarioInsureInfo.getFuel().setCurrent(statistic.getFuel().getTotal()); - - EditScenarioInfo insureEdit = getEditScenarioInfo(scenarioTask.getInsureResourceId()); - double supplierNum = statistic.getFuel().getTotal() - statistic.getFuel().getCurrent(); - insureEdit.getJbxx().getFuel().setCurrent(statistic.getFuel().getTotal()); - setEditScenarioInfo(insureEdit,scenarioTask.getInsureResourceId()); - - EditScenarioInfo supplerEdit = getEditScenarioInfo(scenarioTask.getResourceId()); - supplerEdit.getJbxx().getFuel().setCurrent(statistic.getFuel().getTotal()-supplierNum); - setEditScenarioInfo(supplerEdit,scenarioTask.getResourceId()); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); + insuranceInfo.getJbxx().getMedical() + .setCurrent(insuranceInfo.getJbxx().getMedical().getTotal()); } } + private void supplierFuel() { + EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId()); + EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId()); + if (supplierInfo != null && insuranceInfo != null) { + double insuranceCurrent = insuranceInfo.getJbxx().getFuel().getCurrent(); - private void supplierAmmunition(StatisticBean statistic) { + supplierInfo.getJbxx().getFuel().setCurrent( + supplierInfo.getJbxx().getFuel().getCurrent() - insuranceCurrent < 0 ? 0 + : (supplierInfo.getJbxx().getFuel().getCurrent() - insuranceCurrent)); - //保障分队 - Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - //被保障分队 - Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo"); - if(supplierObj!=null&&insureObj!=null){ + insuranceInfo.getJbxx().getFuel() + .setCurrent(insuranceInfo.getJbxx().getFuel().getTotal()); - ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); - ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); + } - scenarioSupplierInfo.getAmmunition().setCurrent(scenarioInsureInfo.getAmmunition().getCurrent() - statistic.getAmmunition().getTotal()); - scenarioInsureInfo.getAmmunition().setCurrent(statistic.getAmmunition().getTotal()); + } - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); + private void supplierAmmunition() { + EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId()); + EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId()); + if (supplierInfo != null && insuranceInfo != null) { + double insuranceCurrent = insuranceInfo.getJbxx().getAmmunition().getCurrent(); - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); + supplierInfo.getJbxx().getAmmunition().setCurrent( + supplierInfo.getJbxx().getAmmunition().getCurrent() - insuranceCurrent < 0 ? 0 + : (supplierInfo.getJbxx().getAmmunition().getCurrent() - insuranceCurrent)); + + insuranceInfo.getJbxx().getAmmunition() + .setCurrent(insuranceInfo.getJbxx().getAmmunition().getTotal()); } } - private void supplierWater(StatisticBean statistic) { + private void supplierWater() { + EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId()); + EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId()); + if (supplierInfo != null && insuranceInfo != null) { + double insuranceCurrent = insuranceInfo.getJbxx().getWater().getCurrent(); - //保障分队 - Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - //被保障分队 - Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo"); - if(supplierObj!=null&&insureObj!=null){ + supplierInfo.getJbxx().getWater().setCurrent( + supplierInfo.getJbxx().getWater().getCurrent() - insuranceCurrent < 0 ? 0 + : (supplierInfo.getJbxx().getWater().getCurrent() - insuranceCurrent)); - ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); - ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); - - scenarioSupplierInfo.getWater().setCurrent(scenarioInsureInfo.getWater().getCurrent() - statistic.getWater().getTotal()); - scenarioInsureInfo.getWater().setCurrent(statistic.getWater().getTotal()); - - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); + insuranceInfo.getJbxx().getWater() + .setCurrent(insuranceInfo.getJbxx().getWater().getTotal()); } } - private void supplierFood(StatisticBean statistic) { - //保障分队 - Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - //被保障分队 - Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo"); - if(supplierObj!=null&&insureObj!=null){ + private void supplierFood() { + EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId()); + EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId()); + if (supplierInfo != null && insuranceInfo != null) { + double insuranceCurrent = insuranceInfo.getJbxx().getFood().getCurrent(); - ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); - ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); + supplierInfo.getJbxx().getFood().setCurrent( + supplierInfo.getJbxx().getFood().getCurrent() - insuranceCurrent < 0 ? 0 + : (supplierInfo.getJbxx().getFood().getCurrent() - insuranceCurrent)); - scenarioSupplierInfo.getFood().setCurrent(scenarioInsureInfo.getFood().getCurrent() - statistic.getFood().getTotal()); - scenarioInsureInfo.getFood().setCurrent(statistic.getFood().getTotal()); - - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); - - SpringUtil.getBean(RedisUtil.class).hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); + insuranceInfo.getJbxx().getFood() + .setCurrent(insuranceInfo.getJbxx().getFood().getTotal()); } - } } 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 4b5c61f..72633b6 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -149,11 +149,11 @@ public class ScenarioTaskServiceImpl extends //增加任务 private void addTaskEvent(Scenario scenario, String roomId) { - log.info("--------------------hello"); + ScenarioTask scenarioTask = new ScenarioTask(); scenarioTask.setScenarioId(scenario.getId()); List taskList = this.queryTaskList(scenarioTask); - log.info("taskList.size ::{}", taskList.size()); + for (ScenarioTask task : taskList) { try { long diff = Duration.between(scenario.getStartTime(),task.getStartTime()) diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index e0fa719..44691a5 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -118,7 +118,7 @@ public class WsServer { } public static void sendMessage(Integer scenarioId, String room, String message) { - log.info("{},{}", scenarioId, room); + // log.info("{},{}", scenarioId, room); synchronized (lock) { Map> roomMap = SESSION_MAP.get(String.valueOf(scenarioId)); diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index ad78788..50c871e 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -51,4 +51,4 @@ get.all.user = http://127.0.0.1/oauth2Server/api/outside/syncUserAll #get.all.dept=http://127.0.0.1/oatuh2Server/api/outside/synDeptAll logout.url=http://127.0.0.1:99/oauth2Server/oauth2/logout -path.planning.url=http://192.168.0.53:8989/route +path.planning.url=http://127.0.0.1:8989/route diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index e7387b5..d39d9bf 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,7 +3,7 @@ death.warn = 2 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 99.80 +fuel.warn = 55.80 medical.warn = 1 death.spreed = 3 injured.spreed = 3