| | |
| | | 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.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; |
| | |
| | | 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; |
| | |
| | | private RemoteOrderService remoteOrderService; |
| | | @Resource |
| | | private RemoteUserService remoteUserService; |
| | | @Resource |
| | | private NoticeRecordService noticeRecordService; |
| | | @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.tokenError("登录失效"); |
| | | } |
| | | Long userId = loginUser.getUserid(); |
| | | // 校验验证码 |
| | | if (!verifyCaptcha(phone, code, |
| | | CacheConstants.APP_CHANGE_PHONE_CODE_PREFIX)) { |
| | | throw new ServiceException("验证码不正确"); |
| | | } |
| | | AppUser byId = appUserService.getById(userId); |
| | | |
| | | 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 = {"设置"}) |
| | |
| | | consecutiveDays++; |
| | | currentDate = currentDate.minusDays(1); |
| | | } |
| | | appUser.setContinuity(consecutiveDays); |
| | | appUser.setToday(consecutiveDays); |
| | | // 根据等级查询疗愈名称和图标 |
| | | UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData(); |
| | |
| | | appUser.setLevelIcon(data.getLevelIcon()); |
| | | return R.ok(appUser); |
| | | } |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | @PostMapping("/healingLevel") |
| | | @ApiOperation(value = "冥想等级", tags = {"个人中心"}) |
| | | public R<HealingLevelVO> healingLevel() { |
| | |
| | | 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); |
| | |
| | | @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 = "查询当前用户余额") |