远遥断开连接
This commit is contained in:
parent
53e897ceac
commit
5d830c5165
@ -15,5 +15,7 @@ public class PathPosedsDTO {
|
|||||||
private String orderId;
|
private String orderId;
|
||||||
private String orderType;
|
private String orderType;
|
||||||
private String robotNo;
|
private String robotNo;
|
||||||
|
private String commandType;
|
||||||
private List<PathPosedsDataDTO> data;
|
private List<PathPosedsDataDTO> data;
|
||||||
|
private PathSwitchMapDTO arg;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -8,4 +8,7 @@ public class RemotePathPlanningDTO {
|
|||||||
|
|
||||||
@Schema(description = "车辆编号")
|
@Schema(description = "车辆编号")
|
||||||
private String robotNo;
|
private String robotNo;
|
||||||
|
|
||||||
|
@Schema(description = "AUTO自动、 MAN手动")
|
||||||
|
private String operationMode;
|
||||||
}
|
}
|
||||||
|
@ -81,10 +81,18 @@ public class RemoteRobotController {
|
|||||||
|
|
||||||
@GetMapping("/getMap")
|
@GetMapping("/getMap")
|
||||||
@Operation(summary = "获得仓库点位地图Map")
|
@Operation(summary = "获得仓库点位地图Map")
|
||||||
@PreAuthorize("@ss.hasPermission('system:position-map:getMap')")
|
@PreAuthorize("@ss.hasPermission('remote:robot:getMap')")
|
||||||
public CommonResult<Object> getPositionMapList() {
|
public CommonResult<Object> getPositionMapList() {
|
||||||
Object result = remoteRobotService.getPositionMapList();
|
Object result = remoteRobotService.getPositionMapList();
|
||||||
return success(result);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,4 +56,10 @@ public interface RemoteRobotService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Object getPositionMapList();
|
Object getPositionMapList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断开连接
|
||||||
|
* @param request
|
||||||
|
*/
|
||||||
|
void remoteDisconnect(HttpServletRequest request);
|
||||||
}
|
}
|
||||||
|
@ -102,4 +102,17 @@ public class RemoteRobotServiceImpl implements RemoteRobotService{
|
|||||||
public Object getPositionMapList() {
|
public Object getPositionMapList() {
|
||||||
return remoteRobotApi.getRemotePositionMapList();
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,4 +47,8 @@ public interface RemoteRobotApi {
|
|||||||
@PostMapping(PREFIX + "/getRemotePositionMapList")
|
@PostMapping(PREFIX + "/getRemotePositionMapList")
|
||||||
@Operation(summary = "远遥查询地图")
|
@Operation(summary = "远遥查询地图")
|
||||||
Object getRemotePositionMapList();
|
Object getRemotePositionMapList();
|
||||||
|
|
||||||
|
@PostMapping(PREFIX + "/remoteDisconnect")
|
||||||
|
@Operation(summary = "断开连接")
|
||||||
|
CommonResult<Boolean> remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp);
|
||||||
}
|
}
|
||||||
|
@ -307,4 +307,5 @@ public interface ErrorCodeConstants {
|
|||||||
|
|
||||||
// ========== 区域变更点绑定 1_002_057_001 ==========
|
// ========== 区域变更点绑定 1_002_057_001 ==========
|
||||||
ErrorCode POSITION_CHANGE_POINT_BINDING_NOT_EXISTS = new ErrorCode(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, "区域变更点绑定,不能是同一张地图");
|
||||||
}
|
}
|
||||||
|
@ -106,5 +106,16 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断开连接
|
||||||
|
* @param remoteIp
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> remoteDisconnect(String remoteIp) {
|
||||||
|
controllerInformationService.remoteDisconnect(remoteIp);
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,9 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
|
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
|
||||||
@ -65,11 +68,11 @@ public class PositionChangePointBindingController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getItemBySortNum")
|
@GetMapping("/getItemBySortNum")
|
||||||
@Operation(summary = "根据排序查询点位信息")
|
@Operation(summary = "根据排序查询点位信息(区域变更点)")
|
||||||
@Parameter(name = "sortNum", description = "点位自增排序", required = true, example = "1024")
|
@Parameter(name = "sortNum", description = "点位自增排序", required = true, example = "1024")
|
||||||
@PreAuthorize("@ss.hasPermission('system:position-change-point-binding:getItemBySortNum')")
|
@PreAuthorize("@ss.hasPermission('system:position-change-point-binding:getItemBySortNum')")
|
||||||
public CommonResult<PositionMapItemSaveReqVO> getItemBySortNum(@RequestParam("sortNum") Long sortNum) {
|
public CommonResult<List<PositionMapItemSaveReqVO>> getItemBySortNum(@RequestParam("sortNum") Long sortNum) {
|
||||||
PositionMapItemSaveReqVO positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum);
|
List<PositionMapItemSaveReqVO> positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum);
|
||||||
return success(positionMapItemSaveReqVO);
|
return success(positionMapItemSaveReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ public class RemoteControllerInformationDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* AGV编号
|
* AGV编号
|
||||||
*/
|
*/
|
||||||
|
@TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||||
private String robotNo;
|
private String robotNo;
|
||||||
/**
|
/**
|
||||||
* 远遥模式(0:自动模式, 1:手动模式, 2:自由模式)
|
* 远遥模式(0:自动模式, 1:手动模式, 2:自由模式)
|
||||||
|
@ -7,6 +7,7 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum RobotCommandTypeEnum {
|
public enum RobotCommandTypeEnum {
|
||||||
MOVE_POSES("MOVE_POSES","移动"),
|
MOVE_POSES("MOVE_POSES","移动"),
|
||||||
|
SWITCH_MAP("SWITCH_MAP","切图"),
|
||||||
WORK_START_CHARGE("WORK_START_CHARGE","充电"),
|
WORK_START_CHARGE("WORK_START_CHARGE","充电"),
|
||||||
WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"),
|
WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"),
|
||||||
WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"),
|
WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"),
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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.item.PositionMapItemEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.line.DirectionEnum;
|
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.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.config.CommonConfigService;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionChangePointBindingService;
|
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.PositionMapItemService;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
|
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.service.robot.RobotInformationService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
@ -113,6 +115,9 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
@Resource
|
@Resource
|
||||||
private PositionChangePointBindingService positionChangePointBindingService;
|
private PositionChangePointBindingService positionChangePointBindingService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RemoteControllerInformationService controllerInformationService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步ware_position_map_line的点位信息
|
* 同步ware_position_map_line的点位信息
|
||||||
*/
|
*/
|
||||||
@ -441,6 +446,9 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
||||||
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
|
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
|
||||||
commonApi.commonMethodStr(message, topic);
|
commonApi.commonMethodStr(message, topic);
|
||||||
|
if(RobotCommandTypeEnum.SWITCH_MAP.getType().equals(pathPosedsDTO.getCommandType())) {
|
||||||
|
controllerInformationService.robotChangeSpeed(pathPosedsDTO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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.controller.admin.positionmap.vo.PositionChangePointBindingSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionChangePointBindingDO;
|
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.PositionMapDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionChangePointBindingMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionChangePointBindingMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -39,11 +40,21 @@ public class PositionChangePointBindingServiceImpl extends ServiceImpl<PositionC
|
|||||||
@Resource
|
@Resource
|
||||||
private PositionChangePointBindingMapper positionChangePointBindingMapper;
|
private PositionChangePointBindingMapper positionChangePointBindingMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PositionMapItemService positionMapItemService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createPositionChangePointBinding(PositionChangePointBindingSaveReqVO createReqVO) {
|
public Long createPositionChangePointBinding(PositionChangePointBindingSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
PositionChangePointBindingDO positionChangePointBinding = BeanUtils.toBean(createReqVO, PositionChangePointBindingDO.class);
|
PositionChangePointBindingDO positionChangePointBinding = BeanUtils.toBean(createReqVO, PositionChangePointBindingDO.class);
|
||||||
positionChangePointBindingMapper.insert(positionChangePointBinding);
|
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();
|
return positionChangePointBinding.getId();
|
||||||
}
|
}
|
||||||
|
@ -126,9 +126,9 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
|||||||
Long getUUid();
|
Long getUUid();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据排序查询
|
* 根据排序查询 区域变更点
|
||||||
* @param sortNum
|
* @param sortNum
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
PositionMapItemSaveReqVO getItemBySortNum(Long sortNum);
|
List<PositionMapItemSaveReqVO> getItemBySortNum(Long sortNum);
|
||||||
}
|
}
|
||||||
|
@ -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.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
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.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.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -166,14 +167,20 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
|||||||
return IdUtil.getSnowflakeNextId();
|
return IdUtil.getSnowflakeNextId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据排序查询区域变更点
|
||||||
|
* @param sortNum
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public PositionMapItemSaveReqVO getItemBySortNum(Long sortNum) {
|
public List<PositionMapItemSaveReqVO> getItemBySortNum(Long sortNum) {
|
||||||
PositionMapItemDO positionMapItemDO = positionMapItemMapper.selectOne(new LambdaQueryWrapperX<PositionMapItemDO>()
|
List<PositionMapItemDO> positionMapItemDO = positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
|
||||||
.eq(PositionMapItemDO::getSortNum, sortNum));
|
.eqIfPresent(PositionMapItemDO::getType, PositionMapItemEnum.CHANGE.getType())
|
||||||
|
.likeIfPresent(PositionMapItemDO::getSortNum, sortNum+""));
|
||||||
if (ObjectUtil.isEmpty(positionMapItemDO)) {
|
if (ObjectUtil.isEmpty(positionMapItemDO)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
PositionMapItemSaveReqVO bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class);
|
List<PositionMapItemSaveReqVO> bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class);
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,12 +3,14 @@ package cn.iocoder.yudao.module.system.service.remote;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.*;
|
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.LoginCheckDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
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.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.RemoteControllerInformationPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
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.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||||
|
import cn.iocoder.yudao.module.system.mq.message.RemoteSendMessage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
@ -108,4 +110,22 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
|
|||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
void remoteTransferTaskToFreeRobot(RemoteTaskTransferDTO data);
|
void remoteTransferTaskToFreeRobot(RemoteTaskTransferDTO data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 车辆换图修改限速
|
||||||
|
* @param pathPosedsDTO
|
||||||
|
*/
|
||||||
|
void robotChangeSpeed(PathPosedsDTO pathPosedsDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断开连接
|
||||||
|
* @param remoteIp
|
||||||
|
*/
|
||||||
|
void remoteDisconnect(String remoteIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重复发送断开连接的请求
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
void repeatedTransmissionDisconnect(RemoteSendMessage message);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.remote;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
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.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.RemotePathPlanningDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.dto.remote.RobotModeDTO;
|
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.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.RemoteModeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteOperationModeEnum;
|
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.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.RobotTaskDetailActionLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.redisson.api.RLock;
|
import org.redisson.api.RLock;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -111,6 +115,9 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
@Resource
|
@Resource
|
||||||
private ControllerTaskTransferLogService controllerTaskTransferLogService;
|
private ControllerTaskTransferLogService controllerTaskTransferLogService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RemoteControllerProducer remoteControllerProducer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createControllerInformation(RemoteControllerInformationSaveReqVO createReqVO) {
|
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() + " 开启远遥为自动模式";
|
String operateAction = information.getRemoteIp() + " 开启远遥为自动模式";
|
||||||
information.setTaskDetailId(null);
|
information.setTaskDetailId(null);
|
||||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -459,7 +522,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
.operateAction(information.getRemoteIp() + " 重新进入远遥 " + RemoteModeEnum.getMsg(remoteMode))
|
.operateAction(information.getRemoteIp() + " 重新进入远遥 " + RemoteModeEnum.getMsg(remoteMode))
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.getType(information.getRemoteMode()));
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.getType(remoteMode));
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.getType(remoteMode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -472,7 +535,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
}
|
}
|
||||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -497,7 +560,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
|
|
||||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -508,7 +571,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
|
|
||||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -530,7 +593,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
checkGraphMatch(robotNo);
|
checkGraphMatch(robotNo);
|
||||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||||
sendRemoteMsgToRobotAndPP(robotNo);
|
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -563,18 +626,19 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
|||||||
}
|
}
|
||||||
String mac = informationService.getMacByRobotNo(robotNo);
|
String mac = informationService.getMacByRobotNo(robotNo);
|
||||||
commonApi.commonMethod(robotModeDTO, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
commonApi.commonMethod(robotModeDTO, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
||||||
log.info("发送消息让车机切换模式 :{}", JSON.toJSONString(robotModeDTO));
|
log.info("发送消息让车机 :{} 切换模式 :{}",robotNo, JSON.toJSONString(robotModeDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送远遥信息给PP和车机
|
* 发送远遥信息给PP
|
||||||
*
|
*
|
||||||
* @param robotNo
|
* @param robotNo
|
||||||
*/
|
*/
|
||||||
public void sendRemoteMsgToRobotAndPP(String robotNo) {
|
public void sendRemoteMsgToPP(String robotNo, String topic, String operationMode) {
|
||||||
RemotePathPlanningDTO remotePathPlanning = new RemotePathPlanningDTO();
|
RemotePathPlanningDTO remotePathPlanning = new RemotePathPlanningDTO();
|
||||||
remotePathPlanning.setRobotNo(robotNo);
|
remotePathPlanning.setRobotNo(robotNo);
|
||||||
commonApi.commonMethod(remotePathPlanning, PathPlanningTopicConstant.START_REMOTE_CONTROLLER);
|
remotePathPlanning.setOperationMode(operationMode);
|
||||||
|
commonApi.commonMethod(remotePathPlanning, topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user