Bläddra i källkod

Merge remote-tracking branch 'origin/master'

weifanli 3 år sedan
förälder
incheckning
e3cc2d7d6d
18 ändrade filer med 216 tillägg och 7 borttagningar
  1. 7 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/TeacherFeignService.java
  2. 5 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/TeacherFeignServiceFallback.java
  3. 21 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/CourseRemindTask.java
  4. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  5. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  6. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  7. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  8. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  9. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  10. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  11. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumAndSheetVo.java
  12. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java
  13. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CountVo.java
  14. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  15. 12 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  16. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  17. 36 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  18. 9 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java

+ 7 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/TeacherFeignService.java

@@ -25,4 +25,11 @@ public interface TeacherFeignService {
     @GetMapping(value = "/task/opsCourseGroup")
     HttpResponseResult<Object> opsCourseGroup();
 
+    /**
+     * @Description: 课程提醒(每晚9点)
+     * @Author: cy
+     * @Date: 2022/5/6
+     */
+    @GetMapping("/task/courseRemind")
+    HttpResponseResult<Object> courseRemind();
 }

+ 5 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/TeacherFeignServiceFallback.java

@@ -16,4 +16,9 @@ public class TeacherFeignServiceFallback implements TeacherFeignService {
     public HttpResponseResult<Object> opsCourseGroup() {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<Object> courseRemind() {
+        return null;
+    }
 }

+ 21 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/CourseRemindTask.java

@@ -0,0 +1,21 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.TeacherFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/6
+ */
+public class CourseRemindTask extends BaseTask {
+
+    @Autowired
+    private TeacherFeignService teacherFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        teacherFeignService.courseRemind();
+    }
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -172,5 +172,8 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //查询明天有课的老师
     List<SysUser> selectTeacher(String tomorrow);
+
+    //根据老师id统计明日课程
+    List<CountVo> selectTypeCount(@Param("teacherId")Long teacherId,@Param("tomorrow") String tomorrow);
 }
 

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java

@@ -45,4 +45,6 @@ public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
      * @return
      */
     List<MusicAlbumVo> selectFavoriteNumAndMusicNum(@Param("records") List<MusicAlbumVo> records);
+
+    MusicAlbumVo selectMusicAlbumById(@Param("musicAlbumId") Long musicAlbumId);
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -61,7 +61,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     SMS_VIDEO_BUY("SMS_VIDEO_BUY","视频课购买(短信)"),
     SMS_STUDENT_BUY_PRACTICE("SMS_STUDENT_BUY_PRACTICE","学员购买陪练课(短信)"),
-    SMS_PRACTICE_BUY("SMS_PRACTICE_BUY", "陪练课购买(短信)");
+    SMS_PRACTICE_BUY("SMS_PRACTICE_BUY", "陪练课购买(短信)"),
+    SMS_TOMORROW_COURSE_REMINDER("SMS_TOMORROW_COURSE_REMINDER", "明日课程提醒(每晚9点)(短信)");
 
     MessageTypeEnum(String code, String msg) {
         this.code = code;

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -220,5 +220,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      * @return 老师本周收到的评价
      */
     Integer getWeekStudentRepliedCourseSchedule(Long userId);
+
+    void courseRemind();
 }
 

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

@@ -176,4 +176,8 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     public IPage<MyRepliedVo> myReplied(IPage<MyRepliedVo> page, MyCourseSearch search) {
         return page.setRecords(repliedDao.myReplied(page, search));
     }
+
+    public void noRepliedTeacher(){
+
+    }
 }

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

@@ -1108,7 +1108,35 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<SysUser> userList = baseMapper.selectTeacher(tomorrow);
         if (CollectionUtils.isNotEmpty(userList)) {
             for (SysUser sysUser : userList) {
+                Map<Long, String> teacherReceivers = new HashMap<>();
+                teacherReceivers.put(sysUser.getId(), sysUser.getPhone());
+                Map<Long, String> teacherSms = new HashMap<>();
+                teacherSms.put(sysUser.getId(), sysUser.getPhone());
+
+                Integer liveCount=0;
+                Integer practiceCount=0;
+                List<CountVo> typeCount=baseMapper.selectTypeCount(sysUser.getId(),tomorrow);
+                for (CountVo countVo : typeCount) {
+                    if (countVo.getType().equals(CourseScheduleEnum.LIVE.getCode())) {
+                        liveCount=countVo.getCount();
+                    }
+                    if (countVo.getType().equals(CourseScheduleEnum.PRACTICE.getCode())) {
+                        practiceCount=countVo.getCount();
+                    }
+                }
 
+                //老师端-明日课程提醒
+                String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_TOMORROW_COURSE_REMINDER.getCode());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TOMORROW_COURSE_REMINDER,
+                        teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                        practiceCount.toString(),liveCount.toString(),teacherUrl);
+                log.info("send success {}",MessageTypeEnum.TOMORROW_COURSE_REMINDER);
+
+                //老师端-明日课程提醒(短信)
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TOMORROW_COURSE_REMINDER,
+                        teacherSms, null, 0, null, null,
+                        practiceCount, liveCount);
+                log.info("send success {}",MessageTypeEnum.SMS_STUDENT_BUY_PRACTICE);
             }
         }
     }

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

@@ -81,7 +81,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
     @Override
     public AlbumDetailVo detail(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query) {
-        MusicAlbum musicAlbum = this.getById(query.getId());
+        MusicAlbumVo musicAlbum = baseMapper.selectMusicAlbumById(query.getId());
         if (musicAlbum == null) {
             throw  new BizException("未找到专辑信息");
         }
@@ -90,7 +90,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         albumDetailVo.setAlbumName(musicAlbum.getAlbumName());
         albumDetailVo.setAlbumDesc(musicAlbum.getAlbumDesc());
         albumDetailVo.setAlbumTag(musicAlbum.getAlbumTag());
+        albumDetailVo.setAlbumCoverUrl(musicAlbum.getAlbumCoverUrl());
         albumDetailVo.setAlbumStatue(musicAlbum.getAlbumStatus());
+        albumDetailVo.setAlbumFavoriteCount(musicAlbum.getAlbumFavoriteCount());
+        albumDetailVo.setMusicSheetCount(musicAlbum.getMusicSheetCount());
         albumDetailVo.setMusicTagNames(musicTagService.getMusicTagNames(StringUtil.toLongList(musicAlbum.getAlbumTag())));
 
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumAndSheetVo.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-06
+ */
+@ApiModel("专辑和曲目列表")
+public class AlbumAndSheetVo {
+
+    @ApiModelProperty("曲目信息")
+    private PageInfo<MusicSheetVo> musicSheetList;
+
+    @ApiModelProperty("专辑信息")
+    private PageInfo<MusicAlbumVo> musicAlbumList;
+
+    public PageInfo<MusicSheetVo> getMusicSheetList() {
+        return musicSheetList;
+    }
+
+    public void setMusicSheetList(PageInfo<MusicSheetVo> musicSheetList) {
+        this.musicSheetList = musicSheetList;
+    }
+
+    public PageInfo<MusicAlbumVo> getMusicAlbumList() {
+        return musicAlbumList;
+    }
+
+    public void setMusicAlbumList(PageInfo<MusicAlbumVo> musicAlbumList) {
+        this.musicAlbumList = musicAlbumList;
+    }
+}

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java

@@ -36,6 +36,29 @@ public class AlbumDetailVo {
     @ApiModelProperty("教材标签")
     private String musicTagNames;
 
+    @ApiModelProperty("曲目数量")
+    private Integer musicSheetCount;
+
+    @ApiModelProperty("收藏数量")
+    private Integer albumFavoriteCount;
+
+
+    public Integer getMusicSheetCount() {
+        return musicSheetCount;
+    }
+
+    public void setMusicSheetCount(Integer musicSheetCount) {
+        this.musicSheetCount = musicSheetCount;
+    }
+
+    public Integer getAlbumFavoriteCount() {
+        return albumFavoriteCount;
+    }
+
+    public void setAlbumFavoriteCount(Integer albumFavoriteCount) {
+        this.albumFavoriteCount = albumFavoriteCount;
+    }
+
     public YesOrNoEnum getAlbumStatue() {
         return albumStatue;
     }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CountVo.java

@@ -12,6 +12,15 @@ public class CountVo {
 
     @ApiModelProperty("数量")
     private Integer count;
+    private String type;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
 
     public Integer getCount() {
         return count;

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

@@ -608,4 +608,11 @@
         WHERE class_date_=#{tomorrow} AND lock_=0
         GROUP BY s.teacher_id_
     </select>
+    <select id="selectTypeCount" resultType="com.yonge.cooleshow.biz.dal.vo.CountVo">
+        SELECT type_ AS type, COUNT(1) AS count
+        FROM course_schedule
+        WHERE class_date_=#{tomorrow}
+        AND teacher_id_=#{teacherId} AND lock_=0
+        GROUP BY type_
+    </select>
 </mapper>

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

@@ -123,4 +123,16 @@
             </foreach>
         </if>
     </select>
+
+    <select id="selectMusicAlbumById" resultType="com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo">
+        select <include refid="Base_Column_List"/>
+        ,(select group_concat(mt.name_) from music_tag mt
+        where find_in_set(mt.id_,t.album_tag_) and mt.del_flag_ = 0) as musicTagNames
+        , t1.num as musicSheetCount
+        ,t2.num as albumFavoriteCount
+        from music_album t
+        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
+        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
+        where t.id_ = #{musicAlbumId}
+    </select>
 </mapper>

+ 5 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -195,7 +195,7 @@
 			p.purchase_time_ AS purchaseTime
 		FROM video_lesson_purchase_record p
 		LEFT JOIN sys_user u ON p.student_id_ = u.id_
-		<where>
+		WHERE p.order_status_='PAID'
 			<if test="param.videoLessonGroupId !=null">
 				AND p.video_lesson_group_id_ = #{param.videoLessonGroupId}
 			</if>
@@ -215,7 +215,6 @@
 			<if test="param.endTime !=null">
 				<![CDATA[AND p.purchase_time_ <= #{param.endTime} ]]>
 			</if>
-		</where>
 	</select>
 	<select id="selectLessonGroup" resultType="com.yonge.cooleshow.biz.dal.vo.LessonGroupVo">
 		SELECT
@@ -249,6 +248,9 @@
 				g.id_ IN
 				(SELECT video_lesson_group_id_ FROM video_lesson_purchase_record WHERE student_id_=#{param.studentId} AND order_status_='PAID')
 			</if>
+			<if	test="param.teacherId != null">
+				AND g.teacher_id_ = #{param.teacherId}
+			</if>
 		</where>
 		ORDER BY g.create_time_ DESC
 	</select>
@@ -290,5 +292,6 @@
 				<![CDATA[AND g.create_time_ <= #{param.endTime} ]]>
 			</if>
 		</where>
+		ORDER BY g.create_time_ DESC
 	</select>
 </mapper>

+ 36 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -5,14 +5,15 @@ 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.dto.search.MusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.CheckVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
@@ -22,6 +23,7 @@ import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -43,6 +45,8 @@ public class MusicSheetController extends BaseController {
 	@Autowired
 	private MusicSheetService musicSheetService;
 
+    @Autowired
+    private MusicAlbumService musicAlbumService;
 
     /**
      * 查询单条
@@ -73,6 +77,35 @@ public class MusicSheetController extends BaseController {
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));
     }
 
+
+    @ApiOperation(value = "乐谱(专辑和曲目同时查询)分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/albumAndSheetList", consumes="application/json", produces="application/json")
+    public HttpResponseResult<AlbumAndSheetVo> albumAndSheetlist(@RequestBody StudentMusicSheetSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        // 学生 只能看通过审核 并且 启用的 曲目
+        query.setState(YesOrNoEnum.YES);
+        query.setAuditStatus(AuthStatusEnum.PASS);
+        query.setStudentId(sysUser.getId());
+        IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectStudentPage(PageUtil.getPage(query), query);
+
+        MusicAlbumSearch musicAlbumSearch = new MusicAlbumSearch();
+        musicAlbumSearch.setAlbumStatus(YesOrNoEnum.YES);
+        musicAlbumSearch.setSortBy(1);
+        musicAlbumSearch.setAlbumTagIds(query.getMusicTagIds());
+        musicAlbumSearch.setPage(query.getPage());
+        musicAlbumSearch.setRows(query.getRows());
+        IPage<MusicAlbumVo> musicAlbumVoIPage = musicAlbumService.selectPage(PageUtil.getPage(query), musicAlbumSearch);
+
+        AlbumAndSheetVo albumAndSheetVo = new AlbumAndSheetVo();
+        albumAndSheetVo.setMusicSheetList(PageUtil.pageInfo(musicSheetVoIPage));
+        albumAndSheetVo.setMusicAlbumList(PageUtil.pageInfo(musicAlbumVoIPage));
+        return succeed(albumAndSheetVo);
+    }
+
     /**
      * 曲目收藏
      */

+ 9 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.teacher.task;
 
 import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -23,6 +24,8 @@ public class TaskController extends BaseController {
     private TeacherTotalService teacherTotalService;
     @Autowired
     private CourseGroupService courseGroupService;
+    @Autowired
+    private CourseScheduleService scheduleService;
 
     /***
      * 查询所有老师统计数据
@@ -49,4 +52,10 @@ public class TaskController extends BaseController {
     public HttpResponseResult<Object> getRedisValueByKey(String key) {
         return succeed(teacherTotalService.getRedisValueByKey(key));
     }
+
+    @GetMapping("/courseRemind")
+    public HttpResponseResult<Object> courseRemind() {
+        scheduleService.courseRemind();
+        return HttpResponseResult.succeed();
+    }
 }