无关风月
2024-11-09 8ccb2603009768c366f197d23ad9840811100cd2
代码提交
11个文件已修改
155 ■■■■ 已修改文件
xinquan-api/xinquan-api-meditation/src/main/java/com/xinquan/meditation/api/domain/vo/NoticeDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/NoticeRecord.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/service/impl/CourseServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/controller/client/ClientOrderController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientNoticeRecordController.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-meditation/src/main/java/com/xinquan/meditation/api/domain/vo/NoticeDetailVO.java
@@ -25,8 +25,7 @@
    @ApiModelProperty(value = "通知内容 当类型为系统通知时")
    private String reply;
    @ApiModelProperty(value = "消息时间 当类型为系统通知")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private LocalDateTime time;
    private String time;
    @ApiModelProperty(value = "冥想标题 当类型为回复通知时")
    private String meditationTitle;
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/NoticeRecord.java
@@ -33,6 +33,9 @@
    @ApiModelProperty(value = "APP用户id")
    @TableField("app_user_id")
    private Long appUserId;
    @ApiModelProperty(value = "赠送人id")
    @TableField("userId")
    private Long userId;
    @ApiModelProperty(value = "冥想提问id 类型为回复通知时使用")
    @TableField("meditation_question_id")
@@ -40,6 +43,9 @@
    @ApiModelProperty(value = "冥想id")
    @TableField("meditation_id")
    private Long meditationId;
    @ApiModelProperty(value = "课程id")
    @TableField("course_id")
    private Long courseId;
    @ApiModelProperty(value = "查看状态 1:未读 2:已读    ")
    @TableField("read_status")
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java
@@ -33,6 +33,16 @@
    public RemoteAppUserService create(Throwable cause) {
        return new RemoteAppUserService() {
            @Override
            public R addNotice(String id, String courseId, String userId, String price) {
                return null;
            }
            @Override
            public R<AppUser> getUserByPhone(String phone) {
                return R.fail("后台远程调用 根据手机号 查询用户");
            }
            @Override
            public R<Long> getMeditationHistoryCount(Long id) {
                return R.fail("后台远程调用 根据冥想id 获取实际观看人数");
            }
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java
@@ -29,6 +29,11 @@
 */
@FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_USER_SERVICE, fallbackFactory = RemoteAppUserFallbackFactory.class)
public interface RemoteAppUserService {
    @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);
    @GetMapping("/client/app-user/getUserByPhone/{phone}")
    public R<AppUser> getUserByPhone(@PathVariable("phone")String phone);
    @PostMapping("/user/app-user-viewing-history/getMeditationHistoryCount/{id}")
    public R<Long> getMeditationHistoryCount(@PathVariable("id") Long id);
    @PostMapping("/user/app-user-viewing-history/getCourseHistoryCount/{id}")
xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java
@@ -13,6 +13,7 @@
import com.xinquan.common.security.auth.AuthUtil;
import com.xinquan.common.security.service.TokenService;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.system.api.domain.AppUser;
import com.xinquan.system.api.domain.SysMenu;
import com.xinquan.system.api.domain.SysRole;
import com.xinquan.system.api.domain.SysUser;
@@ -22,6 +23,7 @@
import com.xinquan.system.api.model.AppVerifyCellPhoneBody;
import com.xinquan.system.api.model.AppWXLoginBody;
import com.xinquan.system.api.model.LoginUser;
import com.xinquan.user.api.feign.RemoteAppUserService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -30,6 +32,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
@@ -57,6 +60,8 @@
    private SysLoginService sysLoginService;
    @Autowired
    private SysUserClient userClient;
    @Resource
    private RemoteAppUserService remoteAppUserService;
    /**
     * 发送验证码
@@ -71,10 +76,21 @@
    public R<?> sendCaptchaCode(
            @RequestParam(value = "cellPhone", required = true) String cellPhone,
            @RequestParam("type") Integer type) {
        if(type == 3){
            SysUser sysUser = userClient.queryUserByPhone(cellPhone).getData();
            if(Objects.isNull(sysUser)){
                return R.fail("该手机号未注册");
        if(type==5){
            LoginUser loginUser = tokenService.getLoginUser();
            if (loginUser==null){
                return R.tokenError("登录失效");
            }
            AppUser data1 = remoteAppUserService.getAppUserById(loginUser.getUserid() + "").getData();
            if (!cellPhone.equals(data1.getCellPhone())){
                return R.fail("手机号错误");
            }
        }
        if(type==5){
            AppUser data = remoteAppUserService.getUserByPhone(cellPhone).getData();
            if (data!=null){
                return R.fail("当前手机号已被绑定");
            }
        }
        sysLoginService.sendCaptchaCode(cellPhone, type);
xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java
@@ -296,7 +296,7 @@
                    TimeUnit.MINUTES);
            log.info("发送验证码成功,手机号:{} 验证码:{}", cellPhone, code);
            // TODO 修改sender参数及templateId
             HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646",
             HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8824110423893",
                     "767ad27dce184a32a4b4863517fbd301\n");
        } catch (Exception e) {
            log.error("发送短信失败", e);
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java
@@ -802,10 +802,13 @@
                    .eq(CourseChapter::getCourseId, record.getId()).list();
            // 章节列表累加虚拟学习人数
            int temp = 0;
            int temp1 = 0;
            for (CourseChapter courseChapter : list) {
                temp+=courseChapter.getVirtualLearnedNum();
                Long data1 = remoteAppUserService.getCourseChapterHistoryCount(courseChapter.getId()).getData();
                temp1+=data1;
            }
            record.setCount(size1+temp);
            record.setCount(temp1+temp);
        }
        return R.ok(coursePageList);
    }
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/service/impl/CourseServiceImpl.java
@@ -49,6 +49,7 @@
        }else if (cateId!=null){
            courseLambdaQueryWrapper.eq(Course::getCateId, cateId);
        }
        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-order/src/main/java/com/xinquan/order/controller/client/ClientOrderController.java
@@ -538,7 +538,13 @@
                BigDecimal realPayAmount = one.getRealPayAmount();
                // 判断订单所属用户是否有上级 是否需要做分佣处理
                AppUser data = remoteAppUserService.getAppUserById(one.getAppUserId() + "").getData();
                if (one.getGiveUserId()!=null){
                    remoteAppUserService.addNotice(one.getGiveUserId() + "", one.getBusinessId() + "",
                            one.getAppUserId() + "", one.getTotalAmount() + "");
                }
                if (data.getInviteUserId()!=null) {
                    if (one.getOrderFrom() == 1 || one.getOrderFrom() == 2 || one.getOrderFrom() == 3) {
                        // 查询实际支付价格 不包含余额抵扣价格
                        OrderPaymentRecord one1 = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, one.getId())
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;
@@ -114,6 +118,12 @@
    private RemoteOrderService remoteOrderService;
    @Resource
    private RemoteUserService remoteUserService;
    @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();
@@ -976,8 +986,33 @@
            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 = {"设置"})
@@ -1331,6 +1366,7 @@
            consecutiveDays++;
            currentDate = currentDate.minusDays(1);
        }
        appUser.setContinuity(consecutiveDays);
        appUser.setToday(consecutiveDays);
        // 根据等级查询疗愈名称和图标
        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
@@ -1503,13 +1539,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 = "查询当前用户余额")
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientNoticeRecordController.java
@@ -3,12 +3,15 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinquan.common.core.domain.R;
import com.xinquan.common.core.utils.DateUtils;
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.security.service.TokenService;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.course.api.domain.Course;
import com.xinquan.course.api.feign.RemoteCourseService;
import com.xinquan.meditation.api.domain.Meditation;
import com.xinquan.meditation.api.domain.MeditationQuestion;
import com.xinquan.meditation.api.feign.RemoteMeditationService;
@@ -22,12 +25,10 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
@@ -48,6 +49,26 @@
    private AppUserService appUserService;
    @Resource
    private RemoteMeditationService remoteMeditationService;
    @Resource
    private RemoteCourseService remoteCourseService;
    @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) {
        NoticeRecord noticeRecord = new NoticeRecord();
        noticeRecord.setAppUserId(Long.valueOf(id));
        noticeRecord.setCourseId(Long.valueOf(courseId));
        noticeRecord.setReadStatus(1);
        noticeRecord.setNoticeType(1);
        noticeRecord.setTitle("你收到一个来自好友的赠送课程");
        Course data = remoteCourseService.getCourseById(Long.valueOf(courseId)).getData();
        if (data!=null){
            noticeRecord.setContent("课程名称:"+data.getCourseTitle()+"。"+"课程价值:¥"+price+"。"+"赠送好友:"
                    +appUserService.getById(Long.valueOf(userId)).getNickname()+";"+"快去个人中心/已购课程查看吧!");
        }
        noticeRecord.setUserId(Long.valueOf(userId));
        noticeRecordService.save(noticeRecord);
        return R.ok();
    }
    @PostMapping("/noticeList")
    @ApiOperation(value = "系统消息列表",tags = "系统消息")
    @ApiImplicitParams({
@@ -90,6 +111,14 @@
        noticeRecordService.updateById(noticeRecord);
        NoticeDetailVO noticeDetailVO = new NoticeDetailVO();
        BeanUtils.copyProperties(noticeRecord,noticeDetailVO);
        LocalDateTime createTime = noticeRecord.getCreateTime();
        // 定义日期时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
        // 将 LocalDateTime 转换为字符串
        String formattedDateTime = createTime.format(formatter);
        // 将其转化为yyyy-MM-dd HH:mm格式
        noticeDetailVO.setTime(formattedDateTime);
        if (noticeRecord!=null && noticeRecord.getMeditationQuestionId()!=null){
            // 远程调用 根据冥想提问id 查询数据
            noticeDetailVO.setMeditationQuestionId(noticeRecord.getMeditationQuestionId());