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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java index 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java new file mode 100644 index 0000000..60f8d39 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; + +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface IRouteKeyPointInfoService extends IService { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(Page page, QueryWrapper query); + + /** + * 保存路线关键点 + * + * @param robotInfo 机器人信息 + * @param track_name 路线名称 + * @param list 列表 + * @return + */ + List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list); +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java new file mode 100644 index 0000000..60f8d39 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; + +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface IRouteKeyPointInfoService extends IService { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(Page page, QueryWrapper query); + + /** + * 保存路线关键点 + * + * @param robotInfo 机器人信息 + * @param track_name 路线名称 + * @param list 列表 + * @return + */ + List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java index 894fc75..59dc5cb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java @@ -71,10 +71,10 @@ public List saveListByRouteTargetIds(RobotInfo robotInfo, List result) { //检索当前库中机器人信息表 QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotInfo.getId()); + query.eq("robot_id" , robotInfo.getId()); QueryWrapper rmQuery = new QueryWrapper<>(); - rmQuery.notIn("target_id", result); + rmQuery.notIn("target_id" , result); //移除该机器人路线存储信息 remove(rmQuery); @@ -99,4 +99,11 @@ return list(query); } -} + @Override + public List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("robot_id" , robotInfo.getId()); + queryWrapper.eq("target_id" , track_name); + return list(queryWrapper); + } +} \ No newline at end of file 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java new file mode 100644 index 0000000..60f8d39 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; + +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface IRouteKeyPointInfoService extends IService { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(Page page, QueryWrapper query); + + /** + * 保存路线关键点 + * + * @param robotInfo 机器人信息 + * @param track_name 路线名称 + * @param list 列表 + * @return + */ + List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java index 894fc75..59dc5cb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java @@ -71,10 +71,10 @@ public List saveListByRouteTargetIds(RobotInfo robotInfo, List result) { //检索当前库中机器人信息表 QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotInfo.getId()); + query.eq("robot_id" , robotInfo.getId()); QueryWrapper rmQuery = new QueryWrapper<>(); - rmQuery.notIn("target_id", result); + rmQuery.notIn("target_id" , result); //移除该机器人路线存储信息 remove(rmQuery); @@ -99,4 +99,11 @@ return list(query); } -} + @Override + public List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("robot_id" , robotInfo.getId()); + queryWrapper.eq("target_id" , track_name); + return list(queryWrapper); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java new file mode 100644 index 0000000..e627576 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.robot.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RouteKeyPointInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +@Service +public class RouteKeyPointInfoServiceImpl extends ServiceImpl implements IRouteKeyPointInfoService { + private final IRouteInfoService infoService; + + public RouteKeyPointInfoServiceImpl(@Lazy IRouteInfoService infoService) { + this.infoService = infoService; + } + + @Override + public List selectRouteKeyPointInfoPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRouteKeyPointInfoPage(page, query); + } + + @Override + public List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list) { + + //删除路线关键点信息 + List routeInfos = infoService.getRouteInfoByTargetIds(robotInfo, track_name); + List keyPointInfos = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(routeInfos)) { + RouteInfo routeInfo = routeInfos.get(0); + QueryWrapper query = new QueryWrapper<>(); + query.eq("route_id" , routeInfo.getId()); + remove(query); + //生成关键点信息并保存 + for (String s : list) { + RouteKeyPointInfo keyPointInfo = new RouteKeyPointInfo(); + keyPointInfo.setCreateTime(new Date()); + keyPointInfo.setUpdateTime(new Date()); + keyPointInfo.setTargetId(s); + keyPointInfo.setPointName(s); + keyPointInfo.setRobotId(robotInfo.getId()); + keyPointInfo.setRouteId(routeInfo.getId()); + keyPointInfos.add(keyPointInfo); + } + saveBatch(keyPointInfos); + } + return keyPointInfos; + } + +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java new file mode 100644 index 0000000..60f8d39 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; + +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface IRouteKeyPointInfoService extends IService { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(Page page, QueryWrapper query); + + /** + * 保存路线关键点 + * + * @param robotInfo 机器人信息 + * @param track_name 路线名称 + * @param list 列表 + * @return + */ + List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java index 894fc75..59dc5cb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java @@ -71,10 +71,10 @@ public List saveListByRouteTargetIds(RobotInfo robotInfo, List result) { //检索当前库中机器人信息表 QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotInfo.getId()); + query.eq("robot_id" , robotInfo.getId()); QueryWrapper rmQuery = new QueryWrapper<>(); - rmQuery.notIn("target_id", result); + rmQuery.notIn("target_id" , result); //移除该机器人路线存储信息 remove(rmQuery); @@ -99,4 +99,11 @@ return list(query); } -} + @Override + public List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("robot_id" , robotInfo.getId()); + queryWrapper.eq("target_id" , track_name); + return list(queryWrapper); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java new file mode 100644 index 0000000..e627576 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.robot.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RouteKeyPointInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +@Service +public class RouteKeyPointInfoServiceImpl extends ServiceImpl implements IRouteKeyPointInfoService { + private final IRouteInfoService infoService; + + public RouteKeyPointInfoServiceImpl(@Lazy IRouteInfoService infoService) { + this.infoService = infoService; + } + + @Override + public List selectRouteKeyPointInfoPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRouteKeyPointInfoPage(page, query); + } + + @Override + public List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list) { + + //删除路线关键点信息 + List routeInfos = infoService.getRouteInfoByTargetIds(robotInfo, track_name); + List keyPointInfos = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(routeInfos)) { + RouteInfo routeInfo = routeInfos.get(0); + QueryWrapper query = new QueryWrapper<>(); + query.eq("route_id" , routeInfo.getId()); + remove(query); + //生成关键点信息并保存 + for (String s : list) { + RouteKeyPointInfo keyPointInfo = new RouteKeyPointInfo(); + keyPointInfo.setCreateTime(new Date()); + keyPointInfo.setUpdateTime(new Date()); + keyPointInfo.setTargetId(s); + keyPointInfo.setPointName(s); + keyPointInfo.setRobotId(robotInfo.getId()); + keyPointInfo.setRouteId(routeInfo.getId()); + keyPointInfos.add(keyPointInfo); + } + saveBatch(keyPointInfos); + } + return keyPointInfos; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java new file mode 100644 index 0000000..5f437a2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 线路关键点位信息对象VO + * + * @author lwh + * @date 2023-11-07 + */ +@Data +public class RouteKeyPointInfoVO { + private static final long serialVersionUID = 1L; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + private Long robotId; + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + private String targetId; + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + private Long routeId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (robotId != null) { + query.eq("robot_id" , robotId); + } + if (StrUtil.isNotEmpty(targetId)) { + query.eq("target_id" , targetId); + } + if (routeId != null) { + query.eq("route_id" , routeId); + } + return query; + } +} 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 2446169..737b68f 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 @@ -7,6 +7,7 @@ import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO; import com.casic.missiles.modular.robot.model.RobotInfo; import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; import com.casic.missiles.modular.robot.opt.instruct.dto.*; @@ -39,20 +40,20 @@ this.robotInfoService = robotInfoService; } - @ApiOperation(value = "启动/关闭录包", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/关闭录包" , notes = "返回 1成功 0失败") @GetMapping(value = "/dataRecord") public ResponseDataDTO dataRecord(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.DATA_RECORD); } - @ApiOperation(value = "启动/关闭建图", notes = "返回 1成功 0失败,建图进度请求状态接口") + @ApiOperation(value = "启动/关闭建图" , notes = "返回 1成功 0失败,建图进度请求状态接口") @GetMapping(value = "/slam") public ResponseDataDTO slam(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.SLAM); } - @ApiOperation(value = "转栅格地图", notes = "返回 1成功 0失败") + @ApiOperation(value = "转栅格地图" , notes = "返回 1成功 0失败") @GetMapping(value = "/changePcd") public ResponseDataDTO changePcd(@RequestBody DataRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.CHANGE_PCD); @@ -79,13 +80,19 @@ return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_LIST); } + @ApiOperation(value = "路线关键点读取") + @GetMapping(value = "/taskPointList") + public ResponseDataDTO> taskPointList(@RequestBody TrackPointListRequest request) { + return baseRobotService.execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + /** * 机器人请求id * * @param request * @return */ - @ApiOperation(value = "启动或关闭轨迹录制功能", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动或关闭轨迹录制功能" , notes = "返回 1成功 0失败") @GetMapping(value = "/trackRecord") public ResponseDataDTO trackRecord(@RequestBody TrackRecordRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.TRACK_RECORD); @@ -97,7 +104,7 @@ * @param request * @return */ - @ApiOperation(value = "启动或关闭循迹功能", notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") + @ApiOperation(value = "启动或关闭循迹功能" , notes = "返回 1成功 0失败 wait 启动时是否等待,0代表循迹启动即运动,不等待;1代表循迹启动原地等待。若无此字段,默认循迹启动不等待直接运动") @GetMapping(value = "/startTrack") public ResponseDataDTO startTrack(@RequestBody StartTrackRequest request) { return baseRobotService.execCmdHandler(request, InstructCodeEnums.START_TRACK); @@ -109,7 +116,7 @@ * @param request * @return */ - @ApiOperation(value = "导航开启/关闭接口", notes = "返回 1成功 0失败") + @ApiOperation(value = "导航开启/关闭接口" , notes = "返回 1成功 0失败") @GetMapping(value = "/ctrlNav") public ResponseDataDTO ctrlNav(@RequestBody CrlNavRequest request) { if (StrUtil.isEmpty(request.getSn())) { @@ -122,7 +129,7 @@ return list; } - @ApiOperation(value = "启动/取消暂停", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消暂停" , notes = "返回 1成功 0失败") @GetMapping(value = "/navPause") public ResponseDataDTO navPause(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -132,14 +139,14 @@ return list; } - @ApiOperation(value = "速度控制与反馈", notes = "超过0.5s停发会主动停止 返回 1成功 0失败") + @ApiOperation(value = "速度控制与反馈" , notes = "超过0.5s停发会主动停止 返回 1成功 0失败") @GetMapping(value = "/appCmdVel") public ResponseDataDTO appCmdVel(@RequestBody AppCmdVelRequest request) { ResponseDataDTO dto = baseRobotService.appCmdVel(request); return dto; } - @ApiOperation(value = "启动/取消停障", notes = "返回 1成功 0失败") + @ApiOperation(value = "启动/取消停障" , notes = "返回 1成功 0失败") @GetMapping(value = "/stopNavStop") public ResponseDataDTO stopNavStop(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -149,7 +156,7 @@ return list; } - @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)", notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") + @ApiOperation(value = "查询机器人最大运动速度功能(导航和停障)" , notes = "机器人返回当前设置最大速度参数给客户端,如果机器人不运动则无返回,如果未设置最大运动速度则返回当前运动速度") @GetMapping(value = "/getCurrentSpeed") public ResponseDataDTO getCurrentSpeed(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -159,7 +166,7 @@ return list; } - @ApiOperation(value = "获取数据包列表(暂不支持)", hidden = true) + @ApiOperation(value = "获取数据包列表(暂不支持)" , hidden = true) @GetMapping(value = "/getDataList") public ResponseDataDTO getDataList(@RequestBody CrlNavRequest request) { MessageRequestDTO messageDTO = new MessageRequestDTO(); @@ -175,12 +182,12 @@ * @param request 消息体 * @return */ - @ApiOperation(value = "实时状态读取接口", notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") + @ApiOperation(value = "实时状态读取接口" , notes = "get_navigation:获取当前导航状态 get_data_record:获取录包状态 get_track_record:获取轨迹录制状态,get_track:获取循迹状态 get_ins:获取ins状态 返回 0未开启 1开启 2 错误") @GetMapping(value = "/{cmdType}") public ResponseDataDTO commCmd(@PathVariable String cmdType, @RequestBody CrlNavRequest request) { RobotInfo info = robotInfoService.getById(request.getRobotId()); if (!InstructCodeEnums.commCmdMap.containsKey(cmdType)) { - return new ResponseDataDTO(false, 500, "指令不存在", 0); + return new ResponseDataDTO(false, 500, "指令不存在" , 0); } if (StrUtil.isEmpty(request.getSn())) { request.setSn(request.getRobotId() + ""); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java new file mode 100644 index 0000000..1f942c7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RouteKeyPointInfoController.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.robot.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import com.casic.missiles.modular.robot.vo.RouteKeyPointInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 线路关键点位信息Controller + * + * @author lwh + * @date 2023-11-07 + */ +@Api(tags = "线路关键点位信息") +@RestController +@RequestMapping("/robot/routeKeyPointInfo") +public class RouteKeyPointInfoController extends BaseController { + + private final IRouteKeyPointInfoService routeKeyPointInfoService; + + public RouteKeyPointInfoController(IRouteKeyPointInfoService routeKeyPointInfoService) { + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 线路关键点位信息列表 + */ + @ApiOperation(value = "列表查询") + @GetMapping(value = "/list") + public ResponseDataDTO> list(RouteKeyPointInfoVO routeKeyPointInfoVO) { + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + return ResponseDataDTO.success(routeKeyPointInfoService.list(query)); + } + + /** + * 线路关键点位信息分页列表 + */ + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(RouteKeyPointInfoVO routeKeyPointInfoVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = routeKeyPointInfoVO.genQuery(); + page = routeKeyPointInfoService.page(page, query); + return ResponseDataDTO.success(super.packForBT(page)); + } + + /** + * 新增线路关键点位信息 + */ + @ApiOperation(value = "新增接口" , hidden = true) + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.save(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 修改线路关键点位信息 + */ + @ApiOperation(value = "修改接口" , hidden = true) + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody RouteKeyPointInfo routeKeyPointInfo) { + routeKeyPointInfoService.updateById(routeKeyPointInfo); + return ResponseDataDTO.success(); + } + + /** + * 删除线路关键点位信息 + */ + @ApiOperation(value = "删除接口" , hidden = true) + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + routeKeyPointInfoService.removeById(id); + return ResponseDataDTO.success(); + } + + /** + * 线路关键点位信息详情 + */ + @ApiOperation(value = "详情查询" , hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(routeKeyPointInfoService.getById(id)); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java new file mode 100644 index 0000000..4a683eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/RouteKeyPointInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.robot.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 线路关键点位信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface RouteKeyPointInfoMapper extends BaseMapper { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml new file mode 100644 index 0000000..086fc7f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dao/mapping/RouteKeyPointInfoMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + id + , + create_time as createTime , + update_time as updateTime , + point_name as pointName , + robot_id as robotId , + target_id as targetId , + route_id as routeId + + + a + . + id + , + a + .create_time + as createTime , + a + .update_time + as updateTime , + a + .point_name + as pointName , + a + .robot_id + as robotId , + a + .target_id + as targetId , + a + .route_id + as routeId + + + + + + and robot_id = #{request.robotId} + + + and target_id = #{request.targetId} + + + and route_id = #{request.routeId} + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java new file mode 100644 index 0000000..79a285d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RouteKeyPointInfo.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.robot.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 线路关键点位信息对象 route_key_point_info + * + * @author lwh + * @date 2023-11-07 + */ +@Data +@TableName("route_key_point_info") +public class RouteKeyPointInfo extends Model { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty(value = "主键" , dataType = "Long") + @TableField("id") + private Long id; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间" , dataType = "Date") + @TableField("create_time") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间" , dataType = "Date") + @TableField("update_time") + private Date updateTime; + + /** + * 点位名称 + */ + @ApiModelProperty(value = "点位名称" , dataType = "String") + @TableField("point_name") + private String pointName; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + @TableField("robot_id") + private Long robotId; + + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + @TableField("target_id") + private String targetId; + + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + @TableField("route_id") + private Long routeId; + + + @Override + public String toString() { + return "RouteKeyPointInfo{" + + "id=" + id + + "createTime=" + createTime + + "updateTime=" + updateTime + + "pointName=" + pointName + + "robotId=" + robotId + + "targetId=" + targetId + + "routeId=" + routeId + + "}"; + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java index aed577f..36cc951 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/enums/InstructCodeEnums.java @@ -14,6 +14,8 @@ public enum InstructCodeEnums { TRACK_LIST("/get_track_list", "/get_track_list_response", "获取轨迹列表", true, new TypeReference>>() { }), + TASKPOINT_LIST("/get_taskpoint_list", "/get_taskpoint_list_response", "获取关键点列表", true, new TypeReference>>() { + }), //当前版本 暂不支撑 MAP_LIST("/get_map_list", "/get_map_list_response", "获取地图列表", true, new TypeReference>>() { }), diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java index a04e0f7..e0bda6b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/ChangPcdCmdHandler.java @@ -10,7 +10,7 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import org.springframework.stereotype.Component; -@Component("SLAM") +@Component("CHANGE_PCD") public class ChangPcdCmdHandler extends AbstractCmdHandler { protected ChangPcdCmdHandler(IRobotRouteOptService optService, IRobotInfoService service) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java index e69ee28..3e87f32 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackListCmdHandler.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.robot.service.IRouteInfoService; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component("TRACK_LIST") @@ -54,7 +55,7 @@ List list = (List) response.getData(); return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(getRobotInfo(), list)); } else { - return ResponseDataDTO.success(); + return ResponseDataDTO.success(new ArrayList<>()); } } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java new file mode 100644 index 0000000..27a3499 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/cmd/TrackPointListCmdHandler.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.robot.opt.handler.cmd; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; +import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; +import com.casic.missiles.modular.robot.opt.handler.AbstractCmdHandler; +import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; +import com.casic.missiles.modular.robot.opt.instruct.dto.TrackPointListRequest; +import com.casic.missiles.modular.robot.service.IRobotInfoService; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component("TASKPOINT_LIST") +public class TrackPointListCmdHandler extends AbstractCmdHandler> { + private final IRouteInfoService routeInfoService; + private final IRouteKeyPointInfoService routeKeyPointInfoService; + protected TrackPointListCmdHandler(IRobotRouteOptService optService, IRobotInfoService service, IRouteInfoService routeInfoService, IRouteKeyPointInfoService routeKeyPointInfoService) { + super(optService, service); + this.routeInfoService = routeInfoService; + this.routeKeyPointInfoService = routeKeyPointInfoService; + } + + /** + * 发送命令 + * + * @param request 消息请求体 + * @param enums 指令集 + * @return + */ + @Override + public ResponseDataDTO senderCmd(TrackPointListRequest request, InstructCodeEnums enums) { + if (StrUtil.isEmpty(request.getSn())) { + request.setSn(request.getRobotId() + ""); + } + MessageRequestDTO messageDTO = new MessageRequestDTO(); + messageDTO.setMsg(request); + ResponseDataDTO> list = optService.robotCmd(getRobotInfo(), InstructCodeEnums.TASKPOINT_LIST, messageDTO); + return list; + } + + /** + * 结果集调用 + * + * @param request 消息请求体 + * @param response 响应体 + * @return + */ + @Override + public ResponseDataDTO afterInvoke(TrackPointListRequest request, ResponseDataDTO response) { + if (response.getData() != null) { + List list = (List) response.getData(); + return ResponseDataDTO.success(routeKeyPointInfoService.saveListByTargetIds(getRobotInfo(),request.getTrack_name(), list)); + } else { + return ResponseDataDTO.success(); + } + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java index d036e12..b7da68a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java @@ -1,31 +1,32 @@ package com.casic.missiles.modular.robot.opt.impl; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.robot.IBaseRobotService; import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; import com.casic.missiles.modular.robot.opt.IRobotRouteOptService; import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums; import com.casic.missiles.modular.robot.opt.handler.IBaseCmdHandler; import com.casic.missiles.modular.robot.opt.instruct.base.dto.MessageRequestDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelRequest; -import com.casic.missiles.modular.robot.opt.instruct.dto.AppCmdVelResponse; -import com.casic.missiles.modular.robot.opt.instruct.dto.BaseRobotCmdDTO; -import com.casic.missiles.modular.robot.opt.instruct.dto.StartTrackRequest; +import com.casic.missiles.modular.robot.opt.instruct.dto.*; import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; import com.casic.missiles.mqtt.config.MqttClientConnection; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 机器人操作实现 */ +@Slf4j @Service public class RobotOptServiceImpl implements IBaseRobotService { private final IRobotRouteOptService robotRouteOptService; @@ -53,19 +54,39 @@ //机器人状态监测 } + @Transactional @SneakyThrows @Override public void initMonitor(RobotInfo info) { - //线路读取 - robotRouteOptService.getTrackList(info); - //获取Mqtt连接 - MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); - MqttClient client = mqttClient.getMqttClient(); + try { + // 默认主题订阅(用于机器消息推送) + MqttClientConnection mqttClient = MqttClientConnection.mqttClients.get(info.getId() + ""); + MqttClient client = mqttClient.getMqttClient(); - if (StrUtil.isNotEmpty(info.getDefaultTopic())) { - String[] topics = info.getDefaultTopic().split(","); - // 订阅默认消息,消息handler统一处理 - client.subscribe(topics); + //线路读取 + TrackListRequest trackListRequest = new TrackListRequest(); + trackListRequest.setRobotId(info.getId()); + trackListRequest.setSn(info.getId()+""); + ResponseDataDTO> requestDTO = execCmdHandler(trackListRequest, InstructCodeEnums.TRACK_LIST);; + + //线路关键点读取 + if (requestDTO.getData() != null) { + for (RouteInfo routeInfo : requestDTO.getData()) { + TrackPointListRequest request = new TrackPointListRequest(); + request.setRobotId(routeInfo.getRobotId()); + request.setSn(routeInfo.getRobotId() + ""); + request.setTrack_name(routeInfo.getTargetId()); + execCmdHandler(request, InstructCodeEnums.TASKPOINT_LIST); + } + } + + if (StrUtil.isNotEmpty(info.getDefaultTopic())) { + String[] topics = info.getDefaultTopic().split(","); + // 订阅默认消息,消息处理器统一处理 + client.subscribe(topics); + } + } catch (Exception e) { + log.error("机器人信息初始化读取失败" , e); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java new file mode 100644 index 0000000..37a5986 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/TrackPointListRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.robot.opt.instruct.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 获取循迹路线下发指令 + */ +@Data +public class TrackPointListRequest extends BaseRobotCmdDTO { + @ApiModelProperty(value = "sn编码(可不填 默认机器ID)", dataType = "String") + private String sn; + @ApiModelProperty(value = "目标轨迹名称", dataType = "String") + private String track_name; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java index 19405bb..1a29ec0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteInfoService.java @@ -39,4 +39,11 @@ * @param result 路线标识 */ List saveListByRouteTargetIds(RobotInfo robotInfo, List result); + + /** + * @param robotInfo 机器信息 + * @param track_name 路线名称 + * @return + */ + List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java new file mode 100644 index 0000000..60f8d39 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRouteKeyPointInfoService.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.robot.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; + +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +public interface IRouteKeyPointInfoService extends IService { + /** + * 线路关键点位信息 分页检索 + */ + List selectRouteKeyPointInfoPage(Page page, QueryWrapper query); + + /** + * 保存路线关键点 + * + * @param robotInfo 机器人信息 + * @param track_name 路线名称 + * @param list 列表 + * @return + */ + List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java index 894fc75..59dc5cb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteInfoServiceImpl.java @@ -71,10 +71,10 @@ public List saveListByRouteTargetIds(RobotInfo robotInfo, List result) { //检索当前库中机器人信息表 QueryWrapper query = new QueryWrapper<>(); - query.eq("robot_id", robotInfo.getId()); + query.eq("robot_id" , robotInfo.getId()); QueryWrapper rmQuery = new QueryWrapper<>(); - rmQuery.notIn("target_id", result); + rmQuery.notIn("target_id" , result); //移除该机器人路线存储信息 remove(rmQuery); @@ -99,4 +99,11 @@ return list(query); } -} + @Override + public List getRouteInfoByTargetIds(RobotInfo robotInfo, String track_name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("robot_id" , robotInfo.getId()); + queryWrapper.eq("target_id" , track_name); + return list(queryWrapper); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java new file mode 100644 index 0000000..e627576 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/impl/RouteKeyPointInfoServiceImpl.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.robot.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.robot.dao.RouteKeyPointInfoMapper; +import com.casic.missiles.modular.robot.model.RobotInfo; +import com.casic.missiles.modular.robot.model.RouteInfo; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import com.casic.missiles.modular.robot.service.IRouteInfoService; +import com.casic.missiles.modular.robot.service.IRouteKeyPointInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 线路关键点位信息 服务实现类 + *

+ * + * @author lwh + * @date 2023-11-07 + */ +@Service +public class RouteKeyPointInfoServiceImpl extends ServiceImpl implements IRouteKeyPointInfoService { + private final IRouteInfoService infoService; + + public RouteKeyPointInfoServiceImpl(@Lazy IRouteInfoService infoService) { + this.infoService = infoService; + } + + @Override + public List selectRouteKeyPointInfoPage(Page page, QueryWrapper query) { + return this.baseMapper.selectRouteKeyPointInfoPage(page, query); + } + + @Override + public List saveListByTargetIds(RobotInfo robotInfo, String track_name, List list) { + + //删除路线关键点信息 + List routeInfos = infoService.getRouteInfoByTargetIds(robotInfo, track_name); + List keyPointInfos = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(routeInfos)) { + RouteInfo routeInfo = routeInfos.get(0); + QueryWrapper query = new QueryWrapper<>(); + query.eq("route_id" , routeInfo.getId()); + remove(query); + //生成关键点信息并保存 + for (String s : list) { + RouteKeyPointInfo keyPointInfo = new RouteKeyPointInfo(); + keyPointInfo.setCreateTime(new Date()); + keyPointInfo.setUpdateTime(new Date()); + keyPointInfo.setTargetId(s); + keyPointInfo.setPointName(s); + keyPointInfo.setRobotId(robotInfo.getId()); + keyPointInfo.setRouteId(routeInfo.getId()); + keyPointInfos.add(keyPointInfo); + } + saveBatch(keyPointInfos); + } + return keyPointInfos; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java new file mode 100644 index 0000000..5f437a2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/vo/RouteKeyPointInfoVO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.robot.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.robot.model.RouteKeyPointInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 线路关键点位信息对象VO + * + * @author lwh + * @date 2023-11-07 + */ +@Data +public class RouteKeyPointInfoVO { + private static final long serialVersionUID = 1L; + + /** + * 机器人ID + */ + @ApiModelProperty(value = "机器人ID" , dataType = "Long") + private Long robotId; + /** + * 机器人点位标识 + */ + @ApiModelProperty(value = "机器人点位标识" , dataType = "String") + private String targetId; + /** + * 机器人线路ID + */ + @ApiModelProperty(value = "机器人线路ID" , dataType = "Long") + private Long routeId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (robotId != null) { + query.eq("robot_id" , robotId); + } + if (StrUtil.isNotEmpty(targetId)) { + query.eq("target_id" , targetId); + } + if (routeId != null) { + query.eq("route_id" , routeId); + } + return query; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java index d5a1c13..6e6033f 100644 --- a/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/mqtt/MsgUtils.java @@ -89,7 +89,7 @@ int i = 0; if (enums.isWaitReply()) { do { - Thread.sleep(100L); + Thread.sleep(200L); i++; } while (maps.isEmpty() && i < 60);