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 |  254 +++++++++++++++++++++++++++++++++-----------------
 1 files changed, 166 insertions(+), 88 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 2450289..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,13 +6,17 @@
 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;
@@ -24,6 +28,7 @@
 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;
@@ -53,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;
@@ -114,6 +120,62 @@
     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();
@@ -903,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));
@@ -976,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 = {"设置"})
@@ -1254,7 +1347,7 @@
             consecutiveDays++;
             currentDate = currentDate.minusDays(1);
         }
-        appUserInfoVO.setToday(consecutiveDays);
+        appUserInfoVO.setContinuity(consecutiveDays);
         AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                 .eq(AppUserTree::getSowAgain,2)
                 .one();
@@ -1331,13 +1424,15 @@
             consecutiveDays++;
             currentDate = currentDate.minusDays(1);
         }
-        appUser.setToday(consecutiveDays);
+        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() {
@@ -1346,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);
@@ -1503,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 = "查询当前用户余额")
@@ -1544,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