Compare commits

..

No commits in common. "f5ba96e225f776de231aaa94d945783bf921a568" and "6f2cef9edc8c3a7c85dcb05311484a28c34b3fb4" have entirely different histories.

6 changed files with 32 additions and 85 deletions

View File

@ -76,11 +76,4 @@ public class RoomManager {
} }
return false; return false;
} }
public static int getMag(String id){
Room room = roomsMap.get(id);
if (room != null) {
return room.getMag();
}
return 1;
}
} }

View File

@ -28,9 +28,10 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import com.hivekion.statistic.bean.ScenarioInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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;
@ -61,8 +62,7 @@ public abstract class AbtParentTask implements TaskAction {
protected final String roomId; protected final String roomId;
//http请求 //http请求
protected WebClient webClient = WebClient.create(); protected WebClient webClient = WebClient.create();
protected final AtomicBoolean canMoved = new AtomicBoolean(true);
protected final AtomicReference<Coordinate> coordinateReference = new AtomicReference<>();
/** /**
* 任务相对与想定的开始时间 * 任务相对与想定的开始时间

View File

@ -1,7 +1,6 @@
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.Global; import com.hivekion.Global;
import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.entity.ResponseCmdInfo;
import com.hivekion.common.redis.RedisUtil; import com.hivekion.common.redis.RedisUtil;
@ -14,7 +13,6 @@ import com.hivekion.scenario.entity.ScenarioTask;
import com.hivekion.scenario.service.impl.BattleConsumeServiceImpl; import com.hivekion.scenario.service.impl.BattleConsumeServiceImpl;
import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl; import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl;
import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl; import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl;
import com.hivekion.statistic.bean.ScenarioInfo;
import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.bean.StatisticBean;
import com.hivekion.statistic.service.impl.StatisticServiceImpl; import com.hivekion.statistic.service.impl.StatisticServiceImpl;
import com.hivekion.supplier.entity.SupplierRequest; import com.hivekion.supplier.entity.SupplierRequest;
@ -73,7 +71,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
@Override @Override
public void doSomeThing() { public void doSomeThing() {
log.info("move task running:{},fuel::{}", scenarioTask.getResourceId(), getCurrentFuel()); log.info("move task running:{}", scenarioTask.getResourceId());
initEnv(); //初始化环境 initEnv(); //初始化环境
initPath(); //初始化路径 initPath(); //初始化路径
@ -83,10 +81,10 @@ public class MoveTask extends AbtParentTask implements TaskAction {
//推送移动任务 //推送移动任务
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("duringTime", getDuringTime()); map.put("duringTime",getDuringTime());
map.put("id", scenarioTask.getResourceId()); map.put("id",scenarioTask.getResourceId());
map.put("roomStatus", true); map.put("roomStatus",true);
map.put("type", scenarioTask.getType()); map.put("type",scenarioTask.getType());
Global.sendCmdInfoQueue.add( Global.sendCmdInfoQueue.add(
ResponseCmdInfo.create("moveTask", roomId, ResponseCmdInfo.create("moveTask", roomId,
@ -102,7 +100,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
public String getType() { public String getType() {
return ""; return "";
} }
}, null); //更新路径 },null); //更新路径
fuelConsumption();//油品消耗 fuelConsumption();//油品消耗
} }
@ -131,49 +129,35 @@ public class MoveTask extends AbtParentTask implements TaskAction {
ScheduledExecutorService schedule = Executors.newScheduledThreadPool( ScheduledExecutorService schedule = Executors.newScheduledThreadPool(
1); 1);
schedule.scheduleWithFixedDelay(() -> { schedule.scheduleWithFixedDelay(() -> {
if (getRoomStatus() && this.canMoved.get()) { if (getRoomStatus()) {
double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption;
double fuel = getCurrentFuel(); //更新redis中油品的消耗
if (fuel == 0) { Object currentFuelObj = redis.hget(
log.error("fuel is empty");
return;
}
fuel = fuel - currentUseUp;
Object statisticObj = redis.hget(
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),
"scenarioInfo"); "fuel");
if (statisticObj != null) { if (currentFuelObj != null) {
double fuel = Double.parseDouble(currentFuelObj.toString());
fuel = fuel - currentUseUp;
setCurrentFuel(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();
}
} }
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); insertConsumption(currentUseUp);
pushStatus(scenarioTask.getResourceId()); 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); }, 0, consumptionTaskInterval, TimeUnit.SECONDS);
@ -209,8 +193,8 @@ public class MoveTask extends AbtParentTask implements TaskAction {
task.setResourceId(scenarioTask.getResourceId()); task.setResourceId(scenarioTask.getResourceId());
task.setTaskType("6"); task.setTaskType("6");
task.setSupplierNum(statisticBean.getFuel().getTotal()); task.setSupplierNum(statisticBean.getFuel().getTotal());
task.setToLat(this.coordinateReference.get().getLat() + ""); task.setToLat(scenarioTask.getToLat());
task.setToLng(this.coordinateReference.get().getLng() + ""); task.setToLng(scenarioTask.getToLng());
task.setStartTime(LocalDateTime.now()); task.setStartTime(LocalDateTime.now());
task.setFromLat(resourceList.get(0).getLat()); task.setFromLat(resourceList.get(0).getLat());
task.setFromLng(resourceList.get(0).getLng()); task.setFromLng(resourceList.get(0).getLng());
@ -224,7 +208,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
} }
private void insertConsumption(double num) { private void insertConsumption(double num) {
log.info("insertConsumption....{}", num); log.info("insertConsumption....{}",num);
BattleConsume battleConsume = new BattleConsume(); BattleConsume battleConsume = new BattleConsume();
battleConsume.setId(IdUtils.simpleUUID()); battleConsume.setId(IdUtils.simpleUUID());
battleConsume.setResourceId(scenarioTask.getResourceId()); battleConsume.setResourceId(scenarioTask.getResourceId());
@ -233,25 +217,6 @@ public class MoveTask extends AbtParentTask implements TaskAction {
SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume); SpringUtil.getBean(BattleConsumeServiceImpl.class).save(battleConsume);
} }
private double getCurrentFuel() {
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();
}
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);
}
}
} }

View File

@ -10,7 +10,6 @@ import com.hivekion.common.utils;
import com.hivekion.common.uuid.IdUtils; import com.hivekion.common.uuid.IdUtils;
import com.hivekion.room.func.TaskAction; import com.hivekion.room.func.TaskAction;
import com.hivekion.scenario.bean.ScenarioWsParam; import com.hivekion.scenario.bean.ScenarioWsParam;
import com.hivekion.scenario.service.impl.ScenarioResourceServiceImpl;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -221,8 +220,6 @@ public class Room implements AutoCloseable {
if( scenarioService == null) { if( scenarioService == null) {
scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class); scenarioService = SpringUtil.getBean(com.hivekion.statistic.service.ScenarioService.class);
} }
//设置资源列表
scenario.setResourceList(SpringUtil.getBean(ScenarioResourceServiceImpl.class).getResourceListByScenarioId(scenario.getId()));
for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){ for(ScenarioResource scenarioResource:this.scenario.getResourceList() ){
ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId()); ScenarioInfo scenarioInfo = scenarioService.listScenarioInfo(scenarioResource.getScenarioId(),roomId,scenarioResource.getId());
if( redisUtil == null){ if( redisUtil == null){

View File

@ -16,5 +16,4 @@ import java.util.Map;
public interface ScenarioResourceService extends IService<ScenarioResource> { public interface ScenarioResourceService extends IService<ScenarioResource> {
List<ScenarioResource> getResourceList(ScenarioResource resource); List<ScenarioResource> getResourceList(ScenarioResource resource);
Map<String,ScenarioResource> resourceMap(); Map<String,ScenarioResource> resourceMap();
List<ScenarioResource> getResourceListByScenarioId(Integer scenarioId);
} }

View File

@ -106,11 +106,4 @@ public class ScenarioResourceServiceImpl extends
return this.list().stream().collect(Collectors.toMap(ScenarioResource::getId, r -> r)); return this.list().stream().collect(Collectors.toMap(ScenarioResource::getId, r -> r));
} }
@Override
public List<ScenarioResource> getResourceListByScenarioId(Integer scenarioId) {
QueryWrapper<ScenarioResource> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("scenario_id", scenarioId);
return this.list(queryWrapper);
}
} }