From 3f481005be717250a2ea87ff9367aa84d6a3eb13 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 14 九月 2024 10:55:52 +0800
Subject: [PATCH] 课程代码

---
 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java |  261 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 254 insertions(+), 7 deletions(-)

diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
index 078516d..9ebadda 100644
--- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
+++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
@@ -1,22 +1,47 @@
 package com.xinquan.user.controller.client;
 
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xinquan.common.core.domain.R;
+import com.xinquan.common.core.utils.page.BeanUtils;
+import com.xinquan.common.core.utils.page.PageDTO;
+import com.xinquan.common.core.web.domain.BaseModel;
+import com.xinquan.common.security.utils.SecurityUtils;
+import com.xinquan.order.api.feign.RemoteOrderService;
+import com.xinquan.system.api.RemoteBannerService;
+import com.xinquan.system.api.domain.AppUser;
+import com.xinquan.system.api.domain.AppUserTree;
+import com.xinquan.system.api.domain.AppUserViewingHistory;
+import com.xinquan.system.api.domain.UserLevelSetting;
+import com.xinquan.system.api.domain.vo.*;
 import com.xinquan.user.domain.dto.UserAnswerDTO;
-import com.xinquan.user.domain.vo.AppUserVO;
 import com.xinquan.user.domain.vo.TagVO;
 import com.xinquan.user.service.AppUserService;
+import com.xinquan.user.service.AppUserTreeService;
+import com.xinquan.user.service.AppUserViewingHistoryService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+import static com.xinquan.common.core.enums.TreeLevelEnum.TOWERING_TREES;
 
 /**
  * <p>
@@ -34,12 +59,208 @@
 public class ClientAppUserController {
 
     private final AppUserService appUserService;
+    @Resource
+    private AppUserViewingHistoryService appUserViewingHistoryService;
 
+    @Resource
+    private AppUserTreeService appUserTreeService;
+    @Resource
+    private RemoteBannerService remoteBannerService;
+    @Resource
+    private RemoteOrderService remoteOrderService;
+    public static void main(String[] args) {
+        LocalDateTime dateTime = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String formattedDateTime = dateTime.format(formatter);
+        System.err.println(formattedDateTime);
+    }
+    /**
+     * 爱心助力榜单-分页
+     *
+     * @param pageCurr    分页参数,当前页码
+     * @param pageSize    分页参数,每页数量
+     * @return 课程分页列表
+     */
+    @PostMapping("/myInviteRankList")
+    @ApiOperation(value = "我的助力-分页", tags = {"个人中心"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = true, dataType = "Integer"),
+            @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = true, dataType = "Integer")
+    })
+    public R<PageDTO<InviteRankListVO>> myInviteRankList(
+            @RequestParam(value = "pageCurr", defaultValue = "1") Integer pageCurr,
+            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        Long userId = SecurityUtils.getUserId();
+        if (userId == 0)return R.tokenError("登录失效");
+        Page<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
+                .eq(AppUser::getInviteUserId, userId)
+                .page(new Page<>(pageCurr, pageSize));
+        // 查询登录用户邀请了哪些人
+        List<Long> collect = page.getRecords().stream().map(AppUser::getId).collect(Collectors.toList());
+        if (collect.isEmpty())return R.ok(PageDTO.empty(page));
+        StringBuilder stringBuilder = new StringBuilder();
+        collect.forEach(id -> stringBuilder.append(id).append(","));
+        // 去除最后一位
+        StringBuilder stringBuilder1 = stringBuilder.deleteCharAt(stringBuilder.length() - 1);
+        String[] split = stringBuilder1.toString().split(",");
+        for (int i = 0; i < page.getRecords().size(); i++) {
+            AppUser appUser = page.getRecords().get(i);
+            appUser.setMoney(new BigDecimal(split[i]));
+        }
+        // 根据佣金金额 从大到小排序
+        page.getRecords().sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
+        return R.ok(PageDTO.of(page, InviteRankListVO.class));
+    }
+    /**
+     * 爱心助力榜单-分页
+     *
+     * @param pageCurr    分页参数,当前页码
+     * @param pageSize    分页参数,每页数量
+     * @return 课程分页列表
+     */
+    @PostMapping("/inviteRankList")
+    @ApiOperation(value = "爱心助力榜单-分页", tags = {"个人中心"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = true, dataType = "Integer"),
+            @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = true, dataType = "Integer")
+    })
+    public R<PageDTO<InviteRankListVO>> inviteRankList(
+            @RequestParam(value = "pageCurr", defaultValue = "1") Integer pageCurr,
+            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        Page<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
+                .page(new Page<>(pageCurr, pageSize));
+        for (AppUser appUser : page.getRecords()) {
+            int size = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .list().size();
+            appUser.setCount(size);
+        }
+        // 根据帮助人数 从大到小排序
+        page.getRecords().sort((o1, o2) -> o2.getCount() - o1.getCount());
+        return R.ok(PageDTO.of(page, InviteRankListVO.class)) ;
+    }
+    @PostMapping("/getUserInfo")
+    @ApiOperation(value = "获取用户信息", tags = {"个人中心"})
+    public R<AppUserInfoVO> getUserInfo() {
+        Long userId = SecurityUtils.getUserId();
+        if (userId == 0)return R.tokenError("登录失效");
+        AppUserInfoVO appUserInfoVO = new AppUserInfoVO();
+        AppUserVO currentUser = appUserService.getCurrentUser();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if (currentUser.getVipExpireTime() == null){
+            appUserInfoVO.setIsVip(2);
+        }else if (currentUser.getVipExpireTime().isAfter(LocalDateTime.now())){
+            appUserInfoVO.setIsVip(1);
+            String formattedDateTime =currentUser.getVipExpireTime().format(formatter);
+            appUserInfoVO.setVipExpireTime(formattedDateTime);
+        }else{
+            String formattedDateTime =currentUser.getVipExpireTime().format(formatter);
+            appUserInfoVO.setVipExpireTime(formattedDateTime);
+            appUserInfoVO.setIsVip(2);
+        }
+        // 查询用户累计学习天数
+        List<AppUserViewingHistory> com = appUserViewingHistoryService.cumulative(userId);
+        appUserInfoVO.setCumulative(com.size());
+        // 查询用户今日学习多少分钟
+        int temp = appUserViewingHistoryService.today(userId);
+        if (temp == 0){
+            appUserInfoVO.setToday(0);
+        }else if (temp<60){
+            // 不足一分钟按一分钟计算
+            appUserInfoVO.setToday(1);
+        }else{
+            appUserInfoVO.setToday(temp/60);
+        }
+        // 查询用户连续观看天数
+        List<AppUserViewingHistory> list = appUserViewingHistoryService.lambdaQuery().eq(AppUserViewingHistory::getAppUserId, userId)
+                .eq(AppUserViewingHistory::getViewingType, 1)
+                .orderByDesc(BaseModel::getCreateTime).list();
+        Set<LocalDate> viewingDates = list.stream()
+                .map(record -> LocalDate.parse(record.getCreateTime().toLocalDate().toString(), formatter))
+                .collect(Collectors.toCollection(HashSet::new));
+        // 获取今天的日期
+        LocalDate today = LocalDate.now();
+        // 计算连续观看天数
+        int consecutiveDays = 0;
+        LocalDate currentDate = today;
+        // 如果今天没有观看 也进入循环判断
+        while (viewingDates.contains(currentDate)||LocalDate.parse(currentDate.toString(), formatter).equals(today)) {
+            if (!viewingDates.contains(currentDate)){
+                // 如果今天没有观看
+                currentDate = currentDate.minusDays(1);
+                continue;
+            }
+            consecutiveDays++;
+            currentDate = currentDate.minusDays(1);
+        }
+        appUserInfoVO.setToday(consecutiveDays);
+        List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
+                .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);
+        // 查询疗愈等级 名称 图标
+        int level = 1;
+        if (tree != null){
+            level = tree.getTreeLevelType();
+        }
+        appUserInfoVO.setLevel(level);
+        // 根据等级查询疗愈名称和图标
+        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
+        appUserInfoVO.setLevelName(data.getLevelName());
+        appUserInfoVO.setLevelIcon(data.getLevelIcon());
+        return R.ok(appUserInfoVO);
+    }
+    @PostMapping("/getUserDetail")
+    @ApiOperation(value = "获取个人资料", tags = {"个人中心"})
+    public R<AppUser> getUserDetail() {
+        Long userId = SecurityUtils.getUserId();
+        if (userId == 0)return R.tokenError("登录失效");
+        AppUser appUser = appUserService.lambdaQuery().eq(AppUser::getId, userId).one();
+        return R.ok(appUser);
+    }
+    @PostMapping("/getTotalEnergyValue")
+    @ApiOperation(value = "获取用户当前累计能量值",tags = "树苗打卡站")
+    public R getTotalEnergyValue() {
+        Long userId = SecurityUtils.getUserId();
+        if (userId==0)return R.tokenError("登录失效");
+        AppUser byId = appUserService.getById(userId);
+        return R.ok(byId.getTotalEnergyValue());
+    }
+    @PostMapping("/updateUserDetail")
+    @ApiOperation(value = "修改个人资料", tags = {"个人中心"})
+    public R<AppUser> updateUserDetail(UpdateAppUserDTO dto) {
+        Long userId = SecurityUtils.getUserId();
+        if (userId == 0)return R.tokenError("登录失效");
+        AppUser byId = appUserService.getById(userId);
+        BeanUtils.copyProperties(dto, byId);
+//        LambdaUpdateWrapper<AppUser> updateWrapper = new LambdaUpdateWrapper<>(AppUser.class);
+//        updateWrapper.set(AppUser::getNickname, byId.getNickname());
+//        updateWrapper.set(AppUser::getSignature, byId.getSignature());
+//        updateWrapper.set(AppUser::getAvatar, byId.getAvatar());
+//        updateWrapper.set(AppUser::getGender, byId.getGender());
+//        updateWrapper.set(AppUser::getBirthday, byId.getBirthday());
+//        updateWrapper.set(AppUser::getEducation, byId.getEducation());
+//        updateWrapper.set(AppUser::getIndustry, byId.getIndustry());
+//        updateWrapper.set(AppUser::getCompany, byId.getCompany());
+//        updateWrapper.set(AppUser::getOccupation, byId.getOccupation());
+//        updateWrapper.set(AppUser::getLocation, byId.getLocation());
+//        updateWrapper.set(AppUser::getHometown, byId.getHometown());
+//        appUserService.update(byId, )
+        return R.ok();
+    }
     /**
      * 获取当前登录用户信息
      *
      * @return 用户信息
-     * @see com.xinquan.user.domain.vo.AppUserVO
+     * @see AppUserVO
      */
     @PostMapping("/getCurrentUser")
     @ApiOperation(value = "获取当前用户信息", tags = {"用户端-用户信息相关接口"})
@@ -48,6 +269,32 @@
     }
 
     /**
+     * 通过手机号查询用户端用户信息
+     *
+     * @return 用户信息
+     * @see AppUserVO
+     */
+    @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);
+    }
+    @PostMapping("/getUserBalance")
+    @ApiOperation(value = "查询当前用户余额")
+    public R<String> getUserBalance() {
+        Long userId = SecurityUtils.getUserId();
+        if (userId == 0)return R.tokenError("登录失效");
+        AppUser one = appUserService.lambdaQuery().eq(AppUser::getUserId, userId).one();
+        return R.ok(one.getBalance().toString());
+    }
+
+    /**
      * 获取问题二的标签列表
      *
      * @return List<TagVO>

--
Gitblit v1.7.1