From dd663d0ac783755d889e270eee57ee58630c88c8 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 28 二月 2025 17:46:52 +0800
Subject: [PATCH] 冥想2.0新增代码

---
 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java |  775 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 574 insertions(+), 201 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 09bad30..d74ba59 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
@@ -2,7 +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;
@@ -15,21 +16,20 @@
 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.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;
-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.user.api.domain.AppUser;
+import com.xinquan.system.api.model.*;
+import com.xinquan.system.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.system.api.domain.AppUserQuestion;
+import com.xinquan.system.api.domain.AppUserTree;
+import com.xinquan.system.api.domain.Tag;
 import com.xinquan.user.domain.dto.UserAnswerDTO;
-import com.xinquan.user.domain.vo.AppUserVO;
+import com.xinquan.system.api.domain.vo.AppUserVO;
 import com.xinquan.user.domain.vo.TagVO;
 import com.xinquan.user.mapper.AppUserMapper;
 import com.xinquan.user.service.AppUserQuestionService;
@@ -37,15 +37,17 @@
 import com.xinquan.user.service.AppUserTreeService;
 import com.xinquan.user.service.TagService;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Locale;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
+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>
@@ -64,6 +66,8 @@
     private final AppUserTreeService appUserTreeService;
     private final AppUserQuestionService appUserQuestionService;
     private final TagService tagService;
+    @Resource
+    private RemoteMeditationService remoteMeditationService;
     /**
      * 获取用户信息
      *
@@ -72,15 +76,54 @@
      */
     @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();
     }
+    @Override
+    public Optional<AppUser> getUserByCondition1(AppUserDTO dto) {
+        return this.lambdaQuery()
+                .eq(AppUser::getCellPhone,dto.getCellPhone())
+                .ne(AppUser::getUserStatus,3).oneOpt();
+    }
+
 
     /**
      * app用户注册
@@ -89,8 +132,41 @@
      */
     @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());
+        // 生成四位随机数字
+        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;
     }
 
@@ -104,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();
@@ -114,158 +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());
-            appUser.setWxOpenId(body.getWxOpenId());
-            appUser.setNickname(body.getNickname());
             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.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());
-            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());
-            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;
-    }
 
     /**
      * 初始化用户树苗
@@ -273,12 +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.setCurrentEnergyValue(0);
+        appUserTree.setTime(LocalDateTime.now());
         appUserTreeService.save(appUserTree);
     }
 
@@ -300,11 +570,32 @@
         // 如果存在 更新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>()
+                            .eq(AppUser::getWxOpenId,body.getWxOrAppleId())
+                            .ne(AppUser::getId,appUser.getId()));
+                    break;
+                case 2:
+                    this.remove(new LambdaQueryWrapper<AppUser>()
+                            .eq(AppUser::getAppleId,body.getWxOrAppleId())
+                            .ne(AppUser::getId,appUser.getId()));
+                    break;
+            }
+
             if (loginType.equals(1)) {
                 appUser.setWxOpenId(wxOrAppleId);
             } else {
                 appUser.setAppleId(wxOrAppleId);
             }
+            appUser.setEmail(body.getEmail());
+            appUser.setNickname(body.getName());
             // 查询系统用户
             sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
             if (Objects.isNull(sysUser)) {
@@ -312,16 +603,19 @@
             }
         } 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());
+            appUser.setEmail(body.getEmail());
+            appUser.setNickname(body.getName());
             // 更新系统用户
             sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
             if (Objects.isNull(sysUser)) {
@@ -329,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);
@@ -373,44 +666,119 @@
      */
     @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)) {
+        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);
             }
+            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);
         }
-        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);
     }
 
     /**
@@ -451,15 +819,20 @@
         this.updateById(appUser);
     }
 
+    @Autowired
+    private TokenService tokenService;
     /**
      * 获取当前登录用户信息
      *
      * @return 用户信息
-     * @see com.xinquan.user.domain.vo.AppUserVO
+     * @see AppUserVO
      */
     @Override
     public AppUserVO getCurrentUser() {
-        AppUser appUser = this.getById(SecurityUtils.getUserId());
+        LoginUser loginUser = tokenService.getLoginUser();
+
+        Long userId = loginUser.getUserid();
+        AppUser appUser = this.getById(userId);
         return BeanUtils.copyBean(appUser, AppUserVO.class);
     }
 }

--
Gitblit v1.7.1