cy 3 سال پیش
والد
کامیت
5a39f177a0
17فایلهای تغییر یافته به همراه428 افزوده شده و 40 حذف شده
  1. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  2. 36 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java
  3. 24 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  4. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  5. 23 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  6. 9 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  7. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  8. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  9. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  10. 36 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  11. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java
  12. 124 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java
  13. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  14. 25 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  15. 12 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  16. 35 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  17. 17 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -205,5 +205,4 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     BigDecimal selectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId);
 
     List<CourseSchedule> selectSchedule(Integer courseId);
-}
-
+}

+ 36 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import java.util.List;
+import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -24,21 +26,39 @@ public interface StudentDao extends BaseMapper<Student> {
      * 自定义分页
      */
     List<StudentVo> selectPage(@Param("page") IPage page, @Param("param") StudentSearch studentSearch);
-	/***
-	 * 设置学员声部
-	 * @author liweifan
-	 * @param: id
-	 * @param: subjectIds
-	 * @updateTime 2022/4/7 10:12
-	 * @return: java.lang.Integer
-	 */
+
+    /***
+     * 设置学员声部
+     * @author liweifan
+     * @param: id
+     * @param: subjectIds
+     * @updateTime 2022/4/7 10:12
+     * @return: java.lang.Integer
+     */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
-	/***
-	 * 获取声部下拉框
-	 * @author liweifan
-	 * @param: id
-	 * @updateTime 2022/5/9 10:17
-	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
-	 */
-	List<Subject> querySubjectItem(@Param("userId")Long id);
+
+    /***
+     * 获取声部下拉框
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/5/9 10:17
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     */
+    List<Subject> querySubjectItem(@Param("userId") Long id);
+
+    /**
+     * 我的关注
+     *
+     * @param page
+     * @param studentId
+     * @return
+     */
+    List<MyFollow> queryMyFollow(@Param("page") IPage<MyFollow> page, @Param("studentId") Long studentId);
+
+    /**
+     * 取消关注
+     *
+     * @param map
+     */
+    void unfollow(@Param("param") Map<String, Long> map);
 }

+ 24 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,35 +22,39 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
      */
     TeacherVo detail(@Param("userId") Long userId);
+
     /**
      * 自定义分页
      */
     List<TeacherVo> selectPage(@Param("page") IPage page, @Param("param") TeacherSearch teacher);
 
     /**
-    * @description: 获取用户基本信息
      * @param userId
-    * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
-    * @author zx
-    * @date 2022/3/22 13:52
-    */
+     * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
+     * @description: 获取用户基本信息
+     * @author zx
+     * @date 2022/3/22 13:52
+     */
     BasicUserInfo getBasicUserInfo(@Param("userId") Long userId);
+
     /**
-     * @description: 获取用户基本信息
      * @param studentIds
      * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
+     * @description: 获取用户基本信息
      * @author zx
      * @date 2022/3/22 13:52
      */
     List<BasicUserInfo> findBasicUserInfo(@Param("studentIds") Set<Long> studentIds);
+
     /**
-     * @description: 获取老师可授课声部列表
      * @param
      * @return java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     * @description: 获取老师可授课声部列表
      * @author zx
      * @date 2022/3/25 09:38
      */
     List<Subject> querySubject(@Param("userId") Long userId);
+
     /***
      * 设置学员声部
      * @author liweifan
@@ -59,6 +64,7 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return: java.lang.Integer
      */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
+
     /***
      * 增加主页浏览量
      * @author liweifan
@@ -66,7 +72,8 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/4/24 17:46
      * @return: java.lang.Integer
      */
-    Integer addHomeBrowse(@Param("userId")Long userId);
+    Integer addHomeBrowse(@Param("userId") Long userId);
+
     /***
      * 获取声部下拉框
      * @author liweifan
@@ -74,5 +81,13 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/5/9 10:17
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(@Param("userId")Long id);
+    List<Subject> querySubjectItem(@Param("userId") Long id);
+
+    /**
+     * 查询我的粉丝
+     * @param page
+     * @param teacherId
+     * @return
+     */
+    List<MyFens> queryMyFans(@Param("page") IPage<MyFens> page, @Param("teacherId") Long teacherId);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -12,6 +12,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     MUSIC_SHEET_AUTH_PASS("MUSIC_SHEET_AUTH_PASS","乐谱审核通过"),
     MUSIC_SHEET_AUTH_UNPASS("MUSIC_SHEET_AUTH_UNPASS","乐谱审核失败"),
 
+    VIDEO_SHEET_AUTH_PASS("VIDEO_SHEET_AUTH_PASS","视频课审核通过"),
+    VIDEO_SHEET_AUTH_UNPASS("VIDEO_SHEET_AUTH_UNPASS","视频课审核失败"),
+
     STUDENT_BUY_MUSIC_SHEET_SUCCESS("STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱成功"),
     SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS("SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱(短信)"),
 

+ 23 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java

@@ -6,18 +6,21 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 学生表 服务类
+ *
  * @author liweifan
  * @date 2022-03-23
  */
-public interface StudentService extends IService<Student>  {
+public interface StudentService extends IService<Student> {
     /***
      * 查询学员详情
      * @author liweifan
@@ -26,10 +29,12 @@ public interface StudentService extends IService<Student>  {
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
      */
     StudentVo detail(Long userId);
+
     /**
      * 自定义分页
+     *
      * @author liweifan
- 	 * @date 2022-03-23
+     * @date 2022-03-23
      */
     IPage<StudentVo> selectPage(IPage<StudentVo> page, StudentSearch studentSearch);
 
@@ -60,4 +65,20 @@ public interface StudentService extends IService<Student>  {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
     List<Subject> querySubjectItem(Long id);
+
+    /**
+     * 我的关注
+     *
+     * @param page
+     * @param studentId
+     * @return
+     */
+    IPage<MyFollow> queryMyFollow(IPage<MyFollow> page, Long studentId);
+
+    /**
+     * 取消关注
+     *
+     * @param map
+     */
+    void unfollow(Map<String, Long> map);
 }

+ 9 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java

@@ -10,10 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
-import com.yonge.cooleshow.biz.dal.vo.UserSetVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import java.util.List;
@@ -123,4 +120,12 @@ public interface TeacherService extends IService<Teacher> {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
     List<Subject> querySubjectItem(Long id);
+
+    /**
+     * 我的粉丝
+     * @param page
+     * @param teacherId
+     * @return
+     */
+    IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId);
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -9,8 +9,10 @@ import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
@@ -90,4 +92,14 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         }
         return subjectList;
     }
+
+    public IPage<MyFollow> queryMyFollow(IPage<MyFollow> page, Long studentId) {
+        List<MyFollow> teacherVos = baseMapper.queryMyFollow(page, studentId);
+        return page.setRecords(teacherVos);
+    }
+
+    public void unfollow(Map<String, Long> map) {
+        WrapperUtil.toLong(map, "teacherId", "老师id不能为空!");
+        baseMapper.unfollow(map);
+    }
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
@@ -370,4 +371,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         return subjectList;
     }
+
+    public IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId) {
+        List<MyFens> teacherVos = baseMapper.queryMyFans(page, teacherId);
+        return page.setRecords(teacherVos);
+    }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java

@@ -38,7 +38,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     private IdGeneratorService idGeneratorService;
     @Autowired
     private PaymentProperties paymentProperties;
-    @Autowired
+    @Autowired(required=true)
     private PaymentClient paymentClient;
 
     @Override

+ 36 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.*;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
@@ -9,10 +10,14 @@ import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -21,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +53,10 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     private VideoLessonAuthRecordDao recordDao;
     @Autowired
     private TeacherDao teacherDao;
+    @Autowired
+    private SysMessageService sysMessageService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     public VideoLessonGroupDao getDao() {
         return videoLessonGroupDao;
@@ -105,6 +116,29 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         recordDao.delete(Wrappers.<VideoLessonAuthRecord>lambdaQuery()
                 .eq(VideoLessonAuthRecord::getVideoGroupId, examineVo.getId())
                 .eq(VideoLessonAuthRecord::getAuditStatus, AuthStatusEnum.DOING));
+
+        //推送
+        VideoLessonGroup lessonGroup = baseMapper.selectById(examineVo.getId());
+        String status = examineVo.getAuditStatus();
+        Map<Long,String> receivers = new HashMap<>();
+        SysUser teacher = sysUserFeignService.queryUserById(lessonGroup.getTeacherId());
+        receivers.put(lessonGroup.getTeacherId(), teacher.getPhone());
+        if (status.equals("PASS")) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_SHEET_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),lessonGroup.getLessonName());
+            }catch (Exception e){
+                log.warn("视频课审核失败,{}",e.getMessage());
+            }
+        } else {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_SHEET_AUTH_UNPASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),lessonGroup.getLessonName(),examineVo.getRemarks());
+            }catch (Exception e){
+                log.warn("视频课审核失败,{}",e.getMessage());
+            }
+        }
+
     }
 
     /**
@@ -134,7 +168,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         Long subjectId = Long.valueOf(lessonGroup.getLessonSubject());
         List<Subject> subjectList = teacherDao.querySubject(sysUser.getId());
         List<Long> longList = subjectList.stream().map(Subject::getId).collect(Collectors.toList());
-        if (!longList.contains(subjectId)){
+        if (!longList.contains(subjectId)) {
             throw new BizException("该声部无法选择");
         }
 
@@ -297,7 +331,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      * @Author: cy
      * @Date: 2022/5/7
      */
-    public CountVideoGroupVo countVideoGroup(){
+    public CountVideoGroupVo countVideoGroup() {
         CountVideoGroupVo countVideoGroup = baseMapper.countVideoGroup();
         countVideoGroup.setVideoLessonList(baseMapper.selectVideoLesson());
         return countVideoGroup;

+ 63 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java

@@ -0,0 +1,63 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/12
+ */
+public class MyFens extends BaseEntity {
+    @ApiModelProperty("昵称")
+    private String userId;
+    @ApiModelProperty("昵称")
+    private String userName;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty("头像地址")
+    private String avatar;
+    @ApiModelProperty(value = "性别 0女 1男")
+    private GenderEnum gender;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+}

+ 124 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java

@@ -0,0 +1,124 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/12
+ */
+public class MyFollow extends BaseEntity {
+    @ApiModelProperty("昵称")
+    private String userId;
+    @ApiModelProperty("昵称")
+    private String userName;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty("头像地址")
+    private String avatar;
+    @ApiModelProperty(value = "性别 0女 1男")
+    private GenderEnum gender;
+
+    @ApiModelProperty("星级")
+    private Double starGrade;
+    @ApiModelProperty("粉丝数")
+    private Integer fansNum;
+    @ApiModelProperty("已上课时数")
+    private Integer expTime;
+    @ApiModelProperty("是否在直播")
+    private Integer liveFlag;
+
+    @ApiModelProperty("音乐人(0:否 1:是)")
+    private Integer musicianFlag;
+    @ApiModelProperty("专业技能")
+    private String subjectName;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public Double getStarGrade() {
+        return starGrade;
+    }
+
+    public void setStarGrade(Double starGrade) {
+        this.starGrade = starGrade;
+    }
+
+    public Integer getFansNum() {
+        return fansNum;
+    }
+
+    public void setFansNum(Integer fansNum) {
+        this.fansNum = fansNum;
+    }
+
+    public Integer getExpTime() {
+        return expTime;
+    }
+
+    public void setExpTime(Integer expTime) {
+        this.expTime = expTime;
+    }
+
+    public Integer getLiveFlag() {
+        return liveFlag;
+    }
+
+    public void setLiveFlag(Integer liveFlag) {
+        this.liveFlag = liveFlag;
+    }
+
+    public Integer getMusicianFlag() {
+        return musicianFlag;
+    }
+
+    public void setMusicianFlag(Integer musicianFlag) {
+        this.musicianFlag = musicianFlag;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+}

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -703,7 +703,7 @@
         SELECT * FROM course_schedule
         WHERE id_ IN (
             SELECT course_id_ FROM course_schedule_student_payment
-            WHERE user_id_=(SELECT user_id_ FROM course_schedule_student_payment WHERE course_id_=200 AND course_type_='PRACTICE')
+            WHERE user_id_=(SELECT user_id_ FROM course_schedule_student_payment WHERE course_id_=#{courseId} AND course_type_='PRACTICE')
         )
     </select>
 </mapper>

+ 25 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -114,4 +114,29 @@
             where c1.student_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
+
+    <select id="queryMyFollow" resultType="com.yonge.cooleshow.biz.dal.vo.MyFollow">
+        SELECT
+            s.teacher_id_ AS userId,
+            u.avatar_ AS avatar,
+            u.username_ AS userName,
+            u.real_name_ AS realName,
+            u.gender_ AS gender,
+
+            t.star_grade_ AS starGrade,
+            t.fans_num_ AS fansNum,
+            t.live_flag_ AS liveFlag,
+            t.exp_time_ AS expTime,
+
+            tr.musician_flag_ AS musicianFlag,
+            (SELECT group_concat(name_) FROM `subject` WHERE find_in_set(id_,tr.subject_id_)) AS subjectName
+        FROM student_star s
+        LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
+        LEFT JOIN teacher_total t ON s.teacher_id_ = t.user_id_
+        LEFT JOIN teacher tr ON s.teacher_id_ = tr.user_id_
+        WHERE s.student_id_ = #{studentId}
+    </select>
+    <delete id="unfollow" parameterType="java.util.Map">
+        DELETE FROM student_star WHERE teacher_id_=#{param.teacherId} AND student_id_=#{param.studentId}
+    </delete>
 </mapper>

+ 12 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -153,4 +153,16 @@
             select 1 from video_lesson_group c where c.teacher_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
+
+    <select id="queryMyFans" resultType="com.yonge.cooleshow.biz.dal.vo.MyFens">
+        SELECT
+            s.student_id_ AS userId,
+            u.avatar_ AS avatar,
+            u.username_ AS userName,
+            u.real_name_ AS realName,
+            u.gender_ AS gender
+        FROM student_star s
+        LEFT JOIN sys_user u ON s.student_id_ = u.id_
+        WHERE s.teacher_id_ =#{teacherId}
+    </select>
 </mapper>

+ 35 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -1,15 +1,19 @@
 package com.yonge.cooleshow.student.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/student")
@@ -71,4 +76,31 @@ public class StudentController extends BaseController {
         }
         return succeed(studentService.querySubjectItem(user.getId()));
     }
+
+    @ApiOperation(value = "我的关注")
+    @PostMapping(value = "/queryMyFollow")
+    public HttpResponseResult<PageInfo<MyFollow>> queryMyFollow(@RequestBody QueryInfo query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<MyFollow> pages = studentService.queryMyFollow(PageUtil.getPage(query), sysUser.getId());
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
+    })
+    @ApiOperation(value = "取消关注")
+    @PostMapping(value = "/unfollow")
+    public HttpResponseResult<Object> unfollow(@RequestBody Map<String, Long> map) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        map.put("studentId", sysUser.getId());
+        studentService.unfollow(map);
+        return succeed();
+    }
 }

+ 17 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -1,14 +1,19 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -104,4 +109,16 @@ public class TeacherController extends BaseController {
         teacherDto.setUserId(user.getId());
         return teacherService.saveTeacherStyle(teacherDto);
     }
+
+    @ApiOperation(value = "我的粉丝")
+    @PostMapping(value = "/queryMyFans")
+    public HttpResponseResult<PageInfo<MyFens>> queryMyFans(@RequestBody QueryInfo query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<MyFens> pages = teacherService.queryMyFans(PageUtil.getPage(query), sysUser.getId());
+        return succeed(PageUtil.pageInfo(pages));
+    }
 }