diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 3c3d60a..a8a0796 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -333,6 +333,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();