Commit d5a41a3d22971a639ca7da37d5236cd74fd18375
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 | } |
application/src/main/java/org/thingsboard/server/controller/yunteng/TkEventController.java
0 → 100644
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 | } |
@@ -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 | } |