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()){