远遥断开连接

This commit is contained in:
cbs 2025-04-28 14:37:58 +08:00
parent 53e897ceac
commit 5d830c5165
21 changed files with 249 additions and 20 deletions

View File

@ -15,5 +15,7 @@ public class PathPosedsDTO {
private String orderId;
private String orderType;
private String robotNo;
private String commandType;
private List<PathPosedsDataDTO> data;
private PathSwitchMapDTO arg;
}

View File

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.mqtt.api.path.dto;
import lombok.Data;
@Data
public class PathSwitchMapDTO {
private String floor;
private String areaId;
}

View File

@ -8,4 +8,7 @@ public class RemotePathPlanningDTO {
@Schema(description = "车辆编号")
private String robotNo;
@Schema(description = "AUTO自动、 MAN手动")
private String operationMode;
}

View File

@ -81,10 +81,18 @@ public class RemoteRobotController {
@GetMapping("/getMap")
@Operation(summary = "获得仓库点位地图Map")
@PreAuthorize("@ss.hasPermission('system:position-map:getMap')")
@PreAuthorize("@ss.hasPermission('remote:robot:getMap')")
public CommonResult<Object> getPositionMapList() {
Object result = remoteRobotService.getPositionMapList();
return success(result);
}
@PostMapping("/disconnect")
@Operation(summary = "断开连接")
@PreAuthorize("@ss.hasPermission('remote:robot:disconnect')")
public CommonResult<Boolean> remoteDisconnect(HttpServletRequest request) {
remoteRobotService.remoteDisconnect(request);
return success(true);
}
}

View File

@ -56,4 +56,10 @@ public interface RemoteRobotService {
* @return
*/
Object getPositionMapList();
/**
* 断开连接
* @param request
*/
void remoteDisconnect(HttpServletRequest request);
}

View File

@ -102,4 +102,17 @@ public class RemoteRobotServiceImpl implements RemoteRobotService{
public Object getPositionMapList() {
return remoteRobotApi.getRemotePositionMapList();
}
/**
* 断开连接
* @param request
*/
@Override
public void remoteDisconnect(HttpServletRequest request) {
String ip = IpUtils.getIp(request);
CommonResult<Boolean> result = remoteRobotApi.remoteDisconnect(ip);
if (!result.isSuccess()){
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
}
}
}

View File

@ -47,4 +47,8 @@ public interface RemoteRobotApi {
@PostMapping(PREFIX + "/getRemotePositionMapList")
@Operation(summary = "远遥查询地图")
Object getRemotePositionMapList();
@PostMapping(PREFIX + "/remoteDisconnect")
@Operation(summary = "断开连接")
CommonResult<Boolean> remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp);
}

View File

@ -307,4 +307,5 @@ public interface ErrorCodeConstants {
// ========== 区域变更点绑定 1_002_057_001 ==========
ErrorCode POSITION_CHANGE_POINT_BINDING_NOT_EXISTS = new ErrorCode(1_002_057_001, "区域变更点绑定不存在");
ErrorCode POSITION_CHANGE_POINT_SAME_MAP = new ErrorCode(1_002_057_001, "区域变更点绑定,不能是同一张地图");
}

View File

@ -106,5 +106,16 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
return result;
}
/**
* 断开连接
* @param remoteIp
* @return
*/
@Override
public CommonResult<Boolean> remoteDisconnect(String remoteIp) {
controllerInformationService.remoteDisconnect(remoteIp);
return CommonResult.success(true);
}
}

View File

@ -15,6 +15,9 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -65,11 +68,11 @@ public class PositionChangePointBindingController {
}
@GetMapping("/getItemBySortNum")
@Operation(summary = "根据排序查询点位信息")
@Operation(summary = "根据排序查询点位信息(区域变更点)")
@Parameter(name = "sortNum", description = "点位自增排序", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:position-change-point-binding:getItemBySortNum')")
public CommonResult<PositionMapItemSaveReqVO> getItemBySortNum(@RequestParam("sortNum") Long sortNum) {
PositionMapItemSaveReqVO positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum);
public CommonResult<List<PositionMapItemSaveReqVO>> getItemBySortNum(@RequestParam("sortNum") Long sortNum) {
List<PositionMapItemSaveReqVO> positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum);
return success(positionMapItemSaveReqVO);
}

View File

@ -31,6 +31,7 @@ public class RemoteControllerInformationDO extends BaseDO {
/**
* AGV编号
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String robotNo;
/**
* 远遥模式(0:自动模式, 1:手动模式, 2:自由模式)

View File

@ -7,6 +7,7 @@ import lombok.Getter;
@AllArgsConstructor
public enum RobotCommandTypeEnum {
MOVE_POSES("MOVE_POSES","移动"),
SWITCH_MAP("SWITCH_MAP","切图"),
WORK_START_CHARGE("WORK_START_CHARGE","充电"),
WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"),
WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"),

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.system.mq.consumer.remote;
import cn.iocoder.yudao.module.system.mq.message.RemoteSendMessage;
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
public class RemoteControllerConsumer {
@Resource
private RemoteControllerInformationService controllerInformationService;
@EventListener
@Async // Spring Event 默认在 Producer 发送的线程通过 @Async 实现异步
public void onMessage(RemoteSendMessage message) {
log.info("远遥模块事件收到的消息 : {}", message);
controllerInformationService.repeatedTransmissionDisconnect(message);
}
}

View File

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.system.mq.message;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class RemoteSendMessage {
private String robotNo;
}

View File

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.system.mq.producer.remote;
import cn.iocoder.yudao.module.system.mq.message.RemoteSendMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Slf4j
@Component
public class RemoteControllerProducer {
@Resource
private ApplicationContext applicationContext;
public void sendSmsSendMessage(RemoteSendMessage message) {
applicationContext.publishEvent(message);
}
}

View File

@ -38,10 +38,12 @@ import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
import cn.iocoder.yudao.module.system.enums.line.DirectionEnum;
import cn.iocoder.yudao.module.system.enums.path.PathTypeEnum;
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
import cn.iocoder.yudao.module.system.service.config.CommonConfigService;
import cn.iocoder.yudao.module.system.service.positionmap.PositionChangePointBindingService;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
import com.alibaba.fastjson.JSON;
@ -113,6 +115,9 @@ public class PathPlanningServiceImpl implements PathPlanningService {
@Resource
private PositionChangePointBindingService positionChangePointBindingService;
@Resource
private RemoteControllerInformationService controllerInformationService;
/**
* 同步ware_position_map_line的点位信息
*/
@ -441,6 +446,9 @@ public class PathPlanningServiceImpl implements PathPlanningService {
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
commonApi.commonMethodStr(message, topic);
if(RobotCommandTypeEnum.SWITCH_MAP.getType().equals(pathPosedsDTO.getCommandType())) {
controllerInformationService.robotChangeSpeed(pathPosedsDTO);
}
}
/**

View File

@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionCh
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionChangePointBindingSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionChangePointBindingDO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionChangePointBindingMapper;
import org.springframework.stereotype.Service;
@ -39,11 +40,21 @@ public class PositionChangePointBindingServiceImpl extends ServiceImpl<PositionC
@Resource
private PositionChangePointBindingMapper positionChangePointBindingMapper;
@Resource
private PositionMapItemService positionMapItemService;
@Override
public Long createPositionChangePointBinding(PositionChangePointBindingSaveReqVO createReqVO) {
// 插入
PositionChangePointBindingDO positionChangePointBinding = BeanUtils.toBean(createReqVO, PositionChangePointBindingDO.class);
positionChangePointBindingMapper.insert(positionChangePointBinding);
PositionMapItemDO startPositionMapItem = positionMapItemService.getPositionMapItem(createReqVO.getStartingPointId());
PositionMapItemDO endPositionMapItem = positionMapItemService.getPositionMapItem(createReqVO.getEndPointId());
if (startPositionMapItem.getPositionMapId().equals(endPositionMapItem.getPositionMapId())) {
throw exception(POSITION_CHANGE_POINT_SAME_MAP);
}
// 返回
return positionChangePointBinding.getId();
}

View File

@ -126,9 +126,9 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
Long getUUid();
/**
* 根据排序查询
* 根据排序查询 区域变更点
* @param sortNum
* @return
*/
PositionMapItemSaveReqVO getItemBySortNum(Long sortNum);
List<PositionMapItemSaveReqVO> getItemBySortNum(Long sortNum);
}

View File

@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMa
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -166,14 +167,20 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
return IdUtil.getSnowflakeNextId();
}
/**
* 根据排序查询区域变更点
* @param sortNum
* @return
*/
@Override
public PositionMapItemSaveReqVO getItemBySortNum(Long sortNum) {
PositionMapItemDO positionMapItemDO = positionMapItemMapper.selectOne(new LambdaQueryWrapperX<PositionMapItemDO>()
.eq(PositionMapItemDO::getSortNum, sortNum));
public List<PositionMapItemSaveReqVO> getItemBySortNum(Long sortNum) {
List<PositionMapItemDO> positionMapItemDO = positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
.eqIfPresent(PositionMapItemDO::getType, PositionMapItemEnum.CHANGE.getType())
.likeIfPresent(PositionMapItemDO::getSortNum, sortNum+""));
if (ObjectUtil.isEmpty(positionMapItemDO)) {
return null;
}
PositionMapItemSaveReqVO bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class);
List<PositionMapItemSaveReqVO> bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class);
return bean;
}

View File

@ -3,12 +3,14 @@ package cn.iocoder.yudao.module.system.service.remote;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.mqtt.api.path.dto.PathPosedsDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskTransferDTO;
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
import cn.iocoder.yudao.module.system.mq.message.RemoteSendMessage;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
@ -108,4 +110,22 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
* @param data
*/
void remoteTransferTaskToFreeRobot(RemoteTaskTransferDTO data);
/**
* 车辆换图修改限速
* @param pathPosedsDTO
*/
void robotChangeSpeed(PathPosedsDTO pathPosedsDTO);
/**
* 断开连接
* @param remoteIp
*/
void remoteDisconnect(String remoteIp);
/**
* 重复发送断开连接的请求
* @param message
*/
void repeatedTransmissionDisconnect(RemoteSendMessage message);
}

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.remote;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
import cn.iocoder.yudao.module.mqtt.api.path.dto.PathPosedsDTO;
import cn.iocoder.yudao.module.mqtt.api.path.dto.remote.RemotePathPlanningDTO;
import cn.iocoder.yudao.module.mqtt.api.path.dto.remote.RobotModeDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
@ -36,6 +37,8 @@ import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteModeEnum;
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteOperationModeEnum;
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
import cn.iocoder.yudao.module.system.mq.message.RemoteSendMessage;
import cn.iocoder.yudao.module.system.mq.producer.remote.RemoteControllerProducer;
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
@ -47,6 +50,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -111,6 +115,9 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
@Resource
private ControllerTaskTransferLogService controllerTaskTransferLogService;
@Resource
private RemoteControllerProducer remoteControllerProducer;
@Override
public Long createControllerInformation(RemoteControllerInformationSaveReqVO createReqVO) {
// 插入
@ -322,6 +329,62 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
}
}
/**
* 车辆换图修改限速
* @param pathPosedsDTO
*/
@Override
public void robotChangeSpeed(PathPosedsDTO pathPosedsDTO) {
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
.eq(RemoteControllerInformationDO::getRobotNo, pathPosedsDTO.getRobotNo())
.last("limit 1"));
if (ObjectUtil.isEmpty(information)) {
return;
}
sendModeToRobot(information.getRobotNo(), RemoteOperationModeEnum.getType(information.getRemoteMode()));
}
/**
* 断开连接
* @param remoteIp
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void remoteDisconnect(String remoteIp) {
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
.eq(RemoteControllerInformationDO::getRemoteIp, remoteIp)
.last("limit 1"));
if (ObjectUtil.isEmpty(information.getRobotNo())) {
return;
}
checkGraphMatch(information.getRobotNo());
String robotNo = information.getRobotNo();
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
information.setRobotNo(null);
information.setRemoteMode(RemoteModeEnum.AUTOMATIC.getType());
information.setTaskDetailId(null);
information.setCollaborativeControl(ZeroOneEnum.ZERO.getType());
controllerInformationMapper.updateById(information);
UserOperationLogSaveReqVO build = UserOperationLogSaveReqVO.builder()
.operateAction("远遥断开连接 "+ information.getRemoteIp())
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
userOperationLogService.createUserOperationLog(build);
RemoteSendMessage remoteSendMessage = RemoteSendMessage.builder().robotNo(robotNo).build();
remoteControllerProducer.sendSmsSendMessage(remoteSendMessage);
}
@Override
public void repeatedTransmissionDisconnect(RemoteSendMessage message) {
String robotNo = message.getRobotNo();
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
}
/**
* 远遥转移任务
*
@ -448,7 +511,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
String operateAction = information.getRemoteIp() + " 开启远遥为自动模式";
information.setTaskDetailId(null);
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
return;
}
@ -459,7 +522,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
.operateAction(information.getRemoteIp() + " 重新进入远遥 " + RemoteModeEnum.getMsg(remoteMode))
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
userOperationLogService.createUserOperationLog(operationLog);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.getType(information.getRemoteMode()));
sendModeToRobot(robotNo, RemoteOperationModeEnum.getType(remoteMode));
return;
}
@ -472,7 +535,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
}
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
return;
}
@ -497,7 +560,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
return;
}
@ -508,7 +571,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
return;
}
@ -530,7 +593,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
checkGraphMatch(robotNo);
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToRobotAndPP(robotNo);
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
}
@ -563,18 +626,19 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
}
String mac = informationService.getMacByRobotNo(robotNo);
commonApi.commonMethod(robotModeDTO, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
log.info("发送消息让车机切换模式 :{}", JSON.toJSONString(robotModeDTO));
log.info("发送消息让车机 :{} 切换模式 :{}",robotNo, JSON.toJSONString(robotModeDTO));
}
/**
* 发送远遥信息给PP和车机
* 发送远遥信息给PP
*
* @param robotNo
*/
public void sendRemoteMsgToRobotAndPP(String robotNo) {
public void sendRemoteMsgToPP(String robotNo, String topic, String operationMode) {
RemotePathPlanningDTO remotePathPlanning = new RemotePathPlanningDTO();
remotePathPlanning.setRobotNo(robotNo);
commonApi.commonMethod(remotePathPlanning, PathPlanningTopicConstant.START_REMOTE_CONTROLLER);
remotePathPlanning.setOperationMode(operationMode);
commonApi.commonMethod(remotePathPlanning, topic);
}
/**