diff --git a/intc-admin/src/main/java/com/intc/web/service/impl/SmsAuthStrategy.java b/intc-admin/src/main/java/com/intc/web/service/impl/SmsAuthStrategy.java index a6e4d35..75dc548 100644 --- a/intc-admin/src/main/java/com/intc/web/service/impl/SmsAuthStrategy.java +++ b/intc-admin/src/main/java/com/intc/web/service/impl/SmsAuthStrategy.java @@ -105,147 +105,213 @@ public class SmsAuthStrategy implements IAuthStrategy { /** * 根据手机号加载系统用户,如果不存在则自动创建 + * 逻辑:先查AquUser,再查系统用户 + * 1. 如果AquUser不存在,先创建AquUser,再创建系统用户 + * 2. 如果AquUser存在但系统用户不存在,根据AquUser数据创建系统用户 + * 3. 如果都存在,直接返回系统用户 * * @param phonenumber 手机号 * @return 系统用户信息 */ private SysUserVo loadUserByPhonenumber(String phonenumber) { - SysUserVo user = userMapper.selectVoOne( + // 1. 先查询AquUser + AquUser aquUser = aquUserMapper.selectOne( + new LambdaQueryWrapper() + .eq(AquUser::getMobilePhone, phonenumber) + ); + + // 2. 查询系统用户 + SysUserVo sysUser = userMapper.selectVoOne( new LambdaQueryWrapper() .eq(SysUser::getPhonenumber, phonenumber) ); - // 如果用户不存在,创建新用户 - if (ObjectUtil.isNull(user)) { - log.info("系统中不存在该手机号的用户,自动创建新用户: phone={}", phonenumber); - user = createNewUser(phonenumber); + // 3. 根据不同情况处理 + if (ObjectUtil.isNull(aquUser)) { + // 情况1:AquUser不存在,先创建AquUser,再创建系统用户 + log.info("AquUser不存在,先创建AquUser再创建系统用户: phone={}", phonenumber); + aquUser = createAquUserFirst(phonenumber); + sysUser = createSysUserFromPhone(phonenumber, aquUser); + } else if (ObjectUtil.isNull(sysUser)) { + // 情况2:AquUser存在但系统用户不存在,根据AquUser创建系统用户 + log.info("AquUser存在但系统用户不存在,根据AquUser创建系统用户: phone={}, aquUserId={}", + phonenumber, aquUser.getId()); + sysUser = createSysUserFromAquUser(aquUser); } // 检查用户状态 - if (SystemConstants.DISABLE.equals(user.getStatus())) { + if (SystemConstants.DISABLE.equals(sysUser.getStatus())) { log.info("登录用户:{} 已被停用.", phonenumber); throw new UserException("user.blocked", phonenumber); } - return user; + return sysUser; } /** - * 创建新的系统用户 + * 先创建AquUser(当AquUser不存在时) * * @param phone 手机号 - * @return 新创建的用户信息 + * @return 新创建的AquUser */ - private SysUserVo createNewUser(String phone) { + private AquUser createAquUserFirst(String phone) { try { - // 构建新用户对象 - SysUserBo newUser = new SysUserBo(); - // 使用手机号作为用户名 - newUser.setUserName(phone); - // 使用手机号作为昵称 - newUser.setNickName("用户" + phone.substring(phone.length() - 4)); - // 设置手机号 - newUser.setPhonenumber(phone); - // 设置用户类型为系统用户 - newUser.setUserType("sys_user"); - // 设置默认部门ID - newUser.setDeptId(SystemConstants.DEFAULT_DEPT_ID); - // 设置状态为正常 - newUser.setStatus(SystemConstants.NORMAL); - // 设置性别为未知 - newUser.setSex("2"); - // 设置默认密码 - newUser.setPassword(BCrypt.hashpw("yuceyun@123")); - // 设置创建人和更新人为系统 - newUser.setCreateBy(0L); - newUser.setUpdateBy(0L); - - // 调用用户服务创建用户 - boolean success = userService.registerUser(newUser, LoginHelper.getTenantId()); - - if (!success) { - log.error("创建新用户失败: phone={}", phone); - throw new UserException("user.register.error"); - } - - // 查询刚创建的用户信息 - SysUserVo createdUser = userMapper.selectVoOne( - new LambdaQueryWrapper() - .eq(SysUser::getPhonenumber, phone) - ); - - if (ObjectUtil.isNull(createdUser)) { - log.error("创建用户后查询失败: phone={}", phone); - throw new UserException("user.register.error"); - } - - log.info("成功创建系统用户: phone={}, userId={}, userName={}", - phone, createdUser.getUserId(), createdUser.getUserName()); - - // 创建对应的鱼测云用户(AquUser) - createAquUser(createdUser); - - return createdUser; - - } catch (Exception e) { - log.error("创建新用户异常: phone={}, error={}", phone, e.getMessage(), e); - throw new UserException("user.register.error"); - } - } - - /** - * 创建鱼测云用户(AquUser) - * - * @param sysUser 系统用户信息 - */ - private void createAquUser(SysUserVo sysUser) { - try { - // 检查是否已存在鱼测云用户 - AquUser existingAquUser = aquUserMapper.selectById(sysUser.getUserId()); - if (existingAquUser != null) { - log.info("鱼测云用户已存在,跳过创建: userId={}", sysUser.getUserId()); - return; - } - - // 构建报警电话列表(包含用户手机号) + // 构建报警电话列表 List warnPhoneList = new ArrayList<>(); - if (StringUtils.isNotBlank(sysUser.getPhonenumber())) { - warnPhoneList.add(sysUser.getPhonenumber()); - } + warnPhoneList.add(phone); String warnPhoneJson = JsonUtils.toJsonString(warnPhoneList); // 创建鱼测云用户对象 AquUserBo aquUserBo = new AquUserBo(); - // 使用系统用户ID作为鱼测云用户ID,保持一致 - aquUserBo.setId(sysUser.getUserId()); - // 使用系统用户的昵称作为用户名 - aquUserBo.setUserName(sysUser.getNickName()); - // 设置手机号 - aquUserBo.setMobilePhone(sysUser.getPhonenumber()); - // 设置报警电话列表 + aquUserBo.setUserName("用户" + phone.substring(phone.length() - 4)); + aquUserBo.setMobilePhone(phone); aquUserBo.setWarnPhoneJson(warnPhoneJson); - // 非管理员 aquUserBo.setIsManager(0L); - // 没有大屏权限 aquUserBo.setHasScreen(0L); - // 备注 aquUserBo.setRemark("短信登录自动创建"); // 调用服务创建鱼测云用户 boolean success = aquUserService.insertByBo(aquUserBo); - if (success) { - log.info("成功创建鱼测云用户: userId={}, userName={}, phone={}", - sysUser.getUserId(), aquUserBo.getUserName(), aquUserBo.getMobilePhone()); - } else { - log.error("创建鱼测云用户失败: userId={}", sysUser.getUserId()); - // 不抛异常,不影响登录流程 + if (!success) { + log.error("创建AquUser失败: phone={}", phone); + throw new UserException("user.register.error"); } + // 查询刚创建的AquUser + AquUser createdAquUser = aquUserMapper.selectOne( + new LambdaQueryWrapper() + .eq(AquUser::getMobilePhone, phone) + ); + + if (ObjectUtil.isNull(createdAquUser)) { + log.error("创建AquUser后查询失败: phone={}", phone); + throw new UserException("user.register.error"); + } + + log.info("成功创建AquUser: phone={}, aquUserId={}, userName={}", + phone, createdAquUser.getId(), createdAquUser.getUserName()); + + return createdAquUser; + } catch (Exception e) { - log.error("创建鱼测云用户异常: userId={}, error={}", sysUser.getUserId(), e.getMessage(), e); - // 不抛异常,不影响登录流程 + log.error("创建AquUser异常: phone={}, error={}", phone, e.getMessage(), e); + throw new UserException("user.register.error"); } } + /** + * 根据手机号创建系统用户(当AquUser已创建但系统用户不存在时) + * + * @param phone 手机号 + * @param aquUser AquUser信息 + * @return 新创建的系统用户 + */ + private SysUserVo createSysUserFromPhone(String phone, AquUser aquUser) { + try { + // 构建新用户对象 + SysUserBo newUser = new SysUserBo(); + // 使用AquUser的ID作为系统用户ID,保持一致 + newUser.setUserId(aquUser.getId()); + newUser.setUserName(phone); + newUser.setNickName(StringUtils.isNotBlank(aquUser.getUserName()) ? + aquUser.getUserName() : "用户" + phone.substring(phone.length() - 4)); + newUser.setPhonenumber(phone); + newUser.setUserType("sys_user"); + newUser.setDeptId(SystemConstants.DEFAULT_DEPT_ID); + newUser.setStatus(SystemConstants.NORMAL); + newUser.setSex("2"); + newUser.setPassword(BCrypt.hashpw("yuceyun@123")); + newUser.setCreateBy(0L); + newUser.setUpdateBy(0L); + + // 调用用户服务创建用户 + boolean success = userService.registerUser(newUser, LoginHelper.getTenantId()); + + if (!success) { + log.error("创建系统用户失败: phone={}, aquUserId={}", phone, aquUser.getId()); + throw new UserException("user.register.error"); + } + + // 查询刚创建的用户信息 + SysUserVo createdUser = userMapper.selectVoOne( + new LambdaQueryWrapper() + .eq(SysUser::getPhonenumber, phone) + ); + + if (ObjectUtil.isNull(createdUser)) { + log.error("创建系统用户后查询失败: phone={}, aquUserId={}", phone, aquUser.getId()); + throw new UserException("user.register.error"); + } + + log.info("成功创建系统用户(ID与AquUser一致): phone={}, userId={}, aquUserId={}, userName={}", + phone, createdUser.getUserId(), aquUser.getId(), createdUser.getUserName()); + + return createdUser; + + } catch (Exception e) { + log.error("创建系统用户异常: phone={}, aquUserId={}, error={}", phone, aquUser.getId(), e.getMessage(), e); + throw new UserException("user.register.error"); + } + } + + /** + * 根据AquUser信息创建系统用户 + * + * @param aquUser AquUser信息 + * @return 新创建的系统用户 + */ + private SysUserVo createSysUserFromAquUser(AquUser aquUser) { + try { + String phone = aquUser.getMobilePhone(); + + // 构建新用户对象 + SysUserBo newUser = new SysUserBo(); + // 使用AquUser的ID作为系统用户ID,保持一致 + newUser.setUserId(aquUser.getId()); + newUser.setUserName(phone); + // 使用AquUser的用户名作为昵称 + newUser.setNickName(StringUtils.isNotBlank(aquUser.getUserName()) ? + aquUser.getUserName() : "用户" + phone.substring(phone.length() - 4)); + newUser.setPhonenumber(phone); + newUser.setUserType("sys_user"); + newUser.setDeptId(SystemConstants.DEFAULT_DEPT_ID); + newUser.setStatus(SystemConstants.NORMAL); + newUser.setSex("2"); + newUser.setPassword(BCrypt.hashpw("yuceyun@123")); + newUser.setCreateBy(0L); + newUser.setUpdateBy(0L); + + // 调用用户服务创建用户 + boolean success = userService.registerUser(newUser, LoginHelper.getTenantId()); + + if (!success) { + log.error("根据AquUser创建系统用户失败: phone={}, aquUserId={}", phone, aquUser.getId()); + throw new UserException("user.register.error"); + } + + // 查询刚创建的用户信息 + SysUserVo createdUser = userMapper.selectVoOne( + new LambdaQueryWrapper() + .eq(SysUser::getPhonenumber, phone) + ); + + if (ObjectUtil.isNull(createdUser)) { + log.error("根据AquUser创建系统用户后查询失败: phone={}, aquUserId={}", phone, aquUser.getId()); + throw new UserException("user.register.error"); + } + + log.info("根据AquUser成功创建系统用户(ID一致): phone={}, userId={}, aquUserId={}, userName={}", + phone, createdUser.getUserId(), aquUser.getId(), createdUser.getUserName()); + + return createdUser; + + } catch (Exception e) { + log.error("根据AquUser创建系统用户异常: aquUserId={}, error={}", aquUser.getId(), e.getMessage(), e); + throw new UserException("user.register.error"); + } + } + + + }