diff --git a/src/main/java/com/hivekion/baseData/entity/OrgSupplier.java b/src/main/java/com/hivekion/baseData/entity/OrgSupplier.java index 46c737a..39c0d75 100644 --- a/src/main/java/com/hivekion/baseData/entity/OrgSupplier.java +++ b/src/main/java/com/hivekion/baseData/entity/OrgSupplier.java @@ -33,5 +33,6 @@ public class OrgSupplier implements Serializable { @TableField(exist = false) private String name; + } diff --git a/src/main/java/com/hivekion/baseData/mapper/FightpowerstaffMapper.java b/src/main/java/com/hivekion/baseData/mapper/FightpowerstaffMapper.java index 8a036de..82ed3a1 100644 --- a/src/main/java/com/hivekion/baseData/mapper/FightpowerstaffMapper.java +++ b/src/main/java/com/hivekion/baseData/mapper/FightpowerstaffMapper.java @@ -2,6 +2,7 @@ package com.hivekion.baseData.mapper; import com.hivekion.baseData.entity.Fightpowerstaff; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; /** *

@@ -12,5 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2025-08-07 */ public interface FightpowerstaffMapper extends BaseMapper { - + List queryByOrgIds(List ids); } diff --git a/src/main/java/com/hivekion/baseData/mapper/OrgSupplierMapper.java b/src/main/java/com/hivekion/baseData/mapper/OrgSupplierMapper.java index 7557d68..22346d9 100644 --- a/src/main/java/com/hivekion/baseData/mapper/OrgSupplierMapper.java +++ b/src/main/java/com/hivekion/baseData/mapper/OrgSupplierMapper.java @@ -2,7 +2,7 @@ package com.hivekion.baseData.mapper; import com.hivekion.baseData.entity.OrgSupplier; import com.baomidou.mybatisplus.core.mapper.BaseMapper; - +import java.util.List; /** *

* Mapper 接口 @@ -12,5 +12,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2025-09-14 */ public interface OrgSupplierMapper extends BaseMapper { - + List selectByOrgIds(List ids); } diff --git a/src/main/java/com/hivekion/baseData/service/FightpowerstaffService.java b/src/main/java/com/hivekion/baseData/service/FightpowerstaffService.java index 9dec0ed..6836223 100644 --- a/src/main/java/com/hivekion/baseData/service/FightpowerstaffService.java +++ b/src/main/java/com/hivekion/baseData/service/FightpowerstaffService.java @@ -14,4 +14,5 @@ import java.util.List; */ public interface FightpowerstaffService extends IService { List queryListByOrgId(Integer orgId); + List queryByOrgIds(List ids); } diff --git a/src/main/java/com/hivekion/baseData/service/OrgSupplierService.java b/src/main/java/com/hivekion/baseData/service/OrgSupplierService.java index 17f338a..a8832d3 100644 --- a/src/main/java/com/hivekion/baseData/service/OrgSupplierService.java +++ b/src/main/java/com/hivekion/baseData/service/OrgSupplierService.java @@ -13,5 +13,6 @@ import java.util.List; * @since 2025-09-14 */ public interface OrgSupplierService extends IService { - public List getByOrgId(Integer orgId); + List getByOrgId(Integer orgId); + List selectByOrgIds(List ids); } diff --git a/src/main/java/com/hivekion/baseData/service/impl/FightpowerstaffServiceImpl.java b/src/main/java/com/hivekion/baseData/service/impl/FightpowerstaffServiceImpl.java index aab299d..681ed37 100644 --- a/src/main/java/com/hivekion/baseData/service/impl/FightpowerstaffServiceImpl.java +++ b/src/main/java/com/hivekion/baseData/service/impl/FightpowerstaffServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hivekion.baseData.entity.Fightpowerstaff; import com.hivekion.baseData.mapper.FightpowerstaffMapper; import com.hivekion.baseData.service.FightpowerstaffService; +import java.util.Collections; import java.util.List; import org.springframework.stereotype.Service; @@ -27,4 +28,9 @@ public class FightpowerstaffServiceImpl extends queryWrapper.eq("parent_id", orgId); return this.list(queryWrapper); } + + @Override + public List queryByOrgIds(List ids) { + return this.baseMapper.queryByOrgIds(ids); + } } diff --git a/src/main/java/com/hivekion/baseData/service/impl/OrgSupplierServiceImpl.java b/src/main/java/com/hivekion/baseData/service/impl/OrgSupplierServiceImpl.java index 7492a0f..86275d3 100644 --- a/src/main/java/com/hivekion/baseData/service/impl/OrgSupplierServiceImpl.java +++ b/src/main/java/com/hivekion/baseData/service/impl/OrgSupplierServiceImpl.java @@ -27,4 +27,9 @@ public class OrgSupplierServiceImpl extends ServiceImpl selectByOrgIds(List ids) { + return this.baseMapper.selectByOrgIds(ids); + } } diff --git a/src/main/java/com/hivekion/scenario/service/IScenarioOrgPostService.java b/src/main/java/com/hivekion/scenario/service/IScenarioOrgPostService.java index 2ca5367..37beb64 100644 --- a/src/main/java/com/hivekion/scenario/service/IScenarioOrgPostService.java +++ b/src/main/java/com/hivekion/scenario/service/IScenarioOrgPostService.java @@ -17,4 +17,5 @@ public interface IScenarioOrgPostService extends IService { void removeByCondition(ScenarioOrgPost scenarioOrgPost); List selectByCondition(ScenarioOrgPost scenarioOrgPost); List getSelectOrgId(ScenarioOrgPost scenarioOrgPost); + } 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 222ec5c..5b71f01 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -63,13 +63,13 @@ public class ScenarioTaskServiceImpl extends this.start(2746,"1"); } @Override - public void start(Integer id, String roomId) { - log.info("id::{},roomId::{}",id,roomId); - Scenario currentScenario = scenarioService.getScenarioById(id); + public void start(Integer scenarioId, String roomId) { + log.info("scenarioId::{},roomId::{}",scenarioId,roomId); + Scenario currentScenario = scenarioService.getScenarioById(scenarioId); //想定当前持续时间 - redisUtil.hset(roomId + "_" + id, "duringTime", "0"); + redisUtil.hset(roomId + "_" + scenarioId, "duringTime", "0"); //想定当前状态 - redisUtil.hset(roomId + "_" + id, "states", "running"); + redisUtil.hset(roomId + "_" + scenarioId, "states", "running"); @@ -95,18 +95,18 @@ public class ScenarioTaskServiceImpl extends redisUtil.hset(roomId + "_" + id, "weather", JSON.toJSONString(jsonArray)); //查询任务 ScenarioTask queryTask = new ScenarioTask(); - queryTask.setScenarioId(id); -// redisUtil.hset(roomId + "_" + id, "taskList", queryTaskList(queryTask)); + queryTask.setScenarioId(scenarioId); + redisUtil.hset(roomId + "_" + scenarioId, "taskList", JSON.toJSONString(queryTaskList(queryTask))); new Thread(() -> { - springGlobalTaskManager.startPerSecondTask(roomId + "_" + id + "_task", () -> { + springGlobalTaskManager.startPerSecondTask(roomId + "_" + scenarioId + "_task", () -> { //时间累计 increaseTime(currentScenario, roomId); //天气触发 weatherTrigger(currentScenario, roomId); //任务触发 -// taskTrigger(currentScenario, roomId); + taskTrigger(currentScenario, roomId); }); }).start(); @@ -129,6 +129,7 @@ public class ScenarioTaskServiceImpl extends private void increaseTime(Scenario currentScenario, String roomId) { try{ + log.info("currentScenario:;{}",currentScenario); int mag = Global.roomParamMap.get(currentScenario.getId() + "_" + roomId) == null ? 1 : Global.roomParamMap.get(currentScenario.getId() + "_" + roomId).getMag(); //获取当前状态 @@ -206,9 +207,22 @@ public class ScenarioTaskServiceImpl extends } - + /** + * 获取当前想定从开始到现在时间 + * @param scenario + * @param roomId + * @return + */ + private int getCurrentDuringTime(Scenario scenario, String roomId) { + Object duringTime = redisUtil.hget(roomId + "_" + scenario.getId(), "duringTime"); + if (duringTime != null) { + return (Integer) duringTime; + } + return 0; + } private void taskTrigger(Scenario currentScenario, String roomId) { try{ + log.info("{}",currentScenario); Object statusObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "status"); if (statusObj != null && statusObj.toString().equals("running")) { Object taskListObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "taskList"); diff --git a/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java index ecd2278..cd067a3 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/TaskLogicServiceImpl.java @@ -191,6 +191,12 @@ public class TaskLogicServiceImpl implements TaskLogicService { Global.sendCmdInfoQueue.add(cmdInfo); } + /** + * 获取当前想定从开始到现在时间 + * @param scenario + * @param roomId + * @return + */ private int getCurrentDuringTime(Scenario scenario, String roomId) { Object duringTime = redisUtil.hget(roomId + "_" + scenario.getId(), "duringTime"); if (duringTime != null) { 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 e70fdcd..f296fbf 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java @@ -1,8 +1,12 @@ package com.hivekion.statistic.service.impl; +import com.hivekion.baseData.entity.Fightpowerstaff; import com.hivekion.baseData.entity.OrgSupplier; +import com.hivekion.baseData.service.FightpowerstaffService; import com.hivekion.baseData.service.OrgSupplierService; +import com.hivekion.scenario.entity.ScenarioOrgPost; import com.hivekion.scenario.entity.ScenarioResource; +import com.hivekion.scenario.service.IScenarioOrgPostService; import com.hivekion.scenario.service.ScenarioResourceService; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.StatisticService; @@ -10,7 +14,9 @@ import com.hivekion.supplier.entity.SuppliesDict; import com.hivekion.supplier.service.SuppliesDictService; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** @@ -23,6 +29,7 @@ import org.springframework.stereotype.Service; * @since 2025/7/22 */ @Service +@Slf4j public class StatisticServiceImpl implements StatisticService { @Resource @@ -31,7 +38,10 @@ public class StatisticServiceImpl implements StatisticService { private OrgSupplierService orgSupplierService; @Resource private SuppliesDictService suppliesDictService; - + @Resource + private IScenarioOrgPostService scenarioOrgPostService; + @Resource + private FightpowerstaffService fightpowerstaffService; @Override public StatisticBean statistic(String resourceId) { StatisticBean statisticBean = new StatisticBean(); @@ -40,37 +50,55 @@ public class StatisticServiceImpl implements StatisticService { if(resourceInstance == null){ return statisticBean; } + statisticBean.getTeam().setType(resourceInstance.getType()); statisticBean.getTeam().setLat(resourceInstance.getLat()); statisticBean.getTeam().setLng(resourceInstance.getLng()); statisticBean.getTeam().setTeamName(resourceInstance.getResourceName()); + //获取关联的组织机构信息 + ScenarioOrgPost post = new ScenarioOrgPost(); + post.setResourceId(resourceId); + List orgPostList = scenarioOrgPostService.selectByCondition(post); + List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) + .collect(Collectors.toList()); + //获取人员信息 + List staffList = fightpowerstaffService.queryByOrgIds(orgList); + int sum = staffList.stream() + .mapToInt(Fightpowerstaff::getNumber) + .sum(); + statisticBean.getPerson().setCurrent(sum); + statisticBean.getPerson().setTotal(sum); //获取物资信息 - List suppliers = orgSupplierService.getByOrgId(resourceInstance.getResourceId()); + List suppliers = orgSupplierService.selectByOrgIds(orgList); + Map supplierMap = suppliesDictService.supplierDictMap(); + suppliers.forEach(supplier -> { - SuppliesDict dict = supplierMap.get(supplier.getId()); + + SuppliesDict dict = supplierMap.get(supplier.getSupplierId()); + if (dict != null) { switch (dict.getCode()) { case "FOOD": - statisticBean.getFood().setTotal(supplier.getAccount()); - statisticBean.getFood().setCurrent(supplier.getAccount()); + statisticBean.getFood().setTotal(statisticBean.getFood().getTotal()+supplier.getAccount()); + statisticBean.getFood().setCurrent(statisticBean.getFood().getCurrent()+supplier.getAccount()); break; case "WATER": - statisticBean.getWater().setTotal(supplier.getAccount()); - statisticBean.getWater().setCurrent(supplier.getAccount()); + statisticBean.getWater().setTotal(statisticBean.getWater().getTotal()+supplier.getAccount()); + statisticBean.getWater().setCurrent(statisticBean.getWater().getCurrent()+supplier.getAccount()); break; case "FUEL": - statisticBean.getFuel().setTotal(supplier.getAccount()); - statisticBean.getFuel().setCurrent(supplier.getAccount()); + statisticBean.getFuel().setTotal(statisticBean.getFuel().getTotal()+supplier.getAccount()); + statisticBean.getFuel().setCurrent(statisticBean.getFuel().getCurrent()+supplier.getAccount()); break; case "MEDICAL": - statisticBean.getMedical().setTotal(supplier.getAccount()); - statisticBean.getMedical().setCurrent(supplier.getAccount()); + statisticBean.getMedical().setTotal( statisticBean.getMedical().getTotal()+supplier.getAccount()); + statisticBean.getMedical().setCurrent( statisticBean.getMedical().getCurrent()+supplier.getAccount()); break; case "AMMUNITION": - statisticBean.getAmmunition().setTotal(supplier.getAccount()); - statisticBean.getAmmunition().setCurrent(supplier.getAccount()); + statisticBean.getAmmunition().setTotal( statisticBean.getAmmunition().getTotal()+supplier.getAccount()); + statisticBean.getAmmunition().setCurrent(statisticBean.getAmmunition().getCurrent()+supplier.getAccount()); break; default: break; diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index 63c64f5..9739497 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -1,7 +1,10 @@ package com.hivekion.ws; +import com.alibaba.fastjson2.JSON; import com.hivekion.Global; import com.hivekion.common.entity.RequestCmdInfo; +import com.hivekion.common.entity.ResponseCmdInfo; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.websocket.OnClose; @@ -57,6 +60,14 @@ public class WsServer { } + try{ + session.getBasicRemote().sendText(testWeatherJson("start_rain")); + Thread.sleep(10000); + session.getBasicRemote().sendText(testWeatherJson("start_snow")); + }catch (Exception e){ + log.error("error::",e); + } + } } @@ -111,10 +122,24 @@ public class WsServer { if (roomMap.containsKey(room)) { Map singleRoomMap = roomMap.get(room); singleRoomMap.forEach((sessionId, session) -> { - session.getAsyncRemote().sendText(message); + try{ + session.getBasicRemote().sendText(message); + }catch (Exception e){ + log.error("error::",e); + } + }); } } } - + private String testWeatherJson(String tag){ + ResponseCmdInfo responseCmdInfo = new ResponseCmdInfo(); + responseCmdInfo.setCmdType(tag); + responseCmdInfo.setRoom("123"); + responseCmdInfo.setScenarioId(2746); + Map data = new HashMap<>(); + data.put("begTime","2028-03-09 10:00:00"); + data.put("endTime","2028-03-19 00:20:00"); + return JSON.toJSONString(responseCmdInfo); + } } diff --git a/src/main/resources/mapper/tbl/FightpowerstaffMapper.xml b/src/main/resources/mapper/tbl/FightpowerstaffMapper.xml index e6c7d77..6d6b815 100644 --- a/src/main/resources/mapper/tbl/FightpowerstaffMapper.xml +++ b/src/main/resources/mapper/tbl/FightpowerstaffMapper.xml @@ -1,5 +1,10 @@ - + diff --git a/src/main/resources/mapper/tbl/OrgSupplierMapper.xml b/src/main/resources/mapper/tbl/OrgSupplierMapper.xml index 47aebc4..298cded 100644 --- a/src/main/resources/mapper/tbl/OrgSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/OrgSupplierMapper.xml @@ -1,5 +1,19 @@ - + + + + + + + + + +