浏览代码

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

liujunchi 3 年之前
父节点
当前提交
db47dac269

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/LiveRoomConstant.java

@@ -35,4 +35,7 @@ public interface LiveRoomConstant {
     //当前房间心跳
     String LIVE_ROOM_HEART_BEAT = String.join(":", COOLESHOW, "LIVE_ROOM_HEART_BEAT", ROOM_UID);
 
+    //正在临时直播间的房间列表
+    String TEACHER_TEMP_LIVE_ROOM = String.join(":", COOLESHOW, "TEACHER_TEMP_LIVE_ROOM");
+
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoom.java

@@ -63,7 +63,7 @@ public class LiveRoom implements Serializable {
     private Integer roomState;
 
     @TableField("type_")
-    @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间 practice陪练课")
+    @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间")
     private String type;
 
     @TableField("cover_pic_")

+ 27 - 18
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -303,6 +303,9 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         this.createLiveRoomInfo(room, sysUser);
         //临时
         this.pushLiveCreateRoom(room);
+        //写入临时直播间列表
+        RMap<Long, String> map = redissonClient.getMap(TEACHER_TEMP_LIVE_ROOM);
+        map.put(teacherId, roomUid);
         return roomUid;
     }
 
@@ -485,15 +488,18 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //删除房间在线人员缓存
         onlineUserCache.deleteAsync();
         //删除房间信息
-        this.getLiveRoomInfo(room.getRoomUid()).deleteAsync();
+        this.getLiveRoomInfo(roomUid).deleteAsync();
         //删除点赞数
-        redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).deleteAsync();
+        redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).deleteAsync();
         //删除当前主讲人最后一次进入房间的ip
         redissonClient.getBucket(LIVE_USER_LAST_CLIENT_IP.replace(ROOM_UID, roomUid).replace(USER_ID, speakerIdStr)).deleteAsync();
         //删除当前主讲人最后一次心跳
         redissonClient.getBucket(LIVE_ROOM_HEART_BEAT.replace(ROOM_UID, roomUid)).deleteAsync();
         //删除房间全部人员缓存
         this.getTotalUserCache(roomUid).deleteAsync();
+        //删除该临时直播间列表
+        RMap<Long, String> map = redissonClient.getMap(TEACHER_TEMP_LIVE_ROOM);
+        map.remove(room.getSpeakerId());
     }
 
     /**
@@ -529,10 +535,17 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             if (StringUtils.isBlank(user.getStatus())) {
                 return;
             }
+            String userIdStr = user.getUserid();
+            //获取当前用户所在房间的uid
+            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userIdStr));
+            if (!userRoom.isExists()) {
+                return;
+            }
+            String roomUid = userRoom.get();
+
             Date now = new Date();
             //获取当前用户状态变更的时间
             long userStateTime = Optional.ofNullable(user.getTime()).orElse(now.getTime());
-            String userIdStr = user.getUserid();
             RBucket<Long> userStateTimeCache = redissonClient.getBucket(LIVE_USER_LAST_TIME.replace(USER_ID, userIdStr));
             if (userStateTimeCache.isExists()) {
                 //缓存的时间比当前传入时间大则放弃这条数据
@@ -542,13 +555,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                 }
             }
             //将最新的时间写入缓存
-            userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES);
-            //获取当前用户所在房间的uid
-            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userIdStr));
-            if (!userRoom.isExists()) {
-                return;
-            }
-            String roomUid = userRoom.get();
+            userStateTimeCache.set(userStateTime, 60L, TimeUnit.MINUTES);
             //根据房间号获取房间信息
             RBucket<RoomInfoCache> roomInfoCache = this.getLiveRoomInfo(roomUid);
             if (!roomInfoCache.isExists()) {
@@ -557,7 +564,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             RoomInfoCache roomInfo = roomInfoCache.get();
             // 查询userId是不是主讲人 ,如果是主讲人则返回
             if (roomInfo.getSpeakerId().toString().equals(userIdStr)) {
-                opsSpeaker(roomInfoCache, user, now, userIdStr);
+                this.opsSpeaker(roomInfoCache, user, now, userIdStr);
                 return;
             }
             //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
@@ -569,7 +576,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             //从房间累计用户信息中查询该用户的信息
             RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
             //该房间未查询到用户数据则不处理
-            if (!roomTotalUser.isExists() && !roomTotalUser.containsKey(userId)) {
+            if (!roomTotalUser.isExists()) {
+                return;
+            }
+            if (!roomTotalUser.containsKey(userId)) {
                 return;
             }
             //查询用户数据
@@ -585,13 +595,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             //从在线人员列表删除该人员
             onlineUserInfo.fastRemove(userId);
             //学员退出 写学生考勤表
-            StudentAttendance studentAttendance = studentAttendanceService.getOne(Wrappers.<StudentAttendance>lambdaQuery()
+            studentAttendanceService.update(Wrappers.<StudentAttendance>lambdaUpdate()
                     .eq(StudentAttendance::getStudentId, userId)
-                    .eq(StudentAttendance::getCourseScheduleId, roomInfo.getCourseId()));
-            if (Objects.nonNull(studentAttendance)) {
-                studentAttendance.setSignOutTime(now);
-                studentAttendanceService.updateById(studentAttendance);
-            }
+                    .eq(StudentAttendance::getCourseScheduleId, roomInfo.getCourseId())
+                    .set(StudentAttendance::getSignOutTime, now));
             //向直播间发送当前在线人数消息
             this.sendOnlineUserCount(roomUid, userId, onlineUserInfo.size());
             log.info("opsRoom>>>> looker userInfo: {}", userJsonStr);
@@ -729,6 +736,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      * @param userId  用户id 观看者id
      */
     public RoomInfoCache joinRoom(String roomUid, Long userId) {
+        Optional.ofNullable(roomUid).orElseThrow(() -> new BizException("房间编号不能为空!"));
+        Optional.ofNullable(userId).orElseThrow(() -> new BizException("人员编号不能为空!"));
         //获取进入房间人员信息
         SysUser sysUser = this.getSysUser(userId);
         //校验信息

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

@@ -26,6 +26,7 @@ import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
+import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -37,6 +38,8 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.TEACHER_TEMP_LIVE_ROOM;
+
 @Service
 public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> implements TeacherService {
     @Autowired
@@ -147,7 +150,16 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherHomeVo.setUnExpTime(null == total.getUnExpTime() ? 0 : total.getUnExpTime());
         teacherHomeVo.setMusicAlbumNum(null == total.getMusicAlbumNum() ? 0 : total.getMusicAlbumNum());
         teacherHomeVo.setMusicSheetNum(null == total.getMusicSheetNum() ? 0 : total.getMusicSheetNum());
-        teacherHomeVo.setLiveing(total.getLiveFlag() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+
+        //取直播缓存
+        RMap<Long, String> liveMap = redissonClient.getMap(TEACHER_TEMP_LIVE_ROOM);
+        String roomUid = liveMap.get(userId);
+        if (!StringUtil.isEmpty(roomUid)) {
+            teacherHomeVo.setLiveing(YesOrNoEnum.YES);
+            teacherHomeVo.setRoomUid(roomUid);
+        } else {
+            teacherHomeVo.setLiveing(YesOrNoEnum.NO);
+        }
         return HttpResponseResult.succeed(teacherHomeVo);
     }
 
@@ -182,13 +194,32 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return subjects;
     }
 
+
     private HttpResponseResult<Boolean> doCreate(TeacherSubmitReq teacherSubmitReq) throws BizException {
-        //判断手机号
+        //更新sys_user
         SysUser sysUser = employeeDao.querySysUserByPhone(teacherSubmitReq.getPhone());
-        if (null != sysUser) {
-            return HttpResponseResult.failed("该手机号已经被注册");
+        if (null == sysUser) {
+            sysUser = insertSysUser(teacherSubmitReq);
+            teacherSubmitReq.setUserId(sysUser.getId());
+        } else {
+            teacherSubmitReq.setUserId(sysUser.getId());
+            updateSysUser(teacherSubmitReq);
         }
-        sysUser = new SysUser();
+        //新增修改老师表
+        insertOrUpdateTeacher(teacherSubmitReq);
+        return HttpResponseResult.succeed(true);
+    }
+
+    private HttpResponseResult<Boolean> doUpdate(TeacherSubmitReq teacherSubmitReq) {
+        //更新sys_user
+        updateSysUser(teacherSubmitReq);
+        //新增修改老师表
+        insertOrUpdateTeacher(teacherSubmitReq);
+        return HttpResponseResult.succeed(true);
+    }
+
+    private SysUser insertSysUser(TeacherSubmitReq teacherSubmitReq) {
+        SysUser sysUser = new SysUser();
         sysUser = getUserDetil(sysUser, teacherSubmitReq);
         sysUser.setUserType(SysUserType.TEACHER.getCode());
         //初始密码,手机号后6位
@@ -202,49 +233,54 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         //设置昵称
         sysUser.setUsername("游客" + sysUser.getId());
         employeeDao.updateSysUser(sysUser);
-        //插入老师表
-
-        Teacher teacher = new Teacher();
-        teacher.setUserId(sysUser.getId());
-        teacher = getTeacherDetil(teacher, teacherSubmitReq);
-        baseMapper.insert(teacher);
-        //插入老师账户表
-        UserAccount oldAcc = userAccountService.getById(sysUser.getId());
-        if (null == oldAcc) {
-            UserAccount userAccount = new UserAccount();
-            userAccount.setUserId(sysUser.getId());
-            userAccountService.save(userAccount);
-        }
-        return HttpResponseResult.succeed(true);
+        return sysUser;
     }
 
-    private HttpResponseResult<Boolean> doUpdate(TeacherSubmitReq teacherSubmitReq) {
+    private SysUser updateSysUser(TeacherSubmitReq teacherSubmitReq) {
         //判断手机号
         SysUser sysUser = employeeDao.querySysUserByPhone(teacherSubmitReq.getPhone());
         if (null != sysUser && !teacherSubmitReq.getUserId().equals(sysUser.getId())) {
-            return HttpResponseResult.failed("该手机号已经被注册");
+            throw new BizException("该手机号已经被注册");
         }
         sysUser = employeeDao.querySysUserById(teacherSubmitReq.getUserId());
         if (null == sysUser) {
-            return HttpResponseResult.failed("未找到用户");
+            throw new BizException("未找到用户");
         }
         sysUser = getUserDetil(sysUser, teacherSubmitReq);
+        sysUser.setUpdateTime(new Date());
+        employeeDao.updateSysUser(sysUser);
+        return sysUser;
+    }
 
+    private Teacher insertOrUpdateTeacher(TeacherSubmitReq teacherSubmitReq) {
         Teacher teacher = baseMapper.selectById(teacherSubmitReq.getUserId());
-        teacher = getTeacherDetil(teacher, teacherSubmitReq);
-        teacher.setUpdateTime(new Date());
-        baseMapper.updateById(teacher);
-        if (null == teacher.getEntryAuthDate() || null == teacher.getMusicianDate()) {
-            baseMapper.update(teacher, Wrappers.<Teacher>lambdaUpdate()
-                    .set(Teacher::getEntryAuthDate, teacher.getEntryAuthDate())
-                    .set(Teacher::getMusicianDate, teacher.getMusicianDate())
-                    .eq(Teacher::getUserId, teacher.getUserId())
-            );
+        if (null == teacher) {
+            teacher = new Teacher();
+            teacher.setUserId(teacherSubmitReq.getUserId());
+            teacher = getTeacherDetil(teacher, teacherSubmitReq);
+            baseMapper.insert(teacher);
+
+            //插入老师账户表
+            UserAccount oldAcc = userAccountService.getById(teacherSubmitReq.getUserId());
+            if (null == oldAcc) {
+                UserAccount userAccount = new UserAccount();
+                userAccount.setUserId(teacherSubmitReq.getUserId());
+                userAccountService.save(userAccount);
+            }
+        } else {
+            teacher.setUpdateTime(new Date());
+            baseMapper.updateById(teacher);
+
+            if (null == teacher.getEntryAuthDate() || null == teacher.getMusicianDate()) {
+                baseMapper.update(teacher, Wrappers.<Teacher>lambdaUpdate()
+                        .set(Teacher::getEntryAuthDate, teacher.getEntryAuthDate())
+                        .set(Teacher::getMusicianDate, teacher.getMusicianDate())
+                        .eq(Teacher::getUserId, teacher.getUserId())
+                );
+            }
         }
 
-        sysUser.setUpdateTime(new Date());
-        employeeDao.updateSysUser(sysUser);
-        return HttpResponseResult.succeed(true);
+        return teacher;
     }
 
     /***