diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java index 3801d2e..403cd4b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java @@ -62,6 +62,8 @@ public interface IAppUserService public AppUser registerAppUser(RegisterBody registerBody); + public AppUser registerAppUserNew(RegisterBody registerBody); + public AppUser selectAppuserByIdcard(String idCard); public AppUserLky selectAppUserInfo(AppUser appUser); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index 20f20b6..b05993b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -199,7 +199,7 @@ public class AppUserServiceImpl extends ServiceImpl imple } } //角色集合 - Map mapUserRole=new HashMap<>(); + Map mapUserRole=new HashMap<>(); switch (appUser.getIsCompanyUser()){ case StringUtil.IS_COMPANY_USER://企业 if(registerBody.getCompany()!=null){ @@ -238,20 +238,7 @@ public class AppUserServiceImpl extends ServiceImpl imple //保存sys_user SysUser parmUser=appUserMapper.selectSysUserIdcard(appUser.getIdCard()); if(parmUser==null){ - SysUser sysUser=new SysUser(); - sysUser.setUserName(StringUtil.USER_KEY+appUser.getIdCard()); - sysUser.setNickName(StringUtils.isEmpty(appUser.getName())?appUser.getPhone():appUser.getName()); - sysUser.setPassword(SiteSecurityUtils.encryptPassword("123456")); - sysUser.setPhonenumber(appUser.getPhone()); - sysUser.setSex(appUser.getSex()); - sysUser.setStatus("0"); - sysUser.setLoginIp(appUser.getLoginIp()); - sysUser.setLoginDate(appUser.getLoginDate()); - sysUser.setIdCard(appUser.getIdCard()); - appUserMapper.insertSysUser(sysUser); - //保存sys_user_role - mapUserRole.put("userId",sysUser.getUserId()); - appUserMapper.insertSysUserRole(mapUserRole); + registerInsertSysUser(appUser,mapUserRole); } //一体机密码 if(StringUtils.isNotEmpty(appUser.getYtjPassword())){ @@ -261,6 +248,232 @@ public class AppUserServiceImpl extends ServiceImpl imple return appUser; } + @Override + @Transactional(rollbackFor = Exception.class) + public AppUser registerAppUserNew(RegisterBody registerBody) { + // 1. 参数校验 + validateRegisterParam(registerBody); + + // 2. 获取基础数据 + AppUser appUser = registerBody.getAppUser(); + Long loginUserId = SiteSecurityUtils.getUserId(); + + // 3. 登录态处理:关联已有用户信息 + AppUser existingUser = handleLoginUserAssociation(appUser, loginUserId); + + // 4. 差异化业务处理(企业用户/求职者) + handleUserTypeSpecificLogic(existingUser, registerBody); + + // 5. 系统用户同步(不存在则创建) + syncSysUserIfNecessary(existingUser); + + // 6. 一体机密码加密处理 + encryptYtjPassword(existingUser); + + // 7. 更新App用户信息 + appUserMapper.updateById(existingUser); + + return existingUser; + } + + /** + * 注册参数校验 + * @param registerBody 注册请求体 + */ + private void validateRegisterParam(RegisterBody registerBody) { + if (registerBody == null) { + throw new IllegalArgumentException("注册请求参数不能为空"); + } + AppUser appUser = registerBody.getAppUser(); + if (appUser == null) { + throw new IllegalArgumentException("用户基础信息不能为空"); + } + if (StringUtils.isEmpty(appUser.getIsCompanyUser())) { + throw new IllegalArgumentException("用户类型(isCompanyUser)不能为空"); + } + } + + /** + * 处理登录用户关联逻辑 + * @param appUser 注册传入的用户信息 + * @param loginUserId 登录用户ID + * @return 关联后的用户信息 + */ + private AppUser handleLoginUserAssociation(AppUser appUser, Long loginUserId) { + if (SiteSecurityUtils.isLogin() && loginUserId != null) { + AppUser dbUser = appUserMapper.selectById(loginUserId); + if (dbUser != null) { + if (appUser == null) { + return dbUser; + } else { + appUser.setPhone(dbUser.getPhone()); + appUser.setUserId(dbUser.getUserId()); + return appUser; + } + } + } + return appUser; + } + + /** + * 处理不同用户类型的差异化业务逻辑 + * @param appUser 用户信息 + * @param registerBody 注册请求体 + */ + private void handleUserTypeSpecificLogic(AppUser appUser, RegisterBody registerBody) { + String userType = appUser.getIsCompanyUser(); + switch (userType) { + case StringUtil.IS_COMPANY_USER: + handleCompanyUserLogic(appUser, registerBody.getCompany()); + break; + default: + handleJobSeekerUserLogic(appUser, registerBody); + break; + } + } + + /** + * 处理企业用户注册逻辑 + * @param appUser 企业用户信息 + * @param company 企业信息 + */ + private void handleCompanyUserLogic(AppUser appUser, Company company) { + if (company != null) { + // 保存企业信息(新增场景) + if (company.getCompanyId() == null) { + companyMapper.insert(company); + // 批量保存企业联系人 + saveCompanyContacts(company.getCompanyId(), company.getCompanyContactList()); + } + // 关联企业信息到用户 + appUser.setIdCard(company.getCode()); + appUser.setName(company.getName()); + } + } + + /** + * 批量保存企业联系人 + * @param companyId 企业ID + * @param contactList 联系人列表 + */ + private void saveCompanyContacts(Long companyId, List contactList) { + if (contactList != null && !contactList.isEmpty()) { + contactList.forEach(contact -> contact.setCompanyId(companyId)); + companyContactMapper.batchInsert(contactList); + } + } + + /** + * 处理求职者用户注册逻辑 + * @param appUser 求职者用户信息 + * @param registerBody 注册请求体 + */ + private void handleJobSeekerUserLogic(AppUser appUser, RegisterBody registerBody) { + Long userId = appUser.getUserId(); + // 保存工作经历 + saveUserWorkExperiences(userId, registerBody.getExperiencesList()); + // 保存技能信息 + saveUserAppSkills(userId, registerBody.getAppSkillsList()); + } + + /** + * 批量保存用户工作经历 + * @param userId 用户ID + * @param experiencesList 工作经历列表 + */ + private void saveUserWorkExperiences(Long userId, List experiencesList) { + if (experiencesList != null && !experiencesList.isEmpty()) { + experiencesList.forEach(experience -> experience.setUserId(userId)); + userWorkExperiencesMapper.batchInsert(experiencesList); + } + } + + /** + * 批量保存用户技能信息 + * @param userId 用户ID + * @param skillsList 技能列表 + */ + private void saveUserAppSkills(Long userId, List skillsList) { + if (skillsList != null && !skillsList.isEmpty()) { + skillsList.forEach(skill -> skill.setUserId(userId)); + appSkillMapper.batchInsert(skillsList); + } + } + + /** + * 同步系统用户(不存在则创建) + * @param appUser App用户信息 + */ + private void syncSysUserIfNecessary(AppUser appUser) { + SysUser sysUser = appUserMapper.selectSysUserIdcard(appUser.getIdCard()); + if (sysUser == null) { + // 构建角色映射 + Map roleMap = buildUserRoleMap(appUser.getIsCompanyUser()); + // 创建系统用户及角色关联 + registerInsertSysUser(appUser, roleMap); + } + } + + /** + * 构建用户角色映射 + * @param userType 用户类型 + * @return 角色ID映射 + */ + private Map buildUserRoleMap(String userType) { + Map roleMap = new HashMap<>(); + if (StringUtil.IS_COMPANY_USER.equals(userType)) { + roleMap.put("roleId", StringUtil.SYS_QY); + } else { + roleMap.put("roleId", StringUtil.SYS_QZZ); + } + return roleMap; + } + + /** + * 加密一体机密码 + * @param appUser 用户信息 + */ + private void encryptYtjPassword(AppUser appUser) { + if (StringUtils.hasText(appUser.getYtjPassword())) { + appUser.setYtjPassword(SiteSecurityUtils.encryptPassword(appUser.getYtjPassword())); + } + } + + /** + * 保存系统用户及角色关联 + * @param appUser App用户信息 + * @param roleMap 角色映射(包含roleId) + */ + private void registerInsertSysUser(AppUser appUser, Map roleMap) { + // 构建系统用户 + SysUser sysUser = buildSysUser(appUser); + // 插入系统用户 + appUserMapper.insertSysUser(sysUser); + // 关联用户角色 + roleMap.put("userId", sysUser.getUserId()); + appUserMapper.insertSysUserRole(roleMap); + } + + /** + * 构建系统用户对象 + * @param appUser App用户信息 + * @return 系统用户对象 + */ + private SysUser buildSysUser(AppUser appUser) { + SysUser sysUser = new SysUser(); + sysUser.setUserName(StringUtil.USER_KEY + appUser.getIdCard()); + sysUser.setNickName(StringUtils.isEmpty(appUser.getName()) ? appUser.getPhone() : appUser.getName()); + sysUser.setPassword(SiteSecurityUtils.encryptPassword("123456")); + sysUser.setPhonenumber(appUser.getPhone()); + sysUser.setSex(appUser.getSex()); + sysUser.setStatus("0"); + sysUser.setLoginIp(appUser.getLoginIp()); + sysUser.setLoginDate(appUser.getLoginDate()); + sysUser.setIdCard(appUser.getIdCard()); + return sysUser; + } + + @Override public AppUser selectAppuserByIdcard(String idCard) { return appUserMapper.selectOne(Wrappers.lambdaQuery().eq(AppUser::getIdCard, idCard).eq(AppUser::getDelFlag,"0").orderByDesc(AppUser::getUpdateTime).last("LIMIT 1")); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 47258c3..9386f9c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -485,7 +485,8 @@ public class SysLoginService * @return */ public String registerAppUser(RegisterBody registerBody) { - AppUser appUser=appUserService.registerAppUser(registerBody); + //AppUser appUser=appUserService.registerAppUser(registerBody); + AppUser appUser=appUserService.registerAppUserNew(registerBody); return loginUserIdApp(appUser); }