浏览代码

Merge branch 'feature/0529-live' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 2 年之前
父节点
当前提交
3e147ffc71

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2084,4 +2084,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> getTeacherContinuousCourse(@Param("classGroupId") Integer classGroupId,
                                                     @Param("classDate") Date classDate,
                                                     @Param("teacherId") Integer teacherId);
+
+    CourseSchedule findByRoomUid(@Param("roomUid") String roomUid, @Param("type") GroupType type);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseShareDao.java

@@ -17,4 +17,13 @@ public interface CourseShareDao extends BaseDAO<Integer, CourseShare> {
     void deleteByIds(@Param("ids") List<Integer> ids);
 
     void deleteByCourseAndUserIds(@Param("courseId") Long courseId, @Param("userIds") List<Integer> userIds);
+
+
+    /**
+     * 根据用户id和课程id查询是否已经私有分享当前课程
+     *
+     * @param studentId        用户id
+     * @param courseScheduleId 课程id
+     */
+    CourseShare getByUserIdAndCourseId(@Param("studentId") Integer studentId, @Param("courseScheduleId") Integer courseScheduleId);
 }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LiveGroupWrapper.java

@@ -136,4 +136,28 @@ public class LiveGroupWrapper {
         private String search;
 
     }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" LiveCourseInfo-学生通过分享进入直播课程")
+    public static class LiveCourseInfo {
+
+
+
+        @ApiModelProperty("课程ID")
+        private Integer courseScheduleId;
+
+        @ApiModelProperty(value = "学生ID")
+        private Integer studentId;
+
+        @ApiModelProperty(value = "直播房间号")
+        private String roomUid;
+
+        @ApiModelProperty(value = "能否进入分享房间")
+        private boolean canJoinShareRoom;
+
+    }
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseShareService.java

@@ -21,4 +21,13 @@ public interface CourseShareService extends BaseService<Integer, CourseShare> {
     String importStudent(MultipartFile file, Long courseId);
 
     boolean deleteStudent(CourseShareDto courseShareDto);
+
+    /**
+     * 根据用户id和课程id查询是否已经私有分享当前课程
+     *
+     * @param studentId        用户id
+     * @param courseScheduleId 课程id
+     * @return
+     */
+    CourseShare getByUserIdAndCourseId(Integer studentId, Integer courseScheduleId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -472,4 +472,6 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * 关闭直播间
      */
     void closeLiveCourseRoom();
+
+    LiveGroupWrapper.LiveCourseInfo joinLiveRoomByShare(Integer courseScheduleId, Integer studentId);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseShareServiceImpl.java

@@ -341,4 +341,18 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
         }
         return courseSchedule;
     }
+    /**
+     * 根据用户id和课程id查询是否已经私有分享当前课程
+     *
+     * @param studentId        用户id
+     * @param courseScheduleId 课程id
+     * @return
+     */
+    @Override
+    public CourseShare getByUserIdAndCourseId(Integer studentId, Integer courseScheduleId) {
+
+        return courseShareDao.getByUserIdAndCourseId(studentId, courseScheduleId);
+
+    }
+
 }

+ 19 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -22,24 +22,14 @@ import com.microsvc.toolkit.middleware.live.message.TencentWrapper;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
-import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
-import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomMemberDao;
-import com.ym.mec.biz.dal.dao.LiveGoodsMapperDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
 import com.ym.mec.biz.dal.dto.LiveRoomStatus;
 import com.ym.mec.biz.dal.dto.RoomMemberNumDto;
 import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.dto.TencentData;
-import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
-import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
-import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
-import com.ym.mec.biz.dal.entity.ImLiveRoomBlack;
-import com.ym.mec.biz.dal.entity.ImLiveRoomVideo;
-import com.ym.mec.biz.dal.enums.EAnchorStatus;
-import com.ym.mec.biz.dal.enums.EGroupDefinedDataType;
-import com.ym.mec.biz.dal.enums.EOnOffStatus;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.live.ELiveViewMode;
 import com.ym.mec.biz.dal.page.LiveRoomGoodsOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.*;
@@ -134,6 +124,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Autowired
     private ImFeignService imFeignService;
 
+    @Autowired
+    private CourseShareService courseShareService;
+
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+
     //待替换的变量
     public static final String USER_ID = "${userId}";
     public static final String ROOM_UID = "${roomUid}";
@@ -1898,6 +1894,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         // 保存直播间用户信息
         liveBroadcastRoomMemberService.save(roomMember);
 
+        if ("LIVE".equals(imLiveBroadcastRoomVo.getGroupType())) {
+
+            // 课程ID
+            CourseSchedule courseSchedule = courseScheduleDao.findByRoomUid(imLiveBroadcastRoomVo.getRoomUid(), GroupType.LIVE);
+            if (Objects.isNull(courseSchedule)) {
+                return userInfo;
+            }
+            courseShareService.createPaymentRecord(courseSchedule.getId(),userId);
+        }
+
         return userInfo;
     }
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -551,6 +551,9 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
     public void addStudentAttendanceSignIn(Long firstCourseId, Integer userId,Long currentScheduleId) {
         Date date = new Date();
         ClassGroup classGroup = classGroupDao.findByCourseSchedule(currentScheduleId.intValue(), 0);
+        if (Objects.isNull(classGroup)) {
+            return;
+        }
         StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, currentScheduleId.intValue());
         if (studentAttendance == null) {
             studentAttendance = new StudentAttendance();

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -205,6 +205,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Autowired
     private TenantInfoService tenantInfoService;
 
+    @Autowired
+    private CourseShareService courseShareService;
+
     private static final Logger LOGGER = LoggerFactory.getLogger(VipGroup.class);
 
     @Override
@@ -5177,6 +5180,45 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         });
     }
 
+    @Override
+    public LiveGroupWrapper.LiveCourseInfo joinLiveRoomByShare(Integer courseScheduleId,Integer studentId) {
+
+        //  判断课程类型
+        CourseSchedule courseSchedule = courseScheduleDao.get(Long.valueOf(courseScheduleId));
+        if (Objects.isNull(courseSchedule)) {
+            throw new BizException("课程不存在");
+        }
+
+        // 课程是否开始
+        if(CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())) {
+            throw new BizException("课程未开始");
+        }
+
+        // 是否结束
+        if (CourseStatusEnum.OVER.equals(courseSchedule.getStatus())) {
+            throw new BizException("课程已结束");
+        }
+
+        // 分享类型  是否能进入
+        if (ShareModeEnum.NO_SHARE.equals(courseSchedule.getShareMode())) {
+            throw new BizException("课程不允许分享");
+        }
+        if (ShareModeEnum.PRIVATE.equals(courseSchedule.getShareMode())) {
+            // 查询
+            CourseShare courseShare = courseShareService.getByUserIdAndCourseId(studentId, courseScheduleId);
+            if (Objects.isNull(courseShare)) {
+                throw new BizException("非分享用户,不可进入");
+            }
+        }
+
+        return LiveGroupWrapper.LiveCourseInfo.builder()
+                .studentId(studentId)
+                .canJoinShareRoom(true)
+                .roomUid(courseSchedule.getLiveRoomId())
+                .courseScheduleId(courseScheduleId)
+                .build();
+    }
+
 
 }
 

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4420,4 +4420,8 @@
         AND cs.actual_teacher_id_ = #{teacherId} AND cs.pre_course_flag_ = 0 AND cs.class_date_ = #{classDate}
         ORDER BY cs.class_date_ DESC,cs.end_class_time_ DESC
     </select>
+
+    <select id="findByRoomUid"  resultMap="CourseSchedule">
+        select * from course_schedule where live_room_id_ = #{roomUid} and group_type_ = #{type.name}
+    </select>
 </mapper>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/CourseShareMapper.xml

@@ -110,4 +110,10 @@
             #{userId}
         </foreach>
     </delete>
+
+    <select id="getByUserIdAndCourseId" resultMap="courseShare">
+        SELECT *
+        FROM course_share
+        WHERE user_id_ = #{studentId} AND course_id_ = #{courseScheduleId}
+    </select>
 </mapper>

+ 20 - 18
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -187,24 +187,7 @@ public class RoomServiceImpl implements RoomService {
         if (courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
             return new BaseResponse(ErrorEnum.JOIN_ROOM_ERROR, ErrorEnum.JOIN_ROOM_ERROR.getErrMsg(), null);
         }
-        Date curTime = DateTime.now().toDate();
-        //是否提前进入教室
-        String courseBeforeBufferTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_BEFORE_BUFFER_TIME, courseSchedule.getTenantId());
-        if (StringUtils.isEmpty(courseBeforeBufferTime)) {
-            courseBeforeBufferTime = "5";
-        }
-        Date addMinutes = DateUtil.addMinutes(curTime, Integer.parseInt(courseBeforeBufferTime));
-        if (courseSchedule.getStartClassTime().compareTo(addMinutes) > 0) {
-            return new BaseResponse(ErrorEnum.ROOM_NOT_START, ErrorEnum.ROOM_NOT_START.getErrMsg(), null);
-//            throw new BizException("网络教室暂未开启,请在{}分钟后进入教室",DateUtil.minutesBetween(addMinutes,courseSchedule.getStartClassTime()));
-        }
-        final TenantAssetsInfo one = tenantAssetsInfoService.getOne(new WrapperUtil<TenantAssetsInfo>()
-                .hasEq("tenant_id_", courseSchedule.getTenantId())
-                .queryWrapper()
-                .gt("balance_", 0));
-        if (one == null) {
-            return new BaseResponse(ErrorEnum.CLOUD_BALANCE_NOT_FEE, ErrorEnum.CLOUD_BALANCE_NOT_FEE.getErrMsg(), null);
-        }
+
 
         //是否是连堂课
         String continueCourseTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME, courseSchedule.getTenantId());
@@ -333,6 +316,25 @@ public class RoomServiceImpl implements RoomService {
             // imLiveBroadcastRoomService.joinRoom(liveRoom.getRoomUid(), sysUser.getId());
 
         } else {
+            Date curTime = DateTime.now().toDate();
+            //是否提前进入教室
+            String courseBeforeBufferTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_BEFORE_BUFFER_TIME, courseSchedule.getTenantId());
+            if (StringUtils.isEmpty(courseBeforeBufferTime)) {
+                courseBeforeBufferTime = "5";
+            }
+            Date addMinutes = DateUtil.addMinutes(curTime, Integer.parseInt(courseBeforeBufferTime));
+            if (courseSchedule.getStartClassTime().compareTo(addMinutes) > 0) {
+                return new BaseResponse(ErrorEnum.ROOM_NOT_START, ErrorEnum.ROOM_NOT_START.getErrMsg(), null);
+//            throw new BizException("网络教室暂未开启,请在{}分钟后进入教室",DateUtil.minutesBetween(addMinutes,courseSchedule.getStartClassTime()));
+            }
+
+            final TenantAssetsInfo one = tenantAssetsInfoService.getOne(new WrapperUtil<TenantAssetsInfo>()
+                    .hasEq("tenant_id_", courseSchedule.getTenantId())
+                    .queryWrapper()
+                    .gt("balance_", 0));
+            if (one == null) {
+                return new BaseResponse(ErrorEnum.CLOUD_BALANCE_NOT_FEE, ErrorEnum.CLOUD_BALANCE_NOT_FEE.getErrMsg(), null);
+            }
 
             // 创建聊天群组
             if (Optional.ofNullable(joinRoom).orElse(true)) {

+ 6 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -3,6 +3,7 @@ package com.ym.mec.student.controller;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
+import com.ym.mec.biz.dal.wrapper.LiveGroupWrapper;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.biz.service.VipGroupCategoryService;
@@ -99,4 +100,9 @@ public class StudentVipGroupController extends BaseController {
         return succeed(vipGroupService.getVipGroupPayInfo(vipGroupId,sysUserService.getUserId()));
     }
 
+    @ApiOperation(value = "判断学生是否能通过分享页进入直播间")
+    @GetMapping("/joinLiveRoomByShare")
+    public HttpResponseResult<LiveGroupWrapper.LiveCourseInfo> joinLiveRoomByShare(Integer courseScheduleId){
+        return succeed(vipGroupService.joinLiveRoomByShare(courseScheduleId,sysUserService.getUserId()));
+    }
 }