From fb0b35d38c4e4b1d0a8dd5a8f6e9c55d965fd001 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: Sat, 20 Sep 2025 14:24:47 +0800 Subject: [PATCH 01/38] =?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 --- src/main/java/com/hivekion/room/bean/MoveTask.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 6fc4779..6bd4a78 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -78,6 +78,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { updatePath(SPEED, new TaskAction() { @Override public void doSomeThing() { + //推送移动任务 Map map = new HashMap<>(); map.put("duringTime",getDuringTime()); @@ -168,6 +169,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceFuelRequest() { + log.info("produceFuelRequest...."); SupplierRequest supplierRequest = new SupplierRequest(); supplierRequest.setId(IdUtils.simpleUUID()); supplierRequest.setFromResourceId(scenarioTask.getResourceId()); @@ -181,7 +183,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceTask() { - + log.info("produceTask...."); List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) .selectSupplierResource(scenarioTask.getResourceId()); if (!resourceList.isEmpty()) { @@ -206,6 +208,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void insertConsumption(double num) { + log.info("insertConsumption....{}",num); BattleConsume battleConsume = new BattleConsume(); battleConsume.setId(IdUtils.simpleUUID()); battleConsume.setResourceId(scenarioTask.getResourceId()); From c4bedbde708f95ef663d4c3eba1dc2bfbb30a82d Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 14:28:08 +0800 Subject: [PATCH 02/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/AbtParentTask.java | 16 +++++++ .../hivekion/room/bean/BattleRootTask.java | 36 +++++++++------- .../controller/BattleSupplierController.java | 10 ++--- .../hivekion/statistic/bean/ScenarioInfo.java | 13 ++++++ .../service/impl/ScenarioServiceImpl.java | 42 ++++++++++++++++++- .../service/impl/StatisticServiceImpl.java | 3 +- 6 files changed, 97 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 060748f..8644dbb 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -30,6 +30,8 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; + +import com.hivekion.statistic.bean.ScenarioInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; import org.springframework.web.reactive.function.client.WebClient; @@ -60,6 +62,10 @@ public abstract class AbtParentTask implements TaskAction { protected final String roomId; //http请求 protected WebClient webClient = WebClient.create(); + + private RedisUtil redisUtil; + + private com.hivekion.statistic.service.ScenarioService scenarioService; /** * 任务相对与想定的开始时间 */ @@ -303,7 +309,17 @@ public abstract class AbtParentTask implements TaskAction { } //统一推送方法 protected void pushStatus(String resourceId) { + if( scenarioService == null) { + scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class); + } + ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(this.scenarioTask.getScenarioId(),roomId,resourceId); + if( redisUtil == null){ + redisUtil = SpringUtil.getBean(RedisUtil.class); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); + }else{ + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); + } } } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index fcbb795..ded8903 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -88,23 +88,22 @@ public class BattleRootTask extends AbtParentTask { }catch (Exception ex){ ex.printStackTrace(); } + String jsonStr = (String)redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); - HashMap battleParams = new HashMap<>(); - -// statisticBean.getAmmunition().getCurrent() + ScenarioInfo scenarioInfo =JSONObject.parseObject(jsonStr,ScenarioInfo.class); + HashMap battleParams = new HashMap<>(); //初始化本次战斗任务各种资源数 - battleParams.put("ammunition",Double.valueOf(statisticBean.getAmmunition().getTotal()).toString()); - battleParams.put("food",Double.valueOf(statisticBean.getFood().getTotal()).toString()); - battleParams.put("fuel",Double.valueOf(statisticBean.getFuel().getTotal()).toString()); - battleParams.put("medical",Double.valueOf(statisticBean.getMedical().getTotal()).toString()); - battleParams.put("water",Double.valueOf(statisticBean.getWater().getTotal()).toString()); - battleParams.put("person",Integer.valueOf(statisticBean.getPerson().getTotal()).toString()); - battleParams.put("death",Integer.valueOf(statisticBean.getPerson().getDeath()).toString()); - battleParams.put("injured",Integer.valueOf(statisticBean.getPerson().getInjured()).toString()); - battleParams.put("teamLat",statisticBean.getTeam().getLat().toString()); - battleParams.put("teamLng",statisticBean.getTeam().getLng().toString()); + battleParams.put("ammunition",Double.valueOf(scenarioInfo.getAmmunition().getTotal()).toString()); + battleParams.put("food",Double.valueOf(scenarioInfo.getFood().getTotal()).toString()); + battleParams.put("fuel",Double.valueOf(scenarioInfo.getFuel().getTotal()).toString()); + battleParams.put("medical",Double.valueOf(scenarioInfo.getMedical().getTotal()).toString()); + battleParams.put("water",Double.valueOf(scenarioInfo.getWater().getTotal()).toString()); + battleParams.put("person",Integer.valueOf(scenarioInfo.getPerson().getTotal()).toString()); + battleParams.put("death",Integer.valueOf(scenarioInfo.getPerson().getDeath()).toString()); + battleParams.put("injured",Integer.valueOf(scenarioInfo.getPerson().getInjured()).toString()); + battleParams.put("teamLat",scenarioInfo.getTeam().getLat().toString()); + battleParams.put("teamLng",scenarioInfo.getTeam().getLng().toString()); battleParams.put("duringTime",Long.valueOf(initDuringTime).toString()); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),battleParams); log.info("===============================初始化本次战斗任务各种资源数===================================="); double suppleAmount =statisticBean.getAmmunition().getTotal(); int suppleDeath =statisticBean.getPerson().getDeath(); @@ -160,6 +159,15 @@ public class BattleRootTask extends AbtParentTask { battleParams.put("death",Long.valueOf(death+deathConsume).toString()); battleParams.put("injured",Long.valueOf(injured +injuredConsume).toString()); battleParams.put("duringTime",Long.valueOf(duringTime).toString()); + + scenarioInfo.getAmmunition().setCurrent(Double.valueOf(ammunition - ammunitionConsume)); + scenarioInfo.getFood().setCurrent(Double.valueOf(food - foodConsume)); + scenarioInfo.getFuel().setCurrent(Double.valueOf(fuel - fuelConsume)); + scenarioInfo.getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); + scenarioInfo.getWater().setCurrent(Double.valueOf(water - waterConsume)); + battleParams.put("death",Long.valueOf(death+deathConsume).toString()); + battleParams.put("injured",Long.valueOf(injured +injuredConsume).toString()); + battleParams.put("duringTime",Long.valueOf(duringTime).toString()); redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), battleParams); }catch (Exception ex){ log.error("==============================设置消耗信息失败=============================================",ex.getMessage()); diff --git a/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java b/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java index 265c70a..7d3646c 100644 --- a/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java +++ b/src/main/java/com/hivekion/scenario/controller/BattleSupplierController.java @@ -18,11 +18,7 @@ import java.util.Map; import java.util.Objects; 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; +import org.springframework.web.bind.annotation.*; /** *

@@ -32,7 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping; * @author liDongYu * @since 2025-09-15 */ -@Controller +@RestController @RequestMapping("/battleSupplier") public class BattleSupplierController { @@ -47,7 +43,7 @@ public class BattleSupplierController { public ResponseData save(@RequestBody BattleSupplier battleSupplier) { if (battleSupplier.getId() == null) { battleSupplier.setId(IdUtils.simpleUUID()); - BattleSupplier tmp = battleSupplierService.getOne(new QueryWrapper().eq("BATTLE_RESOURCE_ID",battleSupplier.getBattleResourceId()).or().eq("SUPPLIER_RESOURCE_ID",battleSupplier.getSupplierResourceId())); + BattleSupplier tmp = battleSupplierService.getOne(new QueryWrapper().eq("BATTLE_RESOURCE_ID",battleSupplier.getBattleResourceId()).eq("SUPPLIER_RESOURCE_ID",battleSupplier.getSupplierResourceId())); if(Objects.isNull(tmp)) { battleSupplierService.save(battleSupplier); } diff --git a/src/main/java/com/hivekion/statistic/bean/ScenarioInfo.java b/src/main/java/com/hivekion/statistic/bean/ScenarioInfo.java index 9f76f5d..714b968 100644 --- a/src/main/java/com/hivekion/statistic/bean/ScenarioInfo.java +++ b/src/main/java/com/hivekion/statistic/bean/ScenarioInfo.java @@ -25,4 +25,17 @@ public class ScenarioInfo implements Serializable { private List supplierRequests; + private TeamInfo team = new TeamInfo(); + private PersonInfo person = new PersonInfo(); + //弹药 + private AmmunitionInfo ammunition = new AmmunitionInfo(); + //食品 + private FoodInfo food = new FoodInfo(); + //水 + private WaterInfo water = new WaterInfo(); + //油 + private FuelInfo fuel = new FuelInfo(); + //药材 + private MedicalInfo medical = new MedicalInfo(); + } diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index 6a6084b..0f129a9 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -14,6 +14,7 @@ import com.hivekion.scenario.service.ScenarioTaskService; import com.hivekion.statistic.bean.ScenarioInfo; import com.hivekion.statistic.service.ScenarioService; import com.hivekion.supplier.entity.SupplierRequest; +import com.hivekion.supplier.entity.SuppliesDict; import com.hivekion.supplier.service.ISupplierRequestService; import com.hivekion.supplier.service.SuppliesDictService; import org.springframework.stereotype.Component; @@ -21,6 +22,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Component("WebsocketScenarioService") @@ -43,6 +45,7 @@ public class ScenarioServiceImpl implements ScenarioService { private ISupplierRequestService supplierRequestService; @Override public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId) { + ScenarioInfo scenarioInfo = new ScenarioInfo(); //获取分队信息 ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); //获取关联的组织机构信息 @@ -59,14 +62,51 @@ public class ScenarioServiceImpl implements ScenarioService { } //获取物资信息 List suppliers = orgSupplierService.selectByOrgIds(orgList); + Map supplierMap = suppliesDictService.supplierDictMap(); + + suppliers.forEach(supplier -> { + + SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); + + if (dict != null) { + switch (dict.getCode()) { + case "FOOD": + scenarioInfo.getFood().setTotal(scenarioInfo.getFood().getTotal()+supplier.getAccount()); + scenarioInfo.getFood().setCurrent(scenarioInfo.getFood().getCurrent()+supplier.getAccount()); + break; + case "WATER": + scenarioInfo.getWater().setTotal(scenarioInfo.getWater().getTotal()+supplier.getAccount()); + scenarioInfo.getWater().setCurrent(scenarioInfo.getWater().getCurrent()+supplier.getAccount()); + break; + case "FUEL": + scenarioInfo.getFuel().setTotal(scenarioInfo.getFuel().getTotal()+supplier.getAccount()); + scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent()+supplier.getAccount()); + break; + case "MEDICAL": + scenarioInfo.getMedical().setTotal( scenarioInfo.getMedical().getTotal()+supplier.getAccount()); + scenarioInfo.getMedical().setCurrent( scenarioInfo.getMedical().getCurrent()+supplier.getAccount()); + break; + + case "AMMUNITION": + scenarioInfo.getAmmunition().setTotal( scenarioInfo.getAmmunition().getTotal()+supplier.getAccount()); + scenarioInfo.getAmmunition().setCurrent(scenarioInfo.getAmmunition().getCurrent()+supplier.getAccount()); + break; + default: + break; + } + } + }); + ScenarioTask scenarioTask = new ScenarioTask(); scenarioTask.setScenarioId(scenarioId); scenarioTask.setRoomId(roomId); scenarioTask.setResourceId(resourceId); + + List scenarioTasks = scenarioTaskService.queryTaskList(scenarioTask); List supplierRequests = supplierRequestService.list(new QueryWrapper().eq("FROM_RESOURCE_ID",resourceId)); - ScenarioInfo scenarioInfo = new ScenarioInfo(); + scenarioInfo.setScenarioTasks(scenarioTasks); scenarioInfo.setStaffList(staffList); scenarioInfo.setOrgPostList(orgPostList); diff --git a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java index e657571..534a854 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java @@ -70,6 +70,7 @@ public class StatisticServiceImpl implements StatisticService { //获取分队信息 ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); if(resourceInstance == null){ + log.info("=========================="); return statisticBean; } Map map = teamInfoService.teamInfoMap(); @@ -110,7 +111,7 @@ public class StatisticServiceImpl implements StatisticService { List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) .collect(Collectors.toList()); if(CollectionUtil.isEmpty(orgList)){ - return new StatisticBean(); + return statisticBean; } //获取人员信息 if(!orgList.isEmpty()){ From c5d8988ee71197363fb69bc9aae230b02025a094 Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 14:56:17 +0800 Subject: [PATCH 03/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/AbtParentTask.java | 20 ++++++------- .../hivekion/room/bean/BattleRootTask.java | 5 ++-- .../java/com/hivekion/room/bean/Room.java | 28 ++++++++++++++++++- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 9a7a990..e54634a 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -63,9 +63,7 @@ public abstract class AbtParentTask implements TaskAction { //http请求 protected WebClient webClient = WebClient.create(); - private RedisUtil redisUtil; - private com.hivekion.statistic.service.ScenarioService scenarioService; /** * 任务相对与想定的开始时间 */ @@ -309,19 +307,19 @@ public abstract class AbtParentTask implements TaskAction { //房间统一管理定时器;房间关闭后,定时器销毁 addScheduledExecutorServiceRefenceToRoom(schedule); } + private RedisUtil redisUtil; //统一推送方法 protected void pushStatus(String resourceId) { - if( scenarioService == null) { - scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class); - } - ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(this.scenarioTask.getScenarioId(),roomId,resourceId); - - if( redisUtil == null){ + if( redisUtil == null) { redisUtil = SpringUtil.getBean(RedisUtil.class); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); - }else{ - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); } + String jsonStr= (String) redisUtil.hget(this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + respObj.setData(jsonStr); + respObj.setRoom(roomId); + respObj.setScenarioId(scenarioTask.getScenarioId()); + respObj.setCmdType("scenarioInfo"); + Global.sendCmdInfoQueue.add(respObj); } } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index ded8903..362c74b 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -129,7 +129,6 @@ public class BattleRootTask extends AbtParentTask { String teamLng = null; JSONObject jsonObject = new JSONObject(); try { - HashMap battleParams = (HashMap) redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId()); long duringTime = getDuringTime(); long lastDuringTime = Long.valueOf(battleParams.get("duringTime").toString()); long intervalDuringTime = duringTime - lastDuringTime; @@ -165,8 +164,8 @@ public class BattleRootTask extends AbtParentTask { scenarioInfo.getFuel().setCurrent(Double.valueOf(fuel - fuelConsume)); scenarioInfo.getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); scenarioInfo.getWater().setCurrent(Double.valueOf(water - waterConsume)); - battleParams.put("death",Long.valueOf(death+deathConsume).toString()); - battleParams.put("injured",Long.valueOf(injured +injuredConsume).toString()); + scenarioInfo.getPerson().setDeath(Long.valueOf(death+deathConsume).intValue()); + scenarioInfo.getPerson().setInjured(Long.valueOf(injured +injuredConsume).intValue()); battleParams.put("duringTime",Long.valueOf(duringTime).toString()); redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), battleParams); }catch (Exception ex){ diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 9d364b1..c76d5c4 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -1,8 +1,11 @@ package com.hivekion.room.bean; +import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson2.JSON; import com.hivekion.Global; import com.hivekion.baseData.entity.Scenario; import com.hivekion.common.entity.ResponseCmdInfo; +import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.utils; import com.hivekion.common.uuid.IdUtils; import com.hivekion.room.func.TaskAction; @@ -22,6 +25,9 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; + +import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.statistic.bean.ScenarioInfo; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -52,6 +58,10 @@ public class Room implements AutoCloseable { * 想定信息 */ private Scenario scenario; + + private RedisUtil redisUtil; + + private com.hivekion.statistic.service.ScenarioService scenarioService; /** * 任务容器 */ @@ -93,7 +103,7 @@ public class Room implements AutoCloseable { totalTime.set(time); startTask(); //初始化系统资源 物资人员等信息 - + initRoomParam(); } /** @@ -206,5 +216,21 @@ public class Room implements AutoCloseable { return status.get(); } + public void initRoomParam(){ + if( scenarioService == null) { + scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class); + } + for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){ + ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); + if( redisUtil == null){ + redisUtil = SpringUtil.getBean(RedisUtil.class); + redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo", JSON.toJSONString(scenarioInfo)); + }else{ + redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); + } + } + + } + } From 179c28020b15f4f93399cde72930ef17cb6306a6 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: Sat, 20 Sep 2025 15:07:45 +0800 Subject: [PATCH 04/38] =?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 | 7 ++ .../com/hivekion/room/bean/AbtParentTask.java | 23 ++++-- .../java/com/hivekion/room/bean/MoveTask.java | 79 +++++++++++-------- .../java/com/hivekion/room/bean/Room.java | 6 +- 4 files changed, 78 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/hivekion/room/RoomManager.java b/src/main/java/com/hivekion/room/RoomManager.java index 8e7d724..1ff3416 100644 --- a/src/main/java/com/hivekion/room/RoomManager.java +++ b/src/main/java/com/hivekion/room/RoomManager.java @@ -76,4 +76,11 @@ public class RoomManager { } return false; } + public static int getMag(String id){ + Room room = roomsMap.get(id); + if (room != null) { + return room.getMag(); + } + return 1; + } } diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 9a7a990..5e17ca8 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -28,7 +28,9 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import com.hivekion.statistic.bean.ScenarioInfo; @@ -66,6 +68,9 @@ public abstract class AbtParentTask implements TaskAction { private RedisUtil redisUtil; private com.hivekion.statistic.service.ScenarioService scenarioService; + //是否可以移动 + protected final AtomicBoolean canMoved = new AtomicBoolean(true); + protected final AtomicReference coordinateReference = new AtomicReference<>(new Coordinate()); /** * 任务相对与想定的开始时间 */ @@ -114,7 +119,9 @@ public abstract class AbtParentTask implements TaskAction { public long getDuringTime() { return RoomManager.getRoomDuringTime(this.roomId); } - + protected int getMag(){ + return RoomManager.getMag(this.roomId); + } //获取房间状态 public boolean getRoomStatus() { return RoomManager.isRunning(roomId); @@ -204,13 +211,14 @@ public abstract class AbtParentTask implements TaskAction { } protected void updatePath(double speed,TaskAction duringAction, TaskAction finishedAction) { - + AtomicLong runSeconds = new AtomicLong(0); ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { log.info("task is running...."); try { - if (this.getRoomStatus()) { + + if (this.getRoomStatus()&&canMoved.get()) { if (distanceInfoMap.isEmpty()) { return; } @@ -221,8 +229,9 @@ public abstract class AbtParentTask implements TaskAction { if(duringAction!=null){ duringAction.doSomeThing(); } + runSeconds.getAndAdd(getMag()); //跑动距离 - double distance = duringTime * speed; + double distance = runSeconds.get() * speed; //获取大与此距离的第一个路线点key Entry endPoint = distanceInfoMap.ceilingEntry(distance); @@ -262,6 +271,7 @@ public abstract class AbtParentTask implements TaskAction { Coordinate coordinate = new Coordinate(); coordinate.setLat(insertPoints[0]); coordinate.setLng(insertPoints[1]); + coordinateReference.set(coordinate); distanceInfoMap.put(distance, coordinate); startPoint.set(distance); SpringUtil.getBean(RedisUtil.class).hset( @@ -272,6 +282,7 @@ public abstract class AbtParentTask implements TaskAction { ResponseCmdInfo.create(WsCmdTypeEnum.PATH_UPDATE.getCode(), roomId, scenarioTask.getScenarioId(), dataMap)); + } else if (Double.compare(distance, endPoint.getKey()) == 0) { NavigableMap subPathMap = distanceInfoMap.subMap(startPoint.get(), true, endPoint.getKey(), true); @@ -279,7 +290,7 @@ public abstract class AbtParentTask implements TaskAction { Coordinate coordinate = subPathMap.get(key); dataList.add(new double[]{coordinate.getLng(), coordinate.getLat()}); } - + coordinateReference.set(endPoint.getValue()); startPoint.set(endPoint.getKey()); Global.sendCmdInfoQueue.add( ResponseCmdInfo.create(WsCmdTypeEnum.PATH_UPDATE.getCode(), roomId, @@ -289,6 +300,7 @@ public abstract class AbtParentTask implements TaskAction { if (finishedAction != null) { finishedAction.doSomeThing(); } + coordinateReference.set(endPoint.getValue()); //完成路径 Global.sendCmdInfoQueue.add( ResponseCmdInfo.create(WsCmdTypeEnum.PATH_FINISHED.getCode(), roomId, @@ -299,6 +311,7 @@ public abstract class AbtParentTask implements TaskAction { } + } catch (Exception e) { log.error("error::", e); } diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 6bd4a78..24f9a71 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -71,7 +71,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { @Override public void doSomeThing() { - log.info("move task running:{}", scenarioTask.getResourceId()); + log.info("move task running:{},fuel::{}", scenarioTask.getResourceId(), getCurrentFuel()); initEnv(); //初始化环境 initPath(); //初始化路径 @@ -81,10 +81,10 @@ public class MoveTask extends AbtParentTask implements TaskAction { //推送移动任务 Map map = new HashMap<>(); - map.put("duringTime",getDuringTime()); - map.put("id",scenarioTask.getResourceId()); - map.put("roomStatus",true); - map.put("type",scenarioTask.getType()); + map.put("duringTime", getDuringTime()); + map.put("id", scenarioTask.getResourceId()); + map.put("roomStatus", true); + map.put("type", scenarioTask.getType()); Global.sendCmdInfoQueue.add( ResponseCmdInfo.create("moveTask", roomId, @@ -100,7 +100,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { public String getType() { return ""; } - },null); //更新路径 + }, null); //更新路径 fuelConsumption();//油品消耗 } @@ -129,35 +129,43 @@ public class MoveTask extends AbtParentTask implements TaskAction { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { - if (getRoomStatus()) { + if (getRoomStatus() && this.canMoved.get()) { double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; - //更新redis中油品的消耗 - Object currentFuelObj = redis.hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuel"); - if (currentFuelObj != null) { - double fuel = Double.parseDouble(currentFuelObj.toString()); - fuel = fuel - currentUseUp; - - redis.hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuelConsume", fuel); - - double totalFuel = statisticBean.getFuel().getTotal(); - if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - requestFlag.set(true); - //需要产生需求 - produceFuelRequest(); - //产生任务 - produceTask(); - - } + double fuel = getCurrentFuel(); + if (fuel == 0) { + log.error("fuel is empty"); + return; } + fuel = fuel - currentUseUp; + + redis.hset( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "fuelConsume", fuel); + + double totalFuel = statisticBean.getFuel().getTotal(); + if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { + log.info("fuel is not enough,stop moving"); + this.canMoved.set(false); + requestFlag.set(true); + //需要产生需求 + produceFuelRequest(); + //产生任务 + produceTask(); + + } + //插入消耗表 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); @@ -193,8 +201,8 @@ public class MoveTask extends AbtParentTask implements TaskAction { task.setResourceId(scenarioTask.getResourceId()); task.setTaskType("6"); task.setSupplierNum(statisticBean.getFuel().getTotal()); - task.setToLat(scenarioTask.getToLat()); - task.setToLng(scenarioTask.getToLng()); + 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()); @@ -208,7 +216,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void insertConsumption(double num) { - log.info("insertConsumption....{}",num); + log.info("insertConsumption....{}", num); BattleConsume battleConsume = new BattleConsume(); battleConsume.setId(IdUtils.simpleUUID()); battleConsume.setResourceId(scenarioTask.getResourceId()); @@ -217,6 +225,15 @@ public class MoveTask extends AbtParentTask implements TaskAction { SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); } + private double getCurrentFuel() { + Object currentFuelObj = redis.hget( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "fuel"); + if (currentFuelObj != null) { + return Double.parseDouble(currentFuelObj.toString()); + } + return 0; + } } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 9d364b1..87b7b31 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -92,7 +92,8 @@ public class Room implements AutoCloseable { status.set(true); totalTime.set(time); startTask(); - //初始化系统资源 物资人员等信息 + //初始化系统资源 初始化resource下物资信息 + //1. } @@ -206,5 +207,8 @@ public class Room implements AutoCloseable { return status.get(); } + public int getMag() { + return this.mag; + } } From 6f2cef9edc8c3a7c85dcb05311484a28c34b3fb4 Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 15:07:48 +0800 Subject: [PATCH 05/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hivekion/room/bean/BattleRootTask.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 362c74b..2492101 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -82,14 +82,8 @@ public class BattleRootTask extends AbtParentTask { this.initBean(); if(this.getRoomStatus()) { long initDuringTime = this.getDuringTime(); - StatisticBean statisticBean = null; - try { - statisticBean = statisticService.statistic(scenarioTask.getResourceId()); - }catch (Exception ex){ - ex.printStackTrace(); - } + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime",String.valueOf(initDuringTime)); String jsonStr = (String)redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); - ScenarioInfo scenarioInfo =JSONObject.parseObject(jsonStr,ScenarioInfo.class); HashMap battleParams = new HashMap<>(); //初始化本次战斗任务各种资源数 @@ -105,9 +99,9 @@ public class BattleRootTask extends AbtParentTask { battleParams.put("teamLng",scenarioInfo.getTeam().getLng().toString()); battleParams.put("duringTime",Long.valueOf(initDuringTime).toString()); log.info("===============================初始化本次战斗任务各种资源数===================================="); - double suppleAmount =statisticBean.getAmmunition().getTotal(); - int suppleDeath =statisticBean.getPerson().getDeath(); - int suppleInjured =statisticBean.getPerson().getInjured(); + double suppleAmount =scenarioInfo.getAmmunition().getTotal(); + int suppleDeath =scenarioInfo.getPerson().getDeath(); + int suppleInjured =scenarioInfo.getPerson().getInjured(); final Map suppleFlagMap = new HashMap<>(); suppleFlagMap.put("ammunition",false); suppleFlagMap.put("death",false); @@ -130,7 +124,7 @@ public class BattleRootTask extends AbtParentTask { JSONObject jsonObject = new JSONObject(); try { long duringTime = getDuringTime(); - long lastDuringTime = Long.valueOf(battleParams.get("duringTime").toString()); + long lastDuringTime = Long.valueOf(redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime").toString()); long intervalDuringTime = duringTime - lastDuringTime; double ammunition = Double.valueOf(battleParams.get("ammunition").toString()); double food = Double.valueOf(battleParams.get("food").toString()); @@ -166,8 +160,8 @@ public class BattleRootTask extends AbtParentTask { scenarioInfo.getWater().setCurrent(Double.valueOf(water - waterConsume)); scenarioInfo.getPerson().setDeath(Long.valueOf(death+deathConsume).intValue()); scenarioInfo.getPerson().setInjured(Long.valueOf(injured +injuredConsume).intValue()); - battleParams.put("duringTime",Long.valueOf(duringTime).toString()); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), battleParams); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime",String.valueOf(duringTime)); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo",JSONObject.toJSONString(scenarioInfo)); }catch (Exception ex){ log.error("==============================设置消耗信息失败=============================================",ex.getMessage()); } From f5ba96e225f776de231aaa94d945783bf921a568 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: Sat, 20 Sep 2025 15:48:14 +0800 Subject: [PATCH 06/38] =?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 | 6 ++--- .../java/com/hivekion/room/bean/MoveTask.java | 26 ++++++++++++++++--- .../java/com/hivekion/room/bean/Room.java | 3 +++ .../service/ScenarioResourceService.java | 1 + .../impl/ScenarioResourceServiceImpl.java | 7 +++++ 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index e54634a..4f1d157 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -28,10 +28,9 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; - -import com.hivekion.statistic.bean.ScenarioInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; import org.springframework.web.reactive.function.client.WebClient; @@ -62,7 +61,8 @@ 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<>(); /** * 任务相对与想定的开始时间 diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 24f9a71..a94ae62 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -1,6 +1,7 @@ package com.hivekion.room.bean; import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson2.JSON; import com.hivekion.Global; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; @@ -13,6 +14,7 @@ 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; @@ -138,7 +140,13 @@ public class MoveTask extends AbtParentTask implements TaskAction { return; } fuel = fuel - currentUseUp; + Object statisticObj = redis.hget( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo"); + if (statisticObj != null) { + setCurrentFuel(currentUseUp); + } redis.hset( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "fuelConsume", fuel); @@ -226,14 +234,24 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private double getCurrentFuel() { - Object currentFuelObj = redis.hget( + Object statisticObj = redis.hget( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuel"); - if (currentFuelObj != null) { - return Double.parseDouble(currentFuelObj.toString()); + "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( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo"); + if (statisticObj != null) { + ScenarioInfo scenarioInfo = JSON.parseObject(statisticObj.toString(), ScenarioInfo.class); + scenarioInfo.getFuel().setCurrent( scenarioInfo.getFuel().getCurrent()-num); + } + } } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index c76d5c4..fd665a2 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -10,6 +10,7 @@ import com.hivekion.common.utils; import com.hivekion.common.uuid.IdUtils; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.bean.ScenarioWsParam; +import com.hivekion.scenario.service.impl.ScenarioResourceServiceImpl; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; @@ -220,6 +221,8 @@ public class Room implements AutoCloseable { if( scenarioService == null) { scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class); } + //设置资源列表 + scenario.setResourceList(SpringUtil.getBean(ScenarioResourceServiceImpl.class).getResourceListByScenarioId(scenario.getId())); for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){ ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); if( redisUtil == null){ diff --git a/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java b/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java index 1143c03..d4b7e88 100644 --- a/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java +++ b/src/main/java/com/hivekion/scenario/service/ScenarioResourceService.java @@ -16,4 +16,5 @@ import java.util.Map; public interface ScenarioResourceService extends IService { List getResourceList(ScenarioResource resource); Map resourceMap(); + List getResourceListByScenarioId(Integer scenarioId); } 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 a0974b8..a0d367f 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioResourceServiceImpl.java @@ -106,4 +106,11 @@ public class ScenarioResourceServiceImpl extends return this.list().stream().collect(Collectors.toMap(ScenarioResource::getId, r -> r)); } + + @Override + public List getResourceListByScenarioId(Integer scenarioId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("scenario_id", scenarioId); + return this.list(queryWrapper); + } } From f070c479a77ba91845f679839f75940d79c13896 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: Sat, 20 Sep 2025 15:53:49 +0800 Subject: [PATCH 07/38] =?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 --- src/main/java/com/hivekion/room/bean/Room.java | 2 ++ .../hivekion/statistic/service/impl/ScenarioServiceImpl.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index fd665a2..e01bbd6 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -225,6 +225,7 @@ public class Room implements AutoCloseable { scenario.setResourceList(SpringUtil.getBean(ScenarioResourceServiceImpl.class).getResourceListByScenarioId(scenario.getId())); for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){ ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); + if( redisUtil == null){ redisUtil = SpringUtil.getBean(RedisUtil.class); redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo", JSON.toJSONString(scenarioInfo)); @@ -233,6 +234,7 @@ public class Room implements AutoCloseable { } } + } diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index 0f129a9..77feb37 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -62,6 +62,9 @@ public class ScenarioServiceImpl implements ScenarioService { } //获取物资信息 List suppliers = orgSupplierService.selectByOrgIds(orgList); + if(suppliers==null){ + return new ScenarioInfo(); + } Map supplierMap = suppliesDictService.supplierDictMap(); suppliers.forEach(supplier -> { From 9862c48de3cf72c7c90497cd1cd1009c7e7f677a 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: Sat, 20 Sep 2025 15:55:00 +0800 Subject: [PATCH 08/38] =?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 --- .../hivekion/statistic/service/impl/ScenarioServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index 77feb37..de88e73 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -62,7 +62,7 @@ public class ScenarioServiceImpl implements ScenarioService { } //获取物资信息 List suppliers = orgSupplierService.selectByOrgIds(orgList); - if(suppliers==null){ + if(suppliers==null||suppliers.isEmpty()){ return new ScenarioInfo(); } Map supplierMap = suppliesDictService.supplierDictMap(); From 17ce8ecebdd6c66111b98f91a0cbb5dd168b1feb Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 15:56:14 +0800 Subject: [PATCH 09/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hivekion/thread/WebsocketMsgWrapper.java | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java index 1a6195e..6d3aea3 100644 --- a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java +++ b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java @@ -3,34 +3,57 @@ package com.hivekion.thread; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hivekion.Global; +import com.hivekion.baseData.entity.Scenario; import com.hivekion.common.entity.ResponseCmdInfo; +import com.hivekion.common.redis.RedisUtil; +import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.scenario.service.ScenarioResourceService; import com.hivekion.statistic.bean.ScenarioInfo; import com.hivekion.statistic.service.ScenarioService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + @Component @Slf4j public class WebsocketMsgWrapper { + + + private RedisUtil redisUtil; + + @Resource + private ScenarioResourceService scenarioResourceService; + + + public void msgHandle(Integer scenarioId,String roomId,String resourceId,String msg){ ResponseCmdInfo responseCmdInfo = new ResponseCmdInfo(); responseCmdInfo.setScenarioId(scenarioId); responseCmdInfo.setRoom(roomId); try { JSONObject msgObj = (JSONObject) JSON.parse(msg); - if(msgObj.getString("cmdType").equals("scenarioInfo")){ - ScenarioService scenarioService = SpringUtil.getBean(ScenarioService.class); - if(scenarioService != null){ - ScenarioInfo scenarioInfo= scenarioService.listScenarioInfo(scenarioId,roomId,resourceId); - String scenarioInfoStr = com.alibaba.fastjson2.JSON.toJSONString(scenarioInfo); - responseCmdInfo.setData(scenarioInfoStr); - }else { - log.warn("=============scenarioService is null================================"); - } + if( redisUtil == null) { + redisUtil = SpringUtil.getBean(RedisUtil.class); + } + JSONArray allScenario = new JSONArray(); + List scenarioResourceList = this.scenarioResourceService.list(new QueryWrapper().eq("scenario_id",scenarioId)); + for(ScenarioResource scenarioResource : scenarioResourceList) { + if(redisUtil.hasKey(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(), "scenarioInfo")) { + String jsonStr = (String) redisUtil.hget(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(), "scenarioInfo"); + allScenario.add(jsonStr); + } + } + responseCmdInfo.setData(JSONArray.toJSONString(allScenario)); } + responseCmdInfo.setCmdType("scenarioInfo"); Global.sendCmdInfoQueue.add(responseCmdInfo); }catch (Exception ex){ ex.printStackTrace(); From 2e303227c3d50e54c896b4b4bf165b92951e3c79 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: Sat, 20 Sep 2025 15:57:25 +0800 Subject: [PATCH 10/38] =?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 --- .../service/impl/ScenarioServiceImpl.java | 191 ++++++++++-------- 1 file changed, 102 insertions(+), 89 deletions(-) diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index de88e73..ab3523a 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -17,104 +17,117 @@ import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.entity.SuppliesDict; import com.hivekion.supplier.service.ISupplierRequestService; import com.hivekion.supplier.service.SuppliesDictService; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.annotation.Resource; +import org.springframework.stereotype.Component; @Component("WebsocketScenarioService") public class ScenarioServiceImpl implements ScenarioService { - @Resource - private ScenarioResourceService scenarioResourceService; - @Resource - private OrgSupplierService orgSupplierService; - @Resource - private SuppliesDictService suppliesDictService; - @Resource - private IScenarioOrgPostService scenarioOrgPostService; - @Resource - private FightpowerstaffService fightpowerstaffService; + @Resource + private ScenarioResourceService scenarioResourceService; + @Resource + private OrgSupplierService orgSupplierService; + @Resource + private SuppliesDictService suppliesDictService; + @Resource + private IScenarioOrgPostService scenarioOrgPostService; + @Resource + private FightpowerstaffService fightpowerstaffService; - @Resource - private ScenarioTaskService scenarioTaskService; - @Resource - private ISupplierRequestService supplierRequestService; - @Override - public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId) { - ScenarioInfo scenarioInfo = new ScenarioInfo(); - //获取分队信息 - ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); - //获取关联的组织机构信息 - ScenarioOrgPost post = new ScenarioOrgPost(); - post.setResourceId(resourceId); - List orgPostList = scenarioOrgPostService.selectByCondition(post); - List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) - .collect(Collectors.toList()); - List staffList = null; - if(!orgList.isEmpty()){ - staffList = fightpowerstaffService.queryByOrgIds(orgList); - }else{ - staffList = new ArrayList<>(); - } - //获取物资信息 - List suppliers = orgSupplierService.selectByOrgIds(orgList); - if(suppliers==null||suppliers.isEmpty()){ - return new ScenarioInfo(); - } - Map supplierMap = suppliesDictService.supplierDictMap(); + @Resource + private ScenarioTaskService scenarioTaskService; + @Resource + private ISupplierRequestService supplierRequestService; - suppliers.forEach(supplier -> { - - SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); - - if (dict != null) { - switch (dict.getCode()) { - case "FOOD": - scenarioInfo.getFood().setTotal(scenarioInfo.getFood().getTotal()+supplier.getAccount()); - scenarioInfo.getFood().setCurrent(scenarioInfo.getFood().getCurrent()+supplier.getAccount()); - break; - case "WATER": - scenarioInfo.getWater().setTotal(scenarioInfo.getWater().getTotal()+supplier.getAccount()); - scenarioInfo.getWater().setCurrent(scenarioInfo.getWater().getCurrent()+supplier.getAccount()); - break; - case "FUEL": - scenarioInfo.getFuel().setTotal(scenarioInfo.getFuel().getTotal()+supplier.getAccount()); - scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent()+supplier.getAccount()); - break; - case "MEDICAL": - scenarioInfo.getMedical().setTotal( scenarioInfo.getMedical().getTotal()+supplier.getAccount()); - scenarioInfo.getMedical().setCurrent( scenarioInfo.getMedical().getCurrent()+supplier.getAccount()); - break; - - case "AMMUNITION": - scenarioInfo.getAmmunition().setTotal( scenarioInfo.getAmmunition().getTotal()+supplier.getAccount()); - scenarioInfo.getAmmunition().setCurrent(scenarioInfo.getAmmunition().getCurrent()+supplier.getAccount()); - break; - default: - break; - } - } - }); - - ScenarioTask scenarioTask = new ScenarioTask(); - scenarioTask.setScenarioId(scenarioId); - scenarioTask.setRoomId(roomId); - scenarioTask.setResourceId(resourceId); - - - List scenarioTasks = scenarioTaskService.queryTaskList(scenarioTask); - - List supplierRequests = supplierRequestService.list(new QueryWrapper().eq("FROM_RESOURCE_ID",resourceId)); - - scenarioInfo.setScenarioTasks(scenarioTasks); - scenarioInfo.setStaffList(staffList); - scenarioInfo.setOrgPostList(orgPostList); - scenarioInfo.setSuppliers(suppliers); - scenarioInfo.setSupplierRequests(supplierRequests); - return scenarioInfo; + @Override + public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId) { + ScenarioInfo scenarioInfo = new ScenarioInfo(); + //获取分队信息 + ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); + //获取关联的组织机构信息 + ScenarioOrgPost post = new ScenarioOrgPost(); + post.setResourceId(resourceId); + List orgPostList = scenarioOrgPostService.selectByCondition(post); + List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) + .collect(Collectors.toList()); + List staffList = null; + if (!orgList.isEmpty()) { + staffList = fightpowerstaffService.queryByOrgIds(orgList); + } else { + staffList = new ArrayList<>(); } + if (orgList.isEmpty()) { + return new ScenarioInfo(); + } + //获取物资信息 + List suppliers = orgSupplierService.selectByOrgIds(orgList); + if (suppliers == null || suppliers.isEmpty()) { + return new ScenarioInfo(); + } + Map supplierMap = suppliesDictService.supplierDictMap(); + + suppliers.forEach(supplier -> { + + SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); + + if (dict != null) { + switch (dict.getCode()) { + case "FOOD": + scenarioInfo.getFood() + .setTotal(scenarioInfo.getFood().getTotal() + supplier.getAccount()); + scenarioInfo.getFood() + .setCurrent(scenarioInfo.getFood().getCurrent() + supplier.getAccount()); + break; + case "WATER": + scenarioInfo.getWater() + .setTotal(scenarioInfo.getWater().getTotal() + supplier.getAccount()); + scenarioInfo.getWater() + .setCurrent(scenarioInfo.getWater().getCurrent() + supplier.getAccount()); + break; + case "FUEL": + scenarioInfo.getFuel() + .setTotal(scenarioInfo.getFuel().getTotal() + supplier.getAccount()); + scenarioInfo.getFuel() + .setCurrent(scenarioInfo.getFuel().getCurrent() + supplier.getAccount()); + break; + case "MEDICAL": + scenarioInfo.getMedical() + .setTotal(scenarioInfo.getMedical().getTotal() + supplier.getAccount()); + scenarioInfo.getMedical() + .setCurrent(scenarioInfo.getMedical().getCurrent() + supplier.getAccount()); + break; + + case "AMMUNITION": + scenarioInfo.getAmmunition() + .setTotal(scenarioInfo.getAmmunition().getTotal() + supplier.getAccount()); + scenarioInfo.getAmmunition() + .setCurrent(scenarioInfo.getAmmunition().getCurrent() + supplier.getAccount()); + break; + default: + break; + } + } + }); + + ScenarioTask scenarioTask = new ScenarioTask(); + scenarioTask.setScenarioId(scenarioId); + scenarioTask.setRoomId(roomId); + scenarioTask.setResourceId(resourceId); + + List scenarioTasks = scenarioTaskService.queryTaskList(scenarioTask); + + List supplierRequests = supplierRequestService.list( + new QueryWrapper().eq("FROM_RESOURCE_ID", resourceId)); + + scenarioInfo.setScenarioTasks(scenarioTasks); + scenarioInfo.setStaffList(staffList); + scenarioInfo.setOrgPostList(orgPostList); + scenarioInfo.setSuppliers(suppliers); + scenarioInfo.setSupplierRequests(supplierRequests); + return scenarioInfo; + } } From e0dc6d32f84758e03957144fe76191220a091237 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: Sat, 20 Sep 2025 16:12:21 +0800 Subject: [PATCH 11/38] =?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/bean/AbtParentTask.java | 6 +++++- src/main/java/com/hivekion/room/bean/MoveTask.java | 10 +++++++--- src/main/resources/application-rule.properties | 14 +++++++------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 4f1d157..a1ff001 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -206,12 +206,16 @@ public abstract class AbtParentTask implements TaskAction { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { - log.info("task is running...."); + try { if (this.getRoomStatus()) { if (distanceInfoMap.isEmpty()) { return; } + if(!this.canMoved.get()){ + return; + } + log.info("{}-移动中",this.scenarioTask.getResourceId()); long duringTime = getDuringTime() - taskRelativeTime; if (duringTime <= 0) { return; diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index a94ae62..d48c134 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -113,10 +113,12 @@ public class MoveTask extends AbtParentTask implements TaskAction { try { //获取油品消耗规则 String fuelConsumptionStr = SpringUtil.getBean(Environment.class) - .getProperty("fuel_spreed"); + .getProperty("fuel.spreed"); + log.info("油料消耗速度::{}",fuelConsumptionStr); fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) .getProperty("fuel.warn ", "0")); + log.info("油料最低阈值::{}",fuelThreshold); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); } catch (Exception e) { @@ -136,10 +138,12 @@ public class MoveTask extends AbtParentTask implements TaskAction { double fuel = getCurrentFuel(); if (fuel == 0) { - log.error("fuel is empty"); + log.error("{}-油料为空",scenarioTask.getResourceId()); + this.canMoved.set(false); return; } fuel = fuel - currentUseUp; + log.info("{}-当前油料{}",scenarioTask.getResourceId(),fuel); Object statisticObj = redis.hget( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo"); @@ -153,7 +157,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { double totalFuel = statisticBean.getFuel().getTotal(); if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { - log.info("fuel is not enough,stop moving"); + log.info("{}-油料不足",scenarioTask.getResourceId()); this.canMoved.set(false); requestFlag.set(true); //需要产生需求 diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index b73df47..641f978 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -5,10 +5,10 @@ food.warn = 3 water.warn = 3 fuel.warn = 2 medical.warn = 1 -death.spreed = 3; -injured.spreed = 3; -ammunition.spreed = 2.6; -food.spreed = 2.3; -water.spreed = 3.6; -fuel.spreed = 3.6; -medical.spreed = 1.6; \ No newline at end of file +death.spreed = 3 +injured.spreed = 3 +ammunition.spreed = 2.6 +food.spreed = 2.3 +water.spreed = 3.6 +fuel.spreed = 3.6 +medical.spreed = 1.6 \ No newline at end of file From 4d5cc0489c88ca8ce07b368576471ec504a37ba7 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: Sat, 20 Sep 2025 17:14:47 +0800 Subject: [PATCH 12/38] =?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 | 13 +- .../java/com/hivekion/room/bean/MoveTask.java | 114 ++++++++++-------- .../resources/application-rule.properties | 4 +- .../mapper/tbl/BattleSupplierMapper.xml | 2 +- 4 files changed, 76 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index a1ff001..128c0b2 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -30,6 +30,7 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; @@ -202,7 +203,7 @@ public abstract class AbtParentTask implements TaskAction { } protected void updatePath(double speed,TaskAction duringAction, TaskAction finishedAction) { - + AtomicLong duringTime = new AtomicLong(0); ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); schedule.scheduleWithFixedDelay(() -> { @@ -215,16 +216,14 @@ public abstract class AbtParentTask implements TaskAction { if(!this.canMoved.get()){ return; } - log.info("{}-移动中",this.scenarioTask.getResourceId()); - long duringTime = getDuringTime() - taskRelativeTime; - if (duringTime <= 0) { - return; - } + log.info("{}-移动中,canRemove::{}",this.scenarioTask.getResourceId(),this.canMoved.get()); + + if(duringAction!=null){ duringAction.doSomeThing(); } //跑动距离 - double distance = duringTime * speed; + double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; //获取大与此距离的第一个路线点key Entry endPoint = distanceInfoMap.ceilingEntry(distance); diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index d48c134..590f526 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -114,11 +114,13 @@ public class MoveTask extends AbtParentTask implements TaskAction { //获取油品消耗规则 String fuelConsumptionStr = SpringUtil.getBean(Environment.class) .getProperty("fuel.spreed"); - log.info("油料消耗速度::{}",fuelConsumptionStr); + fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) - .getProperty("fuel.warn ", "0")); - log.info("油料最低阈值::{}",fuelThreshold); + .getProperty("fuel.warn", "0")); + + log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{}", this.scenarioTask.getResourceId(), + fuelConsumptionStr, fuelThreshold); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); } catch (Exception e) { @@ -137,27 +139,23 @@ public class MoveTask extends AbtParentTask implements TaskAction { double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; double fuel = getCurrentFuel(); - if (fuel == 0) { - log.error("{}-油料为空",scenarioTask.getResourceId()); + 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; } - fuel = fuel - currentUseUp; - log.info("{}-当前油料{}",scenarioTask.getResourceId(),fuel); - Object statisticObj = redis.hget( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "scenarioInfo"); - if (statisticObj != null) { - setCurrentFuel(currentUseUp); - } - redis.hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuelConsume", fuel); + 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()); + log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); this.canMoved.set(false); requestFlag.set(true); //需要产生需求 @@ -189,7 +187,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceFuelRequest() { - log.info("produceFuelRequest...."); + log.info("{}-产生油料保障需求", this.scenarioTask.getResourceId()); SupplierRequest supplierRequest = new SupplierRequest(); supplierRequest.setId(IdUtils.simpleUUID()); supplierRequest.setFromResourceId(scenarioTask.getResourceId()); @@ -203,38 +201,57 @@ public class MoveTask extends AbtParentTask implements TaskAction { } private void produceTask() { - log.info("produceTask...."); - List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) - .selectSupplierResource(scenarioTask.getResourceId()); - if (!resourceList.isEmpty()) { - ScenarioTask task = new ScenarioTask(); - task.setId(IdUtils.simpleUUID()); - task.setScenarioId(scenarioTask.getScenarioId()); - task.setResourceId(scenarioTask.getResourceId()); - task.setTaskType("6"); - task.setSupplierNum(statisticBean.getFuel().getTotal()); - 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"); - SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); - //增加到房间任务 - SupplierTask supplierTask = new SupplierTask(task, roomId); - //立即执行 - RoomManager.addAction(roomId, 0, supplierTask); + 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(scenarioTask.getResourceId()); + task.setTaskType("6"); + task.setSupplierNum(statisticBean.getFuel().getTotal()); + 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.getResourceId(), + task.getSupplierResourceId(), 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) { - log.info("insertConsumption....{}", num); - BattleConsume battleConsume = new BattleConsume(); - battleConsume.setId(IdUtils.simpleUUID()); - battleConsume.setResourceId(scenarioTask.getResourceId()); - battleConsume.setFuel(num); - battleConsume.setConsumeDate(LocalDateTime.now()); - SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); + try{ + log.info("{}-插入油料消耗::{}", this.scenarioTask.getResourceId(), num); + BattleConsume battleConsume = new BattleConsume(); + battleConsume.setId(IdUtils.simpleUUID()); + battleConsume.setResourceId(scenarioTask.getResourceId()); + battleConsume.setFuel(num); + battleConsume.setConsumeDate(LocalDateTime.now()); + SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); + }catch (Exception e){ + log.error("insertConsumption exception", e); + } + } private double getCurrentFuel() { @@ -247,13 +264,16 @@ public class MoveTask extends AbtParentTask implements TaskAction { } return 0; } + private void setCurrentFuel(double num) { Object statisticObj = redis.hget( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo"); if (statisticObj != null) { ScenarioInfo scenarioInfo = JSON.parseObject(statisticObj.toString(), ScenarioInfo.class); - scenarioInfo.getFuel().setCurrent( scenarioInfo.getFuel().getCurrent()-num); + scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent() - num); + redis.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo", JSON.toJSONString(scenarioInfo)); } } } diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index 641f978..3f1e58f 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,12 +3,12 @@ death.warn = 56 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 2 +fuel.warn = 93 medical.warn = 1 death.spreed = 3 injured.spreed = 3 ammunition.spreed = 2.6 food.spreed = 2.3 water.spreed = 3.6 -fuel.spreed = 3.6 +fuel.spreed = 0.04 medical.spreed = 1.6 \ No newline at end of file diff --git a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml index 0de6659..a24e6d4 100644 --- a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml @@ -6,6 +6,6 @@ select id ,lng,lat,scenario_Id as scenarioId, resource_name as resourceName from tbl_scenario_resource where resource_id in - (select supplier_resource_id from tbl_battle_supplier where battle_resoure_id = #{battleResourceId}) + (select supplier_resource_id from tbl_battle_supplier where battle_resource_id = #{battleResourceId}) From a5b56ac2493f482c20a8fd0b3ac7dcf5a93028b0 Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 17:16:00 +0800 Subject: [PATCH 13/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hivekion/room/bean/BattleRootTask.java | 1 - .../service/impl/ScenarioServiceImpl.java | 111 +++++++++++------- .../hivekion/thread/WebsocketMsgWrapper.java | 21 +++- 3 files changed, 90 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 2492101..6c8a77c 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -111,7 +111,6 @@ public class BattleRootTask extends AbtParentTask { @Override public void execTask() { log.info("===============================定时检查统计各种资源消耗量 begin===================================="); - Long deathConsume = null; Long injuredConsume = null; Double ammunitionConsume = null; diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index de88e73..d9453ba 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -1,5 +1,6 @@ package com.hivekion.statistic.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hivekion.baseData.entity.Fightpowerstaff; import com.hivekion.baseData.entity.OrgSupplier; @@ -17,6 +18,8 @@ import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.entity.SuppliesDict; import com.hivekion.supplier.service.ISupplierRequestService; import com.hivekion.supplier.service.SuppliesDictService; +import com.hivekion.team.entity.Teaminfo; +import com.hivekion.team.service.ITeaminfoService; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -43,11 +46,25 @@ public class ScenarioServiceImpl implements ScenarioService { private ScenarioTaskService scenarioTaskService; @Resource private ISupplierRequestService supplierRequestService; + + @Resource + private ITeaminfoService teamInfoService; + + @Resource + private ScenarioResourceService resourceService; @Override public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId) { ScenarioInfo scenarioInfo = new ScenarioInfo(); //获取分队信息 + Map map = teamInfoService.teamInfoMap(); + Map resourceMap = resourceService.resourceMap(); ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); + if (resourceMap.get(resourceId) != null) { + ScenarioResource resource = resourceMap.get(resourceId); + if (map.get(resource.getResourceId()) != null) { + scenarioInfo.getTeam().setTeamName(map.get(resource.getResourceId()).getName()); + } + } //获取关联的组织机构信息 ScenarioOrgPost post = new ScenarioOrgPost(); post.setResourceId(resourceId); @@ -55,50 +72,60 @@ public class ScenarioServiceImpl implements ScenarioService { List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) .collect(Collectors.toList()); List staffList = null; + List suppliers = null; if(!orgList.isEmpty()){ staffList = fightpowerstaffService.queryByOrgIds(orgList); + if(CollectionUtil.isEmpty(staffList)){ + staffList = new ArrayList<>(); + } + //获取物资信息 + suppliers = orgSupplierService.selectByOrgIds(orgList); + if(suppliers==null||suppliers.isEmpty()){ + suppliers = new ArrayList<>(); + } + Map supplierMap = suppliesDictService.supplierDictMap(); + + suppliers.forEach(supplier -> { + + SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); + + if (dict != null) { + switch (dict.getCode()) { + case "FOOD": + scenarioInfo.getFood().setTotal(scenarioInfo.getFood().getTotal()+supplier.getAccount()); + scenarioInfo.getFood().setCurrent(scenarioInfo.getFood().getCurrent()+supplier.getAccount()); + break; + case "WATER": + scenarioInfo.getWater().setTotal(scenarioInfo.getWater().getTotal()+supplier.getAccount()); + scenarioInfo.getWater().setCurrent(scenarioInfo.getWater().getCurrent()+supplier.getAccount()); + break; + case "FUEL": + scenarioInfo.getFuel().setTotal(scenarioInfo.getFuel().getTotal()+supplier.getAccount()); + scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent()+supplier.getAccount()); + break; + case "MEDICAL": + scenarioInfo.getMedical().setTotal( scenarioInfo.getMedical().getTotal()+supplier.getAccount()); + scenarioInfo.getMedical().setCurrent( scenarioInfo.getMedical().getCurrent()+supplier.getAccount()); + break; + + case "AMMUNITION": + scenarioInfo.getAmmunition().setTotal( scenarioInfo.getAmmunition().getTotal()+supplier.getAccount()); + scenarioInfo.getAmmunition().setCurrent(scenarioInfo.getAmmunition().getCurrent()+supplier.getAccount()); + break; + default: + break; + } + } + }); }else{ staffList = new ArrayList<>(); + orgPostList = new ArrayList<>(); + suppliers = new ArrayList<>(); } - //获取物资信息 - List suppliers = orgSupplierService.selectByOrgIds(orgList); - if(suppliers==null||suppliers.isEmpty()){ - return new ScenarioInfo(); - } - Map supplierMap = suppliesDictService.supplierDictMap(); - suppliers.forEach(supplier -> { - - SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); - - if (dict != null) { - switch (dict.getCode()) { - case "FOOD": - scenarioInfo.getFood().setTotal(scenarioInfo.getFood().getTotal()+supplier.getAccount()); - scenarioInfo.getFood().setCurrent(scenarioInfo.getFood().getCurrent()+supplier.getAccount()); - break; - case "WATER": - scenarioInfo.getWater().setTotal(scenarioInfo.getWater().getTotal()+supplier.getAccount()); - scenarioInfo.getWater().setCurrent(scenarioInfo.getWater().getCurrent()+supplier.getAccount()); - break; - case "FUEL": - scenarioInfo.getFuel().setTotal(scenarioInfo.getFuel().getTotal()+supplier.getAccount()); - scenarioInfo.getFuel().setCurrent(scenarioInfo.getFuel().getCurrent()+supplier.getAccount()); - break; - case "MEDICAL": - scenarioInfo.getMedical().setTotal( scenarioInfo.getMedical().getTotal()+supplier.getAccount()); - scenarioInfo.getMedical().setCurrent( scenarioInfo.getMedical().getCurrent()+supplier.getAccount()); - break; - - case "AMMUNITION": - scenarioInfo.getAmmunition().setTotal( scenarioInfo.getAmmunition().getTotal()+supplier.getAccount()); - scenarioInfo.getAmmunition().setCurrent(scenarioInfo.getAmmunition().getCurrent()+supplier.getAccount()); - break; - default: - break; - } - } - }); + scenarioInfo.getTeam().setType(resourceInstance.getType()); + scenarioInfo.getTeam().setLat(resourceInstance.getLat()); + scenarioInfo.getTeam().setLng(resourceInstance.getLng()); ScenarioTask scenarioTask = new ScenarioTask(); scenarioTask.setScenarioId(scenarioId); @@ -107,9 +134,13 @@ public class ScenarioServiceImpl implements ScenarioService { List scenarioTasks = scenarioTaskService.queryTaskList(scenarioTask); - + if(CollectionUtil.isEmpty(scenarioTasks)){ + scenarioTasks =new ArrayList<>(); + } List supplierRequests = supplierRequestService.list(new QueryWrapper().eq("FROM_RESOURCE_ID",resourceId)); - + if(CollectionUtil.isEmpty(supplierRequests)){ + supplierRequests =new ArrayList<>(); + } scenarioInfo.setScenarioTasks(scenarioTasks); scenarioInfo.setStaffList(staffList); scenarioInfo.setOrgPostList(orgPostList); diff --git a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java index 6d3aea3..53f61e1 100644 --- a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java +++ b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java @@ -39,7 +39,7 @@ public class WebsocketMsgWrapper { responseCmdInfo.setRoom(roomId); try { JSONObject msgObj = (JSONObject) JSON.parse(msg); - if(msgObj.getString("cmdType").equals("scenarioInfo")){ + if(msgObj.getString("cmdType").equals("scenarioRunningInfo")){ if( redisUtil == null) { redisUtil = SpringUtil.getBean(RedisUtil.class); } @@ -52,8 +52,25 @@ public class WebsocketMsgWrapper { } } responseCmdInfo.setData(JSONArray.toJSONString(allScenario)); + responseCmdInfo.setCmdType("scenarioInfo"); } - responseCmdInfo.setCmdType("scenarioInfo"); + if(msgObj.getString("cmdType").equals("scenarioInfo")){ + List scenarioResourceList = this.scenarioResourceService.list(new QueryWrapper().eq("scenario_id",scenarioId)); + ScenarioService scenarioService = SpringUtil.getBean(ScenarioService.class); + if(scenarioService != null){ + JSONArray allScenario = new JSONArray(); + for(ScenarioResource scenarioResource : scenarioResourceList) { + ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(), roomId, scenarioResource.getId()); + String scenarioInfoStr = com.alibaba.fastjson2.JSON.toJSONString(scenarioInfo); + allScenario.add(scenarioInfoStr); + } + responseCmdInfo.setData(JSONArray.toJSONString(allScenario)); + }else { + log.warn("=============scenarioService is null================================"); + } + responseCmdInfo.setCmdType("scenarioInfo"); + } + Global.sendCmdInfoQueue.add(responseCmdInfo); }catch (Exception ex){ ex.printStackTrace(); From 3330180a8a639451b00d660849caf55877ee9577 Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 17:55:00 +0800 Subject: [PATCH 14/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ScenarioServiceImpl.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index d9453ba..4303853 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -20,6 +20,7 @@ import com.hivekion.supplier.service.ISupplierRequestService; import com.hivekion.supplier.service.SuppliesDictService; import com.hivekion.team.entity.Teaminfo; import com.hivekion.team.service.ITeaminfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -29,6 +30,7 @@ import java.util.Map; import java.util.stream.Collectors; @Component("WebsocketScenarioService") +@Slf4j public class ScenarioServiceImpl implements ScenarioService { @Resource @@ -65,6 +67,14 @@ public class ScenarioServiceImpl implements ScenarioService { scenarioInfo.getTeam().setTeamName(map.get(resource.getResourceId()).getName()); } } + try { + scenarioInfo.getTeam().setType(resourceInstance.getType()); + scenarioInfo.getTeam().setLat(resourceInstance.getLat()); + scenarioInfo.getTeam().setLng(resourceInstance.getLng()); + }catch (Exception ex){ + log.error("============={}==========================",resourceId); + ex.printStackTrace(); + } //获取关联的组织机构信息 ScenarioOrgPost post = new ScenarioOrgPost(); post.setResourceId(resourceId); @@ -123,10 +133,6 @@ public class ScenarioServiceImpl implements ScenarioService { suppliers = new ArrayList<>(); } - scenarioInfo.getTeam().setType(resourceInstance.getType()); - scenarioInfo.getTeam().setLat(resourceInstance.getLat()); - scenarioInfo.getTeam().setLng(resourceInstance.getLng()); - ScenarioTask scenarioTask = new ScenarioTask(); scenarioTask.setScenarioId(scenarioId); scenarioTask.setRoomId(roomId); From b83d98c1780d5eb216fd72423800854d1784e036 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: Sat, 20 Sep 2025 18:21:04 +0800 Subject: [PATCH 15/38] =?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 | 3 +- .../java/com/hivekion/room/bean/MoveTask.java | 14 +++++---- .../com/hivekion/room/bean/SupplierTask.java | 30 +++++++++---------- .../scenario/entity/ScenarioTask.java | 4 +-- .../impl/BattleSupplierServiceImpl.java | 1 + .../resources/application-rule.properties | 2 +- .../mapper/tbl/BattleSupplierMapper.xml | 2 +- 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 128c0b2..8fdb790 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -265,6 +265,7 @@ public abstract class AbtParentTask implements TaskAction { coordinate.setLng(insertPoints[1]); distanceInfoMap.put(distance, coordinate); startPoint.set(distance); + coordinateReference.set(coordinate); SpringUtil.getBean(RedisUtil.class).hset( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "position", JSON.toJSONString(coordinate)); @@ -280,7 +281,7 @@ public abstract class AbtParentTask implements TaskAction { Coordinate coordinate = subPathMap.get(key); dataList.add(new double[]{coordinate.getLng(), coordinate.getLat()}); } - + coordinateReference.set(endPoint.getValue()); startPoint.set(endPoint.getKey()); Global.sendCmdInfoQueue.add( ResponseCmdInfo.create(WsCmdTypeEnum.PATH_UPDATE.getCode(), roomId, diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index 590f526..ebc1696 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -119,8 +119,8 @@ public class MoveTask extends AbtParentTask implements TaskAction { fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) .getProperty("fuel.warn", "0")); - log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{}", this.scenarioTask.getResourceId(), - fuelConsumptionStr, fuelThreshold); + log.info("初始化::{}-油料消耗速度::{},油料最低阈值::{},当前油料::{}", this.scenarioTask.getResourceId(), + fuelConsumptionStr, fuelThreshold,getCurrentFuel()); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); } catch (Exception e) { @@ -136,7 +136,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { 1); schedule.scheduleWithFixedDelay(() -> { if (getRoomStatus() && this.canMoved.get()) { - double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; + double currentUseUp = consumptionTaskInterval*RoomManager.getMag(roomId) * SPEED / 1000 * fuelConsumption; double fuel = getCurrentFuel(); log.info("{}-当前消耗油料::{},当前剩余油料::{}", scenarioTask.getResourceId(), @@ -211,8 +211,9 @@ public class MoveTask extends AbtParentTask implements TaskAction { ScenarioTask task = new ScenarioTask(); task.setId(IdUtils.simpleUUID()); task.setScenarioId(scenarioTask.getScenarioId()); - task.setResourceId(scenarioTask.getResourceId()); + task.setResourceId(resourceList.get(0).getId()); task.setTaskType("6"); + task.setInsureResourceId(scenarioTask.getResourceId()); task.setSupplierNum(statisticBean.getFuel().getTotal()); task.setToLat(this.coordinateReference.get().getLat() + ""); task.setToLng(this.coordinateReference.get().getLng() + ""); @@ -221,8 +222,8 @@ public class MoveTask extends AbtParentTask implements TaskAction { task.setFromLng(resourceList.get(0).getLng()); task.setFromSource("general"); - log.info("{}-保障分队id::{},from::{},to::{}", this.scenarioTask.getResourceId(), - task.getSupplierResourceId(), task.getFromLat() + "," + task.getFromLng(), + log.info("{}-保障分队id::{},from::{},to::{}", this.scenarioTask.getInsureResourceId(), + task.getResourceId(), task.getFromLat() + "," + task.getFromLng(), task.getToLat() + "," + task.getToLng()); SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); @@ -258,6 +259,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { 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(); diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index 0638a31..98d6e5a 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -77,13 +77,13 @@ public class SupplierTask extends AbtParentTask implements TaskAction { //增加被保障分队的量 SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "medical", statistic.getMedical().getTotal() + ""); //获取保障任务的药品信息 Object supplierObj = SpringUtil.getBean(RedisUtil.class) .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "medical"); //减少保障分队的量 if (supplierObj != null) { @@ -92,7 +92,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { double remain = supplierMedical - statistic.getMedical().getTotal(); SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "medical", remain + ""); } } @@ -100,12 +100,12 @@ public class SupplierTask extends AbtParentTask implements TaskAction { private void supplierFuel(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "fuel", statistic.getFuel().getTotal() + ""); Object supplierObj = SpringUtil.getBean(RedisUtil.class) .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "fuel"); //减少保障分队的量 if (supplierObj != null) { @@ -114,7 +114,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { double remain = supplierMedical - statistic.getFuel().getTotal(); SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "fuel", remain + ""); } } @@ -122,11 +122,11 @@ public class SupplierTask extends AbtParentTask implements TaskAction { private void supplierAmmunition(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "ammunition", statistic.getAmmunition().getTotal() + ""); Object supplierObj = SpringUtil.getBean(RedisUtil.class) .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "ammunition"); //减少保障分队的量 if (supplierObj != null) { @@ -135,7 +135,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { double remain = supplierMedical - statistic.getAmmunition().getTotal(); SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "ammunition", remain + ""); } } @@ -143,11 +143,11 @@ public class SupplierTask extends AbtParentTask implements TaskAction { private void supplierWater(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "water", statistic.getWater().getTotal() + ""); Object supplierObj = SpringUtil.getBean(RedisUtil.class) .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "water"); //减少保障分队的量 if (supplierObj != null) { @@ -156,7 +156,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { double remain = supplierMedical - statistic.getWater().getTotal(); SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "water", remain + ""); } } @@ -164,11 +164,11 @@ public class SupplierTask extends AbtParentTask implements TaskAction { private void supplierFood(StatisticBean statistic) { SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "food", statistic.getFood().getTotal() + ""); Object supplierObj = SpringUtil.getBean(RedisUtil.class) .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "food"); //减少保障分队的量 if (supplierObj != null) { @@ -177,7 +177,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { double remain = supplierMedical - statistic.getFood().getTotal(); SpringUtil.getBean(RedisUtil.class) .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getSupplierResourceId(), + + scenarioTask.getResourceId(), "food", remain + ""); } diff --git a/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java b/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java index 63ec65c..0b9c087 100644 --- a/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java +++ b/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java @@ -60,8 +60,8 @@ public class ScenarioTask implements Serializable { private String status = "init"; @TableField(value = "during_time") private Integer duringTime; - @TableField(value = "supplier_resource_id") - private String supplierResourceId; + @TableField(value = "INSURE_RESOURCE_ID") + private String insureResourceId; @TableField(value = "supplier_num") private double supplierNum; @TableField(value="from_source") diff --git a/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java index b78608f..b591697 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java @@ -42,6 +42,7 @@ public class BattleSupplierServiceImpl extends @Override public List selectSupplierResource(String battleResourceId) { + return this.baseMapper.selectSupplierResource(battleResourceId); } } diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index 3f1e58f..de7cb24 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 = 93 +fuel.warn = 99.6 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 a24e6d4..41ac80f 100644 --- a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml @@ -5,7 +5,7 @@ From 50395edce46440cbe07cd4f3f940690d08e2ef1d 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: Sat, 20 Sep 2025 18:28:11 +0800 Subject: [PATCH 16/38] =?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 --- src/main/java/com/hivekion/room/bean/SupplierTask.java | 3 --- .../scenario/service/impl/ScenarioTaskServiceImpl.java | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index 98d6e5a..cc144f3 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -1,14 +1,11 @@ package com.hivekion.room.bean; import cn.hutool.extra.spring.SpringUtil; -import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; -import java.util.HashMap; -import java.util.Map; import lombok.extern.slf4j.Slf4j; /** 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 306ffa7..b3bfc30 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -80,6 +80,8 @@ public class ScenarioTaskServiceImpl extends public List queryTaskList(ScenarioTask task) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("scenario_id", task.getScenarioId()); + //限定人工添加,默认是空 + queryWrapper.isNull("from_source"); if (StringUtils.isNotBlank(task.getResourceId())) { queryWrapper.eq("resource_id", task.getResourceId()); } From 35995ce8ffef6f894f04bb5c662b4a9df47d5f50 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: Sat, 20 Sep 2025 20:14:26 +0800 Subject: [PATCH 17/38] =?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 | 28 ++- .../java/com/hivekion/room/bean/MoveTask.java | 6 +- .../com/hivekion/room/bean/SupplierTask.java | 200 +++++++++++------- 3 files changed, 142 insertions(+), 92 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 8fdb790..b4fe1c9 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.core.env.Environment; import org.springframework.web.reactive.function.client.WebClient; @@ -63,7 +64,7 @@ public abstract class AbtParentTask implements TaskAction { //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<>(); /** * 任务相对与想定的开始时间 @@ -202,7 +203,7 @@ public abstract class AbtParentTask implements TaskAction { } } - protected void updatePath(double speed,TaskAction duringAction, TaskAction finishedAction) { + protected void updatePath(double speed, TaskAction duringAction, TaskAction finishedAction) { AtomicLong duringTime = new AtomicLong(0); ScheduledExecutorService schedule = Executors.newScheduledThreadPool( 1); @@ -213,13 +214,13 @@ public abstract class AbtParentTask implements TaskAction { if (distanceInfoMap.isEmpty()) { return; } - if(!this.canMoved.get()){ + if (!this.canMoved.get()) { return; } - log.info("{}-移动中,canRemove::{}",this.scenarioTask.getResourceId(),this.canMoved.get()); + log.info("{}-移动中,canRemove::{}", this.scenarioTask.getResourceId(), + this.canMoved.get()); - - if(duringAction!=null){ + if (duringAction != null) { duringAction.doSomeThing(); } //跑动距离 @@ -231,7 +232,7 @@ public abstract class AbtParentTask implements TaskAction { endPoint = distanceInfoMap.lastEntry(); } - // log.info("enPoint::{}",endPoint); + // log.info("enPoint::{}",endPoint); //ws数据 List dataList = new ArrayList<>(); HashMap dataMap = new HashMap<>(); @@ -241,7 +242,7 @@ public abstract class AbtParentTask implements TaskAction { if (Double.compare(distance, endPoint.getKey()) < 0) { //获取小于最大值的第一个key Double lowerKey = distanceInfoMap.lowerKey(endPoint.getKey()); - if(lowerKey==null){ + if (lowerKey == null) { lowerKey = endPoint.getKey(); } @@ -311,13 +312,20 @@ public abstract class AbtParentTask implements TaskAction { //房间统一管理定时器;房间关闭后,定时器销毁 addScheduledExecutorServiceRefenceToRoom(schedule); } + private RedisUtil redisUtil; + //统一推送方法 protected void pushStatus(String resourceId) { - if( redisUtil == null) { + if (StringUtils.isBlank(resourceId)) { + return; + } + if (redisUtil == null) { redisUtil = SpringUtil.getBean(RedisUtil.class); } - String jsonStr= (String) redisUtil.hget(this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); + String jsonStr = (String) redisUtil.hget( + this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo"); ResponseCmdInfo respObj = new ResponseCmdInfo<>(); respObj.setData(jsonStr); respObj.setRoom(roomId); diff --git a/src/main/java/com/hivekion/room/bean/MoveTask.java b/src/main/java/com/hivekion/room/bean/MoveTask.java index ebc1696..bef7165 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -161,7 +161,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { //需要产生需求 produceFuelRequest(); //产生任务 - produceTask(); + produceTask(fuel); } @@ -200,7 +200,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { SpringUtil.getBean(SupplierRequestServiceImpl.class).save(supplierRequest); } - private void produceTask() { + private void produceTask(double fuel) { try { log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); List resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) @@ -214,7 +214,7 @@ public class MoveTask extends AbtParentTask implements TaskAction { task.setResourceId(resourceList.get(0).getId()); task.setTaskType("6"); task.setInsureResourceId(scenarioTask.getResourceId()); - task.setSupplierNum(statisticBean.getFuel().getTotal()); + task.setSupplierNum(statisticBean.getFuel().getTotal()-fuel); task.setToLat(this.coordinateReference.get().getLat() + ""); task.setToLng(this.coordinateReference.get().getLng() + ""); task.setStartTime(LocalDateTime.now()); diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index cc144f3..e169382 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -1,9 +1,11 @@ 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.ScenarioInfo; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; import lombok.extern.slf4j.Slf4j; @@ -55,7 +57,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { } //推送最新状态信息 pushStatus(scenarioTask.getResourceId()); - pushStatus(scenarioTask.getResourceId()); + pushStatus(scenarioTask.getInsureResourceId()); } @Override @@ -71,112 +73,152 @@ 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){ - //增加被保障分队的量 - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "medical", statistic.getMedical().getTotal() + ""); + ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); + ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); - //获取保障任务的药品信息 - Object supplierObj = SpringUtil.getBean(RedisUtil.class) - .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "medical"); - //减少保障分队的量 - if (supplierObj != null) { - double supplierMedical = Double.parseDouble(supplierObj.toString()); + scenarioSupplierInfo.getMedical().setCurrent(scenarioInsureInfo.getMedical().getCurrent() - statistic.getMedical().getTotal()); + scenarioInsureInfo.getMedical().setCurrent(statistic.getMedical().getTotal()); - double remain = supplierMedical - statistic.getMedical().getTotal(); - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "medical", remain + ""); - } + + 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) { - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "fuel", statistic.getFuel().getTotal() + ""); + //保障分队 + 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){ - Object supplierObj = SpringUtil.getBean(RedisUtil.class) - .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "fuel"); - //减少保障分队的量 - if (supplierObj != null) { - double supplierMedical = Double.parseDouble(supplierObj.toString()); + 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()); + + + 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)); - double remain = supplierMedical - statistic.getFuel().getTotal(); - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "fuel", remain + ""); } } private void supplierAmmunition(StatisticBean statistic) { - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "ammunition", statistic.getAmmunition().getTotal() + ""); - Object supplierObj = SpringUtil.getBean(RedisUtil.class) - .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "ammunition"); - //减少保障分队的量 - if (supplierObj != null) { - double supplierMedical = Double.parseDouble(supplierObj.toString()); + //保障分队 + 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.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)); + + SpringUtil.getBean(RedisUtil.class).hset( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); - double remain = supplierMedical - statistic.getAmmunition().getTotal(); - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "ammunition", remain + ""); } } private void supplierWater(StatisticBean statistic) { - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "water", statistic.getWater().getTotal() + ""); - Object supplierObj = SpringUtil.getBean(RedisUtil.class) - .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "water"); - //减少保障分队的量 - if (supplierObj != null) { - double supplierMedical = Double.parseDouble(supplierObj.toString()); + //保障分队 + 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.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)); - double remain = supplierMedical - statistic.getWater().getTotal(); - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "water", remain + ""); } } 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){ - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), - "food", statistic.getFood().getTotal() + ""); - Object supplierObj = SpringUtil.getBean(RedisUtil.class) - .hget(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "food"); - //减少保障分队的量 - if (supplierObj != null) { - double supplierMedical = Double.parseDouble(supplierObj.toString()); + ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); + ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); + + 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)); - double remain = supplierMedical - statistic.getFood().getTotal(); - SpringUtil.getBean(RedisUtil.class) - .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" - + scenarioTask.getResourceId(), - "food", remain + ""); } } + } From 25507ce2aafeb1dc11323d4bacfb02c1a7db4f91 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: Sat, 20 Sep 2025 21:51:45 +0800 Subject: [PATCH 18/38] =?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 --- src/main/java/com/hivekion/baseData/entity/Scenario.java | 1 + src/main/java/com/hivekion/room/bean/AbtParentTask.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/hivekion/baseData/entity/Scenario.java b/src/main/java/com/hivekion/baseData/entity/Scenario.java index 58a7343..a766dca 100644 --- a/src/main/java/com/hivekion/baseData/entity/Scenario.java +++ b/src/main/java/com/hivekion/baseData/entity/Scenario.java @@ -106,6 +106,7 @@ public class Scenario extends SearchInputVo { private String leftBottomLat; @TableField(value = "right_bottom_lat") private String rightBottomLat; + private String desc; /** * 想定关联的资源列表 */ diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index b4fe1c9..3c3d60a 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -14,6 +14,7 @@ import com.hivekion.enums.WsCmdTypeEnum; import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.statistic.bean.ScenarioInfo; import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; @@ -333,6 +334,7 @@ public abstract class AbtParentTask implements TaskAction { respObj.setCmdType("scenarioInfo"); Global.sendCmdInfoQueue.add(respObj); } + } interface BizTaskOnTiming { From be0d17a242a55cbb2d8560f7ff5a13537c1617fa Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sat, 20 Sep 2025 21:56:39 +0800 Subject: [PATCH 19/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/AbtParentTask.java | 7 + .../hivekion/room/bean/BattleRootTask.java | 7 +- .../java/com/hivekion/room/bean/Room.java | 8 +- .../statistic/bean/EditBaseScenarioInfo.java | 24 +++ .../statistic/bean/EditScenarioInfo.java | 33 ++++ .../statistic/service/ScenarioService.java | 2 + .../service/impl/ScenarioServiceImpl.java | 162 ++++++++++++++++++ .../hivekion/thread/WebsocketMsgWrapper.java | 28 +++ 8 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hivekion/statistic/bean/EditBaseScenarioInfo.java create mode 100644 src/main/java/com/hivekion/statistic/bean/EditScenarioInfo.java diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 8fdb790..1d009ca 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -324,6 +324,13 @@ 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"); + ResponseCmdInfo respUpdObj = new ResponseCmdInfo<>(); + respUpdObj.setData(updJsonStr); + respUpdObj.setRoom(roomId); + respUpdObj.setScenarioId(scenarioTask.getScenarioId()); + respUpdObj.setCmdType("updScenarioInfo"); + Global.sendCmdInfoQueue.add(respObj); } } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 6c8a77c..1aee753 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -1,6 +1,7 @@ package com.hivekion.room.bean; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; @@ -135,9 +136,9 @@ public class BattleRootTask extends AbtParentTask { teamLat = battleParams.get( "teamLat").toString(); teamLng = battleParams.get( "teamLng").toString(); // - deathConsume = DEATH_SPREED * intervalDuringTime; - injuredConsume = INJURED_SPREED * intervalDuringTime; - ammunitionConsume = intervalDuringTime * AMMUNITION_SPREED; + deathConsume = RandomUtil.getSecureRandom().nextInt(3) * intervalDuringTime; + injuredConsume = RandomUtil.getSecureRandom().nextInt(6) * intervalDuringTime; + ammunitionConsume = intervalDuringTime * (1D+RandomUtil.getSecureRandom().nextDouble()); foodConsume = intervalDuringTime * FOOD_SPREED; waterConsume = intervalDuringTime * WATER_SPREED; fuelConsume = intervalDuringTime * FUEL_SPREED; diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index e01bbd6..0f671fb 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.statistic.bean.EditScenarioInfo; import com.hivekion.statistic.bean.ScenarioInfo; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -225,13 +226,12 @@ public class Room implements AutoCloseable { scenario.setResourceList(SpringUtil.getBean(ScenarioResourceServiceImpl.class).getResourceListByScenarioId(scenario.getId())); for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){ ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); - + EditScenarioInfo updScenarioInfo = scenarioService.listEditScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); if( redisUtil == null){ redisUtil = SpringUtil.getBean(RedisUtil.class); - redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo", JSON.toJSONString(scenarioInfo)); - }else{ - redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); } + redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"scenarioInfo",JSON.toJSONString(scenarioInfo)); + redisUtil.hset(scenarioResource.getScenarioId() + "-" + roomId + "-" + scenarioResource.getId(),"updScenarioInfo", JSON.toJSONString(updScenarioInfo)); } diff --git a/src/main/java/com/hivekion/statistic/bean/EditBaseScenarioInfo.java b/src/main/java/com/hivekion/statistic/bean/EditBaseScenarioInfo.java new file mode 100644 index 0000000..e017b79 --- /dev/null +++ b/src/main/java/com/hivekion/statistic/bean/EditBaseScenarioInfo.java @@ -0,0 +1,24 @@ +package com.hivekion.statistic.bean; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EditBaseScenarioInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + private TeamInfo team = new TeamInfo(); + private PersonInfo person = new PersonInfo(); + //弹药 + private AmmunitionInfo ammunition = new AmmunitionInfo(); + //食品 + private FoodInfo food = new FoodInfo(); + //水 + private WaterInfo water = new WaterInfo(); + //油 + private FuelInfo fuel = new FuelInfo(); + //药材 + private MedicalInfo medical = new MedicalInfo(); +} diff --git a/src/main/java/com/hivekion/statistic/bean/EditScenarioInfo.java b/src/main/java/com/hivekion/statistic/bean/EditScenarioInfo.java new file mode 100644 index 0000000..c9c2eee --- /dev/null +++ b/src/main/java/com/hivekion/statistic/bean/EditScenarioInfo.java @@ -0,0 +1,33 @@ +package com.hivekion.statistic.bean; + +import com.hivekion.baseData.entity.Fightpowerstaff; +import com.hivekion.baseData.entity.OrgSupplier; +import com.hivekion.scenario.entity.ScenarioOrgPost; +import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.supplier.entity.SupplierRequest; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class EditScenarioInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + private List orgPostList; + + private List staffList; + + private List suppliers; + + private List scenarioTasks; + + private List supplierRequests; + + private EditBaseScenarioInfo jbxx = new EditBaseScenarioInfo(); + + private ScenarioResource sdzy; + +} diff --git a/src/main/java/com/hivekion/statistic/service/ScenarioService.java b/src/main/java/com/hivekion/statistic/service/ScenarioService.java index ea80f7e..f43bd71 100644 --- a/src/main/java/com/hivekion/statistic/service/ScenarioService.java +++ b/src/main/java/com/hivekion/statistic/service/ScenarioService.java @@ -1,8 +1,10 @@ package com.hivekion.statistic.service; +import com.hivekion.statistic.bean.EditScenarioInfo; import com.hivekion.statistic.bean.ScenarioInfo; public interface ScenarioService { public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId); + public EditScenarioInfo listEditScenarioInfo(Integer scenarioId, String roomId, String resourceId); } diff --git a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java index 4303853..5afacdc 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/ScenarioServiceImpl.java @@ -2,16 +2,21 @@ package com.hivekion.statistic.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.hivekion.baseData.domain.TblEntity; import com.hivekion.baseData.entity.Fightpowerstaff; import com.hivekion.baseData.entity.OrgSupplier; import com.hivekion.baseData.service.FightpowerstaffService; +import com.hivekion.baseData.service.ITblEntityService; import com.hivekion.baseData.service.OrgSupplierService; +import com.hivekion.icon.service.IconService; import com.hivekion.scenario.entity.ScenarioOrgPost; import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.scenario.service.IResourceService; import com.hivekion.scenario.service.IScenarioOrgPostService; import com.hivekion.scenario.service.ScenarioResourceService; import com.hivekion.scenario.service.ScenarioTaskService; +import com.hivekion.statistic.bean.EditScenarioInfo; import com.hivekion.statistic.bean.ScenarioInfo; import com.hivekion.statistic.service.ScenarioService; import com.hivekion.supplier.entity.SupplierRequest; @@ -54,6 +59,15 @@ public class ScenarioServiceImpl implements ScenarioService { @Resource private ScenarioResourceService resourceService; + + @Resource + private ITblEntityService iTblEntityService; + + @Resource + private IResourceService resourcesService; + @Resource + private IconService iconService; + @Override public ScenarioInfo listScenarioInfo(Integer scenarioId, String roomId, String resourceId) { ScenarioInfo scenarioInfo = new ScenarioInfo(); @@ -65,6 +79,7 @@ public class ScenarioServiceImpl implements ScenarioService { ScenarioResource resource = resourceMap.get(resourceId); if (map.get(resource.getResourceId()) != null) { scenarioInfo.getTeam().setTeamName(map.get(resource.getResourceId()).getName()); + resourceInstance.setResourceName(map.get(resource.getResourceId()).getName()); } } try { @@ -154,4 +169,151 @@ public class ScenarioServiceImpl implements ScenarioService { scenarioInfo.setSupplierRequests(supplierRequests); return scenarioInfo; } + + @Override + public EditScenarioInfo listEditScenarioInfo(Integer scenarioId, String roomId, String resourceId) { + EditScenarioInfo scenarioInfo = new EditScenarioInfo(); + //图标Map + Map iconMap = iconService.iconMap(); + //装备Map + Map entityMap = iTblEntityService.entityMap(); + Map hResourceMap = resourcesService.listBuildResourceByType(7); + Map wResourceMap = resourcesService.listBuildResourceByType(8); + //获取分队信息 + Map map = teamInfoService.teamInfoMap(); + Map resourceMap = resourceService.resourceMap(); + ScenarioResource resourceInstance = scenarioResourceService.getById(resourceId); + switch (resourceInstance.getResourceType()) { + case 1: + case 2: + case 3: + case 4: + if (entityMap.get(resourceInstance.getResourceId()) != null) { + TblEntity entity = entityMap.get(resourceInstance.getResourceId()); + resourceInstance.setTitle(entity.getEntityName()); + resourceInstance.setImgBase64( + iconMap.get(entity.getIconId()) == null ? "" : iconMap.get(entity.getIconId())); + } + break; + case 5: + case 6: + if (map.get(resourceInstance.getResourceId()) != null) { + Teaminfo teaminfo = map.get(resourceInstance.getResourceId()); + resourceInstance.setTitle(teaminfo.getName()); + resourceInstance.setImgBase64( + iconMap.get(teaminfo.getIconId()) == null ? "" : iconMap.get(teaminfo.getIconId())); + } + break; + case 7: + if(hResourceMap.get(resourceInstance.getResourceId()) != null){ + com.hivekion.scenario.entity.Resource resource1 = hResourceMap.get(resourceInstance.getResourceId()); + resourceInstance.setTitle(resource1.getResourceName()); + resourceInstance.setImgBase64( + iconMap.get(resource1.getIcon()) == null ? "" : iconMap.get(resource1.getIcon())); + } + break; + case 8: + if(wResourceMap.get(resourceInstance.getResourceId()) != null){ + com.hivekion.scenario.entity.Resource resource1 = wResourceMap.get(resourceInstance.getResourceId()); + resourceInstance.setTitle(resource1.getResourceName()); + resourceInstance.setImgBase64( + iconMap.get(resource1.getIcon()) == null ? "" : iconMap.get(resource1.getIcon())); + } + break; + } + if (resourceMap.get(resourceId) != null) { + ScenarioResource resource = resourceMap.get(resourceId); + if (map.get(resource.getResourceId()) != null) { + scenarioInfo.getJbxx().getTeam().setTeamName(map.get(resource.getResourceId()).getName()); + resourceInstance.setResourceName(map.get(resource.getResourceId()).getName()); + } + } + try { + scenarioInfo.getJbxx().getTeam().setType(resourceInstance.getType()); + scenarioInfo.getJbxx().getTeam().setLat(resourceInstance.getLat()); + scenarioInfo.getJbxx().getTeam().setLng(resourceInstance.getLng()); + }catch (Exception ex){ + log.error("============={}==========================",resourceId); + ex.printStackTrace(); + } + //获取关联的组织机构信息 + ScenarioOrgPost post = new ScenarioOrgPost(); + post.setResourceId(resourceId); + List orgPostList = scenarioOrgPostService.selectByCondition(post); + List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) + .collect(Collectors.toList()); + List staffList = null; + List suppliers = null; + if(!orgList.isEmpty()){ + staffList = fightpowerstaffService.queryByOrgIds(orgList); + if(CollectionUtil.isEmpty(staffList)){ + staffList = new ArrayList<>(); + } + //获取物资信息 + suppliers = orgSupplierService.selectByOrgIds(orgList); + if(suppliers==null||suppliers.isEmpty()){ + suppliers = new ArrayList<>(); + } + Map supplierMap = suppliesDictService.supplierDictMap(); + + suppliers.forEach(supplier -> { + + SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); + + if (dict != null) { + switch (dict.getCode()) { + case "FOOD": + scenarioInfo.getJbxx().getFood().setTotal(scenarioInfo.getJbxx().getFood().getTotal()+supplier.getAccount()); + scenarioInfo.getJbxx().getFood().setCurrent(scenarioInfo.getJbxx().getFood().getCurrent()+supplier.getAccount()); + break; + case "WATER": + scenarioInfo.getJbxx().getWater().setTotal(scenarioInfo.getJbxx().getWater().getTotal()+supplier.getAccount()); + scenarioInfo.getJbxx().getWater().setCurrent(scenarioInfo.getJbxx().getWater().getCurrent()+supplier.getAccount()); + break; + case "FUEL": + scenarioInfo.getJbxx().getFuel().setTotal(scenarioInfo.getJbxx().getFuel().getTotal()+supplier.getAccount()); + scenarioInfo.getJbxx().getFuel().setCurrent(scenarioInfo.getJbxx().getFuel().getCurrent()+supplier.getAccount()); + break; + case "MEDICAL": + scenarioInfo.getJbxx().getMedical().setTotal( scenarioInfo.getJbxx().getMedical().getTotal()+supplier.getAccount()); + scenarioInfo.getJbxx().getMedical().setCurrent( scenarioInfo.getJbxx().getMedical().getCurrent()+supplier.getAccount()); + break; + + case "AMMUNITION": + scenarioInfo.getJbxx().getAmmunition().setTotal( scenarioInfo.getJbxx().getAmmunition().getTotal()+supplier.getAccount()); + scenarioInfo.getJbxx().getAmmunition().setCurrent(scenarioInfo.getJbxx().getAmmunition().getCurrent()+supplier.getAccount()); + break; + default: + break; + } + } + }); + }else{ + staffList = new ArrayList<>(); + orgPostList = new ArrayList<>(); + suppliers = new ArrayList<>(); + } + + ScenarioTask scenarioTask = new ScenarioTask(); + scenarioTask.setScenarioId(scenarioId); + scenarioTask.setRoomId(roomId); + scenarioTask.setResourceId(resourceId); + + + List scenarioTasks = scenarioTaskService.queryTaskList(scenarioTask); + if(CollectionUtil.isEmpty(scenarioTasks)){ + scenarioTasks =new ArrayList<>(); + } + List supplierRequests = supplierRequestService.list(new QueryWrapper().eq("FROM_RESOURCE_ID",resourceId)); + if(CollectionUtil.isEmpty(supplierRequests)){ + supplierRequests =new ArrayList<>(); + } + scenarioInfo.setScenarioTasks(scenarioTasks); + scenarioInfo.setStaffList(staffList); + scenarioInfo.setOrgPostList(orgPostList); + scenarioInfo.setSuppliers(suppliers); + scenarioInfo.setSupplierRequests(supplierRequests); + scenarioInfo.setSdzy(resourceInstance); + return scenarioInfo; + } } diff --git a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java index 53f61e1..6f43225 100644 --- a/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java +++ b/src/main/java/com/hivekion/thread/WebsocketMsgWrapper.java @@ -11,6 +11,7 @@ import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.service.ScenarioResourceService; +import com.hivekion.statistic.bean.EditScenarioInfo; import com.hivekion.statistic.bean.ScenarioInfo; import com.hivekion.statistic.service.ScenarioService; import lombok.extern.slf4j.Slf4j; @@ -70,7 +71,34 @@ public class WebsocketMsgWrapper { } responseCmdInfo.setCmdType("scenarioInfo"); } + if(msgObj.getString("cmdType").equals("editScenarioInfo")){ + List scenarioResourceList = this.scenarioResourceService.list(new QueryWrapper().eq("scenario_id",scenarioId)); + ScenarioService scenarioService = SpringUtil.getBean(ScenarioService.class); + if(scenarioService != null){ + JSONArray allScenario = new JSONArray(); + for(ScenarioResource scenarioResource : scenarioResourceList) { + EditScenarioInfo editScenarioInfo = scenarioService.listEditScenarioInfo(scenarioResource.getScenarioId(), roomId, scenarioResource.getId()); +// String scenarioInfoStr = com.alibaba.fastjson2.JSON.toJSONString(scenarioInfo); + com.alibaba.fastjson2.JSONObject jsonObject = com.alibaba.fastjson2.JSONObject.from(editScenarioInfo); + allScenario.add(jsonObject); + } + responseCmdInfo.setData(JSONArray.toJSONString(allScenario)); + }else { + log.warn("=============scenarioService is null================================"); + } + responseCmdInfo.setCmdType("editScenarioInfo"); + } + if(msgObj.getString("cmdType").equals("updScenarioInfo")){ + ScenarioService scenarioService = SpringUtil.getBean(ScenarioService.class); + if(scenarioService != null){ + EditScenarioInfo scenarioInfo = scenarioService.listEditScenarioInfo(scenarioId, roomId, msgObj.getString("resourceId")); + responseCmdInfo.setData(JSONArray.toJSONString(scenarioInfo)); + }else { + log.warn("=============scenarioService is null================================"); + } + responseCmdInfo.setCmdType("updScenarioInfo"); + } Global.sendCmdInfoQueue.add(responseCmdInfo); }catch (Exception ex){ ex.printStackTrace(); From ff809b56ee7462c0a156c3c072f28a270ade4abc 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: Sat, 20 Sep 2025 22:01:08 +0800 Subject: [PATCH 20/38] =?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/team/entity/Teaminfo.java | 63 ++----------------- .../resources/mapper/tbl/TeaminfoMapper.xml | 1 + 2 files changed, 5 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/hivekion/team/entity/Teaminfo.java b/src/main/java/com/hivekion/team/entity/Teaminfo.java index cb7a2a3..bf3673e 100644 --- a/src/main/java/com/hivekion/team/entity/Teaminfo.java +++ b/src/main/java/com/hivekion/team/entity/Teaminfo.java @@ -8,6 +8,7 @@ import com.hivekion.common.entity.SearchInputVo; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** *

@@ -19,6 +20,7 @@ import io.swagger.annotations.ApiModelProperty; */ @TableName("TBL_TEAMINFO") @ApiModel(value = "Teaminfo对象", description = "") +@Data public class Teaminfo extends SearchInputVo { private static final long serialVersionUID = 1L; @@ -40,64 +42,7 @@ public class Teaminfo extends SearchInputVo { @ApiModelProperty("图标ID") @TableField(value="icon_id") private String iconId; + @TableField(value="team_type") + private Integer teamType; - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getGuid() { - return guid; - } - - public void setGuid(String guid) { - this.guid = guid; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getType() { - return type; - } - - public void setType(Integer type) { - this.type = type; - } - - public String getMappingguid() { - return mappingguid; - } - - public void setMappingguid(String mappingguid) { - this.mappingguid = mappingguid; - } - - public String getIconId() { - return iconId; - } - - public void setIconId(String iconId) { - this.iconId = iconId; - } - - @Override - public String toString() { - return "Teaminfo{" + - "id = " + id + - ", guid = " + guid + - ", name = " + name + - ", type = " + type + - ", mappingguid = " + mappingguid + - ", iconId = " + iconId + - "}"; - } } diff --git a/src/main/resources/mapper/tbl/TeaminfoMapper.xml b/src/main/resources/mapper/tbl/TeaminfoMapper.xml index 7a08db8..9b4c178 100644 --- a/src/main/resources/mapper/tbl/TeaminfoMapper.xml +++ b/src/main/resources/mapper/tbl/TeaminfoMapper.xml @@ -8,6 +8,7 @@ + SELECT @rownum := @rownum + 1 AS seq, - t.Guid,t.Name,t.TestMode,t.Author,t.CreateUserId,t.CreateTime,t.Content,t.id + t.Guid,t.Name,t.TestMode,t.Author,t.CreateUserId,t.CreateTime,t.Content,t.id,t.mark FROM ( SELECT * FROM tbl_scenario @@ -32,7 +32,7 @@ From 3fa7529f8ecf755d4775b64e766c69af2d254e0b Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sun, 21 Sep 2025 03:48:48 +0800 Subject: [PATCH 32/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/hivekion/ws/WsServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index 9e11408..785bd67 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -12,7 +12,9 @@ import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; /** * [类的简要说明] From 4b2b3324ebe8960a63ccda65349c2bfa5d0b6532 Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sun, 21 Sep 2025 03:49:30 +0800 Subject: [PATCH 33/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/BattleConsumeStatistic.java | 33 +++++++++++++++++++ .../controller/StatisticController.java | 8 +++++ .../statistic/service/StatisticService.java | 5 +++ .../service/impl/StatisticServiceImpl.java | 22 +++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/main/java/com/hivekion/statistic/bean/BattleConsumeStatistic.java diff --git a/src/main/java/com/hivekion/statistic/bean/BattleConsumeStatistic.java b/src/main/java/com/hivekion/statistic/bean/BattleConsumeStatistic.java new file mode 100644 index 0000000..a3c4032 --- /dev/null +++ b/src/main/java/com/hivekion/statistic/bean/BattleConsumeStatistic.java @@ -0,0 +1,33 @@ +package com.hivekion.statistic.bean; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class BattleConsumeStatistic { + + private String resourceId; + + private Double ammunition; + + private Integer death; + + private Integer injured; + + private Double fuel; + + private Double food; + + private Double water; + + private Double medical; + + private String lat; + + private String lng; + + + private String consumeDateStr; +} diff --git a/src/main/java/com/hivekion/statistic/controller/StatisticController.java b/src/main/java/com/hivekion/statistic/controller/StatisticController.java index ec2d499..7f9874c 100644 --- a/src/main/java/com/hivekion/statistic/controller/StatisticController.java +++ b/src/main/java/com/hivekion/statistic/controller/StatisticController.java @@ -1,6 +1,7 @@ package com.hivekion.statistic.controller; import com.hivekion.common.entity.ResponseData; +import com.hivekion.statistic.bean.BattleConsumeStatistic; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; import javax.annotation.Resource; @@ -8,6 +9,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * [类的简要说明] *

@@ -30,4 +33,9 @@ public class StatisticController { return ResponseData.success(statisticService.statistic(resourceId)); } + + public ResponseData> listBattleConsumeStatistic(){ + List qryList = this.statisticService.listBattleConsumeStatistic(); + return ResponseData.success(qryList); + } } diff --git a/src/main/java/com/hivekion/statistic/service/StatisticService.java b/src/main/java/com/hivekion/statistic/service/StatisticService.java index b4210a7..1859081 100644 --- a/src/main/java/com/hivekion/statistic/service/StatisticService.java +++ b/src/main/java/com/hivekion/statistic/service/StatisticService.java @@ -1,7 +1,10 @@ package com.hivekion.statistic.service; +import com.hivekion.statistic.bean.BattleConsumeStatistic; import com.hivekion.statistic.bean.StatisticBean; +import java.util.List; + /** * [类的简要说明] *

@@ -13,4 +16,6 @@ import com.hivekion.statistic.bean.StatisticBean; */ public interface StatisticService { StatisticBean statistic(String resourceId); + + List listBattleConsumeStatistic(); } diff --git a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java index 534a854..b5ad7f7 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java @@ -8,17 +8,21 @@ import com.hivekion.baseData.entity.OrgSupplier; import com.hivekion.baseData.service.FightpowerstaffService; import com.hivekion.baseData.service.OrgSupplierService; import com.hivekion.scenario.bean.BattleSuppleVo; +import com.hivekion.scenario.entity.BattleConsume; import com.hivekion.scenario.entity.BattleSupplier; import com.hivekion.scenario.entity.ScenarioOrgPost; import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.scenario.service.IBattleConsumeService; import com.hivekion.scenario.service.IBattleSupplierService; import com.hivekion.scenario.service.IScenarioOrgPostService; import com.hivekion.scenario.service.ScenarioResourceService; +import com.hivekion.statistic.bean.BattleConsumeStatistic; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; import com.hivekion.supplier.entity.SuppliesDict; import com.hivekion.supplier.service.SuppliesDictService; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -63,6 +67,9 @@ public class StatisticServiceImpl implements StatisticService { @Resource private ScenarioResourceService resourceService; + @Resource + private IBattleConsumeService battleConsumeService; + @Override public StatisticBean statistic(String resourceId) { @@ -166,4 +173,19 @@ public class StatisticServiceImpl implements StatisticService { return statisticBean; } + @Override + public List listBattleConsumeStatistic() { + List qryList = this.battleConsumeService.list(); + List qryResult = new ArrayList<>(); + qryList.stream().forEach(battleConsume -> { + BattleConsumeStatistic battleConsumeStatistic = new BattleConsumeStatistic(); + BeanUtil.copyProperties(battleConsume,battleConsumeStatistic); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String consumeDateStr = dateTimeFormatter.format(battleConsume.getConsumeDate()); + battleConsumeStatistic.setConsumeDateStr(consumeDateStr); + qryResult.add(battleConsumeStatistic); + }); + return qryResult; + } + } 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 34/38] =?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 35/38] =?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"> From a2d687beb15c47100d2c9c15c35bd4a58e286aef Mon Sep 17 00:00:00 2001 From: wangwenhua <12345678> Date: Sun, 21 Sep 2025 06:23:47 +0800 Subject: [PATCH 36/38] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80scena?= =?UTF-8?q?rio=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hivekion/room/bean/AbtParentTask.java | 2 +- .../hivekion/room/bean/BattleRootTask.java | 359 +++++++++--------- .../controller/StatisticController.java | 2 +- 3 files changed, 186 insertions(+), 177 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index f1da22d..db58a27 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -140,7 +140,7 @@ public abstract class AbtParentTask implements TaskAction { 1); schedule.scheduleWithFixedDelay(() -> { bizTaskOnTiming.execTask(); - }, 0, 10, TimeUnit.SECONDS); + }, 0, 5, TimeUnit.SECONDS); //房间统一管理定时器;房间关闭后,定时器销毁 addScheduledExecutorServiceRefenceToRoom(schedule); } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 39087d4..93a18e5 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -9,6 +9,7 @@ import com.hivekion.Global; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.uuid.IdUtils; +import com.hivekion.room.RoomManager; import com.hivekion.scenario.entity.BattleConsume; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.service.IBattleConsumeService; @@ -49,10 +50,10 @@ public class BattleRootTask extends AbtParentTask { private IBattleConsumeService battleConsumeService; - 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 static final Double FOOD_SPREED = 0.3D; + private static final Double WATER_SPREED = 0.1D; +// private static final Double FUEL_SPREED = 3.6D; + private static final Double MEDICAL_SPREED = 0.2D; private final AtomicBoolean isAlreadyProduceTask = new AtomicBoolean(false); @@ -82,19 +83,7 @@ public class BattleRootTask extends AbtParentTask { redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime",String.valueOf(initDuringTime)); String jsonStr = (String)redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); ScenarioInfo scenarioInfo =JSONObject.parseObject(jsonStr,ScenarioInfo.class); - HashMap battleParams = new HashMap<>(); - //初始化本次战斗任务各种资源数 - battleParams.put("ammunition",Double.valueOf(scenarioInfo.getAmmunition().getTotal()).toString()); - battleParams.put("food",Double.valueOf(scenarioInfo.getFood().getTotal()).toString()); - battleParams.put("fuel",Double.valueOf(scenarioInfo.getFuel().getTotal()).toString()); - battleParams.put("medical",Double.valueOf(scenarioInfo.getMedical().getTotal()).toString()); - battleParams.put("water",Double.valueOf(scenarioInfo.getWater().getTotal()).toString()); - battleParams.put("person",Integer.valueOf(scenarioInfo.getPerson().getTotal()).toString()); - battleParams.put("death",Integer.valueOf(scenarioInfo.getPerson().getDeath()).toString()); - battleParams.put("injured",Integer.valueOf(scenarioInfo.getPerson().getInjured()).toString()); - battleParams.put("teamLat",scenarioInfo.getTeam().getLat().toString()); - battleParams.put("teamLng",scenarioInfo.getTeam().getLng().toString()); - battleParams.put("duringTime",Long.valueOf(initDuringTime).toString()); + log.info("===============================初始化本次战斗任务各种资源数===================================="); double suppleAmount =scenarioInfo.getAmmunition().getTotal(); int suppleDeath =scenarioInfo.getPerson().getDeath(); @@ -113,111 +102,130 @@ public class BattleRootTask extends AbtParentTask { Double ammunitionConsume = null; Double foodConsume = null; Double waterConsume = null; - Double fuelConsume = null; +// Double fuelConsume = null; Double medicalConsume = null; String teamLat = null; String teamLng = null; JSONObject jsonObject = new JSONObject(); + String jsonStr = (String)redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo"); + ScenarioInfo scenarioInfoOnTime =JSONObject.parseObject(jsonStr,ScenarioInfo.class); + try { + long duringTime = getDuringTime(); long lastDuringTime = Long.valueOf(redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime").toString()); long intervalDuringTime = duringTime - lastDuringTime; - double ammunition = Double.valueOf(battleParams.get("ammunition").toString()); - double food = Double.valueOf(battleParams.get("food").toString()); - double fuel = Double.valueOf(battleParams.get("fuel").toString()); - double medical = Double.valueOf(battleParams.get("medical").toString()); - double water = Double.valueOf(battleParams.get("water").toString()); - long death = Long.valueOf(battleParams.get("death").toString()); - long injured = Long.valueOf(battleParams.get("injured").toString()); - teamLat = battleParams.get( "teamLat").toString(); - teamLng = battleParams.get( "teamLng").toString(); - // - deathConsume = RandomUtil.getSecureRandom().nextInt(3) * intervalDuringTime; - injuredConsume = RandomUtil.getSecureRandom().nextInt(6) * intervalDuringTime; - ammunitionConsume = intervalDuringTime * (1D+RandomUtil.getSecureRandom().nextDouble()); - foodConsume = intervalDuringTime * FOOD_SPREED; - waterConsume = intervalDuringTime * WATER_SPREED; - fuelConsume = intervalDuringTime * FUEL_SPREED; - medicalConsume = intervalDuringTime * MEDICAL_SPREED; + double ammunition = Double.valueOf(scenarioInfoOnTime.getAmmunition().getCurrent()); + double food = Double.valueOf(scenarioInfoOnTime.getFood().getCurrent()); + double medical = Double.valueOf(scenarioInfoOnTime.getMedical().getCurrent()); + double water = Double.valueOf(scenarioInfoOnTime.getWater().getCurrent()); + long death = Long.valueOf(scenarioInfoOnTime.getPerson().getDeath()); + long injured = Long.valueOf(scenarioInfoOnTime.getPerson().getInjured()); + teamLat = scenarioInfoOnTime.getTeam().getLat().toString(); + teamLng = scenarioInfoOnTime.getTeam().getLng().toString(); + if(scenarioInfoOnTime.getPerson().getCurrent() >0) { + // + deathConsume = RandomUtil.getSecureRandom().nextInt(2) * intervalDuringTime* RoomManager.getMag(roomId); + injuredConsume = RandomUtil.getSecureRandom().nextInt(3) * intervalDuringTime* RoomManager.getMag(roomId); + ammunitionConsume = intervalDuringTime * (0.1D + RandomUtil.getSecureRandom().nextDouble())* RoomManager.getMag(roomId); + foodConsume = intervalDuringTime * FOOD_SPREED* RoomManager.getMag(roomId); + waterConsume = intervalDuringTime * WATER_SPREED* RoomManager.getMag(roomId); - battleParams.put("ammunition",Double.valueOf(ammunition - ammunitionConsume).toString()); - battleParams.put("food",Double.valueOf(food - foodConsume).toString()); - battleParams.put("fuel",Double.valueOf(fuel - fuelConsume).toString()); - battleParams.put("medical",Double.valueOf(medical - medicalConsume).toString()); - battleParams.put("water",Double.valueOf(water - waterConsume).toString()); - battleParams.put("death",Long.valueOf(death+deathConsume).toString()); - battleParams.put("injured",Long.valueOf(injured +injuredConsume).toString()); - battleParams.put("duringTime",Long.valueOf(duringTime).toString()); + medicalConsume = intervalDuringTime * MEDICAL_SPREED* RoomManager.getMag(roomId); - scenarioInfo.getAmmunition().setCurrent(Double.valueOf(ammunition - ammunitionConsume)); - scenarioInfo.getFood().setCurrent(Double.valueOf(food - foodConsume)); - scenarioInfo.getFuel().setCurrent(Double.valueOf(fuel - fuelConsume)); - scenarioInfo.getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); - scenarioInfo.getWater().setCurrent(Double.valueOf(water - waterConsume)); - scenarioInfo.getPerson().setDeath(Long.valueOf(death+deathConsume).intValue()); - scenarioInfo.getPerson().setInjured(Long.valueOf(injured +injuredConsume).intValue()); - scenarioInfo.getPerson().setCurrent(scenarioInfo.getPerson().getCurrent()-Long.valueOf(death+deathConsume).intValue()); - String updJsonStr= (String) redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"updScenarioInfo"); - EditScenarioInfo updScenarioInfo = JSON.parseObject(updJsonStr, EditScenarioInfo.class); - updScenarioInfo.getJbxx().getAmmunition().setCurrent(Double.valueOf(ammunition - ammunitionConsume)); - updScenarioInfo.getJbxx().getFood().setCurrent(Double.valueOf(food - foodConsume)); - updScenarioInfo.getJbxx().getFuel().setCurrent(Double.valueOf(fuel - fuelConsume)); - updScenarioInfo.getJbxx().getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); - updScenarioInfo.getJbxx().getWater().setCurrent(Double.valueOf(water - waterConsume)); - updScenarioInfo.getJbxx().getPerson().setDeath(Long.valueOf(death+deathConsume).intValue()); - updScenarioInfo.getJbxx().getPerson().setInjured(Long.valueOf(injured +injuredConsume).intValue()); - updScenarioInfo.getJbxx().getPerson().setCurrent(updScenarioInfo.getJbxx().getPerson().getCurrent()-Long.valueOf(death+deathConsume).intValue()); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "updScenarioInfo", JSON.toJSONString(updScenarioInfo)); - ResponseCmdInfo respObj = new ResponseCmdInfo<>(); - respObj.setData(JSON.toJSONString(updScenarioInfo)); - respObj.setRoom(roomId); - respObj.setScenarioId(scenarioTask.getScenarioId()); - respObj.setCmdType("updScenarioInfo"); - Global.sendCmdInfoQueue.add(respObj); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"duringTime",String.valueOf(duringTime)); - redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo",JSONObject.toJSONString(scenarioInfo)); + if(scenarioInfoOnTime.getAmmunition().getCurrent() >0) { + scenarioInfoOnTime.getAmmunition().setCurrent(Double.valueOf(ammunition - ammunitionConsume)); + } + if(scenarioInfoOnTime.getFood().getCurrent() > 0) { + scenarioInfoOnTime.getFood().setCurrent(Double.valueOf(food - foodConsume)); + } + if(scenarioInfoOnTime.getMedical().getCurrent() > 0) { + scenarioInfoOnTime.getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); + } + if(scenarioInfoOnTime.getWater().getCurrent() > 0) { + scenarioInfoOnTime.getWater().setCurrent(Double.valueOf(water - waterConsume)); + } + scenarioInfoOnTime.getPerson().setDeath(Long.valueOf(death + deathConsume).intValue()); + scenarioInfoOnTime.getPerson().setInjured(Long.valueOf(injured + injuredConsume).intValue()); + scenarioInfoOnTime.getPerson().setCurrent(scenarioInfo.getPerson().getCurrent() - Long.valueOf(deathConsume).intValue()-Long.valueOf(injuredConsume).intValue()); + + String updJsonStr = (String) redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "updScenarioInfo"); + EditScenarioInfo updScenarioInfo = JSON.parseObject(updJsonStr, EditScenarioInfo.class); + if(updScenarioInfo.getJbxx().getAmmunition().getCurrent() >0) { + updScenarioInfo.getJbxx().getAmmunition().setCurrent(Double.valueOf(ammunition - ammunitionConsume)); + } + if(updScenarioInfo.getJbxx().getFood().getCurrent() > 0) { + updScenarioInfo.getJbxx().getFood().setCurrent(Double.valueOf(food - foodConsume)); + } +// updScenarioInfo.getJbxx().getFuel().setCurrent(Double.valueOf(fuel - fuelConsume)); + if(updScenarioInfo.getJbxx().getMedical().getCurrent() > 0) { + updScenarioInfo.getJbxx().getMedical().setCurrent(Double.valueOf(medical - medicalConsume)); + } + if(updScenarioInfo.getJbxx().getWater().getCurrent() > 0) { + updScenarioInfo.getJbxx().getWater().setCurrent(Double.valueOf(water - waterConsume)); + } + updScenarioInfo.getJbxx().getPerson().setDeath(Long.valueOf(death + deathConsume).intValue()); + updScenarioInfo.getJbxx().getPerson().setInjured(Long.valueOf(injured + injuredConsume).intValue()); + updScenarioInfo.getJbxx().getPerson().setCurrent(updScenarioInfo.getJbxx().getPerson().getCurrent() - Long.valueOf(deathConsume).intValue()-Long.valueOf(injuredConsume).intValue()); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "updScenarioInfo", JSON.toJSONString(updScenarioInfo)); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + respObj.setData(JSON.toJSONString(updScenarioInfo)); + respObj.setRoom(roomId); + respObj.setScenarioId(scenarioTask.getScenarioId()); + respObj.setCmdType("updScenarioInfo"); + Global.sendCmdInfoQueue.add(respObj); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "duringTime", String.valueOf(duringTime)); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "scenarioInfo", JSONObject.toJSONString(scenarioInfoOnTime)); + } }catch (Exception ex){ + ex.printStackTrace(); log.error("==============================设置消耗信息失败=============================================",ex.getMessage()); } try { - //推送消耗數據 - ResponseCmdInfo sendConsumeMsg = new ResponseCmdInfo<>(); - jsonObject.put("deathConsume", deathConsume); - jsonObject.put("injuredConsume", injuredConsume); - jsonObject.put("ammunitionConsume", ammunitionConsume); - jsonObject.put("foodConsume", foodConsume); - jsonObject.put("waterConsume", waterConsume); - jsonObject.put("fuelConsume", fuelConsume); - jsonObject.put("medicalConsume", medicalConsume); - jsonObject.put("teamLat",teamLat); - jsonObject.put("teamLng",teamLng); - jsonObject.put("resourceId",scenarioTask.getResourceId()); - LocalDateTime currentDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - jsonObject.put("consumeDate",currentDateTime); - sendConsumeMsg.setData(jsonObject.toString()); - sendConsumeMsg.setRoom(roomId); - sendConsumeMsg.setScenarioId(scenarioTask.getScenarioId()); - sendConsumeMsg.setCmdType("battleConsume"); - Global.sendCmdInfoQueue.add(sendConsumeMsg); - BattleConsume battleConsume = new BattleConsume(); - battleConsume.setLat(teamLat); - battleConsume.setLng(teamLng); - battleConsume.setId(IdUtils.simpleUUID()); - battleConsume.setAmmunition(ammunitionConsume); - battleConsume.setDeath(Integer.valueOf(Double.valueOf(deathConsume).intValue())); - battleConsume.setInjured(Integer.valueOf(Double.valueOf(injuredConsume).intValue())); - battleConsume.setFood(foodConsume); - battleConsume.setFuel(fuelConsume); - battleConsume.setMedical(medicalConsume); - battleConsume.setWater(waterConsume); - battleConsume.setResourceId(scenarioTask.getResourceId()); - battleConsume.setConsumeDate(currentDateTime); - battleConsumeService.save(battleConsume); - if(injuredConsume>2&&!isAlreadyProduceTask.get()){ - //产生一个 + if(scenarioInfoOnTime.getPerson().getCurrent() >0) { + //推送消耗數據 + String battleConsumeStr = ""; + ResponseCmdInfo sendConsumeMsg = new ResponseCmdInfo<>(); + LocalDateTime currentDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + battleConsumeStr += currentDateTime.toString() + " 战斗消耗 ["; + battleConsumeStr += "死亡人数:" + deathConsume; + battleConsumeStr += "受伤人数:" + injuredConsume; + battleConsumeStr += "弹药消耗:" + ammunitionConsume; + battleConsumeStr += "食品消耗:" + foodConsume; + battleConsumeStr += "用水消耗:" + waterConsume; + battleConsumeStr += "药材消耗:" + medicalConsume + "]"; + jsonObject.put("teamLat",teamLat); + jsonObject.put("teamLng",teamLng); + jsonObject.put("resourceId", scenarioTask.getResourceId()); + jsonObject.put("消耗时间", currentDateTime); + jsonObject.put("日志类型", "战斗消耗"); + + sendConsumeMsg.setData(battleConsumeStr); + sendConsumeMsg.setRoom(roomId); + sendConsumeMsg.setScenarioId(scenarioTask.getScenarioId()); + sendConsumeMsg.setCmdType("battleConsume"); + Global.sendCmdInfoQueue.add(sendConsumeMsg); + BattleConsume battleConsume = new BattleConsume(); + battleConsume.setLat(teamLat); + battleConsume.setLng(teamLng); + battleConsume.setId(IdUtils.simpleUUID()); + battleConsume.setAmmunition(ammunitionConsume); + battleConsume.setDeath(Integer.valueOf(Double.valueOf(deathConsume).intValue())); + battleConsume.setInjured(Integer.valueOf(Double.valueOf(injuredConsume).intValue())); + battleConsume.setFood(foodConsume); +// battleConsume.setFuel(fuelConsume); + battleConsume.setMedical(medicalConsume); + battleConsume.setWater(waterConsume); + battleConsume.setResourceId(scenarioTask.getResourceId()); + battleConsume.setConsumeDate(currentDateTime); + battleConsumeService.save(battleConsume); + if (injuredConsume > 2 && !isAlreadyProduceTask.get()) { + //产生一个 + + } } }catch (Exception ex){ ex.printStackTrace(); @@ -225,76 +233,77 @@ public class BattleRootTask extends AbtParentTask { } try { - LocalDateTime currentDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - 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); - 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()); + if(scenarioInfoOnTime.getPerson().getCurrent() >0) { + LocalDateTime currentDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + 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); + + Double restAmmunition = Double.valueOf(scenarioInfoOnTime.getAmmunition().getCurrent()); // StatisticBean battleResourceStat = statisticService.statistic(scenarioTask.getResourceId()); - Double ammunitionConsumeRate = restAmmunition/scenarioInfo.getAmmunition().getTotal()*100; - if(Double.valueOf(ammunitionConsumeRate) <= Double.valueOf(ammunition) && suppleFlagMap.get("ammunition") == false){ - SupplierRequest supplierRequest = new SupplierRequest(); - supplierRequest.setId(IdUtils.simpleUUID()); - supplierRequest.setFromResourceId(scenarioTask.getResourceId()); - supplierRequest.setSupplierNum(String.valueOf(suppleAmount)); - supplierRequest.setSupplierType("ammunition"); - supplierRequest.setGeneralTime(currentDateTime); - supplierRequest.setLat(jsonObject.get("teamLat").toString()); - supplierRequest.setLng(jsonObject.get("teamLng").toString()); - supplierRequestService.save(supplierRequest); - ResponseCmdInfo respObj = new ResponseCmdInfo<>(); - respObj.setData(JSON.toJSONString(supplierRequest)); - respObj.setRoom(roomId); - respObj.setScenarioId(scenarioTask.getScenarioId()); - respObj.setCmdType("ammunitionRequest"); - Global.sendCmdInfoQueue.add(respObj); - suppleFlagMap.put("ammunition",true) ; - } - Long restDeath = Long.valueOf(scenarioInfo.getPerson().getDeath()); - Long deathConsumeRate = 0L; - if(scenarioInfo.getPerson().getTotal() !=0) { - deathConsumeRate = restDeath * 100 / scenarioInfo.getPerson().getTotal(); - } - if(deathConsumeRate >= Long.valueOf(death) && suppleFlagMap.get("death") == false){ - SupplierRequest supplierRequest = new SupplierRequest(); - supplierRequest.setId(IdUtils.simpleUUID()); - supplierRequest.setFromResourceId(scenarioTask.getResourceId()); - supplierRequest.setSupplierNum(String.valueOf(suppleDeath)); - supplierRequest.setSupplierType("death"); - supplierRequest.setGeneralTime(currentDateTime); - supplierRequest.setLat(jsonObject.get("teamLat").toString()); - supplierRequest.setLng(jsonObject.get("teamLng").toString()); - supplierRequestService.save(supplierRequest); - ResponseCmdInfo respObj = new ResponseCmdInfo<>(); - respObj.setData(JSON.toJSONString(supplierRequest)); - respObj.setRoom(roomId); - respObj.setScenarioId(scenarioTask.getScenarioId()); - respObj.setCmdType("deathRequest"); - Global.sendCmdInfoQueue.add(respObj); - suppleFlagMap.put("death",true) ; - } - Long restInjured = Long.valueOf(scenarioInfo.getPerson().getInjured()); - Long injuredConsumeRate = restInjured*100/scenarioInfo.getPerson().getTotal(); - if(Long.valueOf(injuredConsumeRate) <= Long.valueOf(injured) && suppleFlagMap.get("injured") == false){ - SupplierRequest supplierRequest = new SupplierRequest(); - supplierRequest.setId(IdUtils.simpleUUID()); - supplierRequest.setFromResourceId(scenarioTask.getResourceId()); - supplierRequest.setSupplierNum(String.valueOf(suppleInjured)); - supplierRequest.setSupplierType("injured"); - supplierRequest.setGeneralTime(currentDateTime); - supplierRequest.setLat(jsonObject.get("teamLat").toString()); - supplierRequest.setLng(jsonObject.get("teamLng").toString()); - supplierRequestService.save(supplierRequest); - ResponseCmdInfo respObj = new ResponseCmdInfo<>(); - respObj.setData(JSON.toJSONString(supplierRequest)); - respObj.setRoom(roomId); - respObj.setScenarioId(scenarioTask.getScenarioId()); - respObj.setCmdType("injuredRequest"); - Global.sendCmdInfoQueue.add(respObj); - suppleFlagMap.put("injured",true) ; + Double ammunitionConsumeRate = restAmmunition / scenarioInfoOnTime.getAmmunition().getTotal() * 100; + if (Double.valueOf(ammunitionConsumeRate) <= Double.valueOf(ammunition) && suppleFlagMap.get("ammunition") == false) { + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(String.valueOf(suppleAmount)); + supplierRequest.setSupplierType("ammunition"); + supplierRequest.setGeneralTime(currentDateTime); + supplierRequest.setLat(jsonObject.get("teamLat").toString()); + supplierRequest.setLng(jsonObject.get("teamLng").toString()); + supplierRequestService.save(supplierRequest); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + respObj.setData(JSON.toJSONString(supplierRequest)); + respObj.setRoom(roomId); + respObj.setScenarioId(scenarioTask.getScenarioId()); + respObj.setCmdType("ammunitionRequest"); + Global.sendCmdInfoQueue.add(respObj); + suppleFlagMap.put("ammunition", true); + } + Long restDeath = Long.valueOf(scenarioInfo.getPerson().getDeath()); + Long deathConsumeRate = 0L; + if (scenarioInfo.getPerson().getTotal() != 0) { + deathConsumeRate = restDeath * 100 / scenarioInfoOnTime.getPerson().getTotal(); + } + if (deathConsumeRate >= Long.valueOf(death) && suppleFlagMap.get("death") == false) { + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(String.valueOf(suppleDeath)); + supplierRequest.setSupplierType("death"); + supplierRequest.setGeneralTime(currentDateTime); + supplierRequest.setLat(jsonObject.get("teamLat").toString()); + supplierRequest.setLng(jsonObject.get("teamLng").toString()); + supplierRequestService.save(supplierRequest); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + respObj.setData(JSON.toJSONString(supplierRequest)); + respObj.setRoom(roomId); + respObj.setScenarioId(scenarioTask.getScenarioId()); + respObj.setCmdType("deathRequest"); + Global.sendCmdInfoQueue.add(respObj); + suppleFlagMap.put("death", true); + } + Long restInjured = Long.valueOf(scenarioInfoOnTime.getPerson().getInjured()); + Long injuredConsumeRate = restInjured * 100 / scenarioInfoOnTime.getPerson().getTotal(); + if (Long.valueOf(injuredConsumeRate) <= Long.valueOf(injured) && suppleFlagMap.get("injured") == false) { + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(String.valueOf(suppleInjured)); + supplierRequest.setSupplierType("injured"); + supplierRequest.setGeneralTime(currentDateTime); + supplierRequest.setLat(jsonObject.get("teamLat").toString()); + supplierRequest.setLng(jsonObject.get("teamLng").toString()); + supplierRequestService.save(supplierRequest); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + respObj.setData(JSON.toJSONString(supplierRequest)); + respObj.setRoom(roomId); + respObj.setScenarioId(scenarioTask.getScenarioId()); + respObj.setCmdType("injuredRequest"); + Global.sendCmdInfoQueue.add(respObj); + suppleFlagMap.put("injured", true); + } } }catch (Exception ex){ ex.printStackTrace(); diff --git a/src/main/java/com/hivekion/statistic/controller/StatisticController.java b/src/main/java/com/hivekion/statistic/controller/StatisticController.java index 7f9874c..fdd8e09 100644 --- a/src/main/java/com/hivekion/statistic/controller/StatisticController.java +++ b/src/main/java/com/hivekion/statistic/controller/StatisticController.java @@ -28,12 +28,12 @@ public class StatisticController { private StatisticService statisticService; @GetMapping("/info") - public ResponseData statistic(String resourceId) { return ResponseData.success(statisticService.statistic(resourceId)); } + @GetMapping("/battleConsume") public ResponseData> listBattleConsumeStatistic(){ List qryList = this.statisticService.listBattleConsumeStatistic(); return ResponseData.success(qryList); From fb926dc7a6a10d8a9cc8cb0d6c99b38a79360f92 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 06:24:08 +0800 Subject: [PATCH 37/38] =?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 | 6 ++-- .../hivekion/room/bean/BattleRootTask.java | 3 -- .../java/com/hivekion/room/bean/MoveTask.java | 2 +- .../com/hivekion/room/bean/SupplierTask.java | 14 ++++++++- src/main/java/com/hivekion/ws/WsServer.java | 30 ++++++++++--------- .../resources/application-rule.properties | 4 +-- 6 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index d6bfa10..6f49f67 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -348,7 +348,7 @@ public abstract class AbtParentTask implements TaskAction { this.scenarioTask.getResourceId()); editScenarioInfo.getJbxx().getTeam().setLat(coordinate.getLat() + ""); editScenarioInfo.getJbxx().getTeam().setLng(coordinate.getLng() + ""); - setEditScenarioInfo(editScenarioInfo); + setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId()); pushStatus(scenarioTask.getResourceId()); } else if (Double.compare(distance, endPoint.getKey()) == 0) { @@ -399,9 +399,9 @@ public abstract class AbtParentTask implements TaskAction { return JSON.parseObject(updJsonStr, EditScenarioInfo.class); } - protected void setEditScenarioInfo(EditScenarioInfo editScenarioInfo) { + protected void setEditScenarioInfo(EditScenarioInfo editScenarioInfo,String resourceId) { SpringUtil.getBean(RedisUtil.class).hset( - this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + this.scenarioTask.getScenarioId() + "-" + roomId + "-" + resourceId, "updScenarioInfo", JSON.toJSONString(editScenarioInfo)); } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index b522cb4..14e2df8 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -215,10 +215,7 @@ 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 aacff44..9a256bc 100644 --- a/src/main/java/com/hivekion/room/bean/MoveTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveTask.java @@ -108,7 +108,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); + setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId()); //插入消耗表 insertConsumption(currentUseUp); diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index e169382..3629d32 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -5,6 +5,7 @@ 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; @@ -32,7 +33,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { StatisticBean statistic = SpringUtil.getBean(StatisticService.class) .statistic(scenarioTask.getResourceId()); initPath(); //初始化路径 - updatePath(30, null, new TaskAction() { + updatePath(50, null, new TaskAction() { @Override public void doSomeThing() { @@ -113,12 +114,22 @@ public class SupplierTask extends AbtParentTask implements TaskAction { "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(), @@ -131,6 +142,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction { } } + private void supplierAmmunition(StatisticBean statistic) { //保障分队 diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index a113a26..6b84e62 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -33,8 +33,8 @@ public class WsServer { // key -> 当前key下所有会话 private static final Map>> SESSION_MAP = new ConcurrentHashMap<>(); - private static final Object lock = new Object(); - + private static final Object lock = new Object(); + private static final Object receiveLock = new Object(); @OnOpen public void onOpen(Session session, @@ -86,17 +86,19 @@ public class WsServer { @OnMessage public void onMessage(String message, Session session, @PathParam("room") String room, @PathParam("scenarioId") Integer scenarioId) { - try { - log.info("onMessage::room: {}, message: {}", room, message); - RequestCmdInfo requestCmdInfo = new RequestCmdInfo(); - requestCmdInfo.setScenarioId((scenarioId)); - requestCmdInfo.setRoom(room); - requestCmdInfo.setCmdType(JSON.parseObject(message,RequestCmdInfo.class).getCmdType()); + synchronized (receiveLock) { + try { + log.info("onMessage::room: {}, message: {}", room, message); + 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) { - log.error("onMessage::room: {}, message: {},error::", room, message, e); + requestCmdInfo.setMessage(message); + Global.receiveCmdInfoQueue.add(requestCmdInfo); + } catch (Exception e) { + log.error("onMessage::room: {}, message: {},error::", room, message, e); + } } @@ -114,11 +116,11 @@ public class WsServer { } public static void sendMessage(Integer scenarioId, String room, String message) { - // log.info("send {},{},{}", message, scenarioId, room); + // log.info("send {},{},{}", message, scenarioId, room); synchronized (lock) { Map> roomMap = SESSION_MAP.get(String.valueOf(scenarioId)); - // log.info("roomMap:{}", roomMap); + // log.info("roomMap:{}", roomMap); if (roomMap != null) { if (roomMap.containsKey(room)) { Map singleRoomMap = roomMap.get(room); diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index 0e71ef1..029efca 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -3,12 +3,12 @@ death.warn = 56 ammunition.warn = 3 food.warn = 3 water.warn = 3 -fuel.warn = 99.99 +fuel.warn = 95.99 medical.warn = 1 death.spreed = 3 injured.spreed = 3 ammunition.spreed = 2.6 food.spreed = 2.3 water.spreed = 3.6 -fuel.spreed = 0.04 +fuel.spreed = 0.4 medical.spreed = 1.6 \ No newline at end of file From ee505e3fb000664224cca2200482e1abffc6f52d 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 07:57:53 +0800 Subject: [PATCH 38/38] =?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/bean/Room.java | 9 ++- .../scenario/bean/StatisticConsumeBean.java | 24 +++++++ .../controller/BattleConsumeController.java | 39 ++++++++++- .../controller/ScenarioRoomController.java | 1 + .../scenario/mapper/BattleConsumeMapper.java | 5 +- .../service/IBattleConsumeService.java | 5 +- .../impl/BattleConsumeServiceImpl.java | 12 ++++ .../service/impl/ScenarioTaskServiceImpl.java | 5 ++ .../thread/HandleReceiveRunnable.java | 70 ++++++++++++------- src/main/java/com/hivekion/ws/WsServer.java | 2 +- .../mapper/tbl/BattleConsumeMapper.xml | 32 +++++++++ 11 files changed, 170 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/hivekion/scenario/bean/StatisticConsumeBean.java diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 41a4974..716ad74 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -28,6 +28,7 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -68,6 +69,8 @@ public class Room implements AutoCloseable { private RedisUtil redisUtil; private com.hivekion.statistic.service.ScenarioService scenarioService; + + private AtomicInteger numStatus = new AtomicInteger(0); /** * 任务容器 */ @@ -111,12 +114,14 @@ public class Room implements AutoCloseable { //初始化系统资源 物资人员等信息 initRoomParam(); pushRoomInfo(); + numStatus.set(1); } /** * 停止 */ public void stop() { + numStatus.set(3); status.set(false); pushRoomInfo(); cancelTask(); @@ -135,7 +140,7 @@ public class Room implements AutoCloseable { * 暂停 */ public void pause() { - + numStatus.set(2); status.set(false); pushRoomInfo(); cancelTask(); @@ -281,7 +286,7 @@ public class Room implements AutoCloseable { ResponseCmdInfo respObj = new ResponseCmdInfo<>(); Map dataMap = new HashMap<>(); dataMap.put("mag", this.getMag()); - dataMap.put("status", this.getStatus()); + dataMap.put("status", this.numStatus.get()); respObj.setData(dataMap); respObj.setRoom(this.getRoomId()); respObj.setScenarioId(this.getScenario().getId()); diff --git a/src/main/java/com/hivekion/scenario/bean/StatisticConsumeBean.java b/src/main/java/com/hivekion/scenario/bean/StatisticConsumeBean.java new file mode 100644 index 0000000..c7e1f32 --- /dev/null +++ b/src/main/java/com/hivekion/scenario/bean/StatisticConsumeBean.java @@ -0,0 +1,24 @@ +package com.hivekion.scenario.bean; + +import lombok.Data; + +/** + * [类的简要说明] + *

+ * [详细描述,可选] + *

+ * + * @author LiDongYU + * @since 2025/7/22 + */ +@Data +public class StatisticConsumeBean { + private String minute; + private double food; + private double fuel; + private double water; + private double medical; + private double ammunition; + private String resourceId; + private String resourceName; +} diff --git a/src/main/java/com/hivekion/scenario/controller/BattleConsumeController.java b/src/main/java/com/hivekion/scenario/controller/BattleConsumeController.java index cb17d98..d74c197 100644 --- a/src/main/java/com/hivekion/scenario/controller/BattleConsumeController.java +++ b/src/main/java/com/hivekion/scenario/controller/BattleConsumeController.java @@ -1,7 +1,17 @@ package com.hivekion.scenario.controller; +import com.hivekion.common.entity.ResponseData; +import com.hivekion.scenario.bean.StatisticConsumeBean; +import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.scenario.service.IBattleConsumeService; +import com.hivekion.scenario.service.ScenarioResourceService; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RestController; /** *

@@ -11,8 +21,33 @@ import org.springframework.stereotype.Controller; * @author liDongYu * @since 2025-09-19 */ -@Controller +@RestController @RequestMapping("/scenario/battleConsume") public class BattleConsumeController { + @Resource + private IBattleConsumeService battleConsumeService; + @Resource + private ScenarioResourceService scenarioResourceService; + + @GetMapping("/statistic/minute") + public ResponseData> statisticByMinute() { + return ResponseData.success(battleConsumeService.statistic()); + } + + @GetMapping("/statistic/resource") + public ResponseData> statisticByResource() { + + List list = battleConsumeService.statisticByResource(); + Map resourceMap = scenarioResourceService.resourceMap(); + + list.forEach(item -> { + + if (resourceMap.get(item.getResourceId()) != null) { + item.setResourceName(resourceMap.get(item.getResourceId()).getResourceName()); + } + }); + return ResponseData.success(list.stream().filter(a->a.getResourceName()!=null).collect( + Collectors.toList())); + } } diff --git a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java index c70294e..ac89768 100644 --- a/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java +++ b/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java @@ -117,6 +117,7 @@ public class ScenarioRoomController extends BaseController { SecurityUtils.getCurrentLoginUser().getUsername())); scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.STARTED.getCode()); + scenarioTaskService.start(room.getScenarioId(), room.getId()); return ResponseData.success(null); } diff --git a/src/main/java/com/hivekion/scenario/mapper/BattleConsumeMapper.java b/src/main/java/com/hivekion/scenario/mapper/BattleConsumeMapper.java index e8f29e7..38b0c62 100644 --- a/src/main/java/com/hivekion/scenario/mapper/BattleConsumeMapper.java +++ b/src/main/java/com/hivekion/scenario/mapper/BattleConsumeMapper.java @@ -1,7 +1,9 @@ package com.hivekion.scenario.mapper; +import com.hivekion.scenario.bean.StatisticConsumeBean; import com.hivekion.scenario.entity.BattleConsume; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; /** *

@@ -12,5 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2025-09-19 */ public interface BattleConsumeMapper extends BaseMapper { - + List statistic(); + List statisticByResource(); } diff --git a/src/main/java/com/hivekion/scenario/service/IBattleConsumeService.java b/src/main/java/com/hivekion/scenario/service/IBattleConsumeService.java index 6d74af7..cba48e0 100644 --- a/src/main/java/com/hivekion/scenario/service/IBattleConsumeService.java +++ b/src/main/java/com/hivekion/scenario/service/IBattleConsumeService.java @@ -1,7 +1,9 @@ package com.hivekion.scenario.service; +import com.hivekion.scenario.bean.StatisticConsumeBean; import com.hivekion.scenario.entity.BattleConsume; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -12,5 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2025-09-19 */ public interface IBattleConsumeService extends IService { - + List statistic(); + List statisticByResource(); } diff --git a/src/main/java/com/hivekion/scenario/service/impl/BattleConsumeServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/BattleConsumeServiceImpl.java index 3b5c151..3942b62 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/BattleConsumeServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/BattleConsumeServiceImpl.java @@ -1,9 +1,12 @@ package com.hivekion.scenario.service.impl; +import com.hivekion.scenario.bean.StatisticConsumeBean; import com.hivekion.scenario.entity.BattleConsume; import com.hivekion.scenario.mapper.BattleConsumeMapper; import com.hivekion.scenario.service.IBattleConsumeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.Collections; +import java.util.List; import org.springframework.stereotype.Service; /** @@ -17,4 +20,13 @@ import org.springframework.stereotype.Service; @Service public class BattleConsumeServiceImpl extends ServiceImpl implements IBattleConsumeService { + @Override + public List statistic() { + return this.baseMapper.statistic(); + } + + @Override + public List statisticByResource() { + return this.baseMapper.statisticByResource(); + } } 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 cd8a5b0..4b5c61f 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -49,13 +49,17 @@ public class ScenarioTaskServiceImpl extends @Override public void start(Integer scenarioId, String roomId) { //查询想定的持续时间 + Scenario scenario = scenarioService.getScenarioById(scenarioId); if (scenario != null) { //查看想定的持续时间 long duringTime = Duration.between(scenario.getStartTime(),scenario.getEndTime() ) .getSeconds(); + RoomManager.startRoom(roomId, scenario, duringTime); + addWeatherEvent(scenario, roomId); + addTaskEvent(scenario, roomId); } } @@ -145,6 +149,7 @@ 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); diff --git a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java index 7f2d3d1..61ff83e 100644 --- a/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java +++ b/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java @@ -30,22 +30,30 @@ public class HandleReceiveRunnable implements Runnable { try { RequestCmdInfo requestCmdInfo = Global.receiveCmdInfoQueue.take(); - handleMessage(requestCmdInfo); - //消息分发业务bean处理 - if (SpringUtil.getBean(WebsocketMsgWrapper.class) != null) { - try { - WebsocketMsgWrapper websocketMsgWrapper = SpringUtil.getBean(WebsocketMsgWrapper.class); - websocketMsgWrapper.msgHandle(requestCmdInfo.getScenarioId(), requestCmdInfo.getRoom(), - requestCmdInfo.getResourceId(), requestCmdInfo.getMessage()); - } catch (Exception e) { - log.error("error::", e); - } + switch (requestCmdInfo.getCmdType()) { + case "get_init_path": + case "get_room_info": + handleMessage(requestCmdInfo); + break; + default: + //消息分发业务bean处理 + if (SpringUtil.getBean(WebsocketMsgWrapper.class) != null) { + try { + WebsocketMsgWrapper websocketMsgWrapper = SpringUtil.getBean(WebsocketMsgWrapper.class); + websocketMsgWrapper.msgHandle(requestCmdInfo.getScenarioId(), requestCmdInfo.getRoom(), + requestCmdInfo.getResourceId(), requestCmdInfo.getMessage()); + } catch (Exception e) { + log.error("error::", e); + } - } else { - log.warn("==================WebsocketMsgWrapper is null=========================="); + } else { + log.warn("==================WebsocketMsgWrapper is null=========================="); + } } + + } catch (Exception e) { log.error("error::", e); } @@ -72,21 +80,29 @@ 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 handleGetRootInfo(RequestCmdInfo requestCmdInfo) { + log.info("接收到获取到房间信息::{}", JSON.toJSONString(requestCmdInfo)); + Room room = RoomManager.getRoom(requestCmdInfo.getRoom()); + log.info("room::{}", room); + ResponseCmdInfo respObj = new ResponseCmdInfo<>(); + Map dataMap = new HashMap<>(); + respObj.setData(dataMap); + respObj.setRoom(requestCmdInfo.getRoom()); + respObj.setScenarioId(requestCmdInfo.getScenarioId()); + respObj.setCmdType("room_info"); + + if (room != null) { + + dataMap.put("status", room.getNumStatus().get()); + dataMap.put("mag", room.getMag()); + } else { + dataMap.put("status", 0); + dataMap.put("mag", 1); + } + 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/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index 6b84e62..e4e55a7 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -116,7 +116,7 @@ public class WsServer { } public static void sendMessage(Integer scenarioId, String room, String message) { - // log.info("send {},{},{}", message, scenarioId, room); + log.info("send {},{},{}", message, scenarioId, room); synchronized (lock) { Map> roomMap = SESSION_MAP.get(String.valueOf(scenarioId)); diff --git a/src/main/resources/mapper/tbl/BattleConsumeMapper.xml b/src/main/resources/mapper/tbl/BattleConsumeMapper.xml index 8537969..e0a8f4a 100644 --- a/src/main/resources/mapper/tbl/BattleConsumeMapper.xml +++ b/src/main/resources/mapper/tbl/BattleConsumeMapper.xml @@ -1,5 +1,37 @@ + +