Commit 122a546d71243608577ec13398cf572ecbf9087c

Authored by 黄 x
1 parent d401024d

fix: tk_device add column device_profile_id tk_do_action add column call_type\co…

…mmand_type\things_model_id\device_profile_id
... ... @@ -206,7 +206,7 @@ public class YtDeviceController extends BaseController {
206 206 @RequestParam(value = "deviceType", required = false) DeviceTypeEnum deviceType,
207 207 @RequestParam(value = "organizationId", required = false) String organizationId,
208 208 @RequestParam(value = "alarmStatus", required = false) Integer alarmStatus,
209   - @RequestParam(value = "profileId", required = false) String profileId,
  209 + @RequestParam(value = "deviceProfileId", required = false) String deviceProfileId,
210 210 @RequestParam(value = ORDER_FILED, required = false) String orderBy,
211 211 @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
212 212 throws ThingsboardException {
... ... @@ -216,7 +216,7 @@ public class YtDeviceController extends BaseController {
216 216 queryMap.put(ORDER_FILED, orderBy);
217 217 queryMap.put("name", name);
218 218 queryMap.put("alarmStatus", alarmStatus);
219   - queryMap.put("profileId", profileId);
  219 + queryMap.put("deviceProfileId", deviceProfileId);
220 220 if (deviceState != null) {
221 221 if (deviceState != DeviceState.INACTIVE) {
222 222 queryMap.put("deviceState", deviceState == DeviceState.ONLINE);
... ... @@ -355,12 +355,14 @@ public class YtDeviceController extends BaseController {
355 355 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{})")
356 356 @ApiOperation("主设备列表")
357 357 public List<SelectItemDTO> getMasterDevices(
358   - @ApiParam(value = "组织ID") @PathVariable("organizationId") String organizationId)
  358 + @ApiParam(value = "组织ID") @PathVariable("organizationId") String organizationId,
  359 + @ApiParam(value = "设备配置ID") @RequestParam(value = "deviceProfileId", required = false)
  360 + String deviceProfileId)
359 361 throws ThingsboardException {
360 362 return deviceService.findMasterDevices(
361 363 getCurrentUser().getCurrentTenantId(),
362 364 getCurrentUser().isCustomerUser() ? getCurrentUser().getCustomerId().toString() : null,
363   - organizationId);
  365 + organizationId,deviceProfileId);
364 366 }
365 367
366 368 @GetMapping("/list/slave/{organizationId}")
... ... @@ -484,16 +486,16 @@ public class YtDeviceController extends BaseController {
484 486 return result;
485 487 }
486 488
487   - @GetMapping({"/attributes/{profileId}/{id}"})
  489 + @GetMapping({"/attributes/{deviceProfileId}/{id}"})
488 490 @ApiOperation("获取设备的属性")
489 491 public ResponseEntity<JsonNode> getDeviceAttributes(
490   - @PathVariable("profileId") String profileId, @PathVariable("id") String id)
  492 + @PathVariable("deviceProfileId") String deviceProfileId, @PathVariable("id") String id)
491 493 throws ThingsboardException {
492 494 String tenantId = getCurrentUser().getCurrentTenantId();
493   - DeviceProfileDTO dto = ytDeviceProfileService.findByTbDeviceProfileId(tenantId, profileId);
  495 + DeviceProfileDTO dto = ytDeviceProfileService.findDeviceProfileById(tenantId, deviceProfileId);
494 496 if (null == dto) {
495 497 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
496 498 }
497   - return ResponseEntity.ok(deviceService.getDeviceAttributes(profileId,dto.getId(), id, tenantId));
  499 + return ResponseEntity.ok(deviceService.getDeviceAttributes(deviceProfileId, id, tenantId));
498 500 }
499 501 }
... ...
... ... @@ -36,9 +36,10 @@ public class DeviceDTO extends TenantDTO {
36 36 @NotEmpty(
37 37 message = "设备配置ID不能为空或者空字符串",
38 38 groups = {AddGroup.class})
39   - @ApiModelProperty(value = "设备配置", required = true)
  39 + @ApiModelProperty(value = "TB设备配置ID", required = true)
40 40 private String profileId;
41   -
  41 + @ApiModelProperty(value = "平台设备配置ID", required = true)
  42 + private String deviceProfileId;
42 43 @ApiModelProperty(value = "关联网关设备")
43 44 private String gatewayId;
44 45 private String gatewayName;
... ...
... ... @@ -5,32 +5,43 @@ import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import lombok.EqualsAndHashCode;
7 7 import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
  8 +import org.thingsboard.server.common.data.yunteng.enums.CallTypeEnum;
8 9 import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum;
9 10
10 11 import java.util.List;
11 12
12 13 /**
13   - * @Description 场景联动执行动作数据传输表
14   - * @Author cxy
15   - * @Date 2021/11/24 17:32
  14 + * @Description 场景联动执行动作数据传输表 @Author cxy @Date 2021/11/24 17:32
16 15 */
17 16 @Data
18 17 @EqualsAndHashCode(callSuper = true)
19   -public class DoActionDTO extends TenantDTO{
  18 +public class DoActionDTO extends TenantDTO {
20 19
21   - @ApiModelProperty(value = "所属设备id")
22   - private List<String> deviceId;
23   - private ScopeEnum entityType;
  20 + @ApiModelProperty(value = "所属设备id")
  21 + private List<String> deviceId;
24 22
  23 + private ScopeEnum entityType;
25 24
26   - @ApiModelProperty(value = "场景联动内容")
27   - private JsonNode doContext;
  25 + @ApiModelProperty(value = "场景联动内容")
  26 + private JsonNode doContext;
  27 +
  28 + @ApiModelProperty(value = "设备配置ID")
  29 + private String deviceProfileId;
  30 +
  31 + @ApiModelProperty(value = "调用类型:sync同步/async异步")
  32 + private CallTypeEnum callType;
  33 +
  34 + @ApiModelProperty(value = "命令类型:0自定义 1服务")
  35 + private Integer commandType;
  36 +
  37 + @ApiModelProperty(value = "服务模型ID")
  38 + private String thingsModelId;
28 39
29 40 @ApiModelProperty(value = "输出目标:设备,告警,其他")
30 41 private ActionTypeEnum outTarget;
31 42
32   - @ApiModelProperty(value = "场景联动id")
33   - private String sceneLinkageId;
  43 + @ApiModelProperty(value = "场景联动id")
  44 + private String sceneLinkageId;
34 45
35 46 @ApiModelProperty(value = "输出目标为告警才进行配置")
36 47 private String alarmProfileId;
... ...
dao/src/main/java/org/thingsboard/server/dao/yunteng/entities/TkDeviceEntity.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/entities/TkDevice.java
... ... @@ -13,12 +13,13 @@ import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum;
13 13 @Data
14 14 @EqualsAndHashCode(callSuper = true)
15 15 @TableName(value = ModelConstants.Table.TK_DEVICE_TABLE_NAME, autoResultMap = true)
16   -public class TkDevice extends TenantBaseEntity {
  16 +public class TkDeviceEntity extends TenantBaseEntity {
17 17 private String name;
18 18 private String alias;
19 19 @TableField(typeHandler = JacksonTypeHandler.class)
20 20 private JsonNode deviceInfo;
21 21 private String profileId;
  22 + private String deviceProfileId;
22 23 private String tbDeviceId;
23 24 private String gatewayId;
24 25 private String brand;
... ...
... ... @@ -9,9 +9,9 @@ import lombok.EqualsAndHashCode;
9 9 import org.apache.ibatis.type.EnumTypeHandler;
10 10 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
11 11 import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
  12 +import org.thingsboard.server.common.data.yunteng.enums.CallTypeEnum;
12 13 import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum;
13 14 import org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler;
14   -
15 15 import java.util.List;
16 16
17 17 /**
... ... @@ -22,26 +22,26 @@ import java.util.List;
22 22 @EqualsAndHashCode(callSuper = true)
23 23 public class TkDoActionEntity extends TenantBaseEntity {
24 24
25   - private static final long serialVersionUID = -5459834451418047957L;
26   -
  25 + private static final long serialVersionUID = -5459834451418047957L;
27 26
28   - @TableField(typeHandler = ListStringTypeHandler.class)
29   - private List<String> deviceId;
  27 + @TableField(typeHandler = ListStringTypeHandler.class)
  28 + private List<String> deviceId;
30 29
31   - @TableField(typeHandler = EnumTypeHandler.class)
32   - private ScopeEnum entityType;
33   - @TableField(typeHandler = EnumTypeHandler.class)
34   - private ActionTypeEnum outTarget;
35   - /**
36   - * 场景联动内容
37   - */
38   - @TableField(typeHandler = JacksonTypeHandler.class)
39   - private JsonNode doContext;
  30 + @TableField(typeHandler = EnumTypeHandler.class)
  31 + private ScopeEnum entityType;
40 32
41   - /**
42   - * 场景联动id
43   - */
44   - private String sceneLinkageId;
  33 + @TableField(typeHandler = EnumTypeHandler.class)
  34 + private ActionTypeEnum outTarget;
45 35
46   - private String alarmProfileId;
  36 + @TableField(typeHandler = EnumTypeHandler.class)
  37 + private CallTypeEnum callType;
  38 + private String deviceProfileId;
  39 + private Integer commandType;
  40 + private String thingsModelId;
  41 + /** 场景联动内容 */
  42 + @TableField(typeHandler = JacksonTypeHandler.class)
  43 + private JsonNode doContext;
  44 + /** 场景联动id */
  45 + private String sceneLinkageId;
  46 + private String alarmProfileId;
47 47 }
... ...
... ... @@ -166,25 +166,29 @@ public class ThingsModelServiceImpl
166 166 } else {
167 167 if (typeEnum.equals(FunctionTypeEnum.services)) {
168 168 List<ServiceModelDTO> serviceList = new ArrayList<>();
169   - for (ThingsModelDTO thingsModelDTO : thingsModelDTOS) {
170   - ServiceModelDTO serviceDTO = new ServiceModelDTO();
171   - BeanUtils.copyProperties(thingsModelDTO, serviceDTO);
172   - JsonNode functionJson = thingsModelDTO.getFunctionJson();
173   - if (null != functionJson) {
174   - serviceDTO.setInputData(functionJson.get("inputData"));
175   - serviceDTO.setOutputData(functionJson.get("outputData"));
  169 + if (!thingsModelDTOS.isEmpty()) {
  170 + for (ThingsModelDTO thingsModelDTO : thingsModelDTOS) {
  171 + ServiceModelDTO serviceDTO = new ServiceModelDTO();
  172 + BeanUtils.copyProperties(thingsModelDTO, serviceDTO);
  173 + JsonNode functionJson = thingsModelDTO.getFunctionJson();
  174 + if (null != functionJson) {
  175 + serviceDTO.setInputData(functionJson.get("inputData"));
  176 + serviceDTO.setOutputData(functionJson.get("outputData"));
  177 + }
  178 + serviceList.add(serviceDTO);
176 179 }
177   - serviceList.add(serviceDTO);
178 180 }
179 181 jsonNode = JacksonUtil.convertValue(serviceList, JsonNode.class);
180 182 } else {
181 183 List<EventModelDTO> eventList = new ArrayList<>();
182   - for (ThingsModelDTO thingsModelDTO : thingsModelDTOS) {
183   - EventModelDTO eventDTO = new EventModelDTO();
184   - BeanUtils.copyProperties(thingsModelDTO, eventDTO);
185   - JsonNode functionJson = thingsModelDTO.getFunctionJson();
186   - if (null != functionJson) {
187   - eventDTO.setOutputData(functionJson.get("outputData"));
  184 + if (!thingsModelDTOS.isEmpty()) {
  185 + for (ThingsModelDTO thingsModelDTO : thingsModelDTOS) {
  186 + EventModelDTO eventDTO = new EventModelDTO();
  187 + BeanUtils.copyProperties(thingsModelDTO, eventDTO);
  188 + JsonNode functionJson = thingsModelDTO.getFunctionJson();
  189 + if (null != functionJson) {
  190 + eventDTO.setOutputData(functionJson.get("outputData"));
  191 + }
188 192 }
189 193 }
190 194 jsonNode = JacksonUtil.convertValue(eventList, JsonNode.class);
... ...
... ... @@ -140,7 +140,7 @@ public class TkDeviceProfileServiceImpl
140 140 // check if ids bind to device
141 141 int count =
142 142 deviceMapper.selectCount(
143   - new QueryWrapper<TkDevice>().lambda().in(TkDevice::getProfileId, ids));
  143 + new QueryWrapper<TkDeviceEntity>().lambda().in(TkDeviceEntity::getProfileId, ids));
144 144 if (count > 0) {
145 145 throw new YtDataValidationException("有设备使用待删除配置,请先删除设备或者修改设备配置");
146 146 }
... ...
... ... @@ -39,7 +39,7 @@ import java.util.stream.Collectors;
39 39 @Service
40 40 @RequiredArgsConstructor
41 41 @Slf4j
42   -public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDevice>
  42 +public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDeviceEntity>
43 43 implements TkDeviceService {
44 44
45 45 private final DeviceProfileDao deviceProfileDao;
... ... @@ -66,7 +66,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
66 66
67 67 validateUpdate(deviceDTO);
68 68
69   - TkDevice device = new TkDevice();
  69 + TkDeviceEntity device = new TkDeviceEntity();
70 70 deviceDTO.copyToEntity(
71 71 device,
72 72 ModelConstants.TablePropertyMapping.ACTIVE_TIME,
... ... @@ -109,7 +109,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
109 109 deviceDTO.setTenantId(currentTenantId);
110 110 } else {
111 111 deviceTenantId = deviceDTO.getTenantId();
112   - TkDevice device = baseMapper.selectById(deviceDTO.getId());
  112 + TkDeviceEntity device = baseMapper.selectById(deviceDTO.getId());
113 113 if (device == null) {
114 114 throw new YtDataValidationException("设备不存在!");
115 115 }
... ... @@ -126,7 +126,8 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
126 126 TenantId id = TenantId.fromUUID(UUID.fromString(deviceTenantId));
127 127 DeviceProfile deviceProfile =
128 128 deviceProfileDao.findById(id, UUID.fromString(deviceDTO.getProfileId()));
129   - TkOrganizationEntity organization = ytOrganizationMapper.selectById(deviceDTO.getOrganizationId());
  129 + TkOrganizationEntity organization =
  130 + ytOrganizationMapper.selectById(deviceDTO.getOrganizationId());
130 131 if (null == deviceProfile || null == organization) {
131 132 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
132 133 } else if (!organization.getTenantId().equals(deviceTenantId)) {
... ... @@ -209,7 +210,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
209 210
210 211 private DeviceDTO insert(DeviceDTO deviceDTO) {
211 212
212   - TkDevice device = new TkDevice();
  213 + TkDeviceEntity device = new TkDeviceEntity();
213 214 deviceDTO.copyToEntity(
214 215 device,
215 216 ModelConstants.TablePropertyMapping.ACTIVE_TIME,
... ... @@ -227,15 +228,15 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
227 228
228 229 @Override
229 230 public List<String> findTbDeviceId(String tenantId, Set<String> ids) {
230   - LambdaQueryWrapper<TkDevice> queryWrapper =
231   - new QueryWrapper<TkDevice>()
  231 + LambdaQueryWrapper<TkDeviceEntity> queryWrapper =
  232 + new QueryWrapper<TkDeviceEntity>()
232 233 .lambda()
233   - .eq(TkDevice::getTenantId, tenantId)
234   - .in(TkDevice::getId, ids);
  234 + .eq(TkDeviceEntity::getTenantId, tenantId)
  235 + .in(TkDeviceEntity::getId, ids);
235 236
236 237 List<String> tbDeviceIds =
237 238 baseMapper.selectList(queryWrapper).stream()
238   - .map(TkDevice::getTbDeviceId)
  239 + .map(TkDeviceEntity::getTbDeviceId)
239 240 .collect(Collectors.toList());
240 241 for (String tbDeviceId : tbDeviceIds) {
241 242 sceneNotUsed(tenantId, tbDeviceId, null);
... ... @@ -252,10 +253,10 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
252 253 }
253 254 return ReflectUtils.sourceToTarget(
254 255 baseMapper.selectList(
255   - new LambdaQueryWrapper<TkDevice>()
256   - .eq(deviceType != null, TkDevice::getDeviceType, deviceType)
257   - .eq(deviceLabel != null, TkDevice::getLabel, deviceLabel)
258   - .in(TkDevice::getOrganizationId, orgIds)),
  256 + new LambdaQueryWrapper<TkDeviceEntity>()
  257 + .eq(deviceType != null, TkDeviceEntity::getDeviceType, deviceType)
  258 + .eq(deviceLabel != null, TkDeviceEntity::getLabel, deviceLabel)
  259 + .in(TkDeviceEntity::getOrganizationId, orgIds)),
259 260 DeviceDTO.class);
260 261 }
261 262
... ... @@ -279,12 +280,12 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
279 280 if (StringUtils.isEmpty(deviceId) || StringUtils.isEmpty(tenantId)) {
280 281 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
281 282 }
282   - TkDevice device =
  283 + TkDeviceEntity device =
283 284 baseMapper.selectOne(
284   - new LambdaQueryWrapper<TkDevice>()
285   - .eq(TkDevice::getTenantId, tenantId)
286   - .eq(isTbDeviceId, TkDevice::getTbDeviceId, deviceId)
287   - .eq(!isTbDeviceId, TkDevice::getId, deviceId));
  285 + new LambdaQueryWrapper<TkDeviceEntity>()
  286 + .eq(TkDeviceEntity::getTenantId, tenantId)
  287 + .eq(isTbDeviceId, TkDeviceEntity::getTbDeviceId, deviceId)
  288 + .eq(!isTbDeviceId, TkDeviceEntity::getId, deviceId));
288 289 DeviceDTO deviceDTO = null != device ? device.getDTO(DeviceDTO.class) : null;
289 290 if (null == deviceDTO) {
290 291 throw new YtDataValidationException(ErrorMessage.DEVICE_NOT_EXISTENCE_IN_TENANT.getMessage());
... ... @@ -295,11 +296,11 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
295 296 @Override
296 297 @Transactional
297 298 public void deleteDevices(String tenantId, Set<String> ids) {
298   - LambdaQueryWrapper<TkDevice> queryWrapper =
299   - new QueryWrapper<TkDevice>()
  299 + LambdaQueryWrapper<TkDeviceEntity> queryWrapper =
  300 + new QueryWrapper<TkDeviceEntity>()
300 301 .lambda()
301   - .eq(TkDevice::getTenantId, tenantId)
302   - .in(TkDevice::getId, ids);
  302 + .eq(TkDeviceEntity::getTenantId, tenantId)
  303 + .in(TkDeviceEntity::getId, ids);
303 304
304 305 baseMapper.delete(queryWrapper);
305 306 }
... ... @@ -317,7 +318,8 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
317 318 List<String> queryOrganizationIds = organizationAllIds(tenantId, organizationId);
318 319 queryMap.put("organizationIds", queryOrganizationIds);
319 320 }
320   - IPage<TkDevice> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false);
  321 + IPage<TkDeviceEntity> page =
  322 + getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false);
321 323 IPage<DeviceDTO> deviceIPage = baseMapper.getDevicePage(page, queryMap);
322 324 List<DeviceDTO> records = deviceIPage.getRecords();
323 325 records.forEach(
... ... @@ -352,7 +354,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
352 354
353 355 @Override
354 356 public YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap) {
355   - IPage<TkDevice> page = getPage(queryMap, "last_online_time", false);
  357 + IPage<TkDeviceEntity> page = getPage(queryMap, "last_online_time", false);
356 358 IPage<RelationDeviceDTO> deviceIPage = baseMapper.getRelationDevicePage(page, queryMap);
357 359 List<RelationDeviceDTO> records = deviceIPage.getRecords();
358 360 return new YtPageData<>(records, deviceIPage.getTotal());
... ... @@ -360,13 +362,13 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
360 362
361 363 @Override
362 364 public boolean deviceNameUsed(String tenantId, String deviceName, String deviceId) {
363   - List<TkDevice> deviceList =
  365 + List<TkDeviceEntity> deviceList =
364 366 baseMapper.selectList(
365   - new QueryWrapper<TkDevice>()
  367 + new QueryWrapper<TkDeviceEntity>()
366 368 .lambda()
367   - .eq(true, TkDevice::getTenantId, tenantId)
368   - .eq(TkDevice::getName, deviceName));
369   - for (TkDevice dev : deviceList) {
  369 + .eq(true, TkDeviceEntity::getTenantId, tenantId)
  370 + .eq(TkDeviceEntity::getName, deviceName));
  371 + for (TkDeviceEntity dev : deviceList) {
370 372 if (deviceName.equals(dev.getName())
371 373 && (StringUtils.isEmpty(deviceId) || !deviceId.equals(dev.getId()))) {
372 374 return true;
... ... @@ -399,7 +401,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
399 401
400 402 @Override
401 403 public String otherUsing(String deviceId, String tenantId) {
402   - TkDevice device = baseMapper.selectById(deviceId);
  404 + TkDeviceEntity device = baseMapper.selectById(deviceId);
403 405 if (device == null) {
404 406 throw new YtDataValidationException(ErrorMessage.DEVICE_NOT_EXTIED.getMessage());
405 407 }
... ... @@ -411,7 +413,9 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
411 413 @Nullable
412 414 private String usedBySceneLinkage(String tenantId, String tbDeviceId) {
413 415 LambdaQueryWrapper<TkSceneLinkageEntity> sceneFilter =
414   - new QueryWrapper<TkSceneLinkageEntity>().lambda().eq(TkSceneLinkageEntity::getTenantId, tenantId)
  416 + new QueryWrapper<TkSceneLinkageEntity>()
  417 + .lambda()
  418 + .eq(TkSceneLinkageEntity::getTenantId, tenantId)
415 419 // .eq(SceneLinkage::getStatus, 1)
416 420 ;
417 421 Optional<List<TkSceneLinkageEntity>> scenes =
... ... @@ -460,9 +464,9 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
460 464
461 465 @Override
462 466 public List<SelectItemDTO> findMasterDevices(
463   - String tenantId, String customerId, String organizationId) {
  467 + String tenantId, String customerId, String organizationId, String deviceProfileId) {
464 468 List<String> orgIds = organizationAllIds(tenantId, organizationId);
465   - return baseMapper.masterDevices(customerId, tenantId, orgIds);
  469 + return baseMapper.masterDevices(customerId, tenantId, orgIds, deviceProfileId);
466 470 }
467 471
468 472 @Override
... ... @@ -487,10 +491,10 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
487 491 @Override
488 492 public boolean saveSlaveDevice(
489 493 String slaveId, String slaveName, String gatewayId, Long createTime) {
490   - LambdaQueryWrapper<TkDevice> deviceFilter =
491   - new QueryWrapper<TkDevice>().lambda().eq(TkDevice::getTbDeviceId, gatewayId);
492   - TkDevice gateway = baseMapper.selectOne(deviceFilter);
493   - TkDevice slaveDevice = new TkDevice();
  494 + LambdaQueryWrapper<TkDeviceEntity> deviceFilter =
  495 + new QueryWrapper<TkDeviceEntity>().lambda().eq(TkDeviceEntity::getTbDeviceId, gatewayId);
  496 + TkDeviceEntity gateway = baseMapper.selectOne(deviceFilter);
  497 + TkDeviceEntity slaveDevice = new TkDeviceEntity();
494 498 slaveDevice.setName(slaveName);
495 499 slaveDevice.setTbDeviceId(slaveId);
496 500 slaveDevice.setSn(generateSn());
... ... @@ -517,11 +521,11 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
517 521
518 522 @Override
519 523 public DeviceDTO getSubsetDeviceByTbDeviceId(String tenantId, String tbDeviceId) {
520   - TkDevice device =
  524 + TkDeviceEntity device =
521 525 baseMapper.selectOne(
522   - new LambdaQueryWrapper<TkDevice>()
523   - .eq(TkDevice::getTbDeviceId, tbDeviceId)
524   - .eq(TkDevice::getTenantId, tenantId));
  526 + new LambdaQueryWrapper<TkDeviceEntity>()
  527 + .eq(TkDeviceEntity::getTbDeviceId, tbDeviceId)
  528 + .eq(TkDeviceEntity::getTenantId, tenantId));
525 529 return Optional.ofNullable(device)
526 530 .map(obj -> obj.getDTO(DeviceDTO.class))
527 531 .orElseThrow(
... ... @@ -531,30 +535,26 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
531 535 }
532 536
533 537 @Override
534   - public JsonNode getDeviceAttributes(String tbProfileId,String profileId, String id, String tenantId) {
  538 + public JsonNode getDeviceAttributes(String deviceProfileId, String id, String tenantId) {
535 539 return getDevice(tenantId, id)
536 540 .map(
537 541 obj -> {
538   - if (obj.getProfileId().equals(tbProfileId)) {
539   - JsonNode jsonNode = JacksonUtil.newObjectNode();
540   - List<ThingsModelDTO> thingsModel =
541   - thingsModelService.selectByDeviceProfileId(
542   - FunctionTypeEnum.properties, tenantId, profileId);
543   - if (null !=thingsModel && !thingsModel.isEmpty()) {
544   - List<Map<String, Object>> attributes = new ArrayList<>();
545   - for (ThingsModelDTO dto : thingsModel) {
546   - Map<String, Object> attribute = new HashMap<>();
547   - attribute.put("name", dto.getFunctionName());
548   - attribute.put("identifier", dto.getIdentifier());
549   - attribute.put("detail", dto.getFunctionJson());
550   - attributes.add(attribute);
551   - }
552   - jsonNode = JacksonUtil.convertValue(attributes, JsonNode.class);
  542 + JsonNode jsonNode = JacksonUtil.newObjectNode();
  543 + List<ThingsModelDTO> thingsModel =
  544 + thingsModelService.selectByDeviceProfileId(
  545 + FunctionTypeEnum.properties, tenantId, deviceProfileId);
  546 + if (null != thingsModel && !thingsModel.isEmpty()) {
  547 + List<Map<String, Object>> attributes = new ArrayList<>();
  548 + for (ThingsModelDTO dto : thingsModel) {
  549 + Map<String, Object> attribute = new HashMap<>();
  550 + attribute.put("name", dto.getFunctionName());
  551 + attribute.put("identifier", dto.getIdentifier());
  552 + attribute.put("detail", dto.getFunctionJson());
  553 + attributes.add(attribute);
553 554 }
554   - return jsonNode;
555   - } else {
556   - throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  555 + jsonNode = JacksonUtil.convertValue(attributes, JsonNode.class);
557 556 }
  557 + return jsonNode;
558 558 })
559 559 .orElseThrow(
560 560 () -> {
... ...
... ... @@ -48,10 +48,10 @@ public class TkNoticeServiceImpl implements TkNoticeService {
48 48 * 2、查找告警配置 ,与设备配置一一对应。
49 49 * 3、查找告警通知联系人
50 50 */
51   - QueryWrapper<TkDevice> queryWrapper = new QueryWrapper<TkDevice>();
  51 + QueryWrapper<TkDeviceEntity> queryWrapper = new QueryWrapper<TkDeviceEntity>();
52 52 queryWrapper.lambda()
53   - .eq(TkDevice::getTbDeviceId, alarmInfo.getDeviceId());
54   - TkDevice device = deviceMapper.selectOne(queryWrapper);
  53 + .eq(TkDeviceEntity::getTbDeviceId, alarmInfo.getDeviceId());
  54 + TkDeviceEntity device = deviceMapper.selectOne(queryWrapper);
55 55
56 56
57 57 if (device == null) {
... ...
... ... @@ -128,12 +128,12 @@ public class TkOrganizationServiceImpl extends AbstractBaseService<OrganizationM
128 128
129 129 // 查询是否有设备使用该组织
130 130 for (String id : ids) {
131   - List<TkDevice> deviceList =
  131 + List<TkDeviceEntity> deviceList =
132 132 deviceMapper.selectList(
133   - new QueryWrapper<TkDevice>()
  133 + new QueryWrapper<TkDeviceEntity>()
134 134 .lambda()
135   - .eq(TkDevice::getTenantId, tenantId)
136   - .eq(TkDevice::getOrganizationId, id));
  135 + .eq(TkDeviceEntity::getTenantId, tenantId)
  136 + .eq(TkDeviceEntity::getOrganizationId, id));
137 137 if (!deviceList.isEmpty()) {
138 138 throw new YtDataValidationException("待删除数据存在关联设备,不能删除!");
139 139 }
... ...
... ... @@ -403,9 +403,9 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM
403 403 }
404 404 }
405 405
406   - List<TkDevice> orgDevices =
  406 + List<TkDeviceEntity> orgDevices =
407 407 deviceMapper.selectList(
408   - new QueryWrapper<TkDevice>().lambda().in(TkDevice::getOrganizationId, orgIds));
  408 + new QueryWrapper<TkDeviceEntity>().lambda().in(TkDeviceEntity::getOrganizationId, orgIds));
409 409 List<DeviceDTO> result =
410 410 orgDevices.stream()
411 411 .filter(t -> typeFilter.isEmpty() || typeFilter.contains(t.getDeviceType()))
... ...
... ... @@ -8,124 +8,135 @@ import org.thingsboard.server.common.data.yunteng.dto.BaseHomePageTop;
8 8 import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
9 9 import org.thingsboard.server.common.data.yunteng.dto.RelationDeviceDTO;
10 10 import org.thingsboard.server.common.data.yunteng.dto.SelectItemDTO;
11   -import org.thingsboard.server.dao.yunteng.entities.TkDevice;
  11 +import org.thingsboard.server.dao.yunteng.entities.TkDeviceEntity;
12 12
13 13 import java.util.List;
14 14 import java.util.Map;
15 15
16 16 @Mapper
17   -public interface DeviceMapper extends BaseMapper<TkDevice> {
18   -
19   - IPage<DeviceDTO> getDevicePage(IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
20   -
21   - DeviceDTO selectDetail(@Param("tenantId") String tenantId, @Param("id") String id);
22   -
23   - /**
24   - * 通过网关子设备的TB设备ID查询网关设备信息
25   - *
26   - * @param tbDeviceId 网关子设备的TB设备ID
27   - * @return 网关设备信息
28   - */
29   - List<DeviceDTO> findGateWayDeviceByTbDeviceId(@Param("tbDeviceId") String tbDeviceId);
30   -
31   - /**
32   - * 更新设备告警状态
33   - *
34   - * @param tbDeviceId TB设备主键
35   - * @param created 告警状态:0正常,1告警
36   - * @return true or false
37   - */
38   - boolean freshAlarmStatus(
39   - @Param("tbDeviceId") String tbDeviceId, @Param("created") Integer created);
40   -
41   - /**
42   - * 用于统计设备相关信息
43   - *
44   - * @param queryMap 查询条件
45   - * @return 查询的设备信息
46   - */
47   - List<DeviceDTO> findDevices(@Param("queryMap") Map<String, Object> queryMap);
48   -
49   - /**
50   - * 获取关联设备的子设备分页列表
51   - *
52   - * @param page 分页
53   - * @param queryMap 查询条件
54   - * @return 分页数据
55   - */
56   - IPage<RelationDeviceDTO> getRelationDevicePage(
57   - IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
58   -
59   - /**
60   - * 通过用户ID查询分配的所有设备ID
61   - *
62   - * @param customerId 用户ID
63   - * @return 所有的设备ids
64   - */
65   - List<String> findDeviceIdsByCustomerId(@Param("customerId") String customerId);
66   -
67   - List<BaseHomePageTop> findDeviceMessageInfo(
68   - @Param("todayTime") Long todayTime, @Param("customerId") String customerId);
69   -
70   - List<BaseHomePageTop> findDeviceAlarmInfoByCustomer(
71   - @Param("todayTime") Long todayTime, @Param("customerId") String customerId);
72   -
73   - Integer findDeviceMessageInfoByTs(
74   - @Param("customerId") String customerId,
75   - @Param("startTime") Long startTime,
76   - @Param("endTime") Long endTime);
77   -
78   - Integer findDeviceAlarmInfoByCreatedTime(
79   - @Param("customerId") String customerId,
80   - @Param("startTime") Long startTime,
81   - @Param("endTime") Long endTime);
82   -
83   -
84   - Integer countMsgs(@Param("queryMap") Map<String, Object> queryMap);
85   -
86   - Integer countDataPoints(@Param("queryMap") Map<String, Object> queryMap);
87   -
88   - /**
89   - * 主设备列表
90   - *
91   - * @param customerId 客户ID
92   - * @param tenantId 租户ID
93   - * @param organizationIds 组织ID
94   - * @return
95   - */
96   - List<SelectItemDTO> masterDevices(@Param("customerId") String customerId, @Param("tenantId") String tenantId, @Param("organizationIds") List<String> organizationIds);
97   -
98   - /**
99   - * 从设备列表
100   - *
101   - * @param customerId 客户ID
102   - * @param tenantId 租户ID
103   - * @param organizationIds 组织ID
104   - * @param masterId 主设备ID
105   - * @return
106   - */
107   - List<SelectItemDTO> slaveDevices(@Param("customerId") String customerId, @Param("tenantId") String tenantId
108   - , @Param("organizationIds") List<String> organizationIds, @Param("masterId") String masterId);
109   -
110   - /**
111   - * TCP协议传输时,获取网关设备的从设备
112   - * @param tenantId 租户ID
113   - * @param masterId 网关设备的TB_ID
114   - * @param code 网关子设备的标识符,例如:485协议的从设备地址码
115   - * @return
116   - */
117   - DeviceDTO slaveDevice(@Param("tenantId") String tenantId, @Param("masterId") String masterId, @Param("code") String code);
118   - /**
119   - * 设备遥测数据指标名称
120   - *
121   - * @param tenantId 租户ID
122   - * @param customerId 客户ID
123   - * @param organizationIds 组织ID
124   - * @param deviceIds 设备ID
125   - * @return
126   - */
127   - List<String> findDeviceKeys(@Param("tenantId") String tenantId
128   - , @Param("customerId") String customerId
129   - , @Param("organizationIds") List<String> organizationIds
130   - , @Param("deviceIds") List<String> deviceIds);
  17 +public interface DeviceMapper extends BaseMapper<TkDeviceEntity> {
  18 +
  19 + IPage<DeviceDTO> getDevicePage(IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
  20 +
  21 + DeviceDTO selectDetail(@Param("tenantId") String tenantId, @Param("id") String id);
  22 +
  23 + /**
  24 + * 通过网关子设备的TB设备ID查询网关设备信息
  25 + *
  26 + * @param tbDeviceId 网关子设备的TB设备ID
  27 + * @return 网关设备信息
  28 + */
  29 + List<DeviceDTO> findGateWayDeviceByTbDeviceId(@Param("tbDeviceId") String tbDeviceId);
  30 +
  31 + /**
  32 + * 更新设备告警状态
  33 + *
  34 + * @param tbDeviceId TB设备主键
  35 + * @param created 告警状态:0正常,1告警
  36 + * @return true or false
  37 + */
  38 + boolean freshAlarmStatus(
  39 + @Param("tbDeviceId") String tbDeviceId, @Param("created") Integer created);
  40 +
  41 + /**
  42 + * 用于统计设备相关信息
  43 + *
  44 + * @param queryMap 查询条件
  45 + * @return 查询的设备信息
  46 + */
  47 + List<DeviceDTO> findDevices(@Param("queryMap") Map<String, Object> queryMap);
  48 +
  49 + /**
  50 + * 获取关联设备的子设备分页列表
  51 + *
  52 + * @param page 分页
  53 + * @param queryMap 查询条件
  54 + * @return 分页数据
  55 + */
  56 + IPage<RelationDeviceDTO> getRelationDevicePage(
  57 + IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
  58 +
  59 + /**
  60 + * 通过用户ID查询分配的所有设备ID
  61 + *
  62 + * @param customerId 用户ID
  63 + * @return 所有的设备ids
  64 + */
  65 + List<String> findDeviceIdsByCustomerId(@Param("customerId") String customerId);
  66 +
  67 + List<BaseHomePageTop> findDeviceMessageInfo(
  68 + @Param("todayTime") Long todayTime, @Param("customerId") String customerId);
  69 +
  70 + List<BaseHomePageTop> findDeviceAlarmInfoByCustomer(
  71 + @Param("todayTime") Long todayTime, @Param("customerId") String customerId);
  72 +
  73 + Integer findDeviceMessageInfoByTs(
  74 + @Param("customerId") String customerId,
  75 + @Param("startTime") Long startTime,
  76 + @Param("endTime") Long endTime);
  77 +
  78 + Integer findDeviceAlarmInfoByCreatedTime(
  79 + @Param("customerId") String customerId,
  80 + @Param("startTime") Long startTime,
  81 + @Param("endTime") Long endTime);
  82 +
  83 + Integer countMsgs(@Param("queryMap") Map<String, Object> queryMap);
  84 +
  85 + Integer countDataPoints(@Param("queryMap") Map<String, Object> queryMap);
  86 +
  87 + /**
  88 + * 主设备列表
  89 + *
  90 + * @param customerId 客户ID
  91 + * @param tenantId 租户ID
  92 + * @param organizationIds 组织ID
  93 + * @return
  94 + */
  95 + List<SelectItemDTO> masterDevices(
  96 + @Param("customerId") String customerId,
  97 + @Param("tenantId") String tenantId,
  98 + @Param("organizationIds") List<String> organizationIds,
  99 + @Param("deviceProfileId") String deviceProfileId);
  100 +
  101 + /**
  102 + * 从设备列表
  103 + *
  104 + * @param customerId 客户ID
  105 + * @param tenantId 租户ID
  106 + * @param organizationIds 组织ID
  107 + * @param masterId 主设备ID
  108 + * @return
  109 + */
  110 + List<SelectItemDTO> slaveDevices(
  111 + @Param("customerId") String customerId,
  112 + @Param("tenantId") String tenantId,
  113 + @Param("organizationIds") List<String> organizationIds,
  114 + @Param("masterId") String masterId);
  115 +
  116 + /**
  117 + * TCP协议传输时,获取网关设备的从设备
  118 + *
  119 + * @param tenantId 租户ID
  120 + * @param masterId 网关设备的TB_ID
  121 + * @param code 网关子设备的标识符,例如:485协议的从设备地址码
  122 + * @return
  123 + */
  124 + DeviceDTO slaveDevice(
  125 + @Param("tenantId") String tenantId,
  126 + @Param("masterId") String masterId,
  127 + @Param("code") String code);
  128 + /**
  129 + * 设备遥测数据指标名称
  130 + *
  131 + * @param tenantId 租户ID
  132 + * @param customerId 客户ID
  133 + * @param organizationIds 组织ID
  134 + * @param deviceIds 设备ID
  135 + * @return
  136 + */
  137 + List<String> findDeviceKeys(
  138 + @Param("tenantId") String tenantId,
  139 + @Param("customerId") String customerId,
  140 + @Param("organizationIds") List<String> organizationIds,
  141 + @Param("deviceIds") List<String> deviceIds);
131 142 }
... ...
... ... @@ -7,176 +7,182 @@ import org.thingsboard.server.common.data.yunteng.dto.RelationDeviceDTO;
7 7 import org.thingsboard.server.common.data.yunteng.dto.SelectItemDTO;
8 8 import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum;
9 9 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
10   -import org.thingsboard.server.dao.yunteng.entities.TkDevice;
  10 +import org.thingsboard.server.dao.yunteng.entities.TkDeviceEntity;
11 11
12 12 import java.util.List;
13 13 import java.util.Map;
14 14 import java.util.Optional;
15 15 import java.util.Set;
16 16
17   -public interface TkDeviceService extends BaseService<TkDevice> {
18   - DeviceDTO insertOrUpdate(String tenantId, DeviceDTO deviceDTO);
19   -
20   - void deleteDevices(String tenantId, Set<String> ids);
21   -
22   - Optional<DeviceDTO> getDevice(String tenantId, String id);
23   -
24   - YtPageData<DeviceDTO> page(String tenantId, Map<String, Object> queryMap);
25   -
26   - YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap);
27   -
28   - /**
29   - * 验证表单数据有效性
30   - *
31   - * @param ytDevice
32   - */
33   - void validateFormData(String currentTenantId, DeviceDTO ytDevice);
34   -
35   - /**
36   - * 查询所有的设备信息
37   - *
38   - * @param deviceDTO 过滤参数
39   - * @return List<DeviceDTO>
40   - */
41   - boolean deviceNameUsed(String tenantId, String deviceName,String deviceId);
42   -
43   - List<String> findTbDeviceId(String tenantId, Set<String> ids);
44   -
45   - /**
46   - * 通过设备类型和组织ID查询所有的设备
47   - *
48   - * @param deviceType 设备类型
49   - * @param organizationId 组织ID
50   - * @return 设备列表
51   - */
52   - List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId(
53   - DeviceTypeEnum deviceType, String tenantId, String organizationId,String deviceLabel);
54   -
55   - /**
56   - * 通过设备ID和租户ID判断该设备是否存在
57   - *
58   - * @param tenantId 租户ID
59   - * @param deviceId 设备ID
60   - * @return 设备
61   - */
62   - DeviceDTO checkDeviceByTenantIdAndDeviceId(String tenantId, String deviceId);
63   -
64   - /**
65   - * 通过网关子设备的TB设备ID查询网关设备信息
66   - *
67   - * @param tbDeviceId 网关子设备的TB设备ID
68   - * @param tenantId 租户ID
69   - * @return 网关设备信息
70   - */
71   - List<DeviceDTO> findGateWayDeviceByTbDeviceId(String tenantId, String tbDeviceId);
72   -
73   - /**
74   - * 通过设备ID和租户ID检查设备是否存在
75   - *
76   - * @param tenantId 租户ID
77   - * @param deviceId 设备ID
78   - * @param isTbDeviceId 是TB设备ID
79   - * @return 设备信息
80   - */
81   - DeviceDTO checkDeviceByTenantIdAndId(String tenantId, String deviceId, boolean isTbDeviceId);
82   -
83   - /**
84   - * 更新设备告警状态
85   - *
86   - * @param tbDeviceId TB设备主键
87   - * @param created 告警状态:0正常,1告警
88   - * @return
89   - */
90   - boolean freshAlarmStatus(EntityId tbDeviceId, Integer created);
91   -
92   -
93   - /**
94   - * 自动生成设备SN
95   - *
96   - * @return
97   - */
98   - String generateSn();
99   -
100   - /**
101   - *
102   - * 设备是否被其它资源使用,例如:场景联动
103   - * @param deviceId 平台设备ID
104   - * @param tenantId 租户ID
105   - * @return
106   - */
107   - String otherUsing(String deviceId,String tenantId);
108   -
109   - /**
110   - * 主设备信息
111   - * @param tenantId 租户ID
112   - * @param organizationId 组织ID
113   - * @return 设备列表
114   - */
115   - List<SelectItemDTO> findMasterDevices(String tenantId, String customerId, String organizationId);
116   -
117   - /**
118   - * 从设备信息
119   - * @param masterId 主设备ID
120   - * @param tenantId 租户ID
121   - * @param organizationId 组织ID
122   - * @return 设备列表
123   - */
124   - List<SelectItemDTO> findSlaveDevices(String masterId,String tenantId,String customerId, String organizationId);
125   -
126   -
127   - /**
128   - * TCP协议传输时,获取网关设备的从设备
129   - * @param tenantId 租户ID
130   - * @param masterId 网关设备的TB_ID
131   - * @param deviceCode 网关子设备的标识符,例如:485协议的从设备地址码
132   - * @return
133   - */
134   - DeviceDTO findSlaveDevice(String tenantId,String masterId,String deviceCode);
135   -
136   - /**
137   - * 设备遥测数据指标名称
138   - * @param tenantId 租户ID
139   - * @param customerId 客户ID
140   - * @param organizationId 组织ID
141   - * @param deviceIds 设备ID
142   - * @return
143   - */
144   - List<String> findDeviceKeys(String tenantId,String customerId, String organizationId,List<String> deviceIds);
145   -
146   -
147   - /**
148   - * Thingsboard自动创建的传感器设备(网关子设备)同步到平台
149   - * @param slaveId 网关子设备TB平台的ID
150   - * @param slaveName 网关子设备TB平台的名称
151   - * @param gatewayId 网关设备TB平台的ID
152   - * @return
153   - */
154   - boolean saveSlaveDevice(String slaveId, String slaveName, String gatewayId, Long createTime);
155   -
156   - /**
157   - * 通过设备ids查询拥有数值型属性的设备
158   - * @param tenantId 租户ID
159   - * @param ids
160   - * @return 数值型设备列表
161   - */
162   - List<DeviceDTO> findNumberAttributeDevicesByIds(String tenantId,List<String> ids);
163   -
164   - /**
165   - * 通过tb设备ID获取平台设备信息
166   - * @param tenantId 租户ID
167   - * @param tbDeviceId tb设备ID
168   - * @return 设备信息
169   - */
170   - DeviceDTO getSubsetDeviceByTbDeviceId(String tenantId,String tbDeviceId);
171   -
172   - /**
173   - * 通过设备ID 设备配置ID获取属性
174   - * @param tbProfileId tb设备配置ID
175   - * @param profileId 设备配置ID
176   - * @param id 设备ID
177   - * @param tenantId 租户ID
178   - * @return 属性信息
179   - */
180   - JsonNode getDeviceAttributes(String tbProfileId,String profileId,String id,String tenantId);
181   -
  17 +public interface TkDeviceService extends BaseService<TkDeviceEntity> {
  18 + DeviceDTO insertOrUpdate(String tenantId, DeviceDTO deviceDTO);
  19 +
  20 + void deleteDevices(String tenantId, Set<String> ids);
  21 +
  22 + Optional<DeviceDTO> getDevice(String tenantId, String id);
  23 +
  24 + YtPageData<DeviceDTO> page(String tenantId, Map<String, Object> queryMap);
  25 +
  26 + YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap);
  27 +
  28 + /**
  29 + * 验证表单数据有效性
  30 + *
  31 + * @param ytDevice
  32 + */
  33 + void validateFormData(String currentTenantId, DeviceDTO ytDevice);
  34 +
  35 + /**
  36 + * 查询所有的设备信息
  37 + *
  38 + * @param deviceDTO 过滤参数
  39 + * @return List<DeviceDTO>
  40 + */
  41 + boolean deviceNameUsed(String tenantId, String deviceName, String deviceId);
  42 +
  43 + List<String> findTbDeviceId(String tenantId, Set<String> ids);
  44 +
  45 + /**
  46 + * 通过设备类型和组织ID查询所有的设备
  47 + *
  48 + * @param deviceType 设备类型
  49 + * @param organizationId 组织ID
  50 + * @return 设备列表
  51 + */
  52 + List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId(
  53 + DeviceTypeEnum deviceType, String tenantId, String organizationId, String deviceLabel);
  54 +
  55 + /**
  56 + * 通过设备ID和租户ID判断该设备是否存在
  57 + *
  58 + * @param tenantId 租户ID
  59 + * @param deviceId 设备ID
  60 + * @return 设备
  61 + */
  62 + DeviceDTO checkDeviceByTenantIdAndDeviceId(String tenantId, String deviceId);
  63 +
  64 + /**
  65 + * 通过网关子设备的TB设备ID查询网关设备信息
  66 + *
  67 + * @param tbDeviceId 网关子设备的TB设备ID
  68 + * @param tenantId 租户ID
  69 + * @return 网关设备信息
  70 + */
  71 + List<DeviceDTO> findGateWayDeviceByTbDeviceId(String tenantId, String tbDeviceId);
  72 +
  73 + /**
  74 + * 通过设备ID和租户ID检查设备是否存在
  75 + *
  76 + * @param tenantId 租户ID
  77 + * @param deviceId 设备ID
  78 + * @param isTbDeviceId 是TB设备ID
  79 + * @return 设备信息
  80 + */
  81 + DeviceDTO checkDeviceByTenantIdAndId(String tenantId, String deviceId, boolean isTbDeviceId);
  82 +
  83 + /**
  84 + * 更新设备告警状态
  85 + *
  86 + * @param tbDeviceId TB设备主键
  87 + * @param created 告警状态:0正常,1告警
  88 + * @return
  89 + */
  90 + boolean freshAlarmStatus(EntityId tbDeviceId, Integer created);
  91 +
  92 + /**
  93 + * 自动生成设备SN
  94 + *
  95 + * @return
  96 + */
  97 + String generateSn();
  98 +
  99 + /**
  100 + * 设备是否被其它资源使用,例如:场景联动
  101 + *
  102 + * @param deviceId 平台设备ID
  103 + * @param tenantId 租户ID
  104 + * @return
  105 + */
  106 + String otherUsing(String deviceId, String tenantId);
  107 +
  108 + /**
  109 + * 主设备信息
  110 + *
  111 + * @param tenantId 租户ID
  112 + * @param organizationId 组织ID
  113 + * @return 设备列表
  114 + */
  115 + List<SelectItemDTO> findMasterDevices(
  116 + String tenantId, String customerId, String organizationId, String deviceProfileId);
  117 +
  118 + /**
  119 + * 从设备信息
  120 + *
  121 + * @param masterId 主设备ID
  122 + * @param tenantId 租户ID
  123 + * @param organizationId 组织ID
  124 + * @return 设备列表
  125 + */
  126 + List<SelectItemDTO> findSlaveDevices(
  127 + String masterId, String tenantId, String customerId, String organizationId);
  128 +
  129 + /**
  130 + * TCP协议传输时,获取网关设备的从设备
  131 + *
  132 + * @param tenantId 租户ID
  133 + * @param masterId 网关设备的TB_ID
  134 + * @param deviceCode 网关子设备的标识符,例如:485协议的从设备地址码
  135 + * @return
  136 + */
  137 + DeviceDTO findSlaveDevice(String tenantId, String masterId, String deviceCode);
  138 +
  139 + /**
  140 + * 设备遥测数据指标名称
  141 + *
  142 + * @param tenantId 租户ID
  143 + * @param customerId 客户ID
  144 + * @param organizationId 组织ID
  145 + * @param deviceIds 设备ID
  146 + * @return
  147 + */
  148 + List<String> findDeviceKeys(
  149 + String tenantId, String customerId, String organizationId, List<String> deviceIds);
  150 +
  151 + /**
  152 + * Thingsboard自动创建的传感器设备(网关子设备)同步到平台
  153 + *
  154 + * @param slaveId 网关子设备TB平台的ID
  155 + * @param slaveName 网关子设备TB平台的名称
  156 + * @param gatewayId 网关设备TB平台的ID
  157 + * @return
  158 + */
  159 + boolean saveSlaveDevice(String slaveId, String slaveName, String gatewayId, Long createTime);
  160 +
  161 + /**
  162 + * 通过设备ids查询拥有数值型属性的设备
  163 + *
  164 + * @param tenantId 租户ID
  165 + * @param ids
  166 + * @return 数值型设备列表
  167 + */
  168 + List<DeviceDTO> findNumberAttributeDevicesByIds(String tenantId, List<String> ids);
  169 +
  170 + /**
  171 + * 通过tb设备ID获取平台设备信息
  172 + *
  173 + * @param tenantId 租户ID
  174 + * @param tbDeviceId tb设备ID
  175 + * @return 设备信息
  176 + */
  177 + DeviceDTO getSubsetDeviceByTbDeviceId(String tenantId, String tbDeviceId);
  178 +
  179 + /**
  180 + * 通过设备ID 设备配置ID获取属性
  181 + *
  182 + * @param deviceProfileId 平台设备配置ID
  183 + * @param id 设备ID
  184 + * @param tenantId 租户ID
  185 + * @return 属性信息de
  186 + */
  187 + JsonNode getDeviceAttributes(String deviceProfileId, String id, String tenantId);
182 188 }
... ...
... ... @@ -14,6 +14,7 @@
14 14 <result property="deviceInfo" column="device_info"
15 15 typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
16 16 <result property="profileId" column="profile_id"/>
  17 + <result property="deviceProfileId" column="device_profile_id"/>
17 18 <result property="activeTime" column="active_time"/>
18 19 <result property="deviceType" column="device_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
19 20 <result property="brand" column="brand" />
... ... @@ -63,7 +64,7 @@
63 64
64 65 <sql id="basicColumns">
65 66 ifd.id
66   - ,ifd.sn,ifd.brand,ifd.name,ifd.alias,ifd.device_info,ifd.profile_id,ifd.active_time,ifd.tenant_id,ifd.description
  67 + ,ifd.sn,ifd.brand,ifd.name,ifd.alias,ifd.device_info,ifd.profile_id,ifd.device_profile_id,ifd.active_time,ifd.tenant_id,ifd.description
67 68 ,ifd.tb_device_id,ifd.label,ifd.last_connect_time,ifd.device_type,ifd.device_state,ifd.create_time,ifd.update_time,ifd.creator,
68 69 ifd.updater,ifd.organization_id,ifd.alarm_status
69 70 </sql>
... ... @@ -93,8 +94,8 @@
93 94 <if test="queryMap.tenantId !=null and queryMap.tenantId !=''">
94 95 AND ifd.tenant_id = #{queryMap.tenantId}
95 96 </if>
96   - <if test="queryMap.profileId !=null and queryMap.profileId !=''">
97   - AND ifd.profile_id = #{queryMap.profileId}
  97 + <if test="queryMap.deviceProfileId !=null and queryMap.deviceProfileId !=''">
  98 + AND ifd.device_profile_id = #{queryMap.deviceProfileId}
98 99 </if>
99 100 <if test="queryMap.name !=null and queryMap.name !=''">
100 101 AND (
... ... @@ -338,6 +339,9 @@
338 339 <if test="tenantId !=null and tenantId !=''">
339 340 AND base.tenant_id = #{tenantId}
340 341 </if>
  342 + <if test="deviceProfileId !=null and deviceProfileId !=''">
  343 + AND base.device_profile_id = #{deviceProfileId}
  344 + </if>
341 345 <if test="customerId !=null and customerId !=''">
342 346 AND tde.customer_id :: TEXT = #{customerId}
343 347 </if>
... ...
... ... @@ -8,19 +8,25 @@
8 8 <result property="entityType" column="entity_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
9 9 <result property="doContext" column="do_context" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
10 10 <result property="outTarget" column="out_target" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
11   - <result property="sceneLinkageId" column="scene_linkage_id"/>
  11 + <result property="callType" column="call_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  12 + <result property="commandType" column="command_type"/>
  13 + <result property="thingsModelId" column="scene_linkage_id"/>
  14 + <result property="sceneLinkageId" column="things_model_id"/>
  15 + <result property="deviceProfileId" column="device_profile_id"/>
12 16 <result property="alarmProfileId" column="alarm_profile_id"/>
13   - <result property="description" column="description"/>
14 17 <result property="tenantId" column="tenant_id"/>
15 18 <result property="updater" column="updater"/>
16 19 <result property="updateTime" column="update_time"/>
17 20 <result property="createTime" column="create_time"/>
18 21 <result property="creator" column="creator"/>
19   -
  22 +
20 23 </resultMap>
21   -
  24 + <sql id="columns">
  25 + id,device_id,entity_type,do_context,out_target,call_type,scene_linkage_id,alarm_profile_id,
  26 + tenant_id,updater,update_time,create_time,creator,command_type,things_model_id,device_profile_id
  27 + </sql>
22 28 <select id="listBySceneId" resultMap="actionDTO">
23   - SELECT * FROM tk_do_action WHERE scene_linkage_id = #{sceneId}
  29 + SELECT <include refid="columns"/> FROM tk_do_action WHERE scene_linkage_id = #{sceneId}
24 30 </select>
25 31
26 32 </mapper>
... ...