diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java index 8658df1..df4a330 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java @@ -42,7 +42,7 @@ @Transactional @Override public AlgorithmResponse pathPlanningInit(PathInitDTO initDTO) { - if(StrUtil.isEmpty(initDTO.getCount())){ + if (StrUtil.isEmpty(initDTO.getCount())) { initDTO.setCount("0.00"); } log.info(JSON.toJSONString(initDTO)); @@ -63,14 +63,14 @@ @Transactional @Override public AlgorithmResponse pathPlanning(PathPlanDTO planDTO) { - if(StrUtil.isEmpty(planDTO.getCount())){ + if (StrUtil.isEmpty(planDTO.getCount())) { planDTO.setCount("0.01"); } //算法路径及入参配置 List commends = new ArrayList<>(); commends.add(planPath); commends.addAll(planDTO.toArray()); - log.info("寻源算法调用:{}",JSON.toJSONString(planDTO)); + log.info("寻源算法调用:{}", JSON.toJSONString(planDTO)); List res = AlgorithmUtils.invokeJob(commends); AlgorithmResponse response = getAlgorithmResponse(planDTO, res); //next 点位编写 @@ -86,7 +86,7 @@ AlgorithmResponse response = new AlgorithmResponse(); if (initDTO.getTaskId() != null && repetitionFile.exists()) { readAlgorithmResponse("repetition.txt", response, initDTO.getTaskId(), res); - + readAlgorithmResponse("step.txt", response, initDTO.getTaskId(), res); } else { log.info("taskId is empty!"); } @@ -104,7 +104,7 @@ */ public void readAlgorithmResponse(String fileName, AlgorithmResponse response, Long taskId, List res) { File file = new File(fileName); - if (!file.exists()) { + if (!file.exists()&&!fileName.startsWith("step")) { log.info("{} file is empty!", fileName); return; } @@ -134,6 +134,15 @@ String zTrain = zTrains.get(zTrains.size() - 1); response.getPointNextDTO().setZ(formatBigDecimal(zTrain)); } + default: + if (StrUtil.isNotEmpty(fileName) && fileName.startsWith("step")) { + File fileDir = new File("."); + File[] files = fileDir.listFiles((dir, name) -> name.endsWith(".txt") && name.startsWith("step")); + if (files != null && files.length > 0) { + String steps = FileUtil.readString(files[files.length - 1], CharsetUtil.CHARSET_UTF_8); + response.getTaskHeatMap().setRepetition(steps); + } + } break; } } @@ -145,7 +154,7 @@ * @param y slam y */ @Override - public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO pointDTO = new GridPointDTO(); BigDecimal scale = resolution; @@ -164,7 +173,7 @@ * @param pointDTO 栅格信息 * @return */ - public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO centerPoint = new GridPointDTO(); BigDecimal scale = resolution; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java index 8658df1..df4a330 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java @@ -42,7 +42,7 @@ @Transactional @Override public AlgorithmResponse pathPlanningInit(PathInitDTO initDTO) { - if(StrUtil.isEmpty(initDTO.getCount())){ + if (StrUtil.isEmpty(initDTO.getCount())) { initDTO.setCount("0.00"); } log.info(JSON.toJSONString(initDTO)); @@ -63,14 +63,14 @@ @Transactional @Override public AlgorithmResponse pathPlanning(PathPlanDTO planDTO) { - if(StrUtil.isEmpty(planDTO.getCount())){ + if (StrUtil.isEmpty(planDTO.getCount())) { planDTO.setCount("0.01"); } //算法路径及入参配置 List commends = new ArrayList<>(); commends.add(planPath); commends.addAll(planDTO.toArray()); - log.info("寻源算法调用:{}",JSON.toJSONString(planDTO)); + log.info("寻源算法调用:{}", JSON.toJSONString(planDTO)); List res = AlgorithmUtils.invokeJob(commends); AlgorithmResponse response = getAlgorithmResponse(planDTO, res); //next 点位编写 @@ -86,7 +86,7 @@ AlgorithmResponse response = new AlgorithmResponse(); if (initDTO.getTaskId() != null && repetitionFile.exists()) { readAlgorithmResponse("repetition.txt", response, initDTO.getTaskId(), res); - + readAlgorithmResponse("step.txt", response, initDTO.getTaskId(), res); } else { log.info("taskId is empty!"); } @@ -104,7 +104,7 @@ */ public void readAlgorithmResponse(String fileName, AlgorithmResponse response, Long taskId, List res) { File file = new File(fileName); - if (!file.exists()) { + if (!file.exists()&&!fileName.startsWith("step")) { log.info("{} file is empty!", fileName); return; } @@ -134,6 +134,15 @@ String zTrain = zTrains.get(zTrains.size() - 1); response.getPointNextDTO().setZ(formatBigDecimal(zTrain)); } + default: + if (StrUtil.isNotEmpty(fileName) && fileName.startsWith("step")) { + File fileDir = new File("."); + File[] files = fileDir.listFiles((dir, name) -> name.endsWith(".txt") && name.startsWith("step")); + if (files != null && files.length > 0) { + String steps = FileUtil.readString(files[files.length - 1], CharsetUtil.CHARSET_UTF_8); + response.getTaskHeatMap().setRepetition(steps); + } + } break; } } @@ -145,7 +154,7 @@ * @param y slam y */ @Override - public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO pointDTO = new GridPointDTO(); BigDecimal scale = resolution; @@ -164,7 +173,7 @@ * @param pointDTO 栅格信息 * @return */ - public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO centerPoint = new GridPointDTO(); BigDecimal scale = resolution; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java index f148b16..043e05d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.dto.CostMapResolutionRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.DataRecordRequest; import com.casic.missiles.modular.robot.opt.instruct.response.AppCostmapResponseDTO; import com.casic.missiles.modular.robot.service.*; import com.casic.missiles.modular.robot.utils.PcdDownUtil; @@ -99,9 +100,11 @@ if (robotInfo.getGridHeight() != null && robotInfo.getGridWidth() != null) { update.set(RobotInfo::getGridHeight, robotInfo.getGridHeight()); update.set(RobotInfo::getGridWidth, robotInfo.getGridWidth()); - update.set(RobotInfo::getResolution,robotInfo.getResolution()); + update.set(RobotInfo::getResolution, robotInfo.getResolution()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); + //重新生成栅格地图 + sendChangePcd(robotInfo.getId()); } update.eq(RobotInfo::getId, robotInfo.getId()); update(update); @@ -115,6 +118,13 @@ baseRobotService.execCmdHandler(request, InstructCodeEnums.COSTMAP_RESOLUTION); } + private void sendChangePcd(Long robotId) { + DataRecordRequest request = new DataRecordRequest(); + request.setAction(1); + request.setRobotId(robotId); + baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); + } + @Override public void loadPcd(RobotInfo info) { File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); @@ -129,7 +139,7 @@ public void loadTrack(RouteInfo routeInfo) { try { LambdaQueryWrapper pointQuery = new LambdaQueryWrapper<>(); - pointQuery.eq(RobotPointInfo::getRouteId,routeInfo.getId()); + pointQuery.eq(RobotPointInfo::getRouteId, routeInfo.getId()); pointInfoService.remove(pointQuery); RobotInfo info = getById(routeInfo.getRobotId()); String routeName = URLEncoder.encode(routeInfo.getRouteName(), "UTF-8"); @@ -146,8 +156,8 @@ @Override public void updateRobotGrid(String robotId, AppCostmapResponseDTO dto) { LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.set(RobotInfo::getOriginX,dto.getOrigin_x()); - lambdaUpdateWrapper.set(RobotInfo::getOriginY,dto.getOrigin_y()); + lambdaUpdateWrapper.set(RobotInfo::getOriginX, dto.getOrigin_x()); + lambdaUpdateWrapper.set(RobotInfo::getOriginY, dto.getOrigin_y()); lambdaUpdateWrapper.eq(RobotInfo::getId, robotId); update(lambdaUpdateWrapper); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java index 8658df1..df4a330 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java @@ -42,7 +42,7 @@ @Transactional @Override public AlgorithmResponse pathPlanningInit(PathInitDTO initDTO) { - if(StrUtil.isEmpty(initDTO.getCount())){ + if (StrUtil.isEmpty(initDTO.getCount())) { initDTO.setCount("0.00"); } log.info(JSON.toJSONString(initDTO)); @@ -63,14 +63,14 @@ @Transactional @Override public AlgorithmResponse pathPlanning(PathPlanDTO planDTO) { - if(StrUtil.isEmpty(planDTO.getCount())){ + if (StrUtil.isEmpty(planDTO.getCount())) { planDTO.setCount("0.01"); } //算法路径及入参配置 List commends = new ArrayList<>(); commends.add(planPath); commends.addAll(planDTO.toArray()); - log.info("寻源算法调用:{}",JSON.toJSONString(planDTO)); + log.info("寻源算法调用:{}", JSON.toJSONString(planDTO)); List res = AlgorithmUtils.invokeJob(commends); AlgorithmResponse response = getAlgorithmResponse(planDTO, res); //next 点位编写 @@ -86,7 +86,7 @@ AlgorithmResponse response = new AlgorithmResponse(); if (initDTO.getTaskId() != null && repetitionFile.exists()) { readAlgorithmResponse("repetition.txt", response, initDTO.getTaskId(), res); - + readAlgorithmResponse("step.txt", response, initDTO.getTaskId(), res); } else { log.info("taskId is empty!"); } @@ -104,7 +104,7 @@ */ public void readAlgorithmResponse(String fileName, AlgorithmResponse response, Long taskId, List res) { File file = new File(fileName); - if (!file.exists()) { + if (!file.exists()&&!fileName.startsWith("step")) { log.info("{} file is empty!", fileName); return; } @@ -134,6 +134,15 @@ String zTrain = zTrains.get(zTrains.size() - 1); response.getPointNextDTO().setZ(formatBigDecimal(zTrain)); } + default: + if (StrUtil.isNotEmpty(fileName) && fileName.startsWith("step")) { + File fileDir = new File("."); + File[] files = fileDir.listFiles((dir, name) -> name.endsWith(".txt") && name.startsWith("step")); + if (files != null && files.length > 0) { + String steps = FileUtil.readString(files[files.length - 1], CharsetUtil.CHARSET_UTF_8); + response.getTaskHeatMap().setRepetition(steps); + } + } break; } } @@ -145,7 +154,7 @@ * @param y slam y */ @Override - public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO pointDTO = new GridPointDTO(); BigDecimal scale = resolution; @@ -164,7 +173,7 @@ * @param pointDTO 栅格信息 * @return */ - public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO centerPoint = new GridPointDTO(); BigDecimal scale = resolution; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java index f148b16..043e05d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.dto.CostMapResolutionRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.DataRecordRequest; import com.casic.missiles.modular.robot.opt.instruct.response.AppCostmapResponseDTO; import com.casic.missiles.modular.robot.service.*; import com.casic.missiles.modular.robot.utils.PcdDownUtil; @@ -99,9 +100,11 @@ if (robotInfo.getGridHeight() != null && robotInfo.getGridWidth() != null) { update.set(RobotInfo::getGridHeight, robotInfo.getGridHeight()); update.set(RobotInfo::getGridWidth, robotInfo.getGridWidth()); - update.set(RobotInfo::getResolution,robotInfo.getResolution()); + update.set(RobotInfo::getResolution, robotInfo.getResolution()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); + //重新生成栅格地图 + sendChangePcd(robotInfo.getId()); } update.eq(RobotInfo::getId, robotInfo.getId()); update(update); @@ -115,6 +118,13 @@ baseRobotService.execCmdHandler(request, InstructCodeEnums.COSTMAP_RESOLUTION); } + private void sendChangePcd(Long robotId) { + DataRecordRequest request = new DataRecordRequest(); + request.setAction(1); + request.setRobotId(robotId); + baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); + } + @Override public void loadPcd(RobotInfo info) { File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); @@ -129,7 +139,7 @@ public void loadTrack(RouteInfo routeInfo) { try { LambdaQueryWrapper pointQuery = new LambdaQueryWrapper<>(); - pointQuery.eq(RobotPointInfo::getRouteId,routeInfo.getId()); + pointQuery.eq(RobotPointInfo::getRouteId, routeInfo.getId()); pointInfoService.remove(pointQuery); RobotInfo info = getById(routeInfo.getRobotId()); String routeName = URLEncoder.encode(routeInfo.getRouteName(), "UTF-8"); @@ -146,8 +156,8 @@ @Override public void updateRobotGrid(String robotId, AppCostmapResponseDTO dto) { LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.set(RobotInfo::getOriginX,dto.getOrigin_x()); - lambdaUpdateWrapper.set(RobotInfo::getOriginY,dto.getOrigin_y()); + lambdaUpdateWrapper.set(RobotInfo::getOriginX, dto.getOrigin_x()); + lambdaUpdateWrapper.set(RobotInfo::getOriginY, dto.getOrigin_y()); lambdaUpdateWrapper.eq(RobotInfo::getId, robotId); update(lambdaUpdateWrapper); } 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 39b3d2c..93745b6 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 @@ -187,12 +187,10 @@ Long currTaskId = taskInfo.getId(); statusInfoService.updateCurrTask(robotId, currRouteId, currTaskId); - //算法初始化标志创建 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_ID + robotId, currTaskId); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_INIT + robotId, 0); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ROUTE_ID + robotId, routeInfo.getId()); - } private void closeTask(StartTrackRequest request, String robotId) { @@ -261,7 +259,6 @@ //No.1 任务初始化 if (initValue != 1) { - //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId); @@ -270,7 +267,6 @@ //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } - } //No.2 任务执行中 @@ -292,7 +288,7 @@ 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()); //是否触发寻源操作 BigDecimal bigCount = new BigDecimal(pathPlanDTO.getCount()); if (bigCount.compareTo(robotInfo.getAlarmThreshold()) >= 0) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java index 8658df1..df4a330 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java @@ -42,7 +42,7 @@ @Transactional @Override public AlgorithmResponse pathPlanningInit(PathInitDTO initDTO) { - if(StrUtil.isEmpty(initDTO.getCount())){ + if (StrUtil.isEmpty(initDTO.getCount())) { initDTO.setCount("0.00"); } log.info(JSON.toJSONString(initDTO)); @@ -63,14 +63,14 @@ @Transactional @Override public AlgorithmResponse pathPlanning(PathPlanDTO planDTO) { - if(StrUtil.isEmpty(planDTO.getCount())){ + if (StrUtil.isEmpty(planDTO.getCount())) { planDTO.setCount("0.01"); } //算法路径及入参配置 List commends = new ArrayList<>(); commends.add(planPath); commends.addAll(planDTO.toArray()); - log.info("寻源算法调用:{}",JSON.toJSONString(planDTO)); + log.info("寻源算法调用:{}", JSON.toJSONString(planDTO)); List res = AlgorithmUtils.invokeJob(commends); AlgorithmResponse response = getAlgorithmResponse(planDTO, res); //next 点位编写 @@ -86,7 +86,7 @@ AlgorithmResponse response = new AlgorithmResponse(); if (initDTO.getTaskId() != null && repetitionFile.exists()) { readAlgorithmResponse("repetition.txt", response, initDTO.getTaskId(), res); - + readAlgorithmResponse("step.txt", response, initDTO.getTaskId(), res); } else { log.info("taskId is empty!"); } @@ -104,7 +104,7 @@ */ public void readAlgorithmResponse(String fileName, AlgorithmResponse response, Long taskId, List res) { File file = new File(fileName); - if (!file.exists()) { + if (!file.exists()&&!fileName.startsWith("step")) { log.info("{} file is empty!", fileName); return; } @@ -134,6 +134,15 @@ String zTrain = zTrains.get(zTrains.size() - 1); response.getPointNextDTO().setZ(formatBigDecimal(zTrain)); } + default: + if (StrUtil.isNotEmpty(fileName) && fileName.startsWith("step")) { + File fileDir = new File("."); + File[] files = fileDir.listFiles((dir, name) -> name.endsWith(".txt") && name.startsWith("step")); + if (files != null && files.length > 0) { + String steps = FileUtil.readString(files[files.length - 1], CharsetUtil.CHARSET_UTF_8); + response.getTaskHeatMap().setRepetition(steps); + } + } break; } } @@ -145,7 +154,7 @@ * @param y slam y */ @Override - public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO pointDTO = new GridPointDTO(); BigDecimal scale = resolution; @@ -164,7 +173,7 @@ * @param pointDTO 栅格信息 * @return */ - public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO centerPoint = new GridPointDTO(); BigDecimal scale = resolution; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java index f148b16..043e05d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.dto.CostMapResolutionRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.DataRecordRequest; import com.casic.missiles.modular.robot.opt.instruct.response.AppCostmapResponseDTO; import com.casic.missiles.modular.robot.service.*; import com.casic.missiles.modular.robot.utils.PcdDownUtil; @@ -99,9 +100,11 @@ if (robotInfo.getGridHeight() != null && robotInfo.getGridWidth() != null) { update.set(RobotInfo::getGridHeight, robotInfo.getGridHeight()); update.set(RobotInfo::getGridWidth, robotInfo.getGridWidth()); - update.set(RobotInfo::getResolution,robotInfo.getResolution()); + update.set(RobotInfo::getResolution, robotInfo.getResolution()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); + //重新生成栅格地图 + sendChangePcd(robotInfo.getId()); } update.eq(RobotInfo::getId, robotInfo.getId()); update(update); @@ -115,6 +118,13 @@ baseRobotService.execCmdHandler(request, InstructCodeEnums.COSTMAP_RESOLUTION); } + private void sendChangePcd(Long robotId) { + DataRecordRequest request = new DataRecordRequest(); + request.setAction(1); + request.setRobotId(robotId); + baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); + } + @Override public void loadPcd(RobotInfo info) { File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); @@ -129,7 +139,7 @@ public void loadTrack(RouteInfo routeInfo) { try { LambdaQueryWrapper pointQuery = new LambdaQueryWrapper<>(); - pointQuery.eq(RobotPointInfo::getRouteId,routeInfo.getId()); + pointQuery.eq(RobotPointInfo::getRouteId, routeInfo.getId()); pointInfoService.remove(pointQuery); RobotInfo info = getById(routeInfo.getRobotId()); String routeName = URLEncoder.encode(routeInfo.getRouteName(), "UTF-8"); @@ -146,8 +156,8 @@ @Override public void updateRobotGrid(String robotId, AppCostmapResponseDTO dto) { LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.set(RobotInfo::getOriginX,dto.getOrigin_x()); - lambdaUpdateWrapper.set(RobotInfo::getOriginY,dto.getOrigin_y()); + lambdaUpdateWrapper.set(RobotInfo::getOriginX, dto.getOrigin_x()); + lambdaUpdateWrapper.set(RobotInfo::getOriginY, dto.getOrigin_y()); lambdaUpdateWrapper.eq(RobotInfo::getId, robotId); update(lambdaUpdateWrapper); } 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 39b3d2c..93745b6 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 @@ -187,12 +187,10 @@ Long currTaskId = taskInfo.getId(); statusInfoService.updateCurrTask(robotId, currRouteId, currTaskId); - //算法初始化标志创建 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_ID + robotId, currTaskId); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_INIT + robotId, 0); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ROUTE_ID + robotId, routeInfo.getId()); - } private void closeTask(StartTrackRequest request, String robotId) { @@ -261,7 +259,6 @@ //No.1 任务初始化 if (initValue != 1) { - //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId); @@ -270,7 +267,6 @@ //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } - } //No.2 任务执行中 @@ -292,7 +288,7 @@ 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()); //是否触发寻源操作 BigDecimal bigCount = new BigDecimal(pathPlanDTO.getCount()); if (bigCount.compareTo(robotInfo.getAlarmThreshold()) >= 0) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java index f94d3d5..22864d1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java @@ -41,30 +41,29 @@ ArrayList invocation = new ArrayList(); invocation.add(exePath); - invocation.add("100"); - invocation.add("100"); - invocation.add("0.05"); + invocation.add("40"); + invocation.add("20"); + invocation.add("0.5"); invocation.add("5"); invocation.add("5"); - invokeJob(invocation); + //{"count":"null","robotId":"1","taskId":"1748224487696142338","x":"8","xMax":"100","y":"2","yMax":"100"} String planning = path + "PathPlanning.exe"; //{"open":"0,0,0,0,0,0,0,0","robotId":"1","taskId":"1748250669749735425","x":"6","xMax":"100","y":"2","yMax":"100"} //{"open":"1,1,1,1,1,1,1,1","robotId":"1","taskId":"1748252894098178049","x":"6","xMax":"100","y":"2","yMax":"100"} + //{"count":"6.0","open":"1,1,1,1,1,1,1,1","robotId":"1","taskId":"1750713404601159681","x":"6","xMax":"20","y":"2","yMax":"40"} ArrayList planInvocation = new ArrayList(); planInvocation.add(planning); - planInvocation.add("100"); - planInvocation.add("100"); + planInvocation.add("40"); + planInvocation.add("40"); planInvocation.add("1,1,0,1,1,1,1,1"); - planInvocation.add("20.99"); + planInvocation.add("6.0"); //next_X - planInvocation.add("10"); + planInvocation.add("6"); //next_Y - planInvocation.add("9"); + planInvocation.add("2"); ProcessBuilder processBuilder = new ProcessBuilder(); -// invokeJob(planInvocation); - + invokeJob(planInvocation); } - } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml index 2e7c309..db186ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/AlarmRecordMapper.xml @@ -56,5 +56,6 @@ ${ew.sqlSegment} + order by a.alarm_time desc diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java index c6246fe..a168116 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/TaskHeatMap.java @@ -51,14 +51,15 @@ @ApiModelProperty(value = "热力图数组", dataType = "String") @TableField(exist = false) - private List> repetitionList; + private List repetitionList; - public List> getRepetitionList() { + public List getRepetitionList() { if (CollectionUtil.isEmpty(repetitionList)) { + repetitionList = new ArrayList<>(); try { if (StrUtil.isNotEmpty(repetition)) { List strList = StrUtil.split(repetition.trim(), "\r\n"); - repetitionList = strList.stream().map(str -> { + strList.stream().forEach(str -> { List list = new ArrayList<>(); for (String s : StrUtil.split(str, " ")) { BigDecimal bigDecimal = new BigDecimal(s); @@ -66,8 +67,8 @@ String format = decimalFormat.format(bigDecimal); list.add(format); } - return list; - }).collect(Collectors.toList()); + repetitionList.addAll(list); + }); } } catch (Exception e) { log.error("task_heat_map parse error,task_id:{}", taskId); 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 5d687e4..2cb752f 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,7 @@ * * @see com.casic.missiles.modular.robot.service.impl.TaskInfoServiceImpl */ - HEAT_MAP("heat_map" , "机器人状态消息"); + HEAT_MAP("heat_map" , "机器人热力图"); /** * 请求地址 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java index 00e34b0..cefe2cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/StartTrackCmdHandler.java @@ -5,7 +5,6 @@ import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; -import com.casic.missiles.modular.robot.model.TaskInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; @@ -14,11 +13,13 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @Component("START_TRACK") public class StartTrackCmdHandler extends AbstractCmdHandler { private final ITaskInfoService taskInfoService; @@ -53,7 +54,15 @@ throw new ServiceException(500, "路线关键点不存在,请重新加载路线信息"); } messageDTO.setMsg(request); - ResponseDataDTO list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + ResponseDataDTO list = null; + if (request.getAction() != 1) { + taskInfoService.reloadTask(request, getRobotInfo()); + } + try { + list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.START_TRACK, messageDTO); + } catch (Exception e) { + log.error(e.getMessage()); + } return list; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index 1ebbfdd..c2c2773 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -117,11 +117,16 @@ //线路关键点读取 if (requestDTO.getData() != null) { for (RouteInfo routeInfo : requestDTO.getData()) { + if("11-1 79-1".equals(routeInfo.getRouteName())){ + continue; + } TrackPointListRequest request = new TrackPointListRequest(); request.setRobotId(routeInfo.getRobotId()); request.setSn(routeInfo.getRobotId() + ""); request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + //机器人路线读取 robotInfoService.loadTrack(routeInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java index a7b4174..e40e1f6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/listener/MqttMsgReceiver.java @@ -37,6 +37,7 @@ */ @Override public void connectionLost(Throwable throwable) { + throwable.printStackTrace(); statusInfoService.updateConnStatus(mqttClientId, 0); log.info("mqtt close----------------------"); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java index 8658df1..df4a330 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/AlgorithmServiceImpl.java @@ -42,7 +42,7 @@ @Transactional @Override public AlgorithmResponse pathPlanningInit(PathInitDTO initDTO) { - if(StrUtil.isEmpty(initDTO.getCount())){ + if (StrUtil.isEmpty(initDTO.getCount())) { initDTO.setCount("0.00"); } log.info(JSON.toJSONString(initDTO)); @@ -63,14 +63,14 @@ @Transactional @Override public AlgorithmResponse pathPlanning(PathPlanDTO planDTO) { - if(StrUtil.isEmpty(planDTO.getCount())){ + if (StrUtil.isEmpty(planDTO.getCount())) { planDTO.setCount("0.01"); } //算法路径及入参配置 List commends = new ArrayList<>(); commends.add(planPath); commends.addAll(planDTO.toArray()); - log.info("寻源算法调用:{}",JSON.toJSONString(planDTO)); + log.info("寻源算法调用:{}", JSON.toJSONString(planDTO)); List res = AlgorithmUtils.invokeJob(commends); AlgorithmResponse response = getAlgorithmResponse(planDTO, res); //next 点位编写 @@ -86,7 +86,7 @@ AlgorithmResponse response = new AlgorithmResponse(); if (initDTO.getTaskId() != null && repetitionFile.exists()) { readAlgorithmResponse("repetition.txt", response, initDTO.getTaskId(), res); - + readAlgorithmResponse("step.txt", response, initDTO.getTaskId(), res); } else { log.info("taskId is empty!"); } @@ -104,7 +104,7 @@ */ public void readAlgorithmResponse(String fileName, AlgorithmResponse response, Long taskId, List res) { File file = new File(fileName); - if (!file.exists()) { + if (!file.exists()&&!fileName.startsWith("step")) { log.info("{} file is empty!", fileName); return; } @@ -134,6 +134,15 @@ String zTrain = zTrains.get(zTrains.size() - 1); response.getPointNextDTO().setZ(formatBigDecimal(zTrain)); } + default: + if (StrUtil.isNotEmpty(fileName) && fileName.startsWith("step")) { + File fileDir = new File("."); + File[] files = fileDir.listFiles((dir, name) -> name.endsWith(".txt") && name.startsWith("step")); + if (files != null && files.length > 0) { + String steps = FileUtil.readString(files[files.length - 1], CharsetUtil.CHARSET_UTF_8); + response.getTaskHeatMap().setRepetition(steps); + } + } break; } } @@ -145,7 +154,7 @@ * @param y slam y */ @Override - public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertSlamToGrid(BigDecimal x, BigDecimal y, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO pointDTO = new GridPointDTO(); BigDecimal scale = resolution; @@ -164,7 +173,7 @@ * @param pointDTO 栅格信息 * @return */ - public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO,BigDecimal resolution, RobotInfo robotInfo) { + public GridPointDTO convertGridCenterPoint(GridPointDTO pointDTO, BigDecimal resolution, RobotInfo robotInfo) { GridPointDTO centerPoint = new GridPointDTO(); BigDecimal scale = resolution; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java index f148b16..043e05d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RobotInfoServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.dto.CostMapResolutionRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.DataRecordRequest; import com.casic.missiles.modular.robot.opt.instruct.response.AppCostmapResponseDTO; import com.casic.missiles.modular.robot.service.*; import com.casic.missiles.modular.robot.utils.PcdDownUtil; @@ -99,9 +100,11 @@ if (robotInfo.getGridHeight() != null && robotInfo.getGridWidth() != null) { update.set(RobotInfo::getGridHeight, robotInfo.getGridHeight()); update.set(RobotInfo::getGridWidth, robotInfo.getGridWidth()); - update.set(RobotInfo::getResolution,robotInfo.getResolution()); + update.set(RobotInfo::getResolution, robotInfo.getResolution()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); + //重新生成栅格地图 + sendChangePcd(robotInfo.getId()); } update.eq(RobotInfo::getId, robotInfo.getId()); update(update); @@ -115,6 +118,13 @@ baseRobotService.execCmdHandler(request, InstructCodeEnums.COSTMAP_RESOLUTION); } + private void sendChangePcd(Long robotId) { + DataRecordRequest request = new DataRecordRequest(); + request.setAction(1); + request.setRobotId(robotId); + baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); + } + @Override public void loadPcd(RobotInfo info) { File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); @@ -129,7 +139,7 @@ public void loadTrack(RouteInfo routeInfo) { try { LambdaQueryWrapper pointQuery = new LambdaQueryWrapper<>(); - pointQuery.eq(RobotPointInfo::getRouteId,routeInfo.getId()); + pointQuery.eq(RobotPointInfo::getRouteId, routeInfo.getId()); pointInfoService.remove(pointQuery); RobotInfo info = getById(routeInfo.getRobotId()); String routeName = URLEncoder.encode(routeInfo.getRouteName(), "UTF-8"); @@ -146,8 +156,8 @@ @Override public void updateRobotGrid(String robotId, AppCostmapResponseDTO dto) { LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.set(RobotInfo::getOriginX,dto.getOrigin_x()); - lambdaUpdateWrapper.set(RobotInfo::getOriginY,dto.getOrigin_y()); + lambdaUpdateWrapper.set(RobotInfo::getOriginX, dto.getOrigin_x()); + lambdaUpdateWrapper.set(RobotInfo::getOriginY, dto.getOrigin_y()); lambdaUpdateWrapper.eq(RobotInfo::getId, robotId); update(lambdaUpdateWrapper); } 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 39b3d2c..93745b6 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 @@ -187,12 +187,10 @@ Long currTaskId = taskInfo.getId(); statusInfoService.updateCurrTask(robotId, currRouteId, currTaskId); - //算法初始化标志创建 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_ID + robotId, currTaskId); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_TASK_INIT + robotId, 0); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_CUR_ROUTE_ID + robotId, routeInfo.getId()); - } private void closeTask(StartTrackRequest request, String robotId) { @@ -261,7 +259,6 @@ //No.1 任务初始化 if (initValue != 1) { - //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId); @@ -270,7 +267,6 @@ //执行1次算法 初始化操作 algorithmService.pathPlanningInit(pathInitDTO); } - } //No.2 任务执行中 @@ -292,7 +288,7 @@ 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()); //是否触发寻源操作 BigDecimal bigCount = new BigDecimal(pathPlanDTO.getCount()); if (bigCount.compareTo(robotInfo.getAlarmThreshold()) >= 0) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java index f94d3d5..22864d1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/AlgorithmUtils.java @@ -41,30 +41,29 @@ ArrayList invocation = new ArrayList(); invocation.add(exePath); - invocation.add("100"); - invocation.add("100"); - invocation.add("0.05"); + invocation.add("40"); + invocation.add("20"); + invocation.add("0.5"); invocation.add("5"); invocation.add("5"); - invokeJob(invocation); + //{"count":"null","robotId":"1","taskId":"1748224487696142338","x":"8","xMax":"100","y":"2","yMax":"100"} String planning = path + "PathPlanning.exe"; //{"open":"0,0,0,0,0,0,0,0","robotId":"1","taskId":"1748250669749735425","x":"6","xMax":"100","y":"2","yMax":"100"} //{"open":"1,1,1,1,1,1,1,1","robotId":"1","taskId":"1748252894098178049","x":"6","xMax":"100","y":"2","yMax":"100"} + //{"count":"6.0","open":"1,1,1,1,1,1,1,1","robotId":"1","taskId":"1750713404601159681","x":"6","xMax":"20","y":"2","yMax":"40"} ArrayList planInvocation = new ArrayList(); planInvocation.add(planning); - planInvocation.add("100"); - planInvocation.add("100"); + planInvocation.add("40"); + planInvocation.add("40"); planInvocation.add("1,1,0,1,1,1,1,1"); - planInvocation.add("20.99"); + planInvocation.add("6.0"); //next_X - planInvocation.add("10"); + planInvocation.add("6"); //next_Y - planInvocation.add("9"); + planInvocation.add("2"); ProcessBuilder processBuilder = new ProcessBuilder(); -// invokeJob(planInvocation); - + invokeJob(planInvocation); } - } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index a627b03..7dfb547 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -67,10 +67,17 @@ MqttClient client = mqttClient.getMqttClient(); log.info("{}指令:{}", enums.getRemarks(), JSON.toJSONString(messageDTO)); if (StrUtil.isNotEmpty(enums.getReqName())) { - mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); + try { + mqttClient.pub(enums.getReqName(), JSON.toJSONString(messageDTO)); + }catch (Exception e){ + log.error("消息发布异常"); + e.printStackTrace(); + } + } // 订阅返回值消息 if (StrUtil.isNotEmpty(enums.getRepName())) { + log.info(JSON.toJSONString(messageDTO)); client.subscribe(enums.getRepName(), 1, (topic, message) -> { String data = new String(message.getPayload()); if (StrUtil.isNotEmpty(data)) { @@ -80,10 +87,11 @@ if (data.endsWith("\"")) { data = data.substring(0, data.length() - 1); } + try { // data = data.replaceAll("\"", "\""); data = StringEscapeUtils.unescapeJson(data); log.info("{}指令回复:{}", enums.getRemarks(), data); - try { + maps.put("result", MsgUtils.convertMessage(data, enums)); }catch (Exception e){ e.printStackTrace();