diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java index 8a71e0b..06f8ae6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -30,10 +30,9 @@ public void process(String robotId, String topic, MqttMessage message) { index.put(index_key, index.get("index") + 1); - if (index.get(index_key)>30) { + if (index.get(index_key)>1) { index.put(index_key, 0); log.info("主键:{},停障状态topic:{},消息内容:{}", robotId, topic, message.toString()); - statusInfoService.saveStopState(robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java index 8a71e0b..06f8ae6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -30,10 +30,9 @@ public void process(String robotId, String topic, MqttMessage message) { index.put(index_key, index.get("index") + 1); - if (index.get(index_key)>30) { + if (index.get(index_key)>1) { index.put(index_key, 0); log.info("主键:{},停障状态topic:{},消息内容:{}", robotId, topic, message.toString()); - statusInfoService.saveStopState(robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 46b5c3b..09fb440 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -15,7 +15,6 @@ import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; -import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; @@ -27,18 +26,15 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; -import org.aspectj.util.FileUtil; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @@ -81,6 +77,10 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { + StopStateResponseDTO stopStateResponseDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.STOP_STATE + statusInfo.getRobotId()); + if (stopStateResponseDTO != null) { + statusInfo.setSoft(stopStateResponseDTO.getSoft()); + } statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); //暂停状态 @@ -292,16 +292,16 @@ } } } - writeCache(dataNums,responseDTO.getMsg().getWidth(),responseDTO.getMsg().getHeight(),robotId); + writeCache(dataNums, responseDTO.getMsg().getWidth(), responseDTO.getMsg().getHeight(), robotId); } } } - private void writeCache(ArrayList integers,Integer width,Integer height,String robotId) { - List> arrays = CollectionUtil.split(integers,width); + private void writeCache(ArrayList integers, Integer width, Integer height, String robotId) { + List> arrays = CollectionUtil.split(integers, width); ArrayList> arrayList = new ArrayList<>(); for (List array : arrays) { - arrayList.add((ArrayList)array); + arrayList.add((ArrayList) array); } CollectionUtil.reverse(arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java index 8a71e0b..06f8ae6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -30,10 +30,9 @@ public void process(String robotId, String topic, MqttMessage message) { index.put(index_key, index.get("index") + 1); - if (index.get(index_key)>30) { + if (index.get(index_key)>1) { index.put(index_key, 0); log.info("主键:{},停障状态topic:{},消息内容:{}", robotId, topic, message.toString()); - statusInfoService.saveStopState(robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 46b5c3b..09fb440 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -15,7 +15,6 @@ import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; -import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; @@ -27,18 +26,15 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; -import org.aspectj.util.FileUtil; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @@ -81,6 +77,10 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { + StopStateResponseDTO stopStateResponseDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.STOP_STATE + statusInfo.getRobotId()); + if (stopStateResponseDTO != null) { + statusInfo.setSoft(stopStateResponseDTO.getSoft()); + } statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); //暂停状态 @@ -292,16 +292,16 @@ } } } - writeCache(dataNums,responseDTO.getMsg().getWidth(),responseDTO.getMsg().getHeight(),robotId); + writeCache(dataNums, responseDTO.getMsg().getWidth(), responseDTO.getMsg().getHeight(), robotId); } } } - private void writeCache(ArrayList integers,Integer width,Integer height,String robotId) { - List> arrays = CollectionUtil.split(integers,width); + private void writeCache(ArrayList integers, Integer width, Integer height, String robotId) { + List> arrays = CollectionUtil.split(integers, width); ArrayList> arrayList = new ArrayList<>(); for (List array : arrays) { - arrayList.add((ArrayList)array); + arrayList.add((ArrayList) array); } CollectionUtil.reverse(arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index fd49e2e..f7dbe10 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -47,6 +47,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -81,7 +82,7 @@ /** * 5000 ms */ - @Value("${casic.task.duration:3000}") + @Value("${casic.task.duration:2000}") private Integer stayDuration; @Value("${casic.algorithm.path:-1}") private String path; @@ -90,7 +91,7 @@ */ @Value("${casic.obstacle:10}") private Integer obstacle; - + private volatile AtomicInteger atomicInteger = new AtomicInteger(); public TaskInfoServiceImpl(@Lazy IRouteInfoService routeInfoService, IRobotStatusInfoService statusInfoService, AbstractDictService dictService, @Lazy IAlarmRecordService recordService, @Lazy ITaskHeatMapService taskHeatMapService, IAlgorithmService algorithmService, IRobotCacheService cacheService, @Lazy IBaseRobotService baseRobotService, ITaskInfoImgService imgService, ITaskGridInfoService taskGridInfoService) { this.routeInfoService = routeInfoService; this.statusInfoService = statusInfoService; @@ -128,9 +129,19 @@ } catch (Exception e) { log.error(e.getMessage()); } - } - + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { + try { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(heatMap); + String msg = JSON.toJSONString(wsMsgBaseDTO); +// log.info("推送{}消息:{}", enums.getRemarks(), msg); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); + } + } @Override public List selectTaskInfoPage(Page page, QueryWrapper query) { return this.baseMapper.selectTaskInfoPage(page, query); @@ -187,11 +198,11 @@ private void openTask(StartTrackRequest request, String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("target_id", request.getTrack_name()); - List routeInfos = routeInfoService.list(query); - if (CollectionUtil.isEmpty(routeInfos)) { - throw new ServiceException(500, "路线不存在,请及时更新"); - } +// query.eq("target_id", request.getTrack_name()); +// List routeInfos = routeInfoService.list(query); +// if (CollectionUtil.isEmpty(routeInfos)) { +// throw new ServiceException(500, "路线不存在,请及时更新"); +// } // RouteInfo routeInfo = routeInfos.get(0); Integer isTask = 0; //开启寻源任务 @@ -335,14 +346,17 @@ PointNextDTO pointNextDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId); GridPointDTO oldEstimateGrid = GridPointDTO.convertGridPoint(pointNextDTO); Boolean flag = lockPlanIngFlag(robotId); + //是否到达预期栅格 if (!flag) { log.info("未获取到规划任务,直接结束:{}",pointDTO); return; } + log.debug("pointDTO:{}", pointDTO); + log.debug("oldEstimateGrid:{}", oldEstimateGrid); try { - log.debug("oldEstimateGrid:{}", oldEstimateGrid); - if (pointNextDTO == null || isEquals(pointDTO, oldEstimateGrid)) { + if (pointNextDTO == null || oldEstimateGrid==null || isEquals(pointDTO, oldEstimateGrid)) { + atomicInteger = new AtomicInteger(0); log.info("当前栅格变更......", pointDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_POINT + robotId, pointDTO); //算法调用获取热力图 @@ -358,19 +372,24 @@ //存储算法输出栅格信息 AlgorithmResponse response = algorithmService.pathPlanning(pathPlanDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId, response.getPointNextDTO()); - sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); - //存储循迹任务信息 - TaskGridInfo taskGridInfo = new TaskGridInfo(); - taskGridInfo.setCreateTime(new Date()); - taskGridInfo.setUpdateTime(new Date()); - taskGridInfo.setCurGridX(pointDTO.getX().intValue()); - taskGridInfo.setCurGridY(pointDTO.getY().intValue()); - taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); - taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); - taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); - taskGridInfo.setTaskId(taskId); - taskGridInfoService.save(taskGridInfo); + new Thread(){ + @Override + public void run() { + //存储循迹任务信息 + TaskGridInfo taskGridInfo = new TaskGridInfo(); + taskGridInfo.setCreateTime(new Date()); + taskGridInfo.setUpdateTime(new Date()); + taskGridInfo.setCurGridX(pointDTO.getX().intValue()); + taskGridInfo.setCurGridY(pointDTO.getY().intValue()); + taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); + taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); + taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); + taskGridInfo.setTaskId(taskId); + taskGridInfoService.save(taskGridInfo); + sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); + } + }.start(); try { //停留时间阈值 @@ -394,6 +413,15 @@ // baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); //循迹任务结束 closeTask(null, robotId); + TaskEndMsg endMsg = new TaskEndMsg(); + endMsg.setCode(1); + endMsg.setRobotId(robotId); + endMsg.setMessage("寻源结束"); + sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); + } + }else{ + if(!isChange(pointDTO, oldEstimateGrid)){ + atomicInteger.incrementAndGet(); } } } catch (Exception e) { @@ -439,6 +467,7 @@ for (List list : costList) { strs2.add(CollectionUtil.join(list, " ")); } + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 if(CollectionUtil.isNotEmpty(costList)){ @@ -456,10 +485,11 @@ FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); //中子源计数率读取 + PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); log.info("init params:{}", JSON.toJSONString(pathInitDTO)); + //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java index 8a71e0b..06f8ae6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -30,10 +30,9 @@ public void process(String robotId, String topic, MqttMessage message) { index.put(index_key, index.get("index") + 1); - if (index.get(index_key)>30) { + if (index.get(index_key)>1) { index.put(index_key, 0); log.info("主键:{},停障状态topic:{},消息内容:{}", robotId, topic, message.toString()); - statusInfoService.saveStopState(robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 46b5c3b..09fb440 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -15,7 +15,6 @@ import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; -import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; @@ -27,18 +26,15 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; -import org.aspectj.util.FileUtil; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @@ -81,6 +77,10 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { + StopStateResponseDTO stopStateResponseDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.STOP_STATE + statusInfo.getRobotId()); + if (stopStateResponseDTO != null) { + statusInfo.setSoft(stopStateResponseDTO.getSoft()); + } statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); //暂停状态 @@ -292,16 +292,16 @@ } } } - writeCache(dataNums,responseDTO.getMsg().getWidth(),responseDTO.getMsg().getHeight(),robotId); + writeCache(dataNums, responseDTO.getMsg().getWidth(), responseDTO.getMsg().getHeight(), robotId); } } } - private void writeCache(ArrayList integers,Integer width,Integer height,String robotId) { - List> arrays = CollectionUtil.split(integers,width); + private void writeCache(ArrayList integers, Integer width, Integer height, String robotId) { + List> arrays = CollectionUtil.split(integers, width); ArrayList> arrayList = new ArrayList<>(); for (List array : arrays) { - arrayList.add((ArrayList)array); + arrayList.add((ArrayList) array); } CollectionUtil.reverse(arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index fd49e2e..f7dbe10 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -47,6 +47,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -81,7 +82,7 @@ /** * 5000 ms */ - @Value("${casic.task.duration:3000}") + @Value("${casic.task.duration:2000}") private Integer stayDuration; @Value("${casic.algorithm.path:-1}") private String path; @@ -90,7 +91,7 @@ */ @Value("${casic.obstacle:10}") private Integer obstacle; - + private volatile AtomicInteger atomicInteger = new AtomicInteger(); public TaskInfoServiceImpl(@Lazy IRouteInfoService routeInfoService, IRobotStatusInfoService statusInfoService, AbstractDictService dictService, @Lazy IAlarmRecordService recordService, @Lazy ITaskHeatMapService taskHeatMapService, IAlgorithmService algorithmService, IRobotCacheService cacheService, @Lazy IBaseRobotService baseRobotService, ITaskInfoImgService imgService, ITaskGridInfoService taskGridInfoService) { this.routeInfoService = routeInfoService; this.statusInfoService = statusInfoService; @@ -128,9 +129,19 @@ } catch (Exception e) { log.error(e.getMessage()); } - } - + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { + try { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(heatMap); + String msg = JSON.toJSONString(wsMsgBaseDTO); +// log.info("推送{}消息:{}", enums.getRemarks(), msg); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); + } + } @Override public List selectTaskInfoPage(Page page, QueryWrapper query) { return this.baseMapper.selectTaskInfoPage(page, query); @@ -187,11 +198,11 @@ private void openTask(StartTrackRequest request, String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("target_id", request.getTrack_name()); - List routeInfos = routeInfoService.list(query); - if (CollectionUtil.isEmpty(routeInfos)) { - throw new ServiceException(500, "路线不存在,请及时更新"); - } +// query.eq("target_id", request.getTrack_name()); +// List routeInfos = routeInfoService.list(query); +// if (CollectionUtil.isEmpty(routeInfos)) { +// throw new ServiceException(500, "路线不存在,请及时更新"); +// } // RouteInfo routeInfo = routeInfos.get(0); Integer isTask = 0; //开启寻源任务 @@ -335,14 +346,17 @@ PointNextDTO pointNextDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId); GridPointDTO oldEstimateGrid = GridPointDTO.convertGridPoint(pointNextDTO); Boolean flag = lockPlanIngFlag(robotId); + //是否到达预期栅格 if (!flag) { log.info("未获取到规划任务,直接结束:{}",pointDTO); return; } + log.debug("pointDTO:{}", pointDTO); + log.debug("oldEstimateGrid:{}", oldEstimateGrid); try { - log.debug("oldEstimateGrid:{}", oldEstimateGrid); - if (pointNextDTO == null || isEquals(pointDTO, oldEstimateGrid)) { + if (pointNextDTO == null || oldEstimateGrid==null || isEquals(pointDTO, oldEstimateGrid)) { + atomicInteger = new AtomicInteger(0); log.info("当前栅格变更......", pointDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_POINT + robotId, pointDTO); //算法调用获取热力图 @@ -358,19 +372,24 @@ //存储算法输出栅格信息 AlgorithmResponse response = algorithmService.pathPlanning(pathPlanDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId, response.getPointNextDTO()); - sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); - //存储循迹任务信息 - TaskGridInfo taskGridInfo = new TaskGridInfo(); - taskGridInfo.setCreateTime(new Date()); - taskGridInfo.setUpdateTime(new Date()); - taskGridInfo.setCurGridX(pointDTO.getX().intValue()); - taskGridInfo.setCurGridY(pointDTO.getY().intValue()); - taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); - taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); - taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); - taskGridInfo.setTaskId(taskId); - taskGridInfoService.save(taskGridInfo); + new Thread(){ + @Override + public void run() { + //存储循迹任务信息 + TaskGridInfo taskGridInfo = new TaskGridInfo(); + taskGridInfo.setCreateTime(new Date()); + taskGridInfo.setUpdateTime(new Date()); + taskGridInfo.setCurGridX(pointDTO.getX().intValue()); + taskGridInfo.setCurGridY(pointDTO.getY().intValue()); + taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); + taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); + taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); + taskGridInfo.setTaskId(taskId); + taskGridInfoService.save(taskGridInfo); + sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); + } + }.start(); try { //停留时间阈值 @@ -394,6 +413,15 @@ // baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); //循迹任务结束 closeTask(null, robotId); + TaskEndMsg endMsg = new TaskEndMsg(); + endMsg.setCode(1); + endMsg.setRobotId(robotId); + endMsg.setMessage("寻源结束"); + sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); + } + }else{ + if(!isChange(pointDTO, oldEstimateGrid)){ + atomicInteger.incrementAndGet(); } } } catch (Exception e) { @@ -439,6 +467,7 @@ for (List list : costList) { strs2.add(CollectionUtil.join(list, " ")); } + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 if(CollectionUtil.isNotEmpty(costList)){ @@ -456,10 +485,11 @@ FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); //中子源计数率读取 + PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); log.info("init params:{}", JSON.toJSONString(pathInitDTO)); + //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } diff --git a/casic-web/src/main/resources/config/path/map.txt b/casic-web/src/main/resources/config/path/map.txt index 61e2959..3c4710e 100644 --- a/casic-web/src/main/resources/config/path/map.txt +++ b/casic-web/src/main/resources/config/path/map.txt @@ -2,7 +2,7 @@ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 @@ -16,8 +16,8 @@ 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 3bb475f..6cc1c58 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java @@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.cache.CacheUtil; import com.casic.missiles.core.util.SpringContextHolder; @@ -76,6 +77,12 @@ @Value("${casic.file.uploadPath}") private String filePath; + /** + * /{robotId} + * @param file + * @param robotId + * @return + */ @SneakyThrows @ApiOperation(value = "PCD上传接口") @PostMapping(value = "/uploadPcd") @@ -174,6 +181,7 @@ if (request.getStepLen() == null) { request.setStepLen(2); } + log.info(JSON.toJSONString(request)); baseRobotService.startTrack(request); return ResponseDataDTO.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java new file mode 100644 index 0000000..acc38f3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/TaskEndMsg.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskEndMsg implements Serializable { + private String robotId; + private String message; + /** + * 1 正常 0 异常 + */ + private Integer code; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java index 2cb752f..663e484 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructStatusMsgEnums.java @@ -24,7 +24,8 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人热力图"); + HEAT_MAP("heat_map" , "机器人热力图"), + TASK_END("task_end" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java index 8a71e0b..06f8ae6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/StopStateMsgHandler.java @@ -30,10 +30,9 @@ public void process(String robotId, String topic, MqttMessage message) { index.put(index_key, index.get("index") + 1); - if (index.get(index_key)>30) { + if (index.get(index_key)>1) { index.put(index_key, 0); log.info("主键:{},停障状态topic:{},消息内容:{}", robotId, topic, message.toString()); - statusInfoService.saveStopState(robotId, message); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java index 46b5c3b..09fb440 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotStatusInfoServiceImpl.java @@ -15,7 +15,6 @@ import com.casic.missiles.modular.robot.dao.RobotStatusInfoMapper; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RobotStatusInfo; -import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotMsgResponseDTO; import com.casic.missiles.modular.robot.opt.instruct.base.dto.RobotResponseDTO; @@ -27,18 +26,15 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotStatusInfoService; import lombok.extern.slf4j.Slf4j; -import org.aspectj.util.FileUtil; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @@ -81,6 +77,10 @@ } private void wrapInfo(RobotStatusInfo statusInfo) { + StopStateResponseDTO stopStateResponseDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.STOP_STATE + statusInfo.getRobotId()); + if (stopStateResponseDTO != null) { + statusInfo.setSoft(stopStateResponseDTO.getSoft()); + } statusInfo.setDiscernTypeName(getDictName("discernType", statusInfo.getDiscernType())); //暂停状态 @@ -292,16 +292,16 @@ } } } - writeCache(dataNums,responseDTO.getMsg().getWidth(),responseDTO.getMsg().getHeight(),robotId); + writeCache(dataNums, responseDTO.getMsg().getWidth(), responseDTO.getMsg().getHeight(), robotId); } } } - private void writeCache(ArrayList integers,Integer width,Integer height,String robotId) { - List> arrays = CollectionUtil.split(integers,width); + private void writeCache(ArrayList integers, Integer width, Integer height, String robotId) { + List> arrays = CollectionUtil.split(integers, width); ArrayList> arrayList = new ArrayList<>(); for (List array : arrays) { - arrayList.add((ArrayList)array); + arrayList.add((ArrayList) array); } CollectionUtil.reverse(arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java index fd49e2e..f7dbe10 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/TaskInfoServiceImpl.java @@ -47,6 +47,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -81,7 +82,7 @@ /** * 5000 ms */ - @Value("${casic.task.duration:3000}") + @Value("${casic.task.duration:2000}") private Integer stayDuration; @Value("${casic.algorithm.path:-1}") private String path; @@ -90,7 +91,7 @@ */ @Value("${casic.obstacle:10}") private Integer obstacle; - + private volatile AtomicInteger atomicInteger = new AtomicInteger(); public TaskInfoServiceImpl(@Lazy IRouteInfoService routeInfoService, IRobotStatusInfoService statusInfoService, AbstractDictService dictService, @Lazy IAlarmRecordService recordService, @Lazy ITaskHeatMapService taskHeatMapService, IAlgorithmService algorithmService, IRobotCacheService cacheService, @Lazy IBaseRobotService baseRobotService, ITaskInfoImgService imgService, ITaskGridInfoService taskGridInfoService) { this.routeInfoService = routeInfoService; this.statusInfoService = statusInfoService; @@ -128,9 +129,19 @@ } catch (Exception e) { log.error(e.getMessage()); } - } - + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { + try { + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(heatMap); + String msg = JSON.toJSONString(wsMsgBaseDTO); +// log.info("推送{}消息:{}", enums.getRemarks(), msg); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); + } + } @Override public List selectTaskInfoPage(Page page, QueryWrapper query) { return this.baseMapper.selectTaskInfoPage(page, query); @@ -187,11 +198,11 @@ private void openTask(StartTrackRequest request, String robotId) { QueryWrapper query = new QueryWrapper<>(); - query.eq("target_id", request.getTrack_name()); - List routeInfos = routeInfoService.list(query); - if (CollectionUtil.isEmpty(routeInfos)) { - throw new ServiceException(500, "路线不存在,请及时更新"); - } +// query.eq("target_id", request.getTrack_name()); +// List routeInfos = routeInfoService.list(query); +// if (CollectionUtil.isEmpty(routeInfos)) { +// throw new ServiceException(500, "路线不存在,请及时更新"); +// } // RouteInfo routeInfo = routeInfos.get(0); Integer isTask = 0; //开启寻源任务 @@ -335,14 +346,17 @@ PointNextDTO pointNextDTO = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId); GridPointDTO oldEstimateGrid = GridPointDTO.convertGridPoint(pointNextDTO); Boolean flag = lockPlanIngFlag(robotId); + //是否到达预期栅格 if (!flag) { log.info("未获取到规划任务,直接结束:{}",pointDTO); return; } + log.debug("pointDTO:{}", pointDTO); + log.debug("oldEstimateGrid:{}", oldEstimateGrid); try { - log.debug("oldEstimateGrid:{}", oldEstimateGrid); - if (pointNextDTO == null || isEquals(pointDTO, oldEstimateGrid)) { + if (pointNextDTO == null || oldEstimateGrid==null || isEquals(pointDTO, oldEstimateGrid)) { + atomicInteger = new AtomicInteger(0); log.info("当前栅格变更......", pointDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_POINT + robotId, pointDTO); //算法调用获取热力图 @@ -358,19 +372,24 @@ //存储算法输出栅格信息 AlgorithmResponse response = algorithmService.pathPlanning(pathPlanDTO); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ESTIMATE_GRID + robotId, response.getPointNextDTO()); - sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); - //存储循迹任务信息 - TaskGridInfo taskGridInfo = new TaskGridInfo(); - taskGridInfo.setCreateTime(new Date()); - taskGridInfo.setUpdateTime(new Date()); - taskGridInfo.setCurGridX(pointDTO.getX().intValue()); - taskGridInfo.setCurGridY(pointDTO.getY().intValue()); - taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); - taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); - taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); - taskGridInfo.setTaskId(taskId); - taskGridInfoService.save(taskGridInfo); + new Thread(){ + @Override + public void run() { + //存储循迹任务信息 + TaskGridInfo taskGridInfo = new TaskGridInfo(); + taskGridInfo.setCreateTime(new Date()); + taskGridInfo.setUpdateTime(new Date()); + taskGridInfo.setCurGridX(pointDTO.getX().intValue()); + taskGridInfo.setCurGridY(pointDTO.getY().intValue()); + taskGridInfo.setNeutronCount(new BigDecimal(pathPlanDTO.getZNow())); + taskGridInfo.setEstimateGridX(response.getPointNextDTO().getX()); + taskGridInfo.setEstimateGridY(response.getPointNextDTO().getY()); + taskGridInfo.setTaskId(taskId); + taskGridInfoService.save(taskGridInfo); + sendWebSocket(InstructStatusMsgEnums.HEAT_MAP, robotId, response.getTaskHeatMap()); + } + }.start(); try { //停留时间阈值 @@ -394,6 +413,15 @@ // baseRobotService.execCmdHandler(request, InstructCodeEnums.SOFTWARE_STOP); //循迹任务结束 closeTask(null, robotId); + TaskEndMsg endMsg = new TaskEndMsg(); + endMsg.setCode(1); + endMsg.setRobotId(robotId); + endMsg.setMessage("寻源结束"); + sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); + } + }else{ + if(!isChange(pointDTO, oldEstimateGrid)){ + atomicInteger.incrementAndGet(); } } } catch (Exception e) { @@ -439,6 +467,7 @@ for (List list : costList) { strs2.add(CollectionUtil.join(list, " ")); } + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 if(CollectionUtil.isNotEmpty(costList)){ @@ -456,10 +485,11 @@ FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); //中子源计数率读取 + PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); log.info("init params:{}", JSON.toJSONString(pathInitDTO)); + //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } diff --git a/casic-web/src/main/resources/config/path/map.txt b/casic-web/src/main/resources/config/path/map.txt index 61e2959..3c4710e 100644 --- a/casic-web/src/main/resources/config/path/map.txt +++ b/casic-web/src/main/resources/config/path/map.txt @@ -2,7 +2,7 @@ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 @@ -16,8 +16,8 @@ 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 diff --git a/casic-web/src/main/resources/config/path/map2.txt b/casic-web/src/main/resources/config/path/map2.txt new file mode 100644 index 0000000..90407e9 --- /dev/null +++ b/casic-web/src/main/resources/config/path/map2.txt @@ -0,0 +1,18 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 +0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0