修改远遥socket连接

This commit is contained in:
cbs 2025-05-08 14:59:00 +08:00
parent fb593e35f8
commit e768ed379e
14 changed files with 189 additions and 59 deletions

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteControllerSocketDTO;
import cn.iocoder.yudao.module.remote.enums.robot.RemoteIpTypeEnum;
import cn.iocoder.yudao.module.remote.util.crc.CRCUtil;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotTransferDTO;
import com.alibaba.fastjson.JSON;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@ -52,7 +53,7 @@ public class RemoteControllerProcessor {
private final String ONE = "01";
private final String TWO = "02";
public void addCache() {
public void addCache(RemoteRobotTransferDTO dto) {
RemoteControllerSocketDTO remoteControllerSocketDTO = cache.get(remoteControllerIp);
log.info("缓存的数据 :{}", JSON.toJSONString(remoteControllerSocketDTO));
if (ObjectUtil.isNotEmpty(remoteControllerSocketDTO)) {
@ -71,15 +72,15 @@ public class RemoteControllerProcessor {
}
remoteControllerSocketDTO.setHost(remoteControllerIp);
remoteControllerSocketDTO.setPort(remoteControllerPort);
Socket socket = new Socket();
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(remoteControllerIp, remoteControllerPort), 1000);
remoteControllerSocketDTO.setSocket(socket);
} catch (IOException e) {
log.error("添加socket失败 :{}", e);
throw exception(REMOTE_ROBOT_CONNECT_FAIL);
}
setMsg(remoteControllerSocketDTO, RemoteIpTypeEnum.ONE.getType());
setMsg(remoteControllerSocketDTO, RemoteIpTypeEnum.ONE.getType(), dto);
cache.put(remoteControllerIp, remoteControllerSocketDTO);
}
@ -89,7 +90,7 @@ public class RemoteControllerProcessor {
* @param remoteControllerSocket
* @param type
*/
public void setMsg(RemoteControllerSocketDTO remoteControllerSocket, Integer type) {
public void setMsg(RemoteControllerSocketDTO remoteControllerSocket, Integer type, RemoteRobotTransferDTO dto) {
String msg = defaultMsg;
if (RemoteIpTypeEnum.ONE.getType().equals(type)) {
msg = msg + " " + ONE;
@ -97,14 +98,14 @@ public class RemoteControllerProcessor {
msg = msg + " " + TWO;
}
String[] split = remoteControllerSocket.getHost().split("\\.");
String[] split = dto.getRobotIp().split("\\.");
for (String ipItem : split) {
String hex = Integer.toHexString(Integer.valueOf(ipItem));
msg = msg + " " + hex;
log.info("组装 :{}", hex);
}
String portHex = Integer.toHexString(remoteControllerSocket.getPort());
String portHex = Integer.toHexString(dto.getRobotPort().intValue());
String portHexOne = portHex.substring(0, 2);
String portHexTwo = portHex.substring(2);
msg = msg + " " + portHexOne + " " + portHexTwo;
@ -135,24 +136,31 @@ public class RemoteControllerProcessor {
remoteControllerSocket.setMsg(msg);
}
public void remoteCache() {
public void remoteCache(RemoteRobotTransferDTO dto) {
RemoteControllerSocketDTO remoteControllerSocketDTO = cache.get(remoteControllerIp);
if (ObjectUtil.isEmpty(remoteControllerSocketDTO)) {
return;
}
setMsg(remoteControllerSocketDTO, RemoteIpTypeEnum.THREE.getType());
setMsg(remoteControllerSocketDTO, RemoteIpTypeEnum.THREE.getType(), dto);
cache.remove(remoteControllerIp);
Socket socket = remoteControllerSocketDTO.getSocket();
if (socket == null ||socket.isClosed()) {
try {
socket = new Socket();
socket.connect(new InetSocketAddress(remoteControllerIp, remoteControllerPort), 1000);
} catch (IOException e) {
log.error("连接socket出现异常 :{}", remoteControllerIp);
}
}
OutputStream os = null;
try {
if (socket != null && !socket.isClosed()) {
os = socket.getOutputStream();
log.info("断开连接 :{},对应的IP :{}", remoteControllerSocketDTO.getMsg(), remoteControllerSocketDTO.getHost());
os.write(remoteControllerSocketDTO.getMsg().getBytes());
socket.close();
}
os = socket.getOutputStream();
log.info("断开连接 :{} ,对应的IP :{}", remoteControllerSocketDTO.getMsg(), remoteControllerSocketDTO.getHost());
os.write(remoteControllerSocketDTO.getMsg().getBytes());
socket.shutdownInput();
socket.close();
log.info("关闭socket :{}", remoteControllerIp);
} catch (IOException e) {
log.error("关闭socket出现异常 :{}", remoteControllerIp);
@ -165,7 +173,7 @@ public class RemoteControllerProcessor {
}
}
remoteCache();
remoteCache(dto);
}
@ -197,8 +205,8 @@ public class RemoteControllerProcessor {
Socket socket = remoteControllerSocketDTO.getSocket();
if (socket == null || socket.isClosed()) {
socket = new Socket();
try {
socket = new Socket();
socket.connect(new InetSocketAddress(v.getKey(), remoteControllerPort), 1000);
remoteControllerSocketDTO.setSocket(socket);
} catch (IOException e) {
@ -210,7 +218,7 @@ public class RemoteControllerProcessor {
try {
os = socket.getOutputStream();
String str = remoteControllerSocketDTO.getMsg();
System.out.println(str);
log.info("socket推送的数据 :{}", str);
os.write(remoteControllerSocketDTO.getMsg().getBytes());
} catch (IOException e) {
log.error("socket发送异常 :{}", e);

View File

@ -0,0 +1,62 @@
package cn.iocoder.yudao.module.remote.config.server;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
@Slf4j
@Component
public class TCPServerApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
new Thread(new Runnable() {
@Override
public void run() {
initServer();
}
}).start();
}
public void initServer() {
try {
log.info("开始初始化socket服务");
ServerSocket server=new ServerSocket(9000);
while (true){
// 监听客户端的请求,没有的话就会进行阻塞
Socket socket=server.accept();
//开启一个线程进行处理客户端的请求
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream is=socket.getInputStream();
byte[] bytes=new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
OutputStream os= socket.getOutputStream();
//响应给客户端
os.write("收到谢谢".getBytes());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
log.info("初始化socket服务完成");
}
} catch (Exception e) {
}
}
}

View File

@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.remote.util.redis.RedisUtil;
import cn.iocoder.yudao.module.system.api.remote.RemoteRobotApi;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotTransferDTO;
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
@ -126,15 +127,15 @@ public class RemoteRobotServiceImpl implements RemoteRobotService {
@Override
public void robotChangeMode(RemoteRobotChangeModeDTO data, HttpServletRequest request) {
String ip = IpUtils.getIp(request);
CommonResult<Boolean> result = remoteRobotApi.robotChangeMode(data.getRemoteMode(), ip, data.getRobotNo(),remoteControllerPort,remoteControllerIp);
CommonResult<RemoteRobotTransferDTO> result = remoteRobotApi.robotChangeMode(data.getRemoteMode(), ip, data.getRobotNo(),remoteControllerPort,remoteControllerIp);
if (!result.isSuccess()) {
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
}
//非自动模式
if (0!= data.getRemoteMode()) {
remoteControllerProcessor.addCache();
remoteControllerProcessor.addCache(result.getData());
}else {
remoteControllerProcessor.remoteCache();
remoteControllerProcessor.remoteCache(result.getData());
}
}
@ -151,11 +152,17 @@ public class RemoteRobotServiceImpl implements RemoteRobotService {
@Override
public void remoteDisconnect(HttpServletRequest request) {
String ip = IpUtils.getIp(request);
CommonResult<Boolean> result = remoteRobotApi.remoteDisconnect(ip);
CommonResult<RemoteRobotTransferDTO> result = remoteRobotApi.remoteDisconnect(ip);
if (!result.isSuccess()) {
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
}
remoteControllerProcessor.remoteCache();
if (ObjectUtil.isEmpty(result.getData())) {
log.info("断开连接, 未查到远遥绑定的信息 :{}",ip);
return;
}
remoteControllerProcessor.remoteCache(result.getData());
}
/**

View File

@ -54,7 +54,7 @@ logging:
remote:
controller-port: 9000
controller-ip: 10.10.110.17
controller-ip: 127.0.0.1
msg: AA 55 13 04 01 88 88 # 驾舱socket头信息
cockpit-time-out: 120 # 驾舱超时报警时间
industrial-control-time-out: 120 # 工控通信超时报警时间

View File

@ -54,7 +54,7 @@ logging:
remote:
controller-port: 9000
controller-ip: 10.10.110.17
controller-ip: 127.0.0.1
msg: AA 55 13 04 01 88 88 # 驾舱socket头信息
cockpit-time-out: 120 # 驾舱超时报警时间
industrial-control-time-out: 120 # 工控通信超时报警时间

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.api.remote;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotTransferDTO;
import cn.iocoder.yudao.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -40,11 +41,11 @@ public interface RemoteRobotApi {
@PostMapping(PREFIX + "/robotChangeMode")
@Operation(summary = "切换模式")
CommonResult<Boolean> robotChangeMode(@RequestParam(value = "remoteMode") Integer remoteMode,
@RequestParam(value = "ip") String ip,
@RequestParam(value = "robotNo") String robotNo,
@RequestParam(value = "remoteControllerPort") int remoteControllerPort,
@RequestParam(value = "remoteControllerIp") String remoteControllerIp);
CommonResult<RemoteRobotTransferDTO> robotChangeMode(@RequestParam(value = "remoteMode") Integer remoteMode,
@RequestParam(value = "ip") String ip,
@RequestParam(value = "robotNo") String robotNo,
@RequestParam(value = "remoteControllerPort") int remoteControllerPort,
@RequestParam(value = "remoteControllerIp") String remoteControllerIp);
@PostMapping(PREFIX + "/getRemotePositionMapList")
@Operation(summary = "远遥查询地图")
@ -52,7 +53,7 @@ public interface RemoteRobotApi {
@PostMapping(PREFIX + "/remoteDisconnect")
@Operation(summary = "断开连接")
CommonResult<Boolean> remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp);
CommonResult<RemoteRobotTransferDTO> remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp);
@PostMapping(PREFIX + "/remoteTaskDone")
@Operation(summary = "任务完成/取货完成")

View File

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.system.api.remote.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RemoteRobotTransferDTO {
@Schema(description = "车辆IP")
private String robotIp;
@Schema(description = "车辆端口")
private Long robotPort;
@Schema(description = "AGV编号")
private String robotNo;
}

View File

@ -201,6 +201,7 @@ public interface ErrorCodeConstants {
ErrorCode ROBOT_HAVE_TASK = new ErrorCode(1-002-034-015, "车辆当前有处理中的任务,请断开连接后,选取其他空闲车辆");
ErrorCode ROBOT_PORT_NOT_COMPLIANCE = new ErrorCode(1-002-034-016, "车辆端口范围在4096至65535之间");
ErrorCode ROBOT_IP_NOT_COMPLIANCE = new ErrorCode(1-002-034-017, "请检测车辆IP是否符合规范");
ErrorCode ROBOT_IP_OR_PORT_EMPTY = new ErrorCode(1-002-034-020, "车辆IP或者端口为空");
// ========== 机器人任务主表 1-002-035-000 ==========
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "车辆任务主表不存在");

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.api.remote;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotTransferDTO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapDTO;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
@ -100,9 +101,9 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
* @return
*/
@Override
public CommonResult<Boolean> robotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp) {
controllerInformationService.robotChangeMode(remoteMode, remoteIp, robotNo,remoteControllerPort,remoteControllerIp);
return CommonResult.success(true);
public CommonResult<RemoteRobotTransferDTO> robotChangeMode(Integer remoteMode, String remoteIp, String robotNo, int remoteControllerPort, String remoteControllerIp) {
RemoteRobotTransferDTO dto = controllerInformationService.robotChangeMode(remoteMode, remoteIp, robotNo,remoteControllerPort,remoteControllerIp);
return CommonResult.success(dto);
}
@Override
@ -118,9 +119,9 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
* @return
*/
@Override
public CommonResult<Boolean> remoteDisconnect(String remoteIp) {
controllerInformationService.remoteDisconnect(remoteIp);
return CommonResult.success(true);
public CommonResult<RemoteRobotTransferDTO> remoteDisconnect(String remoteIp) {
RemoteRobotTransferDTO data = controllerInformationService.remoteDisconnect(remoteIp);
return CommonResult.success(data);
}
/**

View File

@ -6,6 +6,7 @@ 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.RemoteRobotTransferDTO;
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;
@ -103,7 +104,7 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
* @param remoteMode
* @param remoteIp
*/
void robotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp);
RemoteRobotTransferDTO robotChangeMode(Integer remoteMode, String remoteIp, String robotNo, int remoteControllerPort, String remoteControllerIp);
/**
* 任务转移给空闲车辆
@ -121,7 +122,7 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
* 断开连接
* @param remoteIp
*/
void remoteDisconnect(String remoteIp);
RemoteRobotTransferDTO remoteDisconnect(String remoteIp);
/**
* 重复发送断开连接的请求

View File

@ -8,6 +8,7 @@ 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;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotTransferDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskTransferDTO;
import cn.iocoder.yudao.module.system.constant.path.PathPlanningChcheConstant;
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
@ -305,7 +306,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void robotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp) {
public RemoteRobotTransferDTO robotChangeMode(Integer remoteMode, String remoteIp, String robotNo, int remoteControllerPort, String remoteControllerIp) {
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
if (lock.tryLock()) {
try {
@ -316,7 +317,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
doRobotChangeMode(remoteMode, remoteIp, robotNo,remoteControllerPort,remoteControllerIp);
return doRobotChangeMode(remoteMode, remoteIp, robotNo,remoteControllerPort,remoteControllerIp);
} finally {
lock.unlock();
}
@ -377,12 +378,12 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void remoteDisconnect(String remoteIp) {
public RemoteRobotTransferDTO remoteDisconnect(String remoteIp) {
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
.eq(RemoteControllerInformationDO::getRemoteIp, remoteIp)
.last("limit 1"));
if (ObjectUtil.isEmpty(information.getRobotNo())) {
return;
return null;
}
checkGraphMatch(information.getRobotNo());
@ -403,6 +404,12 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
RemoteSendMessage remoteSendMessage = RemoteSendMessage.builder().robotNo(robotNo).build();
remoteControllerProducer.sendSmsSendMessage(remoteSendMessage);
RobotInformationDO robotInformation = informationService.getInformationByRobotNo(robotNo);
return RemoteRobotTransferDTO.builder()
.robotNo(robotInformation.getRobotNo())
.robotIp(robotInformation.getRobotIp())
.robotPort(robotInformation.getRobotPort()).build();
}
@Override
@ -554,7 +561,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
* @param robotNo
*/
@Transactional(rollbackFor = Exception.class)
public void doRobotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp) {
public RemoteRobotTransferDTO doRobotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp) {
log.info("切换模式的车辆 :{}", robotNo);
//后续判断下如果协控中能不能切换模式
@ -581,6 +588,15 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
}
RobotInformationDO robotInformation = informationService.getInformationByRobotNo(robotNo);
informationService.checkIpAndPort(robotInformation);
if (ObjectUtil.isEmpty(robotInformation.getRobotIp()) || ObjectUtil.isEmpty(robotInformation.getRobotPort()) ) {
throw exception(ROBOT_IP_OR_PORT_EMPTY);
}
RemoteRobotTransferDTO build =
RemoteRobotTransferDTO.builder()
.robotNo(robotInformation.getRobotNo())
.robotIp(robotInformation.getRobotIp())
.robotPort(robotInformation.getRobotPort()).build();
if (ObjectUtil.isNotEmpty(information.getRobotNo()) && !information.getRobotNo().equals(robotNo)) {
@ -608,7 +624,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
return;
return build;
}
if (ObjectUtil.isNotEmpty(information.getRobotNo()) && information.getRobotNo().equals(robotNo)
@ -619,7 +635,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
userOperationLogService.createUserOperationLog(operationLog);
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.getType(information.getRemoteMode()));
sendModeToRobot(robotNo, RemoteOperationModeEnum.getType(remoteMode));
return;
return build;
}
//自动切手动
@ -636,7 +652,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.MAN.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
return;
return build;
}
//自动切自由
@ -661,7 +677,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.MAN.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
return;
return build;
}
//手动切自动
@ -672,7 +688,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
return;
return build;
}
//手动切自由
@ -695,7 +711,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
}
return build;
}
/**

View File

@ -227,4 +227,10 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
* @param robotNo
*/
void setRobotFree(String robotNo);
/**
* 校验端口和IP
* @param updateObj
*/
void checkIpAndPort(RobotInformationDO updateObj);
}

View File

@ -190,8 +190,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
throw exception(ROBOT_MAC_ADDRESS_EXISTS);
}
checkIpAndPort(createReqVO);
//判断机器人编号
RobotInformationDO existRobotNo = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
.eq(RobotInformationDO::getRobotNo, createReqVO.getRobotNo())
@ -218,6 +216,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
createReqVO.setChargeType(robotModelDO.getChargeType());
// 插入
RobotInformationDO information = BeanUtils.toBean(createReqVO, RobotInformationDO.class);
checkIpAndPort(information);
informationMapper.insert(information);
redisUtil.set(RobotTaskChcheConstant.ROBOT_GET_ROBOTNO_BY_MAC + information.getMacAddress(), information.getRobotNo());
redisUtil.set(RobotTaskChcheConstant.ROBOT_GET_MAC_BY_NO + information.getRobotNo(), information.getMacAddress());
@ -246,15 +247,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
return information.getId();
}
private void checkIpAndPort(RobotInformationSaveReqVO createReqVO) {
if (ObjectUtil.isNotEmpty(createReqVO.getRobotPort())) {
String hexString = Integer.toHexString(createReqVO.getRobotPort().intValue());
@Override
public void checkIpAndPort(RobotInformationDO updateObj) {
if (ObjectUtil.isNotEmpty(updateObj.getRobotPort())) {
String hexString = Integer.toHexString(updateObj.getRobotPort().intValue());
if (hexString.length() != 4) {
throw exception(ROBOT_PORT_NOT_COMPLIANCE);
}
}
if (ObjectUtil.isNotEmpty(createReqVO.getRobotIp())) {
boolean validSubnet = isValidIpAddress(createReqVO.getRobotIp());
if (ObjectUtil.isNotEmpty(updateObj.getRobotIp())) {
boolean validSubnet = isValidIpAddress(updateObj.getRobotIp());
if (!validSubnet) {
throw exception(ROBOT_IP_NOT_COMPLIANCE);
}
@ -294,8 +296,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
}
}
checkIpAndPort(updateReqVO);
//校验MAC地址
RobotInformationDO query = new RobotInformationDO();
query.setMacAddress(updateReqVO.getMacAddress());
@ -332,6 +332,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
}
// 更新
RobotInformationDO updateObj = BeanUtils.toBean(updateReqVO, RobotInformationDO.class);
checkIpAndPort(updateObj);
informationMapper.updateById(updateObj);
if (!robotInformationDO.getRobotNo().equals(updateReqVO.getRobotNo())) {

View File

@ -4,6 +4,7 @@ package cn.iocoder.yudao.module.system.util.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
//客服端
@ -16,7 +17,8 @@ public class TCPClient {
public void run() {
try {
//和服务器创建连接
Socket socket =new Socket("127.0.0.1",8800);
Socket socket = new Socket();
socket.connect(new InetSocketAddress("10.10.100.17", 9000), 1000);
OutputStream os = socket.getOutputStream();
String str="你好服务器====:___:";