Commit c7b45e618e29082dd6f52ff2459d40f5b359e6b4
Merge branch '20220517' into 'master'
20220517 See merge request huang/thingsboard3.3.2!101
Showing
7 changed files
with
76 additions
and
44 deletions
@@ -353,8 +353,8 @@ public class YtDeviceController extends BaseController { | @@ -353,8 +353,8 @@ public class YtDeviceController extends BaseController { | ||
353 | @ApiOperation("获取该组织的所有设备") | 353 | @ApiOperation("获取该组织的所有设备") |
354 | public List<DeviceDTO> getGatewayDevices( | 354 | public List<DeviceDTO> getGatewayDevices( |
355 | @ApiParam(value = "组织ID") @RequestParam("organizationId") String organizationId, | 355 | @ApiParam(value = "组织ID") @RequestParam("organizationId") String organizationId, |
356 | - @ApiParam(value = "设备类型") @PathVariable("deviceType") DeviceTypeEnum deviceType) { | ||
357 | - return deviceService.findDevicesByDeviceTypeAndOrganizationId(deviceType, organizationId); | 356 | + @ApiParam(value = "设备类型") @PathVariable("deviceType") DeviceTypeEnum deviceType) throws ThingsboardException { |
357 | + return deviceService.findDevicesByDeviceTypeAndOrganizationId(deviceType,getCurrentUser().getCurrentTenantId(), organizationId); | ||
358 | } | 358 | } |
359 | 359 | ||
360 | @GetMapping("/gateway/{tbDeviceId}") | 360 | @GetMapping("/gateway/{tbDeviceId}") |
@@ -92,7 +92,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | @@ -92,7 +92,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap | ||
92 | new QueryWrapper<SceneLinkage>() | 92 | new QueryWrapper<SceneLinkage>() |
93 | .lambda() | 93 | .lambda() |
94 | .eq(SceneLinkage::getTenantId, tenantId) | 94 | .eq(SceneLinkage::getTenantId, tenantId) |
95 | - .eq(SceneLinkage::getCreator, currentUserId) | 95 | + .eq(StringUtils.isNotBlank(currentUserId),SceneLinkage::getCreator, currentUserId) |
96 | .in(SceneLinkage::getId, ids); | 96 | .in(SceneLinkage::getId, ids); |
97 | int result = sceneLinkageMapper.delete(Wrapper); | 97 | int result = sceneLinkageMapper.delete(Wrapper); |
98 | if (result != ids.size()) { | 98 | if (result != ids.size()) { |
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; | @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; | ||
6 | import lombok.RequiredArgsConstructor; | 6 | import lombok.RequiredArgsConstructor; |
7 | import lombok.extern.slf4j.Slf4j; | 7 | import lombok.extern.slf4j.Slf4j; |
8 | import org.apache.commons.lang3.StringUtils; | 8 | import org.apache.commons.lang3.StringUtils; |
9 | +import org.jetbrains.annotations.NotNull; | ||
9 | import org.jetbrains.annotations.Nullable; | 10 | import org.jetbrains.annotations.Nullable; |
10 | import org.springframework.stereotype.Service; | 11 | import org.springframework.stereotype.Service; |
11 | import org.springframework.transaction.annotation.Transactional; | 12 | import org.springframework.transaction.annotation.Transactional; |
@@ -217,12 +218,13 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | @@ -217,12 +218,13 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | ||
217 | 218 | ||
218 | @Override | 219 | @Override |
219 | public List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId( | 220 | public List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId( |
220 | - DeviceTypeEnum deviceType, String organizationId) { | 221 | + DeviceTypeEnum deviceType, String tenantId, String organizationId) { |
222 | + List<String> orgIds = organizationAllIds(tenantId,organizationId); | ||
221 | return ReflectUtils.sourceToTarget( | 223 | return ReflectUtils.sourceToTarget( |
222 | baseMapper.selectList( | 224 | baseMapper.selectList( |
223 | new LambdaQueryWrapper<YtDevice>() | 225 | new LambdaQueryWrapper<YtDevice>() |
224 | .eq(YtDevice::getDeviceType, deviceType) | 226 | .eq(YtDevice::getDeviceType, deviceType) |
225 | - .eq(YtDevice::getOrganizationId, organizationId)), | 227 | + .in(YtDevice::getOrganizationId, orgIds)), |
226 | DeviceDTO.class); | 228 | DeviceDTO.class); |
227 | } | 229 | } |
228 | 230 | ||
@@ -286,16 +288,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | @@ -286,16 +288,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | ||
286 | queryMap.put("tenantId", tenantId); | 288 | queryMap.put("tenantId", tenantId); |
287 | String organizationId = (String) queryMap.get("organizationId"); | 289 | String organizationId = (String) queryMap.get("organizationId"); |
288 | if (!StringUtils.isEmpty(organizationId)) { | 290 | if (!StringUtils.isEmpty(organizationId)) { |
289 | - List<String> organizationIds = new ArrayList<>(); | ||
290 | - organizationIds.add(organizationId); | ||
291 | - // 查询该组织的所有子类 | ||
292 | - List<OrganizationDTO> organizationDTOS = | ||
293 | - ytOrganizationMapper.findOrganizationTreeList(tenantId, organizationIds); | ||
294 | - List<String> queryOrganizationIds = new ArrayList<>(); | ||
295 | - organizationDTOS.forEach( | ||
296 | - item -> { | ||
297 | - queryOrganizationIds.add(item.getId()); | ||
298 | - }); | 291 | + List<String> queryOrganizationIds = organizationAllIds(tenantId, organizationId); |
299 | queryMap.put("organizationIds", queryOrganizationIds); | 292 | queryMap.put("organizationIds", queryOrganizationIds); |
300 | } | 293 | } |
301 | IPage<YtDevice> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); | 294 | IPage<YtDevice> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); |
@@ -311,6 +304,27 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | @@ -311,6 +304,27 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev | ||
311 | return new YtPageData<>(records, deviceIPage.getTotal()); | 304 | return new YtPageData<>(records, deviceIPage.getTotal()); |
312 | } | 305 | } |
313 | 306 | ||
307 | + /** | ||
308 | + * 组织结构下的所有组织ID | ||
309 | + * @param tenantId 租户ID | ||
310 | + * @param organizationId 组织ID | ||
311 | + * @return | ||
312 | + */ | ||
313 | + @NotNull | ||
314 | + private List<String> organizationAllIds(String tenantId, String organizationId) { | ||
315 | + List<String> organizationIds = new ArrayList<>(); | ||
316 | + organizationIds.add(organizationId); | ||
317 | + // 查询该组织的所有子类 | ||
318 | + List<OrganizationDTO> organizationDTOS = | ||
319 | + ytOrganizationMapper.findOrganizationTreeList(tenantId, organizationIds); | ||
320 | + List<String> queryOrganizationIds = new ArrayList<>(); | ||
321 | + organizationDTOS.forEach( | ||
322 | + item -> { | ||
323 | + queryOrganizationIds.add(item.getId()); | ||
324 | + }); | ||
325 | + return queryOrganizationIds; | ||
326 | + } | ||
327 | + | ||
314 | @Override | 328 | @Override |
315 | public YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap) { | 329 | public YtPageData<RelationDeviceDTO> pageRelation(Map<String, Object> queryMap) { |
316 | IPage<YtDevice> page = getPage(queryMap, "last_online_time", false); | 330 | IPage<YtDevice> page = getPage(queryMap, "last_online_time", false); |
@@ -198,44 +198,37 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan | @@ -198,44 +198,37 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan | ||
198 | 198 | ||
199 | /** | 199 | /** |
200 | * 刷新租户管理员与角色关系 | 200 | * 刷新租户管理员与角色关系 |
201 | + * 1、1个租户1个角色;1个角色多个租户 | ||
202 | + * 2、1个角色多个用户(租户管理员) | ||
201 | * | 203 | * |
202 | * @param tenantIds 租户ID | 204 | * @param tenantIds 租户ID |
203 | * @param newRoles 新增的角色ID | 205 | * @param newRoles 新增的角色ID |
204 | */ | 206 | */ |
205 | private void freshTenantAdminRole(Set<String> tenantIds, List<String> newRoles) { | 207 | private void freshTenantAdminRole(Set<String> tenantIds, List<String> newRoles) { |
206 | - AtomicBoolean notChanged = new AtomicBoolean(false); | ||
207 | LambdaQueryWrapper<TenantRole> roleFilter = new QueryWrapper<TenantRole>().lambda() | 208 | LambdaQueryWrapper<TenantRole> roleFilter = new QueryWrapper<TenantRole>().lambda() |
208 | .in(TenantRole::getTenantId, tenantIds); | 209 | .in(TenantRole::getTenantId, tenantIds); |
209 | - List<String> oldRoleIds = tenantRoleMapper.selectList(roleFilter).stream() | 210 | + List<String> deleteIds = tenantRoleMapper.selectList(roleFilter).stream() |
210 | .map(i -> i.getRoleId()) | 211 | .map(i -> i.getRoleId()) |
211 | .collect(Collectors.toList()); | 212 | .collect(Collectors.toList()); |
212 | - List<String> deleteIds = oldRoleIds.stream() | ||
213 | - .filter(f -> { | ||
214 | - if(newRoles == null || newRoles.isEmpty()){ | ||
215 | - return true; | ||
216 | - } | ||
217 | - if(newRoles.contains(f)){ | ||
218 | - notChanged.set(true); | ||
219 | - return false; | ||
220 | - } | ||
221 | - return true; | ||
222 | - }) | ||
223 | - .collect(Collectors.toList()); | ||
224 | - if(!deleteIds.isEmpty()){ | ||
225 | - LambdaQueryWrapper<UserRole> filter = new QueryWrapper<UserRole>().lambda() | ||
226 | - .in(UserRole::getRoleId, deleteIds); | ||
227 | - userRoleMapper.delete(filter); | ||
228 | - } | ||
229 | 213 | ||
230 | - if (notChanged.get() || newRoles == null || newRoles.isEmpty()) { | ||
231 | - return; | ||
232 | - } | ||
233 | LambdaQueryWrapper<User> userFilter = new QueryWrapper<User>().lambda() | 214 | LambdaQueryWrapper<User> userFilter = new QueryWrapper<User>().lambda() |
234 | .eq(User::getLevel,2) | 215 | .eq(User::getLevel,2) |
235 | .in(User::getTenantId, tenantIds); | 216 | .in(User::getTenantId, tenantIds); |
236 | List<String> userIds = userMapper.selectList(userFilter).stream() | 217 | List<String> userIds = userMapper.selectList(userFilter).stream() |
237 | .map(m -> m.getId()) | 218 | .map(m -> m.getId()) |
238 | .collect(Collectors.toList()); | 219 | .collect(Collectors.toList()); |
220 | + | ||
221 | + if(!deleteIds.isEmpty() && !userIds.isEmpty()){ | ||
222 | + LambdaQueryWrapper<UserRole> filter = new QueryWrapper<UserRole>().lambda() | ||
223 | + .in(UserRole::getRoleId, deleteIds) | ||
224 | + .in(UserRole::getUserId,userIds); | ||
225 | + userRoleMapper.delete(filter); | ||
226 | + } | ||
227 | + | ||
228 | + if (newRoles == null || newRoles.isEmpty() | ||
229 | + || userIds == null || userIds.isEmpty()) { | ||
230 | + return; | ||
231 | + } | ||
239 | userIds.forEach(item -> { | 232 | userIds.forEach(item -> { |
240 | for (String roleId : newRoles) { | 233 | for (String roleId : newRoles) { |
241 | UserRole role = new UserRole(); | 234 | UserRole role = new UserRole(); |
1 | package org.thingsboard.server.dao.yunteng.impl; | 1 | package org.thingsboard.server.dao.yunteng.impl; |
2 | 2 | ||
3 | +import com.baomidou.mybatisplus.core.conditions.Wrapper; | ||
3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 4 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 5 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
5 | import com.baomidou.mybatisplus.core.metadata.IPage; | 6 | import com.baomidou.mybatisplus.core.metadata.IPage; |
@@ -70,6 +71,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> | @@ -70,6 +71,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> | ||
70 | private final YtMessageTemplateService messageTemplateService; | 71 | private final YtMessageTemplateService messageTemplateService; |
71 | private final YtOrganizationService organizationService; | 72 | private final YtOrganizationService organizationService; |
72 | private final UserOrganizationMappingService userOrganizationMappingService; | 73 | private final UserOrganizationMappingService userOrganizationMappingService; |
74 | + private final SceneLinkageService sceneLinkageService; | ||
75 | + private final SceneLinkageMapper sceneLinkageMapper; | ||
73 | 76 | ||
74 | public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s"; | 77 | public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s"; |
75 | private final PasswordEncoder passwordEncoder; | 78 | private final PasswordEncoder passwordEncoder; |
@@ -390,6 +393,20 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> | @@ -390,6 +393,20 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> | ||
390 | // 4. 删除人员 | 393 | // 4. 删除人员 |
391 | baseMapper.deleteBatchIds(userIds); | 394 | baseMapper.deleteBatchIds(userIds); |
392 | 395 | ||
396 | + // 5、删除场景联动 | ||
397 | + Wrapper filter = new QueryWrapper<SceneLinkage>().lambda() | ||
398 | + .in(SceneLinkage::getCreator,userIds); | ||
399 | + List<SceneLinkage> sceneLinkages =sceneLinkageMapper.selectList(filter); | ||
400 | + if(sceneLinkages ==null || sceneLinkages.isEmpty()){ | ||
401 | + return true; | ||
402 | + } | ||
403 | + Set<String> sceneIds = sceneLinkages.stream() | ||
404 | + .map(i -> i.getId()) | ||
405 | + .collect(Collectors.toSet()); | ||
406 | + sceneLinkageService.deleteSceneLinkage(sceneIds, tenantId,null); | ||
407 | + | ||
408 | + | ||
409 | + | ||
393 | return true; | 410 | return true; |
394 | } | 411 | } |
395 | 412 |
@@ -48,7 +48,7 @@ public interface YtDeviceService extends BaseService<YtDevice> { | @@ -48,7 +48,7 @@ public interface YtDeviceService extends BaseService<YtDevice> { | ||
48 | * @return 设备列表 | 48 | * @return 设备列表 |
49 | */ | 49 | */ |
50 | List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId( | 50 | List<DeviceDTO> findDevicesByDeviceTypeAndOrganizationId( |
51 | - DeviceTypeEnum deviceType, String organizationId); | 51 | + DeviceTypeEnum deviceType, String tenantId, String organizationId); |
52 | 52 | ||
53 | /** | 53 | /** |
54 | * 通过设备ID和租户ID判断该设备是否存在 | 54 | * 通过设备ID和租户ID判断该设备是否存在 |
@@ -41,8 +41,13 @@ | @@ -41,8 +41,13 @@ | ||
41 | SELECT | 41 | SELECT |
42 | <include refid="menuDTOMapColumn"> | 42 | <include refid="menuDTOMapColumn"> |
43 | </include> | 43 | </include> |
44 | - FROM sys_menu | ||
45 | - WHERE id IN (SELECT menu_id FROM sys_tenant_menu WHERE tenant_id = #{tenantId}) | 44 | + FROM sys_menu WHERE id IN ( |
45 | + SELECT menu_id FROM sys_role_menu WHERE role_id IN ( | ||
46 | + SELECT id FROM sys_role WHERE id in ( | ||
47 | + SELECT role_id FROM sys_tenant_role WHERE tenant_id = #{tenantId} | ||
48 | + ) AND enabled=true | ||
49 | + ) | ||
50 | + ) | ||
46 | </select> | 51 | </select> |
47 | 52 | ||
48 | <select id="selectMyMenu" resultMap="menuDTOMap"> | 53 | <select id="selectMyMenu" resultMap="menuDTOMap"> |
@@ -50,10 +55,13 @@ | @@ -50,10 +55,13 @@ | ||
50 | <include refid="menuDTOMapColumn"> | 55 | <include refid="menuDTOMapColumn"> |
51 | </include> | 56 | </include> |
52 | FROM sys_menu | 57 | FROM sys_menu |
53 | - WHERE id IN (SELECT menu_id | ||
54 | - FROM sys_role_menu | ||
55 | - WHERE role_id IN (SELECT id FROM sys_role WHERE id in (SELECT role_id FROM sys_user_role WHERE user_id | ||
56 | - = #{userId}) AND enabled=true)) | 58 | + WHERE id IN ( |
59 | + SELECT menu_id FROM sys_role_menu WHERE role_id IN ( | ||
60 | + SELECT id FROM sys_role WHERE id in ( | ||
61 | + SELECT role_id FROM sys_user_role WHERE user_id = #{userId} | ||
62 | + ) AND enabled=true | ||
63 | + ) | ||
64 | + ) | ||
57 | </select> | 65 | </select> |
58 | 66 | ||
59 | <delete id="deleteTenantMenuMappingByMenuIds"> | 67 | <delete id="deleteTenantMenuMappingByMenuIds"> |