Commit 1d88e163124880c9caa2a33b237261c431b6f882
1 parent
3e456bf3
feat: add query gateway devices api
Showing
5 changed files
with
73 additions
and
6 deletions
@@ -15,6 +15,7 @@ import org.springframework.validation.annotation.Validated; | @@ -15,6 +15,7 @@ import org.springframework.validation.annotation.Validated; | ||
15 | import org.springframework.web.bind.annotation.*; | 15 | import org.springframework.web.bind.annotation.*; |
16 | import org.thingsboard.rule.engine.api.msg.DeviceCredentialsUpdateNotificationMsg; | 16 | import org.thingsboard.rule.engine.api.msg.DeviceCredentialsUpdateNotificationMsg; |
17 | import org.thingsboard.server.common.data.Device; | 17 | import org.thingsboard.server.common.data.Device; |
18 | +import org.thingsboard.server.common.data.DeviceTransportType; | ||
18 | import org.thingsboard.server.common.data.EntityType; | 19 | import org.thingsboard.server.common.data.EntityType; |
19 | import org.thingsboard.server.common.data.audit.ActionType; | 20 | import org.thingsboard.server.common.data.audit.ActionType; |
20 | import org.thingsboard.server.common.data.edge.EdgeEventActionType; | 21 | import org.thingsboard.server.common.data.edge.EdgeEventActionType; |
@@ -347,10 +348,27 @@ public class TkDeviceController extends BaseController { | @@ -347,10 +348,27 @@ public class TkDeviceController extends BaseController { | ||
347 | @ApiParam(value = "设备标签") @RequestParam(value = "deviceLabel", required = false) | 348 | @ApiParam(value = "设备标签") @RequestParam(value = "deviceLabel", required = false) |
348 | String deviceLabel, | 349 | String deviceLabel, |
349 | @ApiParam(value = "设备配置ID") @RequestParam(value = "deviceProfileId", required = false) | 350 | @ApiParam(value = "设备配置ID") @RequestParam(value = "deviceProfileId", required = false) |
350 | - String deviceProfileId) | 351 | + String deviceProfileId) |
351 | throws ThingsboardException { | 352 | throws ThingsboardException { |
352 | return tkdeviceService.findDevicesByDeviceTypeAndOrganizationId( | 353 | return tkdeviceService.findDevicesByDeviceTypeAndOrganizationId( |
353 | - deviceType, getCurrentUser().getCurrentTenantId(), organizationId, deviceLabel,deviceProfileId); | 354 | + deviceType, |
355 | + getCurrentUser().getCurrentTenantId(), | ||
356 | + organizationId, | ||
357 | + deviceLabel, | ||
358 | + deviceProfileId); | ||
359 | + } | ||
360 | + | ||
361 | + @GetMapping("/gateway/list") | ||
362 | + @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{})") | ||
363 | + @ApiOperation("获取满足条件的所有设备") | ||
364 | + public List<DeviceDTO> getGatewayDevices( | ||
365 | + @ApiParam(value = "组织ID") @RequestParam(value = "organizationId", required = false) | ||
366 | + String organizationId, | ||
367 | + @ApiParam(value = "传输类型") @RequestParam(value = "transportType", required = false) | ||
368 | + DeviceTransportType transportType) | ||
369 | + throws ThingsboardException { | ||
370 | + return tkdeviceService.findDevicesByTransportTypeAndOrganizationId( | ||
371 | + getCurrentUser().getCurrentTenantId(), organizationId, transportType); | ||
354 | } | 372 | } |
355 | 373 | ||
356 | @GetMapping("/list/master/{organizationId}") | 374 | @GetMapping("/list/master/{organizationId}") |
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; | @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; | ||
13 | import org.springframework.transaction.annotation.Transactional; | 13 | import org.springframework.transaction.annotation.Transactional; |
14 | import org.thingsboard.common.util.JacksonUtil; | 14 | import org.thingsboard.common.util.JacksonUtil; |
15 | import org.thingsboard.server.common.data.DeviceProfile; | 15 | import org.thingsboard.server.common.data.DeviceProfile; |
16 | +import org.thingsboard.server.common.data.DeviceTransportType; | ||
16 | import org.thingsboard.server.common.data.id.EntityId; | 17 | import org.thingsboard.server.common.data.id.EntityId; |
17 | import org.thingsboard.server.common.data.id.TenantId; | 18 | import org.thingsboard.server.common.data.id.TenantId; |
18 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; | 19 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; |
@@ -271,6 +272,38 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev | @@ -271,6 +272,38 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev | ||
271 | } | 272 | } |
272 | 273 | ||
273 | @Override | 274 | @Override |
275 | + public List<DeviceDTO> findDevicesByTransportTypeAndOrganizationId( | ||
276 | + String tenantId, String organizationId, DeviceTransportType transportType) { | ||
277 | + List<String> orgIds = organizationAllIds(tenantId, organizationId); | ||
278 | + if (orgIds.isEmpty()) { | ||
279 | + throw new YtDataValidationException(ErrorMessage.ORGANIZATION_NOT_EXTIED.getMessage()); | ||
280 | + } | ||
281 | + List<String> deviceProfileIds = null; | ||
282 | + if (null != transportType) { | ||
283 | + deviceProfileIds = tkProfileMapper.getDeviceProfileIds(tenantId, transportType); | ||
284 | + } | ||
285 | + List<TkDeviceEntity> entities = | ||
286 | + baseMapper.selectList( | ||
287 | + new LambdaQueryWrapper<TkDeviceEntity>() | ||
288 | + .eq(TkDeviceEntity::getTenantId, tenantId) | ||
289 | + .eq(TkDeviceEntity::getDeviceType,DeviceTypeEnum.GATEWAY) | ||
290 | + .in(TkDeviceEntity::getOrganizationId, orgIds)); | ||
291 | + if(null != deviceProfileIds && !deviceProfileIds.isEmpty()){ | ||
292 | + List<TkDeviceEntity> result = new ArrayList<>(); | ||
293 | + for (TkDeviceEntity entity :entities){ | ||
294 | + if(deviceProfileIds.contains(entity.getDeviceProfileId())){ | ||
295 | + result.add(entity); | ||
296 | + } | ||
297 | + } | ||
298 | + return result.stream().map(obj -> obj.getDTO(DeviceDTO.class)).collect(Collectors.toList()); | ||
299 | + } | ||
300 | + if (null != entities && !entities.isEmpty()) { | ||
301 | + return entities.stream().map(obj -> obj.getDTO(DeviceDTO.class)).collect(Collectors.toList()); | ||
302 | + } | ||
303 | + return null; | ||
304 | + } | ||
305 | + | ||
306 | + @Override | ||
274 | public DeviceDTO checkDeviceByTenantIdAndDeviceId(String tenantId, String deviceId) { | 307 | public DeviceDTO checkDeviceByTenantIdAndDeviceId(String tenantId, String deviceId) { |
275 | if (StringUtils.isEmpty(tenantId) || StringUtils.isEmpty(deviceId)) { | 308 | if (StringUtils.isEmpty(tenantId) || StringUtils.isEmpty(deviceId)) { |
276 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | 309 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); |
@@ -351,6 +384,9 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev | @@ -351,6 +384,9 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev | ||
351 | @NotNull | 384 | @NotNull |
352 | private List<String> organizationAllIds(String tenantId, String organizationId) { | 385 | private List<String> organizationAllIds(String tenantId, String organizationId) { |
353 | List<String> organizationIds = new ArrayList<>(); | 386 | List<String> organizationIds = new ArrayList<>(); |
387 | + if (StringUtils.isEmpty(organizationId)) { | ||
388 | + return organizationIds; | ||
389 | + } | ||
354 | if (!StringUtils.isEmpty(organizationId)) { | 390 | if (!StringUtils.isEmpty(organizationId)) { |
355 | organizationIds.add(organizationId); | 391 | organizationIds.add(organizationId); |
356 | } | 392 | } |
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
4 | import com.baomidou.mybatisplus.core.metadata.IPage; | 4 | import com.baomidou.mybatisplus.core.metadata.IPage; |
5 | import org.apache.ibatis.annotations.Mapper; | 5 | import org.apache.ibatis.annotations.Mapper; |
6 | import org.apache.ibatis.annotations.Param; | 6 | import org.apache.ibatis.annotations.Param; |
7 | +import org.thingsboard.server.common.data.DeviceTransportType; | ||
7 | import org.thingsboard.server.common.data.yunteng.dto.*; | 8 | import org.thingsboard.server.common.data.yunteng.dto.*; |
8 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 9 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
9 | import org.thingsboard.server.dao.yunteng.entities.TkDeviceProfileEntity; | 10 | import org.thingsboard.server.dao.yunteng.entities.TkDeviceProfileEntity; |
@@ -31,4 +32,8 @@ public interface TkDeviceProfileMapper extends BaseMapper<TkDeviceProfileEntity> | @@ -31,4 +32,8 @@ public interface TkDeviceProfileMapper extends BaseMapper<TkDeviceProfileEntity> | ||
31 | @Param("tenantId") String tenantId, | 32 | @Param("tenantId") String tenantId, |
32 | @Param("scriptId") String scriptId, | 33 | @Param("scriptId") String scriptId, |
33 | @Param("deviceType") DeviceTypeEnum deviceType); | 34 | @Param("deviceType") DeviceTypeEnum deviceType); |
35 | + | ||
36 | + List<String> getDeviceProfileIds( | ||
37 | + @Param("tenantId") String tenantId, | ||
38 | + @Param("transportType") DeviceTransportType transportType); | ||
34 | } | 39 | } |
1 | package org.thingsboard.server.dao.yunteng.service; | 1 | package org.thingsboard.server.dao.yunteng.service; |
2 | 2 | ||
3 | import com.fasterxml.jackson.databind.JsonNode; | 3 | import com.fasterxml.jackson.databind.JsonNode; |
4 | +import org.thingsboard.server.common.data.DeviceTransportType; | ||
4 | import org.thingsboard.server.common.data.id.EntityId; | 5 | import org.thingsboard.server.common.data.id.EntityId; |
5 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; | 6 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; |
6 | import org.thingsboard.server.common.data.yunteng.dto.RelationDeviceDTO; | 7 | import org.thingsboard.server.common.data.yunteng.dto.RelationDeviceDTO; |
@@ -26,10 +27,7 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> { | @@ -26,10 +27,7 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> { | ||
26 | 27 | ||
27 | YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap); | 28 | YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap); |
28 | 29 | ||
29 | - /** | ||
30 | - * 验证表单数据有效性 | ||
31 | - * | ||
32 | - */ | 30 | + /** 验证表单数据有效性 */ |
33 | void validateFormData(String currentTenantId, DeviceDTO ytDevice); | 31 | void validateFormData(String currentTenantId, DeviceDTO ytDevice); |
34 | 32 | ||
35 | /** | 33 | /** |
@@ -55,6 +53,8 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> { | @@ -55,6 +53,8 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> { | ||
55 | String deviceLabel, | 53 | String deviceLabel, |
56 | String deviceProfileId); | 54 | String deviceProfileId); |
57 | 55 | ||
56 | + List<DeviceDTO> findDevicesByTransportTypeAndOrganizationId( | ||
57 | + String tenantId, String organizationId, DeviceTransportType transportType); | ||
58 | /** | 58 | /** |
59 | * 通过设备ID和租户ID判断该设备是否存在 | 59 | * 通过设备ID和租户ID判断该设备是否存在 |
60 | * | 60 | * |
@@ -85,4 +85,12 @@ | @@ -85,4 +85,12 @@ | ||
85 | </if> | 85 | </if> |
86 | </where> | 86 | </where> |
87 | </select> | 87 | </select> |
88 | + | ||
89 | + <select id="getDeviceProfileIds" resultType="java.lang.String"> | ||
90 | + SELECT iot.id | ||
91 | + FROM device_profile base | ||
92 | + LEFT JOIN tk_device_profile iot ON iot.tb_profile_id = base.id::TEXT | ||
93 | + WHERE iot.tenant_id = #{tenantId} | ||
94 | + AND base.transport_type = #{transportType} | ||
95 | + </select> | ||
88 | </mapper> | 96 | </mapper> |