Compare commits

..

No commits in common. "25507ce2aafeb1dc11323d4bacfb02c1a7db4f91" and "50395edce46440cbe07cd4f3f940690d08e2ef1d" have entirely different histories.

4 changed files with 92 additions and 145 deletions

View File

@ -106,7 +106,6 @@ public class Scenario extends SearchInputVo {
private String leftBottomLat; private String leftBottomLat;
@TableField(value = "right_bottom_lat") @TableField(value = "right_bottom_lat")
private String rightBottomLat; private String rightBottomLat;
private String desc;
/** /**
* 想定关联的资源列表 * 想定关联的资源列表
*/ */

View File

@ -14,7 +14,6 @@ import com.hivekion.enums.WsCmdTypeEnum;
import com.hivekion.room.RoomManager; import com.hivekion.room.RoomManager;
import com.hivekion.room.func.TaskAction; import com.hivekion.room.func.TaskAction;
import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.entity.ScenarioTask;
import com.hivekion.statistic.bean.ScenarioInfo;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -34,7 +33,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
@ -65,7 +63,7 @@ public abstract class AbtParentTask implements TaskAction {
//http请求 //http请求
protected WebClient webClient = WebClient.create(); protected WebClient webClient = WebClient.create();
protected final AtomicBoolean canMoved = new AtomicBoolean(true); protected final AtomicBoolean canMoved = new AtomicBoolean(true);
protected final AtomicReference<Coordinate> coordinateReference = new AtomicReference<>(); protected final AtomicReference<Coordinate> coordinateReference = new AtomicReference<>();
/** /**
* 任务相对与想定的开始时间 * 任务相对与想定的开始时间
@ -204,7 +202,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); AtomicLong duringTime = new AtomicLong(0);
ScheduledExecutorService schedule = Executors.newScheduledThreadPool( ScheduledExecutorService schedule = Executors.newScheduledThreadPool(
1); 1);
@ -215,13 +213,13 @@ public abstract class AbtParentTask implements TaskAction {
if (distanceInfoMap.isEmpty()) { if (distanceInfoMap.isEmpty()) {
return; return;
} }
if (!this.canMoved.get()) { if(!this.canMoved.get()){
return; return;
} }
log.info("{}-移动中,canRemove::{}", this.scenarioTask.getResourceId(), log.info("{}-移动中,canRemove::{}",this.scenarioTask.getResourceId(),this.canMoved.get());
this.canMoved.get());
if (duringAction != null) {
if(duringAction!=null){
duringAction.doSomeThing(); duringAction.doSomeThing();
} }
//跑动距离 //跑动距离
@ -233,7 +231,7 @@ public abstract class AbtParentTask implements TaskAction {
endPoint = distanceInfoMap.lastEntry(); endPoint = distanceInfoMap.lastEntry();
} }
// log.info("enPoint::{}",endPoint); // log.info("enPoint::{}",endPoint);
//ws数据 //ws数据
List<double[]> dataList = new ArrayList<>(); List<double[]> dataList = new ArrayList<>();
HashMap<Object, Object> dataMap = new HashMap<>(); HashMap<Object, Object> dataMap = new HashMap<>();
@ -243,7 +241,7 @@ public abstract class AbtParentTask implements TaskAction {
if (Double.compare(distance, endPoint.getKey()) < 0) { if (Double.compare(distance, endPoint.getKey()) < 0) {
//获取小于最大值的第一个key //获取小于最大值的第一个key
Double lowerKey = distanceInfoMap.lowerKey(endPoint.getKey()); Double lowerKey = distanceInfoMap.lowerKey(endPoint.getKey());
if (lowerKey == null) { if(lowerKey==null){
lowerKey = endPoint.getKey(); lowerKey = endPoint.getKey();
} }
@ -313,20 +311,13 @@ public abstract class AbtParentTask implements TaskAction {
//房间统一管理定时器房间关闭后定时器销毁 //房间统一管理定时器房间关闭后定时器销毁
addScheduledExecutorServiceRefenceToRoom(schedule); addScheduledExecutorServiceRefenceToRoom(schedule);
} }
private RedisUtil redisUtil; private RedisUtil redisUtil;
//统一推送方法 //统一推送方法
protected void pushStatus(String resourceId) { protected void pushStatus(String resourceId) {
if (StringUtils.isBlank(resourceId)) { if( redisUtil == null) {
return;
}
if (redisUtil == null) {
redisUtil = SpringUtil.getBean(RedisUtil.class); redisUtil = SpringUtil.getBean(RedisUtil.class);
} }
String jsonStr = (String) redisUtil.hget( String jsonStr= (String) redisUtil.hget(this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),"scenarioInfo");
this.scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),
"scenarioInfo");
ResponseCmdInfo<String> respObj = new ResponseCmdInfo<>(); ResponseCmdInfo<String> respObj = new ResponseCmdInfo<>();
respObj.setData(jsonStr); respObj.setData(jsonStr);
respObj.setRoom(roomId); respObj.setRoom(roomId);
@ -334,7 +325,6 @@ public abstract class AbtParentTask implements TaskAction {
respObj.setCmdType("scenarioInfo"); respObj.setCmdType("scenarioInfo");
Global.sendCmdInfoQueue.add(respObj); Global.sendCmdInfoQueue.add(respObj);
} }
} }
interface BizTaskOnTiming { interface BizTaskOnTiming {

View File

@ -161,7 +161,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
//需要产生需求 //需要产生需求
produceFuelRequest(); produceFuelRequest();
//产生任务 //产生任务
produceTask(fuel); produceTask();
} }
@ -200,7 +200,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
SpringUtil.getBean(SupplierRequestServiceImpl.class).save(supplierRequest); SpringUtil.getBean(SupplierRequestServiceImpl.class).save(supplierRequest);
} }
private void produceTask(double fuel) { private void produceTask() {
try { try {
log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId()); log.info("{}-产生自动保障任务", this.scenarioTask.getResourceId());
List<ScenarioResource> resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) List<ScenarioResource> resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class)
@ -214,7 +214,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
task.setResourceId(resourceList.get(0).getId()); task.setResourceId(resourceList.get(0).getId());
task.setTaskType("6"); task.setTaskType("6");
task.setInsureResourceId(scenarioTask.getResourceId()); task.setInsureResourceId(scenarioTask.getResourceId());
task.setSupplierNum(statisticBean.getFuel().getTotal()-fuel); task.setSupplierNum(statisticBean.getFuel().getTotal());
task.setToLat(this.coordinateReference.get().getLat() + ""); task.setToLat(this.coordinateReference.get().getLat() + "");
task.setToLng(this.coordinateReference.get().getLng() + ""); task.setToLng(this.coordinateReference.get().getLng() + "");
task.setStartTime(LocalDateTime.now()); task.setStartTime(LocalDateTime.now());

View File

@ -1,11 +1,9 @@
package com.hivekion.room.bean; package com.hivekion.room.bean;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.redis.RedisUtil;
import com.hivekion.room.func.TaskAction; import com.hivekion.room.func.TaskAction;
import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.entity.ScenarioTask;
import com.hivekion.statistic.bean.ScenarioInfo;
import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.bean.StatisticBean;
import com.hivekion.statistic.service.StatisticService; import com.hivekion.statistic.service.StatisticService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -57,7 +55,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
} }
//推送最新状态信息 //推送最新状态信息
pushStatus(scenarioTask.getResourceId()); pushStatus(scenarioTask.getResourceId());
pushStatus(scenarioTask.getInsureResourceId()); pushStatus(scenarioTask.getResourceId());
} }
@Override @Override
@ -73,152 +71,112 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
} }
private void supplierMedical(StatisticBean statistic) { 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){
ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); //增加被保障分队的量
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); SpringUtil.getBean(RedisUtil.class)
.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
"medical", statistic.getMedical().getTotal() + "");
scenarioSupplierInfo.getMedical().setCurrent(scenarioInsureInfo.getMedical().getCurrent() - statistic.getMedical().getTotal()); //获取保障任务的药品信息
scenarioInsureInfo.getMedical().setCurrent(statistic.getMedical().getTotal()); Object supplierObj = SpringUtil.getBean(RedisUtil.class)
.hget(scenarioTask.getScenarioId() + "-" + roomId + "-"
+ scenarioTask.getResourceId(),
"medical");
//减少保障分队的量
if (supplierObj != null) {
double supplierMedical = Double.parseDouble(supplierObj.toString());
double remain = supplierMedical - statistic.getMedical().getTotal();
SpringUtil.getBean(RedisUtil.class).hset( SpringUtil.getBean(RedisUtil.class)
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), .hset(scenarioTask.getScenarioId() + "-" + roomId + "-"
"scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); + scenarioTask.getResourceId(),
"medical", remain + "");
SpringUtil.getBean(RedisUtil.class).hset( }
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),
"scenarioInfo",JSON.toJSONString(scenarioSupplierInfo));
}
} }
private void supplierFuel(StatisticBean statistic) { private void supplierFuel(StatisticBean statistic) {
//保障分队 SpringUtil.getBean(RedisUtil.class)
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "fuel", statistic.getFuel().getTotal() + "");
"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); Object supplierObj = SpringUtil.getBean(RedisUtil.class)
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); .hget(scenarioTask.getScenarioId() + "-" + roomId + "-"
+ scenarioTask.getResourceId(),
scenarioSupplierInfo.getFuel().setCurrent(scenarioInsureInfo.getFuel().getCurrent() - statistic.getFuel().getTotal()); "fuel");
scenarioInsureInfo.getFuel().setCurrent(statistic.getFuel().getTotal()); //减少保障分队的量
if (supplierObj != null) {
double supplierMedical = Double.parseDouble(supplierObj.toString());
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) { private void supplierAmmunition(StatisticBean statistic) {
//保障分队 SpringUtil.getBean(RedisUtil.class)
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "ammunition", statistic.getAmmunition().getTotal() + "");
"scenarioInfo"); Object supplierObj = SpringUtil.getBean(RedisUtil.class)
//被保障分队 .hget(scenarioTask.getScenarioId() + "-" + roomId + "-"
Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( + scenarioTask.getResourceId(),
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "ammunition");
"scenarioInfo"); //减少保障分队的量
if(supplierObj!=null&&insureObj!=null){ 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.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) { private void supplierWater(StatisticBean statistic) {
//保障分队 SpringUtil.getBean(RedisUtil.class)
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), "water", statistic.getWater().getTotal() + "");
"scenarioInfo"); Object supplierObj = SpringUtil.getBean(RedisUtil.class)
//被保障分队 .hget(scenarioTask.getScenarioId() + "-" + roomId + "-"
Object insureObj = SpringUtil.getBean(RedisUtil.class).hget( + scenarioTask.getResourceId(),
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), "water");
"scenarioInfo"); //减少保障分队的量
if(supplierObj!=null&&insureObj!=null){ 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.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) { 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){
ScenarioInfo scenarioSupplierInfo = JSON.parseObject(supplierObj.toString(), ScenarioInfo.class); SpringUtil.getBean(RedisUtil.class)
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
"food", statistic.getFood().getTotal() + "");
scenarioSupplierInfo.getFood().setCurrent(scenarioInsureInfo.getFood().getCurrent() - statistic.getFood().getTotal()); Object supplierObj = SpringUtil.getBean(RedisUtil.class)
scenarioInsureInfo.getFood().setCurrent(statistic.getFood().getTotal()); .hget(scenarioTask.getScenarioId() + "-" + roomId + "-"
+ scenarioTask.getResourceId(),
"food");
SpringUtil.getBean(RedisUtil.class).hset( //减少保障分队的量
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), if (supplierObj != null) {
"scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); double supplierMedical = Double.parseDouble(supplierObj.toString());
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 + "");
} }
} }
} }