属性入库增加物模型过滤
parent
19987d2f3e
commit
a7fd715409
|
@ -25,7 +25,7 @@ public interface Constants {
|
|||
|
||||
String CACHE_SPACE = "space_cache";
|
||||
|
||||
String THING_MODEL_CACHE = "thing_model_cache";
|
||||
String CACHE_THING_MODEL = "thing_model_cache";
|
||||
|
||||
String CACHE_USER_INFO = "user_info_cache";
|
||||
|
||||
|
|
|
@ -12,7 +12,10 @@ package cc.iotkit.comps.service;
|
|||
import cc.iotkit.common.Constants;
|
||||
import cc.iotkit.common.utils.JsonUtil;
|
||||
import cc.iotkit.data.IDeviceInfoData;
|
||||
import cc.iotkit.data.IThingModelData;
|
||||
import cc.iotkit.model.device.DeviceInfo;
|
||||
import cc.iotkit.model.device.message.ThingModelMessage;
|
||||
import cc.iotkit.model.product.ThingModel;
|
||||
import cc.iotkit.mq.ConsumerHandler;
|
||||
import cc.iotkit.mq.MqConsumer;
|
||||
import cc.iotkit.temporal.IDevicePropertyData;
|
||||
|
@ -22,7 +25,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 设备属性消息消费入库
|
||||
|
@ -38,6 +43,9 @@ public class DevicePropertyConsumer implements ConsumerHandler<ThingModelMessage
|
|||
@Autowired
|
||||
@Qualifier("deviceInfoDataCache")
|
||||
private IDeviceInfoData deviceInfoData;
|
||||
@Autowired
|
||||
@Qualifier("thingModelDataCache")
|
||||
private IThingModelData thingModelData;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
|
@ -52,13 +60,36 @@ public class DevicePropertyConsumer implements ConsumerHandler<ThingModelMessage
|
|||
|
||||
Map<String, Object> properties = (Map<String, Object>) msg.getData();
|
||||
String deviceId = msg.getDeviceId();
|
||||
DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId);
|
||||
if (deviceInfo == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
//物模型校验,过滤非物模型属性
|
||||
ThingModel thingModel = thingModelData.findById(deviceInfo.getProductKey());
|
||||
if (thingModel == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
//物模型属性
|
||||
Map<String, String> thingModelProperties = thingModel.getModel().
|
||||
getProperties().stream().collect(Collectors.toMap(
|
||||
ThingModel.Property::getIdentifier, ThingModel.Property::getName));
|
||||
|
||||
Map<String, Object> addProperties = new HashMap<>();
|
||||
//删除非属性字段
|
||||
properties.forEach((key,val)->{
|
||||
if (thingModelProperties.containsKey(key)) {
|
||||
addProperties.put(key,val);
|
||||
}
|
||||
});
|
||||
|
||||
//更新设备当前属性
|
||||
updateDeviceCurrentProperties(deviceId, properties);
|
||||
updateDeviceCurrentProperties(deviceId, addProperties);
|
||||
|
||||
//保存属性记录
|
||||
try {
|
||||
devicePropertyData.addProperties(deviceId, properties, msg.getOccurred());
|
||||
devicePropertyData.addProperties(deviceId, addProperties, msg.getOccurred());
|
||||
} catch (Throwable e) {
|
||||
log.warn("save property data error", e);
|
||||
}
|
||||
|
|
14
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/ThingModelCacheEvict.java
vendored
Normal file
14
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/ThingModelCacheEvict.java
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
package cc.iotkit.data.cache;
|
||||
|
||||
import cc.iotkit.common.Constants;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ThingModelCacheEvict {
|
||||
|
||||
@CacheEvict(value = Constants.CACHE_THING_MODEL, key = "#root.method.name+#s")
|
||||
public void findById(String s) {
|
||||
}
|
||||
|
||||
}
|
|
@ -44,6 +44,7 @@ public class CacheConfig {
|
|||
Constants.CACHE_PRODUCT, config,
|
||||
Constants.CACHE_OAUTH_CLIENT, config,
|
||||
Constants.CACHE_CATEGORY, config,
|
||||
Constants.CACHE_THING_MODEL, config,
|
||||
//统计缓存5分钟
|
||||
Constants.CACHE_DEVICE_STATS, config.entryTtl(Duration.ofMinutes(5))
|
||||
);
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package cc.iotkit.data.service;
|
||||
|
||||
import cc.iotkit.common.Constants;
|
||||
import cc.iotkit.data.IThingModelData;
|
||||
import cc.iotkit.data.cache.ThingModelCacheEvict;
|
||||
import cc.iotkit.model.Paging;
|
||||
import cc.iotkit.model.product.ThingModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Qualifier("thingModelDataCache")
|
||||
public class ThingModelDataCache implements IThingModelData {
|
||||
|
||||
@Autowired
|
||||
private IThingModelData thingModelData;
|
||||
@Autowired
|
||||
private ThingModelCacheEvict thingModelCacheEvict;
|
||||
|
||||
@Override
|
||||
@Cacheable(value = Constants.CACHE_THING_MODEL, key = "#root.method.name+#s", unless = "#result == null")
|
||||
public ThingModel findById(String s) {
|
||||
return thingModelData.findById(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThingModel save(ThingModel data) {
|
||||
data = thingModelData.save(data);
|
||||
thingModelCacheEvict.findById(data.getId());
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThingModel add(ThingModel data) {
|
||||
return thingModelData.add(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteById(String s) {
|
||||
thingModelData.deleteById(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long count() {
|
||||
return thingModelData.count();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ThingModel> findAll() {
|
||||
return thingModelData.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Paging<ThingModel> findAll(int page, int size) {
|
||||
return thingModelData.findAll(page, size);
|
||||
}
|
||||
|
||||
}
|
|
@ -4,6 +4,4 @@ import cc.iotkit.model.product.ThingModel;
|
|||
|
||||
public interface IThingModelData extends ICommonData<ThingModel, String> {
|
||||
|
||||
ThingModel findByProductKey(String productKey);
|
||||
|
||||
}
|
||||
|
|
|
@ -77,11 +77,8 @@ public class DevicePropertyDataImpl implements IDevicePropertyData {
|
|||
if (deviceInfo == null) {
|
||||
return null;
|
||||
}
|
||||
String pk = deviceInfo.getProductKey().toLowerCase();
|
||||
String index = String.format("device_property_%s_%s", pk, name);
|
||||
if (null == index || StringUtils.isBlank(index)) {
|
||||
return null;
|
||||
}
|
||||
String pk = deviceInfo.getProductKey();
|
||||
String index = String.format("device_property_%s_%s", pk, name).toLowerCase();
|
||||
if (!indexSet.contains(index)) {
|
||||
IndexCoordinates indexCoordinates = IndexCoordinates.of(index);
|
||||
if (!template.indexOps(indexCoordinates).exists()) {
|
||||
|
|
|
@ -14,6 +14,4 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||
|
||||
public interface ThingModelRepository extends JpaRepository<TbThingModel, String> {
|
||||
|
||||
TbThingModel findByProductKey(String productKey);
|
||||
|
||||
}
|
||||
|
|
|
@ -29,11 +29,6 @@ public class ThingModelDataImpl implements IThingModelData {
|
|||
@Autowired
|
||||
private ThingModelRepository thingModelRepository;
|
||||
|
||||
@Override
|
||||
public ThingModel findByProductKey(String productKey) {
|
||||
return ThingModelMapper.toDtoFix(thingModelRepository.findByProductKey(productKey));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThingModel findById(String s) {
|
||||
return ThingModelMapper.toDtoFix(thingModelRepository.findById(s).orElse(null));
|
||||
|
|
|
@ -47,8 +47,10 @@ public class ProductController {
|
|||
@Qualifier("productDataCache")
|
||||
private IProductData productData;
|
||||
@Autowired
|
||||
@Qualifier("thingModelDataCache")
|
||||
private IThingModelData thingModelData;
|
||||
@Autowired
|
||||
@Qualifier("categoryDataCache")
|
||||
private ICategoryData categoryData;
|
||||
@Autowired
|
||||
private DataOwnerService dataOwnerService;
|
||||
|
@ -97,7 +99,7 @@ public class ProductController {
|
|||
@PostMapping("/thingModel/save")
|
||||
public void saveThingModel(String productKey, String model) {
|
||||
checkProductOwner(productKey);
|
||||
ThingModel oldData = thingModelData.findByProductKey(productKey);
|
||||
ThingModel oldData = thingModelData.findById(productKey);
|
||||
ThingModel thingModel = new ThingModel(productKey, productKey, JsonUtil.parse(model, ThingModel.Model.class));
|
||||
if (oldData == null) {
|
||||
//定义时序数据库物模型数据结构
|
||||
|
@ -112,7 +114,7 @@ public class ProductController {
|
|||
@PostMapping("/thingModel/{productKey}/delete")
|
||||
public void deleteThingModel(String productKey) {
|
||||
checkProductOwner(productKey);
|
||||
ThingModel thingModel = thingModelData.findByProductKey(productKey);
|
||||
ThingModel thingModel = thingModelData.findById(productKey);
|
||||
//删除时序数据库物模型数据结构
|
||||
dbStructureData.defineThingModel(thingModel);
|
||||
thingModelData.deleteById(productKey);
|
||||
|
|
|
@ -25,7 +25,7 @@ public class ThingModelService {
|
|||
private IThingModelData thingModelData;
|
||||
|
||||
public void parseParams(ThingService<Object> service) {
|
||||
ThingModel thingModel = thingModelData.findByProductKey(service.getProductKey());
|
||||
ThingModel thingModel = thingModelData.findById(service.getProductKey());
|
||||
ThingModel.Model model = thingModel.getModel();
|
||||
|
||||
String type = service.getType();
|
||||
|
|
Loading…
Reference in New Issue