无关风月
2024-12-31 0c51a577db337520452022d9d6a22b720ef858d4
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
@@ -6,24 +6,30 @@
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinquan.common.core.constant.CacheConstants;
import com.xinquan.common.core.domain.R;
import com.xinquan.common.core.exception.ServiceException;
import com.xinquan.common.core.utils.WebUtils;
import com.xinquan.common.core.utils.page.BeanUtils;
import com.xinquan.common.core.utils.page.CollUtils;
import com.xinquan.common.core.utils.page.PageDTO;
import com.xinquan.common.core.web.domain.BaseModel;
import com.xinquan.common.redis.service.RedisService;
import com.xinquan.common.security.service.TokenService;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.course.api.domain.Course;
import com.xinquan.course.api.domain.CourseCategory;
import com.xinquan.course.api.domain.CourseDTO;
import com.xinquan.course.api.domain.OrderCourseVO;
import com.xinquan.meditation.api.domain.Meditation;
import com.xinquan.order.api.feign.RemoteOrderService;
import com.xinquan.system.api.RemoteBannerService;
import com.xinquan.system.api.RemoteUserService;
import com.xinquan.system.api.domain.*;
import com.xinquan.system.api.domain.vo.*;
import com.xinquan.system.api.feignClient.SysUserClient;
import com.xinquan.system.api.model.LoginUser;
import com.xinquan.user.api.domain.dto.AppUserManagementDTO;
import com.xinquan.user.api.domain.dto.OrderListDTO;
@@ -53,9 +59,11 @@
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
@@ -114,6 +122,165 @@
    private RemoteOrderService remoteOrderService;
    @Resource
    private RemoteUserService remoteUserService;
    @Resource
    private NoticeRecordService noticeRecordService;
    @Resource
    private AppUserBlackService appUserBlackService;
    /**
     * 远程调用 查询当前登陆人拉黑列表
     * @param appUserId
     */
    @PostMapping("/getUserBlackList/{appUserId}")
    public R<List<Long>> getUserBlackList(@PathVariable("appUserId") Long appUserId){
        List<Long> collect = appUserBlackService.lambdaQuery().eq(AppUserBlack::getAppUserId, appUserId).list()
                .stream().map(AppUserBlack::getBlackId).collect(Collectors.toList());
        return R.ok(collect);
    }
    @PostMapping("/blackUser")
    @ApiOperation(value = "取消拉黑功能", tags = "IOS拉黑列表--用于上架")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "被拉黑用户id", name = "appUserId", required = true, dataType = "Long"),
    })
    public R blackUser(Long appUserId) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        AppUserBlack one = appUserBlackService.lambdaQuery().eq(AppUserBlack::getAppUserId, loginUser.getAppUserId())
                .eq(AppUserBlack::getBlackId, appUserId).one();
        if (one==null){
            // 拉黑
            AppUserBlack appUserBlack = new AppUserBlack();
            appUserBlack.setAppUserId(loginUser.getAppUserId());
            appUserBlack.setBlackId(appUserId);
            appUserBlackService.save(appUserBlack);
        }else {
            // 取消拉黑
            appUserBlackService.removeById(one.getId());
        }
        return R.ok();
    }
    @GetMapping("/blackList")
    @ApiOperation(value = "IOS拉黑列表", tags = "IOS拉黑列表--用于上架")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = true, dataType = "Integer"),
            @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = true, dataType = "Integer")
    })
    public R<PageDTO<AppUser>> blackList(Integer pageCurr, Integer pageSize) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        List<Long> collect = appUserBlackService.lambdaQuery().eq(AppUserBlack::getAppUserId, loginUser.getAppUserId()).list()
                .stream().map(AppUserBlack::getBlackId).collect(Collectors.toList());
        if (collect.isEmpty()){
            collect.add(-1L);
        }
        Page<AppUser> page = appUserService.lambdaQuery().in(AppUser::getId, collect).page(new Page<>(pageCurr, pageSize));
        if (CollUtils.isEmpty(page.getRecords())){
            PageDTO<AppUser> empty = PageDTO.empty(page);
            return R.ok(empty);
        }
        return R.ok(PageDTO.of(page, AppUser.class));
    }
    @PostMapping("/subVipExpireTime/{appUserId}/{type}")
    public void subVipExpireTime(@PathVariable("appUserId") Long appUserId,@PathVariable("type") Integer type){
        AppUser byId = appUserService.getById(appUserId);
        switch (type){
            case 1:
                LocalDateTime localDateTime = byId.getVipExpireTime().minusDays(30);
                byId.setVipExpireTime(localDateTime);
                break;
            case 2:
                LocalDateTime localDateTime1 = byId.getVipExpireTime().minusDays(90);
                byId.setVipExpireTime(localDateTime1);
                break;
            case 3:
                LocalDateTime localDateTime2 = byId.getVipExpireTime().minusDays(365);
                byId.setVipExpireTime(localDateTime2);
                break;
        }
        appUserService.updateById(byId);
    }
    @ApiOperation(value = "会员临期", tags = "会员临期")
    @PostMapping("/testVip")
    public void testVip() {
        LocalDateTime now = LocalDateTime.now();
        List<AppUser> list = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3).list();
        for (AppUser appUser : list) {
            if (appUser.getVipExpireTime()!=null && appUser.getVipExpireTime().isAfter(now)){
                // 计算两个now和time的天数差
                long between = ChronoUnit.DAYS.between(now,appUser.getVipExpireTime());
                if (between<=7 &&between>=0){
                    NoticeRecord noticeRecord = new NoticeRecord();
                    noticeRecord.setAppUserId(appUser.getId());
                    noticeRecord.setReadStatus(1);
                    noticeRecord.setNoticeType(1);
                    noticeRecord.setTitle("【会员临期通知】");
                    noticeRecord.setContent("尊敬的泉疗愈会员你好,你的会员即将在"
                            +appUser.getVipExpireTime().toLocalDate()+"到期,到期后将不再享受会员权益,请及时续费");
                    noticeRecordService.save(noticeRecord);
                }
            }
        }
    }
    @GetMapping("/deleteBalance/{id}/{amount}")
    public R deleteBalance(@PathVariable("id")String id,@PathVariable("amount")String amount) {
        AppUser byId = appUserService.getById(id);
        if (byId!=null){
            BigDecimal subtract = byId.getBalance().subtract(new BigDecimal(amount));
            if (subtract.compareTo(BigDecimal.ZERO)<0){
                byId.setBalance(BigDecimal.ZERO);
            }
        }
        return R.ok();
    }
    @GetMapping("/testNotice")
    @ApiOperation(value = "测试通知", tags = "测试通知")
    public R testNotice() {
        LocalDateTime now = LocalDateTime.now();
        List<AppUser> list = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3).list();
        for (AppUser appUser : list) {
            if (appUser.getVipExpireTime()!=null && appUser.getVipExpireTime().isAfter(now)){
                // 计算两个now和time的天数差
                long between = Math.abs(ChronoUnit.DAYS.between(appUser.getVipExpireTime(), now));
                if (between<=7){
                    NoticeRecord noticeRecord = new NoticeRecord();
                    noticeRecord.setAppUserId(appUser.getId());
                    noticeRecord.setReadStatus(1);
                    noticeRecord.setNoticeType(1);
                    noticeRecord.setTitle("【会员临期通知】");
                    noticeRecord.setContent("尊敬的泉疗愈会员你好,你的会员即将在"
                            +appUser.getVipExpireTime().toLocalDate()+"到期,到期后将不再享受会员权益,请及时续费");
                    noticeRecordService.save(noticeRecord);
                }
            }
            AppUserTree one = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, appUser.getId())
                    .eq(AppUserTree::getSowAgain, 2).one();
            if(one!=null && (one.getTaskOne()==2||one.getTaskTwo()==2)){
                NoticeRecord noticeRecord = new NoticeRecord();
                noticeRecord.setAppUserId(appUser.getId());
                noticeRecord.setReadStatus(1);
                noticeRecord.setNoticeType(1);
                noticeRecord.setTitle("【冥想通知】");
                noticeRecord.setContent("你今天的冥想任务还未完成,完成冥想后可获得能量值奖励,快去冥想吧!");
                noticeRecordService.save(noticeRecord);
            }
        }
        return R.ok();
    }
    @GetMapping("/getUserByPhone/{phone}")
    public R<AppUser> getUserByPhone(@PathVariable("phone")String phone) {
        AppUser one = appUserService.lambdaQuery().eq(AppUser::getCellPhone, phone).ne(AppUser::getUserStatus, 3)
                .one();
        return R.ok(one);
    }
    @GetMapping("/getAllUserList")
    public R<List<AppUser>> getAllUserList() {
        List<AppUser> list = appUserService.list();
@@ -367,8 +534,13 @@
        byId.setFreezingTime(LocalDateTime.now());
        byId.setFreezingReason(dto.getFreezingReason());
        byId.setUserStatus(2);
        byId.setFreezingOperator(tokenService.getLoginUser().getUserid()+"");
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser data = remoteUserService.getSysUserById(userid + "").getData();
        byId.setFreezingOperator(data.getNickName()+"("+data.getUserName()+")");
        appUserService.updateById(byId);
        String cacheList = redisService.getCacheObject(byId.getId() + "");
        redisService.deleteObject(cacheList);
        return R.ok();
    }
    @GetMapping("/detail")
@@ -445,7 +617,6 @@
            }
        }
        byId.setTotalEnergyValue(byId.getTotalEnergyValue()+energyValue);
        byId.setEnergyValue(byId.getEnergyValue()+energyValue);
        appUserService.updateById(byId);
        AppUserEnergyRecord appUserEnergyRecord = new AppUserEnergyRecord();
        appUserEnergyRecord.setAppUserId(byId.getId());
@@ -546,8 +717,8 @@
        String endTime = null;
        if (org.springframework.util.StringUtils.hasLength(dto.getTime())){
            String[] split = dto.getTime().split(" - ");
            startTime = split[0]+"00:00:00";
            endTime = split[1]+"23:59:59";
            startTime = split[0]+" 00:00:00";
            endTime = split[1]+" 23:59:59";
        }
        String userId = dto.getUid();
        LambdaQueryWrapper<AppUser> appUserWalletRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -613,15 +784,15 @@
        String endTime = null;
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getVipExpireTime())){
            String[] split = courseDTO.getVipExpireTime().split(" - ");
            startTime = split[0]+"00:00:00";
            endTime = split[1]+"23:59:59";
            startTime = split[0]+" 00:00:00";
            endTime = split[1]+" 23:59:59";
        }
        String startTime1 = null;
        String endTime1 = null;
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getRegisterTime())){
            String[] split = courseDTO.getRegisterTime().split(" - ");
            startTime1 = split[0]+"00:00:00";
            endTime1 = split[1]+"23:59:59";
            startTime1 = split[0]+" 00:00:00";
            endTime1 = split[1]+" 23:59:59";
        }
        List<Long> longs = new ArrayList<>();
        LambdaQueryWrapper<AppUser> courseLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -656,23 +827,11 @@
            List<AppUser> list = appUserService.lambdaQuery().list();
            List<AppUser> appUsers = new ArrayList<>();
            for (AppUser appUser : list) {
                List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, appUser.getId())
                        .list();
                // 查询用户等级最高的那颗树苗
                AppUserTree tree = list1.stream().max((o1, o2) -> {
                    if (o1.getTreeLevelType() > o2.getTreeLevelType()) {
                        return 1;
                    } else if (o1.getTreeLevelType() < o2.getTreeLevelType()) {
                        return -1;
                    } else {
                        return 0;
                    }
                }).orElse(null);
                AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, appUser.getId())
                        .eq(AppUserTree::getSowAgain,2)
                        .one();
                // 查询疗愈等级 名称 图标
                int level = 1;
                if (tree != null){
                    level = tree.getTreeLevelType();
                }
                int level = list1.getTreeLevelType();
                if (list2.contains(level+"")){
                    appUsers.add(appUser);
                }
@@ -683,6 +842,7 @@
            }
            courseLambdaQueryWrapper.in(AppUser::getId, collect);
        }
        courseLambdaQueryWrapper.isNotNull(AppUser::getCellPhone);
        List<AppUser> page = appUserService.list(courseLambdaQueryWrapper);
        List<UserExport> userExports = new ArrayList<>();
        for (AppUser record : page) {
@@ -695,23 +855,11 @@
            }else{
                record.setIsVip(1);
            }
            List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, record.getId())
                    .list();
            // 查询用户等级最高的那颗树苗
            AppUserTree tree = list1.stream().max((o1, o2) -> {
                if (o1.getTreeLevelType() > o2.getTreeLevelType()) {
                    return 1;
                } else if (o1.getTreeLevelType() < o2.getTreeLevelType()) {
                    return -1;
                } else {
                    return 0;
                }
            }).orElse(null);
            AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, record.getId())
                    .eq(AppUserTree::getSowAgain,2)
                    .one();
            // 查询疗愈等级 名称 图标
            int level = 1;
            if (tree != null){
                level = tree.getTreeLevelType();
            }
            int level = list1.getTreeLevelType();
            // 根据等级查询疗愈名称和图标
            UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
            record.setLevel(level);
@@ -751,6 +899,13 @@
            userExport.setUserStatus(record.getUserStatus()+"");
            List<AppUserQuestion> list = appUserQuestionService.lambdaQuery()
                    .eq(AppUserQuestion::getAppUserId, record.getId()).list();
                userExport.setType1("");
                userExport.setType2("");
                userExport.setType3("");
                userExport.setType4("");
                userExport.setType5("");
                userExport.setType6("");
                userExport.setType6("");
            for (AppUserQuestion appUserQuestion : list) {
                switch (appUserQuestion.getType()){
                    case 1:
@@ -773,17 +928,15 @@
                        break;
                }
            }
            List<Integer> collect = appUserTagService.lambdaQuery()
                    .eq(AppUserTag::getAppUserId, record.getId()).list().stream()
                    .map(AppUserTag::getTagId)
                    .collect(Collectors.toList());
            if (collect.isEmpty()){
                collect.add(-1);
            List<String> collect = new ArrayList<>();
            if (org.springframework.util.StringUtils.hasLength(record.getTagId())) {
                collect = tagService.lambdaQuery()
                        .in(Tag::getId, Arrays.stream(record.getTagId().split(",")).map(Long::parseLong).collect(Collectors.toList())).list().stream()
                                .map(Tag::getTagName).collect(Collectors.toList());
            }
            List<Tag> list2 = tagService.lambdaQuery().in(Tag::getId, collect).list();
            StringBuilder stringBuilder = new StringBuilder();
            for (Tag tag : list2) {
                stringBuilder.append(tag.getTagName()).append(";");
            for (String tag : collect) {
                stringBuilder.append(tag).append(";");
            }
            userExport.setType7(stringBuilder+"");
            userExport.setSanskritFlag(record.getSanskritFlag()+"");
@@ -822,15 +975,15 @@
        String endTime = null;
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getVipExpireTime())){
            String[] split = courseDTO.getVipExpireTime().split(" - ");
            startTime = split[0]+"00:00:00";
            endTime = split[1]+"23:59:59";
            startTime = split[0]+" 00:00:00";
            endTime = split[1]+" 23:59:59";
        }
        String startTime1 = null;
        String endTime1 = null;
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getRegisterTime())){
            String[] split = courseDTO.getRegisterTime().split(" - ");
            startTime1 = split[0]+"00:00:00";
            endTime1 = split[1]+"23:59:59";
            startTime1 = split[0]+" 00:00:00";
            endTime1 = split[1]+" 23:59:59";
        }
        List<Long> longs = new ArrayList<>();
        LambdaQueryWrapper<AppUser> courseLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -903,6 +1056,7 @@
            }
            courseLambdaQueryWrapper.in(AppUser::getId, collect);
        }
        courseLambdaQueryWrapper.isNotNull(AppUser::getCellPhone);
        Page<AppUser> page = appUserService.page(new Page<>(courseDTO.getPageCurr(), courseDTO.getPageSize()), courseLambdaQueryWrapper);
        if (CollUtils.isEmpty(page.getRecords())) {
            return R.ok(PageDTO.empty(page));
@@ -976,8 +1130,38 @@
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        // 校验验证码
        if (!verifyCaptcha(phone, code,
                CacheConstants.APP_CHANGE_PHONE_CODE_PREFIX)) {
            throw new ServiceException("验证码不正确");
        }
        AppUser byId = appUserService.getById(userId);
        AppUser one = appUserService.lambdaQuery().eq(AppUser::getCellPhone, phone)
                .ne(AppUser::getId, userId)
                .ne(AppUser::getUserStatus, 3).one();
        if (one!=null){
            return R.fail("当前手机号已被绑定");
        }
        byId.setCellPhone(phone);
        boolean b = appUserService.updateById(byId);
        return R.ok();
    }
    @Autowired
    private RedisService redisService;
    private boolean verifyCaptcha(String cellPhone, String captcha, String keyPrefix) {
        if (com.xinquan.common.core.utils.StringUtils.isNotBlank(cellPhone) && com.xinquan.common.core.utils.StringUtils.isNotBlank(captcha)) {
            String key = keyPrefix + cellPhone;
            String code = redisService.getCacheObject(key);
            // 万能验证码
            if (captcha.equals("123456") || (com.xinquan.common.core.utils.StringUtils.isNotBlank(code) && code.equals(
                    captcha))) {
                redisService.deleteObject(key);
                return true;
            }
        }
        return false;
    }
    @PostMapping("/deleteUser")
    @ApiOperation(value = "注销账号", tags = {"设置"})
@@ -1098,7 +1282,7 @@
        page.sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
        List<AppUser> testing = testing(page.size(), pageCurr, pageSize, page);
        objectPage.setTotal(testing.size());
        objectPage.setTotal(page.size());
        objectPage.setRecords(testing);
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class));
    }
@@ -1192,6 +1376,23 @@
        objectPage.setTotal(res.size());
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class)) ;
    }
    @PostMapping("/inviteRankListShareInfo")
    @ApiOperation(value = "爱心助力榜单详情-分页", tags = {"H5分享"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "id", name = "id", required = true, dataType = "Long"),
            @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = true, dataType = "Integer"),
            @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = true, dataType = "Integer")
    })
    public R<PageDTO<InviteRankListVO>> inviteRankListShareInfo(
            @RequestParam(value = "id") Long id,
            @RequestParam(value = "pageCurr", defaultValue = "1") Integer pageCurr,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        LambdaQueryWrapper<AppUser> appUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
        appUserLambdaQueryWrapper.eq(AppUser::getInviteUserId,id);
        appUserLambdaQueryWrapper.ne(AppUser::getUserStatus,3);
        Page<AppUser> page = appUserService.page(new Page<>(pageCurr, pageSize), appUserLambdaQueryWrapper);
        return R.ok(PageDTO.of(page, InviteRankListVO.class)) ;
    }
    @PostMapping("/getUserInfo")
    @ApiOperation(value = "获取用户信息", tags = {"个人中心"})
    public R<AppUserInfoVO> getUserInfo() {
@@ -1254,7 +1455,7 @@
            consecutiveDays++;
            currentDate = currentDate.minusDays(1);
        }
        appUserInfoVO.setToday(consecutiveDays);
        appUserInfoVO.setContinuity(consecutiveDays);
        AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                .eq(AppUserTree::getSowAgain,2)
                .one();
@@ -1331,13 +1532,15 @@
            consecutiveDays++;
            currentDate = currentDate.minusDays(1);
        }
        appUser.setToday(consecutiveDays);
        appUser.setContinuity(consecutiveDays);
        // 根据等级查询疗愈名称和图标
        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
        appUser.setLevelName(data.getLevelName());
        appUser.setLevelIcon(data.getLevelIcon());
        return R.ok(appUser);
    }
    @Resource
    private SysUserClient sysUserClient;
    @PostMapping("/healingLevel")
    @ApiOperation(value = "冥想等级", tags = {"个人中心"})
    public R<HealingLevelVO> healingLevel() {
@@ -1346,88 +1549,69 @@
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                .list();
        if (list1.isEmpty()){
            AppUserTree appUserTree = new AppUserTree();
            appUserTree.setAppUserId(userId);
            appUserTree.setTreeLevelType(1);
            appUserTree.setGrowthValue(0);
            appUserTree.setSowAgain(2);
            appUserTree.setStatus(2);
            appUserTree.setCreateTime(LocalDateTime.now());
            appUserTreeService.save(appUserTree);
        }
        // 查询用户等级最高的那颗树苗
        AppUserTree tree = list1.stream().max((o1, o2) -> {
            if (o1.getTreeLevelType() > o2.getTreeLevelType()) {
                return 1;
            } else if (o1.getTreeLevelType() < o2.getTreeLevelType()) {
                return -1;
            } else {
                return 0;
            }
        }).orElse(null);
        // 查询疗愈等级 名称 图标
        int level = 1;
        if (tree != null){
            level = tree.getTreeLevelType();
        }
        HealingLevelVO healingLevelVO = new HealingLevelVO();
        HealingLevelVO healingLevelVO = new HealingLevelVO();
        AppUser one = appUserService.getById(userId);
        AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                .eq(AppUserTree::getSowAgain,2)
                .one();
        // 查询疗愈等级 名称 图标
        int level = list1.getTreeLevelType();
        healingLevelVO.setLevel(level);
        // 查询疗愈等级 名称 图标
        if (list1 != null){
            level = list1.getTreeLevelType();
        }
        healingLevelVO.setLevel(level);
        // 根据等级查询疗愈名称和图标
        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
        healingLevelVO.setLevelName(data.getLevelName());
        healingLevelVO.setLevelIcon(data.getLevelIcon());
        if (level==10){
            healingLevelVO.setNextLevel(2400);
        }else{
            switch (level){
                case 1:
                    healingLevelVO.setNextLevel(1000);
                    healingLevelVO.setDifferenceLevel(1000-tree.getGrowthValue());
        List<TreeLevelSetting> data3 = sysUserClient.getTreeGroup().getData();
                    break;
                case 2:
                    healingLevelVO.setNextLevel(1000);
                    healingLevelVO.setDifferenceLevel(1000-tree.getGrowthValue());
                    break;
                case 3:
                    healingLevelVO.setNextLevel(1000);
                    healingLevelVO.setDifferenceLevel(1000-tree.getGrowthValue());
                    break;
                case 4:
                    healingLevelVO.setNextLevel(1000);
                    healingLevelVO.setDifferenceLevel(1000-tree.getGrowthValue());
                    break;
                case 5:
                    healingLevelVO.setNextLevel(2000);
                    healingLevelVO.setDifferenceLevel(2000-tree.getGrowthValue());
                    break;
                case 6:
                    healingLevelVO.setNextLevel(2000);
                    healingLevelVO.setDifferenceLevel(2000-tree.getGrowthValue());
                    break;
                case 7:
                    healingLevelVO.setNextLevel(2000);
                    healingLevelVO.setDifferenceLevel(2000-tree.getGrowthValue());
                    break;
                case 8:
                    healingLevelVO.setNextLevel(2000);
                    healingLevelVO.setDifferenceLevel(2000-tree.getGrowthValue());
                    break;
                case 9:
                    healingLevelVO.setNextLevel(2400);
                    healingLevelVO.setDifferenceLevel(2400-tree.getGrowthValue());
                    break;
                case 10:
                    healingLevelVO.setNextLevel(2400);
                    healingLevelVO.setDifferenceLevel(2400-tree.getGrowthValue());
                    break;
        Integer total1 = list1.getTotal();
        // 根据总能量值 确定他在哪一等级
        int x = 1;
        int tem = 0;
        for (TreeLevelSetting datum : data3) {
            if (total1 == 0){
                Integer growthValue = data3.get(1).getGrowthValue();
                tem = growthValue;
                break;
            }else if (total1>=datum.getGrowthValue()){
                x = datum.getTreeLevelType();
            }
        }
        healingLevelVO.setGrowthValue(tree.getGrowthValue());
        if (x == 10){
            // 如果等级为10那么成长阈值是10级减去9级
            int ten=0;
            int nine = 0;
            for (TreeLevelSetting datum : data3) {
                if (datum.getTreeLevelType()==10){
                    ten = datum.getGrowthValue();
                }
                if (datum.getTreeLevelType()==9){
                    nine = datum.getGrowthValue();
                }
            }
            tem = ten-nine;
            total1 = tem;
        }else{
            // 根据当前所在等级查询成长值
            int a = data3.get(x).getGrowthValue()-data3.get(x-1).getGrowthValue();
            tem = a;
            total1 = Math.abs(total1-data3.get(x-1).getGrowthValue());
        }
        if (x==10){
            healingLevelVO.setDifferenceLevel(0);
            healingLevelVO.setGrowthValue(tem);
        }else{
            healingLevelVO.setDifferenceLevel(tem-total1);
            healingLevelVO.setGrowthValue(total1);
        }
        healingLevelVO.setNextLevel(tem);
        healingLevelVO.setLevel(x);
        // 将当前成长值更新
        String data1 = remoteUserService.getCourseList(7).getData();
        healingLevelVO.setContent(data1);
        return R.ok(healingLevelVO);
@@ -1503,13 +1687,27 @@
    @PostMapping("/getUserByPhone")
    @ApiOperation(value = "根据用户手机号查询用户信息")
    public R<AppUserDetailVO> getCurrentUser(String phone) {
        AppUser one = appUserService.lambdaQuery().eq(AppUser::getCellPhone, phone).one();
        AppUserDetailVO appUserDetailVO = new AppUserDetailVO();
        appUserDetailVO.setId(one.getId());
        appUserDetailVO.setCellPhone(one.getCellPhone());
        appUserDetailVO.setAvatar(one.getAvatar());
        appUserDetailVO.setNickname(one.getNickname());
        return R.ok(appUserDetailVO);
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        AppUser one = appUserService.lambdaQuery().eq(AppUser::getCellPhone, phone)
                .ne(AppUser::getUserStatus,3).one();
        if (one!=null){
            if (one.getId().equals(loginUser.getUserid())){
                return R.giveError("不能赠送给自己");
            }
            AppUserDetailVO appUserDetailVO = new AppUserDetailVO();
            appUserDetailVO.setId(one.getId());
            appUserDetailVO.setCellPhone(one.getCellPhone());
            appUserDetailVO.setAvatar(one.getAvatar());
            appUserDetailVO.setNickname(one.getNickname());
            return R.ok(appUserDetailVO);
        }else {
            return R.fail("未查询到账户信息");
        }
    }
    @PostMapping("/getUserBalance")
    @ApiOperation(value = "查询当前用户余额")
@@ -1544,11 +1742,7 @@
    @PostMapping("/saveUserAnswers")
    @ApiOperation(value = "保存计划引导页用户的答案", tags = {"用户端-计划引导相关接口"})
    public R<?> saveUserAnswers(@Validated @RequestBody UserAnswerDTO dto) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        appUserService.saveUserAnswers(dto);
        return R.ok();
    }