xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java
@@ -33,6 +33,11 @@ public RemoteAppUserService create(Throwable cause) { return new RemoteAppUserService() { @Override public R<Integer> getCourseChapterHistoryState(Long id, Long chapterId) { return null; } @Override public R addNotice(String id, String courseId, String userId, String price) { return null; } xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java
@@ -29,6 +29,8 @@ */ @FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_USER_SERVICE, fallbackFactory = RemoteAppUserFallbackFactory.class) public interface RemoteAppUserService { @PostMapping("/user/app-user-viewing-history/getCourseChapterHistoryState/{id}/{chapterId}") public R<Integer> getCourseChapterHistoryState(@PathVariable("id") Long id,@PathVariable("chapterId") Long chapterId); @GetMapping("/addNotice/{id}/{courseId}/{userId}/{price}") public R addNotice(@PathVariable("id")String id,@PathVariable("courseId")String courseId ,@PathVariable("userId")String userId,@PathVariable("price")String price); xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java
@@ -93,6 +93,12 @@ return R.fail("当前手机号已被绑定"); } } if(type==4){ AppUser data = remoteAppUserService.getUserByPhone(cellPhone).getData(); if (data!=null && (data.getWxOpenId()!=null||data.getAppleId()!=null)){ return R.fail("当前手机号已被绑定"); } } sysLoginService.sendCaptchaCode(cellPhone, type); return R.ok(); } xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java
@@ -660,6 +660,17 @@ }else if (data!=null){ // 查询学习人数和头像列表 clientCourseVO.setCount(data.size()); List<CourseChapter> list = courseChapterService.lambdaQuery().eq(CourseChapter::getCourseId, byId.getId()) .list(); // 累加实际学习人数 int a = 0; int b = 0; for (CourseChapter courseChapter : list) { Long data2 = remoteAppUserService.getCourseChapterHistoryCount(courseChapter.getId()).getData(); a+=data2; b+=courseChapter.getVirtualLearnedNum(); } clientCourseVO.setCount(a+b); if (data.size()>=5){ clientCourseVO.setHeaders(data.stream().limit(5).map(AppUser::getAvatar).collect(Collectors.toList())); }else{ @@ -671,6 +682,7 @@ clientCourseVO.setIsBuy(1); } } } // 查询是否已收藏课程 clientCourseVO.setIsCollect(courseUserFavoriteService.lambdaQuery() @@ -686,15 +698,24 @@ .orderByDesc(CourseChapter::getSortNum) .list(); for (CourseChapter courseChapter : page) { int size = courseLearningRecordService.lambdaQuery() .eq(CourseLearningRecord::getChapterId, courseChapter.getId()) .list().size(); courseChapter.setRealLearnedNum(size+courseChapter.getVirtualLearnedNum()); // 累加实际学习人数 int a = 0; int b = 0; Long data2 = remoteAppUserService.getCourseChapterHistoryCount(courseChapter.getId()).getData(); a+=data2; b+=courseChapter.getVirtualLearnedNum(); courseChapter.setRealLearnedNum(a+b); courseChapter.setVirtualLearnedNum(0); LoginUser loginUser = tokenService.getLoginUser(); if (loginUser!=null){ Integer data1 = remoteAppUserService.getCourseChapterHistoryState(loginUser.getUserid(), courseChapter.getId()).getData(); courseChapter.setIsOver(data1); }else{ courseChapter.setIsOver(2); } } clientCourseVO.setList(page); clientCourseVO.setIsBuy(2); // 查询推荐课程 List<Course> list = courseService.lambdaQuery().eq(Course::getCateId, byId.getCateId()) .eq(Course::getCourseType,1) xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/service/impl/CourseServiceImpl.java
@@ -49,7 +49,9 @@ }else if (cateId!=null){ courseLambdaQueryWrapper.eq(Course::getCateId, cateId); } if (cateId==null){ courseLambdaQueryWrapper.eq(Course::getRecommend,1); } courseLambdaQueryWrapper.eq(Course::getListingStatus,1); courseLambdaQueryWrapper.orderByDesc(Course::getSortNum); Page<Course> page = this.page(new Page<>(pageCurr, pageSize),courseLambdaQueryWrapper); xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/impl/MeditationEverydayServiceImpl.java
@@ -1,14 +1,17 @@ package com.xinquan.meditation.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xinquan.common.core.utils.DateUtils; import com.xinquan.common.core.utils.page.BeanUtils; import com.xinquan.meditation.api.domain.Meditation; import com.xinquan.meditation.domain.MeditationEveryday; import com.xinquan.meditation.domain.MeditationMusic; import com.xinquan.meditation.domain.vo.ClientMeditationEverydayVO; import com.xinquan.meditation.domain.vo.ClientMeditationVO; import com.xinquan.meditation.mapper.MeditationEverydayMapper; import com.xinquan.meditation.mapper.MeditationMapper; import com.xinquan.meditation.mapper.MeditationMusicMapper; import com.xinquan.meditation.service.MeditationEverydayService; import java.util.List; @@ -29,6 +32,8 @@ public class MeditationEverydayServiceImpl extends ServiceImpl<MeditationEverydayMapper, MeditationEveryday> implements MeditationEverydayService { private final MeditationMapper meditationMapper; private final MeditationMusicMapper meditationMusicMapper; /** * 查询每日冥想 @@ -57,6 +62,7 @@ if (meditationEverydayOpt.isPresent()) { // 查询冥想详情 MeditationEveryday meditationEveryday = meditationEverydayOpt.get(); Long meditationId = meditationEveryday.getMeditationId(); Meditation meditation = meditationMapper.selectById(meditationId); Optional<Meditation> meditationOpt = Optional.ofNullable( @@ -68,12 +74,20 @@ ClientMeditationVO.class); vo = BeanUtils.copyBean(meditationEveryday, ClientMeditationEverydayVO.class); clientMeditationVO.setBackgroundUrl(meditationOpt.get().getBackgroundUrl()); vo.setClientMeditationVO(clientMeditationVO); if (meditation!=null){ vo.setImageUrl(meditation.getBackgroundUrl()); vo.setTime(Integer.valueOf(meditation.getTutorAudioSecond())); List<MeditationMusic> meditationId1 = meditationMusicMapper.selectList(new QueryWrapper<MeditationMusic>() .eq("meditation_id", meditationId)); int a= 0; for (MeditationMusic meditationMusic : meditationId1) { a += meditationMusic.getMusicSecond(); } vo.setTime(a); } } vo.setImageUrl(meditationEveryday.getImageUrl()); } return vo; } xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/controller/client/ClientOrderController.java
@@ -406,6 +406,11 @@ order.setRealPayAmount(data.getIosPrice()); break; } if (receiverId!=null){ remoteAppUserService.addNotice(receiverId + "", data.getId() + "", userId + "", order.getTotalAmount() + ""); } break; } xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/VersionController.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xinquan.common.core.domain.R; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.common.core.web.domain.BaseModel; import com.xinquan.common.security.service.TokenService; import com.xinquan.common.security.utils.SecurityUtils; import com.xinquan.system.api.domain.AppUser; @@ -41,6 +42,15 @@ private TokenService tokenService; @Autowired private RemoteAppUserService remoteAppUserService; @GetMapping("/detailVersionApp") @ApiOperation(value = "查看详情版本管理", tags = "安卓版本管理") public R<Version> detailVersionApp() { List<Version> list = versionService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list(); if (!list.isEmpty()){ return R.ok(list.get(0)); } return R.ok(); } @GetMapping("/versionList") @ApiOperation(value = "版本管理列表-分页", tags = {"管理后台-版本管理"}) @ApiImplicitParams({ xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
@@ -58,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; @@ -119,6 +120,45 @@ 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) @@ -1438,10 +1478,16 @@ 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); // 将当前成长值更新 healingLevelVO.setGrowthValue(total1); String data1 = remoteUserService.getCourseList(7).getData(); healingLevelVO.setContent(data1); return R.ok(healingLevelVO); xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java
@@ -1,6 +1,7 @@ package com.xinquan.user.controller.client; import cn.afterturn.easypoi.cache.manager.IFileLoader; import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson2.util.UUIDUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -111,10 +112,9 @@ @PostMapping("/getUserTree") @ApiOperation(value = "获取用户树苗",tags = "树苗打卡站") public R<AppUserTree> getUserTree() { LoginUser loginUser = tokenService.getLoginUser(); if (loginUser==null){ return R.tokenError("登录失效"); } if (loginUser!=null) { Long userId = loginUser.getUserid(); AppUser byId = appUserService.getById(userId); byId.setIsFirst(2); @@ -170,8 +170,7 @@ } appUserTree.setTaskOne(1); appUserTree.setTaskTwo(1); } else if (temp>=60){ } else if (temp >= 60) { if (appUserTree.getTaskOne()==2){ AppUserEnergyRecord appUserEnergyRecord = new AppUserEnergyRecord(); appUserEnergyRecord.setAppUserId(userId); @@ -215,8 +214,7 @@ } one.setTaskOne(1); one.setTaskTwo(1); } else if (temp>=60){ } else if (temp >= 60) { if (one.getTaskOne()==2){ AppUserEnergyRecord appUserEnergyRecord = new AppUserEnergyRecord(); appUserEnergyRecord.setAppUserId(userId); @@ -282,6 +280,27 @@ one.setTotalEnergyValue(byId.getTotalEnergyValue()); return R.ok(one); } }else{ List<TreeLevelSetting> data = sysUserClient.getTreeGroup().getData(); AppUserTree appUserTree = new AppUserTree(); appUserTree.setTreeLevelType(1); appUserTree.setTotal(0); appUserTree.setGrowthValue(0); for (TreeLevelSetting datum : data) { if (datum.getTreeLevelType()==2){ appUserTree.setNextLevel(datum.getGrowthValue()); } } appUserTree.setSowAgain(2); appUserTree.setStatus(2); appUserTree.setTaskOne(2); appUserTree.setEnergyValue(0); appUserTree.setTaskTwo(2); appUserTree.setIsSign(2); appUserTree.setTotalEnergyValue(0); return R.ok(appUserTree); } } @Autowired private TokenService tokenService; @@ -308,6 +327,8 @@ return R.ok(); } @Resource private NoticeRecordService noticeRecordService; @PostMapping("/watering") @ApiOperation(value = "浇水 返回值true证明升级了 false没升级",tags = "树苗打卡站") public R<WateringVO> watering() { @@ -380,6 +401,13 @@ wateringVO.setGrowthValue(total1); if (x>y){ wateringVO.setIsNext(true); NoticeRecord noticeRecord = new NoticeRecord(); noticeRecord.setAppUserId(userId); noticeRecord.setReadStatus(1); noticeRecord.setNoticeType(1); noticeRecord.setTitle("树苗升级通知"); noticeRecord.setContent("恭喜,您的树苗已升至"+y+"级,"+"继续加油哦"); noticeRecordService.save(noticeRecord); } return R.ok(wateringVO); } xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserViewingHistoryController.java
@@ -69,6 +69,26 @@ private final RemoteAppUserService remoteAppUserService; /** * 远程调用 根据章节id和用户id查询是否观看完毕 * @param id * @return */ @PostMapping("/getCourseChapterHistoryState/{id}/{chapterId}") public R<Integer> getCourseChapterHistoryState(@PathVariable("id") Long id,@PathVariable("chapterId") Long chapterId) { List<AppUserViewingHistory> list = appUserViewingHistoryService.lambdaQuery() .eq(AppUserViewingHistory::getChapterId, chapterId) .eq(AppUserViewingHistory::getAppUserId, id) .eq(AppUserViewingHistory::getViewingType, 2) .list(); for (AppUserViewingHistory appUserViewingHistory : list) { if (appUserViewingHistory.getIsOver()!=null && appUserViewingHistory.getIsOver()==1){ return R.ok(1); } } return R.ok(2); } /** * 远程调用查询用户观看了哪些课程 * @return */ xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientNoticeRecordController.java
@@ -119,6 +119,7 @@ String formattedDateTime = createTime.format(formatter); // 将其转化为yyyy-MM-dd HH:mm格式 noticeDetailVO.setTime(formattedDateTime); noticeDetailVO.setPublishTime(noticeRecord.getCreateTime()); if (noticeRecord!=null && noticeRecord.getMeditationQuestionId()!=null){ // 远程调用 根据冥想提问id 查询数据 noticeDetailVO.setMeditationQuestionId(noticeRecord.getMeditationQuestionId()); xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/utils/TaskUtil.java
@@ -81,8 +81,10 @@ public static void main(String[] args) { LocalDate localDate = LocalDateTime.now().toLocalDate(); System.err.println(localDate); } // 每天早上7点执行的定时任务 @Scheduled(cron = "0 0 7 * * ?") public void taskSivenDay() { try { @@ -127,7 +129,7 @@ for (AppUser appUser : list) { AppUserTree one = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, appUser.getId()) .eq(AppUserTree::getSowAgain, 2).one(); if(one.getTaskOne()==2||one.getTaskTwo()==2){ if(one!=null && (one.getTaskOne()==2||one.getTaskTwo()==2)){ NoticeRecord noticeRecord = new NoticeRecord(); noticeRecord.setAppUserId(appUser.getId()); noticeRecord.setReadStatus(1);