Commit 8bbb65330a99496e541d8cb6ac4fe7b61bcdcae6

Authored by 黄 x
1 parent e844ba73

convert config add filter by products devices

... ... @@ -245,9 +245,9 @@ public class TkConvertDataToController extends BaseController {
245 245 ruleChainService.loadRuleChainMetaData(getTenantId(), ruleChain.getId());
246 246 // 3. SETUP CONNECTION AND ADD OR DELETE RULE NODE
247 247 if (status == FastIotConstants.MagicNumber.ZERO) {
248   - needSaveRuleNode = convertConfigService.deleteRuleNode(nodes, ruleChainMetaData, nodeType);
  248 + needSaveRuleNode = convertConfigService.deleteRuleNode(nodes, ruleChainMetaData, nodeType,getCurrentUser().getCurrentTenantId());
249 249 } else {
250   - convertConfigService.addRuleNode(nodes, ruleChainMetaData, nodeType);
  250 + convertConfigService.addRuleNode(nodes, ruleChainMetaData, nodeType,getCurrentUser().getCurrentTenantId());
251 251 needSaveRuleNode = true;
252 252 }
253 253 // 4. SAVE METADATA
... ...
... ... @@ -33,7 +33,8 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
33 33 public class TkDeviceStateLogController extends BaseController {
34 34 private final TkDeviceStateLogService tkDeviceStateLogService;
35 35
36   - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log:view'})")
  36 + @PreAuthorize(
  37 + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log:view'})")
37 38 @GetMapping(params = {PAGE_SIZE, PAGE})
38 39 @ApiOperation("查询")
39 40 public TkPageData<TkDeviceStateLogDTO> page(
... ... @@ -66,11 +67,16 @@ public class TkDeviceStateLogController extends BaseController {
66 67 queryMap.put(ORDER_FILED, orderBy);
67 68 queryMap.put(ORDER_TYPE, orderType);
68 69 queryMap.put(TENANT_ID, getCurrentUser().getCurrentTenantId());
69   - return tkDeviceStateLogService.page(getCurrentUser().getCurrentTenantId(), queryMap);
  70 + if(getCurrentUser().isCustomerUser()){
  71 + queryMap.put(CUSTOMER_ID, getCurrentUser().getCustomerId().getId().toString());
  72 + }
  73 + return tkDeviceStateLogService.page(
  74 + getCurrentUser().isCustomerUser(), getCurrentUser().getCurrentTenantId(), queryMap);
70 75 }
71 76
72 77 @DeleteMapping
73   - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::delete'})")
  78 + @PreAuthorize(
  79 + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::delete'})")
74 80 public ResponseEntity<Boolean> deleteDeviceStateLog(
75 81 @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
76 82 throws ThingsboardException {
... ... @@ -79,10 +85,11 @@ public class TkDeviceStateLogController extends BaseController {
79 85 }
80 86
81 87 @PostMapping
82   - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::post'})")
  88 + @PreAuthorize(
  89 + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::post'})")
83 90 public ResponseEntity<TkDeviceStateLogDTO> updateDeviceStateLogInfo(
84 91 @RequestBody TkDeviceStateLogDTO tkDeviceStateLogDTO) throws ThingsboardException {
85   - if(StringUtils.isEmpty(tkDeviceStateLogDTO.getId())){
  92 + if (StringUtils.isEmpty(tkDeviceStateLogDTO.getId())) {
86 93 throw new TkDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
87 94 }
88 95 tkDeviceStateLogDTO.setTenantId(getCurrentUser().getCurrentTenantId());
... ... @@ -91,7 +98,8 @@ public class TkDeviceStateLogController extends BaseController {
91 98 }
92 99
93 100 @GetMapping("{id}")
94   - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::detail'})")
  101 + @PreAuthorize(
  102 + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:device:state:log::detail'})")
95 103 public ResponseEntity<TkDeviceStateLogDTO> getDeviceStateLogInfo(@PathVariable("id") String id)
96 104 throws ThingsboardException {
97 105 return ResponseEntity.ok(
... ...
... ... @@ -3,6 +3,7 @@ package org.thingsboard.server.dao.yunteng.impl;
3 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5 import com.fasterxml.jackson.databind.JsonNode;
  6 +import com.fasterxml.jackson.databind.node.ArrayNode;
6 7 import com.fasterxml.jackson.databind.node.ObjectNode;
7 8 import lombok.RequiredArgsConstructor;
8 9 import lombok.extern.slf4j.Slf4j;
... ... @@ -19,6 +20,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidatio
19 20 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
20 21 import org.thingsboard.server.common.data.yunteng.dto.convert.ConvertConfigDTO;
21 22 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  23 +import org.thingsboard.server.common.data.yunteng.enums.DatasourceTypeEnum;
22 24 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
23 25 import org.thingsboard.server.dao.yunteng.ConvertConfig;
24 26 import org.thingsboard.server.dao.yunteng.mapper.ConvertConfigMapper;
... ... @@ -26,6 +28,7 @@ import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
26 28 import org.thingsboard.server.dao.yunteng.service.ConvertConfigService;
27 29
28 30 import java.util.*;
  31 +import java.util.concurrent.ConcurrentHashMap;
29 32 import java.util.concurrent.atomic.AtomicInteger;
30 33
31 34 @Slf4j
... ... @@ -38,6 +41,7 @@ public class TkConvertConfigServiceImpl
38 41 private final String originatorType =
39 42 "org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode";
40 43 private final String scriptType = "org.thingsboard.rule.engine.transform.TbTransformMsgNode";
  44 + private final String filterScriptType = "org.thingsboard.rule.engine.filter.TbJsFilterNode";
41 45 private final String convertNodeName = "dataConvert@thingskit";
42 46
43 47 @Override
... ... @@ -108,7 +112,7 @@ public class TkConvertConfigServiceImpl
108 112 if (null != convertConfig && !Objects.equals(convertConfig.getTenantId(), tenantId)) {
109 113 throw new TkDataValidationException(ErrorMessage.NOT_BELONG_CURRENT_TENANT.getMessage());
110 114 }
111   - return null !=convertConfig?convertConfig.getDTO(ConvertConfigDTO.class):null;
  115 + return null != convertConfig ? convertConfig.getDTO(ConvertConfigDTO.class) : null;
112 116 }
113 117
114 118 @Override
... ... @@ -128,6 +132,18 @@ public class TkConvertConfigServiceImpl
128 132 }
129 133
130 134 @Override
  135 + public ConvertConfigDTO findConvertConfigDTOByName(
  136 + String tenantId, String name, Integer nodeType) {
  137 + ConvertConfig convertConfig =
  138 + baseMapper.selectOne(
  139 + new LambdaQueryWrapper<ConvertConfig>()
  140 + .eq(ConvertConfig::getTenantId, tenantId)
  141 + .eq(ConvertConfig::getName, name)
  142 + .eq(ConvertConfig::getNodeType, nodeType));
  143 + return null != convertConfig ? convertConfig.getDTO(ConvertConfigDTO.class) : null;
  144 + }
  145 +
  146 + @Override
131 147 public List<RuleNode> getRuleNodesByConvertConfigIds(
132 148 List<String> ids, Integer status, Integer nodeType) {
133 149 if (null == ids || ids.isEmpty()) {
... ... @@ -196,10 +212,13 @@ public class TkConvertConfigServiceImpl
196 212 */
197 213 @Override
198 214 public boolean deleteRuleNode(
199   - List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType) {
  215 + List<RuleNode> nodes,
  216 + RuleChainMetaData ruleChainMetaData,
  217 + Integer nodeType,
  218 + String tenantId) {
200 219 boolean needDelete;
201 220 if (nodeType.intValue() == FastIotConstants.CONVERT_DATA.intValue()) {
202   - needDelete = deleteConvertConfig(nodes, ruleChainMetaData);
  221 + needDelete = deleteConvertConfig(nodes, ruleChainMetaData, tenantId);
203 222 } else if (nodeType.intValue() == FastIotConstants.JAVA_SCRIPT.intValue()) {
204 223 needDelete = deleteConvertJS(nodes, ruleChainMetaData);
205 224 } else {
... ... @@ -210,9 +229,12 @@ public class TkConvertConfigServiceImpl
210 229
211 230 @Override
212 231 public void addRuleNode(
213   - List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType) {
  232 + List<RuleNode> nodes,
  233 + RuleChainMetaData ruleChainMetaData,
  234 + Integer nodeType,
  235 + String tenantId) {
214 236 if (nodeType.intValue() == FastIotConstants.CONVERT_DATA.intValue()) {
215   - addConvertConfigRuleNode(nodes, ruleChainMetaData);
  237 + addConvertConfigRuleNode(nodes, ruleChainMetaData, tenantId);
216 238 } else if (nodeType.intValue() == FastIotConstants.JAVA_SCRIPT.intValue()) {
217 239 addConvertJSRuleNode(nodes, ruleChainMetaData);
218 240 } else {
... ... @@ -272,14 +294,15 @@ public class TkConvertConfigServiceImpl
272 294 return needDelete;
273 295 }
274 296
275   - private boolean deleteConvertConfig(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
  297 + private boolean deleteConvertConfig(
  298 + List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, String tenantId) {
276 299
277 300 // refactoring RuleChainMetaData
278 301 AtomicInteger matchNode = new AtomicInteger(0);
279 302 nodes.forEach(
280 303 deleteRuleNode -> {
281   - int deleteIndex = 0;
282 304 boolean needDelete = false;
  305 + int deleteIndex = 0;
283 306 for (RuleNode ruleNode : ruleChainMetaData.getNodes()) {
284 307 /** 被删除节点右侧节点的下标左偏移1个量 */
285 308 if (deleteRuleNode.getName().equals(ruleNode.getName())
... ... @@ -291,9 +314,46 @@ public class TkConvertConfigServiceImpl
291 314 deleteIndex++;
292 315 }
293 316
  317 + // 判断数据源是产品、设备、全部
  318 + ConvertConfigDTO convertConfigDTO =
  319 + findConvertConfigDTOByName(
  320 + tenantId, deleteRuleNode.getName(), FastIotConstants.CONVERT_DATA.intValue());
  321 + boolean haveFilterNode = false;
  322 + String filterNodeName = null;
  323 + String filterType = null;
  324 + if (null != convertConfigDTO
  325 + && null != convertConfigDTO.getDatasourceType()
  326 + && !Objects.equals(convertConfigDTO.getDatasourceType(), DatasourceTypeEnum.ALL)) {
  327 + haveFilterNode = true;
  328 + for (NodeConnectionInfo nodeConnection : ruleChainMetaData.getConnections()) {
  329 + if (nodeConnection.getToIndex() == deleteIndex) {
  330 + int fromIndex = nodeConnection.getFromIndex();
  331 + RuleNode ruleNode = ruleChainMetaData.getNodes().get(fromIndex);
  332 + filterNodeName = ruleNode.getName();
  333 + filterType = ruleNode.getType();
  334 + break;
  335 + }
  336 + }
  337 + }
  338 +
294 339 if (needDelete) {
295 340 // Delete Rule Node
296 341 freshRuleChainMetaData(ruleChainMetaData, deleteIndex);
  342 + if (haveFilterNode) {
  343 + int deleteFilterNode = 0;
  344 + for (RuleNode ruleNode : ruleChainMetaData.getNodes()) {
  345 + if (filterNodeName.equals(ruleNode.getName())
  346 + && filterType.equals(ruleNode.getType())) {
  347 + needDelete = true;
  348 + matchNode.getAndIncrement();
  349 + break;
  350 + }
  351 + deleteFilterNode++;
  352 + }
  353 + if (needDelete) {
  354 + freshRuleChainMetaData(ruleChainMetaData, deleteFilterNode);
  355 + }
  356 + }
297 357 }
298 358 });
299 359
... ... @@ -331,9 +391,9 @@ public class TkConvertConfigServiceImpl
331 391 private void freshRuleChainMetaData(RuleChainMetaData ruleChainMetaData, int removeNodeIndex) {
332 392 ruleChainMetaData.getNodes().remove(removeNodeIndex);
333 393
334   - int firestIndex = ruleChainMetaData.getFirstNodeIndex();
  394 + int firstIndex = ruleChainMetaData.getFirstNodeIndex();
335 395 ruleChainMetaData.setFirstNodeIndex(
336   - Math.max(firestIndex < removeNodeIndex ? firestIndex : firestIndex - 1, 0));
  396 + Math.max(firstIndex < removeNodeIndex ? firstIndex : firstIndex - 1, 0));
337 397
338 398 ruleChainMetaData.setConnections(
339 399 freshRelation(ruleChainMetaData.getConnections(), removeNodeIndex));
... ... @@ -365,7 +425,8 @@ public class TkConvertConfigServiceImpl
365 425 return newConnections;
366 426 }
367 427
368   - private void addConvertConfigRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
  428 + private void addConvertConfigRuleNode(
  429 + List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, String tenantId) {
369 430 // 1. GET SAVE TIMESERIES‘S NODE INDEX
370 431 int seriesIndex = 0;
371 432 for (RuleNode ruleNode : ruleChainMetaData.getNodes()) {
... ... @@ -397,6 +458,7 @@ public class TkConvertConfigServiceImpl
397 458 Map<String, Map<String, String>> originator = new HashMap<>();
398 459 Map<String, String> fields = new HashMap<>();
399 460 fields.put("id", "deviceId");
  461 + fields.put("deviceProfileId", "deviceProfileId");
400 462 originator.put("fieldsMapping", fields);
401 463 types.put(originatorType, JacksonUtil.toString(originator));
402 464
... ... @@ -405,6 +467,7 @@ public class TkConvertConfigServiceImpl
405 467 scriptMap.put(
406 468 "jsScript",
407 469 "msg.deviceId = metadata.deviceId;\n"
  470 + + "msg.deviceProfileId = metadata.deviceProfileId;\n"
408 471 + "msg.deviceName = metadata.deviceName;\n"
409 472 + "msg.deviceType = metadata.deviceType;\n"
410 473 + "if(msg.ts !=null){\n"
... ... @@ -420,16 +483,151 @@ public class TkConvertConfigServiceImpl
420 483 int layoutY = 170;
421 484 int finalScriptIndex = scriptIndex;
422 485 nodes.forEach(
423   - ruleNode -> {
424   - NodeConnectionInfo nodeConnectionInfo = new NodeConnectionInfo();
425   - nodeConnectionInfo.setFromIndex(finalScriptIndex);
426   - nodeConnectionInfo.setType(connectionType);
427   - nodeConnectionInfo.setToIndex(ruleChainMetaData.getNodes().size());
428   - ObjectNode objectNode = setAdditionalInfo(layoutX, layoutY, ruleNode);
429   - ruleNode.setAdditionalInfo(objectNode);
430   - ruleChainMetaData.getConnections().add(nodeConnectionInfo);
431   - ruleChainMetaData.getNodes().add(ruleNode);
432   - });
  486 + ruleNode ->
  487 + estimateDatasourceGenerateNode(
  488 + tenantId, layoutX, layoutY, finalScriptIndex, ruleNode, ruleChainMetaData));
  489 + }
  490 +
  491 + private void estimateDatasourceGenerateNode(
  492 + String tenantId,
  493 + int layoutX,
  494 + int layoutY,
  495 + int finalScriptIndex,
  496 + RuleNode ruleNode,
  497 + RuleChainMetaData ruleChainMetaData) {
  498 +
  499 + // estimate datasource type
  500 + ConvertConfigDTO convertConfigDTO =
  501 + findConvertConfigDTOByName(
  502 + tenantId, ruleNode.getName(), FastIotConstants.CONVERT_DATA.intValue());
  503 + if (null != convertConfigDTO
  504 + && null != convertConfigDTO.getDatasourceType()
  505 + && !Objects.equals(convertConfigDTO.getDatasourceType(), DatasourceTypeEnum.ALL)) {
  506 + int nodeSize = ruleChainMetaData.getNodes().size();
  507 + NodeConnectionInfo filterNodeConnectionInfo = new NodeConnectionInfo();
  508 + filterNodeConnectionInfo.setFromIndex(finalScriptIndex);
  509 + filterNodeConnectionInfo.setType(connectionType);
  510 + filterNodeConnectionInfo.setToIndex(nodeSize);
  511 +
  512 + RuleNode filterRuleNode = new RuleNode();
  513 + filterRuleNode.setType(filterScriptType);
  514 + filterRuleNode.setName(nodeSize + "filter");
  515 + JsonNode configuration = convertConfigDTO.getDatasourceContent();
  516 + String productObjectNode;
  517 + List<JsonNode> devices = new ArrayList<>();
  518 + String dataSourceType = null;
  519 + ArrayNode arrayNode = (ArrayNode) configuration.get("convertProducts");
  520 + productObjectNode = null != arrayNode ? arrayNode.toString() : "";
  521 + if (Objects.equals(convertConfigDTO.getDatasourceType(), DatasourceTypeEnum.PRODUCTS)) {
  522 + dataSourceType = DatasourceTypeEnum.PRODUCTS.name();
  523 + } else if (Objects.equals(convertConfigDTO.getDatasourceType(), DatasourceTypeEnum.DEVICES)) {
  524 + ArrayNode deviceObjectNode = (ArrayNode) configuration.get("convertDevices");
  525 + if (null != deviceObjectNode) {
  526 + Map<String, Object> device = new ConcurrentHashMap<>();
  527 + deviceObjectNode.forEach(
  528 + item -> {
  529 + device.put(item.get("product").asText(), item.get("devices"));
  530 + devices.add(JacksonUtil.convertValue(device, JsonNode.class));
  531 + });
  532 + dataSourceType = DatasourceTypeEnum.DEVICES.name();
  533 + }
  534 + }
  535 + Map<String, String> scriptMap = new HashMap<>();
  536 + scriptMap.put(
  537 + "jsScript",
  538 + "var deviceProfileIds = "
  539 + + productObjectNode
  540 + + ";\n"
  541 + + "var deviceIds = "
  542 + + devices
  543 + + ";\n"
  544 + + "var dataSourceType = \""
  545 + + dataSourceType
  546 + + "\";\n"
  547 + + "var result = false;\n"
  548 + + "switch (dataSourceType) {\n"
  549 + + " case 'PRODUCTS':\n"
  550 + + " result = productsFilter();\n"
  551 + + " break;\n"
  552 + + " case 'DEVICES':\n"
  553 + + " result = devicesFilter();\n"
  554 + + " break;\n"
  555 + + " default:\n"
  556 + + " result = true;\n"
  557 + + " break;\n"
  558 + + "}\n"
  559 + + "\n"
  560 + + "function productsFilter() {\n"
  561 + + " var productsResult = false;\n"
  562 + + " if (null != deviceProfileIds && deviceProfileIds.length != 0) {\n"
  563 + + " for (var i = 0; i < deviceProfileIds.length; i++) {\n"
  564 + + " if (deviceProfileIds[i] == metadata.deviceProfileId) {\n"
  565 + + " productsResult = true;\n"
  566 + + " break;\n"
  567 + + " }\n"
  568 + + " }\n"
  569 + + " }\n"
  570 + + " return productsResult;\n"
  571 + + "}\n"
  572 + + "\n"
  573 + + "function devicesFilter() {\n"
  574 + + " var devicesResult = false;\n"
  575 + + " if (null != deviceProfileIds && deviceProfileIds.length != 0) {\n"
  576 + + " for (var i = 0; i < deviceIds.length; i++) {\n"
  577 + + " var obj = deviceIds[i];\n"
  578 + + " var key = Object.keys(obj)[0];\n"
  579 + + " var value = obj[key];\n"
  580 + + " if (key == metadata.deviceProfileId) {\n"
  581 + + " for (var j = 0; j < value.length; j++) {\n"
  582 + + " if (value[j] == metadata\n"
  583 + + " .deviceId) {\n"
  584 + + " devicesResult = true;\n"
  585 + + " break;\n"
  586 + + " }\n"
  587 + + " }\n"
  588 + + " }\n"
  589 + + " if (devicesResult) {\n"
  590 + + " break;\n"
  591 + + " }\n"
  592 + + " }\n"
  593 + + " }\n"
  594 + + " return devicesResult;\n"
  595 + + "}\n"
  596 + + "return result;");
  597 + filterRuleNode.setConfiguration(JacksonUtil.convertValue(scriptMap, JsonNode.class));
  598 +
  599 + ObjectNode objectNode = setAdditionalInfo(layoutX, layoutY, filterRuleNode);
  600 + filterRuleNode.setAdditionalInfo(objectNode);
  601 + ruleChainMetaData.getConnections().add(filterNodeConnectionInfo);
  602 + ruleChainMetaData.getNodes().add(filterRuleNode);
  603 + addConvertEndNode(
  604 + ruleChainMetaData.getNodes().size() - 1,
  605 + ruleChainMetaData,
  606 + layoutX,
  607 + layoutY,
  608 + ruleNode,
  609 + "true");
  610 + } else {
  611 + addConvertEndNode(
  612 + finalScriptIndex, ruleChainMetaData, layoutX, layoutY, ruleNode, connectionType);
  613 + }
  614 + }
  615 +
  616 + private void addConvertEndNode(
  617 + int finalScriptIndex,
  618 + RuleChainMetaData ruleChainMetaData,
  619 + int layoutX,
  620 + int layoutY,
  621 + RuleNode ruleNode,
  622 + String connectionType) {
  623 + NodeConnectionInfo nodeConnectionInfo = new NodeConnectionInfo();
  624 + nodeConnectionInfo.setFromIndex(finalScriptIndex);
  625 + nodeConnectionInfo.setType(connectionType);
  626 + nodeConnectionInfo.setToIndex(ruleChainMetaData.getNodes().size());
  627 + ObjectNode objectNode = setAdditionalInfo(layoutX, layoutY, ruleNode);
  628 + ruleNode.setAdditionalInfo(objectNode);
  629 + ruleChainMetaData.getConnections().add(nodeConnectionInfo);
  630 + ruleChainMetaData.getNodes().add(ruleNode);
433 631 }
434 632
435 633 private void needDeleteOriginatorFieldsAndScript(RuleChainMetaData ruleChainMetaData) {
... ...
... ... @@ -7,17 +7,20 @@ import org.apache.commons.lang3.StringUtils;
7 7 import org.springframework.stereotype.Service;
8 8 import org.springframework.transaction.annotation.Transactional;
9 9 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  10 +import org.thingsboard.server.common.data.yunteng.constant.QueryConstant;
10 11 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
11 12 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
12 13 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
13 14 import org.thingsboard.server.common.data.yunteng.dto.TkDeviceStateLogDTO;
14 15 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
15 16 import org.thingsboard.server.dao.yunteng.entities.TkDeviceStateLogEntity;
  17 +import org.thingsboard.server.dao.yunteng.mapper.DeviceMapper;
16 18 import org.thingsboard.server.dao.yunteng.mapper.TkDeviceStateLogMapper;
17 19 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
18 20 import org.thingsboard.server.dao.yunteng.service.TkDeviceStateLogService;
19 21
20 22 import java.time.LocalDateTime;
  23 +import java.util.List;
21 24 import java.util.Map;
22 25 import java.util.Objects;
23 26 import java.util.Optional;
... ... @@ -27,8 +30,11 @@ import java.util.Optional;
27 30 public class TkDeviceStateLogServiceImpl
28 31 extends AbstractBaseService<TkDeviceStateLogMapper, TkDeviceStateLogEntity>
29 32 implements TkDeviceStateLogService {
  33 + private final DeviceMapper deviceMapper;
  34 +
30 35 @Override
31   - public TkPageData<TkDeviceStateLogDTO> page(String tenantId, Map<String, Object> queryMap) {
  36 + public TkPageData<TkDeviceStateLogDTO> page(
  37 + boolean isCustomer, String tenantId, Map<String, Object> queryMap) {
32 38 String deviceName =
33 39 Optional.ofNullable(queryMap.get("deviceName")).map(Object::toString).orElse(null);
34 40 String organizationName =
... ... @@ -45,10 +51,19 @@ public class TkDeviceStateLogServiceImpl
45 51 (LocalDateTime) Optional.ofNullable(queryMap.get("endTime")).orElse(null);
46 52 IPage<TkDeviceStateLogEntity> currentPage =
47 53 getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false);
  54 + List<String> deviceIds = null;
  55 + if (isCustomer) {
  56 + String customerId =
  57 + null != queryMap.get(QueryConstant.CUSTOMER_ID)
  58 + ? (String) queryMap.get(QueryConstant.CUSTOMER_ID)
  59 + : null;
  60 + deviceIds = deviceMapper.findDeviceIdsByCustomerId(customerId);
  61 + }
48 62 LambdaQueryWrapper<TkDeviceStateLogEntity> queryWrapper =
49 63 new LambdaQueryWrapper<TkDeviceStateLogEntity>()
50 64 .eq(TkDeviceStateLogEntity::getTenantId, tenantId)
51 65 .eq(null != status, TkDeviceStateLogEntity::getStatus, status)
  66 + .in(isCustomer, TkDeviceStateLogEntity::getTbDeviceId, deviceIds)
52 67 .like(
53 68 StringUtils.isNotEmpty(deviceName),
54 69 TkDeviceStateLogEntity::getDeviceName,
... ...
... ... @@ -21,6 +21,7 @@ public interface ConvertConfigService extends BaseService<ConvertConfig> {
21 21
22 22 boolean deleteConvertConfig(DeleteDTO deleteDTO, Integer nodeType);
23 23
  24 + ConvertConfigDTO findConvertConfigDTOByName(String tenantId,String name,Integer nodeType);
24 25 /**
25 26 * 通过数据转换的IDS获取需要组装的节点
26 27 *
... ... @@ -61,7 +62,7 @@ public interface ConvertConfigService extends BaseService<ConvertConfig> {
61 62 boolean checkConvertJSStatusEnable(String tenantId);
62 63
63 64 boolean deleteRuleNode(
64   - List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType);
  65 + List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType,String tenantId);
65 66
66   - void addRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType);
  67 + void addRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData, Integer nodeType,String tenantId);
67 68 }
... ...
... ... @@ -8,7 +8,7 @@ import org.thingsboard.server.dao.yunteng.entities.TkDeviceStateLogEntity;
8 8 import java.util.Map;
9 9
10 10 public interface TkDeviceStateLogService extends BaseService<TkDeviceStateLogEntity> {
11   - TkPageData<TkDeviceStateLogDTO> page(String tenantId,Map<String, Object> queryMap);
  11 + TkPageData<TkDeviceStateLogDTO> page(boolean isCustomer,String tenantId,Map<String, Object> queryMap);
12 12
13 13 boolean deleteTkDeviceStateLog(DeleteDTO deleteDTO);
14 14
... ...