Showing
6 changed files
with
131 additions
and
122 deletions
@@ -14,6 +14,7 @@ import org.thingsboard.server.common.data.yunteng.common.AddGroup; | @@ -14,6 +14,7 @@ import org.thingsboard.server.common.data.yunteng.common.AddGroup; | ||
14 | import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | 14 | import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; |
15 | import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; | 15 | import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; |
16 | import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; | 16 | import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; |
17 | +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; | ||
17 | import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | 18 | import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; |
18 | import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 19 | import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; |
19 | import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; | 20 | import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; |
@@ -29,9 +30,7 @@ import java.util.Optional; | @@ -29,9 +30,7 @@ import java.util.Optional; | ||
29 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; | 30 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; |
30 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE; | 31 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE; |
31 | 32 | ||
32 | -/** | ||
33 | - * @Description 场景联动 @Author cxy @Date 2021/11/25 11:25 | ||
34 | - */ | 33 | +/** @Description 场景联动 @Author cxy @Date 2021/11/25 11:25 */ |
35 | @RestController | 34 | @RestController |
36 | @RequestMapping("/api/yt/sceneLinkage") | 35 | @RequestMapping("/api/yt/sceneLinkage") |
37 | @RequiredArgsConstructor | 36 | @RequiredArgsConstructor |
@@ -39,84 +38,88 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant. | @@ -39,84 +38,88 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant. | ||
39 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')") | 38 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')") |
40 | public class YtSceneLinkageController extends BaseController { | 39 | public class YtSceneLinkageController extends BaseController { |
41 | 40 | ||
42 | - private final SceneLinkageService sceneLinkageService; | 41 | + private final SceneLinkageService sceneLinkageService; |
43 | 42 | ||
44 | - @ApiOperation(value = "新增场景联动") | ||
45 | - @PostMapping | ||
46 | - public ResponseEntity<SceneLinkageDTO> saveSceneLinkage( | ||
47 | - @Validated(AddGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) | ||
48 | - throws ThingsboardException { | ||
49 | - SceneLinkageDTO newSceneLinkageDTO = | ||
50 | - sceneLinkageService.saveScenelinkage( | ||
51 | - sceneLinkageDTO, getCurrentUser().getCurrentTenantId()); | ||
52 | - return Optional.ofNullable(newSceneLinkageDTO) | ||
53 | - .map( | ||
54 | - dto -> { | ||
55 | - URI location = | ||
56 | - ServletUriComponentsBuilder.fromCurrentRequest() | ||
57 | - .path("/{id}") | ||
58 | - .buildAndExpand(newSceneLinkageDTO.getId()) | ||
59 | - .toUri(); | ||
60 | - return ResponseEntity.created(location).body(newSceneLinkageDTO); | ||
61 | - }) | ||
62 | - .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build()); | ||
63 | - } | 43 | + @ApiOperation(value = "新增场景联动") |
44 | + @PostMapping | ||
45 | + public ResponseEntity<SceneLinkageDTO> saveSceneLinkage( | ||
46 | + @Validated(AddGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) | ||
47 | + throws ThingsboardException { | ||
48 | + SceneLinkageDTO newSceneLinkageDTO = | ||
49 | + sceneLinkageService.saveScenelinkage( | ||
50 | + sceneLinkageDTO, getCurrentUser().getCurrentTenantId()); | ||
51 | + return Optional.ofNullable(newSceneLinkageDTO) | ||
52 | + .map( | ||
53 | + dto -> { | ||
54 | + URI location = | ||
55 | + ServletUriComponentsBuilder.fromCurrentRequest() | ||
56 | + .path("/{id}") | ||
57 | + .buildAndExpand(newSceneLinkageDTO.getId()) | ||
58 | + .toUri(); | ||
59 | + return ResponseEntity.created(location).body(newSceneLinkageDTO); | ||
60 | + }) | ||
61 | + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build()); | ||
62 | + } | ||
64 | 63 | ||
65 | - @ApiOperation("编辑") | ||
66 | - @PostMapping("/update") | ||
67 | - public void updateSceneLinkage( | ||
68 | - @Validated(UpdateGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) throws ThingsboardException { | ||
69 | - sceneLinkageService.updateSceneLinkage(sceneLinkageDTO, getCurrentUser().getCurrentTenantId()); | ||
70 | - } | 64 | + @ApiOperation("编辑") |
65 | + @PostMapping("/update") | ||
66 | + public void updateSceneLinkage( | ||
67 | + @Validated(UpdateGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) | ||
68 | + throws ThingsboardException { | ||
69 | + sceneLinkageService.updateSceneLinkage(sceneLinkageDTO, getCurrentUser().getCurrentTenantId()); | ||
70 | + } | ||
71 | 71 | ||
72 | - @ApiOperation("查询(分页列表)") | ||
73 | - @GetMapping(params = {PAGE_SIZE, PAGE}) | ||
74 | - public YtPageData<SceneLinkageDTO> page( | ||
75 | - @RequestParam(PAGE_SIZE) int pageSize, | ||
76 | - @RequestParam(PAGE) int page, | ||
77 | - @RequestParam(value = "name", required = false) String name, | ||
78 | - @RequestParam(value = "status", required = false) Integer status, | ||
79 | - @RequestParam(value = "organizationId", required = false) String organizationId, | ||
80 | - @RequestParam(value = "triggers", required = false) List<TriggerDTO> triggers) | ||
81 | - throws ThingsboardException { | ||
82 | - HashMap<String, Object> queryMap = new HashMap<>(); | ||
83 | - queryMap.put(PAGE_SIZE, pageSize); | ||
84 | - queryMap.put(PAGE, page); | ||
85 | - queryMap.put("name", name); | ||
86 | - queryMap.put("status", status); | ||
87 | - queryMap.put("organizationId", organizationId); | ||
88 | - queryMap.put("triggers", triggers); | ||
89 | - return sceneLinkageService.page(queryMap, getCurrentUser().getCurrentTenantId()); | ||
90 | - } | 72 | + @ApiOperation("查询(分页列表)") |
73 | + @GetMapping(params = {PAGE_SIZE, PAGE}) | ||
74 | + public YtPageData<SceneLinkageDTO> page( | ||
75 | + @RequestParam(PAGE_SIZE) int pageSize, | ||
76 | + @RequestParam(PAGE) int page, | ||
77 | + @RequestParam(value = "name", required = false) String name, | ||
78 | + @RequestParam(value = "status", required = false) Integer status, | ||
79 | + @RequestParam(value = "organizationId", required = false) String organizationId, | ||
80 | + @RequestParam(value = "triggers", required = false) List<TriggerDTO> triggers) | ||
81 | + throws ThingsboardException { | ||
82 | + HashMap<String, Object> queryMap = new HashMap<>(); | ||
83 | + queryMap.put(PAGE_SIZE, pageSize); | ||
84 | + queryMap.put(PAGE, page); | ||
85 | + queryMap.put("name", name); | ||
86 | + queryMap.put("status", status); | ||
87 | + queryMap.put("organizationId", organizationId); | ||
88 | + queryMap.put("triggers", triggers); | ||
89 | + return sceneLinkageService.page(queryMap, getCurrentUser().getCurrentTenantId()); | ||
90 | + } | ||
91 | 91 | ||
92 | - @ApiOperation(value = "删除") | ||
93 | - @DeleteMapping | ||
94 | - public void delete(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) | ||
95 | - throws ThingsboardException { | ||
96 | - sceneLinkageService.deleteSceneLinkage( | ||
97 | - deleteDTO.getIds(), getCurrentUser().getCurrentTenantId()); | ||
98 | - } | 92 | + @ApiOperation(value = "删除") |
93 | + @DeleteMapping | ||
94 | + public void delete(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) | ||
95 | + throws ThingsboardException { | ||
96 | + sceneLinkageService.deleteSceneLinkage( | ||
97 | + deleteDTO.getIds(), getCurrentUser().getCurrentTenantId()); | ||
98 | + } | ||
99 | 99 | ||
100 | - @ApiOperation(value = "启用/禁用") | ||
101 | - @PutMapping("/updateSceneStatus/{sceneLinkageId}/{status}") | ||
102 | - public void updateRoleStatus( | ||
103 | - @PathVariable String sceneLinkageId, @PathVariable("status") int status) | ||
104 | - throws ThingsboardException { | ||
105 | - //TODO: 启动时,验证必填的动作是否为空 | 100 | + @ApiOperation(value = "启用/禁用") |
101 | + @PutMapping("/updateSceneStatus/{sceneLinkageId}/{status}") | ||
102 | + public void updateRoleStatus( | ||
103 | + @PathVariable String sceneLinkageId, @PathVariable("status") int status) | ||
104 | + throws ThingsboardException { | ||
105 | + // TODO: 启动时,验证必填的动作是否为空 | ||
106 | 106 | ||
107 | - sceneLinkageService.updateSceneStatus( | ||
108 | - sceneLinkageId, status, getCurrentUser().getCurrentTenantId()); | ||
109 | - } | 107 | + sceneLinkageService.updateSceneStatus( |
108 | + sceneLinkageId, status, getCurrentUser().getCurrentTenantId()); | ||
109 | + } | ||
110 | 110 | ||
111 | - @ApiOperation(value = "通过场景id获取所属组织的设备集合") | ||
112 | - @GetMapping("/device") | ||
113 | - public ResponseEntity<Map> findDeviceList(@RequestParam String organizationId) { | ||
114 | - HashMap<String, Object> map = | ||
115 | - new HashMap<>() { | ||
116 | - { | ||
117 | - put("items", sceneLinkageService.findDeviceList(organizationId)); | ||
118 | - } | ||
119 | - }; | ||
120 | - return ResponseEntity.ok(map); | ||
121 | - } | 111 | + @ApiOperation(value = "通过场景id获取所属组织的设备集合") |
112 | + @GetMapping("/device") | ||
113 | + public ResponseEntity<Map> findDeviceList(@RequestParam String organizationId) | ||
114 | + throws ThingsboardException { | ||
115 | + List<DeviceDTO> dtoList = | ||
116 | + sceneLinkageService.findDeviceList( | ||
117 | + organizationId, | ||
118 | + getCurrentUser().isPtTenantAdmin(), | ||
119 | + getCurrentUser().getCurrentTenantId(), | ||
120 | + getCurrentUser().getCurrentUserId()); | ||
121 | + Map<String, Object> map = new HashMap<>(); | ||
122 | + map.put("items", dtoList); | ||
123 | + return ResponseEntity.ok(map); | ||
124 | + } | ||
122 | } | 125 | } |
@@ -35,6 +35,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -35,6 +35,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
35 | private final TriggerService triggerService; | 35 | private final TriggerService triggerService; |
36 | private final DoConditionService doConditionService; | 36 | private final DoConditionService doConditionService; |
37 | private final DoActionService doActionService; | 37 | private final DoActionService doActionService; |
38 | + private final UserMapper userMapper; | ||
38 | /** | 39 | /** |
39 | * 增加场景联动,触发器可以多个,执行条件可以多个,执行动作可以多个 | 40 | * 增加场景联动,触发器可以多个,执行条件可以多个,执行动作可以多个 |
40 | * | 41 | * |
@@ -195,7 +196,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -195,7 +196,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
195 | */ | 196 | */ |
196 | @Override | 197 | @Override |
197 | @Transactional | 198 | @Transactional |
198 | - public SceneLinkageDTO updateSceneLinkage(SceneLinkageDTO sceneLinkageDTO,String tenantId) { | 199 | + public SceneLinkageDTO updateSceneLinkage(SceneLinkageDTO sceneLinkageDTO, String tenantId) { |
199 | // 获取场景 | 200 | // 获取场景 |
200 | SceneLinkage sceneLinkage = baseMapper.selectById(sceneLinkageDTO.getId()); | 201 | SceneLinkage sceneLinkage = baseMapper.selectById(sceneLinkageDTO.getId()); |
201 | if (sceneLinkage == null) { | 202 | if (sceneLinkage == null) { |
@@ -296,7 +297,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -296,7 +297,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
296 | // 拿到传入的组织id | 297 | // 拿到传入的组织id |
297 | String organizationId = (String) queryMap.get("organizationId"); | 298 | String organizationId = (String) queryMap.get("organizationId"); |
298 | // 不为空 | 299 | // 不为空 |
299 | - if (null!=organizationId && !StringUtils.isEmpty(organizationId) ) { | 300 | + if (null != organizationId && !StringUtils.isEmpty(organizationId)) { |
300 | // 新建组织集合 | 301 | // 新建组织集合 |
301 | List<String> organizationIds = new ArrayList<>(); | 302 | List<String> organizationIds = new ArrayList<>(); |
302 | // 添加拿到的组织 | 303 | // 添加拿到的组织 |
@@ -314,20 +315,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -314,20 +315,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
314 | } | 315 | } |
315 | IPage<SceneLinkage> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); | 316 | IPage<SceneLinkage> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); |
316 | IPage<SceneLinkageDTO> scenePage = baseMapper.getScenePage(page, queryMap); | 317 | IPage<SceneLinkageDTO> scenePage = baseMapper.getScenePage(page, queryMap); |
317 | -// scenePage | ||
318 | -// .getRecords() | ||
319 | -// .forEach( | ||
320 | -// sceneLinkageDTO -> { | ||
321 | -// List<TriggerDTO> collect = | ||
322 | -// triggerMapper | ||
323 | -// .selectList( | ||
324 | -// new LambdaQueryWrapper<Trigger>() | ||
325 | -// .in(Trigger::getSceneLinkageId, sceneLinkageDTO.getId())) | ||
326 | -// .stream() | ||
327 | -// .map(trigger -> trigger.getDTO(TriggerDTO.class)) | ||
328 | -// .collect(Collectors.toList()); | ||
329 | -// sceneLinkageDTO.setTriggers(collect); | ||
330 | -// }); | ||
331 | return getPageData(scenePage, SceneLinkageDTO.class); | 318 | return getPageData(scenePage, SceneLinkageDTO.class); |
332 | } | 319 | } |
333 | /** 获取当前租户的场景联动 */ | 320 | /** 获取当前租户的场景联动 */ |
@@ -367,24 +354,45 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -367,24 +354,45 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
367 | /** | 354 | /** |
368 | * 通过组织id查询全部的设备集合 | 355 | * 通过组织id查询全部的设备集合 |
369 | * | 356 | * |
370 | - * @param organizationId | 357 | + * @param organizationId 组织ID |
358 | + * @param isTenantAdmin true租户管理员 false客户 | ||
359 | + * @param tenantId 租户ID | ||
371 | * @return 设备集合 | 360 | * @return 设备集合 |
372 | */ | 361 | */ |
373 | @Override | 362 | @Override |
374 | - public List<DeviceDTO> findDeviceList(String organizationId) { | ||
375 | - // 拿到当前组织id所包含的设备集合 | 363 | + public List<DeviceDTO> findDeviceList( |
364 | + String organizationId, boolean isTenantAdmin, String tenantId, String currentUserId) { | ||
365 | + List<String> organizationIds = new ArrayList<>(); | ||
366 | + organizationIds.add(organizationId); | ||
367 | + // 查询该组织的所有子类 | ||
368 | + List<String> ids = | ||
369 | + organizationMapper.findOrganizationTreeList(tenantId, organizationIds).stream() | ||
370 | + .map(organization -> organization.getId()) | ||
371 | + .collect(Collectors.toList()); | ||
372 | + // 拿到当前组织ids所包含的设备集合 | ||
376 | List<YtDevice> deviceList = | 373 | List<YtDevice> deviceList = |
377 | deviceMapper.selectList( | 374 | deviceMapper.selectList( |
378 | - new QueryWrapper<YtDevice>() | ||
379 | - .lambda() | ||
380 | - .eq( | ||
381 | - StringUtils.isNoneBlank(organizationId), | ||
382 | - YtDevice::getOrganizationId, | ||
383 | - organizationId)); | 375 | + new QueryWrapper<YtDevice>().lambda().in(YtDevice::getOrganizationId, ids)); |
384 | List<DeviceDTO> deviceDTOList = | 376 | List<DeviceDTO> deviceDTOList = |
385 | deviceList.stream() | 377 | deviceList.stream() |
386 | .map(device -> device.getDTO(DeviceDTO.class)) | 378 | .map(device -> device.getDTO(DeviceDTO.class)) |
387 | .collect(Collectors.toList()); | 379 | .collect(Collectors.toList()); |
388 | - return ReflectUtils.sourceToTarget(deviceDTOList, DeviceDTO.class); | 380 | + |
381 | + List<DeviceDTO> result = new ArrayList<>(); | ||
382 | + if (!isTenantAdmin) { | ||
383 | + // 查找分配给客户的设备 | ||
384 | + List<String> list = | ||
385 | + deviceMapper.findDeviceIdsByCustomerId(userMapper.findUserCustomerIdById(currentUserId)); | ||
386 | + list.forEach( | ||
387 | + id -> { | ||
388 | + for (DeviceDTO dto : deviceDTOList) { | ||
389 | + if (dto.getTbDeviceId().equals(id)) { | ||
390 | + result.add(dto); | ||
391 | + break; | ||
392 | + } | ||
393 | + } | ||
394 | + }); | ||
395 | + } | ||
396 | + return result; | ||
389 | } | 397 | } |
390 | } | 398 | } |
@@ -47,9 +47,17 @@ public interface DeviceMapper extends BaseMapper<YtDevice> { | @@ -47,9 +47,17 @@ public interface DeviceMapper extends BaseMapper<YtDevice> { | ||
47 | 47 | ||
48 | /** | 48 | /** |
49 | * 获取关联设备的子设备分页列表 | 49 | * 获取关联设备的子设备分页列表 |
50 | - * @param page 分页 | 50 | + * |
51 | + * @param page 分页 | ||
51 | * @param queryMap 查询条件 | 52 | * @param queryMap 查询条件 |
52 | * @return 分页数据 | 53 | * @return 分页数据 |
53 | */ | 54 | */ |
54 | IPage<RelationDeviceDTO> getRelationDevicePage(IPage<?> page, @Param("queryMap") Map<String, Object> queryMap); | 55 | IPage<RelationDeviceDTO> getRelationDevicePage(IPage<?> page, @Param("queryMap") Map<String, Object> queryMap); |
56 | + | ||
57 | + /** | ||
58 | + * 通过用户ID查询分配的所有设备ID | ||
59 | + * @param customerId 用户ID | ||
60 | + * @return 所有的设备ids | ||
61 | + */ | ||
62 | + List<String> findDeviceIdsByCustomerId(@Param("customerId")String customerId); | ||
55 | } | 63 | } |
@@ -58,9 +58,12 @@ public interface SceneLinkageService extends BaseService<SceneLinkage>{ | @@ -58,9 +58,12 @@ public interface SceneLinkageService extends BaseService<SceneLinkage>{ | ||
58 | 58 | ||
59 | /** | 59 | /** |
60 | * 通过组织id查询设备集合 | 60 | * 通过组织id查询设备集合 |
61 | - * @param organizationId | 61 | + * @param organizationId 组织ID |
62 | + * @param isTenantAdmin true租户管理员 false客户 | ||
63 | + * @param tenantId 租户ID | ||
64 | + * @param currentUserId 当前用户ID | ||
62 | * @return | 65 | * @return |
63 | */ | 66 | */ |
64 | - List<DeviceDTO> findDeviceList(String organizationId); | 67 | + List<DeviceDTO> findDeviceList(String organizationId,boolean isTenantAdmin,String tenantId,String currentUserId); |
65 | 68 | ||
66 | } | 69 | } |
@@ -206,4 +206,8 @@ | @@ -206,4 +206,8 @@ | ||
206 | </if> | 206 | </if> |
207 | </where> | 207 | </where> |
208 | </select> | 208 | </select> |
209 | + <select id="findDeviceIdsByCustomerId" resultType="java.lang.String"> | ||
210 | + SELECT idi.tb_device_id FROM iotfs_device idi LEFT JOIN device d ON d.id::TEXT = idi.tb_device_id | ||
211 | + WHERE customer_id::TEXT = #{customerId} | ||
212 | + </select> | ||
209 | </mapper> | 213 | </mapper> |
dao/src/main/resources/mapper/DeviceTypeMapper.xml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
3 | - | ||
4 | -<mapper namespace="com.codeez.mapper.DeviceTypeMapper"> | ||
5 | - <resultMap type="org.thingsboard.server.common.data.yunteng.dto.DeviceTypeDTO" id="deviceTypeMap"> | ||
6 | - <result property="id" column="id"/> | ||
7 | - <result property="name" column="name"/> | ||
8 | - <result property="parentId" column="parent_id"/> | ||
9 | - <result property="path" column="path"/> | ||
10 | - <result property="sort" column="sort"/> | ||
11 | - <result property="tenantId" column="tenant_id"/> | ||
12 | - <result property="createTime" column="create_time"/> | ||
13 | - <result property="updateTime" column="update_time"/> | ||
14 | - <result property="creator" column="creator"/> | ||
15 | - <result property="updater" column="updater"/> | ||
16 | - </resultMap> | ||
17 | -</mapper> |