Commit d1b6e5dc0e45669c9cce1565a6661fe7e23212cb

Authored by 黄 x
1 parent b2ebb106

fix: 添加租户管理员账号时,限制用户的手机号、邮箱不能重复

... ... @@ -241,7 +241,7 @@ public class YtUserController extends BaseController {
241 241 @GetMapping("/findUserByPhoneNumber/{phoneNumber}")
242 242 public ResponseResult<UserDTO> findUserByPhoneNumber(@PathVariable String phoneNumber) throws ThingsboardException {
243 243 return ResponseResult.success(
244   - userService.findUserByPhoneNumber(phoneNumber,getCurrentUser().getCurrentTenantId()));
  244 + userService.findUserByPhoneNumber(phoneNumber));
245 245 }
246 246 @PostMapping("/relation")
247 247 public String[] getUserRoleOrGroup(
... ...
... ... @@ -41,6 +41,7 @@ public enum ErrorMessage {
41 41 DEVICE_RELATION_IS_ABSENT(400022,"设备关联关系已不存在"),
42 42 DATA_IS_DELETED(400023,"数据已经删除"),
43 43 CONVERT_JS_IS_ALONE(400024,"转换脚本只能启用一个"),
  44 + PHONE_OR_EMAIL_HAS_REGISTER(400025,"手机或邮箱已被使用"),
44 45 HAVE_NO_PERMISSION(500002,"没有修改权限");
45 46 private final int code;
46 47 private String message;
... ...
... ... @@ -118,7 +118,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
118 118 userRoleMapper.insert(userRole);
119 119 }
120 120 // 绑定用户和组织的关系
121   - organizationService.bindUserToOrganization(tenantId, user.getId(), userDTO.getOrganizationIds());
  121 + organizationService.bindUserToOrganization(
  122 + tenantId, user.getId(), userDTO.getOrganizationIds());
122 123 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
123 124 return userDTO;
124 125 }
... ... @@ -148,6 +149,33 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
148 149 && StringUtils.isAllBlank(userDTO.getPhoneNumber())) {
149 150 throw new YtDataValidationException(ErrorMessage.PHONE_NUMBER_OR_EMAIL_REQUIRED.getMessage());
150 151 }
  152 + boolean needCheck = false;
  153 + if (null != userDTO.getId()) {
  154 + User user = baseMapper.selectById(userDTO.getId());
  155 + if (!user.getPhoneNumber().equals(userDTO.getPhoneNumber())
  156 + || !user.getEmail().equals(userDTO.getEmail())) {
  157 + needCheck = true;
  158 + }
  159 + }
  160 + if (needCheck || null == userDTO.getId()) {
  161 + LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
  162 + if (null == userDTO.getId()) {
  163 + queryWrapper.eq(User::getPhoneNumber, userDTO.getPhoneNumber());
  164 + queryWrapper.or().eq(User::getEmail, userDTO.getEmail());
  165 + }
  166 + if (needCheck) {
  167 + queryWrapper.ne(User::getId, userDTO.getId());
  168 + queryWrapper.and(
  169 + (userQueryWrapper -> {
  170 + userQueryWrapper.eq(User::getPhoneNumber, userDTO.getPhoneNumber());
  171 + userQueryWrapper.or().eq(User::getEmail, userDTO.getEmail());
  172 + }));
  173 + }
  174 + List<User> existPhoneOrEmail = baseMapper.selectList(queryWrapper);
  175 + if (null != existPhoneOrEmail && existPhoneOrEmail.size() >0) {
  176 + throw new YtDataValidationException(ErrorMessage.PHONE_OR_EMAIL_HAS_REGISTER.getMessage());
  177 + }
  178 + }
151 179 }
152 180
153 181 @Override
... ... @@ -245,14 +273,14 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
245 273 user.setEmail(userDTO.getEmail());
246 274 user.setAccountExpireTime(userDTO.getAccountExpireTime());
247 275 user.setRemark(userDTO.getRemark());
248   - if (userDTO.getPassword() !=null && !userDTO.getPassword().equals("******")) {
  276 + if (userDTO.getPassword() != null && !userDTO.getPassword().equals("******")) {
249 277 user.setPassword(passwordEncoder.encode(userDTO.getPassword()));
250 278 }
251 279 baseMapper.updateById(user);
252   - if(null != userDTO.getRoleIds()){
  280 + if (null != userDTO.getRoleIds()) {
253 281 deleteAndAddUserRole(user.getId(), Arrays.asList(userDTO.getRoleIds()));
254 282 userOrganizationMappingService.addOrUpdateUserOrganizationMapping(
255   - user.getId(), Arrays.asList(userDTO.getOrganizationIds()), true);
  283 + user.getId(), Arrays.asList(userDTO.getOrganizationIds()), true);
256 284 }
257 285 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
258 286 return userDTO;
... ... @@ -260,33 +288,32 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
260 288
261 289 @Override
262 290 public YtPageData<UserDTO> page(
263   - Map<String, Object> queryMap,
264   - boolean isPtSysadmin,
265   - boolean isTenantAdmin) {
  291 + Map<String, Object> queryMap, boolean isPtSysadmin, boolean isTenantAdmin) {
266 292 String tenantId = (String) queryMap.get("tenantId");
267 293 IPage<UserDTO> userPage = null;
268 294 IPage<User> userIPage = getPage(queryMap, "create_time", false);
269   - String organizationId = queryMap.get("organizationId") != null ? (String) queryMap.get("organizationId") : null;
  295 + String organizationId =
  296 + queryMap.get("organizationId") != null ? (String) queryMap.get("organizationId") : null;
270 297 List<String> userIds = null;
271   - if(null != organizationId){
272   - userIds = userOrganizationMappingService.getUserIdByOrganizationIds(tenantId,organizationId);
273   - queryMap.put("userIds",userIds);
  298 + if (null != organizationId) {
  299 + userIds = userOrganizationMappingService.getUserIdByOrganizationIds(tenantId, organizationId);
  300 + queryMap.put("userIds", userIds);
274 301 }
275 302 if (isPtSysadmin) {
276 303 String roleType = (String) queryMap.get("roleType");
277 304 if (!StringUtils.isEmpty(roleType)) {
278 305 userPage = baseMapper.getTenantAdminPage(userIPage, tenantId);
279 306 } else {
280   - if(null != organizationId && (userIds.size()==FastIotConstants.MagicNumber.ZERO)){
  307 + if (null != organizationId && (userIds.size() == FastIotConstants.MagicNumber.ZERO)) {
281 308 userPage = new Page<>();
282   - }else{
  309 + } else {
283 310 userPage = baseMapper.getUserPage(userIPage, queryMap);
284 311 }
285 312 }
286 313 } else if (isTenantAdmin) {
287   - if(null != organizationId && (userIds.size()==FastIotConstants.MagicNumber.ZERO)){
  314 + if (null != organizationId && (userIds.size() == FastIotConstants.MagicNumber.ZERO)) {
288 315 userPage = new Page<>();
289   - }else{
  316 + } else {
290 317 userPage = baseMapper.getUserPage(userIPage, queryMap);
291 318 }
292 319 }
... ... @@ -475,11 +502,11 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
475 502
476 503 @Override
477 504 public String findUserCustomerIdById(String id) {
478   - if(StringUtils.isAllEmpty(id)){
  505 + if (StringUtils.isAllEmpty(id)) {
479 506 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
480 507 }
481 508 String customerId = baseMapper.findUserCustomerIdById(id);
482   - if(null == customerId){
  509 + if (null == customerId) {
483 510 throw new YtDataValidationException(ErrorMessage.USER_NOT_EXISTS.getMessage());
484 511 }
485 512 return customerId;
... ... @@ -498,14 +525,16 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
498 525 }
499 526
500 527 @Override
501   - public List<UserDTO> getMyCustomers(String organizationId,String tenantId, boolean isTenantAdmin) {
502   - if(StringUtils.isEmpty(organizationId)){
  528 + public List<UserDTO> getMyCustomers(
  529 + String organizationId, String tenantId, boolean isTenantAdmin) {
  530 + if (StringUtils.isEmpty(organizationId)) {
503 531 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
504 532 }
505   - if(isTenantAdmin){
506   - List<String> userList = userOrganizationMappingService.getUserIdsByOrganizationId(organizationId);
507   - if(null != userList && userList.size()>FastIotConstants.MagicNumber.ZERO){
508   - return baseMapper.getMyCustomers(tenantId, EntityId.NULL_UUID.toString(),userList);
  533 + if (isTenantAdmin) {
  534 + List<String> userList =
  535 + userOrganizationMappingService.getUserIdsByOrganizationId(organizationId);
  536 + if (null != userList && userList.size() > FastIotConstants.MagicNumber.ZERO) {
  537 + return baseMapper.getMyCustomers(tenantId, EntityId.NULL_UUID.toString(), userList);
509 538 }
510 539 }
511 540 return null;
... ... @@ -513,16 +542,17 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
513 542
514 543 @Override
515 544 @Async
516   - public CompletableFuture<TsValue> findUsersAsyncByTs(LocalDateTime startTs, LocalDateTime endTs, long ts) {
  545 + public CompletableFuture<TsValue> findUsersAsyncByTs(
  546 + LocalDateTime startTs, LocalDateTime endTs, long ts) {
517 547 DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
518 548 String startTime = df.format(startTs);
519 549 String endTime = df.format(endTs);
520   - List<UserDTO> list = baseMapper.findUsersAsyncByTs(startTime,endTime);
521   - return CompletableFuture.supplyAsync(()->new TsValue(ts,String.valueOf(list.size())));
  550 + List<UserDTO> list = baseMapper.findUsersAsyncByTs(startTime, endTime);
  551 + return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(list.size())));
522 552 }
523 553
524 554 @Override
525   - public UserDTO accountExist(String userName,String tenantId) {
  555 + public UserDTO accountExist(String userName, String tenantId) {
526 556 if (StringUtils.isEmpty(userName)) {
527 557 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
528 558 }
... ... @@ -534,17 +564,16 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User>
534 564
535 565 /**
536 566 * 判断手机号是否重复
537   - * @param phoneNumber
538   - * @param tenantId
  567 + *
  568 + * @param phoneNumber 手机号
539 569 * @return
540 570 */
541 571 @Override
542   - public UserDTO findUserByPhoneNumber(String phoneNumber, String tenantId) {
  572 + public UserDTO findUserByPhoneNumber(String phoneNumber) {
543 573 if (StringUtils.isEmpty(phoneNumber)) {
544 574 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
545 575 }
546 576 UserDTO userDTO = new UserDTO();
547   - userDTO.setTenantId(tenantId);
548 577 userDTO.setPhoneNumber(phoneNumber);
549 578 return baseMapper.findUserInfoByPhoneNumber(userDTO);
550 579 }
... ...
... ... @@ -64,11 +64,10 @@ public interface YtUserService {
64 64
65 65 /**
66 66 * 判断电话是否注册过
67   - * @param phoneNumber
68   - * @param tenantId
  67 + * @param phoneNumber 手机号
69 68 * @return
70 69 */
71   - UserDTO findUserByPhoneNumber(String phoneNumber,String tenantId);
  70 + UserDTO findUserByPhoneNumber(String phoneNumber);
72 71
73 72 User validateChangePasswordAccount(AccountReqDTO accountReqDTO);
74 73
... ...
... ... @@ -164,7 +164,6 @@
164 164 <include refid="columns"/>
165 165 FROM sys_user su
166 166 WHERE su.phone_number=#{phoneNumber}
167   - AND su.tenant_id=#{tenantId}
168 167 </select>
169 168
170 169 <select id="findUserCustomerIdById" resultType="java.lang.String">
... ...