From 3ec572e2cb7adf7d33d2018b24c003d9ef18906a Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 12 十一月 2024 13:32:51 +0800 Subject: [PATCH] 代码提交 --- xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java | 715 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 407 insertions(+), 308 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 82ea0cb..611c8fe 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 @@ -6,23 +6,29 @@ 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.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; @@ -52,6 +58,7 @@ 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; @@ -113,7 +120,86 @@ private RemoteOrderService remoteOrderService; @Resource private RemoteUserService remoteUserService; + @Resource + private NoticeRecordService noticeRecordService; + @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(); + return R.ok(list); + } + @PostMapping("/bindVx") + @ApiOperation(value = "绑定微信号", tags = "个人中心") + public R bindVx(String openId,String wxName) { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + AppUser byId = appUserService.getById(loginUser.getUserid()); + AppUser one = appUserService.lambdaQuery().eq(AppUser::getWxOpenId, openId) + .isNotNull(AppUser::getCellPhone) + .ne(AppUser::getUserStatus, 3).one(); + if (one!=null){ + return R.fail("当前微信号已绑定其他账号"); + } + byId.setWxOpenId(openId); + byId.setWxName(wxName); + appUserService.updateById(byId); + return R.ok(); + } public static void main(String[] args) { // 获取当前年份 int currentYear = LocalDate.now().getYear(); @@ -263,105 +349,7 @@ stringBuilder.append(year); return R.ok(stringBuilder.toString()); } -// public static void main(String[] args) { -// // 收件人电子邮箱,TODO 换成自己的收件箱 -// String to = "443237572@qq.com"; -// // 发件人电子邮箱,TODO 换成自己的发件箱 -// String from = "13281306557@163.com"; -// // 指定发送邮件的主机为 -// String host = "smtp.163.com"; -// Properties properties = new Properties(); -// // 设置邮件服务器 -// properties.setProperty("mail.smtp.host", host); -// // 邮件发送协议 -// properties.setProperty("mail.transport.protocol", "smtp"); -// //是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息) -// properties.setProperty("mail.debug","true"); -// properties.setProperty("mail.smtp.auth", "true"); -// // 获取默认session对象 -// Session session = Session.getDefaultInstance(properties,new Authenticator(){ -// @Override -// public PasswordAuthentication getPasswordAuthentication() -// { -// //发件人邮件用户名、授权码,换成自己的发件箱及授权码 -// return new PasswordAuthentication("13281306557@163.com", "NUSdxDQqadYvVek2"); -// } -// }); -// -// try{ -// // 创建默认的 MimeMessage 对象 -// MimeMessage message = new MimeMessage(session); -// // Set From,设置发件人 -// InternetAddress fromMail = new InternetAddress(from); -// //设置发件人名称,TODO 换成自己的发件箱 -// fromMail.setPersonal(MimeUtility.encodeText("明星电力<13281306557@163.com>")); -// message.setFrom(fromMail); -// // Set To: 设置收件人 -// InternetAddress toMail = new InternetAddress(to); -// // TODO 换成自己的收件箱 -// InternetAddress toMail2 = new InternetAddress("443237572@qq.com"); -// //发一个邮箱 -//// message.setRecipient(Message.RecipientType.TO, toMail); -// //发多个邮箱 -// Address[] allRecipients = {toMail, toMail2}; -// message.setRecipients(Message.RecipientType.TO, allRecipients); -// // Set Subject: 邮件主体 -// message.setSubject("明星电力"); -// // 设置消息体 -// message.setSentDate(new Date()); -// // 指定为混合关系 -// MimeMultipart msgMultipart = new MimeMultipart("mixed"); -// message.setContent(msgMultipart); -// // 邮件信息组装 -// //组装的顺序非常重要,一定要先组装文本域,再组装文件 -// MimeBodyPart htmlPart = new MimeBodyPart(); -// // 组装内容 -// htmlPart.setContent("This is message content", "text/html;charset=UTF-8"); -// msgMultipart.addBodyPart(htmlPart); -// // 组装附件 -// MimeBodyPart filePart = new MimeBodyPart(); -// String imageUrl = "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/xinquan/b176cf9af35d4773a276e55b7afe3b63.mp4"; -// try { -// // 下载数据 -// URL url = new URL(imageUrl); -// InputStream inputStream = url.openStream(); -// byte[] imageBytes = IOUtils.toByteArray(inputStream); -// // 创建临时文件 -// // 截取imageUrl后缀名 -// String fileExtension = imageUrl.substring(imageUrl.lastIndexOf(".")); -// File tempFile = File.createTempFile("tempImage", fileExtension); -// try (FileOutputStream fos = new FileOutputStream(tempFile)) { -// fos.write(imageBytes); -// } -// // 创建 FileDataSource -// FileDataSource fileDataSource = new FileDataSource(tempFile); -// System.out.println("FileDataSource created: " + fileDataSource.getName()); -// // 如果需要,可以使用 DataHandler 进行进一步处理 -// DataHandler dh = new DataHandler(fileDataSource); -// // 清理:删除临时文件(如果不再需要) -// tempFile.deleteOnExit(); // 可根据需要保留或删除 -//// DataHandler dh = new DataHandler(dataSource); -// filePart.setDataHandler(dh); -// // 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码 -// filePart.setFileName(MimeUtility.encodeText(dh.getName())); -// msgMultipart.addBodyPart(filePart); -// -// message.saveChanges(); -// //发送 -// //Transport.send(message, message.getAllRecipients()); -// Transport.send(message); -// System.out.println("Sent mail successfully...."); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// //TODO 换成自己的附件地址 -// -// }catch (MessagingException | UnsupportedEncodingException mex) { -// mex.printStackTrace(); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } + @PostMapping("/userDetail") @ApiOperation(value = "用户详情-基础信息", tags = "管理后台-用户管理") @@ -375,23 +363,11 @@ }else{ byId.setIsVip(1); } - List<AppUserTree> list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, byId.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, uid) + .eq(AppUserTree::getSowAgain,2) + .one(); // 查询疗愈等级 名称 图标 - int level = 1; - if (tree != null){ - level = tree.getTreeLevelType(); - } + int level = list1.getTreeLevelType(); // 根据等级查询疗愈名称和图标 UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData(); byId.setLevel(level); @@ -424,17 +400,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 +435,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 +460,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 +501,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 +541,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 +906,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); @@ -969,6 +965,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)); @@ -1042,8 +1039,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 = {"设置"}) @@ -1053,7 +1080,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 +1100,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 +1142,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 +1175,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 +1213,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 +1264,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 = {"个人中心"}) @@ -1274,23 +1347,14 @@ 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); + appUserInfoVO.setContinuity(consecutiveDays); + AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId) + .eq(AppUserTree::getSowAgain,2) + .one(); // 查询疗愈等级 名称 图标 int level = 1; - if (tree != null){ - level = tree.getTreeLevelType(); + if (list1 != null){ + level = list1.getTreeLevelType(); } appUserInfoVO.setLevel(level); // 根据等级查询疗愈名称和图标 @@ -1315,8 +1379,60 @@ }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.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() { @@ -1325,88 +1441,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); @@ -1443,7 +1540,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); @@ -1482,13 +1579,19 @@ @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); + AppUser one = appUserService.lambdaQuery().eq(AppUser::getCellPhone, phone) + .ne(AppUser::getUserStatus,3).one(); + if (one!=null){ + 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 = "查询当前用户余额") @@ -1523,11 +1626,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(); } -- Gitblit v1.7.1