zouxuan 3 年 前
コミット
dd04c9c8bd

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

@@ -47,5 +47,6 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     <T> IPage<T> queryTeacherCourse(Page<T> page, @Param("param") Map<String, Object> param);
 
+    CourseSchedule findOne(@Param("courseScheduleId") Long courseScheduleId);
 }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java

@@ -8,6 +8,9 @@ import java.util.List;
 
 public class ImNetworkRoomResult extends ImNetworkRoom {
 
+    @ApiModelProperty(value = "陪练课结束后,XX分钟关闭房间")
+    private String autoCloseNetworkRoomTime = "15";
+
     @ApiModelProperty(value = "房间成员列表,包含当前用户;")
     private List<ImNetworkRoomMember> roomMemberList;
 

+ 21 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseSchedule.java

@@ -53,6 +53,12 @@ public class CourseSchedule implements Serializable {
     @ApiModelProperty(value = "下课时间")
     private Date endTime;
 
+    @ApiModelProperty(value = "上课时间(包含年月日)")
+    private Date startClassTime;
+
+    @ApiModelProperty(value = "下课时间(包含年月日)")
+    private Date endClassTime;
+
     @TableField("lock_")
     @ApiModelProperty(value = "购买陪练课及创建直播课时需要锁定课时 0未锁 1锁定")
     private Integer lock;
@@ -85,6 +91,21 @@ public class CourseSchedule implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
+    public Date getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(Date startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public Date getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(Date endClassTime) {
+        this.endClassTime = endClassTime;
+    }
 
     public Long getId() {
         return id;

+ 73 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ImNetworkRoomErrorEnum.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+public enum ImNetworkRoomErrorEnum implements BaseEnum<Integer,ImNetworkRoomErrorEnum> {
+    ERR_SUCCESS(200, "OK"),
+    ERR_REQUEST_PARA_ERR(1, "Missing or invalid parameter"),
+    ERR_INVALID_AUTH(2, "Invalid or expired authorization"),
+    ERR_ACCESS_DENIED(3, "Access denied"),
+    ERR_BAD_REQUEST(4, "Bad request"),
+
+    //IM error
+    ERR_IM_TOKEN_ERROR(10, "IM token error"),
+    ERR_CREATE_ROOM_ERROR(11, "Create room error"),
+    ERR_JOIN_ROOM_ERROR(12, "Join room error"),
+    JOIN_ROOM_ERROR(35, "加入房间失败,请前往线下教室"),
+    ROOM_NOT_START(36, "网络教室暂未开启,请稍后重试"),
+    CLOUD_BALANCE_NOT_FEE(37, "云教室受限不可进入,请联系教务老师。"),
+    ERR_MESSAGE_ERROR(13, "IM Message send error"),
+
+
+    //room error
+    ERR_ROOM_NOT_EXIST(20, "Room not exist"),
+    ERR_USER_NOT_EXIST_IN_ROOM(21, "User not exist in room"),
+    ERR_EXIT_ROOM_ERROR(22, "Exit room error"),
+    ERR_TEACHER_NOT_EXIST_IN_ROOM(23, "Teacher not exist in room"),
+    ERR_ASSISTANT_NOT_EXIST_IN_ROOM(24, "Assistant not exist in room"),
+    ERR_CREATE_WHITE_BOARD(25, "Create whiteboard error"),
+    ERR_WHITE_BOARD_NOT_EXIST(26, "Whiteboard not exist"),
+    ERR_DELETE_WHITE_BOARD(27, "Delete whiteboard error"),
+    ERR_USER_EXIST_IN_ROOM(28, "User exist in room"),
+    ERR_CHANGE_SELF_ROLE(29, "Can not change self role"),
+    ERR_APPLY_TICKET_INVALID(30, "Apply ticket invalid"),
+    ERR_OVER_MAX_COUNT(31, "云教室人数已超上线"),
+    ERR_TEACHER_EXIST_IN_ROOM(32, "Teacher exist in room"),
+    ERR_DOWNGRADE_ROLE(33, "Can't downgrade role"),
+    ERR_CHANGE_ROLE(34, "Only change student to teacher");
+
+    private int code;
+
+    private ImNetworkRoomErrorEnum(int code, String remark) {
+        this.code = code;
+        this.remark = remark;
+    }
+
+    private String remark;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public static ImNetworkRoomErrorEnum codeOf(int code) {
+        for (ImNetworkRoomErrorEnum errorEnum : ImNetworkRoomErrorEnum.values()) {
+            if (code == errorEnum.getCode()) {
+                return errorEnum;
+            }
+        }
+        return null;
+    }
+}

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomService.java

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * 网络教室房间(ImNetworkRoom)表服务接口
@@ -17,6 +19,6 @@ public interface ImNetworkRoomService extends IService<ImNetworkRoom> {
     ImNetworkRoomDao getDao();
 
     //加入网络教室
-    NetworkRoomResult joinRoom(Long courseScheduleId, UserRoleEnum userRole);
+    HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole);
 }
 

+ 21 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -10,11 +10,16 @@ import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
 import com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomErrorEnum;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.utils.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -48,6 +53,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Resource
     private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
     @Resource
+    private CourseScheduleService courseScheduleService;
+    @Resource
     private SysConfigDao sysConfigDao;
 
     @Override
@@ -57,10 +64,21 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public NetworkRoomResult joinRoom(Long courseScheduleId, UserRoleEnum userRole) {
+    public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole) {
+        CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getDao().findOne(courseScheduleId)).
+                orElseThrow(()-> new BizException("课程信息不存在"));
+        Date now = new Date();
+        //是否提前进入教室
+        String courseBeforeBufferTime = sysConfigDao.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE);
+        if (StringUtils.isEmpty(courseBeforeBufferTime)) {
+            courseBeforeBufferTime = "5";
+        }
+        Date addMinutes = DateUtil.addMinutes(now, Integer.parseInt(courseBeforeBufferTime));
+        if (courseSchedule.getStartClassTime().compareTo(addMinutes) > 0) {
+            return HttpResponseResult.failed(ImNetworkRoomErrorEnum.ROOM_NOT_START.getRemark());
+        }
         SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
                 orElseThrow(()-> new BizException("请登录"));
-        Date now = new Date();
         String roomId = courseScheduleId.toString();
         ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
         //获取房间
@@ -83,7 +101,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
                 queryByScoreIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
         joinRoomResult.setMusicScoreResults(musicScoreResults);
         //网络教室配置项
-        String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE, courseSchedule.getTenantId());
+        String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
         return null;
     }
 

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

@@ -10,6 +10,8 @@
         <result column="teacher_id_" jdbcType="INTEGER" property="teacherId"/>
         <result column="class_date_" jdbcType="TIMESTAMP" property="classDate"/>
         <result column="start_time_" jdbcType="TIMESTAMP" property="startTime"/>
+        <result column="start_class_time_" jdbcType="TIMESTAMP" property="startClassTime"/>
+        <result column="end_class_time_" jdbcType="TIMESTAMP" property="endClassTime"/>
         <result column="end_time_" jdbcType="TIMESTAMP" property="endTime"/>
         <result column="lock_" jdbcType="INTEGER" property="lock"/>
         <result column="lock_time_" jdbcType="TIMESTAMP" property="lockTime"/>
@@ -23,7 +25,10 @@
 
     <sql id="Base_Column_List">
         id_
-        , course_group_id_, type_, status_,class_num_, teacher_id_, class_date_, start_time_, end_time_, lock_, lock_time_, pre_student_num_, ex_student_num_, created_by_, created_time_, updated_by_, updated_time_
+        , course_group_id_, type_, status_,class_num_, teacher_id_, class_date_, start_time_, end_time_,
+        CONCAT(class_date_, ' ', start_class_time_) start_class_time_,
+        CONCAT(class_date_, ' ', end_class_time_)   end_class_time_,
+        lock_, lock_time_, pre_student_num_, ex_student_num_, created_by_, created_time_, updated_by_, updated_time_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
@@ -127,6 +132,9 @@
         </if>
 
     </select>
+    <select id="findOne" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List"/> FROM course_schedule WHERE id_ = #{courseScheduleId} LIMIT 1
+    </select>
 
 
 </mapper>

+ 3 - 5
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
-import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomService;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -9,14 +9,12 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -37,10 +35,10 @@ public class ImNetworkRoomController extends BaseController {
 
     @PostMapping(value = "/join", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @ApiImplicitParam(name = "courseScheduleId", dataType = "Long", value = "课程编号")
-    public HttpResponseResult<NetworkRoomResult> joinRoom(Long courseScheduleId){
+    public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId){
         courseScheduleId = Optional.ofNullable(courseScheduleId)
                 .orElseThrow(()->new BizException("房间号不可为空"));
-        return succeed(imNetworkRoomService.joinRoom(courseScheduleId, UserRoleEnum.TEACHER));
+        return imNetworkRoomService.joinRoom(courseScheduleId, UserRoleEnum.TEACHER);
     }
 }