diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 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 31c3dd3..e022a6e 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 @@ -131,6 +131,7 @@ log.error(e.getMessage()); } } + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, GridPushDTO gridPushDTO) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -143,6 +144,7 @@ log.error(e.getMessage()); } } + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -374,7 +376,7 @@ GridPushDTO gridPushDTO = new GridPushDTO(); gridPushDTO.setCurrGridX(pointDTO.getX()); gridPushDTO.setCurrGridY(pointDTO.getY()); - if(oldEstimateGrid!=null){ + if (oldEstimateGrid != null) { gridPushDTO.setEstimateGridX(oldEstimateGrid.getX()); gridPushDTO.setEstimateGridY(oldEstimateGrid.getY()); } @@ -444,6 +446,9 @@ TaskEndMsg endMsg = new TaskEndMsg(); endMsg.setCode(1); endMsg.setRobotId(robotId); + + PointNextDTO nextDTO = response.getCoordinate(); + endMsg.setCoordinate(nextDTO); endMsg.setMessage("寻源结束"); sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); } @@ -487,49 +492,16 @@ if (initValue != 1) { //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { - List> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); - List strs = new ArrayList<>(); - List strs2 = new ArrayList<>(); + ArrayList> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); + Integer height = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId); if (height == null) { throw new ServiceException(500, "未获取到栅格宽度信息"); } - Integer newX = robotInfo.getNewGridX(); - Integer newY = height - robotInfo.getNewGridY(); - - //裁剪栅格 - List> newCostList = new ArrayList<>(); - for (int i = 0; i < costList.size(); i++) { - if (i <= newY) { - List newList = new ArrayList<>(); - List sourceList = costList.get(i); - for (int j = 0; j < sourceList.size(); j++) { - if (j >= newX) { - newList.add(sourceList.get(j)); - } - } - newCostList.add(newList); - } - } - //数组转换 - for (List list : newCostList) { - strs2.add(CollectionUtil.join(list, " ")); - } - FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); - - //行转列 为算法输入数据 - if (CollectionUtil.isNotEmpty(newCostList)) { - CollectionUtil.reverse(newCostList); - for (int i = 0; i < newCostList.get(0).size(); i++) { - ArrayList ints = new ArrayList<>(); - for (List list : newCostList) { - ints.add(list.get(i)); - } - strs.add(CollectionUtil.join(ints, " ")); - } - } - FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - +// FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); +// FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + log.info("path init ----------------------------------taskId:{}", taskId); + writeCost(costList, null, height, robotId); //中子源计数率读取 PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); @@ -541,6 +513,59 @@ } } + private void writeCost(ArrayList> costList, Integer width, Integer height, String robotId) { + List strs = new ArrayList<>(); + List strs2 = new ArrayList<>(); + RobotInfo robotInfo = cacheService.getRobotInfo(Long.valueOf(robotId)); + + if (robotInfo == null || robotInfo.getGridWidth() == null || robotInfo.getResolution() == null) { + log.info("robot gridHeight is not found...."); + return; + } + //计算左下角位置 + Integer newX = robotInfo.getNewGridX(); + Integer newY = height - robotInfo.getNewGridY(); +// log.info("left point:({},{})",robotInfo.getNewGridX(),robotInfo.getNewGridY()); + + //计算右上角位置 + Integer rightX = robotInfo.getRightGridX(); + Integer rightY = height - robotInfo.getRightGridY(); + + //裁剪栅格 + List> newCostList = new ArrayList<>(); + for (int i = 0; i < costList.size(); i++) { + if (i <= newY && i >= rightY) { + List newList = new ArrayList<>(); + List sourceList = costList.get(i); + for (int j = 0; j < sourceList.size(); j++) { + if (j >= newX && j <= rightX) { + newList.add(sourceList.get(j)); + } + } + newCostList.add(newList); + } + } + + for (List list : newCostList) { + strs2.add(CollectionUtil.join(list, " ")); + } + + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); + + //行转列 为算法输入数据 + if (CollectionUtil.isNotEmpty(newCostList)) { + CollectionUtil.reverse(newCostList); + for (int i = 0; i < newCostList.get(0).size(); i++) { + ArrayList ints = new ArrayList<>(); + for (List list : newCostList) { + ints.add(list.get(i)); + } + strs.add(CollectionUtil.join(ints, " ")); + } + } + FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + } + /** * 回调测试接口 * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 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 31c3dd3..e022a6e 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 @@ -131,6 +131,7 @@ log.error(e.getMessage()); } } + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, GridPushDTO gridPushDTO) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -143,6 +144,7 @@ log.error(e.getMessage()); } } + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -374,7 +376,7 @@ GridPushDTO gridPushDTO = new GridPushDTO(); gridPushDTO.setCurrGridX(pointDTO.getX()); gridPushDTO.setCurrGridY(pointDTO.getY()); - if(oldEstimateGrid!=null){ + if (oldEstimateGrid != null) { gridPushDTO.setEstimateGridX(oldEstimateGrid.getX()); gridPushDTO.setEstimateGridY(oldEstimateGrid.getY()); } @@ -444,6 +446,9 @@ TaskEndMsg endMsg = new TaskEndMsg(); endMsg.setCode(1); endMsg.setRobotId(robotId); + + PointNextDTO nextDTO = response.getCoordinate(); + endMsg.setCoordinate(nextDTO); endMsg.setMessage("寻源结束"); sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); } @@ -487,49 +492,16 @@ if (initValue != 1) { //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { - List> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); - List strs = new ArrayList<>(); - List strs2 = new ArrayList<>(); + ArrayList> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); + Integer height = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId); if (height == null) { throw new ServiceException(500, "未获取到栅格宽度信息"); } - Integer newX = robotInfo.getNewGridX(); - Integer newY = height - robotInfo.getNewGridY(); - - //裁剪栅格 - List> newCostList = new ArrayList<>(); - for (int i = 0; i < costList.size(); i++) { - if (i <= newY) { - List newList = new ArrayList<>(); - List sourceList = costList.get(i); - for (int j = 0; j < sourceList.size(); j++) { - if (j >= newX) { - newList.add(sourceList.get(j)); - } - } - newCostList.add(newList); - } - } - //数组转换 - for (List list : newCostList) { - strs2.add(CollectionUtil.join(list, " ")); - } - FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); - - //行转列 为算法输入数据 - if (CollectionUtil.isNotEmpty(newCostList)) { - CollectionUtil.reverse(newCostList); - for (int i = 0; i < newCostList.get(0).size(); i++) { - ArrayList ints = new ArrayList<>(); - for (List list : newCostList) { - ints.add(list.get(i)); - } - strs.add(CollectionUtil.join(ints, " ")); - } - } - FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - +// FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); +// FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + log.info("path init ----------------------------------taskId:{}", taskId); + writeCost(costList, null, height, robotId); //中子源计数率读取 PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); @@ -541,6 +513,59 @@ } } + private void writeCost(ArrayList> costList, Integer width, Integer height, String robotId) { + List strs = new ArrayList<>(); + List strs2 = new ArrayList<>(); + RobotInfo robotInfo = cacheService.getRobotInfo(Long.valueOf(robotId)); + + if (robotInfo == null || robotInfo.getGridWidth() == null || robotInfo.getResolution() == null) { + log.info("robot gridHeight is not found...."); + return; + } + //计算左下角位置 + Integer newX = robotInfo.getNewGridX(); + Integer newY = height - robotInfo.getNewGridY(); +// log.info("left point:({},{})",robotInfo.getNewGridX(),robotInfo.getNewGridY()); + + //计算右上角位置 + Integer rightX = robotInfo.getRightGridX(); + Integer rightY = height - robotInfo.getRightGridY(); + + //裁剪栅格 + List> newCostList = new ArrayList<>(); + for (int i = 0; i < costList.size(); i++) { + if (i <= newY && i >= rightY) { + List newList = new ArrayList<>(); + List sourceList = costList.get(i); + for (int j = 0; j < sourceList.size(); j++) { + if (j >= newX && j <= rightX) { + newList.add(sourceList.get(j)); + } + } + newCostList.add(newList); + } + } + + for (List list : newCostList) { + strs2.add(CollectionUtil.join(list, " ")); + } + + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); + + //行转列 为算法输入数据 + if (CollectionUtil.isNotEmpty(newCostList)) { + CollectionUtil.reverse(newCostList); + for (int i = 0; i < newCostList.get(0).size(); i++) { + ArrayList ints = new ArrayList<>(); + for (List list : newCostList) { + ints.add(list.get(i)); + } + strs.add(CollectionUtil.join(ints, " ")); + } + } + FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + } + /** * 回调测试接口 * 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 f0446d1..162c5da 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 @@ -21,14 +21,13 @@ BufferedReader brError; String line = null; ProcessBuilder processBuilder = new ProcessBuilder(params); -// processBuilder.directory(new File("D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path")); + processBuilder.directory(new File("D:\\robot\\path")); Process p = processBuilder.start(); br = new BufferedReader(new InputStreamReader(p.getInputStream())); - brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = br.readLine()) != null || (line = brError.readLine()) != null) { +// brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while ((line = br.readLine()) != null) { //输出exe输出的信息以及错误信息 - System.out.println(line); res.add(line); } } catch (IOException e) { @@ -38,7 +37,7 @@ } public static void main(String[] args) { - String path = "D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path\\"; + String path = "D:\\robot\\path\\"; //算法初始化调用 String exePath = path + "init.exe"; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 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 31c3dd3..e022a6e 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 @@ -131,6 +131,7 @@ log.error(e.getMessage()); } } + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, GridPushDTO gridPushDTO) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -143,6 +144,7 @@ log.error(e.getMessage()); } } + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -374,7 +376,7 @@ GridPushDTO gridPushDTO = new GridPushDTO(); gridPushDTO.setCurrGridX(pointDTO.getX()); gridPushDTO.setCurrGridY(pointDTO.getY()); - if(oldEstimateGrid!=null){ + if (oldEstimateGrid != null) { gridPushDTO.setEstimateGridX(oldEstimateGrid.getX()); gridPushDTO.setEstimateGridY(oldEstimateGrid.getY()); } @@ -444,6 +446,9 @@ TaskEndMsg endMsg = new TaskEndMsg(); endMsg.setCode(1); endMsg.setRobotId(robotId); + + PointNextDTO nextDTO = response.getCoordinate(); + endMsg.setCoordinate(nextDTO); endMsg.setMessage("寻源结束"); sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); } @@ -487,49 +492,16 @@ if (initValue != 1) { //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { - List> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); - List strs = new ArrayList<>(); - List strs2 = new ArrayList<>(); + ArrayList> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); + Integer height = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId); if (height == null) { throw new ServiceException(500, "未获取到栅格宽度信息"); } - Integer newX = robotInfo.getNewGridX(); - Integer newY = height - robotInfo.getNewGridY(); - - //裁剪栅格 - List> newCostList = new ArrayList<>(); - for (int i = 0; i < costList.size(); i++) { - if (i <= newY) { - List newList = new ArrayList<>(); - List sourceList = costList.get(i); - for (int j = 0; j < sourceList.size(); j++) { - if (j >= newX) { - newList.add(sourceList.get(j)); - } - } - newCostList.add(newList); - } - } - //数组转换 - for (List list : newCostList) { - strs2.add(CollectionUtil.join(list, " ")); - } - FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); - - //行转列 为算法输入数据 - if (CollectionUtil.isNotEmpty(newCostList)) { - CollectionUtil.reverse(newCostList); - for (int i = 0; i < newCostList.get(0).size(); i++) { - ArrayList ints = new ArrayList<>(); - for (List list : newCostList) { - ints.add(list.get(i)); - } - strs.add(CollectionUtil.join(ints, " ")); - } - } - FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - +// FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); +// FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + log.info("path init ----------------------------------taskId:{}", taskId); + writeCost(costList, null, height, robotId); //中子源计数率读取 PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); @@ -541,6 +513,59 @@ } } + private void writeCost(ArrayList> costList, Integer width, Integer height, String robotId) { + List strs = new ArrayList<>(); + List strs2 = new ArrayList<>(); + RobotInfo robotInfo = cacheService.getRobotInfo(Long.valueOf(robotId)); + + if (robotInfo == null || robotInfo.getGridWidth() == null || robotInfo.getResolution() == null) { + log.info("robot gridHeight is not found...."); + return; + } + //计算左下角位置 + Integer newX = robotInfo.getNewGridX(); + Integer newY = height - robotInfo.getNewGridY(); +// log.info("left point:({},{})",robotInfo.getNewGridX(),robotInfo.getNewGridY()); + + //计算右上角位置 + Integer rightX = robotInfo.getRightGridX(); + Integer rightY = height - robotInfo.getRightGridY(); + + //裁剪栅格 + List> newCostList = new ArrayList<>(); + for (int i = 0; i < costList.size(); i++) { + if (i <= newY && i >= rightY) { + List newList = new ArrayList<>(); + List sourceList = costList.get(i); + for (int j = 0; j < sourceList.size(); j++) { + if (j >= newX && j <= rightX) { + newList.add(sourceList.get(j)); + } + } + newCostList.add(newList); + } + } + + for (List list : newCostList) { + strs2.add(CollectionUtil.join(list, " ")); + } + + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); + + //行转列 为算法输入数据 + if (CollectionUtil.isNotEmpty(newCostList)) { + CollectionUtil.reverse(newCostList); + for (int i = 0; i < newCostList.get(0).size(); i++) { + ArrayList ints = new ArrayList<>(); + for (List list : newCostList) { + ints.add(list.get(i)); + } + strs.add(CollectionUtil.join(ints, " ")); + } + } + FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + } + /** * 回调测试接口 * 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 f0446d1..162c5da 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 @@ -21,14 +21,13 @@ BufferedReader brError; String line = null; ProcessBuilder processBuilder = new ProcessBuilder(params); -// processBuilder.directory(new File("D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path")); + processBuilder.directory(new File("D:\\robot\\path")); Process p = processBuilder.start(); br = new BufferedReader(new InputStreamReader(p.getInputStream())); - brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = br.readLine()) != null || (line = brError.readLine()) != null) { +// brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while ((line = br.readLine()) != null) { //输出exe输出的信息以及错误信息 - System.out.println(line); res.add(line); } } catch (IOException e) { @@ -38,7 +37,7 @@ } public static void main(String[] args) { - String path = "D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path\\"; + String path = "D:\\robot\\path\\"; //算法初始化调用 String exePath = path + "init.exe"; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java index 06c8bc0..38f04c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java @@ -43,7 +43,8 @@ } } - public static void downPcd(OutputStream outputStream, String urlPath) throws IOException { + + public static boolean downPcd(OutputStream outputStream, String urlPath) throws IOException { InputStream inputStream = null; try { // 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系 @@ -57,9 +58,10 @@ while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } - + return true; } catch (Exception e) { e.printStackTrace(); + return false; } finally { if (inputStream != null) { inputStream.close(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 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 31c3dd3..e022a6e 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 @@ -131,6 +131,7 @@ log.error(e.getMessage()); } } + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, GridPushDTO gridPushDTO) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -143,6 +144,7 @@ log.error(e.getMessage()); } } + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -374,7 +376,7 @@ GridPushDTO gridPushDTO = new GridPushDTO(); gridPushDTO.setCurrGridX(pointDTO.getX()); gridPushDTO.setCurrGridY(pointDTO.getY()); - if(oldEstimateGrid!=null){ + if (oldEstimateGrid != null) { gridPushDTO.setEstimateGridX(oldEstimateGrid.getX()); gridPushDTO.setEstimateGridY(oldEstimateGrid.getY()); } @@ -444,6 +446,9 @@ TaskEndMsg endMsg = new TaskEndMsg(); endMsg.setCode(1); endMsg.setRobotId(robotId); + + PointNextDTO nextDTO = response.getCoordinate(); + endMsg.setCoordinate(nextDTO); endMsg.setMessage("寻源结束"); sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); } @@ -487,49 +492,16 @@ if (initValue != 1) { //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { - List> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); - List strs = new ArrayList<>(); - List strs2 = new ArrayList<>(); + ArrayList> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); + Integer height = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId); if (height == null) { throw new ServiceException(500, "未获取到栅格宽度信息"); } - Integer newX = robotInfo.getNewGridX(); - Integer newY = height - robotInfo.getNewGridY(); - - //裁剪栅格 - List> newCostList = new ArrayList<>(); - for (int i = 0; i < costList.size(); i++) { - if (i <= newY) { - List newList = new ArrayList<>(); - List sourceList = costList.get(i); - for (int j = 0; j < sourceList.size(); j++) { - if (j >= newX) { - newList.add(sourceList.get(j)); - } - } - newCostList.add(newList); - } - } - //数组转换 - for (List list : newCostList) { - strs2.add(CollectionUtil.join(list, " ")); - } - FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); - - //行转列 为算法输入数据 - if (CollectionUtil.isNotEmpty(newCostList)) { - CollectionUtil.reverse(newCostList); - for (int i = 0; i < newCostList.get(0).size(); i++) { - ArrayList ints = new ArrayList<>(); - for (List list : newCostList) { - ints.add(list.get(i)); - } - strs.add(CollectionUtil.join(ints, " ")); - } - } - FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - +// FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); +// FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + log.info("path init ----------------------------------taskId:{}", taskId); + writeCost(costList, null, height, robotId); //中子源计数率读取 PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); @@ -541,6 +513,59 @@ } } + private void writeCost(ArrayList> costList, Integer width, Integer height, String robotId) { + List strs = new ArrayList<>(); + List strs2 = new ArrayList<>(); + RobotInfo robotInfo = cacheService.getRobotInfo(Long.valueOf(robotId)); + + if (robotInfo == null || robotInfo.getGridWidth() == null || robotInfo.getResolution() == null) { + log.info("robot gridHeight is not found...."); + return; + } + //计算左下角位置 + Integer newX = robotInfo.getNewGridX(); + Integer newY = height - robotInfo.getNewGridY(); +// log.info("left point:({},{})",robotInfo.getNewGridX(),robotInfo.getNewGridY()); + + //计算右上角位置 + Integer rightX = robotInfo.getRightGridX(); + Integer rightY = height - robotInfo.getRightGridY(); + + //裁剪栅格 + List> newCostList = new ArrayList<>(); + for (int i = 0; i < costList.size(); i++) { + if (i <= newY && i >= rightY) { + List newList = new ArrayList<>(); + List sourceList = costList.get(i); + for (int j = 0; j < sourceList.size(); j++) { + if (j >= newX && j <= rightX) { + newList.add(sourceList.get(j)); + } + } + newCostList.add(newList); + } + } + + for (List list : newCostList) { + strs2.add(CollectionUtil.join(list, " ")); + } + + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); + + //行转列 为算法输入数据 + if (CollectionUtil.isNotEmpty(newCostList)) { + CollectionUtil.reverse(newCostList); + for (int i = 0; i < newCostList.get(0).size(); i++) { + ArrayList ints = new ArrayList<>(); + for (List list : newCostList) { + ints.add(list.get(i)); + } + strs.add(CollectionUtil.join(ints, " ")); + } + } + FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + } + /** * 回调测试接口 * 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 f0446d1..162c5da 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 @@ -21,14 +21,13 @@ BufferedReader brError; String line = null; ProcessBuilder processBuilder = new ProcessBuilder(params); -// processBuilder.directory(new File("D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path")); + processBuilder.directory(new File("D:\\robot\\path")); Process p = processBuilder.start(); br = new BufferedReader(new InputStreamReader(p.getInputStream())); - brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = br.readLine()) != null || (line = brError.readLine()) != null) { +// brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while ((line = br.readLine()) != null) { //输出exe输出的信息以及错误信息 - System.out.println(line); res.add(line); } } catch (IOException e) { @@ -38,7 +37,7 @@ } public static void main(String[] args) { - String path = "D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path\\"; + String path = "D:\\robot\\path\\"; //算法初始化调用 String exePath = path + "init.exe"; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java index 06c8bc0..38f04c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java @@ -43,7 +43,8 @@ } } - public static void downPcd(OutputStream outputStream, String urlPath) throws IOException { + + public static boolean downPcd(OutputStream outputStream, String urlPath) throws IOException { InputStream inputStream = null; try { // 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系 @@ -57,9 +58,10 @@ while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } - + return true; } catch (Exception e) { e.printStackTrace(); + return false; } finally { if (inputStream != null) { inputStream.close(); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8e82df8..455c4bf 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.1.127:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://localhost:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: 123456 druid: diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index fead39b..d23f57e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -67,7 +67,6 @@ request.getX4())); } - @ApiOperation("psd导出4列数据接口,需传robotId;startTime,endTime,psdX1,psdX2为框选psd横坐标的起止值") @GetMapping("/psdExport") public void psdExport(Long robotId,String startTime,String endTime, Long psdX1, Long psdX2, HttpServletResponse response) { 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 d8b3363..cc23b53 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 @@ -116,19 +116,21 @@ robotInfoService.updateSpeed(robotInfo); return ResponseDataDTO.success(); } + @ApiOperation(value = "设置任务启动模式", notes = "返回 1成功 0失败") @PostMapping(value = "/setTaskMode") public ResponseDataDTO setTaskMode(@RequestBody TaskModeRequest request) { robotInfoService.setTaskMode(request); return ResponseDataDTO.success(); } + @ApiOperation(value = "机器人数据更新", notes = "1.pcd重载 2.路线及关键点数据重载") @PostMapping(value = "/reload") public ResponseDataDTO reload(@RequestBody BaseRobotCmdDTO request) { RobotInfo robotInfo = robotInfoService.getById(request.getRobotId()); baseRobotService.reloadTrack(request); baseRobotService.reloadPcd(robotInfo); - return ResponseDataDTO.success(); + return ResponseDataDTO.success("机器人数据更新中,请等待"); } @ApiOperation(value = "软件急停") @@ -162,7 +164,6 @@ } - /** * 机器人请求id * diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java new file mode 100644 index 0000000..ca5867e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/PcdLoadDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.robot.dto; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PcdLoadDTO implements Serializable { + /** + * 是否成功 0正常 1 异常 + */ + private Integer code; + /** + * 消息内容 + */ + private String msg; +} 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 index acc38f3..accda29 100644 --- 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 @@ -12,4 +12,8 @@ * 1 正常 0 异常 */ private Integer code; + /** + * 放射源所在位置 + */ + private PointNextDTO coordinate; } 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 3e741d7..9db7301 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 @@ -26,7 +26,8 @@ */ HEAT_MAP("heat_map" , "机器人热力图"), GRID("grid" , "栅格推送"), - TASK_END("task_end" , "任务结束"); + TASK_END("task_end" , "任务结束"), + PCD_LOAD("pcd_load" , "pcd下载"); /** * 请求地址 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 a6f5116..4f61954 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 @@ -47,6 +47,7 @@ if (StrUtil.isEmpty(initDTO.getZNow())) { initDTO.setZNow("0.00"); } + log.info(JSON.toJSONString(initDTO)); //算法路径及入参配置 List commends = new ArrayList<>(); 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 2e3f5cd..063df66 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 @@ -1,7 +1,9 @@ package com.casic.missiles.modular.robot.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -9,13 +11,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.common.WebSocket; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.dao.RobotInfoMapper; import com.casic.missiles.modular.robot.dto.GridPointDTO; +import com.casic.missiles.modular.robot.dto.PcdLoadDTO; import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.*; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.enums.InstructStatusMsgEnums; +import com.casic.missiles.modular.robot.opt.instruct.base.WsMsgBaseDTO; 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.dto.TaskModeRequest; @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -118,8 +125,8 @@ //计算右顶点 Integer rightX = robotInfo.getGridWidth().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); Integer rightY = robotInfo.getGridHeight().divide(robotInfo.getResolution(), 0, BigDecimal.ROUND_HALF_UP).intValue(); - update.set(RobotInfo::getRightGridX, rightX+gridPointDTO.getX().intValue()); - update.set(RobotInfo::getRightGridY, rightY+gridPointDTO.getY().intValue()); + update.set(RobotInfo::getRightGridX, rightX + gridPointDTO.getX().intValue()); + update.set(RobotInfo::getRightGridY, rightY + gridPointDTO.getY().intValue()); //下发障碍物栅格 sendCostMapResolution(robotInfo.getResolution(), robotInfo.getId()); @@ -146,11 +153,49 @@ @Override public void loadPcd(RobotInfo info) { - File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + new Thread(() -> { + File file = new File(filePath + "finalCloud_" + info.getId() + ".pcd"); + PcdLoadDTO pcdLoadDTO = new PcdLoadDTO(); + try { + boolean flag = PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); + pcdLoadDTO.setCode(flag?0:1); + if (flag) { + //推送下载完成信息 + pcdLoadDTO.setMsg("数据更新完成!"); + } else { + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + } catch (IOException e) { + e.printStackTrace(); + pcdLoadDTO.setMsg("数据更新失败,请联系管理员!"); + } + sendWebSocket(InstructStatusMsgEnums.PCD_LOAD, Convert.toStr(info.getId()), pcdLoadDTO); + }).start(); + + } + + /** + * websocket 连接 + */ + @Resource + private WebSocket webSocket; + + /** + * websocket 消息推送 + * + * @param enums 推送消息枚举 + * @param robotId 机器人连接 + * @param pcdLoadDTO 消息集合 + */ + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, PcdLoadDTO pcdLoadDTO) { try { - PcdDownUtil.downPcd(new FileOutputStream(file), info.getPcdDownload()); - } catch (IOException e) { - e.printStackTrace(); + WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); + wsMsgBaseDTO.setMsgKey(enums.getMsgKey()); + wsMsgBaseDTO.setData(pcdLoadDTO); + String msg = JSON.toJSONString(wsMsgBaseDTO); + webSocket.sendOneMessage(robotId, msg); + } catch (Exception e) { + log.error(e.getMessage()); } } 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 4c6d60d..98758bd 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 @@ -285,7 +285,6 @@ //发送栅格分辨率设定 cacheService.updateCostMap(robotId, responseDTO.getMsg()); robotInfoService.updateRobotGrid(robotId, responseDTO.getMsg()); - log.info("post log 00: test log"); if (responseDTO != null && responseDTO.getMsg().getData() != null) { ArrayList dataNums = new ArrayList<>(); //根据阈值转换栅格 @@ -314,7 +313,6 @@ } CollectionUtil.reverse(arrayList); - log.info("post log01:{},{}", width,height); //写入栅格宽度 CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId, arrayList); CacheUtil.put(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId, height); @@ -377,8 +375,6 @@ for (List list : newCostList) { strs2.add(CollectionUtil.join(list, " ")); } - log.info("post log02(newX,newY):{},{}", newX,newY); - log.info("post log02(rightX,rightY):{},{},{}", rightX,rightY,newCostList.size()); FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); //行转列 为算法输入数据 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 31c3dd3..e022a6e 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 @@ -131,6 +131,7 @@ log.error(e.getMessage()); } } + protected void sendWebSocket(InstructStatusMsgEnums enums, String robotId, GridPushDTO gridPushDTO) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -143,6 +144,7 @@ log.error(e.getMessage()); } } + protected void sendTaskMsg(InstructStatusMsgEnums enums, String robotId, TaskEndMsg heatMap) { try { WsMsgBaseDTO wsMsgBaseDTO = new WsMsgBaseDTO(); @@ -374,7 +376,7 @@ GridPushDTO gridPushDTO = new GridPushDTO(); gridPushDTO.setCurrGridX(pointDTO.getX()); gridPushDTO.setCurrGridY(pointDTO.getY()); - if(oldEstimateGrid!=null){ + if (oldEstimateGrid != null) { gridPushDTO.setEstimateGridX(oldEstimateGrid.getX()); gridPushDTO.setEstimateGridY(oldEstimateGrid.getY()); } @@ -444,6 +446,9 @@ TaskEndMsg endMsg = new TaskEndMsg(); endMsg.setCode(1); endMsg.setRobotId(robotId); + + PointNextDTO nextDTO = response.getCoordinate(); + endMsg.setCoordinate(nextDTO); endMsg.setMessage("寻源结束"); sendTaskMsg(InstructStatusMsgEnums.TASK_END, robotId, endMsg); } @@ -487,49 +492,16 @@ if (initValue != 1) { //执行初始化操作 if (cacheService.updateTaskInit(longId, 1)) { - List> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); - List strs = new ArrayList<>(); - List strs2 = new ArrayList<>(); + ArrayList> costList = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP + robotId); + Integer height = CacheUtil.get(RobotDictConstants.CACHE_SCHEMA, RobotDictConstants.KEY_COST_MAP_HEIGHT + robotId); if (height == null) { throw new ServiceException(500, "未获取到栅格宽度信息"); } - Integer newX = robotInfo.getNewGridX(); - Integer newY = height - robotInfo.getNewGridY(); - - //裁剪栅格 - List> newCostList = new ArrayList<>(); - for (int i = 0; i < costList.size(); i++) { - if (i <= newY) { - List newList = new ArrayList<>(); - List sourceList = costList.get(i); - for (int j = 0; j < sourceList.size(); j++) { - if (j >= newX) { - newList.add(sourceList.get(j)); - } - } - newCostList.add(newList); - } - } - //数组转换 - for (List list : newCostList) { - strs2.add(CollectionUtil.join(list, " ")); - } - FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); - - //行转列 为算法输入数据 - if (CollectionUtil.isNotEmpty(newCostList)) { - CollectionUtil.reverse(newCostList); - for (int i = 0; i < newCostList.get(0).size(); i++) { - ArrayList ints = new ArrayList<>(); - for (List list : newCostList) { - ints.add(list.get(i)); - } - strs.add(CollectionUtil.join(ints, " ")); - } - } - FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); - +// FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); +// FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + log.info("path init ----------------------------------taskId:{}", taskId); + writeCost(costList, null, height, robotId); //中子源计数率读取 PathInitDTO pathInitDTO = createInitDTO(robotInfo, pointDTO, taskId, robotId, stepLen); pathInitDTO.setZNow(cacheService.getNeutronCount(longId)); @@ -541,6 +513,59 @@ } } + private void writeCost(ArrayList> costList, Integer width, Integer height, String robotId) { + List strs = new ArrayList<>(); + List strs2 = new ArrayList<>(); + RobotInfo robotInfo = cacheService.getRobotInfo(Long.valueOf(robotId)); + + if (robotInfo == null || robotInfo.getGridWidth() == null || robotInfo.getResolution() == null) { + log.info("robot gridHeight is not found...."); + return; + } + //计算左下角位置 + Integer newX = robotInfo.getNewGridX(); + Integer newY = height - robotInfo.getNewGridY(); +// log.info("left point:({},{})",robotInfo.getNewGridX(),robotInfo.getNewGridY()); + + //计算右上角位置 + Integer rightX = robotInfo.getRightGridX(); + Integer rightY = height - robotInfo.getRightGridY(); + + //裁剪栅格 + List> newCostList = new ArrayList<>(); + for (int i = 0; i < costList.size(); i++) { + if (i <= newY && i >= rightY) { + List newList = new ArrayList<>(); + List sourceList = costList.get(i); + for (int j = 0; j < sourceList.size(); j++) { + if (j >= newX && j <= rightX) { + newList.add(sourceList.get(j)); + } + } + newCostList.add(newList); + } + } + + for (List list : newCostList) { + strs2.add(CollectionUtil.join(list, " ")); + } + + FileUtil.writeLines(strs2, new File(path + "map2.txt"), "utf-8"); + + //行转列 为算法输入数据 + if (CollectionUtil.isNotEmpty(newCostList)) { + CollectionUtil.reverse(newCostList); + for (int i = 0; i < newCostList.get(0).size(); i++) { + ArrayList ints = new ArrayList<>(); + for (List list : newCostList) { + ints.add(list.get(i)); + } + strs.add(CollectionUtil.join(ints, " ")); + } + } + FileUtil.writeLines(strs, new File(path + "map.txt"), "utf-8"); + } + /** * 回调测试接口 * 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 f0446d1..162c5da 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 @@ -21,14 +21,13 @@ BufferedReader brError; String line = null; ProcessBuilder processBuilder = new ProcessBuilder(params); -// processBuilder.directory(new File("D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path")); + processBuilder.directory(new File("D:\\robot\\path")); Process p = processBuilder.start(); br = new BufferedReader(new InputStreamReader(p.getInputStream())); - brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = br.readLine()) != null || (line = brError.readLine()) != null) { +// brError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while ((line = br.readLine()) != null) { //输出exe输出的信息以及错误信息 - System.out.println(line); res.add(line); } } catch (IOException e) { @@ -38,7 +37,7 @@ } public static void main(String[] args) { - String path = "D:\\workspace\\server\\keti\\casic-robot-inspection\\casic-web\\src\\main\\resources\\config\\path\\"; + String path = "D:\\robot\\path\\"; //算法初始化调用 String exePath = path + "init.exe"; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java index 06c8bc0..38f04c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/utils/PcdDownUtil.java @@ -43,7 +43,8 @@ } } - public static void downPcd(OutputStream outputStream, String urlPath) throws IOException { + + public static boolean downPcd(OutputStream outputStream, String urlPath) throws IOException { InputStream inputStream = null; try { // 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系 @@ -57,9 +58,10 @@ while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } - + return true; } catch (Exception e) { e.printStackTrace(); + return false; } finally { if (inputStream != null) { inputStream.close(); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8e82df8..455c4bf 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.1.127:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://localhost:3306/casic_robot_inspection?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: 123456 druid: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index d3833ab..85116ac 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -42,8 +42,8 @@ session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 no-login-urls: /user/login,/kaptcha,/config/baseConfig - hikSdk: D:\code\robot\casic-robot-inspection\casic-web\src\main\resources\config\hiklib\HCNetSDK.dll - hikPlay: D:\code\robot\casic-robot-inspection\casic-web\src\main\resources\config\hiklib\PlayCtrl.dll + hikSdk: D:\workspace\server\keti\casic-robot-inspection\doc\hiklib\HCNetSDK.dll + hikPlay: D:\workspace\server\keti\casic-robot-inspection\doc\hiklib\PlayCtrl.dll algorithm: path: D:\workspace\server\keti\casic-robot-inspection\casic-web\src\main\resources\config\path\ initPathName: init.exe