Commit c7b45e618e29082dd6f52ff2459d40f5b359e6b4

Authored by xp.Huang
2 parents 5b41f39d 1fb64e05

Merge branch '20220517' into 'master'

20220517

See merge request huang/thingsboard3.3.2!101
@@ -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">