Commit 11c7f4a95946480b7572405c501fba5832973ff3

Authored by 黄 x
1 parent fc67baa3

fix: delete tenant and delete device profile

@@ -3,6 +3,9 @@ package org.thingsboard.server.dao.yunteng.impl; @@ -3,6 +3,9 @@ package org.thingsboard.server.dao.yunteng.impl;
3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 import com.baomidou.mybatisplus.core.metadata.IPage; 5 import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import com.google.common.util.concurrent.Futures;
  7 +import com.google.common.util.concurrent.ListenableFuture;
  8 +import com.google.common.util.concurrent.MoreExecutors;
6 import lombok.RequiredArgsConstructor; 9 import lombok.RequiredArgsConstructor;
7 import org.apache.commons.lang3.StringUtils; 10 import org.apache.commons.lang3.StringUtils;
8 import org.springframework.beans.BeanUtils; 11 import org.springframework.beans.BeanUtils;
@@ -30,331 +33,349 @@ import java.util.stream.Collectors; @@ -30,331 +33,349 @@ import java.util.stream.Collectors;
30 @Service 33 @Service
31 @RequiredArgsConstructor 34 @RequiredArgsConstructor
32 public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTenantEntity> 35 public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTenantEntity>
33 - implements TkTenantService { 36 + implements TkTenantService {
34 37
35 - private final MenuMapper menuMapper;  
36 - private final RoleMapper roleMapper;  
37 - private final UserMapper userMapper;  
38 - private final TenantMenuMapper tenantMenuMapper;  
39 - private final TenantRoleMapper tenantRoleMapper;  
40 - private final TkOrganizationService tkOrganizationService;  
41 - private final TkDeviceService ytDeviceService;  
42 - private final TkMessageTemplateService tkMessageTemplateService;  
43 - private final TkMessageConfigService ytMessageConfigService;  
44 - private final TkMailLogService ytMailLogService;  
45 - private final SmsLogService smsLogService;  
46 - private final TkAlarmContactService ytAlarmContactService;  
47 - private final AlarmProfileMapper alarmProfileMapper;  
48 - private final SysNoticeService sysNoticeService;  
49 - private final SysNoticeUserService sysNoticeUserService;  
50 - private final SceneLinkageService sceneLinkageService;  
51 - private final DoActionService doActionService;  
52 - private final DoConditionService doConditionService;  
53 - private final TriggerService triggerService;  
54 - private final ConvertConfigService convertConfigService;  
55 - private final SysAppDesignService sysAppDesignService;  
56 - private final SysPlatformDesignService sysPlatformDesignService;  
57 - private final SysEnterpriseService sysEnterpriseService;  
58 - private final UserRoleMapper userRoleMapper; 38 + private final MenuMapper menuMapper;
  39 + private final RoleMapper roleMapper;
  40 + private final UserMapper userMapper;
  41 + private final TenantMenuMapper tenantMenuMapper;
  42 + private final TenantRoleMapper tenantRoleMapper;
  43 + private final TkOrganizationService tkOrganizationService;
  44 + private final TkDeviceService ytDeviceService;
  45 + private final TkMessageTemplateService tkMessageTemplateService;
  46 + private final TkMessageConfigService ytMessageConfigService;
  47 + private final TkMailLogService ytMailLogService;
  48 + private final SmsLogService smsLogService;
  49 + private final TkAlarmContactService ytAlarmContactService;
  50 + private final AlarmProfileMapper alarmProfileMapper;
  51 + private final SysNoticeService sysNoticeService;
  52 + private final SysNoticeUserService sysNoticeUserService;
  53 + private final SceneLinkageService sceneLinkageService;
  54 + private final DoActionService doActionService;
  55 + private final DoConditionService doConditionService;
  56 + private final TriggerService triggerService;
  57 + private final ConvertConfigService convertConfigService;
  58 + private final SysAppDesignService sysAppDesignService;
  59 + private final SysPlatformDesignService sysPlatformDesignService;
  60 + private final SysEnterpriseService sysEnterpriseService;
  61 + private final UserRoleMapper userRoleMapper;
  62 + private final TkDeviceProfileService tkDeviceProfileService;
59 63
60 - @Override  
61 - @Transactional  
62 - public TenantDTO createNewTenant(TenantReqDTO tenantReqDTO) {  
63 - TenantDTO tenantDTO = new TenantDTO();  
64 - BeanUtils.copyProperties(tenantReqDTO, tenantDTO);  
65 - SysTenantEntity tenant = tenantDTO.getEntity(SysTenantEntity.class);  
66 - tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString());  
67 - baseMapper.insert(tenant);  
68 - tenant.copyToDTO(tenantDTO);  
69 - saveTenantMapping(tenantDTO.getTenantId(), tenantReqDTO.getRoleIds());  
70 - return tenantDTO;  
71 - } 64 + @Override
  65 + @Transactional
  66 + public TenantDTO createNewTenant(TenantReqDTO tenantReqDTO) {
  67 + TenantDTO tenantDTO = new TenantDTO();
  68 + BeanUtils.copyProperties(tenantReqDTO, tenantDTO);
  69 + SysTenantEntity tenant = tenantDTO.getEntity(SysTenantEntity.class);
  70 + tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString());
  71 + baseMapper.insert(tenant);
  72 + tenant.copyToDTO(tenantDTO);
  73 + saveTenantMapping(tenantDTO.getTenantId(), tenantReqDTO.getRoleIds());
  74 + return tenantDTO;
  75 + }
72 76
73 - @Override  
74 - public YtPageData<TenantDTO> page(Map<String, Object> queryMap) {  
75 - IPage<SysTenantEntity> tenantIPage = getPage(queryMap, "create_time", false);  
76 - IPage<TenantDTO> userPage =  
77 - baseMapper.getTenantPage(  
78 - tenantIPage, (String) queryMap.get("tenantName"), EntityId.NULL_UUID.toString());  
79 - YtPageData<TenantDTO> ytPageData = getPageData(userPage, TenantDTO.class);  
80 - determineTenantStatus(ytPageData.getItems());  
81 - return ytPageData;  
82 - } 77 + @Override
  78 + public YtPageData<TenantDTO> page(Map<String, Object> queryMap) {
  79 + IPage<SysTenantEntity> tenantIPage = getPage(queryMap, "create_time", false);
  80 + IPage<TenantDTO> userPage =
  81 + baseMapper.getTenantPage(
  82 + tenantIPage, (String) queryMap.get("tenantName"), EntityId.NULL_UUID.toString());
  83 + YtPageData<TenantDTO> ytPageData = getPageData(userPage, TenantDTO.class);
  84 + determineTenantStatus(ytPageData.getItems());
  85 + return ytPageData;
  86 + }
83 87
84 - private void determineTenantStatus(Collection<TenantDTO> tenantDTOList) {  
85 - tenantDTOList.forEach(  
86 - tenantDTO -> {  
87 - if (!tenantDTO.isEnabled()) {  
88 - tenantDTO.setTenantStatus(TenantStatusEnum.DISABLED);  
89 - } else {  
90 - tenantDTO.setTenantStatus(TenantStatusEnum.NORMAL);  
91 - if (tenantDTO.getTenantExpireTime() != null  
92 - && LocalDateTime.now().isAfter(tenantDTO.getTenantExpireTime())) {  
93 - tenantDTO.setTenantStatus(TenantStatusEnum.EXPIRED);  
94 - }  
95 - }  
96 - });  
97 - } 88 + private void determineTenantStatus(Collection<TenantDTO> tenantDTOList) {
  89 + tenantDTOList.forEach(
  90 + tenantDTO -> {
  91 + if (!tenantDTO.isEnabled()) {
  92 + tenantDTO.setTenantStatus(TenantStatusEnum.DISABLED);
  93 + } else {
  94 + tenantDTO.setTenantStatus(TenantStatusEnum.NORMAL);
  95 + if (tenantDTO.getTenantExpireTime() != null
  96 + && LocalDateTime.now().isAfter(tenantDTO.getTenantExpireTime())) {
  97 + tenantDTO.setTenantStatus(TenantStatusEnum.EXPIRED);
  98 + }
  99 + }
  100 + });
  101 + }
98 102
99 - @Override  
100 - @Transactional  
101 - public TenantDTO updateTenant(TenantDTO tenantDTO) {  
102 - SysTenantEntity tenant = baseMapper.selectById(tenantDTO.getId());  
103 - if (tenant == null) {  
104 - throw new YtDataValidationException("tenant does not exist");  
105 - }  
106 - String existTenantId = tenant.getTenantId();  
107 - tenantDTO.copyToEntity(tenant);  
108 - // tenantCode is immutable  
109 - tenant.setTenantId(existTenantId);  
110 - baseMapper.updateById(tenant);  
111 - tenant.copyToDTO(tenantDTO);  
112 - return tenantDTO; 103 + @Override
  104 + @Transactional
  105 + public TenantDTO updateTenant(TenantDTO tenantDTO) {
  106 + SysTenantEntity tenant = baseMapper.selectById(tenantDTO.getId());
  107 + if (tenant == null) {
  108 + throw new YtDataValidationException("tenant does not exist");
113 } 109 }
  110 + String existTenantId = tenant.getTenantId();
  111 + tenantDTO.copyToEntity(tenant);
  112 + // tenantCode is immutable
  113 + tenant.setTenantId(existTenantId);
  114 + baseMapper.updateById(tenant);
  115 + tenant.copyToDTO(tenantDTO);
  116 + return tenantDTO;
  117 + }
114 118
115 - @Override  
116 - @Transactional  
117 - public boolean deleteTenants(String[] idArr) {  
118 - Set<String> ids = Set.of(idArr);  
119 -  
120 - Set<String> tenantIds = baseMapper.getTenantIdsByTenantIds(ids);  
121 - // 1. GET ALL ROLE_ID  
122 - Set<String> allRoleIds = roleMapper.getAllIdsByTenantId(tenantIds);  
123 - // 2. DELETE SYS_ROLE SYS_ROLE_MENU SYS_USER_ROLE  
124 - if (!allRoleIds.isEmpty()) { 119 + @Override
  120 + @Transactional
  121 + public ListenableFuture<Boolean> deleteTenants(String[] idArr) {
  122 + Set<String> deleteIds = Set.of(idArr);
  123 + return Futures.transformAsync(
  124 + Futures.immediateFuture(deleteIds),
  125 + ids -> {
  126 + Set<String> tenantIds = baseMapper.getTenantIdsByTenantIds(ids);
  127 + // 1. GET ALL ROLE_ID
  128 + Set<String> allRoleIds = roleMapper.getAllIdsByTenantId(tenantIds);
  129 + // 2. DELETE SYS_ROLE SYS_ROLE_MENU SYS_USER_ROLE
  130 + if (!allRoleIds.isEmpty()) {
125 roleMapper.deleteBatchIds(allRoleIds); 131 roleMapper.deleteBatchIds(allRoleIds);
126 roleMapper.deleteRoleMenuMappingByRoleIds(allRoleIds); 132 roleMapper.deleteRoleMenuMappingByRoleIds(allRoleIds);
127 roleMapper.deleteRoleUserMappingByRoleIds(allRoleIds); 133 roleMapper.deleteRoleUserMappingByRoleIds(allRoleIds);
128 - }  
129 - // 3. DELETE SYS_MENU SYS_TENANT_MENU  
130 - Set<String> allMenuIds = menuMapper.getAllIdsByTenantId(tenantIds);  
131 - if (!allMenuIds.isEmpty()) { 134 + }
  135 + // 3. DELETE SYS_MENU SYS_TENANT_MENU
  136 + Set<String> allMenuIds = menuMapper.getAllIdsByTenantId(tenantIds);
  137 + if (!allMenuIds.isEmpty()) {
132 menuMapper.deleteBatchIds(allMenuIds); 138 menuMapper.deleteBatchIds(allMenuIds);
133 menuMapper.deleteTenantMenuMappingByMenuIds(allMenuIds); 139 menuMapper.deleteTenantMenuMappingByMenuIds(allMenuIds);
134 - }  
135 - // 4. DELETE USER  
136 - userMapper.delete(new QueryWrapper<SysUserEntity>().lambda().in(SysUserEntity::getTenantId, tenantIds));  
137 - // 5. TELL RULE ENGINE TO STOP TENANT  
138 - // 6. DELETE OTHER RESOURCES IF ANY  
139 - // 7. DELETE ORGANIZATION  
140 - tkOrganizationService.deleteDataByTenantIds(tenantIds);  
141 - // 8. DELETE DEVICE  
142 - ytDeviceService.deleteDataByTenantIds(tenantIds);  
143 - // 9. DELETE MESSAGE_TEMPLATE MESSAGE_CONFIG SEND_RECORDS  
144 - tkMessageTemplateService.deleteDataByTenantIds(tenantIds);  
145 - ytMessageConfigService.deleteDataByTenantIds(tenantIds);  
146 - ytMailLogService.deleteDataByTenantIds(tenantIds);  
147 - smsLogService.deleteDataByTenantIds(tenantIds);  
148 - // 10.DELETE ALARM CONTACT  
149 - ytAlarmContactService.deleteDataByTenantIds(tenantIds);  
150 - if (!tenantIds.isEmpty()) {  
151 - alarmProfileMapper.delete(new LambdaQueryWrapper<TkAlarmProfileEntity>().in(TkAlarmProfileEntity::getTenantId, tenantIds));  
152 - }  
153 - // 11.DELETE NOTICE NOTICE_RECORDS  
154 - sysNoticeService.deleteDataByTenantIds(tenantIds);  
155 - sysNoticeUserService.deleteDataByTenantIds(tenantIds);  
156 - // 12.DELETE SCENES  
157 - sceneLinkageService.deleteDataByTenantIds(tenantIds);  
158 - doActionService.deleteDataByTenantIds(tenantIds);  
159 - doConditionService.deleteDataByTenantIds(tenantIds);  
160 - triggerService.deleteDataByTenantIds(tenantIds);  
161 - // 13.DELETE CONVERT_CONFIG  
162 - convertConfigService.deleteDataByTenantIds(tenantIds);  
163 - // 14.DELETE APP_DESIGN PLATFORM_DESIGN ENTERPRISE  
164 - sysAppDesignService.deleteDataByTenantIds(tenantIds);  
165 - sysPlatformDesignService.deleteDataByTenantIds(tenantIds);  
166 - sysEnterpriseService.deleteDataByTenantIds(tenantIds);  
167 - // 15.DELETE TENANT_ROLE、TENANT_MENU  
168 - freshTenantAdminRole(tenantIds, null);  
169 - deleteTenantRolesByTenantId(tenantIds);  
170 - deleteTenantMenusByTenantId(tenantIds);  
171 - // 16. DELETE TENANT  
172 - baseMapper.deleteBatchIds(ids); 140 + }
  141 + // 4. DELETE USER
  142 + userMapper.delete(
  143 + new QueryWrapper<SysUserEntity>().lambda().in(SysUserEntity::getTenantId, tenantIds));
  144 + // 5. TELL RULE ENGINE TO STOP TENANT
  145 + // 6. DELETE OTHER RESOURCES IF ANY
  146 + // 7. DELETE ORGANIZATION
  147 + tkOrganizationService.deleteDataByTenantIds(tenantIds);
  148 + // 8. DELETE DEVICE
  149 + ytDeviceService.deleteDataByTenantIds(tenantIds);
  150 + // 9. DELETE MESSAGE_TEMPLATE MESSAGE_CONFIG SEND_RECORDS
  151 + tkMessageTemplateService.deleteDataByTenantIds(tenantIds);
  152 + ytMessageConfigService.deleteDataByTenantIds(tenantIds);
  153 + ytMailLogService.deleteDataByTenantIds(tenantIds);
  154 + smsLogService.deleteDataByTenantIds(tenantIds);
  155 + // 10.DELETE ALARM CONTACT
  156 + ytAlarmContactService.deleteDataByTenantIds(tenantIds);
  157 + if (!tenantIds.isEmpty()) {
  158 + alarmProfileMapper.delete(
  159 + new LambdaQueryWrapper<TkAlarmProfileEntity>()
  160 + .in(TkAlarmProfileEntity::getTenantId, tenantIds));
  161 + }
  162 + // 11.DELETE NOTICE NOTICE_RECORDS
  163 + sysNoticeService.deleteDataByTenantIds(tenantIds);
  164 + sysNoticeUserService.deleteDataByTenantIds(tenantIds);
  165 + // 12.DELETE SCENES
  166 + sceneLinkageService.deleteDataByTenantIds(tenantIds);
  167 + doActionService.deleteDataByTenantIds(tenantIds);
  168 + doConditionService.deleteDataByTenantIds(tenantIds);
  169 + triggerService.deleteDataByTenantIds(tenantIds);
  170 + // 13.DELETE CONVERT_CONFIG
  171 + convertConfigService.deleteDataByTenantIds(tenantIds);
  172 + // 14.DELETE APP_DESIGN PLATFORM_DESIGN ENTERPRISE
  173 + sysAppDesignService.deleteDataByTenantIds(tenantIds);
  174 + sysPlatformDesignService.deleteDataByTenantIds(tenantIds);
  175 + sysEnterpriseService.deleteDataByTenantIds(tenantIds);
  176 + // 15.DELETE TENANT_ROLE、TENANT_MENU
  177 + freshTenantAdminRole(tenantIds, null);
  178 + deleteTenantRolesByTenantId(tenantIds);
  179 + deleteTenantMenusByTenantId(tenantIds);
  180 + // 16. DELETE TENANT
  181 + baseMapper.deleteBatchIds(ids);
  182 + // 17. DELETE DEVICE_PROFILE
  183 + tkDeviceProfileService.deleteDataByTenantIds(tenantIds);
  184 + return Futures.immediateFuture(true);
  185 + },
  186 + MoreExecutors.directExecutor());
  187 + }
173 188
  189 + /**
  190 + * 通过租户Code删除租户角色关系
  191 + *
  192 + * @param tenantIds 租户Code
  193 + */
  194 + private void deleteTenantRolesByTenantId(Set<String> tenantIds) {
  195 + tenantRoleMapper.delete(
  196 + new QueryWrapper<SysTenantRoleEntity>()
  197 + .lambda()
  198 + .in(SysTenantRoleEntity::getTenantId, tenantIds));
  199 + }
174 200
175 - return true;  
176 - } 201 + /**
  202 + * 通过租户Code删除租户角色关系
  203 + *
  204 + * @param tenantIds 租户Code
  205 + */
  206 + private void deleteTenantMenusByTenantId(Set<String> tenantIds) {
  207 + tenantMenuMapper.delete(
  208 + new QueryWrapper<SysTenantMenuEntity>()
  209 + .lambda()
  210 + .in(SysTenantMenuEntity::getTenantId, tenantIds));
  211 + }
177 212
178 - /**  
179 - * 通过租户Code删除租户角色关系  
180 - *  
181 - * @param tenantIds 租户Code  
182 - */  
183 - private void deleteTenantRolesByTenantId(Set<String> tenantIds) {  
184 - tenantRoleMapper.delete(  
185 - new QueryWrapper<SysTenantRoleEntity>().lambda().in(SysTenantRoleEntity::getTenantId, tenantIds));  
186 - } 213 + /**
  214 + * 刷新租户管理员与角色关系 1、1个租户1个角色;1个角色多个租户 2、1个角色多个用户(租户管理员)
  215 + *
  216 + * @param tenantIds 租户ID
  217 + * @param newRoles 新增的角色ID
  218 + */
  219 + private void freshTenantAdminRole(Set<String> tenantIds, List<String> newRoles) {
  220 + LambdaQueryWrapper<SysTenantRoleEntity> roleFilter =
  221 + new QueryWrapper<SysTenantRoleEntity>()
  222 + .lambda()
  223 + .in(SysTenantRoleEntity::getTenantId, tenantIds);
  224 + List<String> deleteIds =
  225 + tenantRoleMapper.selectList(roleFilter).stream()
  226 + .map(i -> i.getRoleId())
  227 + .collect(Collectors.toList());
187 228
188 - /**  
189 - * 通过租户Code删除租户角色关系  
190 - *  
191 - * @param tenantIds 租户Code  
192 - */  
193 - private void deleteTenantMenusByTenantId(Set<String> tenantIds) {  
194 - tenantMenuMapper.delete(  
195 - new QueryWrapper<SysTenantMenuEntity>().lambda().in(SysTenantMenuEntity::getTenantId, tenantIds));  
196 - }  
197 -  
198 - /**  
199 - * 刷新租户管理员与角色关系  
200 - * 1、1个租户1个角色;1个角色多个租户  
201 - * 2、1个角色多个用户(租户管理员)  
202 - *  
203 - * @param tenantIds 租户ID  
204 - * @param newRoles 新增的角色ID  
205 - */  
206 - private void freshTenantAdminRole(Set<String> tenantIds, List<String> newRoles) {  
207 - LambdaQueryWrapper<SysTenantRoleEntity> roleFilter = new QueryWrapper<SysTenantRoleEntity>().lambda()  
208 - .in(SysTenantRoleEntity::getTenantId, tenantIds);  
209 - List<String> deleteIds = tenantRoleMapper.selectList(roleFilter).stream()  
210 - .map(i -> i.getRoleId())  
211 - .collect(Collectors.toList()); 229 + LambdaQueryWrapper<SysUserEntity> userFilter =
  230 + new QueryWrapper<SysUserEntity>()
  231 + .lambda()
  232 + .eq(SysUserEntity::getLevel, 2)
  233 + .in(SysUserEntity::getTenantId, tenantIds);
  234 + List<String> userIds =
  235 + userMapper.selectList(userFilter).stream().map(m -> m.getId()).collect(Collectors.toList());
212 236
213 - LambdaQueryWrapper<SysUserEntity> userFilter = new QueryWrapper<SysUserEntity>().lambda()  
214 - .eq(SysUserEntity::getLevel,2)  
215 - .in(SysUserEntity::getTenantId, tenantIds);  
216 - List<String> userIds = userMapper.selectList(userFilter).stream()  
217 - .map(m -> m.getId())  
218 - .collect(Collectors.toList());  
219 -  
220 - if(!deleteIds.isEmpty() && !userIds.isEmpty()){  
221 - LambdaQueryWrapper<SysUserRoleEntity> filter = new QueryWrapper<SysUserRoleEntity>().lambda()  
222 - .in(SysUserRoleEntity::getRoleId, deleteIds)  
223 - .in(SysUserRoleEntity::getUserId,userIds);  
224 - userRoleMapper.delete(filter);  
225 - }  
226 -  
227 - if (newRoles == null || newRoles.isEmpty()  
228 - || userIds == null || userIds.isEmpty()) {  
229 - return;  
230 - }  
231 - userIds.forEach(item -> {  
232 - for (String roleId : newRoles) {  
233 - SysUserRoleEntity role = new SysUserRoleEntity();  
234 - role.setRoleId(roleId);  
235 - role.setUserId(item);  
236 - userRoleMapper.insert(role);  
237 - }  
238 - }); 237 + if (!deleteIds.isEmpty() && !userIds.isEmpty()) {
  238 + LambdaQueryWrapper<SysUserRoleEntity> filter =
  239 + new QueryWrapper<SysUserRoleEntity>()
  240 + .lambda()
  241 + .in(SysUserRoleEntity::getRoleId, deleteIds)
  242 + .in(SysUserRoleEntity::getUserId, userIds);
  243 + userRoleMapper.delete(filter);
239 } 244 }
240 245
241 - @Override  
242 - public Optional<TenantDTO> findById(String id) {  
243 - return Optional.ofNullable(baseMapper.selectById(id))  
244 - .map(tenant -> tenant.getDTO(TenantDTO.class)); 246 + if (newRoles == null || newRoles.isEmpty() || userIds == null || userIds.isEmpty()) {
  247 + return;
245 } 248 }
  249 + userIds.forEach(
  250 + item -> {
  251 + for (String roleId : newRoles) {
  252 + SysUserRoleEntity role = new SysUserRoleEntity();
  253 + role.setRoleId(roleId);
  254 + role.setUserId(item);
  255 + userRoleMapper.insert(role);
  256 + }
  257 + });
  258 + }
246 259
247 - @Override  
248 - @Transactional  
249 - public TenantDTO updateOrCreateTenant(TenantReqDTO tenantReqDTO) {  
250 - if (StringUtils.isNotBlank(tenantReqDTO.getId())) {  
251 - SysTenantEntity tenant;  
252 - tenant = baseMapper.selectById(tenantReqDTO.getId());  
253 - if (tenant != null) {  
254 - BeanUtils.copyProperties(tenantReqDTO, tenant);  
255 - if (!tenantReqDTO.getTenantProfileId().isNullUid()) {  
256 - tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString());  
257 - }  
258 - //update tenant role  
259 - //delete  
260 - Set<String> tenantIds = new HashSet<>();  
261 - tenantIds.add(tenantReqDTO.getTenantId());  
262 - freshTenantAdminRole(tenantIds, Arrays.asList(tenantReqDTO.getRoleIds()));  
263 - deleteTenantRolesByTenantId(tenantIds);  
264 - deleteTenantMenusByTenantId(tenantIds);  
265 - //add  
266 - saveTenantMapping(tenantReqDTO.getTenantId(), tenantReqDTO.getRoleIds());  
267 - baseMapper.updateById(tenant);  
268 - }  
269 - return tenant.getDTO(TenantDTO.class);  
270 - } else {  
271 - return createNewTenant(tenantReqDTO);  
272 - }  
273 - } 260 + @Override
  261 + public Optional<TenantDTO> findById(String id) {
  262 + return Optional.ofNullable(baseMapper.selectById(id))
  263 + .map(tenant -> tenant.getDTO(TenantDTO.class));
  264 + }
274 265
275 - @Override  
276 - public List<String> getTenantRolesByTenantId(String tenantId) {  
277 - if (StringUtils.isEmpty(tenantId)) {  
278 - throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 266 + @Override
  267 + @Transactional
  268 + public TenantDTO updateOrCreateTenant(TenantReqDTO tenantReqDTO) {
  269 + if (StringUtils.isNotBlank(tenantReqDTO.getId())) {
  270 + SysTenantEntity tenant;
  271 + tenant = baseMapper.selectById(tenantReqDTO.getId());
  272 + if (tenant != null) {
  273 + BeanUtils.copyProperties(tenantReqDTO, tenant);
  274 + if (!tenantReqDTO.getTenantProfileId().isNullUid()) {
  275 + tenant.setTenantProfileId(tenantReqDTO.getTenantProfileId().getId().toString());
279 } 276 }
280 - List<String> roles = new ArrayList<>();  
281 - List<SysTenantRoleEntity> tenantRoleList =  
282 - tenantRoleMapper.selectList(  
283 - new QueryWrapper<SysTenantRoleEntity>().lambda().eq(SysTenantRoleEntity::getTenantId, tenantId));  
284 - tenantRoleList.forEach(role -> roles.add(role.getRoleId()));  
285 - return roles; 277 + // update tenant role
  278 + // delete
  279 + Set<String> tenantIds = new HashSet<>();
  280 + tenantIds.add(tenantReqDTO.getTenantId());
  281 + freshTenantAdminRole(tenantIds, Arrays.asList(tenantReqDTO.getRoleIds()));
  282 + deleteTenantRolesByTenantId(tenantIds);
  283 + deleteTenantMenusByTenantId(tenantIds);
  284 + // add
  285 + saveTenantMapping(tenantReqDTO.getTenantId(), tenantReqDTO.getRoleIds());
  286 + baseMapper.updateById(tenant);
  287 + }
  288 + return tenant.getDTO(TenantDTO.class);
  289 + } else {
  290 + return createNewTenant(tenantReqDTO);
286 } 291 }
  292 + }
287 293
288 - @Override  
289 - public YtPageData<TenantDTO> getCurrentMonthExpireTenantPage(Map<String, Object> queryMap) {  
290 - IPage<SysTenantEntity> tenantIPage = getPage(queryMap, "create_time", true);  
291 - IPage<TenantDTO> tenantDTOIPage = baseMapper.getCurrentMonthExpireTenantPage(tenantIPage);  
292 - return getPageData(tenantDTOIPage, TenantDTO.class); 294 + @Override
  295 + public List<String> getTenantRolesByTenantId(String tenantId) {
  296 + if (StringUtils.isEmpty(tenantId)) {
  297 + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
293 } 298 }
  299 + List<String> roles = new ArrayList<>();
  300 + List<SysTenantRoleEntity> tenantRoleList =
  301 + tenantRoleMapper.selectList(
  302 + new QueryWrapper<SysTenantRoleEntity>()
  303 + .lambda()
  304 + .eq(SysTenantRoleEntity::getTenantId, tenantId));
  305 + tenantRoleList.forEach(role -> roles.add(role.getRoleId()));
  306 + return roles;
  307 + }
294 308
295 - @Override  
296 - public List<TenantDTO> getAllTenant() {  
297 - List<SysTenantEntity> tenants =  
298 - baseMapper.selectList(  
299 - new LambdaQueryWrapper<SysTenantEntity>()  
300 - .ne(SysTenantEntity::getTenantId, EntityId.NULL_UUID.toString()));  
301 - return ReflectUtils.sourceToTarget(tenants, TenantDTO.class);  
302 - } 309 + @Override
  310 + public YtPageData<TenantDTO> getCurrentMonthExpireTenantPage(Map<String, Object> queryMap) {
  311 + IPage<SysTenantEntity> tenantIPage = getPage(queryMap, "create_time", true);
  312 + IPage<TenantDTO> tenantDTOIPage = baseMapper.getCurrentMonthExpireTenantPage(tenantIPage);
  313 + return getPageData(tenantDTOIPage, TenantDTO.class);
  314 + }
303 315
304 - @Override  
305 - @Async  
306 - public CompletableFuture<TsValue> findTenantsByTs(  
307 - LocalDateTime startTs, LocalDateTime endTs, long ts) {  
308 - List<SysTenantEntity> tenants =  
309 - baseMapper.selectList(  
310 - new LambdaQueryWrapper<SysTenantEntity>()  
311 - .ge(SysTenantEntity::getCreateTime, startTs).lt(SysTenantEntity::getCreateTime, endTs));  
312 - return CompletableFuture.supplyAsync(  
313 - () -> new TsValue(ts, String.valueOf(tenants.size())));  
314 - } 316 + @Override
  317 + public List<TenantDTO> getAllTenant() {
  318 + List<SysTenantEntity> tenants =
  319 + baseMapper.selectList(
  320 + new LambdaQueryWrapper<SysTenantEntity>()
  321 + .ne(SysTenantEntity::getTenantId, EntityId.NULL_UUID.toString()));
  322 + return ReflectUtils.sourceToTarget(tenants, TenantDTO.class);
  323 + }
315 324
316 - /**  
317 - * 保存租户与菜单、角色的映射关系  
318 - *  
319 - * @param tenantId 租户Code  
320 - * @param roleIds 角色IDS  
321 - */  
322 - private void saveTenantMapping(String tenantId, String[] roleIds) {  
323 - // 添加租户角色关系  
324 - for (String roleId : roleIds) {  
325 - saveTenantRoleMapping(roleId, tenantId);  
326 - // 查询roleId有多少菜单  
327 - Set<String> menuIds = roleMapper.getMenuIdsByRoleId(roleId);  
328 - // 添加租户菜单关系  
329 - for (String menuId : menuIds) {  
330 - saveTenantMenuMapping(menuId, tenantId);  
331 - }  
332 - }  
333 - } 325 + @Override
  326 + @Async
  327 + public CompletableFuture<TsValue> findTenantsByTs(
  328 + LocalDateTime startTs, LocalDateTime endTs, long ts) {
  329 + List<SysTenantEntity> tenants =
  330 + baseMapper.selectList(
  331 + new LambdaQueryWrapper<SysTenantEntity>()
  332 + .ge(SysTenantEntity::getCreateTime, startTs)
  333 + .lt(SysTenantEntity::getCreateTime, endTs));
  334 + return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(tenants.size())));
  335 + }
334 336
335 - /**  
336 - * 保存租户与菜单的关系  
337 - *  
338 - * @param menuId 菜单ID  
339 - * @param tenantId 租户Code  
340 - */  
341 - private void saveTenantMenuMapping(String menuId, String tenantId) {  
342 - SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();  
343 - tenantMenu.setMenuId(menuId);  
344 - tenantMenu.setTenantId(tenantId);  
345 - tenantMenuMapper.insert(tenantMenu); 337 + /**
  338 + * 保存租户与菜单、角色的映射关系
  339 + *
  340 + * @param tenantId 租户Code
  341 + * @param roleIds 角色IDS
  342 + */
  343 + private void saveTenantMapping(String tenantId, String[] roleIds) {
  344 + // 添加租户角色关系
  345 + for (String roleId : roleIds) {
  346 + saveTenantRoleMapping(roleId, tenantId);
  347 + // 查询roleId有多少菜单
  348 + Set<String> menuIds = roleMapper.getMenuIdsByRoleId(roleId);
  349 + // 添加租户菜单关系
  350 + for (String menuId : menuIds) {
  351 + saveTenantMenuMapping(menuId, tenantId);
  352 + }
346 } 353 }
  354 + }
347 355
348 - /**  
349 - * 保存租户与角色的关系  
350 - *  
351 - * @param roleId 角色ID  
352 - * @param tenantId 租户Code  
353 - */  
354 - private void saveTenantRoleMapping(String roleId, String tenantId) {  
355 - SysTenantRoleEntity tenantRole = new SysTenantRoleEntity();  
356 - tenantRole.setTenantId(tenantId);  
357 - tenantRole.setRoleId(roleId);  
358 - tenantRoleMapper.insert(tenantRole);  
359 - } 356 + /**
  357 + * 保存租户与菜单的关系
  358 + *
  359 + * @param menuId 菜单ID
  360 + * @param tenantId 租户Code
  361 + */
  362 + private void saveTenantMenuMapping(String menuId, String tenantId) {
  363 + SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();
  364 + tenantMenu.setMenuId(menuId);
  365 + tenantMenu.setTenantId(tenantId);
  366 + tenantMenuMapper.insert(tenantMenu);
  367 + }
  368 +
  369 + /**
  370 + * 保存租户与角色的关系
  371 + *
  372 + * @param roleId 角色ID
  373 + * @param tenantId 租户Code
  374 + */
  375 + private void saveTenantRoleMapping(String roleId, String tenantId) {
  376 + SysTenantRoleEntity tenantRole = new SysTenantRoleEntity();
  377 + tenantRole.setTenantId(tenantId);
  378 + tenantRole.setRoleId(roleId);
  379 + tenantRoleMapper.insert(tenantRole);
  380 + }
360 } 381 }
@@ -3,12 +3,13 @@ package org.thingsboard.server.dao.yunteng.service; @@ -3,12 +3,13 @@ package org.thingsboard.server.dao.yunteng.service;
3 import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO; 3 import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO;
4 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum; 4 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
5 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; 5 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  6 +import org.thingsboard.server.dao.yunteng.entities.TkDeviceProfileEntity;
6 7
7 import java.util.List; 8 import java.util.List;
8 import java.util.Optional; 9 import java.util.Optional;
9 import java.util.Set; 10 import java.util.Set;
10 11
11 -public interface TkDeviceProfileService { 12 +public interface TkDeviceProfileService extends BaseService<TkDeviceProfileEntity>{
12 13
13 DeviceProfileDTO insertOrUpdate(DeviceProfileDTO deviceDTO); 14 DeviceProfileDTO insertOrUpdate(DeviceProfileDTO deviceDTO);
14 15
@@ -2,6 +2,7 @@ package org.thingsboard.server.dao.yunteng.service; @@ -2,6 +2,7 @@ package org.thingsboard.server.dao.yunteng.service;
2 2
3 3
4 4
  5 +import com.google.common.util.concurrent.ListenableFuture;
5 import org.thingsboard.server.common.data.query.TsValue; 6 import org.thingsboard.server.common.data.query.TsValue;
6 import org.thingsboard.server.common.data.yunteng.dto.HomePageLeftBottomDTO; 7 import org.thingsboard.server.common.data.yunteng.dto.HomePageLeftBottomDTO;
7 import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; 8 import org.thingsboard.server.common.data.yunteng.dto.TenantDTO;
@@ -19,7 +20,7 @@ public interface TkTenantService { @@ -19,7 +20,7 @@ public interface TkTenantService {
19 20
20 TenantDTO updateTenant(TenantDTO tenantDTO); 21 TenantDTO updateTenant(TenantDTO tenantDTO);
21 22
22 - boolean deleteTenants(String[] ids); 23 + ListenableFuture<Boolean> deleteTenants(String[] ids);
23 24
24 Optional<TenantDTO> findById(String id); 25 Optional<TenantDTO> findById(String id);
25 26