Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 2 years ago
parent
commit
bb464baa82

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -76,8 +76,12 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     void startLive(String roomUid, Integer userId,String videoResolution);
 
+    void startLive(String roomUid, Integer userId, String videoResolution, String sequence);
+
     void closeLive(String roomUid, Integer userId);
 
+    void closeLive(String roomUid, Integer userId, String sequence);
+
     void createLiveRoom();
 
     void createLiveRoom(ImLiveBroadcastRoom room);

+ 75 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -832,6 +832,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         userState.forEach(user -> {
             log.info("opsRoom>>>> {}", JSONObject.toJSONString(user));
             if (StringUtils.isBlank(user.getStatus())) {
+                log.debug("opsRoom>>>> user status is null");
                 return;
             }
             Date now = new Date();
@@ -843,12 +844,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 //缓存的时间比当前传入时间大则放弃这条数据
                 long cacheTime = userStateTimeCache.get();
                 if (cacheTime > userStateTime) {
+                    log.debug("opsRoom>>>> cacheTime > userStateTime, cacheTime: {}, userStateTime: {}", cacheTime, userStateTime);
                     return;
                 }
             }
             //获取当前用户所在房间的uid
             RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid));
             if (!userRoom.isExists()) {
+                log.debug("opsRoom>>>> userRoom is not exists, userState: {}", JSON.toJSONString(userState));
                 return;
             }
             String roomUid = userRoom.get();
@@ -878,9 +881,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
             if (user.getStatus().equals("0")) {
 
-                // 用户进入直播间,发送统计数据
-                sendLiveRoomStatMessage(userid, roomVo);
-
                 // 更新用户在线状态
                 liveBroadcastRoomMemberService.lambdaUpdate()
                         .eq(ImLiveBroadcastRoomMember::getTenantId, roomVo.getTenantId())
@@ -889,6 +889,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                         .set(ImLiveBroadcastRoomMember::getOnlineStatus, 1)
                         .update();
 
+
+                // 用户进入直播间,发送统计数据
+                // sendLiveRoomStatMessage(userid, roomVo);
+
+                // 直播间统计数据
+                getRoomData(roomVo);
+                // 设置群组属性
+                setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_ONLINE,roomVo.getLookNum().toString());
+                setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_TOTAL,roomVo.getTotalLookNum().toString());
+                log.debug("opsRoom>>>> user enter room, userState: {}", JSON.toJSONString(userState));
                 return;
             }
 
@@ -896,9 +906,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             RMap<Integer, String> roomTotalUser = this.getTotalUserCache(roomUid);
             //该房间未查询到用户数据则不处理
             if (!roomTotalUser.isExists()) {
+                log.debug("opsRoom>>>> roomTotalUser is not exists, userState: {}", JSON.toJSONString(userState));
                 return;
             }
             if (!roomTotalUser.containsKey(userId)) {
+                log.debug("opsRoom>>>> roomTotalUser is not containsKey, userState: {}", JSON.toJSONString(userState));
                 return;
             }
             String userJsonStr = roomTotalUser.get(userId);
@@ -914,6 +926,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             //查询在线人员列表
             RMap<Integer, String> onlineUserInfo = this.getOnlineUserCache(roomUid);
             if (!onlineUserInfo.isExists()) {
+                log.debug("opsRoom>>>> onlineUserInfo is not exists, userState: {}", JSON.toJSONString(userState));
                 return;
             }
             //从在线人员列表删除该人员
@@ -957,9 +970,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     private void sendLiveRoomStatMessage(String userid, ImLiveBroadcastRoomVo roomVo) {
 
-        // 直播间统计数据
-        getRoomData(roomVo);
-
         // 消息发送用户
         LiveRoomMessage.MessageUser messageUser = null;
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -991,7 +1001,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
         //发送消息
         try {
-            livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message);
+            // livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message);
             log.info("sendLiveRoomStatMessage>>>> message: {}", JSONObject.toJSONString(message));
         } catch (Exception e) {
             log.error("sendLiveRoomStatMessage>>>> error {}", e.getMessage());
@@ -1272,6 +1282,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                                                                                    .groupId(roomVo.getRoomUid())
                                                                                    .appDefinedData(appDefinedData)
                                                                                    .build());
+            log.info("设置直播群配置成功 roomUid:{}, data {}",roomVo.getRoomUid(), JSONObject.toJSONString(appDefinedData));
         } catch (Exception e) {
             log.error("设置直播群配置失败", e);
         }
@@ -1451,7 +1462,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      *
      * @param roomUid 房间uid
      */
+
+
     public void startLive(String roomUid, Integer userId, String videoResolution) {
+        startLive(roomUid, userId, videoResolution, null);
+    }
+
+    @Override
+    public void startLive(String roomUid, Integer userId, String videoResolution, String sequence) {
         //查询房间信息
         RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
         if (!speakerCache.isExists()) {
@@ -1508,6 +1526,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         Date now = new Date();
         //开始直播
         roomSpeakerInfo.setState(0);
+        roomSpeakerInfo.setSequence(sequence);
         roomSpeakerInfo.setStartLiveTime(now);
         speakerCache.set(roomSpeakerInfo);
         log.info("startLive>>>> roomSpeakerInfo: {}", JSONObject.toJSONString(roomSpeakerInfo));
@@ -1521,15 +1540,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param roomUid 房间uid
      * @param userId  老师id
      */
+
     public void closeLive(String roomUid, Integer userId) {
+        closeLive(roomUid, userId, null);
+    }
+    @Override
+    public void closeLive(String roomUid, Integer userId, String sequence) {
         //查询房间主播信息
         RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
         if (!speakerCache.isExists()) {
             return;
         }
         RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
+
         //关闭直播
-        closeLive(roomSpeakerInfo);
+        closeLive(roomSpeakerInfo,sequence);
         speakerCache.set(roomSpeakerInfo);
     }
 
@@ -1539,6 +1564,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param roomSpeakerInfo 房间主播信息
      */
     private void closeLive(RoomSpeakerInfo roomSpeakerInfo) {
+        closeLive(roomSpeakerInfo,null);
+    }
+    private void closeLive(RoomSpeakerInfo roomSpeakerInfo,String sequence) {
         //直播状态 true 直播中 false关闭直播
         boolean stateFlag = intEquals(roomSpeakerInfo.getState(), 0);
         //是否录像 true允许 false不允许
@@ -1546,7 +1574,34 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
 
         // 设置推流状态房间信息
-        setPushStatus(roomSpeakerInfo.getRoomUid(), 0);
+        // 查询房间信息
+        ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomSpeakerInfo.getRoomUid());
+
+        if (imLiveBroadcastRoomVo == null) {
+            log.warn("closeLive imLiveBroadcastRoomVo is null");
+            return;
+        }
+
+
+        LivePluginService pluginService = livePluginContext.getPluginService(imLiveBroadcastRoomVo.getServiceProvider());
+        if (StringUtils.isBlank(sequence)) {
+            try {
+                TencentWrapper.LiveStreamState liveStreamState = pluginService.liveStreamState(getStreamId(imLiveBroadcastRoomVo.getRoomUid(), imLiveBroadcastRoomVo.getSpeakerId()));
+                if (liveStreamState == null) {
+                    log.error("查询直播间流失败,返回结果为空");
+                } else {
+                    log.info("查询直播间流状态:{},roomUid:{}", JSON.toJSONString(liveStreamState), imLiveBroadcastRoomVo.getRoomUid());
+                    if (!"active".equals(liveStreamState.getStreamState())) {
+                        setPushStatus(roomSpeakerInfo.getRoomUid(), 0);
+                    }
+                }
+            } catch (Exception e) {
+                log.error("查询直播间流失败,roomUid:{}", imLiveBroadcastRoomVo.getRoomUid(), e);
+            }
+        } else if (sequence.equals(roomSpeakerInfo.getSequence())) {
+            setPushStatus(roomSpeakerInfo.getRoomUid(), 0);
+        }
+
 
         //允许录像并在直播中
         if (whetherVideoFlag && stateFlag) {
@@ -1554,13 +1609,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 //停止录制视频
                 // imFeignService.stopRecord(roomSpeakerInfo.getRoomUid());
 
-                // 查询房间信息
-                ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = getImLiveBroadcastRoomVo(roomSpeakerInfo.getRoomUid());
-                if (imLiveBroadcastRoomVo == null) {
-                    log.warn("closeLive imLiveBroadcastRoomVo is null");
-                    return;
-                }
-                LivePluginService pluginService = livePluginContext.getPluginService(imLiveBroadcastRoomVo.getServiceProvider());
                 RTCRoom rtcRoom = pluginService.rtcRoomInfo(roomSpeakerInfo.getRoomUid());
                 if (rtcRoom == null) {
                     log.warn("closeLive rtcRoom is null");
@@ -2734,6 +2782,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         private Integer state;
         //房间uid
         private String roomUid;
+        // 直播流sequence
+        private String sequence;
+
         //房间创建时间
         private Date createRoomTime;
         //进入房间时间
@@ -2760,6 +2811,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         // 腾讯视频模板 0: 没有 1:有
         private Integer videoTemplate;
 
+        public String getSequence() {
+            return sequence;
+        }
+
+        public void setSequence(String sequence) {
+            this.sequence = sequence;
+        }
+
         public Integer getVideoTemplate() {
             return videoTemplate;
         }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java

@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
 import com.ym.mec.biz.dal.vo.TempCampUserQualificationsVo;
+import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampUserRelationService;
@@ -46,6 +48,9 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
     @Autowired
     private RedissonClient redissonClient;
 
+    @Autowired
+    private StudentService studentService;
+
     @Override
     public TempLittleArtistTrainingCampUserRelationDao getDao() {
         return this.baseMapper;
@@ -60,6 +65,13 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
     @Override
     public void add(Integer campId) {
         SysUser user = getUser();
+
+        //只有VIP报名
+        Student student = studentService.get(user.getId());
+        if (student == null || student.getMembershipEndTime() == null ||student.getMembershipEndTime().compareTo(new Date()) < 0) {
+            throw new BizException("仅团练宝学员可报名");
+        }
+
         RBucket<Object> addCamp = redissonClient.getBucket("TEMP:CAMP_ADD:" + user.getId());
         if (!addCamp.trySet(1, 10, TimeUnit.SECONDS)) {
             throw new BizException("正在登记训练营,请勿重复提交");

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/OrganizationCourseUnitPriceSettingsMapper.xml

@@ -121,7 +121,7 @@
 		WHERE organ_id_ = #{organId} AND course_view_type_ = #{courseViewType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		GROUP BY course_type_
 	</select>
-	<select id="querySingle" resultType="com.ym.mec.biz.dal.entity.OrganizationCourseUnitPriceSettings">
+	<select id="querySingle" resultMap="OrganizationCourseUnitPriceSettings">
 		select * from organization_course_unit_price_settings
 		where organ_id_ = #{organId} and course_type_ = #{courseType}
 		<if test="tenantId != -1">

+ 2 - 2
mec-im/src/main/java/com/ym/controller/UserController.java

@@ -169,7 +169,7 @@ public class UserController {
             imUserState.setStatus("3");
 
             // 自动关闭录制
-            imLiveBroadcastRoomService.closeLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()));
+            imLiveBroadcastRoomService.closeLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()),event.getSequence());
 
             // 同步点赞数
             imLiveBroadcastRoomService.syncLikeCount(getRoomUid(event.getStreamId()));
@@ -178,7 +178,7 @@ public class UserController {
         // 推流事件通知
         if (event.getEventType() == 1) {
             // 自动开启录制
-            imLiveBroadcastRoomService.startLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()), null);
+            imLiveBroadcastRoomService.startLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()), null,event.getSequence());
 
             imUserState.setStatus("0");
         }

+ 2 - 2
mec-im/src/main/resources/logback-spring.xml

@@ -38,14 +38,14 @@
     </springProfile>
     <!--开发环境:打印控制台 -->
     <springProfile name="dev">
-        <root level="INFO">
+        <root level="DEBUG">
             <appender-ref ref="stdout" />
             <appender-ref ref="file" />
         </root>
     </springProfile>
 
     <springProfile name="test">
-        <root level="INFO">
+        <root level="DEBUG">
             <appender-ref ref="stdout" />
             <appender-ref ref="file" />
         </root>