Commit 3478cd7ed7e40f2d0349369b7a6b92cf891ea9b7

Authored by 黄 x
1 parent 03235e57

fix: [DEFECT-799] ptAdmin allow manager tenant

... ... @@ -53,14 +53,15 @@ public class TkAdminController extends BaseController {
53 53
54 54 private final TkTenantService tkTenantService;
55 55 private final MenuService menuService;
56   - private final TkUserService userService;
  56 + private final TkUserService tkUserService;
57 57 private final TenantService tenantService;
58 58 private final InstallScripts installScripts;
59 59 private final UserService tbUserService;
60 60
61 61 @PostMapping("/tenant")
62 62 @Deprecated
63   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:post'})")
  63 + @PreAuthorize(
  64 + "@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:post'})")
64 65 public ResponseEntity<TenantDTO> saveTenant(@RequestBody TenantReqDTO tenantReqDTO) {
65 66 TenantDTO newTenant = tkTenantService.createNewTenant(tenantReqDTO);
66 67 URI location =
... ... @@ -92,7 +93,8 @@ public class TkAdminController extends BaseController {
92 93 }
93 94
94 95 @PutMapping("/tenant")
95   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:update'})")
  96 + @PreAuthorize(
  97 + "@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:update'})")
96 98 public TenantDTO updateTenant(@RequestBody TenantDTO tenantDTO) {
97 99 Assert.notNull(tenantDTO, "tenant cannot be null");
98 100 Assert.notNull(tenantDTO.getId(), "tenant id cannot be null when update");
... ... @@ -106,7 +108,8 @@ public class TkAdminController extends BaseController {
106 108 }
107 109
108 110 @DeleteMapping("/tenant")
109   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:delete'})")
  111 + @PreAuthorize(
  112 + "@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:delete'})")
110 113 public void deleteTenant(@Validated(DeleteGroup.class) @RequestBody DeleteDTO deleteDTO)
111 114 throws ThingsboardException {
112 115
... ... @@ -130,20 +133,20 @@ public class TkAdminController extends BaseController {
130 133 }
131 134
132 135 @DeleteMapping("/user/deleteTenantAdmin")
133   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:user:deleteTenantAdmin:delete'})")
  136 + @PreAuthorize(
  137 + "@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:user:deleteTenantAdmin:delete'})")
134 138 public ResponseEntity<Boolean> deleteTenantAdmin(
135 139 @Validated(DeleteGroup.class) @RequestBody DeleteDTO deleteDTO) throws ThingsboardException {
136 140 for (String strUserId : deleteDTO.getIds()) {
137   - UserDTO userDTO = userService.findUserInfoById(strUserId);
  141 + UserDTO userDTO = tkUserService.findUserInfoById(strUserId);
138 142 if (null != userDTO && StringUtils.isNotBlank(userDTO.getTbUser())) {
139   - deleteTenantAdmin(userDTO.getTbUser());
  143 + deleteTenantAdmin(userDTO.getTbUser(), getCurrentUser().isPtAdmin());
140 144 }
141 145 }
  146 + boolean allowDelete = getCurrentUser().isPtSysadmin() || getCurrentUser().isPtAdmin();
142 147 boolean result =
143   - userService.deleteUser(
144   - deleteDTO.getIds(),
145   - getCurrentUser().isPtSysadmin(),
146   - getCurrentUser().getCurrentTenantId());
  148 + tkUserService.deleteUser(
  149 + deleteDTO.getIds(), allowDelete, getCurrentUser().getCurrentTenantId());
147 150 return ResponseEntity.ok(result);
148 151 }
149 152
... ... @@ -153,7 +156,8 @@ public class TkAdminController extends BaseController {
153 156 }
154 157
155 158 @PostMapping("/tenant/adminUser")
156   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:adminUser:post'})")
  159 + @PreAuthorize(
  160 + "@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:admin:tenant:adminUser:post'})")
157 161 public ResponseEntity<UserDTO> createTenantAdmin(
158 162 @RequestParam(value = "sendEmail", required = false, defaultValue = "false")
159 163 boolean sendEmail,
... ... @@ -161,14 +165,14 @@ public class TkAdminController extends BaseController {
161 165 @RequestBody UserDTO userDTO)
162 166 throws ThingsboardException {
163 167 UserDTO newUserDTO =
164   - userService.saveAccount(
  168 + tkUserService.saveAccount(
165 169 userDTO,
166 170 sendEmail,
167 171 sendMsg,
168 172 getCurrentUser().isPtSysadmin(),
169 173 getCurrentUser().getCurrentTenantId());
170 174 Optional<UserDTO> optional =
171   - userService.getUser(
  175 + tkUserService.getUser(
172 176 newUserDTO.getId(),
173 177 getCurrentUser().isPtSysadmin(),
174 178 getCurrentUser().getCurrentTenantId());
... ... @@ -190,7 +194,8 @@ public class TkAdminController extends BaseController {
190 194 getCurrentUser().getCurrentTenantId(),
191 195 getCurrentUser().getCurrentUserId(),
192 196 getCurrentUser().isPtSysadmin(),
193   - getCurrentUser().isPtTenantAdmin(),needButton));
  197 + getCurrentUser().isPtTenantAdmin(),
  198 + needButton));
194 199 }
195 200
196 201 @PutMapping("/menu/assign/{tenantId}")
... ... @@ -208,10 +213,15 @@ public class TkAdminController extends BaseController {
208 213 return tkTenantService.updateOrCreateTenant(tenantReqDTO);
209 214 }
210 215
211   - private void deleteTenantAdmin(String strUserId) throws ThingsboardException {
  216 + private void deleteTenantAdmin(String strUserId, boolean isPtAdmin) throws ThingsboardException {
212 217 try {
213 218 UserId currentUserId = new UserId(toUUID(strUserId));
214   - User user = checkUserId(currentUserId, Operation.DELETE);
  219 + User user;
  220 + if (isPtAdmin) {
  221 + user = userService.findUserById(getCurrentUser().getTenantId(), currentUserId);
  222 + } else {
  223 + user = checkUserId(currentUserId, Operation.DELETE);
  224 + }
215 225 List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(getTenantId(), currentUserId);
216 226 tbUserService.deleteUser(getTenantId(), currentUserId);
217 227 logEntityAction(
... ...
... ... @@ -29,7 +29,7 @@ public class TkRoleController extends BaseController {
29 29 private final RoleService roleService;
30 30
31 31 @GetMapping(params = {PAGE_SIZE, PAGE})
32   - @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')")
  32 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN','TENANT_ADMIN')")
33 33 public YtPageData<RoleDTO> pageRole(
34 34 @RequestParam(PAGE_SIZE) int pageSize,
35 35 @RequestParam(PAGE) int page,
... ... @@ -46,13 +46,16 @@ public class TkRoleController extends BaseController {
46 46 if (status != null) {
47 47 queryMap.put("status", status == 1);
48 48 }
  49 + if (getCurrentUser().isPtAdmin()){
  50 + roleType = RoleEnum.TENANT_ADMIN;
  51 + }
49 52 if(roleType !=null){
50 53 queryMap.put("roleType", roleType.name());
51 54 }
52 55 if (orderType != null) {
53 56 queryMap.put(ORDER_TYPE, orderType.name());
54 57 }
55   - return roleService.page(getCurrentUser().getCurrentTenantId(),queryMap);
  58 + return roleService.page(getCurrentUser().getCurrentTenantId(), queryMap);
56 59 }
57 60
58 61 @DeleteMapping
... ...
... ... @@ -37,7 +37,7 @@ public class TkTenantController extends AbstractUserAccount {
37 37 }
38 38
39 39 @PostMapping("/reset_password/{userId}")
40   - @PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
  40 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN')")
41 41 public void resetPassword(@PathVariable("userId") String userId) throws ThingsboardException {
42 42 //check is tenant account
43 43 UserDTO userDTO = userService.checkAccount(userId,2);
... ...
... ... @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.RequestParam;
8 8 import org.springframework.web.bind.annotation.RestController;
9 9 import org.thingsboard.server.common.data.TenantProfile;
10 10 import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.id.TenantId;
11 12 import org.thingsboard.server.common.data.page.PageData;
12 13 import org.thingsboard.server.common.data.page.PageLink;
13 14 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
... ... @@ -16,6 +17,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
16 17 import org.thingsboard.server.controller.BaseController;
17 18
18 19 import java.util.List;
  20 +import java.util.UUID;
19 21
20 22 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
21 23
... ... @@ -24,7 +26,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
24 26 @RequiredArgsConstructor
25 27 public class TkTenantProfilesController extends BaseController {
26 28
27   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN'},{})")
  29 + @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{})")
28 30 @GetMapping(
29 31 name = "page",
30 32 params = {PAGE_SIZE, PAGE})
... ... @@ -44,8 +46,12 @@ public class TkTenantProfilesController extends BaseController {
44 46 textSearch,
45 47 orderBy,
46 48 null == orderType ? OrderTypeEnum.DESC.name() : orderType.name());
  49 + TenantId tenantId = getTenantId();
  50 + if(getCurrentUser().isPtAdmin()){
  51 + tenantId = new TenantId(UUID.fromString(getCurrentUser().getCurrentTenantId()));
  52 + }
47 53 PageData<TenantProfile> tenantProfilePageData =
48   - tenantProfileService.findTenantProfiles(getTenantId(), pageLink);
  54 + tenantProfileService.findTenantProfiles(tenantId, pageLink);
49 55 List<TenantProfile> targetList =
50 56 ReflectUtils.sourceToTarget(tenantProfilePageData.getData(), TenantProfile.class);
51 57 return new YtPageData<>(targetList, tenantProfilePageData.getTotalElements());
... ...
... ... @@ -61,15 +61,19 @@ public class TkUserController extends AbstractUserAccount {
61 61
62 62 private final TkUserService userService;
63 63 private final AccountProperties accountProperties;
64   - public TkUserController(UserService tbUserService, ApplicationEventPublisher eventPublisher,
65   - SystemSecurityService systemSecurityService,
66   - BCryptPasswordEncoder passwordEncoder,
67   - TkUserService userService,
68   - AccountProperties accountProperties) {
69   - super(tbUserService,eventPublisher,systemSecurityService,passwordEncoder);
  64 +
  65 + public TkUserController(
  66 + UserService tbUserService,
  67 + ApplicationEventPublisher eventPublisher,
  68 + SystemSecurityService systemSecurityService,
  69 + BCryptPasswordEncoder passwordEncoder,
  70 + TkUserService userService,
  71 + AccountProperties accountProperties) {
  72 + super(tbUserService, eventPublisher, systemSecurityService, passwordEncoder);
70 73 this.userService = userService;
71 74 this.accountProperties = accountProperties;
72 75 }
  76 +
73 77 @GetMapping("{userId}")
74 78 @PreAuthorize("@check.checkPermissions({},{'api:yt:user:get'})")
75 79 public ResponseEntity<UserDTO> getUser(@PathVariable("userId") String userId)
... ... @@ -93,11 +97,10 @@ public class TkUserController extends AbstractUserAccount {
93 97 @GetMapping(
94 98 path = "page",
95 99 params = {PAGE_SIZE, PAGE})
  100 + @ApiOperation(value = "获取用户分页数据")
96 101 public YtPageData<UserDTO> pageUser(
97 102 @RequestParam(PAGE_SIZE) int pageSize,
98 103 @RequestParam(PAGE) int page,
99   - @RequestParam(value = "realName", required = false) String realName,
100   - @RequestParam(value = "username", required = false) String username,
101 104 @RequestParam(value = "tenantId", required = false) String tenantId,
102 105 @RequestParam(value = "organizationId", required = false) String organizationId,
103 106 @RequestParam(value = "roleType", required = false) RoleEnum roleType,
... ... @@ -108,8 +111,6 @@ public class TkUserController extends AbstractUserAccount {
108 111 queryMap.put(PAGE_SIZE, pageSize);
109 112 queryMap.put(PAGE, page);
110 113 queryMap.put(ORDER_FILED, orderBy);
111   - queryMap.put("realName", realName);
112   - queryMap.put("username", username);
113 114 if (null != roleType && roleType.equals(RoleEnum.TENANT_ADMIN)) {
114 115 queryMap.put("roleType", roleType.name());
115 116 } else {
... ... @@ -127,6 +128,31 @@ public class TkUserController extends AbstractUserAccount {
127 128 queryMap, getCurrentUser().isPtSysadmin(), getCurrentUser().isTenantAdmin());
128 129 }
129 130
  131 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN')")
  132 + @GetMapping(
  133 + path = "/tenant/page",
  134 + params = {PAGE_SIZE, PAGE})
  135 + @ApiOperation(value = "获取租户管理员分页数据")
  136 + public YtPageData<UserDTO> tenantPage(
  137 + @RequestParam(PAGE_SIZE) int pageSize,
  138 + @RequestParam(PAGE) int page,
  139 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  140 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType,
  141 + @RequestParam(TENANT_ID) String tenantId)
  142 + throws ThingsboardException {
  143 + HashMap<String, Object> queryMap = new HashMap<>();
  144 + queryMap.put(PAGE_SIZE, pageSize);
  145 + queryMap.put(PAGE, page);
  146 + if (orderType != null) {
  147 + queryMap.put(ORDER_TYPE, orderType.name());
  148 + }
  149 + queryMap.put(ORDER_FILED, orderBy);
  150 + if (StringUtils.isEmpty(tenantId)) {
  151 + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  152 + }
  153 + return userService.tenantPage(queryMap, tenantId);
  154 + }
  155 +
130 156 @PutMapping
131 157 @ApiOperation(value = "修改用户信息")
132 158 @PreAuthorize("@check.checkPermissions({},{'api:yt:user:update'})")
... ... @@ -138,12 +164,13 @@ public class TkUserController extends AbstractUserAccount {
138 164
139 165 @PutMapping("/center")
140 166 @ApiOperation(value = "修改个人中心")
141   - public UserInfoDTO updatePersonalCenter(@Validated(UpdateGroup.class) @RequestBody UserDTO userDTO) throws ThingsboardException {
  167 + public UserInfoDTO updatePersonalCenter(
  168 + @Validated(UpdateGroup.class) @RequestBody UserDTO userDTO) throws ThingsboardException {
142 169 userService.updatePersonalCenter(userDTO);
143 170 return userService.me(
144   - getCurrentUser().getCurrentUserId(),
145   - getCurrentUser().getCurrentTenantId(),
146   - getCurrentUser().getRoles());
  171 + getCurrentUser().getCurrentUserId(),
  172 + getCurrentUser().getCurrentTenantId(),
  173 + getCurrentUser().getRoles());
147 174 }
148 175
149 176 @PostMapping
... ... @@ -156,7 +183,7 @@ public class TkUserController extends AbstractUserAccount {
156 183 @Validated({AddGroup.class}) @RequestBody UserDTO userDTO)
157 184 throws ThingsboardException {
158 185
159   - //检查用户手机号、邮箱
  186 + // 检查用户手机号、邮箱
160 187 userService.validateUserNameAndPhoneNumberAndEmail(userDTO);
161 188 // 如果当前用户是租户管理员,则代表创建的用户为CUSTOMER_USER,则需要调用TB,否则为本平台的管理员不需要调用TB
162 189 boolean isTenantAdminOperator = getCurrentUser().isPtTenantAdmin();
... ... @@ -169,7 +196,7 @@ public class TkUserController extends AbstractUserAccount {
169 196 createTBUser(
170 197 tbUser, userDTO, customer.getTenantId(), customer.getId(), Authority.CUSTOMER_USER);
171 198 // 激活CUSTOMER_USER的管理员
172   - activeTBUser(tbUser.getId(),userDTO.getPassword());
  199 + activeTBUser(tbUser.getId(), userDTO.getPassword(),null,false);
173 200 }
174 201 return ResponseEntity.ok(
175 202 userService.saveAccount(
... ... @@ -180,8 +207,7 @@ public class TkUserController extends AbstractUserAccount {
180 207 getCurrentUser().getCurrentTenantId()));
181 208 }
182 209
183   -
184   - @PreAuthorize("@check.checkPermissions({'SYS_ADMIN'},{'api:yt:user:saveTenantAdmin:post'})")
  210 + @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{'api:yt:user:saveTenantAdmin:post'})")
185 211 @PostMapping("save_tenant_admin")
186 212 public UserDTO saveTenantAdmin(@Validated(AddGroup.class) @RequestBody UserDTO userDTO)
187 213 throws ThingsboardException {
... ... @@ -190,7 +216,7 @@ public class TkUserController extends AbstractUserAccount {
190 216 }
191 217 userService.validateUserNameAndPhoneNumberAndEmail(userDTO);
192 218 userService.validateTenantRole(userDTO.getTenantId());
193   - //租户角色不存在,会留存脏数据
  219 + // 租户角色不存在,会留存脏数据
194 220 TenantId tenantId = TenantId.fromUUID(UUID.fromString(userDTO.getTenantId()));
195 221 try {
196 222 // 创建TB的租户管理员
... ... @@ -200,14 +226,14 @@ public class TkUserController extends AbstractUserAccount {
200 226 if (null == userDTO.getId()) {
201 227 tbUser = createTBUser(tbUser, userDTO, tenantId, customerId, Authority.TENANT_ADMIN);
202 228 // 激活租户管理员
203   - activeTBUser(tbUser.getId(),accountProperties.getDefaultPassword());
  229 + activeTBUser(tbUser.getId(), accountProperties.getDefaultPassword(),tbUser.getTenantId(),true);
204 230 }
205 231 } catch (Exception e) {
206 232 throw handleException(e);
207 233 }
208 234
209 235 return userService.saveTenantAdmin(
210   - userDTO, getCurrentUser().isPtSysadmin(), tenantId.getId().toString());
  236 + userDTO, getCurrentUser().isPtSysadmin(), tenantId.getId().toString());
211 237 }
212 238
213 239 @DeleteMapping
... ... @@ -249,16 +275,16 @@ public class TkUserController extends AbstractUserAccount {
249 275 @GetMapping("/account_exist/{username}")
250 276 public ResponseResult<UserDTO> accountExist(@PathVariable String username)
251 277 throws ThingsboardException {
252   - return ResponseResult.success(
253   - userService.accountExist(username));
  278 + return ResponseResult.success(userService.accountExist(username));
254 279 }
255 280
256 281 @ApiOperation(value = "判断电话是否重复")
257 282 @GetMapping("/get_user/{phoneNumber}")
258   - public ResponseResult<UserDTO> findUserByPhoneNumber(@PathVariable String phoneNumber) throws ThingsboardException {
259   - return ResponseResult.success(
260   - userService.findUserByPhoneNumber(phoneNumber));
  283 + public ResponseResult<UserDTO> findUserByPhoneNumber(@PathVariable String phoneNumber)
  284 + throws ThingsboardException {
  285 + return ResponseResult.success(userService.findUserByPhoneNumber(phoneNumber));
261 286 }
  287 +
262 288 @PostMapping("/relation")
263 289 public String[] getUserRoleOrGroup(
264 290 @Validated @RequestBody RoleOrOrganizationReqDTO roleOrGroupReqDTO) {
... ... @@ -269,16 +295,14 @@ public class TkUserController extends AbstractUserAccount {
269 295 @ApiOperation(value = "修改密码")
270 296 public ResponseResult<Boolean> changePassword(@RequestBody AccountReqDTO accountReqDTO)
271 297 throws ThingsboardException {
272   - SysUserEntity user =
273   - userService.validateChangePasswordAccount(accountReqDTO);
  298 + SysUserEntity user = userService.validateChangePasswordAccount(accountReqDTO);
274 299 String resetPassword = accountReqDTO.getResetPassword();
275 300 if (!getCurrentUser().isPtAdmin()) {
276   - updatePassword(resetPassword,getCurrentUser());
  301 + updatePassword(resetPassword, getCurrentUser());
277 302 }
278 303 return ResponseResult.success(userService.changePassword(user));
279 304 }
280 305
281   -
282 306 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN'},{})")
283 307 @ApiOperation(value = "获取租户下对应组织的所有客户")
284 308 @GetMapping("/customers/{organizationId}")
... ... @@ -325,13 +349,17 @@ public class TkUserController extends AbstractUserAccount {
325 349 * @param userId 用户ID
326 350 * @throws ThingsboardException tb运行异常
327 351 */
328   - private void activeTBUser(UserId userId,String password) throws ThingsboardException {
  352 + private void activeTBUser(UserId userId, String password,TenantId tenantId ,boolean isPtAdmin) throws ThingsboardException {
329 353 try {
330 354 // 1、获取UserCredentials 并获取activateToken
331   - User user = checkUserId(userId, Operation.READ);
332   - SecurityUser authUser = getCurrentUser();
  355 + if(!isPtAdmin){
  356 + User user = checkUserId(userId, Operation.READ);
  357 + userId = user.getId();
  358 + SecurityUser authUser = getCurrentUser();
  359 + tenantId = authUser.getTenantId();
  360 + }
333 361 UserCredentials userCredentials =
334   - tbUserService.findUserCredentialsByUserId(authUser.getTenantId(), user.getId());
  362 + tbUserService.findUserCredentialsByUserId(tenantId, userId);
335 363 // 2、进行激活
336 364 String encodedPassword = passwordEncoder.encode(password);
337 365 UserCredentials credentials =
... ... @@ -362,7 +390,7 @@ public class TkUserController extends AbstractUserAccount {
362 390 tbUser.setAuthority(authority);
363 391 tbUser.setTenantId(tenantId);
364 392 tbUser.setCustomerId(customerId);
365   - tbUser.setEmail(userDTO.getUsername() +"@"+ accountProperties.getEmailSuffix());
  393 + tbUser.setEmail(userDTO.getUsername() + "@" + accountProperties.getEmailSuffix());
366 394 tbUser = tbUserService.saveUser(tbUser);
367 395 userDTO.setTbUser(tbUser.getId().getId().toString());
368 396 logEntityAction(
... ...
... ... @@ -60,21 +60,19 @@ import static org.thingsboard.server.common.data.yunteng.constant.ModelConstants
60 60 public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserEntity>
61 61 implements TkUserService {
62 62
  63 + public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s";
63 64 private final AdminSettingMapper adminSettingMapper;
64 65 private final ObjectMapper mapper;
65 66 private final RoleMapper roleMapper;
66 67 private final OrganizationMapper organizationMapper;
67 68 private final UserRoleMapper userRoleMapper;
68 69 private final TenantRoleMapper tenantRoleMapper;
69   -
70 70 private final TkSmsService tkSmsService;
71 71 private final TkMessageTemplateService messageTemplateService;
72 72 private final TkOrganizationService organizationService;
73 73 private final UserOrganizationMappingService userOrganizationMappingService;
74 74 private final SceneLinkageService sceneLinkageService;
75 75 private final SceneLinkageMapper sceneLinkageMapper;
76   -
77   - public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s";
78 76 private final PasswordEncoder passwordEncoder;
79 77
80 78 private final CacheUtils cacheUtils;
... ... @@ -83,6 +81,7 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
83 81 private final AccountProperties accountProperties;
84 82
85 83 private final TenantMapper tenantMapper;
  84 +
86 85 @Override
87 86 public List<UserDetailsDTO> findUserDetailsByUsername(String username, String tenantId) {
88 87 // 多个租户可能存在多个username相同的情况
... ... @@ -146,7 +145,8 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
146 145 if (null == userDTO.getId()) {
147 146 SysUserEntity existUser =
148 147 baseMapper.selectOne(
149   - new LambdaQueryWrapper<SysUserEntity>().eq(SysUserEntity::getUsername, userDTO.getUsername()));
  148 + new LambdaQueryWrapper<SysUserEntity>()
  149 + .eq(SysUserEntity::getUsername, userDTO.getUsername()));
150 150 if (null != existUser) {
151 151 throw new YtDataValidationException(ErrorMessage.USER_NAME_ALREADY_EXISTS.getMessage());
152 152 }
... ... @@ -161,8 +161,7 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
161 161 throw new YtDataValidationException(ErrorMessage.PROVIDE_CORRECT_EMAIL.getMessage());
162 162 }
163 163 }
164   - if (StringUtils.isEmpty(userDTO.getEmail())
165   - && StringUtils.isEmpty(userDTO.getPhoneNumber())) {
  164 + if (StringUtils.isEmpty(userDTO.getEmail()) && StringUtils.isEmpty(userDTO.getPhoneNumber())) {
166 165 throw new YtDataValidationException(ErrorMessage.PHONE_NUMBER_OR_EMAIL_REQUIRED.getMessage());
167 166 }
168 167 boolean needCheck = true;
... ... @@ -201,7 +200,7 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
201 200 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
202 201 }
203 202 SysUserEntity user = baseMapper.selectById(id);
204   - return null !=user?user.getDTO(UserDTO.class):null;
  203 + return null != user ? user.getDTO(UserDTO.class) : null;
205 204 }
206 205
207 206 @Override
... ... @@ -219,7 +218,9 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
219 218 adminSettingMapper.selectList(
220 219 new QueryWrapper<SysAdminSettingEntity>()
221 220 .lambda()
222   - .eq(SysAdminSettingEntity::getKey, ModelConstants.AdminSettingConfigKey.GENERAL_SETTING));
  221 + .eq(
  222 + SysAdminSettingEntity::getKey,
  223 + ModelConstants.AdminSettingConfigKey.GENERAL_SETTING));
223 224 SysAdminSettingEntity adminSetting = generalSetting.get(0);
224 225 JsonNode configNode = mapper.readTree(adminSetting.getConfigJson());
225 226 String baseUrl = configNode.get(FastIotConstants.ConfigJSONKey.BASE_URL).asText();
... ... @@ -237,10 +238,17 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
237 238 userInfoDTO.setNeedSetPwd(false);
238 239 }
239 240 AtomicReference<LocalDateTime> expireTime = new AtomicReference<>(user.getAccountExpireTime());
240   - if(expireTime.get() == null){
241   - SysTenantEntity tenant =tenantMapper.selectOne(new QueryWrapper<SysTenantEntity>().lambda().eq(SysTenantEntity::getTenantId,tenantId));
242   - Optional.ofNullable(tenant).ifPresent(i -> {
243   - expireTime.set(i.getTenantExpireTime());});
  241 + if (expireTime.get() == null) {
  242 + SysTenantEntity tenant =
  243 + tenantMapper.selectOne(
  244 + new QueryWrapper<SysTenantEntity>()
  245 + .lambda()
  246 + .eq(SysTenantEntity::getTenantId, tenantId));
  247 + Optional.ofNullable(tenant)
  248 + .ifPresent(
  249 + i -> {
  250 + expireTime.set(i.getTenantExpireTime());
  251 + });
244 252 }
245 253 userInfoDTO.setAccountExpireTime(expireTime.get());
246 254 userInfoDTO.setUserId(userId);
... ... @@ -325,15 +333,10 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
325 333 queryMap.put("userIds", userIds);
326 334 }
327 335 if (isPtSysadmin) {
328   - String roleType = (String) queryMap.get("roleType");
329   - if (!StringUtils.isEmpty(roleType)) {
330   - userPage = baseMapper.getTenantAdminPage(userIPage, tenantId);
  336 + if (null != organizationId && (userIds.size() == FastIotConstants.MagicNumber.ZERO)) {
  337 + userPage = new Page<>();
331 338 } else {
332   - if (null != organizationId && (userIds.size() == FastIotConstants.MagicNumber.ZERO)) {
333   - userPage = new Page<>();
334   - } else {
335   - userPage = baseMapper.getUserPage(userIPage, queryMap);
336   - }
  339 + userPage = baseMapper.getUserPage(userIPage, queryMap);
337 340 }
338 341 } else if (isTenantAdmin) {
339 342 if (null != organizationId && (userIds.size() == FastIotConstants.MagicNumber.ZERO)) {
... ... @@ -356,6 +359,23 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
356 359 return getPageData(userPage, UserDTO.class);
357 360 }
358 361
  362 + @Override
  363 + public YtPageData<UserDTO> tenantPage(Map<String, Object> queryMap, String tenantId) {
  364 + IPage<SysUserEntity> userIPage = getPage(queryMap, "create_time", false);
  365 + IPage<UserDTO> userPage = baseMapper.getTenantAdminPage(userIPage, tenantId);
  366 + if (null != userPage) {
  367 + userPage
  368 + .getRecords()
  369 + .forEach(
  370 + record -> {
  371 + fillUserStatus(record);
  372 + record.setHasPassword(StringUtils.isNotBlank(record.getActivateToken()));
  373 + record.setPassword(null);
  374 + });
  375 + }
  376 + return getPageData(userPage, UserDTO.class);
  377 + }
  378 +
359 379 private void fillUserStatus(UserDTO userDTO) {
360 380 userDTO.setUserStatusEnum(UserStatusEnum.NORMAL);
361 381 if (!userDTO.isEnabled()) {
... ... @@ -395,18 +415,16 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
395 415 baseMapper.deleteBatchIds(userIds);
396 416
397 417 // 5、删除场景联动
398   - Wrapper filter = new QueryWrapper<TkSceneLinkageEntity>().lambda()
399   - .in(TkSceneLinkageEntity::getCreator,userIds);
400   - List<TkSceneLinkageEntity> sceneLinkages =sceneLinkageMapper.selectList(filter);
401   - if(sceneLinkages ==null || sceneLinkages.isEmpty()){
  418 + Wrapper filter =
  419 + new QueryWrapper<TkSceneLinkageEntity>()
  420 + .lambda()
  421 + .in(TkSceneLinkageEntity::getCreator, userIds);
  422 + List<TkSceneLinkageEntity> sceneLinkages = sceneLinkageMapper.selectList(filter);
  423 + if (sceneLinkages == null || sceneLinkages.isEmpty()) {
402 424 return true;
403 425 }
404   - Set<String> sceneIds = sceneLinkages.stream()
405   - .map(i -> i.getId())
406   - .collect(Collectors.toSet());
407   - sceneLinkageService.deleteSceneLinkage(sceneIds, tenantId,null);
408   -
409   -
  426 + Set<String> sceneIds = sceneLinkages.stream().map(i -> i.getId()).collect(Collectors.toSet());
  427 + sceneLinkageService.deleteSceneLinkage(sceneIds, tenantId, null);
410 428
411 429 return true;
412 430 }
... ... @@ -423,12 +441,14 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
423 441 user.setLevel(FastIotConstants.LevelValue.IS_TENANT_ADMIN);
424 442 List<SysUserEntity> users =
425 443 baseMapper.selectList(
426   - new QueryWrapper<SysUserEntity>().lambda().eq(SysUserEntity::getUsername, userDTO.getUsername()));
  444 + new QueryWrapper<SysUserEntity>()
  445 + .lambda()
  446 + .eq(SysUserEntity::getUsername, userDTO.getUsername()));
427 447 if (!users.isEmpty()) {
428 448 throw new YtDataValidationException("用户已存在");
429 449 }
430 450 baseMapper.insert(user);
431   - List<SysTenantRoleEntity> tenantRoleList =validateTenantRole(userDTO.getTenantId()) ;
  451 + List<SysTenantRoleEntity> tenantRoleList = validateTenantRole(userDTO.getTenantId());
432 452 for (SysTenantRoleEntity tenantRole : tenantRoleList) {
433 453 roleMapper.saveUserRoleMapping(user.getId(), tenantRole.getRoleId());
434 454 }
... ... @@ -439,10 +459,10 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
439 459 @Override
440 460 public List<SysTenantRoleEntity> validateTenantRole(String tenantId) {
441 461 List<SysTenantRoleEntity> tenantRoleList =
442   - tenantRoleMapper.selectList(
443   - new QueryWrapper<SysTenantRoleEntity>()
444   - .lambda()
445   - .eq(SysTenantRoleEntity::getTenantId, tenantId));
  462 + tenantRoleMapper.selectList(
  463 + new QueryWrapper<SysTenantRoleEntity>()
  464 + .lambda()
  465 + .eq(SysTenantRoleEntity::getTenantId, tenantId));
446 466 // 保存用户与角色的映射信息
447 467 if (null == tenantRoleList || tenantRoleList.size() == 0) {
448 468 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
... ... @@ -493,20 +513,21 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
493 513
494 514 SysUserEntity user =
495 515 baseMapper.selectOne(
496   - new QueryWrapper<SysUserEntity>().lambda().eq(SysUserEntity::getPhoneNumber, phoneNumber));
  516 + new QueryWrapper<SysUserEntity>()
  517 + .lambda()
  518 + .eq(SysUserEntity::getPhoneNumber, phoneNumber));
497 519
498   - if(StringUtils.isNotBlank(user.getTbUser())){
  520 + if (StringUtils.isNotBlank(user.getTbUser())) {
499 521 UserId userId = new UserId(UUID.fromString(user.getTbUser()));
500 522 UserCredentials userCredentials =
501   - tbUserService.findUserCredentialsByUserId(TenantId.SYS_TENANT_ID, userId);
  523 + tbUserService.findUserCredentialsByUserId(TenantId.SYS_TENANT_ID, userId);
502 524
503 525 userCredentials.setPassword(passwordEncoder.encode(pwd));
504 526 tbUserService.replaceUserCredentials(
505   - TenantId.fromUUID(UUID.fromString(user.getTenantId())), userCredentials);
  527 + TenantId.fromUUID(UUID.fromString(user.getTenantId())), userCredentials);
506 528 // eventPublisher.publishEvent(new UserAuthDataChangedEvent(userId));
507 529 }
508 530
509   -
510 531 user.setPassword(pwd);
511 532 changePassword(user);
512 533 }
... ... @@ -517,7 +538,7 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
517 538 }
518 539
519 540 @Override
520   - public void sendRestPasswordMsg(String tenantId,SendResetPasswordEmailMsg msg) {
  541 + public void sendRestPasswordMsg(String tenantId, SendResetPasswordEmailMsg msg) {
521 542 // 通过用户ID查询用户信息
522 543 SysUserEntity user = baseMapper.selectById(msg.getUserId());
523 544 if (null == user) {
... ... @@ -534,7 +555,8 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
534 555 List<MessageTemplateDTO> templateDTOList =
535 556 messageTemplateService.findMessageTemplate(messageTemplateDTO);
536 557 if (null == templateDTOList || templateDTOList.size() < 1) {
537   - throw new YtDataValidationException(ErrorMessage.TARGET_TEMPLATE_NOT_EXISTS_SELF_NOTICE.getMessage());
  558 + throw new YtDataValidationException(
  559 + ErrorMessage.TARGET_TEMPLATE_NOT_EXISTS_SELF_NOTICE.getMessage());
538 560 }
539 561 if (messageType.equalsIgnoreCase(MessageTypeEnum.PHONE_MESSAGE.name())) {
540 562 SmsReqDTO smsReqDTO = new SmsReqDTO();
... ... @@ -569,15 +591,24 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
569 591 if (roleOrGroupReqDTO.isQueryRole()) {
570 592 List<String> roleIds =
571 593 userRoleMapper
572   - .selectList(new QueryWrapper<SysUserRoleEntity>().lambda().eq(SysUserRoleEntity::getUserId, userId))
  594 + .selectList(
  595 + new QueryWrapper<SysUserRoleEntity>()
  596 + .lambda()
  597 + .eq(SysUserRoleEntity::getUserId, userId))
573 598 .stream()
574 599 .map(SysUserRoleEntity::getRoleId)
575 600 .collect(Collectors.toList());
576   - List<String> enableRoles = roleMapper.selectList(new QueryWrapper<SysRoleEntity>().lambda()
577   - .eq(SysRoleEntity::isEnabled, true).in(SysRoleEntity::getId,roleIds))
578   - .stream().map(m -> m.getId())
  601 + List<String> enableRoles =
  602 + roleMapper
  603 + .selectList(
  604 + new QueryWrapper<SysRoleEntity>()
  605 + .lambda()
  606 + .eq(SysRoleEntity::isEnabled, true)
  607 + .in(SysRoleEntity::getId, roleIds))
  608 + .stream()
  609 + .map(m -> m.getId())
579 610 .collect(Collectors.toList());
580   - if(enableRoles.size() == 0){
  611 + if (enableRoles.size() == 0) {
581 612 return null;
582 613 }
583 614 return enableRoles.toArray(new String[enableRoles.size()]);
... ... @@ -631,7 +662,7 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
631 662 }
632 663 if (isTenantAdmin) {
633 664 List<String> userList =
634   - userOrganizationMappingService.getUserIdByOrganizationIds(tenantId,organizationId);
  665 + userOrganizationMappingService.getUserIdByOrganizationIds(tenantId, organizationId);
635 666 if (null != userList && userList.size() > FastIotConstants.MagicNumber.ZERO) {
636 667 return baseMapper.getMyCustomers(tenantId, EntityId.NULL_UUID.toString(), userList);
637 668 }
... ... @@ -654,7 +685,9 @@ public class SysUserServiceImpl extends AbstractBaseService<UserMapper, SysUserE
654 685 public UserDTO checkAccount(String userId, Integer level) {
655 686 SysUserEntity user =
656 687 baseMapper.selectOne(
657   - new LambdaQueryWrapper<SysUserEntity>().eq(SysUserEntity::getId, userId).eq(SysUserEntity::getLevel, level));
  688 + new LambdaQueryWrapper<SysUserEntity>()
  689 + .eq(SysUserEntity::getId, userId)
  690 + .eq(SysUserEntity::getLevel, level));
658 691 return null != user ? user.getDTO(UserDTO.class) : null;
659 692 }
660 693
... ...
... ... @@ -34,6 +34,7 @@ public interface TkUserService {
34 34 Map<String, Object> queryMap,
35 35 boolean isPtSysadmin,
36 36 boolean isTenantAdmin);
  37 + YtPageData<UserDTO> tenantPage(Map<String, Object> queryMap,String tenantId);
37 38
38 39 UserDTO updateUser(UserDTO userDTO, boolean isPtSysadmin, String tenantId);
39 40
... ...