xuhy
2024-11-09 e360c48dccb05305936c6e81e0409965bd48a93e
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
@@ -18,6 +18,7 @@
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.order.api.feign.RemoteOrderService;
import com.xinquan.system.api.RemoteBannerService;
import com.xinquan.system.api.RemoteUserService;
@@ -113,7 +114,11 @@
    private RemoteOrderService remoteOrderService;
    @Resource
    private RemoteUserService remoteUserService;
    @GetMapping("/getAllUserList")
    public R<List<AppUser>> getAllUserList() {
        List<AppUser> list = appUserService.list();
        return R.ok(list);
    }
    public static void main(String[] args) {
        // 获取当前年份
        int currentYear = LocalDate.now().getYear();
@@ -424,17 +429,19 @@
            appUserQuestions.add(appUserQuestion);
        }
        List<Tag> list1 = tagService.lambdaQuery().eq(Tag::getTagType,2).list();
        String[] split = tagId.split(",");
        List<String> list2 = Arrays.asList(split);
        if (!list2.isEmpty()){
            for (Tag tag : list1) {
                if (list2.contains(tag.getId().toString())){
                    tag.setIsCheck(1);
        if (org.springframework.util.StringUtils.hasLength(tagId)){
            String[] split = tagId.split(",");
            List<String> list2 = Arrays.asList(split);
            if (!list2.isEmpty()){
                for (Tag tag : list1) {
                    if (list2.contains(tag.getId().toString())){
                        tag.setIsCheck(1);
                    }
                }
            }
        }else{
            for (Tag tag : list1) {
                    tag.setIsCheck(2);
                tag.setIsCheck(2);
            }
        }
        viewReport.setQuestions(appUserQuestions);
@@ -457,9 +464,6 @@
    }
    @GetMapping("/detail")
    @ApiOperation(value = "用户详情", tags = "管理后台-用户管理")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "uid", value = "uid", dataType = "String", required = true),
    })
    public R<AppUser> detail(String uid) {
        AppUser byId = appUserService.getById(uid);
        List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, byId.getId())
@@ -485,6 +489,12 @@
        if (data!=null){
            byId.setLevelName(data.getLevelName());
            byId.setLevelIcon(data.getLevelIcon());
        }
        if (org.springframework.util.StringUtils.hasLength(byId.getTagId())){
            List<String> list = Arrays.asList(byId.getTagId().split(","));
            List<String> collect = tagService.lambdaQuery().in(Tag::getId, list).list().stream()
                    .map(Tag::getTagName).collect(Collectors.toList());
            byId.setTags(collect);
        }
        return R.ok(byId);
    }
@@ -520,6 +530,11 @@
    })
    public R setTotalEnergyValue(String uid,Integer energyValue,String reason) {
        AppUser byId = appUserService.getById(uid);
        if (energyValue<0){
            if (byId.getTotalEnergyValue()<Math.abs(energyValue)){
                return R.fail("扣除能量值应小于当前能量值");
            }
        }
        byId.setTotalEnergyValue(byId.getTotalEnergyValue()+energyValue);
        byId.setEnergyValue(byId.getEnergyValue()+energyValue);
        appUserService.updateById(byId);
@@ -555,10 +570,9 @@
        AppUser byId = appUserService.getById(uid);
        switch (vipType){
            case 1:
                appUserLambdaUpdateWrapper.set(AppUser::getVipExpireTime,null);
                appUserLambdaUpdateWrapper.set(AppUser::getVipLevel,null);
                appUserLambdaUpdateWrapper.eq(AppUser::getId,byId.getUserId());
                appUserService.update(appUserLambdaUpdateWrapper);
                byId.setVipExpireTime(null);
                byId.setVipLevel(null);
                appUserService.updateById(byId);
                break;
            case 2:
                if (byId.getVipExpireTime() == null){
@@ -921,43 +935,54 @@
                .orderByDesc(AppUser::getRegisterTime);
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getVipType())){
            String[] split = courseDTO.getVipType().split(",");
            List<String> list1 = Arrays.asList(split);
            List<Integer> objects = new ArrayList<>();
            for (String s : split) {
                objects.add(Integer.parseInt(s)-1);
            }
            List<AppUser> appUsers = new ArrayList<>();
            List<AppUser> list = appUserService.lambdaQuery().gt(AppUser::getVipExpireTime, LocalDateTime.now()).list();
            List<AppUser> list = appUserService.lambdaQuery().list();
            for (AppUser appUser : list) {
                if(appUser.getVipLevel()!=null){
                    if (list1.contains(appUser.getVipLevel().toString())){
               if (objects.contains(0)){
                   if (appUser.getVipExpireTime()==null){
                       appUsers.add(appUser);
                   }else if (appUser.getVipExpireTime().isBefore(LocalDateTime.now())){
                       appUsers.add(appUser);
                   }
                }
                if (objects.contains(1)){
                    if (appUser.getVipExpireTime()!=null&&appUser.getVipExpireTime().isAfter(LocalDateTime.now())&&appUser.getVipLevel()==1){
                        appUsers.add(appUser);
                    }
                }
                if (objects.contains(2)){
                    if (appUser.getVipExpireTime()!=null&&appUser.getVipExpireTime().isAfter(LocalDateTime.now())&&appUser.getVipLevel()==2){
                        appUsers.add(appUser);
                    }
                }
                if (objects.contains(3)){
                    if (appUser.getVipExpireTime()!=null&&appUser.getVipExpireTime().isAfter(LocalDateTime.now())&&appUser.getVipLevel()==3){
                        appUsers.add(appUser);
                    }
                }
            }
            List<Long> collect = appUsers.stream().map(AppUser::getId).collect(Collectors.toList());
            List<Long> collect = appUsers.stream().distinct().map(AppUser::getId).collect(Collectors.toList());
            if (collect.isEmpty()){
                collect.add(-1L);
            }
            courseLambdaQueryWrapper.in(AppUser::getId, longs);
            courseLambdaQueryWrapper.in(AppUser::getId, collect);
        }
        if (org.springframework.util.StringUtils.hasLength(courseDTO.getLevel())){
            List<String> list2 = Arrays.asList(courseDTO.getLevel().split(","));
            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();
                if (list1 != null){
                    level = list1.getTreeLevelType();
                }
                if (list2.contains(level+"")){
                    appUsers.add(appUser);
@@ -1053,7 +1078,12 @@
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        AppUser byId = appUserService.getById(userId);
        byId.setUserStatus(3);
        byId.setLogoutTime(LocalDateTime.now());
        appUserService.updateById(byId);
        appUserService.removeById(byId);
        remoteUserService.removeByAppUserId(byId.getUserId());
        return R.ok();
    }
    @PostMapping("/wallet")
@@ -1068,7 +1098,22 @@
        WalletVO walletVO = new WalletVO();
        walletVO.setId(userId);
        walletVO.setBalance(byId.getBalance());
        walletVO.setIncome(byId.getIncome());
        List<AppUser> page = appUserService.lambdaQuery()
                .eq(AppUser::getInviteUserId, userId)
                .list();
        // 查询登录用户邀请了哪些人
        List<Long> collect = page.stream().map(AppUser::getId).collect(Collectors.toList());
        BigDecimal bigDecimal1 = new BigDecimal("0");
        for (AppUser record : page) {
            List<AppUserWalletRecord> list = appUserWalletRecordService.lambdaQuery().eq(AppUserWalletRecord::getAppUserId, userId)
                    .like(AppUserWalletRecord::getReason,"分佣").eq(AppUserWalletRecord::getChildAppUserId, record.getId()).list();
            BigDecimal reduce = list.stream().map(AppUserWalletRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            bigDecimal1 = bigDecimal1.add(reduce);
            record.setMoney(reduce);
        }
        walletVO.setIncome(bigDecimal1);
        // 查询用户充值
        String data = remoteOrderService.queryChargeByUserId(userId).getData();
        BigDecimal bigDecimal = new BigDecimal(data);
@@ -1095,33 +1140,27 @@
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        Page<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                .eq(AppUser::getInviteUserId, userId)
                .page(new Page<>(pageCurr, pageSize));
        if (page.getRecords().isEmpty()){
            return R.ok(PageDTO.empty(page));
        }
        // 查询登录用户邀请了哪些人
        List<Long> collect = page.getRecords().stream().map(AppUser::getId).collect(Collectors.toList());
        if (collect.isEmpty())return R.ok(PageDTO.empty(page));
        for (int i = 0; i < page.getRecords().size(); i++) {
            AppUser appUser = page.getRecords().get(i);
            // 查询该给用户带来收益
            List<AppUserWalletRecord> list = appUserWalletRecordService.lambdaQuery().eq(AppUserWalletRecord::getAppUserId, userId)
                    .eq(AppUserWalletRecord::getChildAppUserId,appUser.getUserId()).list();
            BigDecimal bigDecimal = new BigDecimal("0");
            for (AppUserWalletRecord appUserWalletRecord : list) {
                if (appUserWalletRecord.getAmount()!=null && appUserWalletRecord.getChangeType() == 1){
                    bigDecimal = bigDecimal.add(appUserWalletRecord.getAmount());
                }
            }
            appUser.setMoney(bigDecimal);
        Page<AppUser> objectPage = new Page<>(pageCurr, pageSize);
        Long userId = loginUser.getUserid();
        List<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                .eq(AppUser::getInviteUserId, userId)
                .list();
        // 查询登录用户邀请了哪些人
        List<Long> collect = page.stream().map(AppUser::getId).collect(Collectors.toList());
        for (AppUser record : page) {
            List<AppUserWalletRecord> list = appUserWalletRecordService.lambdaQuery().eq(AppUserWalletRecord::getAppUserId, userId)
                    .like(AppUserWalletRecord::getReason,"分佣").eq(AppUserWalletRecord::getChildAppUserId, record.getId()).list();
            BigDecimal reduce = list.stream().map(AppUserWalletRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            record.setMoney(reduce);
        }
        // 根据佣金金额 从大到小排序
        page.getRecords().sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
        return R.ok(PageDTO.of(page, InviteRankListVO.class));
        page.sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
        List<AppUser> testing = testing(page.size(), pageCurr, pageSize, page);
        objectPage.setTotal(testing.size());
        objectPage.setRecords(testing);
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class));
    }
    @PostMapping("/myInviteRankListShare")
    @ApiOperation(value = "我的助力-分页", tags = {"H5分享"})
@@ -1134,32 +1173,25 @@
            @RequestParam(value = "pageCurr", defaultValue = "1") Integer pageCurr,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
            @RequestParam(value = "userId") String userId) {
        Page<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
        Page<AppUser> objectPage = new Page<>(pageCurr, pageSize);
        List<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                .eq(AppUser::getInviteUserId, userId)
                .page(new Page<>(pageCurr, pageSize));
        if (page.getRecords().isEmpty()){
            return R.ok(PageDTO.empty(page));
        }
                .list();
        // 查询登录用户邀请了哪些人
        List<Long> collect = page.getRecords().stream().map(AppUser::getId).collect(Collectors.toList());
        if (collect.isEmpty())return R.ok(PageDTO.empty(page));
        for (int i = 0; i < page.getRecords().size(); i++) {
            AppUser appUser = page.getRecords().get(i);
            // 查询该给用户带来收益
        List<Long> collect = page.stream().map(AppUser::getId).collect(Collectors.toList());
        for (AppUser record : page) {
            List<AppUserWalletRecord> list = appUserWalletRecordService.lambdaQuery().eq(AppUserWalletRecord::getAppUserId, userId)
                    .eq(AppUserWalletRecord::getChildAppUserId,appUser.getUserId()).list();
            BigDecimal bigDecimal = new BigDecimal("0");
            for (AppUserWalletRecord appUserWalletRecord : list) {
                if (appUserWalletRecord.getAmount()!=null && appUserWalletRecord.getChangeType() == 1){
                    bigDecimal = bigDecimal.add(appUserWalletRecord.getAmount());
                }
            }
            appUser.setMoney(bigDecimal);
                    .like(AppUserWalletRecord::getReason,"分佣").eq(AppUserWalletRecord::getChildAppUserId, record.getId()).list();
            BigDecimal reduce = list.stream().map(AppUserWalletRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            record.setMoney(reduce);
        }
        // 根据佣金金额 从大到小排序
        page.getRecords().sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
        return R.ok(PageDTO.of(page, InviteRankListVO.class));
        page.sort((o1, o2) -> o2.getMoney().compareTo(o1.getMoney()));
        List<AppUser> testing = testing(page.size(), pageCurr, pageSize, page);
        objectPage.setTotal(testing.size());
        objectPage.setRecords(testing);
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class));
    }
    @Resource
    private AppUserWalletRecordService appUserWalletRecordService;
@@ -1179,17 +1211,47 @@
    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()) {
        Page<AppUser> objectPage = new Page<>(pageCurr, pageSize);
        List<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                .list();
        List<AppUser> res = new ArrayList<>();
        for (AppUser appUser : page) {
            int size = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                    .eq(AppUser::getInviteUserId, appUser.getId())
                    .list().size();
            appUser.setCount(size);
            if (size>0){
                res.add(appUser);
            }
        }
        // 根据帮助人数 从大到小排序
        page.getRecords().sort((o1, o2) -> o2.getCount() - o1.getCount());
        return R.ok(PageDTO.of(page, InviteRankListVO.class)) ;
        res.sort((o1, o2) -> o2.getCount() - o1.getCount());
        List<AppUser> testing = testing(res.size(), pageCurr, pageSize, res);
        objectPage.setRecords(testing);
        objectPage.setTotal(res.size());
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class)) ;
    }
    public static List<AppUser> testing(long total, long current, long size, List<AppUser> str){
        List<AppUser> result = new ArrayList<>();
        //获取初始化分页结构
        Page<AppUser> page = new Page<>(current - 1, size, total);
        //获取集合下标初始值
        long startIndex = (current - 1) * size;
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @PostMapping("/inviteRankListShare")
    @ApiOperation(value = "爱心助力榜单-分页", tags = {"H5分享"})
@@ -1200,17 +1262,26 @@
    public R<PageDTO<InviteRankListVO>> inviteRankListShare(
            @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()) {
        Page<AppUser> objectPage = new Page<>(pageCurr, pageSize);
        List<AppUser> page = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                .list();
        List<AppUser> res = new ArrayList<>();
        for (AppUser appUser : page) {
            int size = appUserService.lambdaQuery().ne(AppUser::getUserStatus, 3)
                    .eq(AppUser::getInviteUserId, appUser.getId())
                    .list().size();
            appUser.setCount(size);
            if (size>0){
                res.add(appUser);
            }
        }
        // 根据帮助人数 从大到小排序
        page.getRecords().sort((o1, o2) -> o2.getCount() - o1.getCount());
        return R.ok(PageDTO.of(page, InviteRankListVO.class)) ;
        res.sort((o1, o2) -> o2.getCount() - o1.getCount());
        List<AppUser> testing = testing(res.size(), pageCurr, pageSize, res);
        objectPage.setRecords(testing);
        objectPage.setTotal(res.size());
        return R.ok(PageDTO.of(objectPage, InviteRankListVO.class)) ;
    }
    @PostMapping("/getUserInfo")
    @ApiOperation(value = "获取用户信息", tags = {"个人中心"})
@@ -1315,6 +1386,56 @@
        }else{
            appUser.setIsVip(2);
        }
        AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                .eq(AppUserTree::getSowAgain,2)
                .one();
        // 查询疗愈等级 名称 图标
        int level = list1.getTreeLevelType();
        appUser.setLevel(level);
        // 查询用户累计学习天数
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        List<AppUserViewingHistory> com = appUserViewingHistoryService.cumulative(userId);
        appUser.setCumulative(com.size());
        // 查询用户今日学习多少分钟
        Integer temp = appUserViewingHistoryService.today(userId);
        if (temp == null){
            temp =0;
        }
        if (temp == 0){
            appUser.setToday(0);
        }else if (temp<60){
            // 不足一分钟按一分钟计算
            appUser.setToday(1);
        }else{
            appUser.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);
        }
        appUser.setToday(consecutiveDays);
        // 根据等级查询疗愈名称和图标
        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
        appUser.setLevelName(data.getLevelName());
        appUser.setLevelIcon(data.getLevelIcon());
        return R.ok(appUser);
    }
    @PostMapping("/healingLevel")
@@ -1443,7 +1564,7 @@
        updateWrapper.set(AppUser::getOccupation, dto.getOccupation());
        updateWrapper.set(AppUser::getLocation, dto.getLocation());
        updateWrapper.set(AppUser::getHometown, dto.getHometown());
        updateWrapper.set(AppUser::getEmail, dto.getEducation());
        updateWrapper.set(AppUser::getEmail, dto.getEmail());
        updateWrapper.eq(AppUser::getId,userId);
        appUserService.update(byId, updateWrapper);
        return R.ok(byId);