Explorar el Código

新增需求-增加远程控制手表恢复出厂设置接口,长连接消息通知设备端

tea.yu hace 2 semanas
padre
commit
7cc9c91bc3

+ 13 - 0
api-message/src/main/java/com/sikey/wa04/api/message/client/rest/RemoteControlController.java

@@ -44,4 +44,17 @@ public class RemoteControlController extends BaseController {
     public void reboot(@NotBlank(message = "小孩ID不能为空") @RequestParam("cid") String cid) {
         remoteControlService.reboot(genericManufacturerHeader(), cid);
     }
+
+    /**
+     * 恢复出厂设置
+     *
+     * @param cid 小孩ID
+     */
+    @Authenticated
+    @GetMapping("/restoreFactorySettings")
+    public void restoreFactorySettings(@NotBlank(message = "小孩ID不能为空") @RequestParam("cid") String cid) {
+        remoteControlService.restoreFactorySettings(genericManufacturerHeader(), cid);
+    }
+
+
 }

+ 14 - 0
api-websocket/src/main/java/com/sikey/wa04/api/websocket/client/handler/MessageQueueHandler.java

@@ -339,6 +339,20 @@ public class MessageQueueHandler {
         messagingSubscribeService.consumeMessage(message);
     }
 
+    /**
+     * 接收远程控制恢复出厂设置通知消息
+     *
+     * @param noticeMessage     远程控制恢复出厂设置通知消息
+     * @param headers           消息头
+     */
+    @Tracer
+    @RabbitHandler
+    public void receiveRemoteControlRestoreFactorySettingsNoticeMessage(@Payload RemoteControlRestoreFactorySettingsNoticeMessage noticeMessage, @Headers Map<String, Object> headers) {
+        log.info("Received remote control restore factory settings notice message: {}, {}", JSONUtil.toJsonPrettyStr(noticeMessage), headers);
+        Message message = convertMessage(noticeMessage);
+        messagingSubscribeService.consumeMessage(message);
+    }
+
     /**
      * 接收设置应用管理应用开关的通知消息
      *

+ 30 - 1
business-application/src/main/java/com/sikey/wa04/business/application/converter/MessageConverter.java

@@ -52,9 +52,10 @@ public class MessageConverter {
             case VIDEO_CALL_IN_NOTICE_MESSAGE -> convertVideoCallInNoticeMessage(message);
             case VIDEO_CALL_OUT_NOTICE_MESSAGE -> convertVideoCallOutNoticeMessage(message);
             case ASK_LOCATION_POINT_NOTICE_MESSAGE -> convertAskLocationPointNoticeMessage(message);
+            // 远程控制,发送消息通知设备端
             case REMOTE_CONTROL_REBOOT_NOTICE_MESSAGE -> convertRemoteControlRebootNoticeMessage(message);
             case REMOTE_CONTROL_SHUTDOWN_NOTICE_MESSAGE -> convertRemoteControlShutdownNoticeMessage(message);
-
+            case REMOTE_CONTROL_RESTORE_FACTORY_SETTINGS_NOTICE_MESSAGE -> convertRemoteControlRestoreFactorySettingsNoticeMessage(message);
             // 移动云盘业务
             case NOTIFY_PARENTS_SUCCESSFUL_ACTIVATION ->
                     convertNotifyParentsSuccessfulActivationMessageMessage(message);
@@ -243,6 +244,18 @@ public class MessageConverter {
                         LocationEnterDangerFenceNoticeAppMessage.LocationEnterDangerFenceNoticeAppContent.class));
     }
 
+    public Message formMessaging(RemoteControlRestoreFactorySettingsNoticeMessage noticeMessage) {
+        return new Message()
+                .setId(new MessageId(noticeMessage.getMsgId()))
+                .setType(MessageType.REMOTE_CONTROL_RESTORE_FACTORY_SETTINGS_NOTICE_MESSAGE)
+                .setGroup(false)
+                .setSenderId(noticeMessage.getSendId())
+                .setReceiverId(List.of(noticeMessage.getRecvId()))
+                .setSendTime(Instant.ofEpochMilli(noticeMessage.getSendTime()))
+                .setContent(objectMapper.convertValue(noticeMessage.getContent(),
+                        RemoteControlRestoreFactorySettingsNoticeMessage.RemoteControlRestoreFactorySettingsNoticeContent.class));
+    }
+
     private ChatTextMessage convertChatTextMessage(Message message) {
         ChatTextMessage messaging = new ChatTextMessage();
         messaging.setMsgId(message.getId().getId())
@@ -448,6 +461,22 @@ public class MessageConverter {
         return messaging;
     }
 
+    private RemoteControlRestoreFactorySettingsNoticeMessage convertRemoteControlRestoreFactorySettingsNoticeMessage(Message message) {
+        RemoteControlRestoreFactorySettingsNoticeMessage messaging = new RemoteControlRestoreFactorySettingsNoticeMessage();
+        messaging.setMsgId(message.getId().getId())
+                .setMsgType(message.getType())
+                .setRecvId(message.getReceiverId().getFirst())
+                .setSendId(message.getSenderId())
+                .setSendTime(message.getSendTime().toEpochMilli());
+
+        messaging.setAckId(message.getAckId());
+
+        messaging.setContent(
+                objectMapper.convertValue(message.getContent(),
+                        RemoteControlRestoreFactorySettingsNoticeMessage.RemoteControlRestoreFactorySettingsNoticeContent.class));
+        return messaging;
+    }
+
     private AddFriendNoticeMessage convertAddFriendNoticeMessage(Message message) {
         AddFriendNoticeMessage messaging = new AddFriendNoticeMessage();
         messaging.setMsgId(message.getId().getId())

+ 17 - 0
business-application/src/main/java/com/sikey/wa04/business/application/service/message/RemoteControlService.java

@@ -7,6 +7,7 @@ import com.sikey.wa04.business.infrastructure.adapter.RabbitMQMessaging;
 import com.sikey.wa04.business.infrastructure.adapter.RedisMessageIdIncrementingAdapter;
 import com.sikey.wa04.common.dto.header.GenericManufacturerHeader;
 import com.sikey.wa04.common.dto.message.RemoteControlRebootNoticeMessage;
+import com.sikey.wa04.common.dto.message.RemoteControlRestoreFactorySettingsNoticeMessage;
 import com.sikey.wa04.common.dto.message.RemoteControlShutdownNoticeMessage;
 import com.sikey.wa04.common.enums.MessageType;
 import com.sikey.wa04.common.interceptor.CurrentRequestUser;
@@ -56,4 +57,20 @@ public class RemoteControlService {
         messageAdapter.save(message);
         messageQueueMessaging.publish(header, MessageConverter.toMessaging(message));
     }
+
+
+    public void restoreFactorySettings(GenericManufacturerHeader header, String cid) {
+        RemoteControlRestoreFactorySettingsNoticeMessage noticeMessage = new RemoteControlRestoreFactorySettingsNoticeMessage();
+        noticeMessage.setMsgId(messageIdIncrementingAdapter.incr())
+                .setMsgType(MessageType.REMOTE_CONTROL_RESTORE_FACTORY_SETTINGS_NOTICE_MESSAGE)
+                .setSendId(CurrentRequestUser.get().getId())
+                .setSendTime(Instant.now().toEpochMilli())
+                .setRecvId(cid);
+        noticeMessage.setContent(new RemoteControlRestoreFactorySettingsNoticeMessage.RemoteControlRestoreFactorySettingsNoticeContent());
+
+        Message message = MessageConverter.formMessaging(noticeMessage);
+        messageAdapter.save(message);
+        messageQueueMessaging.publish(header, MessageConverter.toMessaging(message));
+    }
+
 }

+ 22 - 0
business-common/src/main/java/com/sikey/wa04/common/dto/message/RemoteControlRestoreFactorySettingsNoticeMessage.java

@@ -0,0 +1,22 @@
+package com.sikey.wa04.common.dto.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 远程控制恢复出厂设置
+ *
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class RemoteControlRestoreFactorySettingsNoticeMessage extends BasicNoticeMessage {
+    private RemoteControlRestoreFactorySettingsNoticeContent content;
+
+    @Data
+    @Accessors(chain = true)
+    public static class RemoteControlRestoreFactorySettingsNoticeContent {
+
+    }
+}

+ 4 - 0
business-common/src/main/java/com/sikey/wa04/common/enums/MessageType.java

@@ -109,6 +109,10 @@ public enum MessageType {
      * 设置应用管理应用开关的通知消息,发送给手表
      */
     REMOTE_APP_MANAGE_APP_SWITCH_NOTICE_MESSAGE(62, "publish.notice.app-manage-app-switch"),
+    /**
+     * 远程控制手表恢复出厂设置通知消息,发送给手表
+     */
+    REMOTE_CONTROL_RESTORE_FACTORY_SETTINGS_NOTICE_MESSAGE(63, "publish.notice.remote-control-restore-factory-settings"),
 
     // 移动云盘业务