浏览代码

网络教室

zouxuan 3 年之前
父节点
当前提交
1f6ab1fe3b

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomMemberService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 
@@ -19,7 +20,7 @@ public interface ImNetworkRoomMemberService extends IService<ImNetworkRoomMember
 
     ImNetworkRoomMemberDao getDao();
 
-    ImNetworkRoomMember initRoomMember(String roomId, SysUser sysUser, UserRoleEnum userRole);
+    ImNetworkRoomMember initRoomMember(String roomId, BasicUserInfo sysUser, UserRoleEnum userRole);
 
 }
 

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

@@ -24,7 +24,7 @@ public interface ImNetworkRoomService extends IService<ImNetworkRoom> {
     HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole) throws Exception;
 
     //加入网络教室成功
-    void joinRoomSuccess(String roomId, UserRoleEnum userRole) throws Exception;
+    void joinRoomSuccess(String roomId,Long userId) throws Exception;
 
     //加入网络教室失败
     void joinRoomFailure(String roomId);
@@ -32,10 +32,14 @@ public interface ImNetworkRoomService extends IService<ImNetworkRoom> {
     //退出房间
     void leaveRoom(String roomId,UserRoleEnum userRole) throws Exception;
 
+    //退出房间成功
+    void leaveRoomSuccess(String roomId, Long userId) throws Exception;
+
     //控制用户节拍器
     void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception;
 
     //老师通知学员下载伴奏
     void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData);
+
 }
 

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberService;
@@ -33,8 +34,8 @@ public class ImNetworkRoomMemberServiceImpl extends ServiceImpl<ImNetworkRoomMem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ImNetworkRoomMember initRoomMember(String roomId, SysUser sysUser, UserRoleEnum userRole) {
-        ImNetworkRoomMember roomMember = baseMapper.findByRidAndUid(roomId, sysUser.getId());
+    public ImNetworkRoomMember initRoomMember(String roomId, BasicUserInfo sysUser, UserRoleEnum userRole) {
+        ImNetworkRoomMember roomMember = baseMapper.findByRidAndUid(roomId, sysUser.getUserId());
         if(Objects.isNull(roomMember)){
             roomMember = new ImNetworkRoomMember();
             roomMember.setRoomId(roomId);
@@ -43,7 +44,7 @@ public class ImNetworkRoomMemberServiceImpl extends ServiceImpl<ImNetworkRoomMem
             roomMember.setMicFlag(true);
             roomMember.setMusicModeFlag(false);
             roomMember.setRole(userRole.ordinal());
-            roomMember.setUserId(sysUser.getId());
+            roomMember.setUserId(sysUser.getUserId());
             roomMember.setUsername(userRole == UserRoleEnum.STUDENT?sysUser.getUsername():sysUser.getRealName());
             roomMember.setAvatar(sysUser.getAvatar());
             roomMember.setCourseScheduleId(Long.parseLong(roomId));

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

@@ -1,21 +1,20 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
 import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
+import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.*;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
-import com.yonge.cooleshow.biz.dal.entity.IMApiResultInfo;
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomErrorEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomMemberChangedEnum;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.IMHelper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.utils.date.DateUtil;
@@ -27,10 +26,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 网络教室房间(ImNetworkRoom)表服务实现类
@@ -46,6 +43,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Resource
     private SysUserFeignService sysUserFeignService;
     @Resource
+    private TeacherDao teacherDao;
+    @Resource
     private ImNetworkRoomMemberService imNetworkRoomMemberService;
     @Resource
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
@@ -69,20 +68,22 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole) throws Exception {
         log.info("joinRoom params:courseScheduleId:{},userRole:{}",courseScheduleId,userRole);
-        CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getBaseMapper().selectById(courseScheduleId)).
-                orElseThrow(()-> new BizException("课程信息不存在"));
+        SysUser user = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(courseScheduleId)).
+                orElseThrow(()->new BizException("房间信息不存在"));
+        BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(user.getId())).
+                orElseThrow(()-> new BizException("用户信息不存在"));
         Date now = new Date();
         courseSchedule.setUpdatedTime(now);
         //是否提前进入教室
         if (roomNotStart(courseSchedule)) {
             return HttpResponseResult.failed(ImNetworkRoomErrorEnum.ROOM_NOT_START.getRemark());
         }
-        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
-                orElseThrow(()-> new BizException("请登录"));
         String roomId = courseScheduleId.toString();
         ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
         //初始化房间信息
-        ImNetworkRoom room = this.initRoom(roomId,courseScheduleId,userRole,sysUser.getId(),now);
+        ImNetworkRoom room = this.initRoom(roomId,courseScheduleId,userRole,sysUser.getUserId(),now);
         BeanUtils.copyProperties(room,joinRoomResult);
         //定时销毁房间
         //初始化房间用户信息
@@ -96,11 +97,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             courseScheduleStudentPaymentService.getDao().cleanPlayMidi(courseScheduleId);
         }else {
             //获取节拍器信息
-            joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getId()));
+            joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getUserId()));
         }
         //获取用户已下载的伴奏列表
         List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
-                queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
+                queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getUserId(),null,null);
         joinRoomResult.setMusicSheetResults(musicSheetResults);
         //课程结束后关闭教室的时间
         String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
@@ -108,7 +109,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         //获取课程剩余时长
         DateUtil.secondsBetween(now, courseSchedule.getEndTime());
         //创建、加入群聊
-        IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{sysUser.getId().toString()}, roomId, roomId);
+        IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{sysUser.getUserId().toString()}, roomId, roomId);
         if(resultInfo.getCode() != 200){
             log.error("加入群聊失败 resultInfo:{}",resultInfo);
             throw new BizException("加入网络教室失败,请联系管理员");
@@ -118,11 +119,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void joinRoomSuccess(String roomId,UserRoleEnum userRole) throws Exception {
-        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
-                orElseThrow(()-> new BizException("请登录"));
-        Long userId = sysUser.getId();
+    public void joinRoomSuccess(String roomId,Long userId) throws Exception {
         log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
+        CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId)).
+                orElseThrow(()->new BizException("房间信息不存在"));
+        BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
+                orElseThrow(()-> new BizException("用户信息不存在"));
+        UserRoleEnum userRole = UserRoleEnum.STUDENT;
+        if(Objects.equals(courseSchedule.getTeacherId(),userId)){
+            userRole = UserRoleEnum.TEACHER;
+        }
         Date now = new Date();
         //获取房间信息
         this.initRoom(roomId, Long.parseLong(roomId), userRole, userId, now);
@@ -177,6 +183,29 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void leaveRoomSuccess(String roomId, Long userId) throws Exception {
+        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId, userId);
+        CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
+        if(Objects.isNull(courseSchedule)){
+            return;
+        }
+        UserRoleEnum roleEnum = UserRoleEnum.STUDENT;
+        if(Objects.equals(courseSchedule.getTeacherId(),userId)){
+            roleEnum = UserRoleEnum.TEACHER;
+        }
+        BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
+                orElseThrow(()-> new BizException("用户信息不存在"));
+        Date now = new Date();
+        //删房间用户信息
+        imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
+        ImNetworkRoom room = baseMapper.findByRoomId(roomId);
+        if (roleEnum == UserRoleEnum.TEACHER && isUserDisplay(room.getDisplay(), userId)) {
+            this.updateDisplay(userId,room);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
         SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
                 orElseThrow(()-> new BizException("请登录"));
@@ -192,40 +221,40 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData) {
-        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
-                orElseThrow(()-> new BizException("请登录"));
-        Long userId = sysUser.getId();
-        Long courseScheduleId = musicSheetData.getCourseScheduleId();
-        log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
-        //获取已通知下载的伴奏列表
-        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
-                courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
-        ImNetworkMusicSheetDownloadMessageContent downloadMessageContent = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
-        if (musicSheetResults.size() == 0) {
-            //第一次下载,生成数据
-            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
-            Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
-            studentIds.forEach(e -> {
-                CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
-                musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
-                musicSheetResult.setSpeed(100);
-                musicSheetResult.setCourseScheduleId(courseScheduleId);
-                musicSheetResult.setUserId(e);
-                musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
-                musicSheetResults.add(musicSheetResult);
-            });
-            CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
-            musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
-            musicSheetResult.setSpeed(100);
-            musicSheetResult.setCourseScheduleId(courseScheduleId);
-            musicSheetResult.setUserId(userId);
-            musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
-            musicSheetResults.add(musicSheetResult);
-            courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
-        }
-        ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
-        ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
-        imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
+//        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+//                orElseThrow(()-> new BizException("请登录"));
+//        Long userId = sysUser.getId();
+//        Long courseScheduleId = musicSheetData.getCourseScheduleId();
+//        log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
+//        //获取已通知下载的伴奏列表
+//        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
+//                courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
+//        ImNetworkMusicSheetDownloadMessageContent downloadMessageContent = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
+//        if (musicSheetResults.size() == 0) {
+//            //第一次下载,生成数据
+//            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
+//            Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
+//            studentIds.forEach(e -> {
+//                CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
+//                musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
+//                musicSheetResult.setSpeed(100);
+//                musicSheetResult.setCourseScheduleId(courseScheduleId);
+//                musicSheetResult.setUserId(e);
+//                musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
+//                musicSheetResults.add(musicSheetResult);
+//            });
+//            CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
+//            musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
+//            musicSheetResult.setSpeed(100);
+//            musicSheetResult.setCourseScheduleId(courseScheduleId);
+//            musicSheetResult.setUserId(userId);
+//            musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
+//            musicSheetResults.add(musicSheetResult);
+//            courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
+//        }
+//        ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
+//        ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
+//        imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
     }
 
     //校验用户是否提前进入教室
@@ -256,12 +285,32 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             }
         }else {
             if(userRole == UserRoleEnum.TEACHER){
-                room.setDisplay(new StringBuilder("display://type=1?userId=")
-                        .append(userId)
-                        .append("?uri=").toString());
-                baseMapper.updateById(room);
+                //修改节拍器
+                this.updateDisplay(userId,room);
             }
         }
         return room;
     }
+
+    //修改节拍器
+    public void updateDisplay(Long userId,ImNetworkRoom room) throws Exception {
+        String display = new StringBuilder("display://type=1?userId=")
+                .append(userId)
+                .append("?uri=").toString();
+        room.setDisplay(display);
+        baseMapper.updateById(room);
+        //发送display改动通知
+        ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(display);
+        imHelper.publishMessage(userId.toString(), room.getRoomId(), displayMessage, 0);
+    }
+
+    public boolean isUserDisplay(String display, Long userId) {
+        boolean result = false;
+        if (!display.isEmpty() && display.contains("userId=" + userId)) {
+            if (display.contains("type=0") || display.contains("type=1") || display.contains("type=3")) {
+                result = true;
+            }
+        }
+        return result;
+    }
 }

+ 34 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java

@@ -1,17 +1,24 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.dto.ImChannelStateNotify;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkCustomMessage;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomMusicSheetData;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomService;
+import com.yonge.cooleshow.biz.dal.service.impl.ImNetworkRoomServiceImpl;
 import com.yonge.cooleshow.common.controller.BaseController;
 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.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -19,6 +26,7 @@ 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;
 
 /**
@@ -31,11 +39,15 @@ import java.util.Optional;
 @RestController
 @RequestMapping("/imNetworkRoom")
 public class ImNetworkRoomController extends BaseController {
+
+    private final static Logger log = LoggerFactory.getLogger(ImNetworkRoomController.class);
     /**
      * 服务对象
      */
     @Resource
     private ImNetworkRoomService imNetworkRoomService;
+    @Resource
+    private CourseScheduleService courseScheduleService;
 
     @ApiOperation("加入网络教室")
     @PostMapping(value = "/join", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -46,12 +58,12 @@ public class ImNetworkRoomController extends BaseController {
         return imNetworkRoomService.joinRoom(courseScheduleId, UserRoleEnum.TEACHER);
     }
 
-    @ApiOperation("加入网络教室状态回调")
-    @PostMapping(value = "joinRoomSuccess", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public HttpResponseResult joinRoomSuccess(Long courseScheduleId) throws Exception {
-        imNetworkRoomService.joinRoomSuccess(courseScheduleId.toString(),UserRoleEnum.TEACHER);
-        return succeed();
-    }
+//    @ApiOperation("加入网络教室状态回调")
+//    @PostMapping(value = "joinRoomSuccess", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+//    public HttpResponseResult joinRoomSuccess(Long courseScheduleId) throws Exception {
+//        imNetworkRoomService.joinRoomSuccess(courseScheduleId.toString(),UserRoleEnum.TEACHER);
+//        return succeed();
+//    }
 
     @ApiOperation("加入网络教室状态回调")
     @PostMapping(value = "joinRoomFailure", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -60,6 +72,22 @@ public class ImNetworkRoomController extends BaseController {
         return succeed();
     }
 
+    @RequestMapping(value = "/statusSync")
+    public void statusSync(@RequestBody String body) throws Exception {
+        ImChannelStateNotify notify = JSONObject.parseObject(body, ImChannelStateNotify.class);
+        log.info("statusSyncParam: {}",JSONObject.toJSON(notify));
+        switch (notify.getEvent()) {
+            case 11:
+                //成员加入
+                imNetworkRoomService.joinRoomSuccess(notify.getChannelId(),Long.parseLong(notify.getUserId()));
+                break;
+            case 12:
+                //成员退出
+                imNetworkRoomService.leaveRoomSuccess(notify.getChannelId(),Long.parseLong(notify.getUserId()));
+                break;
+        }
+    }
+
     @ApiOperation("退出网络教室")
     @ApiImplicitParam(name = "courseScheduleId", dataType = "Long", value = "课程编号")
     @PostMapping(value = "/leave", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)