From 5d830c5165a6308379aae6f0f98c67f25e55cf33 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Mon, 28 Apr 2025 14:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9C=E9=81=A5=E6=96=AD=E5=BC=80=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mqtt/api/path/dto/PathPosedsDTO.java | 2 + .../mqtt/api/path/dto/PathSwitchMapDTO.java | 9 ++ .../dto/remote/RemotePathPlanningDTO.java | 3 + .../admin/robot/RemoteRobotController.java | 10 ++- .../service/robot/RemoteRobotService.java | 6 ++ .../service/robot/RemoteRobotServiceImpl.java | 13 +++ .../system/api/remote/RemoteRobotApi.java | 4 + .../system/enums/ErrorCodeConstants.java | 1 + .../system/api/remote/RemoteRobotApiImpl.java | 11 +++ .../PositionChangePointBindingController.java | 9 +- .../remote/RemoteControllerInformationDO.java | 1 + .../robot/task/RobotCommandTypeEnum.java | 1 + .../remote/RemoteControllerConsumer.java | 27 ++++++ .../system/mq/message/RemoteSendMessage.java | 10 +++ .../remote/RemoteControllerProducer.java | 20 +++++ .../service/path/PathPlanningServiceImpl.java | 8 ++ ...PositionChangePointBindingServiceImpl.java | 11 +++ .../positionmap/PositionMapItemService.java | 4 +- .../PositionMapItemServiceImpl.java | 15 +++- .../RemoteControllerInformationService.java | 20 +++++ ...emoteControllerInformationServiceImpl.java | 84 ++++++++++++++++--- 21 files changed, 249 insertions(+), 20 deletions(-) create mode 100644 yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathSwitchMapDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/remote/RemoteControllerConsumer.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/RemoteSendMessage.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/remote/RemoteControllerProducer.java diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java index 277127a47..21bb28743 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java @@ -15,5 +15,7 @@ public class PathPosedsDTO { private String orderId; private String orderType; private String robotNo; + private String commandType; private List data; + private PathSwitchMapDTO arg; } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathSwitchMapDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathSwitchMapDTO.java new file mode 100644 index 000000000..34ff6984a --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathSwitchMapDTO.java @@ -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; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/remote/RemotePathPlanningDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/remote/RemotePathPlanningDTO.java index 972862f67..ca105a308 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/remote/RemotePathPlanningDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/remote/RemotePathPlanningDTO.java @@ -8,4 +8,7 @@ public class RemotePathPlanningDTO { @Schema(description = "车辆编号") private String robotNo; + + @Schema(description = "AUTO自动、 MAN手动") + private String operationMode; } diff --git a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/controller/admin/robot/RemoteRobotController.java b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/controller/admin/robot/RemoteRobotController.java index 3c422b049..24dd46023 100644 --- a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/controller/admin/robot/RemoteRobotController.java +++ b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/controller/admin/robot/RemoteRobotController.java @@ -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 getPositionMapList() { Object result = remoteRobotService.getPositionMapList(); return success(result); } + + @PostMapping("/disconnect") + @Operation(summary = "断开连接") + @PreAuthorize("@ss.hasPermission('remote:robot:disconnect')") + public CommonResult remoteDisconnect(HttpServletRequest request) { + remoteRobotService.remoteDisconnect(request); + return success(true); + } } diff --git a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotService.java b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotService.java index 92ef584ce..9ab44fbaa 100644 --- a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotService.java +++ b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotService.java @@ -56,4 +56,10 @@ public interface RemoteRobotService { * @return */ Object getPositionMapList(); + + /** + * 断开连接 + * @param request + */ + void remoteDisconnect(HttpServletRequest request); } diff --git a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotServiceImpl.java b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotServiceImpl.java index 0c6c417c6..95805cd17 100644 --- a/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotServiceImpl.java +++ b/yudao-module-remote/yudao-module-remote-biz/src/main/java/cn/iocoder/yudao/module/remote/service/robot/RemoteRobotServiceImpl.java @@ -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 result = remoteRobotApi.remoteDisconnect(ip); + if (!result.isSuccess()){ + throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg()); + } + } } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApi.java index e6b5ec4a6..c9e94517a 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApi.java @@ -47,4 +47,8 @@ public interface RemoteRobotApi { @PostMapping(PREFIX + "/getRemotePositionMapList") @Operation(summary = "远遥查询地图") Object getRemotePositionMapList(); + + @PostMapping(PREFIX + "/remoteDisconnect") + @Operation(summary = "断开连接") + CommonResult remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 9a076da59..738a46d76 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -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, "区域变更点绑定,不能是同一张地图"); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApiImpl.java index 9d5276e0c..d199a76d0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/remote/RemoteRobotApiImpl.java @@ -106,5 +106,16 @@ public class RemoteRobotApiImpl implements RemoteRobotApi { return result; } + /** + * 断开连接 + * @param remoteIp + * @return + */ + @Override + public CommonResult remoteDisconnect(String remoteIp) { + controllerInformationService.remoteDisconnect(remoteIp); + return CommonResult.success(true); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionChangePointBindingController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionChangePointBindingController.java index 443696b4a..8d313f70a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionChangePointBindingController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionChangePointBindingController.java @@ -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 getItemBySortNum(@RequestParam("sortNum") Long sortNum) { - PositionMapItemSaveReqVO positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum); + public CommonResult> getItemBySortNum(@RequestParam("sortNum") Long sortNum) { + List positionMapItemSaveReqVO = positionMapItemService.getItemBySortNum(sortNum); return success(positionMapItemSaveReqVO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/remote/RemoteControllerInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/remote/RemoteControllerInformationDO.java index ce2bfdab1..52d016c00 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/remote/RemoteControllerInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/remote/RemoteControllerInformationDO.java @@ -31,6 +31,7 @@ public class RemoteControllerInformationDO extends BaseDO { /** * AGV编号 */ + @TableField(updateStrategy = FieldStrategy.IGNORED) private String robotNo; /** * 远遥模式(0:自动模式, 1:手动模式, 2:自由模式) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java index e9c95de1c..3b701630f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java @@ -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","放货"), diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/remote/RemoteControllerConsumer.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/remote/RemoteControllerConsumer.java new file mode 100644 index 000000000..b1b81d797 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/remote/RemoteControllerConsumer.java @@ -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); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/RemoteSendMessage.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/RemoteSendMessage.java new file mode 100644 index 000000000..4004f0ad9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/RemoteSendMessage.java @@ -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; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/remote/RemoteControllerProducer.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/remote/RemoteControllerProducer.java new file mode 100644 index 000000000..5fe87064b --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/remote/RemoteControllerProducer.java @@ -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); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java index 851750e1f..98b8e17e7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java @@ -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); + } } /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionChangePointBindingServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionChangePointBindingServiceImpl.java index 562694069..de2d9f4e1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionChangePointBindingServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionChangePointBindingServiceImpl.java @@ -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 { Long getUUid(); /** - * 根据排序查询 + * 根据排序查询 区域变更点 * @param sortNum * @return */ - PositionMapItemSaveReqVO getItemBySortNum(Long sortNum); + List getItemBySortNum(Long sortNum); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java index 7ebffdbc7..811a21c85 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java @@ -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() - .eq(PositionMapItemDO::getSortNum, sortNum)); + public List getItemBySortNum(Long sortNum) { + List positionMapItemDO = positionMapItemMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(PositionMapItemDO::getType, PositionMapItemEnum.CHANGE.getType()) + .likeIfPresent(PositionMapItemDO::getSortNum, sortNum+"")); if (ObjectUtil.isEmpty(positionMapItemDO)) { return null; } - PositionMapItemSaveReqVO bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class); + List bean = BeanUtils.toBean(positionMapItemDO, PositionMapItemSaveReqVO.class); return bean; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/remote/RemoteControllerInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/remote/RemoteControllerInformationService.java index 2be95e2c0..bf2550fa3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/remote/RemoteControllerInformationService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/remote/RemoteControllerInformationService.java @@ -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() + .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() + .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