|
@@ -11,11 +11,14 @@ package cc.iotkit.manager.service;
|
|
|
|
|
|
import cc.iotkit.common.exception.NotFoundException;
|
|
|
import cc.iotkit.common.exception.OfflineException;
|
|
|
+import cc.iotkit.common.utils.JsonUtil;
|
|
|
import cc.iotkit.common.utils.UniqueIdUtil;
|
|
|
import cc.iotkit.comps.DeviceComponentManager;
|
|
|
import cc.iotkit.common.thing.ThingService;
|
|
|
+import cc.iotkit.dao.DeviceConfigRepository;
|
|
|
import cc.iotkit.dao.DeviceInfoRepository;
|
|
|
import cc.iotkit.dao.ThingModelMessageRepository;
|
|
|
+import cc.iotkit.model.device.DeviceConfig;
|
|
|
import cc.iotkit.model.device.DeviceInfo;
|
|
|
import cc.iotkit.model.device.message.ThingModelMessage;
|
|
|
import cc.iotkit.virtualdevice.VirtualManager;
|
|
@@ -41,79 +44,100 @@ public class DeviceService {
|
|
|
private ThingModelMessageRepository thingModelMessageRepository;
|
|
|
@Autowired
|
|
|
private VirtualManager virtualManager;
|
|
|
+ @Autowired
|
|
|
+ private DeviceConfigRepository deviceConfigRepository;
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备服务调用
|
|
|
+ */
|
|
|
public String invokeService(String deviceId, String service,
|
|
|
Map<String, Object> args) {
|
|
|
return invokeService(deviceId, service, args, true);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备服务调用
|
|
|
+ */
|
|
|
public String invokeService(String deviceId, String service,
|
|
|
Map<String, Object> args, boolean checkOwner) {
|
|
|
- DeviceInfo device = deviceInfoRepository.findById(deviceId)
|
|
|
- .orElseThrow(() -> new NotFoundException("device not found by deviceId"));
|
|
|
-
|
|
|
- if (checkOwner) {
|
|
|
- dataOwnerService.checkOwner(device);
|
|
|
- }
|
|
|
- if (!device.getState().isOnline()) {
|
|
|
- throw new OfflineException("device is offline");
|
|
|
- }
|
|
|
-
|
|
|
- ThingService<?> thingService = ThingService.builder()
|
|
|
- .mid(UniqueIdUtil.newRequestId())
|
|
|
- .productKey(device.getProductKey())
|
|
|
- .deviceName(device.getDeviceName())
|
|
|
- .type(ThingModelMessage.TYPE_SERVICE)
|
|
|
- .identifier(service)
|
|
|
- .params(args)
|
|
|
- .build();
|
|
|
- thingModelService.parseParams(thingService);
|
|
|
-
|
|
|
- deviceComponentManager.send(thingService);
|
|
|
- String mid = thingService.getMid();
|
|
|
-
|
|
|
- //保存设备日志
|
|
|
- ThingModelMessage thingModelMessage = ThingModelMessage.builder()
|
|
|
- .mid(mid)
|
|
|
- .deviceId(deviceId)
|
|
|
- .productKey(device.getProductKey())
|
|
|
- .deviceName(device.getDeviceName())
|
|
|
- .type(ThingModelMessage.TYPE_SERVICE)
|
|
|
- .identifier(service)
|
|
|
- .data(args)
|
|
|
- .occurred(System.currentTimeMillis())
|
|
|
- .time(System.currentTimeMillis())
|
|
|
- .build();
|
|
|
- thingModelMessageRepository.save(thingModelMessage);
|
|
|
+ DeviceInfo device = getAndCheckDevice(deviceId, checkOwner);
|
|
|
|
|
|
- return mid;
|
|
|
+ return send(deviceId, device.getProductKey(), device.getDeviceName(),
|
|
|
+ args, ThingModelMessage.TYPE_SERVICE, service);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备属性设置
|
|
|
+ */
|
|
|
public String setProperty(String deviceId, Map<String, Object> properties) {
|
|
|
return setProperty(deviceId, properties, true);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备属性设置
|
|
|
+ */
|
|
|
public String setProperty(String deviceId, Map<String, Object> properties,
|
|
|
boolean checkOwner) {
|
|
|
+ DeviceInfo device = getAndCheckDevice(deviceId, checkOwner);
|
|
|
+
|
|
|
+ return send(deviceId, device.getProductKey(), device.getDeviceName(), properties,
|
|
|
+ ThingModelMessage.TYPE_PROPERTY, ThingModelMessage.ID_PROPERTY_SET);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设备配置下发
|
|
|
+ */
|
|
|
+ public String sendConfig(String deviceId, boolean checkOwner) {
|
|
|
+ DeviceInfo device = getAndCheckDevice(deviceId, checkOwner);
|
|
|
+
|
|
|
+ DeviceConfig config = deviceConfigRepository.findByDeviceId(deviceId);
|
|
|
+ Map data = JsonUtil.parse(config.getConfig(), Map.class);
|
|
|
+
|
|
|
+ return send(deviceId, device.getProductKey(), device.getDeviceName(), data,
|
|
|
+ ThingModelMessage.TYPE_CONFIG, ThingModelMessage.ID_CONFIG_SET);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设备配置下发
|
|
|
+ */
|
|
|
+ public String sendConfig(String deviceId) {
|
|
|
+ return sendConfig(deviceId, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查设备操作权限和状态
|
|
|
+ */
|
|
|
+ private DeviceInfo getAndCheckDevice(String deviceId, boolean checkOwner) {
|
|
|
DeviceInfo device = deviceInfoRepository.findById(deviceId)
|
|
|
.orElseThrow(() -> new NotFoundException("device not found by deviceId"));
|
|
|
|
|
|
if (checkOwner) {
|
|
|
dataOwnerService.checkOwner(device);
|
|
|
}
|
|
|
+
|
|
|
if (!device.getState().isOnline()) {
|
|
|
throw new OfflineException("device is offline");
|
|
|
}
|
|
|
+ return device;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 数据下发
|
|
|
+ */
|
|
|
+ private String send(String deviceId, String pk, String dn,
|
|
|
+ Object data, String type, String identifier) {
|
|
|
ThingService<?> thingService = ThingService.builder()
|
|
|
.mid(UniqueIdUtil.newRequestId())
|
|
|
- .productKey(device.getProductKey())
|
|
|
- .deviceName(device.getDeviceName())
|
|
|
- .type(ThingModelMessage.TYPE_PROPERTY)
|
|
|
- .identifier("set")
|
|
|
- .params(properties)
|
|
|
+ .productKey(pk)
|
|
|
+ .deviceName(dn)
|
|
|
+ .type(type)
|
|
|
+ .identifier(identifier)
|
|
|
+ .params(data)
|
|
|
.build();
|
|
|
- thingModelService.parseParams(thingService);
|
|
|
+ if (!type.equals(ThingModelMessage.TYPE_CONFIG)) {
|
|
|
+ //非配置下发需要做物模型转换
|
|
|
+ thingModelService.parseParams(thingService);
|
|
|
+ }
|
|
|
|
|
|
if (virtualManager.isVirtual(deviceId)) {
|
|
|
//虚拟设备指令下发
|
|
@@ -128,11 +152,11 @@ public class DeviceService {
|
|
|
ThingModelMessage thingModelMessage = ThingModelMessage.builder()
|
|
|
.mid(mid)
|
|
|
.deviceId(deviceId)
|
|
|
- .productKey(device.getProductKey())
|
|
|
- .deviceName(device.getDeviceName())
|
|
|
- .type(ThingModelMessage.TYPE_PROPERTY)
|
|
|
- .identifier("set")
|
|
|
- .data(properties)
|
|
|
+ .productKey(pk)
|
|
|
+ .deviceName(dn)
|
|
|
+ .type(type)
|
|
|
+ .identifier(identifier)
|
|
|
+ .data(data)
|
|
|
.occurred(System.currentTimeMillis())
|
|
|
.time(System.currentTimeMillis())
|
|
|
.build();
|