Commit 75ea7bfca909eefd99003919675e5382668326e0

Authored by 黄 x
1 parent 956bb1ed

fix: 租户下的客户同步删除TB的客户完成

... ... @@ -434,7 +434,7 @@ public abstract class BaseController {
434 434 return getCurrentUser().getTenantId();
435 435 }
436 436
437   - Customer checkCustomerId(CustomerId customerId, Operation operation) throws ThingsboardException {
  437 + protected Customer checkCustomerId(CustomerId customerId, Operation operation) throws ThingsboardException {
438 438 try {
439 439 validateId(customerId, "Incorrect customerId " + customerId);
440 440 Customer customer = customerService.findCustomerById(getTenantId(), customerId);
... ...
... ... @@ -18,10 +18,8 @@ import org.thingsboard.server.common.data.User;
18 18 import org.thingsboard.server.common.data.audit.ActionType;
19 19 import org.thingsboard.server.common.data.edge.EdgeEventActionType;
20 20 import org.thingsboard.server.common.data.exception.ThingsboardException;
21   -import org.thingsboard.server.common.data.id.CustomerId;
22   -import org.thingsboard.server.common.data.id.EntityId;
23   -import org.thingsboard.server.common.data.id.TenantId;
24   -import org.thingsboard.server.common.data.id.UserId;
  21 +import org.thingsboard.server.common.data.id.*;
  22 +import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
25 23 import org.thingsboard.server.common.data.security.Authority;
26 24 import org.thingsboard.server.common.data.security.UserCredentials;
27 25 import org.thingsboard.server.common.data.security.event.UserAuthDataChangedEvent;
... ... @@ -177,9 +175,18 @@ public class YtUserController extends BaseController {
177 175 }
178 176
179 177 @DeleteMapping
  178 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')")
180 179 public void deleteUser(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
181 180 throws ThingsboardException {
182 181 // 如果当前用户是租户管理员,则代表创建的用户为CUSTOMER_USER,则需要调用TB,否则为本平台的管理员不需要调用TB
  182 + boolean isTenantAdminOperator = getCurrentUser().isPtTenantAdmin();
  183 + if(isTenantAdminOperator){
  184 + for (String id : deleteDTO.getIds()) {
  185 + String customerId = userService.findUserCustomerIdById(id);
  186 + //删除Customer_User
  187 + deleteCustomer(customerId);
  188 + }
  189 + }
183 190 userService.deleteUser(
184 191 deleteDTO.getIds(), getCurrentUser().isPtSysadmin(), getCurrentUser().getCurrentTenantId());
185 192 }
... ... @@ -331,4 +338,25 @@ public class YtUserController extends BaseController {
331 338 throw handleException(e);
332 339 }
333 340 }
  341 +
  342 + /**
  343 + * 删除租户下的客户
  344 + * @param strCustomerId 客户ID
  345 + * @throws ThingsboardException tb运行异常
  346 + */
  347 + private void deleteCustomer(String strCustomerId) throws ThingsboardException {
  348 + try{
  349 + CustomerId customerId = new CustomerId(toUUID(strCustomerId));
  350 + Customer customer = checkCustomerId(customerId, Operation.DELETE);
  351 + List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(getTenantId(), customerId);
  352 + customerService.deleteCustomer(getTenantId(), customerId);
  353 + logEntityAction(customerId, customer,
  354 + customer.getId(),
  355 + ActionType.DELETED, null, strCustomerId);
  356 + sendDeleteNotificationMsg(getTenantId(), customerId, relatedEdgeIds);
  357 + tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), customerId, ComponentLifecycleEvent.DELETED);
  358 + }catch (Exception e){
  359 + throw handleException(e);
  360 + }
  361 + }
334 362 }
... ...
... ... @@ -31,7 +31,7 @@ public enum ErrorMessage {
31 31 SEND_DESTINATION_NOT_FOUND(400012,"通知失败!找不到发送目标"),
32 32 USER_NAME_ALREADY_EXISTS(400013,"用户名已存在"),
33 33 DATA_ALREADY_EXISTS(400014,"数据已存在,无需重复添加"),
34   - CONNECT_TO_TB_ERROR(500001,"与TB联系错误"),
  34 + USER_NOT_EXISTS(400015,"用户不存在"),
35 35 HAVE_NO_PERMISSION(500002,"没有修改权限");
36 36 private final int code;
37 37 private String message;
... ...
... ... @@ -131,7 +131,7 @@ public class YtAlarmInfoServiceImpl implements YtAlarmInfoService {
131 131 return ytPageData;
132 132 } catch (Exception e) {
133 133 log.error("create TBAlarmInfo error {}", e.getMessage());
134   - throw new YtDataValidationException(ErrorMessage.CONNECT_TO_TB_ERROR.getMessage());
  134 + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
135 135 }
136 136 //return getPageData(alarmInfoIPage,AlarmInfoDTO.class);
137 137 }
... ...
... ... @@ -52,7 +52,6 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
52 52
53 53 private final AdminSettingMapper adminSettingMapper;
54 54 private final ObjectMapper mapper;
55   - private final TenantMapper tenantMapper;
56 55 private final RoleMapper roleMapper;
57 56 private final OrganizationMapper organizationMapper;
58 57 private final UserRoleMapper userRoleMapper;
... ... @@ -464,6 +463,18 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
464 463 }
465 464
466 465 @Override
  466 + public String findUserCustomerIdById(String id) {
  467 + if(StringUtils.isAllEmpty(id)){
  468 + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  469 + }
  470 + String customerId = baseMapper.findUserCustomerIdById(id);
  471 + if(null == customerId){
  472 + throw new YtDataValidationException(ErrorMessage.USER_NOT_EXISTS.getMessage());
  473 + }
  474 + return customerId;
  475 + }
  476 +
  477 + @Override
467 478 public UserDTO accountExist(String userName, String tenantId) {
468 479 if (StringUtils.isEmpty(userName)) {
469 480 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
... ...
... ... @@ -35,4 +35,6 @@ public interface UserMapper extends BaseMapper<User> {
35 35 @Param("userId") String userId, @Param("activeToken") String activeToken);
36 36
37 37 UserDTO findUserInfo(UserDTO userDTO);
  38 +
  39 + String findUserCustomerIdById(@Param("userId") String userId);
38 40 }
... ...
... ... @@ -17,23 +17,29 @@ import java.util.Set;
17 17 public interface YtUserService {
18 18 List<UserDetailsDTO> findUserDetailsByUsername(String username);
19 19
20   - UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isTenantAdmin,String tenantId);
  20 + UserDTO saveAccount(
  21 + UserDTO userDTO, boolean sendEmail, boolean sendMsg, boolean isTenantAdmin, String tenantId);
21 22
22   - String getActivationLink(String userId,boolean isPtSysadmin,String tenantId);
  23 + String getActivationLink(String userId, boolean isPtSysadmin, String tenantId);
23 24
24   - Optional<UserDTO> getUser(String userId,boolean isPtSysadmin,String tenantId);
  25 + Optional<UserDTO> getUser(String userId, boolean isPtSysadmin, String tenantId);
25 26
26   - UserInfoDTO me(String userId,String tenantId,Set<String> currentRoles);
  27 + UserInfoDTO me(String userId, String tenantId, Set<String> currentRoles);
27 28
28   - YtPageData<UserDTO> page(Map<String, Object> queryMap, boolean isPtSysadmin, boolean isPlatformAdmin, boolean isTenantAdmin, String tenantId);
  29 + YtPageData<UserDTO> page(
  30 + Map<String, Object> queryMap,
  31 + boolean isPtSysadmin,
  32 + boolean isPlatformAdmin,
  33 + boolean isTenantAdmin,
  34 + String tenantId);
29 35
30   - UserDTO updateUser(UserDTO userDTO,boolean isPtSysadmin,String tenantId);
  36 + UserDTO updateUser(UserDTO userDTO, boolean isPtSysadmin, String tenantId);
31 37
32   - boolean deleteUser(Set<String> userIds,boolean isPtSysadmin,String tenantId);
  38 + boolean deleteUser(Set<String> userIds, boolean isPtSysadmin, String tenantId);
33 39
34   - UserDTO saveTenantAdmin(UserDTO userDTO,boolean isPtSysadmin,String tenantId);
  40 + UserDTO saveTenantAdmin(UserDTO userDTO, boolean isPtSysadmin, String tenantId);
35 41
36   - void resetPassword(String userId,boolean isPtSysadmin,String tenantId);
  42 + void resetPassword(String userId, boolean isPtSysadmin, String tenantId);
37 43
38 44 List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber);
39 45
... ... @@ -53,11 +59,12 @@ public interface YtUserService {
53 59 * @param username 账号
54 60 * @return 账号信息
55 61 */
56   - UserDTO accountExist(String username,String tenantId);
  62 + UserDTO accountExist(String username, String tenantId);
57 63
58 64 User validateChangePasswordAccount(AccountReqDTO accountReqDTO);
59 65
60   - Optional<List<UserDTO>> getOrganizationUserByOrganizationId(String organizationId,String tenantId);
  66 + Optional<List<UserDTO>> getOrganizationUserByOrganizationId(
  67 + String organizationId, String tenantId);
61 68
62 69 /**
63 70 * 查询用户关联的Role或者Group
... ... @@ -74,4 +81,12 @@ public interface YtUserService {
74 81 * @return 修改成功、失败
75 82 */
76 83 boolean changePassword(User user);
  84 +
  85 + /**
  86 + * 通过用户ID查找TB的CustomerId
  87 + *
  88 + * @param id 用户ID
  89 + * @return CustomerId
  90 + */
  91 + String findUserCustomerIdById(String id);
77 92 }
... ...
... ... @@ -172,4 +172,9 @@
172 172 WHERE su.username=#{username}
173 173 AND su.tenant_id=#{tenantId}
174 174 </select>
  175 +
  176 + <select id="findUserCustomerIdById" resultType="java.lang.String">
  177 + SELECT tu.customer_id FROM sys_user su LEFT JOIN tb_user tu ON su.tb_user = CAST(tu.id AS VARCHAR)
  178 + WHERE su.id = #{userId}
  179 + </select>
175 180 </mapper>
... ...