Commit d5a41a3d22971a639ca7da37d5236cd74fd18375

Authored by xp.Huang
2 parents b7b1d849 7caaa6d5

Merge branch '20230222' into 'master'

feat: 租户的规则链更新

See merge request yunteng/thingskit!159
Showing 22 changed files with 210 additions and 511 deletions
@@ -113,6 +113,19 @@ @@ -113,6 +113,19 @@
113 "port": "8082", 113 "port": "8082",
114 "resetApi": "/api/v1/notice/alert" 114 "resetApi": "/api/v1/notice/alert"
115 } 115 }
  116 + },
  117 + {
  118 + "additionalInfo": {
  119 + "description": "",
  120 + "layoutX": 824,
  121 + "layoutY": 549
  122 + },
  123 + "type": "org.thingsboard.rule.engine.yunteng.event.TkMsgEventNode",
  124 + "name": "save events",
  125 + "debugMode": false,
  126 + "configuration": {
  127 + "useServerTs": true
  128 + }
116 } 129 }
117 ], 130 ],
118 "connections": [ 131 "connections": [
@@ -150,6 +163,11 @@ @@ -150,6 +163,11 @@
150 "fromIndex": 2, 163 "fromIndex": 2,
151 "toIndex": 5, 164 "toIndex": 5,
152 "type": "RPC Request to Device" 165 "type": "RPC Request to Device"
  166 + },
  167 + {
  168 + "fromIndex": 2,
  169 + "toIndex": 8,
  170 + "type": "Post event"
153 } 171 }
154 ], 172 ],
155 "ruleChainConnections": null 173 "ruleChainConnections": null
@@ -316,7 +316,7 @@ public abstract class BaseController { @@ -316,7 +316,7 @@ public abstract class BaseController {
316 } 316 }
317 } 317 }
318 318
319 - void checkParameter(String name, String param) throws ThingsboardException { 319 + protected void checkParameter(String name, String param) throws ThingsboardException {
320 if (StringUtils.isEmpty(param)) { 320 if (StringUtils.isEmpty(param)) {
321 throw new ThingsboardException("参数【 " + name + "】不能为空!", ThingsboardErrorCode.BAD_REQUEST_PARAMS); 321 throw new ThingsboardException("参数【 " + name + "】不能为空!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
322 } 322 }
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.springframework.web.bind.annotation.GetMapping;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.id.DeviceId;
  12 +import org.thingsboard.server.common.data.page.PageData;
  13 +import org.thingsboard.server.common.data.page.TimePageLink;
  14 +import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
  15 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
  16 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.model.ModelConstants;
  19 +import org.thingsboard.server.dao.yunteng.event.TkEventsService;
  20 +
  21 +import java.util.UUID;
  22 +
  23 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  24 +
  25 +/**
  26 + * @author Administrator
  27 + */
  28 +@RestController
  29 +@RequestMapping("api/yt/event")
  30 +@Api(tags = {"设备事件"})
  31 +@RequiredArgsConstructor
  32 +public class TkEventController extends BaseController {
  33 + private final TkEventsService eventsService;
  34 +
  35 + @GetMapping(params = {PAGE_SIZE, PAGE})
  36 + @ApiOperation("分页")
  37 + public PageData<TkEventKvDto> pageAlarmProfile(
  38 + @RequestParam(PAGE_SIZE) int pageSize,
  39 + @RequestParam(PAGE) int page,
  40 + @RequestParam(value = "eventIdentifier", required = false) String eventIdentifier,
  41 + @RequestParam(value = "eventType", required = false) DeviceEventTypeEnum eventType,
  42 + @RequestParam(value = "tbDeviceId", required = true) String tbDeviceId,
  43 + @RequestParam(required = false) Long startTime,
  44 + @RequestParam(required = false) Long endTime,
  45 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  46 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  47 + throws ThingsboardException {
  48 + checkParameter("tbDeviceId", tbDeviceId);
  49 +
  50 + if (orderBy != null && orderBy.isEmpty()) {
  51 + orderBy = ModelConstants.EVENT_TIME_COLUMN;
  52 + }
  53 + TimePageLink pageLink = createTimePageLink(pageSize, page, null, orderBy, orderType==null?"":orderType.name(), startTime, endTime);
  54 + return checkNotNull(eventsService.findEvents(new DeviceId(UUID.fromString(tbDeviceId)),eventIdentifier,eventType, pageLink));
  55 + }
  56 +
  57 +
  58 +}
@@ -28,19 +28,11 @@ import org.thingsboard.server.common.data.ApiUsageRecordKey; @@ -28,19 +28,11 @@ import org.thingsboard.server.common.data.ApiUsageRecordKey;
28 import org.thingsboard.server.common.data.EntityType; 28 import org.thingsboard.server.common.data.EntityType;
29 import org.thingsboard.server.common.data.EntityView; 29 import org.thingsboard.server.common.data.EntityView;
30 import org.thingsboard.server.common.data.id.CustomerId; 30 import org.thingsboard.server.common.data.id.CustomerId;
  31 +import org.thingsboard.server.common.data.id.DeviceProfileId;
31 import org.thingsboard.server.common.data.id.EntityId; 32 import org.thingsboard.server.common.data.id.EntityId;
32 import org.thingsboard.server.common.data.id.TenantId; 33 import org.thingsboard.server.common.data.id.TenantId;
33 -import org.thingsboard.server.common.data.kv.AttributeKvEntry;  
34 -import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;  
35 -import org.thingsboard.server.common.data.kv.BooleanDataEntry;  
36 -import org.thingsboard.server.common.data.kv.DeleteTsKvQuery;  
37 -import org.thingsboard.server.common.data.kv.DoubleDataEntry;  
38 -import org.thingsboard.server.common.data.kv.LongDataEntry;  
39 -import org.thingsboard.server.common.data.kv.StringDataEntry;  
40 -import org.thingsboard.server.common.data.kv.TsKvEntry;  
41 -import org.thingsboard.server.common.data.kv.TsKvLatestRemovingResult;  
42 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
43 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 34 +import org.thingsboard.server.common.data.kv.*;
  35 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
44 import org.thingsboard.server.common.msg.queue.ServiceType; 36 import org.thingsboard.server.common.msg.queue.ServiceType;
45 import org.thingsboard.server.common.msg.queue.TbCallback; 37 import org.thingsboard.server.common.msg.queue.TbCallback;
46 import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; 38 import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
@@ -57,15 +49,7 @@ import org.thingsboard.server.service.subscription.TbSubscriptionUtils; @@ -57,15 +49,7 @@ import org.thingsboard.server.service.subscription.TbSubscriptionUtils;
57 import javax.annotation.Nullable; 49 import javax.annotation.Nullable;
58 import javax.annotation.PostConstruct; 50 import javax.annotation.PostConstruct;
59 import javax.annotation.PreDestroy; 51 import javax.annotation.PreDestroy;
60 -import java.util.ArrayList;  
61 -import java.util.Collection;  
62 -import java.util.Collections;  
63 -import java.util.Comparator;  
64 -import java.util.HashMap;  
65 -import java.util.List;  
66 -import java.util.Map;  
67 -import java.util.Objects;  
68 -import java.util.Optional; 52 +import java.util.*;
69 import java.util.concurrent.ExecutorService; 53 import java.util.concurrent.ExecutorService;
70 import java.util.concurrent.Executors; 54 import java.util.concurrent.Executors;
71 55
@@ -251,13 +235,13 @@ public class DefaultTelemetrySubscriptionService extends AbstractSubscriptionSer @@ -251,13 +235,13 @@ public class DefaultTelemetrySubscriptionService extends AbstractSubscriptionSer
251 235
252 //Thingskit function 236 //Thingskit function
253 @Override 237 @Override
254 - public void saveAndNotify(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<TkEventKvEntry> attributes, FutureCallback<Void> callback) { 238 + public void saveAndNotify(TenantId tenantId, DeviceProfileId profileId, EntityId entityId, String eventId, DeviceEventTypeEnum eventType, String eventData, Long eventTime, FutureCallback<Void> callback) {
255 checkInternalEntity(entityId); 239 checkInternalEntity(entityId);
256 - saveAndNotifyInternal(tenantId, entityId, eventId,eventType, attributes, callback); 240 + saveAndNotifyInternal(tenantId,profileId, entityId, eventId,eventType, eventData,eventTime, callback);
257 } 241 }
258 @Override 242 @Override
259 - public void saveAndNotifyInternal(TenantId tenantId, EntityId entityId,String eventId, TkEventType eventType, List<TkEventKvEntry> attributes, FutureCallback<Void> callback) {  
260 - ListenableFuture<List<Void>> saveFuture = eventsService.save(tenantId, entityId,eventId,eventType, attributes); 243 + public void saveAndNotifyInternal(TenantId tenantId,DeviceProfileId profileId, EntityId entityId,String eventId, DeviceEventTypeEnum eventType, String eventData,Long eventTime, FutureCallback<Void> callback) {
  244 + ListenableFuture<List<Void>> saveFuture = eventsService.save(tenantId,profileId, entityId,eventId,eventType, eventData,eventTime);
261 addVoidCallback(saveFuture, callback); 245 addVoidCallback(saveFuture, callback);
262 // addWsCallback(saveFuture, success -> onAttributesUpdate(tenantId, entityId, scope, attributes, notifyDevice)); 246 // addWsCallback(saveFuture, success -> onAttributesUpdate(tenantId, entityId, scope, attributes, notifyDevice));
263 } 247 }
@@ -17,12 +17,13 @@ package org.thingsboard.server.service.telemetry; @@ -17,12 +17,13 @@ package org.thingsboard.server.service.telemetry;
17 17
18 import com.google.common.util.concurrent.FutureCallback; 18 import com.google.common.util.concurrent.FutureCallback;
19 import org.thingsboard.rule.engine.api.RuleEngineTelemetryService; 19 import org.thingsboard.rule.engine.api.RuleEngineTelemetryService;
  20 +import org.thingsboard.server.common.data.id.DeviceProfileId;
20 import org.thingsboard.server.common.data.id.EntityId; 21 import org.thingsboard.server.common.data.id.EntityId;
21 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
22 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 23 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
23 import org.thingsboard.server.common.data.kv.TsKvEntry; 24 import org.thingsboard.server.common.data.kv.TsKvEntry;
24 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry; 25 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;
25 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 26 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
26 27
27 import java.util.List; 28 import java.util.List;
28 29
@@ -38,7 +39,7 @@ public interface InternalTelemetryService extends RuleEngineTelemetryService { @@ -38,7 +39,7 @@ public interface InternalTelemetryService extends RuleEngineTelemetryService {
38 void saveAndNotifyInternal(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, boolean notifyDevice, FutureCallback<Void> callback); 39 void saveAndNotifyInternal(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, boolean notifyDevice, FutureCallback<Void> callback);
39 40
40 //Thingskit function 41 //Thingskit function
41 - void saveAndNotifyInternal(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<TkEventKvEntry> attributes, FutureCallback<Void> callback); 42 + void saveAndNotifyInternal(TenantId tenantId, DeviceProfileId profileId, EntityId entityId, String eventId, DeviceEventTypeEnum eventType, String eventData,Long eventTime, FutureCallback<Void> callback);
42 43
43 void saveLatestAndNotifyInternal(TenantId tenantId, EntityId entityId, List<TsKvEntry> ts, FutureCallback<Void> callback); 44 void saveLatestAndNotifyInternal(TenantId tenantId, EntityId entityId, List<TsKvEntry> ts, FutureCallback<Void> callback);
44 45
@@ -16,34 +16,23 @@ @@ -16,34 +16,23 @@
16 package org.thingsboard.server.dao.yunteng.event; 16 package org.thingsboard.server.dao.yunteng.event;
17 17
18 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
19 -import org.thingsboard.server.common.data.EntityType;  
20 import org.thingsboard.server.common.data.id.DeviceProfileId; 19 import org.thingsboard.server.common.data.id.DeviceProfileId;
21 import org.thingsboard.server.common.data.id.EntityId; 20 import org.thingsboard.server.common.data.id.EntityId;
22 import org.thingsboard.server.common.data.id.TenantId; 21 import org.thingsboard.server.common.data.id.TenantId;
23 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
24 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 22 +import org.thingsboard.server.common.data.page.PageData;
  23 +import org.thingsboard.server.common.data.page.TimePageLink;
  24 +import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
  25 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
25 26
26 -import java.util.Collection;  
27 import java.util.List; 27 import java.util.List;
28 -import java.util.Optional;  
29 28
30 /** 29 /**
31 * @author Andrew Shvayka 30 * @author Andrew Shvayka
32 */ 31 */
33 public interface TkEventsService { 32 public interface TkEventsService {
  33 + PageData<TkEventKvDto> findEvents(EntityId entityId,String eventIdentifier, DeviceEventTypeEnum eventType, TimePageLink pageLink);
  34 + ListenableFuture<List<Void>> save(TenantId tenantId, DeviceProfileId profileId,EntityId entityId, String eventId, DeviceEventTypeEnum eventType, String eventData,Long eventTime);
34 35
35 - ListenableFuture<Optional<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, String scope,String eventKey);  
36 36
37 - ListenableFuture<List<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, String scope, Collection<String> eventKeys);  
38 -  
39 - ListenableFuture<List<TkEventKvEntry>> findAll(TenantId tenantId, EntityId entityId,String eventId, TkEventType eventType);  
40 -  
41 - ListenableFuture<List<Void>> save(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<TkEventKvEntry> attributes);  
42 -  
43 - ListenableFuture<List<Void>> removeAll(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<String> eventKeys);  
44 -  
45 - List<String> findAllKeysByDeviceProfileId(TenantId tenantId, DeviceProfileId deviceProfileId);  
46 -  
47 - List<String> findAllKeysByEntityIds(TenantId tenantId, EntityType entityType, List<EntityId> entityIds);  
48 37
49 } 38 }
@@ -15,107 +15,28 @@ @@ -15,107 +15,28 @@
15 */ 15 */
16 package org.thingsboard.server.common.data.yunteng.dto; 16 package org.thingsboard.server.common.data.yunteng.dto;
17 17
18 -import org.thingsboard.server.common.data.kv.AttributeKvEntry;  
19 -import org.thingsboard.server.common.data.kv.DataType;  
20 -import org.thingsboard.server.common.data.kv.KvEntry; 18 +import com.fasterxml.jackson.databind.JsonNode;
  19 +import io.swagger.annotations.ApiModel;
  20 +import lombok.Data;
  21 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
21 22
22 -import javax.validation.Valid;  
23 -import java.util.Optional; 23 +import java.util.UUID;
24 24
25 /** 25 /**
26 * @author Andrew Shvayka 26 * @author Andrew Shvayka
27 */ 27 */
28 -public class TkEventKvDto implements TkEventKvEntry { 28 +@Data
  29 +@ApiModel
  30 +public class TkEventKvDto {
29 31
30 private static final long serialVersionUID = -6460767583563159407L; 32 private static final long serialVersionUID = -6460767583563159407L;
31 33
32 private final long eventTime; 34 private final long eventTime;
33 - @Valid  
34 - private final KvEntry kv;  
35 -  
36 - public TkEventKvDto(KvEntry kv, long eventTime) {  
37 - this.kv = kv;  
38 - this.eventTime = eventTime;  
39 - }  
40 -  
41 - public TkEventKvDto(long lastUpdateTs, KvEntry kv) {  
42 - this(kv, lastUpdateTs);  
43 - }  
44 -  
45 - @Override  
46 - public long getEventTime() {  
47 - return eventTime;  
48 - }  
49 -  
50 - @Override  
51 - public String getKey() {  
52 - return kv.getKey();  
53 - }  
54 -  
55 - @Override  
56 - public DataType getDataType() {  
57 - return kv.getDataType();  
58 - }  
59 -  
60 - @Override  
61 - public Optional<String> getStrValue() {  
62 - return kv.getStrValue();  
63 - }  
64 -  
65 - @Override  
66 - public Optional<Long> getLongValue() {  
67 - return kv.getLongValue();  
68 - }  
69 -  
70 - @Override  
71 - public Optional<Boolean> getBooleanValue() {  
72 - return kv.getBooleanValue();  
73 - }  
74 -  
75 - @Override  
76 - public Optional<Double> getDoubleValue() {  
77 - return kv.getDoubleValue();  
78 - }  
79 -  
80 - @Override  
81 - public Optional<String> getJsonValue() {  
82 - return kv.getJsonValue();  
83 - }  
84 -  
85 - @Override  
86 - public String getValueAsString() {  
87 - return kv.getValueAsString();  
88 - }  
89 -  
90 - @Override  
91 - public Object getValue() {  
92 - return kv.getValue();  
93 - }  
94 -  
95 - @Override  
96 - public boolean equals(Object o) {  
97 - if (this == o) return true;  
98 - if (o == null || getClass() != o.getClass()) return false;  
99 -  
100 - TkEventKvDto that = (TkEventKvDto) o;  
101 -  
102 - if (eventTime != that.eventTime) return false;  
103 - return kv.equals(that.kv);  
104 -  
105 - }  
106 -  
107 - @Override  
108 - public int hashCode() {  
109 - int result = (int) (eventTime ^ (eventTime >>> 32));  
110 - result = 31 * result + kv.hashCode();  
111 - return result;  
112 - }  
113 -  
114 - @Override  
115 - public String toString() {  
116 - return "BaseAttributeKvEntry{" +  
117 - "lastUpdateTs=" + eventTime +  
118 - ", kv=" + kv +  
119 - '}';  
120 - } 35 + private final DeviceEventTypeEnum eventType;
  36 + private final JsonNode eventValue;
  37 + private final UUID entityId;
  38 + private final String eventIdentifier;
  39 + private final String eventName;
  40 + private final UUID deviceProfileId;
  41 + private final String deviceProfileName;
121 } 42 }
1 -package org.thingsboard.server.common.data.yunteng.enums;  
2 -  
3 -public enum TkEventType {  
4 - INFO,ALARM,ERROR  
5 -}  
@@ -15,53 +15,18 @@ @@ -15,53 +15,18 @@
15 */ 15 */
16 package org.thingsboard.server.common.transport.adaptor; 16 package org.thingsboard.server.common.transport.adaptor;
17 17
18 -import com.google.gson.Gson;  
19 -import com.google.gson.JsonArray;  
20 -import com.google.gson.JsonElement;  
21 -import com.google.gson.JsonObject;  
22 -import com.google.gson.JsonParser;  
23 -import com.google.gson.JsonPrimitive;  
24 -import com.google.gson.JsonSyntaxException; 18 +import com.google.gson.*;
25 import org.apache.commons.lang3.math.NumberUtils; 19 import org.apache.commons.lang3.math.NumberUtils;
26 import org.springframework.util.StringUtils; 20 import org.springframework.util.StringUtils;
27 import org.thingsboard.server.common.data.DataConstants; 21 import org.thingsboard.server.common.data.DataConstants;
28 import org.thingsboard.server.common.data.id.DeviceId; 22 import org.thingsboard.server.common.data.id.DeviceId;
29 -import org.thingsboard.server.common.data.kv.AttributeKvEntry;  
30 -import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;  
31 -import org.thingsboard.server.common.data.kv.BooleanDataEntry;  
32 -import org.thingsboard.server.common.data.kv.DoubleDataEntry;  
33 -import org.thingsboard.server.common.data.kv.JsonDataEntry;  
34 -import org.thingsboard.server.common.data.kv.KvEntry;  
35 -import org.thingsboard.server.common.data.kv.LongDataEntry;  
36 -import org.thingsboard.server.common.data.kv.StringDataEntry;  
37 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;  
38 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry; 23 +import org.thingsboard.server.common.data.kv.*;
39 import org.thingsboard.server.gen.transport.TransportProtos; 24 import org.thingsboard.server.gen.transport.TransportProtos;
40 -import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg;  
41 -import org.thingsboard.server.gen.transport.TransportProtos.ClaimDeviceMsg;  
42 -import org.thingsboard.server.gen.transport.TransportProtos.CredentialsType;  
43 -import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg;  
44 -import org.thingsboard.server.gen.transport.TransportProtos.KeyValueProto;  
45 -import org.thingsboard.server.gen.transport.TransportProtos.KeyValueType;  
46 -import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg;  
47 -import org.thingsboard.server.gen.transport.TransportProtos.PostTelemetryMsg;  
48 -import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceResponseMsg;  
49 -import org.thingsboard.server.gen.transport.TransportProtos.ResponseStatus;  
50 -import org.thingsboard.server.gen.transport.TransportProtos.TsKvListProto;  
51 -import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto;  
52 -import org.thingsboard.server.gen.transport.TransportProtos.ValidateBasicMqttCredRequestMsg;  
53 -import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceTokenRequestMsg;  
54 -import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceX509CertRequestMsg; 25 +import org.thingsboard.server.gen.transport.TransportProtos.*;
55 26
56 import java.math.BigDecimal; 27 import java.math.BigDecimal;
57 -import java.util.ArrayList;  
58 -import java.util.HashMap;  
59 -import java.util.HashSet;  
60 -import java.util.List;  
61 -import java.util.Map; 28 +import java.util.*;
62 import java.util.Map.Entry; 29 import java.util.Map.Entry;
63 -import java.util.Set;  
64 -import java.util.TreeMap;  
65 import java.util.function.Consumer; 30 import java.util.function.Consumer;
66 import java.util.stream.Collectors; 31 import java.util.stream.Collectors;
67 32
@@ -518,12 +483,6 @@ public class JsonConverter { @@ -518,12 +483,6 @@ public class JsonConverter {
518 return result; 483 return result;
519 } 484 }
520 485
521 - public static Set<TkEventKvEntry> convertToEvents(JsonElement element) {  
522 - Set<TkEventKvEntry> result = new HashSet<>();  
523 - long ts = System.currentTimeMillis();  
524 - result.addAll(parseValues(element.getAsJsonObject()).stream().map(kv -> new TkEventKvDto(kv, ts)).collect(Collectors.toList()));  
525 - return result;  
526 - }  
527 486
528 private static List<KvEntry> parseValues(JsonObject valuesObject) { 487 private static List<KvEntry> parseValues(JsonObject valuesObject) {
529 List<KvEntry> result = new ArrayList<>(); 488 List<KvEntry> result = new ArrayList<>();
@@ -593,6 +593,8 @@ public class DefaultTransportService implements TransportService { @@ -593,6 +593,8 @@ public class DefaultTransportService implements TransportService {
593 DeviceId deviceId = new DeviceId(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB())); 593 DeviceId deviceId = new DeviceId(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB()));
594 metaData.putValue("deviceName", sessionInfo.getDeviceName()); 594 metaData.putValue("deviceName", sessionInfo.getDeviceName());
595 metaData.putValue("deviceType", sessionInfo.getDeviceType()); 595 metaData.putValue("deviceType", sessionInfo.getDeviceType());
  596 + UUID deviceProfileId = new UUID(sessionInfo.getDeviceProfileIdMSB(),sessionInfo.getDeviceProfileIdMSB());
  597 + metaData.putValue("device_profile_id", deviceProfileId.toString());
596 metaData.putValue("deviceId",eventInfo[0]); 598 metaData.putValue("deviceId",eventInfo[0]);
597 metaData.putValue("event_identifier", eventInfo[1]); 599 metaData.putValue("event_identifier", eventInfo[1]);
598 metaData.putValue("event_type",eventInfo[2]); 600 metaData.putValue("event_type",eventInfo[2]);
@@ -60,7 +60,7 @@ public class ModelConstants { @@ -60,7 +60,7 @@ public class ModelConstants {
60 public static final String EVENT_IDENTIFIER_COLUMN = "event_identifier"; 60 public static final String EVENT_IDENTIFIER_COLUMN = "event_identifier";
61 public static final String EVENT_TIME_COLUMN = "event_time"; 61 public static final String EVENT_TIME_COLUMN = "event_time";
62 public static final String EVENT_TYPE_COLUMN = "event_type"; 62 public static final String EVENT_TYPE_COLUMN = "event_type";
63 - public static final String EVENT_KEY_COLUMN = "event_key"; 63 + public static final String EVENT_VALUE_COLUMN = "event_value";
64 64
65 /** 65 /**
66 * Cassandra user constants. 66 * Cassandra user constants.
@@ -19,19 +19,16 @@ import com.google.common.util.concurrent.Futures; @@ -19,19 +19,16 @@ import com.google.common.util.concurrent.Futures;
19 import com.google.common.util.concurrent.ListenableFuture; 19 import com.google.common.util.concurrent.ListenableFuture;
20 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
21 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
22 -import org.thingsboard.server.common.data.EntityType;  
23 import org.thingsboard.server.common.data.id.DeviceProfileId; 22 import org.thingsboard.server.common.data.id.DeviceProfileId;
24 import org.thingsboard.server.common.data.id.EntityId; 23 import org.thingsboard.server.common.data.id.EntityId;
25 import org.thingsboard.server.common.data.id.TenantId; 24 import org.thingsboard.server.common.data.id.TenantId;
26 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
27 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType;  
28 -import org.thingsboard.server.dao.service.Validator; 25 +import org.thingsboard.server.common.data.page.PageData;
  26 +import org.thingsboard.server.common.data.page.TimePageLink;
  27 +import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
  28 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
29 import org.thingsboard.server.dao.yunteng.event.TkEventsService; 29 import org.thingsboard.server.dao.yunteng.event.TkEventsService;
30 30
31 -import java.util.Collection;  
32 import java.util.List; 31 import java.util.List;
33 -import java.util.Optional;  
34 -import java.util.stream.Collectors;  
35 32
36 import static org.thingsboard.server.dao.yunteng.jpa.dao.event.EventUtils.validate; 33 import static org.thingsboard.server.dao.yunteng.jpa.dao.event.EventUtils.validate;
37 34
@@ -48,48 +45,19 @@ public class BaseEventsService implements TkEventsService { @@ -48,48 +45,19 @@ public class BaseEventsService implements TkEventsService {
48 this.eventsDao = eventsDao; 45 this.eventsDao = eventsDao;
49 } 46 }
50 47
51 - @Override  
52 - public ListenableFuture<Optional<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, String eventId,String attributeKey) {  
53 - validate(entityId, eventId);  
54 - Validator.validateString(attributeKey, "Incorrect attribute key " + attributeKey);  
55 - return eventsDao.find(tenantId, entityId, null, attributeKey);  
56 - }  
57 48
58 @Override 49 @Override
59 - public ListenableFuture<List<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, String eventId, Collection<String> attributeKeys) {  
60 - validate(entityId, eventId);  
61 - attributeKeys.forEach(attributeKey -> Validator.validateString(attributeKey, "Incorrect attribute key " + attributeKey));  
62 - return eventsDao.find(tenantId, entityId, null, attributeKeys); 50 + public PageData<TkEventKvDto> findEvents(EntityId entityId, String eventId, DeviceEventTypeEnum eventType, TimePageLink pageLink) {
  51 + validate(entityId);
  52 + return eventsDao.findEvents( entityId, eventId,eventType,pageLink);
63 } 53 }
64 54
65 @Override 55 @Override
66 - public ListenableFuture<List<TkEventKvEntry>> findAll(TenantId tenantId, EntityId entityId,String eventId, TkEventType eventType) {  
67 - validate(entityId,eventId);  
68 - return eventsDao.findAll(tenantId, entityId, eventType);  
69 - }  
70 -  
71 - @Override  
72 - public List<String> findAllKeysByDeviceProfileId(TenantId tenantId, DeviceProfileId deviceProfileId) {  
73 - return eventsDao.findAllKeysByDeviceProfileId(tenantId, deviceProfileId);  
74 - }  
75 -  
76 - @Override  
77 - public List<String> findAllKeysByEntityIds(TenantId tenantId, EntityType entityType, List<EntityId> entityIds) {  
78 - return eventsDao.findAllKeysByEntityIds(tenantId, entityType, entityIds);  
79 - }  
80 -  
81 - @Override  
82 - public ListenableFuture<List<Void>> save(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<TkEventKvEntry> attributes) { 56 + public ListenableFuture<List<Void>> save(TenantId tenantId,DeviceProfileId profileId, EntityId entityId, String eventId, DeviceEventTypeEnum eventType, String eventData,Long eventTime) {
83 validate(entityId, eventId,eventType); 57 validate(entityId, eventId,eventType);
84 - attributes.forEach(attribute -> validate(attribute));  
85 58
86 - List<ListenableFuture<Void>> saveFutures = attributes.stream().map(attribute -> eventsDao.save(tenantId, entityId, eventType,eventId, attribute)).collect(Collectors.toList()); 59 + ListenableFuture<Void> saveFutures = eventsDao.save(tenantId, profileId,entityId, eventType,eventId, eventData,eventTime);
87 return Futures.allAsList(saveFutures); 60 return Futures.allAsList(saveFutures);
88 } 61 }
89 62
90 - @Override  
91 - public ListenableFuture<List<Void>> removeAll(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<String> eventKeys) {  
92 - validate(entityId, eventId);  
93 - return eventsDao.removeAll(tenantId, entityId, eventId,eventType, eventKeys);  
94 - }  
95 } 63 }
@@ -16,20 +16,24 @@ @@ -16,20 +16,24 @@
16 package org.thingsboard.server.dao.yunteng.jpa.dao.event; 16 package org.thingsboard.server.dao.yunteng.jpa.dao.event;
17 17
18 import org.thingsboard.server.common.data.id.EntityId; 18 import org.thingsboard.server.common.data.id.EntityId;
19 -import org.thingsboard.server.common.data.kv.AttributeKvEntry;  
20 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry; 19 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;
21 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 20 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
22 import org.thingsboard.server.dao.exception.IncorrectParameterException; 21 import org.thingsboard.server.dao.exception.IncorrectParameterException;
23 import org.thingsboard.server.dao.service.Validator; 22 import org.thingsboard.server.dao.service.Validator;
24 23
25 public class EventUtils { 24 public class EventUtils {
  25 + public static void validate(EntityId id) {
  26 + Validator.validateId(id.getId(), "Incorrect id " + id);
  27 + }
  28 +
  29 +
26 public static void validate(EntityId id, String eventIdentifier) { 30 public static void validate(EntityId id, String eventIdentifier) {
27 Validator.validateId(id.getId(), "Incorrect id " + id); 31 Validator.validateId(id.getId(), "Incorrect id " + id);
28 - Validator.validateString(eventIdentifier, "Incorrect scope " + eventIdentifier); 32 + Validator.validateString(eventIdentifier, "Incorrect event identifier " + eventIdentifier);
29 } 33 }
30 34
31 35
32 - public static void validate(EntityId id, String eventIdentifier, TkEventType eventType) { 36 + public static void validate(EntityId id, String eventIdentifier, DeviceEventTypeEnum eventType) {
33 Validator.validateId(id.getId(), "Incorrect id " + id); 37 Validator.validateId(id.getId(), "Incorrect id " + id);
34 Validator.validateString(eventIdentifier, "Incorrect scope " + eventIdentifier); 38 Validator.validateString(eventIdentifier, "Incorrect scope " + eventIdentifier);
35 if(eventType == null){ 39 if(eventType == null){
@@ -16,33 +16,21 @@ @@ -16,33 +16,21 @@
16 package org.thingsboard.server.dao.yunteng.jpa.dao.event; 16 package org.thingsboard.server.dao.yunteng.jpa.dao.event;
17 17
18 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
19 -import org.thingsboard.server.common.data.EntityType;  
20 import org.thingsboard.server.common.data.id.DeviceProfileId; 19 import org.thingsboard.server.common.data.id.DeviceProfileId;
21 import org.thingsboard.server.common.data.id.EntityId; 20 import org.thingsboard.server.common.data.id.EntityId;
22 import org.thingsboard.server.common.data.id.TenantId; 21 import org.thingsboard.server.common.data.id.TenantId;
23 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
24 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType;  
25 -  
26 -import java.util.Collection;  
27 -import java.util.List;  
28 -import java.util.Optional; 22 +import org.thingsboard.server.common.data.page.PageData;
  23 +import org.thingsboard.server.common.data.page.TimePageLink;
  24 +import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
  25 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
29 26
30 /** 27 /**
31 * @author Andrew Shvayka 28 * @author Andrew Shvayka
32 */ 29 */
33 public interface EventsDao { 30 public interface EventsDao {
34 31
35 - ListenableFuture<Optional<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, TkEventType attributeType, String attributeKey);  
36 -  
37 - ListenableFuture<List<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, TkEventType attributeType, Collection<String> attributeKey);  
38 -  
39 - ListenableFuture<List<TkEventKvEntry>> findAll(TenantId tenantId, EntityId entityId, TkEventType attributeType);  
40 -  
41 - ListenableFuture<Void> save(TenantId tenantId, EntityId entityId, TkEventType attributeType,String eventIdentifier, TkEventKvEntry attribute);  
42 -  
43 - ListenableFuture<List<Void>> removeAll(TenantId tenantId, EntityId entityId, String eventId,TkEventType eventType,List<String> keys); 32 + PageData<TkEventKvDto> findEvents(EntityId entityId,String eventIdentifier, DeviceEventTypeEnum eventType, TimePageLink pageLink);
44 33
45 - List<String> findAllKeysByDeviceProfileId(TenantId tenantId, DeviceProfileId deviceProfileId); 34 + ListenableFuture<Void> save(TenantId tenantId, DeviceProfileId profileId,EntityId entityId, DeviceEventTypeEnum attributeType,String eventIdentifier, String eventData,Long eventTime);
46 35
47 - List<String> findAllKeysByEntityIds(TenantId tenantId, EntityType entityType, List<EntityId> entityIds);  
48 } 36 }
@@ -18,7 +18,7 @@ package org.thingsboard.server.dao.yunteng.jpa.entity.events; @@ -18,7 +18,7 @@ package org.thingsboard.server.dao.yunteng.jpa.entity.events;
18 import lombok.AllArgsConstructor; 18 import lombok.AllArgsConstructor;
19 import lombok.Data; 19 import lombok.Data;
20 import lombok.NoArgsConstructor; 20 import lombok.NoArgsConstructor;
21 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 21 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
22 22
23 import javax.persistence.Column; 23 import javax.persistence.Column;
24 import javax.persistence.Embeddable; 24 import javax.persistence.Embeddable;
@@ -36,13 +36,11 @@ import static org.thingsboard.server.dao.model.ModelConstants.*; @@ -36,13 +36,11 @@ import static org.thingsboard.server.dao.model.ModelConstants.*;
36 public class TkEventKvCompositeKey implements Serializable { 36 public class TkEventKvCompositeKey implements Serializable {
37 @Enumerated(EnumType.STRING) 37 @Enumerated(EnumType.STRING)
38 @Column(name = EVENT_TYPE_COLUMN) 38 @Column(name = EVENT_TYPE_COLUMN)
39 - private TkEventType eventType; 39 + private DeviceEventTypeEnum eventType;
40 @Column(name = ENTITY_ID_COLUMN, columnDefinition = "uuid") 40 @Column(name = ENTITY_ID_COLUMN, columnDefinition = "uuid")
41 private UUID entityId; 41 private UUID entityId;
42 @Column(name = EVENT_IDENTIFIER_COLUMN) 42 @Column(name = EVENT_IDENTIFIER_COLUMN)
43 private String eventIdentifier; 43 private String eventIdentifier;
44 @Column(name = EVENT_TIME_COLUMN) 44 @Column(name = EVENT_TIME_COLUMN)
45 private Long eventTime; 45 private Long eventTime;
46 - @Column(name = EVENT_KEY_COLUMN)  
47 - private String eventKey;  
48 } 46 }
@@ -16,9 +16,8 @@ @@ -16,9 +16,8 @@
16 package org.thingsboard.server.dao.yunteng.jpa.entity.events; 16 package org.thingsboard.server.dao.yunteng.jpa.entity.events;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 -import org.thingsboard.server.common.data.kv.*; 19 +import org.thingsboard.common.util.JacksonUtil;
20 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto; 20 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
21 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
22 import org.thingsboard.server.dao.model.ToData; 21 import org.thingsboard.server.dao.model.ToData;
23 22
24 import javax.persistence.Column; 23 import javax.persistence.Column;
@@ -28,50 +27,26 @@ import javax.persistence.Table; @@ -28,50 +27,26 @@ import javax.persistence.Table;
28 import java.io.Serializable; 27 import java.io.Serializable;
29 import java.util.UUID; 28 import java.util.UUID;
30 29
31 -import static org.thingsboard.server.dao.model.ModelConstants.*; 30 +import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_DEVICE_PROFILE_ID_PROPERTY;
  31 +import static org.thingsboard.server.dao.model.ModelConstants.EVENT_VALUE_COLUMN;
32 32
33 @Data 33 @Data
34 @Entity 34 @Entity
35 @Table(name = "tk_event_kv") 35 @Table(name = "tk_event_kv")
36 -public class TkEventKvEntity implements ToData<TkEventKvEntry>, Serializable { 36 +public class TkEventKvEntity implements ToData<TkEventKvDto>, Serializable {
37 37
38 @EmbeddedId 38 @EmbeddedId
39 private TkEventKvCompositeKey id; 39 private TkEventKvCompositeKey id;
40 40
41 - @Column(name = BOOLEAN_VALUE_COLUMN)  
42 - private Boolean booleanValue;  
43 -  
44 - @Column(name = STRING_VALUE_COLUMN)  
45 - private String strValue;  
46 -  
47 - @Column(name = LONG_VALUE_COLUMN)  
48 - private Long longValue;  
49 -  
50 - @Column(name = DOUBLE_VALUE_COLUMN)  
51 - private Double doubleValue;  
52 -  
53 - @Column(name = JSON_VALUE_COLUMN)  
54 - private String jsonValue; 41 + @Column(name = EVENT_VALUE_COLUMN)
  42 + private String eventValue;
55 43
56 44
57 @Column(name = DEVICE_DEVICE_PROFILE_ID_PROPERTY, columnDefinition = "uuid") 45 @Column(name = DEVICE_DEVICE_PROFILE_ID_PROPERTY, columnDefinition = "uuid")
58 private UUID deviceProfileId; 46 private UUID deviceProfileId;
59 47
60 @Override 48 @Override
61 - public TkEventKvEntry toData() {  
62 - KvEntry kvEntry = null;  
63 - if (strValue != null) {  
64 - kvEntry = new StringDataEntry(id.getEventIdentifier(), strValue);  
65 - } else if (booleanValue != null) {  
66 - kvEntry = new BooleanDataEntry(id.getEventIdentifier(), booleanValue);  
67 - } else if (doubleValue != null) {  
68 - kvEntry = new DoubleDataEntry(id.getEventIdentifier(), doubleValue);  
69 - } else if (longValue != null) {  
70 - kvEntry = new LongDataEntry(id.getEventIdentifier(), longValue);  
71 - } else if (jsonValue != null) {  
72 - kvEntry = new JsonDataEntry(id.getEventIdentifier(), jsonValue);  
73 - }  
74 -  
75 - return new TkEventKvDto(kvEntry, id.getEventTime()); 49 + public TkEventKvDto toData() {
  50 + return new TkEventKvDto(id.getEventTime(),id.getEventType(), JacksonUtil.toJsonNode(eventValue),id.getEntityId(),id.getEventIdentifier(),"",deviceProfileId,"");
76 } 51 }
77 } 52 }
@@ -13,7 +13,6 @@ import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity; @@ -13,7 +13,6 @@ import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity;
13 13
14 import java.sql.PreparedStatement; 14 import java.sql.PreparedStatement;
15 import java.sql.SQLException; 15 import java.sql.SQLException;
16 -import java.sql.Types;  
17 import java.util.ArrayList; 16 import java.util.ArrayList;
18 import java.util.List; 17 import java.util.List;
19 import java.util.regex.Pattern; 18 import java.util.regex.Pattern;
@@ -25,14 +24,14 @@ public abstract class EventKvInsertRepository { @@ -25,14 +24,14 @@ public abstract class EventKvInsertRepository {
25 private static final ThreadLocal<Pattern> PATTERN_THREAD_LOCAL = ThreadLocal.withInitial(() -> Pattern.compile(String.valueOf(Character.MIN_VALUE))); 24 private static final ThreadLocal<Pattern> PATTERN_THREAD_LOCAL = ThreadLocal.withInitial(() -> Pattern.compile(String.valueOf(Character.MIN_VALUE)));
26 private static final String EMPTY_STR = ""; 25 private static final String EMPTY_STR = "";
27 26
28 - private static final String BATCH_UPDATE = "UPDATE tk_event_kv SET str_v = ?, long_v = ?, dbl_v = ?, bool_v = ?, json_v = cast(? AS json) " +  
29 - "WHERE event_key = ? and event_type = ? and entity_id = ? and event_identifier =? and event_time = ?;"; 27 + private static final String BATCH_UPDATE = "UPDATE tk_event_kv SET event_value = ?, device_profile_id = ? " +
  28 + "WHERE event_type = ? and entity_id = ? and event_identifier =? and event_time = ?;";
30 29
31 private static final String INSERT_OR_UPDATE = 30 private static final String INSERT_OR_UPDATE =
32 - "INSERT INTO tk_event_kv (event_type, entity_id, event_identifier, event_time, str_v, long_v, dbl_v, bool_v, json_v, event_key) " +  
33 - "VALUES(?, ?, ?, ?, ?, ?, ?, ?, cast(? AS json), ?) " +  
34 - "ON CONFLICT (event_type, entity_id, event_identifier, event_time, event_key) " +  
35 - "DO UPDATE SET str_v = ?, long_v = ?, dbl_v = ?, bool_v = ?, json_v = cast(? AS json), event_key = ?;"; 31 + "INSERT INTO tk_event_kv (event_type, entity_id, event_identifier, event_time, event_value,device_profile_id) " +
  32 + "VALUES(?, ?, ?, ?, ?, ?) " +
  33 + "ON CONFLICT (event_type, entity_id, event_identifier, event_time) " +
  34 + "DO UPDATE SET event_value = ?,device_profile_id = ?;";
36 35
37 @Autowired 36 @Autowired
38 protected JdbcTemplate jdbcTemplate; 37 protected JdbcTemplate jdbcTemplate;
@@ -51,33 +50,12 @@ public abstract class EventKvInsertRepository { @@ -51,33 +50,12 @@ public abstract class EventKvInsertRepository {
51 @Override 50 @Override
52 public void setValues(PreparedStatement ps, int i) throws SQLException { 51 public void setValues(PreparedStatement ps, int i) throws SQLException {
53 TkEventKvEntity kvEntity = entities.get(i); 52 TkEventKvEntity kvEntity = entities.get(i);
54 - ps.setString(1, replaceNullChars(kvEntity.getStrValue()));  
55 -  
56 - if (kvEntity.getLongValue() != null) {  
57 - ps.setLong(2, kvEntity.getLongValue());  
58 - } else {  
59 - ps.setNull(2, Types.BIGINT);  
60 - }  
61 -  
62 - if (kvEntity.getDoubleValue() != null) {  
63 - ps.setDouble(3, kvEntity.getDoubleValue());  
64 - } else {  
65 - ps.setNull(3, Types.DOUBLE);  
66 - }  
67 -  
68 - if (kvEntity.getBooleanValue() != null) {  
69 - ps.setBoolean(4, kvEntity.getBooleanValue());  
70 - } else {  
71 - ps.setNull(4, Types.BOOLEAN);  
72 - }  
73 -  
74 - ps.setString(5, replaceNullChars(kvEntity.getJsonValue()));  
75 -  
76 - ps.setString(6, kvEntity.getId().getEventKey());  
77 - ps.setString(7, kvEntity.getId().getEventType().name());  
78 - ps.setObject(8, kvEntity.getId().getEntityId());  
79 - ps.setString(9, kvEntity.getId().getEventIdentifier());  
80 - ps.setLong(10, kvEntity.getId().getEventTime()); 53 + ps.setString(1, replaceNullChars(kvEntity.getEventValue()));
  54 + ps.setObject(2, kvEntity.getDeviceProfileId());
  55 + ps.setString(3, kvEntity.getId().getEventType().name());
  56 + ps.setObject(4, kvEntity.getId().getEntityId());
  57 + ps.setString(5, kvEntity.getId().getEventIdentifier());
  58 + ps.setLong(6, kvEntity.getId().getEventTime());
81 } 59 }
82 60
83 @Override 61 @Override
@@ -109,38 +87,12 @@ public abstract class EventKvInsertRepository { @@ -109,38 +87,12 @@ public abstract class EventKvInsertRepository {
109 ps.setString(3, kvEntity.getId().getEventIdentifier()); 87 ps.setString(3, kvEntity.getId().getEventIdentifier());
110 ps.setLong(4, kvEntity.getId().getEventTime()); 88 ps.setLong(4, kvEntity.getId().getEventTime());
111 89
112 - ps.setString(5, replaceNullChars(kvEntity.getStrValue()));  
113 - ps.setString(11, replaceNullChars(kvEntity.getStrValue()));  
114 -  
115 - if (kvEntity.getLongValue() != null) {  
116 - ps.setLong(6, kvEntity.getLongValue());  
117 - ps.setLong(12, kvEntity.getLongValue());  
118 - } else {  
119 - ps.setNull(6, Types.BIGINT);  
120 - ps.setNull(12, Types.BIGINT);  
121 - }  
122 -  
123 - if (kvEntity.getDoubleValue() != null) {  
124 - ps.setDouble(7, kvEntity.getDoubleValue());  
125 - ps.setDouble(13, kvEntity.getDoubleValue());  
126 - } else {  
127 - ps.setNull(7, Types.DOUBLE);  
128 - ps.setNull(13, Types.DOUBLE);  
129 - }  
130 -  
131 - if (kvEntity.getBooleanValue() != null) {  
132 - ps.setBoolean(8, kvEntity.getBooleanValue());  
133 - ps.setBoolean(14, kvEntity.getBooleanValue());  
134 - } else {  
135 - ps.setNull(8, Types.BOOLEAN);  
136 - ps.setNull(14, Types.BOOLEAN);  
137 - }  
138 -  
139 - ps.setString(9, replaceNullChars(kvEntity.getJsonValue()));  
140 - ps.setString(15, replaceNullChars(kvEntity.getJsonValue()));  
141 -  
142 - ps.setString(10, kvEntity.getId().getEventKey());  
143 - ps.setString(16, kvEntity.getId().getEventKey()); 90 + ps.setString(5, replaceNullChars(kvEntity.getEventValue()));
  91 + ps.setString(7, replaceNullChars(kvEntity.getEventValue()));
  92 +
  93 +
  94 + ps.setObject(6, kvEntity.getDeviceProfileId());
  95 + ps.setObject(8, kvEntity.getDeviceProfileId());
144 } 96 }
145 97
146 @Override 98 @Override
@@ -15,47 +15,22 @@ @@ -15,47 +15,22 @@
15 */ 15 */
16 package org.thingsboard.server.dao.yunteng.jpa.repository.event; 16 package org.thingsboard.server.dao.yunteng.jpa.repository.event;
17 17
18 -import org.springframework.data.jpa.repository.Modifying; 18 +import org.springframework.data.domain.Page;
  19 +import org.springframework.data.domain.Pageable;
19 import org.springframework.data.jpa.repository.Query; 20 import org.springframework.data.jpa.repository.Query;
20 -import org.springframework.data.repository.CrudRepository; 21 +import org.springframework.data.repository.PagingAndSortingRepository;
21 import org.springframework.data.repository.query.Param; 22 import org.springframework.data.repository.query.Param;
22 -import org.springframework.transaction.annotation.Transactional;  
23 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType;  
24 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvCompositeKey; 23 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvCompositeKey;
25 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity; 24 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity;
26 25
27 -import java.util.List;  
28 import java.util.UUID; 26 import java.util.UUID;
29 27
30 -public interface EventKvRepository extends CrudRepository<TkEventKvEntity, TkEventKvCompositeKey> { 28 +public interface EventKvRepository extends PagingAndSortingRepository<TkEventKvEntity, TkEventKvCompositeKey> {
31 29
32 - @Query("SELECT a FROM TkEventKvEntity a WHERE a.id.eventType = :eventType " +  
33 - "AND a.id.entityId = :entityId " )  
34 - List<TkEventKvEntity> findAllByEventTypeAndEntityId(@Param("eventType") TkEventType eventType,  
35 - @Param("entityId") UUID entityId);  
36 -  
37 - @Transactional  
38 - @Modifying  
39 - @Query("DELETE FROM TkEventKvEntity a WHERE a.id.eventType = :eventType " +  
40 - "AND a.id.entityId = :entityId " +  
41 - "AND a.id.eventIdentifier = :eventIdentifier " +  
42 - "AND a.id.eventKey = :eventKey")  
43 - void delete(@Param("eventType") TkEventType eventType,  
44 - @Param("entityId") UUID entityId,  
45 - @Param("eventIdentifier") String eventIdentifier,  
46 - @Param("eventKey") String eventKey);  
47 -  
48 - @Query(value = "SELECT DISTINCT event_key FROM tk_event_kv WHERE entity_id " +  
49 - " in (SELECT id FROM device WHERE tenant_id = :tenantId and device_profile_id = :deviceProfileId limit 100) ORDER BY event_key", nativeQuery = true)  
50 - List<String> findAllKeysByDeviceProfileId(@Param("tenantId") UUID tenantId,  
51 - @Param("deviceProfileId") UUID deviceProfileId);  
52 -  
53 - @Query(value = "SELECT DISTINCT event_key FROM tk_event_kv WHERE entity_id " +  
54 - " in (SELECT id FROM device WHERE tenant_id = :tenantId limit 100) ORDER BY event_key", nativeQuery = true)  
55 - List<String> findAllKeysByTenantId(@Param("tenantId") UUID tenantId);  
56 -  
57 - @Query(value = "SELECT DISTINCT event_key FROM tk_event_kv WHERE entity_id " +  
58 - " in :entityIds ORDER BY event_key", nativeQuery = true)  
59 - List<String> findAllKeysByEntityIds(@Param("entityIds") List<UUID> entityIds); 30 + @Query("SELECT a FROM TkEventKvEntity a WHERE a.id.entityId = :entityId "
  31 +// +"AND a.id.eventType = :eventType AND a.id.eventIdentifier = :eventIdentifier "
  32 + )
  33 + Page<TkEventKvEntity> findEvents(@Param("entityId") UUID entityId,
  34 + Pageable pageable);
60 } 35 }
61 36
@@ -29,16 +29,15 @@ import java.util.List; @@ -29,16 +29,15 @@ import java.util.List;
29 public class HsqlEventsInsertRepository extends EventKvInsertRepository { 29 public class HsqlEventsInsertRepository extends EventKvInsertRepository {
30 30
31 private static final String INSERT_OR_UPDATE = 31 private static final String INSERT_OR_UPDATE =
32 - "MERGE INTO tk_event_kv USING(VALUES ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " +  
33 - "A (event_type, entity_id, event_identifier, event_key, str_v, long_v, dbl_v, bool_v, json_v, event_key) " + 32 + "MERGE INTO tk_event_kv USING(VALUES ?, ?, ?, ?, ?, ?) " +
  33 + "A (event_type, entity_id, event_identifier, event_time, event_value,device_profile_id) " +
34 "ON (tk_event_kv.event_type=A.event_type " + 34 "ON (tk_event_kv.event_type=A.event_type " +
35 "AND tk_event_kv.entity_id=A.entity_id " + 35 "AND tk_event_kv.entity_id=A.entity_id " +
36 "AND tk_event_kv.event_identifier=A.event_identifier " + 36 "AND tk_event_kv.event_identifier=A.event_identifier " +
37 "AND tk_event_kv.event_time=A.event_time) " + 37 "AND tk_event_kv.event_time=A.event_time) " +
38 - "AND tk_event_kv.event_key=A.event_key) " +  
39 - "WHEN MATCHED THEN UPDATE SET tk_event_kv.str_v = A.str_v, tk_event_kv.long_v = A.long_v, tk_event_kv.dbl_v = A.dbl_v, tk_event_kv.bool_v = A.bool_v, tk_event_kv.json_v = A.json_v " +  
40 - "WHEN NOT MATCHED THEN INSERT (event_type, entity_id, event_identifier, event_time, str_v, long_v, dbl_v, bool_v, json_v, event_key) " +  
41 - "VALUES (A.event_type, A.entity_id, A.event_identifier, A.event_time, A.str_v, A.long_v, A.dbl_v, A.bool_v, A.json_v, A.event_key)"; 38 + "WHEN MATCHED THEN UPDATE SET tk_event_kv.event_value = A.event_value " +
  39 + "WHEN NOT MATCHED THEN INSERT (event_type, entity_id, event_identifier, event_time, event_value, device_profile_id) " +
  40 + "VALUES (A.event_type, A.entity_id, A.event_identifier, A.event_time, A.event_value, A.device_profile_id)";
42 41
43 @Override 42 @Override
44 protected void saveOrUpdate(List<TkEventKvEntity> entities) { 43 protected void saveOrUpdate(List<TkEventKvEntity> entities) {
@@ -48,29 +47,8 @@ public class HsqlEventsInsertRepository extends EventKvInsertRepository { @@ -48,29 +47,8 @@ public class HsqlEventsInsertRepository extends EventKvInsertRepository {
48 ps.setObject(2, entity.getId().getEntityId()); 47 ps.setObject(2, entity.getId().getEntityId());
49 ps.setString(3, entity.getId().getEventIdentifier()); 48 ps.setString(3, entity.getId().getEventIdentifier());
50 ps.setLong(4, entity.getId().getEventTime()); 49 ps.setLong(4, entity.getId().getEventTime());
51 - ps.setString(5, entity.getStrValue());  
52 -  
53 - if (entity.getLongValue() != null) {  
54 - ps.setLong(6, entity.getLongValue());  
55 - } else {  
56 - ps.setNull(6, Types.BIGINT);  
57 - }  
58 -  
59 - if (entity.getDoubleValue() != null) {  
60 - ps.setDouble(7, entity.getDoubleValue());  
61 - } else {  
62 - ps.setNull(7, Types.DOUBLE);  
63 - }  
64 -  
65 - if (entity.getBooleanValue() != null) {  
66 - ps.setBoolean(8, entity.getBooleanValue());  
67 - } else {  
68 - ps.setNull(8, Types.BOOLEAN);  
69 - }  
70 -  
71 - ps.setString(9, entity.getJsonValue());  
72 -  
73 - ps.setString(10, entity.getId().getEventKey()); 50 + ps.setObject(5, entity.getEventValue());
  51 + ps.setObject(6, entity.getEventValue());
74 }); 52 });
75 }); 53 });
76 } 54 }
@@ -15,37 +15,32 @@ @@ -15,37 +15,32 @@
15 */ 15 */
16 package org.thingsboard.server.dao.yunteng.jpa.repository.event; 16 package org.thingsboard.server.dao.yunteng.jpa.repository.event;
17 17
18 -import com.google.common.collect.Lists;  
19 -import com.google.common.util.concurrent.Futures;  
20 import com.google.common.util.concurrent.ListenableFuture; 18 import com.google.common.util.concurrent.ListenableFuture;
21 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
22 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.beans.factory.annotation.Value; 21 import org.springframework.beans.factory.annotation.Value;
24 import org.springframework.stereotype.Component; 22 import org.springframework.stereotype.Component;
25 -import org.thingsboard.server.common.data.EntityType;  
26 import org.thingsboard.server.common.data.id.DeviceProfileId; 23 import org.thingsboard.server.common.data.id.DeviceProfileId;
27 import org.thingsboard.server.common.data.id.EntityId; 24 import org.thingsboard.server.common.data.id.EntityId;
28 import org.thingsboard.server.common.data.id.TenantId; 25 import org.thingsboard.server.common.data.id.TenantId;
29 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
30 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 26 +import org.thingsboard.server.common.data.page.PageData;
  27 +import org.thingsboard.server.common.data.page.TimePageLink;
  28 +import org.thingsboard.server.common.data.yunteng.dto.TkEventKvDto;
  29 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
31 import org.thingsboard.server.common.stats.StatsFactory; 30 import org.thingsboard.server.common.stats.StatsFactory;
32 import org.thingsboard.server.dao.DaoUtil; 31 import org.thingsboard.server.dao.DaoUtil;
33 import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService; 32 import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService;
34 import org.thingsboard.server.dao.sql.ScheduledLogExecutorComponent; 33 import org.thingsboard.server.dao.sql.ScheduledLogExecutorComponent;
35 import org.thingsboard.server.dao.sql.TbSqlBlockingQueueParams; 34 import org.thingsboard.server.dao.sql.TbSqlBlockingQueueParams;
36 import org.thingsboard.server.dao.sql.TbSqlBlockingQueueWrapper; 35 import org.thingsboard.server.dao.sql.TbSqlBlockingQueueWrapper;
  36 +import org.thingsboard.server.dao.yunteng.jpa.dao.event.EventsDao;
37 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvCompositeKey; 37 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvCompositeKey;
38 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity; 38 import org.thingsboard.server.dao.yunteng.jpa.entity.events.TkEventKvEntity;
39 -import org.thingsboard.server.dao.yunteng.jpa.dao.event.EventsDao;  
40 39
41 import javax.annotation.PostConstruct; 40 import javax.annotation.PostConstruct;
42 import javax.annotation.PreDestroy; 41 import javax.annotation.PreDestroy;
43 -import java.util.Collection;  
44 import java.util.Comparator; 42 import java.util.Comparator;
45 -import java.util.List;  
46 -import java.util.Optional;  
47 import java.util.function.Function; 43 import java.util.function.Function;
48 -import java.util.stream.Collectors;  
49 44
50 @Component 45 @Component
51 @Slf4j 46 @Slf4j
@@ -109,60 +104,18 @@ public class JpaEventDao extends JpaAbstractDaoListeningExecutorService implemen @@ -109,60 +104,18 @@ public class JpaEventDao extends JpaAbstractDaoListeningExecutorService implemen
109 } 104 }
110 105
111 @Override 106 @Override
112 - public ListenableFuture<Optional<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, TkEventType eventType, String attributeKey) {  
113 - TkEventKvCompositeKey compositeKey =  
114 - getEventKvCompositeKey(eventType,entityId,null, attributeKey,null);  
115 - return Futures.immediateFuture(  
116 - Optional.ofNullable(DaoUtil.getData(eventKvRepository.findById(compositeKey))));  
117 - } 107 + public PageData<TkEventKvDto> findEvents(EntityId entityId,String eventIdentifier, DeviceEventTypeEnum eventType, TimePageLink pageLink) {
118 108
119 - @Override  
120 - public ListenableFuture<List<TkEventKvEntry>> find(TenantId tenantId, EntityId entityId, TkEventType eventType, Collection<String> attributeKeys) {  
121 - List<TkEventKvCompositeKey> compositeKeys =  
122 - attributeKeys  
123 - .stream()  
124 - .map(attributeKey ->  
125 - getEventKvCompositeKey(eventType,entityId, null,attributeKey,null))  
126 - .collect(Collectors.toList());  
127 - return Futures.immediateFuture(  
128 - DaoUtil.convertDataList(Lists.newArrayList(eventKvRepository.findAllById(compositeKeys)))); 109 + return DaoUtil.toPageData(eventKvRepository.findEvents(entityId.getId(),DaoUtil.toPageable(pageLink)));
129 } 110 }
130 111
131 - @Override  
132 - public ListenableFuture<List<TkEventKvEntry>> findAll(TenantId tenantId, EntityId entityId, TkEventType eventType) {  
133 - return Futures.immediateFuture(  
134 - DaoUtil.convertDataList(Lists.newArrayList(  
135 - eventKvRepository.findAllByEventTypeAndEntityId(  
136 - eventType,  
137 - entityId.getId()))));  
138 - }  
139 112
140 @Override 113 @Override
141 - public List<String> findAllKeysByDeviceProfileId(TenantId tenantId, DeviceProfileId deviceProfileId) {  
142 - if (deviceProfileId != null) {  
143 - return eventKvRepository.findAllKeysByDeviceProfileId(tenantId.getId(), deviceProfileId.getId());  
144 - } else {  
145 - return eventKvRepository.findAllKeysByTenantId(tenantId.getId());  
146 - }  
147 - }  
148 -  
149 - @Override  
150 - public List<String> findAllKeysByEntityIds(TenantId tenantId, EntityType entityType, List<EntityId> entityIds) {  
151 - return eventKvRepository  
152 - .findAllKeysByEntityIds(entityIds.stream().map(EntityId::getId).collect(Collectors.toList()));  
153 - }  
154 -  
155 - @Override  
156 - public ListenableFuture<Void> save(TenantId tenantId, EntityId entityId,TkEventType eventType, String eventIdentifier, TkEventKvEntry attribute) { 114 + public ListenableFuture<Void> save(TenantId tenantId, DeviceProfileId profileId,EntityId entityId,DeviceEventTypeEnum eventType, String eventIdentifier, String eventData,Long eventTime) {
157 TkEventKvEntity entity = new TkEventKvEntity(); 115 TkEventKvEntity entity = new TkEventKvEntity();
158 - entity.setId(new TkEventKvCompositeKey(eventType, entityId.getId(), eventIdentifier, attribute.getEventTime(),attribute.getKey()));  
159 -  
160 -// entity.setDeviceProfileId();  
161 - entity.setStrValue(attribute.getStrValue().orElse(null));  
162 - entity.setDoubleValue(attribute.getDoubleValue().orElse(null));  
163 - entity.setLongValue(attribute.getLongValue().orElse(null));  
164 - entity.setBooleanValue(attribute.getBooleanValue().orElse(null));  
165 - entity.setJsonValue(attribute.getJsonValue().orElse(null)); 116 + entity.setId(new TkEventKvCompositeKey(eventType, entityId.getId(), eventIdentifier, eventTime));
  117 + entity.setDeviceProfileId(profileId.getId());
  118 + entity.setEventValue(eventData);
166 return addToQueue(entity); 119 return addToQueue(entity);
167 } 120 }
168 121
@@ -170,22 +123,4 @@ public class JpaEventDao extends JpaAbstractDaoListeningExecutorService implemen @@ -170,22 +123,4 @@ public class JpaEventDao extends JpaAbstractDaoListeningExecutorService implemen
170 return queue.add(entity); 123 return queue.add(entity);
171 } 124 }
172 125
173 - @Override  
174 - public ListenableFuture<List<Void>> removeAll(TenantId tenantId, EntityId entityId, String eventId,TkEventType eventType,List<String> keys) {  
175 - return service.submit(() -> {  
176 - keys.forEach(key ->  
177 - eventKvRepository.delete(eventType,entityId.getId(), eventId,key)  
178 - );  
179 - return null;  
180 - });  
181 - }  
182 -  
183 - private TkEventKvCompositeKey getEventKvCompositeKey(TkEventType eventType,EntityId entityId, String eventIdentifier,String eventKey, Long eventTime) {  
184 - return new TkEventKvCompositeKey(  
185 - eventType,  
186 - entityId.getId(),  
187 - eventIdentifier,  
188 - eventTime,  
189 - eventKey);  
190 - }  
191 } 126 }
@@ -17,13 +17,14 @@ package org.thingsboard.rule.engine.api; @@ -17,13 +17,14 @@ package org.thingsboard.rule.engine.api;
17 17
18 import com.google.common.util.concurrent.FutureCallback; 18 import com.google.common.util.concurrent.FutureCallback;
19 import org.thingsboard.server.common.data.id.CustomerId; 19 import org.thingsboard.server.common.data.id.CustomerId;
  20 +import org.thingsboard.server.common.data.id.DeviceProfileId;
20 import org.thingsboard.server.common.data.id.EntityId; 21 import org.thingsboard.server.common.data.id.EntityId;
21 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
22 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 23 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
23 import org.thingsboard.server.common.data.kv.DeleteTsKvQuery; 24 import org.thingsboard.server.common.data.kv.DeleteTsKvQuery;
24 import org.thingsboard.server.common.data.kv.TsKvEntry; 25 import org.thingsboard.server.common.data.kv.TsKvEntry;
25 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry; 26 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;
26 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 27 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
27 28
28 import java.util.Collection; 29 import java.util.Collection;
29 import java.util.List; 30 import java.util.List;
@@ -44,7 +45,7 @@ public interface RuleEngineTelemetryService { @@ -44,7 +45,7 @@ public interface RuleEngineTelemetryService {
44 void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, boolean notifyDevice, FutureCallback<Void> callback); 45 void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, boolean notifyDevice, FutureCallback<Void> callback);
45 46
46 //Thingskit function 47 //Thingskit function
47 - void saveAndNotify(TenantId tenantId, EntityId entityId, String eventId, TkEventType eventType, List<TkEventKvEntry> attributes, FutureCallback<Void> callback); 48 + void saveAndNotify(TenantId tenantId, DeviceProfileId profileId, EntityId entityId, String eventId, DeviceEventTypeEnum eventType, String eventData,Long eventTime, FutureCallback<Void> callback);
48 49
49 void saveLatestAndNotify(TenantId tenantId, EntityId entityId, List<TsKvEntry> ts, FutureCallback<Void> callback); 50 void saveLatestAndNotify(TenantId tenantId, EntityId entityId, List<TsKvEntry> ts, FutureCallback<Void> callback);
50 51
@@ -15,25 +15,19 @@ @@ -15,25 +15,19 @@
15 */ 15 */
16 package org.thingsboard.rule.engine.yunteng.event; 16 package org.thingsboard.rule.engine.yunteng.event;
17 17
18 -import com.google.gson.JsonParser;  
19 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
20 -import org.apache.commons.lang3.StringUtils;  
21 import org.thingsboard.rule.engine.api.*; 19 import org.thingsboard.rule.engine.api.*;
22 import org.thingsboard.rule.engine.api.util.TbNodeUtils; 20 import org.thingsboard.rule.engine.api.util.TbNodeUtils;
23 import org.thingsboard.rule.engine.telemetry.TelemetryNodeCallback; 21 import org.thingsboard.rule.engine.telemetry.TelemetryNodeCallback;
24 -import org.thingsboard.server.common.data.kv.AttributeKvEntry; 22 +import org.thingsboard.server.common.data.id.DeviceProfileId;
25 import org.thingsboard.server.common.data.plugin.ComponentType; 23 import org.thingsboard.server.common.data.plugin.ComponentType;
26 -import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;  
27 -import org.thingsboard.server.common.data.yunteng.enums.TkEventType; 24 +import org.thingsboard.server.common.data.yunteng.enums.DeviceEventTypeEnum;
28 import org.thingsboard.server.common.msg.TbMsg; 25 import org.thingsboard.server.common.msg.TbMsg;
29 import org.thingsboard.server.common.msg.session.SessionMsgType; 26 import org.thingsboard.server.common.msg.session.SessionMsgType;
30 -import org.thingsboard.server.common.transport.adaptor.JsonConverter;  
31 27
32 -import java.util.ArrayList;  
33 -import java.util.Set; 28 +import java.util.UUID;
34 29
35 -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_IDENTIFIER_COLUMN;  
36 -import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_COLUMN; 30 +import static org.thingsboard.server.dao.model.ModelConstants.*;
37 31
38 @Slf4j 32 @Slf4j
39 @RuleNode( 33 @RuleNode(
@@ -49,10 +43,12 @@ import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_COLUMN; @@ -49,10 +43,12 @@ import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_COLUMN;
49 public class TkMsgEventNode implements TbNode { 43 public class TkMsgEventNode implements TbNode {
50 44
51 private TkMsgEventNodeConfiguration config; 45 private TkMsgEventNodeConfiguration config;
  46 + private RuleEngineDeviceProfileCache cache;
52 47
53 @Override 48 @Override
54 public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { 49 public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
55 this.config = TbNodeUtils.convert(configuration, TkMsgEventNodeConfiguration.class); 50 this.config = TbNodeUtils.convert(configuration, TkMsgEventNodeConfiguration.class);
  51 + cache = ctx.getDeviceProfileCache();
56 } 52 }
57 53
58 @Override 54 @Override
@@ -61,16 +57,18 @@ public class TkMsgEventNode implements TbNode { @@ -61,16 +57,18 @@ public class TkMsgEventNode implements TbNode {
61 ctx.tellFailure(msg, new IllegalArgumentException("Unsupported msg type: " + msg.getType())); 57 ctx.tellFailure(msg, new IllegalArgumentException("Unsupported msg type: " + msg.getType()));
62 return; 58 return;
63 } 59 }
64 - String src = msg.getData();  
65 - Set<TkEventKvEntry> events = JsonConverter.convertToEvents(new JsonParser().parse(src));  
66 String eventIdentifier = msg.getMetaData().getValue(EVENT_IDENTIFIER_COLUMN); 60 String eventIdentifier = msg.getMetaData().getValue(EVENT_IDENTIFIER_COLUMN);
67 - TkEventType eventType = TkEventType.valueOf(msg.getMetaData().getValue(EVENT_TYPE_COLUMN)); 61 + String deviceProfileId = msg.getMetaData().getValue(DEVICE_DEVICE_PROFILE_ID_PROPERTY);
  62 + ////TODO: 验证事件类型、事件标识符和数据建是否与产品物模型中的事件匹配
  63 + long ts = System.currentTimeMillis();
  64 + String src = msg.getData();
  65 + DeviceEventTypeEnum eventType = DeviceEventTypeEnum.valueOf(msg.getMetaData().getValue(EVENT_TYPE_COLUMN));
68 ctx.getTelemetryService().saveAndNotify( 66 ctx.getTelemetryService().saveAndNotify(
69 - ctx.getTenantId(), 67 + ctx.getTenantId(),new DeviceProfileId(UUID.fromString(deviceProfileId)),
70 msg.getOriginator(), 68 msg.getOriginator(),
71 eventIdentifier, 69 eventIdentifier,
72 eventType, 70 eventType,
73 - new ArrayList<>(events), 71 + src,ts,
74 new TelemetryNodeCallback(ctx, msg) 72 new TelemetryNodeCallback(ctx, msg)
75 ); 73 );
76 } 74 }