|
@@ -11,12 +11,16 @@ import org.hswebframework.ezorm.rdb.operator.dml.Terms;
|
|
|
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
|
|
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
|
|
|
import org.hswebframework.web.exception.BusinessException;
|
|
import org.hswebframework.web.exception.BusinessException;
|
|
|
import org.hswebframework.web.id.IDGenerator;
|
|
import org.hswebframework.web.id.IDGenerator;
|
|
|
|
|
+import org.jetlinks.community.device.configuration.GeoIndexProvider;
|
|
|
|
|
+import org.jetlinks.community.device.dto.DeviceGeoDto;
|
|
|
import org.jetlinks.community.device.entity.*;
|
|
import org.jetlinks.community.device.entity.*;
|
|
|
import org.jetlinks.community.device.enums.DeviceFeature;
|
|
import org.jetlinks.community.device.enums.DeviceFeature;
|
|
|
import org.jetlinks.community.device.enums.DeviceState;
|
|
import org.jetlinks.community.device.enums.DeviceState;
|
|
|
import org.jetlinks.community.device.response.DeviceDeployResult;
|
|
import org.jetlinks.community.device.response.DeviceDeployResult;
|
|
|
import org.jetlinks.community.device.response.DeviceDetail;
|
|
import org.jetlinks.community.device.response.DeviceDetail;
|
|
|
import org.jetlinks.community.device.session.MockSession;
|
|
import org.jetlinks.community.device.session.MockSession;
|
|
|
|
|
+import org.jetlinks.community.elastic.search.service.ElasticSearchService;
|
|
|
|
|
+import org.jetlinks.community.gateway.annotation.Subscribe;
|
|
|
import org.jetlinks.community.utils.ErrorUtils;
|
|
import org.jetlinks.community.utils.ErrorUtils;
|
|
|
import org.jetlinks.core.device.DeviceConfigKey;
|
|
import org.jetlinks.core.device.DeviceConfigKey;
|
|
|
import org.jetlinks.core.device.DeviceOperator;
|
|
import org.jetlinks.core.device.DeviceOperator;
|
|
@@ -24,6 +28,7 @@ import org.jetlinks.core.device.DeviceRegistry;
|
|
|
import org.jetlinks.core.enums.ErrorCode;
|
|
import org.jetlinks.core.enums.ErrorCode;
|
|
|
import org.jetlinks.core.event.EventBus;
|
|
import org.jetlinks.core.event.EventBus;
|
|
|
import org.jetlinks.core.exception.DeviceOperationException;
|
|
import org.jetlinks.core.exception.DeviceOperationException;
|
|
|
|
|
+import org.jetlinks.core.message.CoordinateMessage;
|
|
|
import org.jetlinks.core.message.DeviceMessageReply;
|
|
import org.jetlinks.core.message.DeviceMessageReply;
|
|
|
import org.jetlinks.core.message.FunctionInvokeMessageSender;
|
|
import org.jetlinks.core.message.FunctionInvokeMessageSender;
|
|
|
import org.jetlinks.core.message.WritePropertyMessageSender;
|
|
import org.jetlinks.core.message.WritePropertyMessageSender;
|
|
@@ -32,6 +37,7 @@ import org.jetlinks.core.message.function.FunctionInvokeMessageReply;
|
|
|
import org.jetlinks.core.message.property.ReadPropertyMessageReply;
|
|
import org.jetlinks.core.message.property.ReadPropertyMessageReply;
|
|
|
import org.jetlinks.core.message.property.WritePropertyMessageReply;
|
|
import org.jetlinks.core.message.property.WritePropertyMessageReply;
|
|
|
import org.jetlinks.core.metadata.*;
|
|
import org.jetlinks.core.metadata.*;
|
|
|
|
|
+import org.jetlinks.core.metadata.types.GeoPoint;
|
|
|
import org.jetlinks.core.metadata.types.StringType;
|
|
import org.jetlinks.core.metadata.types.StringType;
|
|
|
import org.jetlinks.core.server.session.DeviceSessionManager;
|
|
import org.jetlinks.core.server.session.DeviceSessionManager;
|
|
|
import org.jetlinks.supports.official.JetLinksDeviceMetadataCodec;
|
|
import org.jetlinks.supports.official.JetLinksDeviceMetadataCodec;
|
|
@@ -66,8 +72,7 @@ public class LocalDeviceInstanceService extends GenericReactiveCrudService<Devic
|
|
|
|
|
|
|
|
private final DeviceSessionManager deviceSessionManager;
|
|
private final DeviceSessionManager deviceSessionManager;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ private final ElasticSearchService elasticSearchService;
|
|
|
@Override
|
|
@Override
|
|
|
public Mono<SaveResult> save(Publisher<DeviceInstanceEntity> entityPublisher) {
|
|
public Mono<SaveResult> save(Publisher<DeviceInstanceEntity> entityPublisher) {
|
|
|
return Flux.from(entityPublisher)
|
|
return Flux.from(entityPublisher)
|
|
@@ -470,4 +475,18 @@ public class LocalDeviceInstanceService extends GenericReactiveCrudService<Devic
|
|
|
.then();
|
|
.then();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Subscribe("/device/**/**/coordinate")
|
|
|
|
|
+ public Mono<Void> handleCoordinate(CoordinateMessage message){
|
|
|
|
|
+ GeoPoint geoPoint = new GeoPoint(message.getLon(), message.getLat());
|
|
|
|
|
+ return this.createUpdate()
|
|
|
|
|
+ .where(DeviceInstanceEntity::getId,message.getDeviceId())
|
|
|
|
|
+ .set(DeviceInstanceEntity::getLocation,geoPoint)
|
|
|
|
|
+ .execute()
|
|
|
|
|
+ .flatMap(ignore->
|
|
|
|
|
+ this.findById(message.getDeviceId())
|
|
|
|
|
+ .map(DeviceGeoDto::of)
|
|
|
|
|
+ .flatMap(geo-> elasticSearchService.save(GeoIndexProvider.GEO.getIndex(),geo))
|
|
|
|
|
+ )
|
|
|
|
|
+ .then();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|