Преглед на файлове

add 添加子设备消息类型

18339543638 преди 4 години
родител
ревизия
62985cf49f

+ 11 - 2
jetlinks-components/common-component/src/main/java/org/jetlinks/community/annotation/MessageValueCodec.java

@@ -5,10 +5,12 @@ import com.alibaba.fastjson.JSONObject;
 import lombok.Data;
 import lombok.Data;
 import org.hswebframework.ezorm.core.ValueCodec;
 import org.hswebframework.ezorm.core.ValueCodec;
 import org.jetlinks.core.message.ChildDeviceMessage;
 import org.jetlinks.core.message.ChildDeviceMessage;
+import org.jetlinks.core.message.DeviceMessage;
 import org.jetlinks.core.message.MessageType;
 import org.jetlinks.core.message.MessageType;
 import org.jetlinks.core.message.function.FunctionInvokeMessage;
 import org.jetlinks.core.message.function.FunctionInvokeMessage;
 import org.jetlinks.core.message.property.ReadPropertyMessage;
 import org.jetlinks.core.message.property.ReadPropertyMessage;
 import org.jetlinks.core.message.property.WritePropertyMessage;
 import org.jetlinks.core.message.property.WritePropertyMessage;
+import org.jetlinks.core.message.state.DeviceStateCheckMessage;
 
 
 /**
 /**
  * @author lifang
  * @author lifang
@@ -26,7 +28,10 @@ public class MessageValueCodec implements ValueCodec<Object, Object> {
 
 
     @Override
     @Override
     public Object decode(Object data) {
     public Object decode(Object data) {
-        JSONObject jsonObject = JSON.parseObject(String.valueOf(data));
+        return decode(JSON.parseObject(String.valueOf(data)));
+    }
+
+    private DeviceMessage decode(JSONObject jsonObject ){
         Object msgType = jsonObject.get("messageType");
         Object msgType = jsonObject.get("messageType");
         if(MessageType.WRITE_PROPERTY.name().equals(msgType)){
         if(MessageType.WRITE_PROPERTY.name().equals(msgType)){
             return jsonObject.toJavaObject(WritePropertyMessage.class);
             return jsonObject.toJavaObject(WritePropertyMessage.class);
@@ -37,8 +42,12 @@ public class MessageValueCodec implements ValueCodec<Object, Object> {
         if(MessageType.INVOKE_FUNCTION.name().equals(msgType)){
         if(MessageType.INVOKE_FUNCTION.name().equals(msgType)){
             return jsonObject.toJavaObject(FunctionInvokeMessage.class);
             return jsonObject.toJavaObject(FunctionInvokeMessage.class);
         }
         }
+        if (MessageType.STATE_CHECK.name().equals(msgType)) {
+            return jsonObject.toJavaObject(DeviceStateCheckMessage.class);
+        }
         if(MessageType.CHILD.name().equals(msgType)){
         if(MessageType.CHILD.name().equals(msgType)){
-            return jsonObject.toJavaObject(ChildDeviceMessage.class);
+            JSONObject childDeviceMessage = (JSONObject) jsonObject.get("childDeviceMessage");
+            return ChildDeviceMessage.create(String.valueOf(jsonObject.get("deviceId")), this.decode(childDeviceMessage));
         }
         }
         return null;
         return null;
     }
     }

+ 1 - 2
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/interceptor/DeviceDirectiveSendInterceptor.java

@@ -41,7 +41,7 @@ public class DeviceDirectiveSendInterceptor implements DeviceMessageSenderInterc
         directivesEntity.setSendTimestamp(message.getTimestamp());
         directivesEntity.setSendTimestamp(message.getTimestamp());
         directivesEntity.setMessageId(message.getMessageId());
         directivesEntity.setMessageId(message.getMessageId());
         DeviceDirectivesEntity.MessageType directive = isDirective(message);
         DeviceDirectivesEntity.MessageType directive = isDirective(message);
-        if(directive!=null){
+        if(directive!=null&&!directive.equals(DeviceDirectivesEntity.MessageType.CHILD)){
             directivesEntity.setMessageType(directive);
             directivesEntity.setMessageType(directive);
             directivesEntity.setDeviceId(device.getDeviceId());
             directivesEntity.setDeviceId(device.getDeviceId());
             return device.getProduct()
             return device.getProduct()
@@ -70,7 +70,6 @@ public class DeviceDirectiveSendInterceptor implements DeviceMessageSenderInterc
                         .set(DeviceDirectivesEntity::getLastError,null)
                         .set(DeviceDirectivesEntity::getLastError,null)
                         .execute())
                         .execute())
                 .onErrorResume(DeviceOperationException.class,e->deviceDirectivesService.createUpdate()
                 .onErrorResume(DeviceOperationException.class,e->deviceDirectivesService.createUpdate()
-//                    .where(DeviceDirectivesEntity::getDeviceId,message.getDeviceId())
                     .where(DeviceDirectivesEntity::getMessageId,message.getMessageId())
                     .where(DeviceDirectivesEntity::getMessageId,message.getMessageId())
                     .set(DeviceDirectivesEntity::getLastError,e.getMessage())
                     .set(DeviceDirectivesEntity::getLastError,e.getMessage())
                     .set(DeviceDirectivesEntity::getState,DirectiveState.sendError)
                     .set(DeviceDirectivesEntity::getState,DirectiveState.sendError)