任务相关

This commit is contained in:
李玉东 2025-09-22 22:17:55 +08:00
parent 18392d6961
commit 5d0a37b49a
7 changed files with 99 additions and 176 deletions

View File

@ -233,6 +233,7 @@ public abstract class AbtParentTask implements TaskAction {
beforeLat = lat; beforeLat = lat;
} }
log.info("路线节点个数::{},总距离::{}",distanceInfoMap.size(),distanceInfoMap.lastKey());
//设置第一个开始位置 //设置第一个开始位置
startPoint.set(distanceInfoMap.firstKey()); startPoint.set(distanceInfoMap.firstKey());
} }
@ -257,21 +258,19 @@ public abstract class AbtParentTask implements TaskAction {
if (this.getRoomStatus()) { if (this.getRoomStatus()) {
//自动生成的任务不需要判断油量不要在生成新的任务 //自动生成的任务不需要判断油量不要在生成新的任务
log.info("{}-fromSource::{}", scenarioTask.getResourceId(), scenarioTask.getFromSource());
if (!"general".equals(scenarioTask.getFromSource())) { if (!"general".equals(scenarioTask.getFromSource())) {
double currentFuel = getCurrentFuel(); double currentFuel = getCurrentFuel();
double totalFuel = statisticBean.getFuel().getTotal(); double totalFuel = statisticBean.getFuel().getTotal();
log.info("totalFuel::{}", totalFuel);
if (currentFuel <= 0 || totalFuel <= 0) { if (currentFuel <= 0 || totalFuel <= 0) {
log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId()); log.error("{}:油量为零停止移动", this.scenarioTask.getResourceId());
return; return;
} }
log.info("{}-当前比值{},阈值{}", scenarioTask.getResourceId(),
currentFuel * 100 / totalFuel,
fuelThreshold);
if (currentFuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { if (currentFuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) {
log.info("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId()); log.error("{}-油料不足,需要补充,新建需求和任务", scenarioTask.getResourceId());
requestFlag.set(true); requestFlag.set(true);
//需要产生需求 //需要产生需求
@ -281,7 +280,7 @@ public abstract class AbtParentTask implements TaskAction {
return; return;
} }
if (currentFuel * 100 / totalFuel < fuelThreshold) { if (currentFuel * 100 / totalFuel < fuelThreshold) {
log.error("{}:油量不足停止移动,等待补给", this.scenarioTask.getResourceId());
return; return;
} }
} }
@ -293,7 +292,7 @@ public abstract class AbtParentTask implements TaskAction {
if (duringAction != null) { if (duringAction != null) {
duringAction.doSomeThing(); duringAction.doSomeThing();
} }
log.info("移动中..... 放大系数{}", RoomManager.getMag(roomId));
//跑动距离 //跑动距离
double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed; double distance = duringTime.getAndAdd(RoomManager.getMag(roomId)) * speed;
@ -302,7 +301,7 @@ public abstract class AbtParentTask implements TaskAction {
if (endPoint == null) { if (endPoint == null) {
endPoint = distanceInfoMap.lastEntry(); endPoint = distanceInfoMap.lastEntry();
} }
log.info("当前距离{}",distance);
//ws数据 //ws数据
List<double[]> dataList = new ArrayList<>(); List<double[]> dataList = new ArrayList<>();
HashMap<Object, Object> dataMap = new HashMap<>(); HashMap<Object, Object> dataMap = new HashMap<>();
@ -515,36 +514,43 @@ public abstract class AbtParentTask implements TaskAction {
task.setScenarioId(scenarioTask.getScenarioId()); task.setScenarioId(scenarioTask.getScenarioId());
task.setResourceId(supplierResource.getId()); task.setResourceId(supplierResource.getId());
task.setTaskType("1"); task.setTaskType("1");
task.setName("油料保障任务-移动第一节点(自动)");
task.setFromLat(supplierResource.getLat()); task.setFromLat(supplierResource.getLat());
task.setFromLng(supplierResource.getLng()); task.setFromLng(supplierResource.getLng());
task.setToLat(fuelResource.getLat()); task.setToLat(fuelResource.getLat());
task.setToLng(fuelResource.getLng()); task.setToLng(fuelResource.getLng());
task.setStartTime(LocalDateTime.now()); task.setStartTime(LocalDateTime.now());
task.setFromSource("general"); task.setFromSource("general");
log.info("承担保障任务的resourceId::{}", supplierResource.getId()); log.info("油料保障任务-移动resourceId::{}", supplierResource.getId());
SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task);
MoveTask moveTask = new MoveTask(task, this.roomId, new TaskAction() { MoveTask moveTask = new MoveTask(task, this.roomId, new TaskAction() {
@Override @Override
public void doSomeThing() { public void doSomeThing() {
//创建一个保障任务 if(coordinate!=null){
//创建一个送达任务
log.info("目标地址::{},{}",coordinate.getLat(),coordinate.getLng());
ScenarioTask task = new ScenarioTask();
task.setId(IdUtils.simpleUUID());
task.setScenarioId(scenarioTask.getScenarioId());
task.setResourceId(supplierResource.getId());
task.setTaskType("6");
task.setName("油料保障任务-移动第二节点(自动)");
task.setInsureResourceId(scenarioTask.getResourceId());
task.setSupplierNum(statisticBean.getFuel().getTotal() - minusFuel);
task.setToLat(coordinate.getLat() + "");
task.setToLng(coordinate.getLng() + "");
task.setStartTime(LocalDateTime.now());
task.setFromLat(fuelResource.getLat());
task.setFromLng(fuelResource.getLng());
task.setFromSource("general");
SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task);
SupplierTask supplierTask = new SupplierTask(task, roomId);
RoomManager.addAction(roomId, 0, supplierTask);
}else{
log.error("没有目标地址");
}
ScenarioTask task = new ScenarioTask();
task.setId(IdUtils.simpleUUID());
task.setScenarioId(scenarioTask.getScenarioId());
task.setResourceId(supplierResource.getId());
task.setTaskType("6");
task.setInsureResourceId(scenarioTask.getResourceId());
task.setSupplierNum(statisticBean.getFuel().getTotal() - minusFuel);
task.setToLat(coordinate.getLat() + "");
task.setToLng(coordinate.getLng() + "");
task.setStartTime(LocalDateTime.now());
task.setFromLat(fuelResource.getLat());
task.setFromLng(fuelResource.getLng());
task.setFromSource("general");
SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task);
SupplierTask supplierTask = new SupplierTask(task, roomId);
RoomManager.addAction(roomId, 0, supplierTask);
} }
@Override @Override

View File

@ -107,6 +107,7 @@ public class MoveTask extends AbtParentTask implements TaskAction {
//修改油料 //修改油料
EditScenarioInfo editScenarioInfo = getEditScenarioInfo( EditScenarioInfo editScenarioInfo = getEditScenarioInfo(
this.scenarioTask.getResourceId()); this.scenarioTask.getResourceId());
editScenarioInfo.getJbxx().getFuel().setCurrent(editScenarioInfo.getJbxx().getFuel().getCurrent()-currentUseUp); editScenarioInfo.getJbxx().getFuel().setCurrent(editScenarioInfo.getJbxx().getFuel().getCurrent()-currentUseUp);
setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId()); setEditScenarioInfo(editScenarioInfo,scenarioTask.getResourceId());

View File

@ -1,14 +1,8 @@
package com.hivekion.room.bean; package com.hivekion.room.bean;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
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.EditScenarioInfo; import com.hivekion.statistic.bean.EditScenarioInfo;
import com.hivekion.statistic.bean.ScenarioInfo;
import com.hivekion.statistic.bean.StatisticBean;
import com.hivekion.statistic.service.StatisticService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -30,8 +24,7 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
@Override @Override
public void doSomeThing() { public void doSomeThing() {
StatisticBean statistic = SpringUtil.getBean(StatisticService.class)
.statistic(scenarioTask.getResourceId());
initPath(); //初始化路径 initPath(); //初始化路径
updatePath(50, null, new TaskAction() { updatePath(50, null, new TaskAction() {
@ -41,19 +34,19 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
//达到终点点后给目标补充物资 //达到终点点后给目标补充物资
switch (scenarioTask.getTaskType()) { switch (scenarioTask.getTaskType()) {
case "4": case "4":
supplierAmmunition(statistic); supplierAmmunition();
break; break;
case "5": case "5":
supplierWater(statistic); supplierWater();
break; break;
case "6": case "6":
supplierFuel(statistic); supplierFuel();
break; break;
case "7": case "7":
supplierFood(statistic); supplierFood();
break; break;
case "8": case "8":
supplierMedical(statistic); supplierMedical();
break; break;
} }
//推送最新状态信息 //推送最新状态信息
@ -73,164 +66,87 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
}); });
} }
private void supplierMedical(StatisticBean statistic) { private void supplierMedical() {
//保障分队 EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId());
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId());
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); if (supplierInfo != null && insuranceInfo != null) {
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); double insuranceCurrent = insuranceInfo.getJbxx().getMedical().getCurrent();
scenarioSupplierInfo.getMedical().setCurrent(scenarioInsureInfo.getMedical().getCurrent() - statistic.getMedical().getTotal()); supplierInfo.getJbxx().getMedical().setCurrent(
scenarioInsureInfo.getMedical().setCurrent(statistic.getMedical().getTotal()); supplierInfo.getJbxx().getMedical().getCurrent() - insuranceCurrent < 0 ? 0
: (supplierInfo.getJbxx().getMedical().getCurrent() - insuranceCurrent));
insuranceInfo.getJbxx().getMedical()
SpringUtil.getBean(RedisUtil.class).hset( .setCurrent(insuranceInfo.getJbxx().getMedical().getTotal());
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(),
"scenarioInfo",JSON.toJSONString(scenarioInsureInfo));
SpringUtil.getBean(RedisUtil.class).hset(
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),
"scenarioInfo",JSON.toJSONString(scenarioSupplierInfo));
}
}
private void supplierFuel(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);
scenarioSupplierInfo.getFuel().setCurrent(scenarioInsureInfo.getFuel().getCurrent() - statistic.getFuel().getTotal());
scenarioInsureInfo.getFuel().setCurrent(statistic.getFuel().getTotal());
EditScenarioInfo insureEdit = getEditScenarioInfo(scenarioTask.getInsureResourceId());
double supplierNum = statistic.getFuel().getTotal() - statistic.getFuel().getCurrent();
insureEdit.getJbxx().getFuel().setCurrent(statistic.getFuel().getTotal());
setEditScenarioInfo(insureEdit,scenarioTask.getInsureResourceId());
EditScenarioInfo supplerEdit = getEditScenarioInfo(scenarioTask.getResourceId());
supplerEdit.getJbxx().getFuel().setCurrent(statistic.getFuel().getTotal()-supplierNum);
setEditScenarioInfo(supplerEdit,scenarioTask.getResourceId());
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));
} }
} }
private void supplierFuel() {
EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId());
EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId());
if (supplierInfo != null && insuranceInfo != null) {
double insuranceCurrent = insuranceInfo.getJbxx().getFuel().getCurrent();
private void supplierAmmunition(StatisticBean statistic) { supplierInfo.getJbxx().getFuel().setCurrent(
supplierInfo.getJbxx().getFuel().getCurrent() - insuranceCurrent < 0 ? 0
: (supplierInfo.getJbxx().getFuel().getCurrent() - insuranceCurrent));
//保障分队 insuranceInfo.getJbxx().getFuel()
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( .setCurrent(insuranceInfo.getJbxx().getFuel().getTotal());
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);
scenarioSupplierInfo.getAmmunition().setCurrent(scenarioInsureInfo.getAmmunition().getCurrent() - statistic.getAmmunition().getTotal()); }
scenarioInsureInfo.getAmmunition().setCurrent(statistic.getAmmunition().getTotal());
SpringUtil.getBean(RedisUtil.class).hset( private void supplierAmmunition() {
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getInsureResourceId(), EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId());
"scenarioInfo",JSON.toJSONString(scenarioInsureInfo)); EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId());
if (supplierInfo != null && insuranceInfo != null) {
double insuranceCurrent = insuranceInfo.getJbxx().getAmmunition().getCurrent();
SpringUtil.getBean(RedisUtil.class).hset( supplierInfo.getJbxx().getAmmunition().setCurrent(
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), supplierInfo.getJbxx().getAmmunition().getCurrent() - insuranceCurrent < 0 ? 0
"scenarioInfo",JSON.toJSONString(scenarioSupplierInfo)); : (supplierInfo.getJbxx().getAmmunition().getCurrent() - insuranceCurrent));
insuranceInfo.getJbxx().getAmmunition()
.setCurrent(insuranceInfo.getJbxx().getAmmunition().getTotal());
} }
} }
private void supplierWater(StatisticBean statistic) { private void supplierWater() {
EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId());
EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId());
if (supplierInfo != null && insuranceInfo != null) {
double insuranceCurrent = insuranceInfo.getJbxx().getWater().getCurrent();
//保障分队 supplierInfo.getJbxx().getWater().setCurrent(
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( supplierInfo.getJbxx().getWater().getCurrent() - insuranceCurrent < 0 ? 0
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), : (supplierInfo.getJbxx().getWater().getCurrent() - insuranceCurrent));
"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); insuranceInfo.getJbxx().getWater()
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); .setCurrent(insuranceInfo.getJbxx().getWater().getTotal());
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));
} }
} }
private void supplierFood(StatisticBean statistic) { private void supplierFood() {
//保障分队 EditScenarioInfo supplierInfo = getEditScenarioInfo(scenarioTask.getResourceId());
Object supplierObj = SpringUtil.getBean(RedisUtil.class).hget( EditScenarioInfo insuranceInfo = getEditScenarioInfo(scenarioTask.getInsureResourceId());
scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), if (supplierInfo != null && insuranceInfo != null) {
"scenarioInfo"); double insuranceCurrent = insuranceInfo.getJbxx().getFood().getCurrent();
//被保障分队
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); supplierInfo.getJbxx().getFood().setCurrent(
ScenarioInfo scenarioInsureInfo = JSON.parseObject(insureObj.toString(), ScenarioInfo.class); supplierInfo.getJbxx().getFood().getCurrent() - insuranceCurrent < 0 ? 0
: (supplierInfo.getJbxx().getFood().getCurrent() - insuranceCurrent));
scenarioSupplierInfo.getFood().setCurrent(scenarioInsureInfo.getFood().getCurrent() - statistic.getFood().getTotal()); insuranceInfo.getJbxx().getFood()
scenarioInsureInfo.getFood().setCurrent(statistic.getFood().getTotal()); .setCurrent(insuranceInfo.getJbxx().getFood().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));
} }
} }
} }

View File

@ -149,11 +149,11 @@ public class ScenarioTaskServiceImpl extends
//增加任务 //增加任务
private void addTaskEvent(Scenario scenario, String roomId) { private void addTaskEvent(Scenario scenario, String roomId) {
log.info("--------------------hello");
ScenarioTask scenarioTask = new ScenarioTask(); ScenarioTask scenarioTask = new ScenarioTask();
scenarioTask.setScenarioId(scenario.getId()); scenarioTask.setScenarioId(scenario.getId());
List<ScenarioTask> taskList = this.queryTaskList(scenarioTask); List<ScenarioTask> taskList = this.queryTaskList(scenarioTask);
log.info("taskList.size ::{}", taskList.size());
for (ScenarioTask task : taskList) { for (ScenarioTask task : taskList) {
try { try {
long diff = Duration.between(scenario.getStartTime(),task.getStartTime()) long diff = Duration.between(scenario.getStartTime(),task.getStartTime())

View File

@ -118,7 +118,7 @@ public class WsServer {
} }
public static void sendMessage(Integer scenarioId, String room, String message) { public static void sendMessage(Integer scenarioId, String room, String message) {
log.info("{},{}", scenarioId, room); // log.info("{},{}", scenarioId, room);
synchronized (lock) { synchronized (lock) {
Map<String, Map<String, Session>> roomMap = SESSION_MAP.get(String.valueOf(scenarioId)); Map<String, Map<String, Session>> roomMap = SESSION_MAP.get(String.valueOf(scenarioId));

View File

@ -51,4 +51,4 @@ get.all.user = http://127.0.0.1/oauth2Server/api/outside/syncUserAll
#get.all.dept=http://127.0.0.1/oatuh2Server/api/outside/synDeptAll #get.all.dept=http://127.0.0.1/oatuh2Server/api/outside/synDeptAll
logout.url=http://127.0.0.1:99/oauth2Server/oauth2/logout logout.url=http://127.0.0.1:99/oauth2Server/oauth2/logout
path.planning.url=http://192.168.0.53:8989/route path.planning.url=http://127.0.0.1:8989/route

View File

@ -3,7 +3,7 @@ death.warn = 2
ammunition.warn = 3 ammunition.warn = 3
food.warn = 3 food.warn = 3
water.warn = 3 water.warn = 3
fuel.warn = 99.80 fuel.warn = 55.80
medical.warn = 1 medical.warn = 1
death.spreed = 3 death.spreed = 3
injured.spreed = 3 injured.spreed = 3