无关风月
2025-02-28 dd663d0ac783755d889e270eee57ee58630c88c8
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java
@@ -2,8 +2,8 @@
import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xinquan.common.core.constant.Constants;
@@ -18,6 +18,7 @@
import com.xinquan.common.core.utils.page.CollUtils;
import com.xinquan.common.security.service.TokenService;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.meditation.api.feign.RemoteMeditationService;
import com.xinquan.system.api.RemoteUserService;
import com.xinquan.system.api.domain.SysUser;
import com.xinquan.system.api.feignClient.SysUserClient;
@@ -44,6 +45,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
/**
 * <p>
@@ -62,6 +66,8 @@
    private final AppUserTreeService appUserTreeService;
    private final AppUserQuestionService appUserQuestionService;
    private final TagService tagService;
    @Resource
    private RemoteMeditationService remoteMeditationService;
    /**
     * 获取用户信息
     *
@@ -70,20 +76,55 @@
     */
    @Override
    public Optional<AppUser> getUserByCondition(AppUserDTO dto) {
        String device = dto.getDevice();
        if (StringUtils.hasLength(dto.getDevice())) {
            Optional<AppUser> one = this.lambdaQuery()
                    .eq(AppUser::getDevice, device)
                    .isNull(AppUser::getCellPhone).oneOpt();
            Optional<AppUser> appUser = this.lambdaQuery()
                    .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId())
                    .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                    .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                            dto.getCellPhone())
                    .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                            dto.getWxOpenId())
                    .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt();
            // 如果不存在
            if (!appUser.isPresent()){
                if (one.isPresent()) {
                    initUserTree(one.get().getId());
                    this.updateById(one.get());
                    return one;
                } else {
                    return this.lambdaQuery()
                            .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId())
                            .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                            .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                                    dto.getCellPhone())
                            .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                                    dto.getWxOpenId())
                            .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt();
                }
            }
        }
        return this.lambdaQuery()
                .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId())
                .eq(StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                .eq(StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                        dto.getCellPhone())
                .eq(StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                        dto.getWxOpenId())
                .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt();
    }
    public static void main(String[] args) {
        String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
        System.err.println(randomCode);
    @Override
    public Optional<AppUser> getUserByCondition1(AppUserDTO dto) {
        return this.lambdaQuery()
                .eq(AppUser::getCellPhone,dto.getCellPhone())
                .ne(AppUser::getUserStatus,3).oneOpt();
    }
    /**
     * app用户注册
     * @param appUserDTO
@@ -91,6 +132,31 @@
     */
    @Override
    public AppUser registerAppUser(AppUserDTO appUserDTO) {
        if (StringUtils.hasLength(appUserDTO.getDevice())){
            AppUser one = this.lambdaQuery().eq(AppUser::getDevice, appUserDTO.getDevice())
                    .isNull(AppUser::getCellPhone).one();
            if (one == null){
                AppUser appUser = BeanUtils.copyBean(appUserDTO, AppUser.class);
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                appUser.setCode("YH"+format+randomCode);
                this.save(appUser);
                remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                initUserTree(appUser.getId());
                return appUser;
            }else{
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                one.setCode("YH"+format+randomCode);
                this.updateById(one);
                initUserTree(one.getId());
                return one;
            }
        }
        AppUser appUser = BeanUtils.copyBean(appUserDTO, AppUser.class);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String format = simpleDateFormat.format(new Date());
@@ -98,6 +164,9 @@
        String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
        appUser.setCode("YH"+format+randomCode);
        this.save(appUser);
        remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
        initUserTree(appUser.getId());
        return appUser;
    }
@@ -111,9 +180,9 @@
    public AppLoginUser wxLogin(AppWXLoginBody body) {
        AppLoginUser appLoginUser = new AppLoginUser();
        Optional<AppUser> optionalAppUser = this.getUserByCondition(
                AppUserDTO.builder().wxOpenId(body.getWxOpenId()).build());
        AppUser appUser;
        SysUser sysUser;
                AppUserDTO.builder().wxOpenId(body.getWxOpenId()).device(body.getDevice()).build());
        AppUser appUser = new AppUser();
        SysUser sysUser = new SysUser();
        // 存在账户,查询关联系统用户
        if (optionalAppUser.isPresent()) {
            appUser = optionalAppUser.get();
@@ -121,175 +190,349 @@
                throw new ServiceException("账号已被冻结");
            }
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
        } else {
            // 不存在账户,创建账户
            // 注册用户信息
            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 = new AppUser();
            appUser.setUserId(sysUserRes.getUserId());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            appUser.setWxOpenId(body.getWxOpenId());
            String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
            sysUser.setNickName(nickname);
            appUser.setAvatar(body.getHeadImgUrl());
            appUser.setGender(body.getSex());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
            appUser.setWxName(body.getNickname());
            if (appUser.getCellPhone()!=null){
                appLoginUser.setBindStatus(DisabledEnum.NO.getCode());
                appLoginUser.setCellPhone(appUser.getCellPhone());
            }else{
                appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
            }
        } else {
            if (org.springframework.util.StringUtils.hasLength(body.getDevice())){
                AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                        .eq(AppUser::getDevice, body.getDevice())
                        .isNull(AppUser::getCellPhone));
                if (one!=null){
                    initUserTree(appUser.getId());
                    appUser = one;
                }else{
                    // 不存在账户,创建账户
                    // 注册用户信息
                    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 = new AppUser();
                    appUser.setUserId(sysUserRes.getUserId());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH"+format+randomCode);
                    appUser.setWxOpenId(body.getWxOpenId());
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    appUser.setNickname(nickname);
                    appUser.setDevice(body.getDevice());
                    appUser.setWxName(body.getNickname());
                    appUser.setAvatar(body.getHeadImgUrl());
                    appUser.setGender(3);
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                    this.save(appUser);
                    remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }else{
                // 不存在账户,创建账户
                // 注册用户信息
                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 = new AppUser();
                appUser.setUserId(sysUserRes.getUserId());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                appUser.setCode("YH"+format+randomCode);
                appUser.setWxOpenId(body.getWxOpenId());
                String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                sysUser.setNickName(nickname);
                appUser.setNickname(nickname);
                appUser.setWxName(body.getNickname());
                appUser.setAvatar(body.getHeadImgUrl());
                appUser.setDevice(body.getDevice());
                appUser.setGender(3);
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setIncome(BigDecimal.ZERO);
                appUser.setTotalEnergyValue(0);
                appUser.setRegisterTime(LocalDateTime.now());
                appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                this.save(appUser);
                remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                // 初始化用户树苗
                initUserTree(appUser.getId());
            }
        }
        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());
        }
        this.updateById(appUser);
//        if (Objects.nonNull(sysUser.getUserName())) {
//            appLoginUser.setCellPhone(appUser.getCellPhone());
//        }
        return appLoginUser;
    }
    @Override
    public AppLoginUser appleLogin(String appleId) {
    public AppLoginUser appleLogin(String appleId,String device) {
        AppLoginUser appLoginUser = new AppLoginUser();
        Optional<AppUser> optionalAppUser = this.getUserByCondition(
                AppUserDTO.builder().appleId(appleId).build());
        SysUser sysUser;
        AppUser appUser;
                AppUserDTO.builder().appleId(appleId).device(device).build());
        SysUser sysUser = new SysUser();
        AppUser appUser = new AppUser();
        // 存在账户,查询关联系统用户
        if (optionalAppUser.isPresent()) {
            appUser = optionalAppUser.get();
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
        } else {
            // 不存在账户,创建账户
            // 注册用户信息
            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());
            if (appUser.getUserStatus().equals(AppUserStatusEnum.FROZEN.getCode())) {
                throw new ServiceException("账号已被冻结");
            }
            SysUser sysUserRes = registerResult.getData();
            appUser = new AppUser();
            appUser.setAppleId(appleId);
            appUser.setUserId(sysUserRes.getUserId());
            appUser.setNickname(nickname);
            appUser.setAvatar("qwer"); // TODO 待完善默认头像
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
            if (appUser.getCellPhone() != null) {
                appLoginUser.setBindStatus(DisabledEnum.NO.getCode());
                appLoginUser.setCellPhone(appUser.getCellPhone());
            }
        } else {
            if (org.springframework.util.StringUtils.hasLength(device)) {
                AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                        .eq(AppUser::getDevice, device)
                        .isNull(AppUser::getCellPhone));
                if (one != null) {
                    initUserTree(one.getId());
                    appUser.setAppleId(appleId);
                    appUser = one;
                    this.updateById(appUser);
                } else {
                    // 不存在账户,创建账户
                    // 注册用户信息
                    sysUser = new SysUser();
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                    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 = new AppUser();
                    appUser.setAppleId(appleId);
                    appUser.setUserId(sysUserRes.getUserId());
                    appUser.setNickname(nickname);
                    appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setDevice(device);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH" + format + randomCode);
                    this.save(appUser);
                    remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }else{
                // 不存在账户,创建账户
                // 注册用户信息
                sysUser = new SysUser();
                String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                sysUser.setNickName(nickname);
                sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                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 = new AppUser();
                appUser.setAppleId(appleId);
                appUser.setUserId(sysUserRes.getUserId());
                appUser.setNickname(nickname);
                appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setIncome(BigDecimal.ZERO);
                appUser.setTotalEnergyValue(0);
                appUser.setDevice(device);
                appUser.setRegisterTime(LocalDateTime.now());
                appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                appUser.setCode("YH" + format + randomCode);
                this.save(appUser);
                remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                // 初始化用户树苗
                initUserTree(appUser.getId());
            }
        }
        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.setUserid(sysUser.getUserId());
            appLoginUser.setUsername(appUser.getNickname());
            appLoginUser.setAppUserId(appUser.getId());
            appLoginUser.setSysUser(sysUser);
            return appLoginUser;
        }
        /**
         * 验证码登录
         *
         * @param body
         * @return
         */
        @Override
        @Transactional(rollbackFor = Exception.class)
        public AppLoginUser appCaptchaLogin (AppCaptchaBody body){
            AppLoginUser appLoginUser = new AppLoginUser();
            Optional<AppUser> optionalAppUser = this.getUserByCondition(
                    AppUserDTO.builder().device(body.getDevice()).cellPhone(body.getCellPhone()).build());
            AppUser appUser = new AppUser();
            SysUser sysUser = new SysUser();
            if (optionalAppUser.isPresent()) {
                appUser = optionalAppUser.get();
                sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
            } else {
                if (org.springframework.util.StringUtils.hasLength(body.getDevice())) {
                    AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                            .eq(AppUser::getDevice, body.getDevice())
                            .isNull(AppUser::getCellPhone));
                    if (one != null) {
                        initUserTree(appUser.getId());
                        appUser = one;
                    } else {
                        // 注册用户信息
                        sysUser = new SysUser();
                        String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                        sysUser.setNickName(nickname);
                        sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                        sysUser.setUserName(body.getCellPhone());
                        sysUser.setUserType("01"); // app用户
                        // 设置默认密码123456
                        sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
                        R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                                SecurityConstants.INNER);
                        if (registerResult.getCode() == Constants.FAIL) {
                            throw new ServiceException(registerResult.getMsg());
                        }
                        SysUser sysUserRes = registerResult.getData();
                        appUser = new AppUser();
                        appUser.setUserId(sysUserRes.getUserId());
                        appUser.setNickname(nickname);
                        appUser.setCellPhone(body.getCellPhone());
                        appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                        appUser.setBalance(BigDecimal.ZERO);
                        appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                        appUser.setBalance(BigDecimal.ZERO);
                        appUser.setIncome(BigDecimal.ZERO);
                        appUser.setTotalEnergyValue(0);
                        appUser.setRegisterTime(LocalDateTime.now());
                        appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                        String format = simpleDateFormat.format(new Date());
                        // 生成四位随机数字
                        String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                        appUser.setCode("YH" + format + randomCode);
                        this.save(appUser);
                        remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                        // 初始化用户树苗
                        initUserTree(appUser.getId());
                    }
                } else {
                    // 注册用户信息
                    sysUser = new SysUser();
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                    sysUser.setUserName(body.getCellPhone());
                    sysUser.setUserType("01"); // app用户
                    // 设置默认密码123456
                    sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
                    R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                            SecurityConstants.INNER);
                    if (registerResult.getCode() == Constants.FAIL) {
                        throw new ServiceException(registerResult.getMsg());
                    }
                    SysUser sysUserRes = registerResult.getData();
                    appUser = new AppUser();
                    appUser.setUserId(sysUserRes.getUserId());
                    appUser.setNickname(nickname);
                    appUser.setCellPhone(body.getCellPhone());
                    appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH" + format + randomCode);
                    this.save(appUser);
                    remoteMeditationService.addHomeBackgroundMusicDefault(appUser.getId());
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }
            appLoginUser.setUserid(sysUser.getUserId());
            appLoginUser.setUsername(appUser.getNickname());
            appLoginUser.setAppUserId(appUser.getId());
            appLoginUser.setSysUser(sysUser);
            appLoginUser.setCellPhone(appUser.getCellPhone());
            return appLoginUser;
        }
        return appLoginUser;
    }
    /**
     * 验证码登录
     *
     * @param body
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    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 = optionalAppUser.get();
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
        } else {
            // 注册用户信息
            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));
            R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                    SecurityConstants.INNER);
            if (registerResult.getCode() == Constants.FAIL) {
                throw new ServiceException(registerResult.getMsg());
            }
            SysUser sysUserRes = registerResult.getData();
            appUser = new AppUser();
            appUser.setUserId(sysUserRes.getUserId());
            appUser.setNickname(nickname);
            appUser.setCellPhone(body.getCellPhone());
            appUser.setAvatar("qwer"); // TODO 待完善默认头像
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
        }
        appLoginUser.setUserid(sysUser.getUserId());
        appLoginUser.setUsername(appUser.getNickname());
        appLoginUser.setAppUserId(appUser.getId());
        appLoginUser.setSysUser(sysUser);
        appLoginUser.setCellPhone(appUser.getCellPhone());
        return appLoginUser;
    }
    /**
     * 初始化用户树苗
@@ -297,11 +540,15 @@
     * @param appUserId 用户id
     */
    private void initUserTree(Long appUserId) {
        if (appUserTreeService.lambdaQuery().eq(AppUserTree::getSowAgain,2).eq(AppUserTree::getAppUserId,appUserId).one()!=null){
            return;
        }
        AppUserTree appUserTree = new AppUserTree();
        appUserTree.setAppUserId(appUserId);
        appUserTree.setTreeLevelType(TreeLevelEnum.SEED.getCode());
        appUserTree.setGrowthValue(0);
        appUserTree.setSowAgain(2);
        appUserTree.setTime(LocalDateTime.now());
        appUserTreeService.save(appUserTree);
    }
@@ -323,6 +570,12 @@
        // 如果存在 更新wxOpenId 或appleId
        if (baseOptionalAppUser.isPresent()) {
            appUser = baseOptionalAppUser.get();
            if (appUser.getWxOpenId() !=null){
                throw new ServiceException("该手机号已绑定其他微信号,请更换手机号重新绑定");
            }
            if (appUser.getAppleId() !=null){
                throw new ServiceException("该手机号已绑定其他苹果号,请更换手机号重新绑定");
            }
            switch (body.getLoginType()){
                case 1:
                    this.remove(new LambdaQueryWrapper<AppUser>()
@@ -350,12 +603,14 @@
            }
        } else {
            Optional<AppUser> userOptional = getAppUserByThirdId(loginType, wxOrAppleId);
            if (loginType.equals(1)) {
                // 微信登录
                handleUserNotPresent(userOptional, "该用户不存在,请重新进行微信授权登录");
            } else {
                // 苹果登录
                handleUserNotPresent(userOptional, "该用户不存在,请重新进行苹果授权登录");
            if (!userOptional.isPresent()) {
                if (loginType.equals(1)) {
                    // 微信登录
                    handleUserNotPresent(userOptional, "该用户不存在,请重新进行微信授权登录");
                } else {
                    // 苹果登录
                    handleUserNotPresent(userOptional, "该用户不存在,请重新进行苹果授权登录");
                }
            }
            appUser = userOptional.get();
            appUser.setCellPhone(body.getCellPhone());
@@ -368,16 +623,15 @@
            }
            sysUser.setUserName(body.getCellPhone());
            sysUser.setPassword(
                    SecurityUtils.encryptPassword(
                            SecureUtil.md5(Constants.DEFAULT_PASSWORD).toUpperCase(
                                    Locale.ROOT)))
            ; // 默认密码为123456
                    SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD))
            ; // 默认密码为a12345678
            sysUser.setPhonenumber(body.getCellPhone());
            sysUserClient.updateSysUser(sysUser);
        }
        // 更新用户信息
        this.updateById(appUser);
        AppLoginUser appLoginUser = new AppLoginUser();
        appLoginUser.setAppUserId(appUser.getId());
        appLoginUser.setBindStatus(1);
        appLoginUser.setCellPhone(body.getCellPhone());
        appLoginUser.setSysUser(sysUser);
@@ -412,49 +666,119 @@
     */
    @Override
    public void saveUserAnswers(UserAnswerDTO dto) {
        // 获取当前登录用户
        Long userId = tokenService.getLoginUser().getUserid();
        AppUser appUser = this.getById(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)) {
        if (tokenService.getLoginUser()==null){
            // 获取当前登录用户
            if (org.springframework.util.StringUtils.hasLength(dto.getDevice())){
                AppUser one = this.lambdaQuery().eq(AppUser::getDevice, dto.getDevice())
                        .isNull(AppUser::getCellPhone).one();
                if (one==null){
                    SysUser sysUser = new SysUser();
                    AppUser appUser = new AppUser();
                    // 注册用户信息
                    sysUser = new SysUser();
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                    sysUser.setUserName(nickname);
                    sysUser.setUserType("01"); // app用户
                    // 设置默认密码123456
                    sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
                    R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                            SecurityConstants.INNER);
                    if (registerResult.getCode() == Constants.FAIL) {
                        throw new ServiceException(registerResult.getMsg());
                    }
                    SysUser sysUserRes = registerResult.getData();
                    appUser = new AppUser();
                    appUser.setUserId(sysUserRes.getUserId());
                    appUser.setNickname(nickname);
                    appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    appUser.setDevice(dto.getDevice());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH"+format+randomCode);
                    this.save(appUser);
                    Long userId = appUser.getId();
                    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()));
                            appUserQuestion.setAppUserId(userId);
                        }
                    }
                    for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                        appUserQuestion.setAppUserId(userId);
                    }
                    appUserQuestionService.saveOrUpdateBatch(appUserQuestionList);
                    // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
                    List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                            .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                                    || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
                    appUser.setTagId(dto.getTagIds());
                    this.updateById(appUser);
                }else{
                    List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList(
                            dto.getUserAnswerOneDTOList(), AppUserQuestion.class);
                    // 查询用户已填写的答案
                    // 删除之前答案
                    appUserQuestionService.lambdaUpdate().eq(AppUserQuestion::getAppUserId,one.getId()).remove();
                    // 根据类型更新答案
                    for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                        appUserQuestion.setAppUserId(one.getId());
                    }
                    appUserQuestionService.saveBatch(appUserQuestionList);
                    // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
                    List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                            .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                                    || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
                    one.setTagId(dto.getTagIds());
                    this.updateById(one);
                }
                }
        }else{
            Long userId = tokenService.getLoginUser().getUserid();
            AppUser appUser = this.getById(userId);
            List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList(
                    dto.getUserAnswerOneDTOList(), AppUserQuestion.class);
            // 查询用户已填写的答案
            // 删除之前答案
            appUserQuestionService.lambdaUpdate().eq(AppUserQuestion::getAppUserId,userId).remove();
            // 根据类型更新答案
            for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                Optional<AppUserQuestion> baseAppUserQuestionOptional = baseAppUserQuestionList.stream()
                        .filter(baseAppUserQuestion -> baseAppUserQuestion.getType()
                                .equals(appUserQuestion.getType())).findFirst();
                baseAppUserQuestionOptional.ifPresent(
                        userQuestion -> appUserQuestion.setId(userQuestion.getId()));
                appUserQuestion.setAppUserId(userId);
                    appUserQuestion.setAppUserId(userId);
            }
            appUserQuestionService.saveBatch(appUserQuestionList);
            // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
            List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                    .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                            || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
            appUser.setTagId(dto.getTagIds());
            this.updateById(appUser);
        }
        for (AppUserQuestion appUserQuestion : appUserQuestionList) {
            appUserQuestion.setAppUserId(userId);
        }
        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 -> Objects.requireNonNull(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);
    }
    /**