From 2862c3e4da3adbb4bea43151514f0c43b86476d6 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期六, 07 九月 2024 17:49:17 +0800 Subject: [PATCH] APP端冥想首页相关接口 --- xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java | 246 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 184 insertions(+), 62 deletions(-) diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java index 46fd4ce..09bad30 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java @@ -1,36 +1,48 @@ package com.xinquan.user.service.impl; import cn.hutool.core.util.IdUtil; +import cn.hutool.crypto.SecureUtil; import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xinquan.common.core.constant.Constants; import com.xinquan.common.core.constant.SecurityConstants; import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.enums.AnswerTagEnum; import com.xinquan.common.core.enums.AppUserStatusEnum; import com.xinquan.common.core.enums.DisabledEnum; import com.xinquan.common.core.enums.TreeLevelEnum; import com.xinquan.common.core.exception.ServiceException; import com.xinquan.common.core.utils.page.BeanUtils; +import com.xinquan.common.core.utils.page.CollUtils; import com.xinquan.common.security.utils.SecurityUtils; import com.xinquan.system.api.RemoteUserService; import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.feignClient.SysUserClient; import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppLoginUser; import com.xinquan.system.api.model.AppVerifyCellPhoneBody; import com.xinquan.system.api.model.AppWXLoginBody; -import com.xinquan.system.api.model.AppleLoginUser; -import com.xinquan.system.api.model.LoginUser; -import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; +import com.xinquan.user.domain.AppUserQuestion; import com.xinquan.user.domain.AppUserTree; +import com.xinquan.user.domain.Tag; +import com.xinquan.user.domain.dto.UserAnswerDTO; +import com.xinquan.user.domain.vo.AppUserVO; +import com.xinquan.user.domain.vo.TagVO; import com.xinquan.user.mapper.AppUserMapper; +import com.xinquan.user.service.AppUserQuestionService; import com.xinquan.user.service.AppUserService; import com.xinquan.user.service.AppUserTreeService; +import com.xinquan.user.service.TagService; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,6 +62,8 @@ private final SysUserClient sysUserClient; private final RemoteUserService remoteUserService; private final AppUserTreeService appUserTreeService; + private final AppUserQuestionService appUserQuestionService; + private final TagService tagService; /** * 获取用户信息 * @@ -74,9 +88,10 @@ * @return */ @Override - public Boolean registerAppUser(AppUserDTO appUserDTO) { + public AppUser registerAppUser(AppUserDTO appUserDTO) { AppUser appUser = BeanUtils.copyBean(appUserDTO, AppUser.class); - return this.save(appUser); + this.save(appUser); + return appUser; } /** @@ -86,33 +101,34 @@ * @return */ @Override - public WXLoginUser wxLogin(AppWXLoginBody body) { - WXLoginUser wxLoginUser = new WXLoginUser(); + public AppLoginUser wxLogin(AppWXLoginBody body) { + AppLoginUser appLoginUser = new AppLoginUser(); Optional<AppUser> optionalAppUser = this.getUserByCondition( AppUserDTO.builder().wxOpenId(body.getWxOpenId()).build()); + AppUser appUser; + SysUser sysUser; // 存在账户,查询关联系统用户 if (optionalAppUser.isPresent()) { - AppUser appUser = optionalAppUser.get(); - SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); - wxLoginUser.setSysUser(sysUser); - if (Objects.nonNull(sysUser.getUserName())) { - wxLoginUser.setBindStatus(1); - wxLoginUser.setCellPhone(appUser.getCellPhone()); + appUser = optionalAppUser.get(); + if (appUser.getUserStatus().equals(AppUserStatusEnum.FROZEN.getCode())) { + throw new ServiceException("账号已被冻结"); } + sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); } else { // 不存在账户,创建账户 // 注册用户信息 - SysUser sysUser = new SysUser(); + sysUser = new SysUser(); sysUser.setNickName(body.getNickname()); sysUser.setAvatar(body.getHeadImgUrl()); - + sysUser.setUserName(body.getNickname()); + sysUser.setUserType("01"); // app用户 R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, SecurityConstants.INNER); if (registerResult.getCode() == Constants.FAIL) { throw new ServiceException(registerResult.getMsg()); } SysUser sysUserRes = registerResult.getData(); - AppUser appUser = new AppUser(); + appUser = new AppUser(); appUser.setUserId(sysUserRes.getUserId()); appUser.setWxOpenId(body.getWxOpenId()); appUser.setNickname(body.getNickname()); @@ -128,41 +144,45 @@ this.save(appUser); // 初始化用户树苗 initUserTree(appUser.getId()); - wxLoginUser.setSysUser(null); - wxLoginUser.setBindStatus(DisabledEnum.NO.getCode()); } - return wxLoginUser; + appLoginUser.setUserid(sysUser.getUserId()); + appLoginUser.setUsername(appUser.getNickname()); + appLoginUser.setAppUserId(appUser.getId()); + appLoginUser.setSysUser(sysUser); + if (Objects.nonNull(sysUser.getUserName())) { + appLoginUser.setBindStatus(DisabledEnum.YES.getCode()); + appLoginUser.setCellPhone(appUser.getCellPhone()); + } + return appLoginUser; } @Override - public AppleLoginUser appleLogin(String appleId) { - AppleLoginUser appleLoginUser = new AppleLoginUser(); + public AppLoginUser appleLogin(String appleId) { + AppLoginUser appLoginUser = new AppLoginUser(); Optional<AppUser> optionalAppUser = this.getUserByCondition( AppUserDTO.builder().appleId(appleId).build()); + SysUser sysUser; + AppUser appUser; // 存在账户,查询关联系统用户 if (optionalAppUser.isPresent()) { - AppUser appUser = optionalAppUser.get(); - SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); - appleLoginUser.setSysUser(sysUser); - if (Objects.nonNull(sysUser.getUserName())) { - appleLoginUser.setBindStatus(1); - appleLoginUser.setCellPhone(appUser.getCellPhone()); - } + appUser = optionalAppUser.get(); + sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); } else { // 不存在账户,创建账户 // 注册用户信息 - SysUser sysUser = new SysUser(); + sysUser = new SysUser(); String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6); sysUser.setNickName(nickname); sysUser.setAvatar("qwer"); - + sysUser.setUserName(nickname); + sysUser.setUserType("01"); // app用户 R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, SecurityConstants.INNER); if (registerResult.getCode() == Constants.FAIL) { throw new ServiceException(registerResult.getMsg()); } SysUser sysUserRes = registerResult.getData(); - AppUser appUser = new AppUser(); + appUser = new AppUser(); appUser.setUserId(sysUserRes.getUserId()); appUser.setNickname(nickname); appUser.setAvatar("qwer"); // TODO 待完善默认头像 @@ -176,11 +196,16 @@ this.save(appUser); // 初始化用户树苗 initUserTree(appUser.getId()); - appleLoginUser.setSysUser(null); - appleLoginUser.setBindStatus(DisabledEnum.NO.getCode()); } - - return appleLoginUser; + appLoginUser.setUserid(sysUser.getUserId()); + appLoginUser.setUsername(appUser.getNickname()); + appLoginUser.setAppUserId(appUser.getId()); + appLoginUser.setSysUser(sysUser); + if (Objects.nonNull(sysUser.getUserName())) { + appLoginUser.setBindStatus(DisabledEnum.YES.getCode()); + appLoginUser.setCellPhone(appUser.getCellPhone()); + } + return appLoginUser; } /** @@ -191,21 +216,23 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public LoginUser appCaptchaLogin(AppCaptchaBody body) { - LoginUser loginUser = new LoginUser(); + public AppLoginUser appCaptchaLogin(AppCaptchaBody body) { + AppLoginUser appLoginUser = new AppLoginUser(); Optional<AppUser> optionalAppUser = this.getUserByCondition( AppUserDTO.builder().cellPhone(body.getCellPhone()).build()); + AppUser appUser; + SysUser sysUser; if (optionalAppUser.isPresent()) { - AppUser appUser = optionalAppUser.get(); - SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); - loginUser.setSysUser(sysUser); + appUser = optionalAppUser.get(); + sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); } else { // 注册用户信息 - SysUser sysUser = new SysUser(); + sysUser = new SysUser(); String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6); sysUser.setNickName(nickname); sysUser.setAvatar("qwer"); sysUser.setUserName(body.getCellPhone()); + sysUser.setUserType("01"); // app用户 // 设置默认密码123456 sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD)); @@ -215,7 +242,7 @@ throw new ServiceException(registerResult.getMsg()); } SysUser sysUserRes = registerResult.getData(); - AppUser appUser = new AppUser(); + appUser = new AppUser(); appUser.setUserId(sysUserRes.getUserId()); appUser.setNickname(nickname); appUser.setCellPhone(body.getCellPhone()); @@ -230,8 +257,14 @@ this.save(appUser); // 初始化用户树苗 initUserTree(appUser.getId()); + } - return loginUser; + appLoginUser.setUserid(sysUser.getUserId()); + appLoginUser.setUsername(appUser.getNickname()); + appLoginUser.setAppUserId(appUser.getId()); + appLoginUser.setSysUser(sysUser); + appLoginUser.setCellPhone(appUser.getCellPhone()); + return appLoginUser; } /** @@ -256,7 +289,7 @@ * @return */ @Override - public WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { + public AppLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { Integer loginType = body.getLoginType(); String wxOrAppleId = body.getWxOrAppleId(); SysUser sysUser; @@ -296,29 +329,21 @@ } sysUser.setUserName(body.getCellPhone()); sysUser.setPassword( - SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD)); // 默认密码为123456 + SecurityUtils.encryptPassword( + SecureUtil.md5(Constants.DEFAULT_PASSWORD).toUpperCase( + Locale.ROOT))) + ; // 默认密码为123456 sysUser.setPhonenumber(body.getCellPhone()); sysUserClient.updateSysUser(sysUser); } // 更新用户信息 this.updateById(appUser); - if (loginType.equals(1)) { - // 微信登录 - WXLoginUser wxLoginUser = new WXLoginUser(); - wxLoginUser.setBindStatus(1); - wxLoginUser.setCellPhone(body.getCellPhone()); - wxLoginUser.setSysUser(sysUser); - return wxLoginUser; - } else { - // 苹果登录 - AppleLoginUser appleLoginUser = new AppleLoginUser(); - appleLoginUser.setBindStatus(1); - appleLoginUser.setCellPhone(body.getCellPhone()); - appleLoginUser.setSysUser(sysUser); - return appleLoginUser; - } + AppLoginUser appLoginUser = new AppLoginUser(); + appLoginUser.setBindStatus(1); + appLoginUser.setCellPhone(body.getCellPhone()); + appLoginUser.setSysUser(sysUser); + return appLoginUser; } - // 定义一个方法来处理用户不存在的情况 private void handleUserNotPresent(Optional<AppUser> userOptional, String errorMessage) { if (!userOptional.isPresent()) { @@ -337,7 +362,104 @@ return this.lambdaQuery() .eq(loginType.equals(1), AppUser::getWxOpenId, wxOrAppleId) .eq(loginType.equals(2), AppUser::getAppleId, wxOrAppleId) - .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT) + .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()) .oneOpt(); } + + /** + * 保存计划引导页用户的答案 + * + * @param dto 用户计划引导答案数据传输对象 + */ + @Override + public void saveUserAnswers(UserAnswerDTO dto) { + // 获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + AppUser appUser = this.getUserBySysUserId(userId); + List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList( + dto.getUserAnswerOneDTOList(), AppUserQuestion.class); + // 查询用户已填写的答案 + List<AppUserQuestion> baseAppUserQuestionList = appUserQuestionService.lambdaQuery() + .eq(AppUserQuestion::getAppUserId, appUser.getUserId()) + .list(); + if (CollUtils.isNotEmpty(baseAppUserQuestionList)) { + // 根据类型更新答案 + for (AppUserQuestion appUserQuestion : appUserQuestionList) { + Optional<AppUserQuestion> baseAppUserQuestionOptional = baseAppUserQuestionList.stream() + .filter(baseAppUserQuestion -> baseAppUserQuestion.getType() + .equals(appUserQuestion.getType())).findFirst(); + baseAppUserQuestionOptional.ifPresent( + userQuestion -> appUserQuestion.setId(userQuestion.getId())); + } + } + appUserQuestionService.saveOrUpdateBatch(appUserQuestionList); + // 筛选答案为是和偶尔有的问题,为用户设置对应的标签 + List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream() + .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1") + || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList()); + StringBuilder sb = new StringBuilder(); + // 使用 StringBuilder 提高字符串拼接效率 + if (CollUtils.isNotEmpty(appUserQuestionYesList)) { + List<Long> tagIdList = appUserQuestionYesList.stream() + .map(appUserQuestion -> AnswerTagEnum.getEnumByCode(appUserQuestion.getType()) + .getTagId()).collect(Collectors.toList()); + if (CollUtils.isNotEmpty(tagIdList)) { + sb.append(CollUtils.join(tagIdList, ",")); + } + } + sb.append(","); + sb.append(dto.getTagIds()); + appUser.setTagId(sb.toString()); + this.updateById(appUser); + } + + /** + * 获取AppUser + * + * @param userId 系统用户userId + * @return AppUser + */ + private AppUser getUserBySysUserId(Long userId) { + Optional<AppUser> appUserOptional = this.lambdaQuery().eq(AppUser::getUserId, userId) + .oneOpt(); + if (!appUserOptional.isPresent()) { + throw new ServiceException("获取用户信息失败,请重新登录"); + } + return appUserOptional.get(); + } + + /** + * 获取问题二的标签列表 + * + * @return List<TagVO> + */ + @Override + public List<TagVO> getTagList() { + List<Tag> list = tagService.list(Wrappers.lambdaQuery(Tag.class).eq(Tag::getTagType, 2)); + return BeanUtils.copyList(list, TagVO.class); + } + + /** + * 更新APP用户信息 + * + * @param dto APP用户数据传输对象 + */ + @Override + public void updateAppUser(AppUserDTO dto) { + // 拷贝数据 + AppUser appUser = BeanUtils.copyBean(dto, AppUser.class); + this.updateById(appUser); + } + + /** + * 获取当前登录用户信息 + * + * @return 用户信息 + * @see com.xinquan.user.domain.vo.AppUserVO + */ + @Override + public AppUserVO getCurrentUser() { + AppUser appUser = this.getById(SecurityUtils.getUserId()); + return BeanUtils.copyBean(appUser, AppUserVO.class); + } } -- Gitblit v1.7.1