房间-云信-批量更新房间在线人数
This commit is contained in:
@@ -135,6 +135,22 @@ public class ErBanNetEaseService extends BaseService {
|
||||
return gsonDefine.fromJson(result, RoomRet.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询聊天室信息
|
||||
*/
|
||||
public BatchRoomRet getBatchRoomMessage(List<Long> roomIdList) {
|
||||
String url = NetEaseConstant.basicUrl + NetEaseConstant.RoomUrl.getBatch;
|
||||
NetEaseBaseClient netEaseBaseClient = new NetEaseBaseClient(NetEaseConfig.neteaseAppKey, NetEaseConfig.neteaseAppSecret, url);
|
||||
Map<String, Object> param = Maps.newHashMap();
|
||||
param.put("roomids", roomIdList.stream().map(Object::toString).toArray(String[]::new));
|
||||
param.put("needOnlineUserCount", true);
|
||||
String result = netEaseBaseClient.buildHttpPostParam(param).executePost();
|
||||
log.info("getBatchRoomMessage result: {}", result);
|
||||
return gsonDefine.fromJson(result, BatchRoomRet.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建聊天室
|
||||
*
|
||||
|
@@ -0,0 +1,55 @@
|
||||
package com.accompany.common.netease.neteaseacc.result;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class BatchRoomRet extends BaseNetEaseRet {
|
||||
/**
|
||||
{
|
||||
"noExistRooms": [ //不存在的聊天室id列表
|
||||
6001
|
||||
],
|
||||
"succRooms": [
|
||||
{
|
||||
"roomid": 6002,
|
||||
"valid": true,
|
||||
"announcement": "hi,this is announcement",
|
||||
"muted": false,
|
||||
"name": "6002 chatroom",
|
||||
"broadcasturl": "",
|
||||
"onlineusercount": 0,
|
||||
"ext": "6002 ext",
|
||||
"creator": "zhangsan",
|
||||
"queuelevel": 0,
|
||||
"ionotify": true // 聊天室进出通知是否开启
|
||||
}
|
||||
],
|
||||
"failRooms": [ //失败的聊天室id,有可能是查的时候有500错误
|
||||
6003
|
||||
],
|
||||
"code": 200
|
||||
}
|
||||
*/
|
||||
private List<Long> noExistRooms;
|
||||
private List<Long> failRooms;
|
||||
private List<RoomInfo> succRooms;
|
||||
|
||||
@Data
|
||||
public static class RoomInfo {
|
||||
private Long roomid;
|
||||
private Boolean vaild;
|
||||
private String announcement;
|
||||
private Boolean muted;
|
||||
private String name;
|
||||
private String broadcasturl;
|
||||
private Integer onlineusercount;
|
||||
private String ext;
|
||||
private String creator;
|
||||
private Integer queuelevel;
|
||||
private Boolean ionotify;
|
||||
}
|
||||
|
||||
}
|
@@ -56,6 +56,7 @@ public class NetEaseConstant {
|
||||
public static class RoomUrl {
|
||||
public static String create = "/chatroom/create.action";
|
||||
public static String get = "/chatroom/get.action";
|
||||
public static String getBatch = "/chatroom/getBatch.action";
|
||||
public static String update = "/chatroom/update.action";
|
||||
public static String sendMsg = "/chatroom/sendMsg.action";
|
||||
public static String toggleCloseStat = "/chatroom/toggleCloseStat.action";
|
||||
|
@@ -1906,6 +1906,50 @@ public class RoomService extends BaseService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新房间在线人数
|
||||
*/
|
||||
public void scanRoomOnline(List<RoomVo> roomVoList) {
|
||||
|
||||
Map<Long, RoomVo> roomVoMap = roomVoList.stream().collect(Collectors.toMap(RoomVo::getRoomId, roomVo -> roomVo));
|
||||
List<Long> roomIdList = roomVoList.stream().filter(RoomVo::getValid).map(RoomVo::getRoomId).distinct().collect(Collectors.toList());
|
||||
|
||||
BatchRoomRet batchRoomRet = erBanNetEaseService.getBatchRoomMessage(roomIdList);
|
||||
for (BatchRoomRet.RoomInfo roomInfo: batchRoomRet.getSuccRooms()){
|
||||
RoomVo roomVo = roomVoMap.get(roomInfo.getRoomid());
|
||||
if (null == roomVo){
|
||||
continue;
|
||||
}
|
||||
int personNum = roomInfo.getOnlineusercount();
|
||||
RunningRoomVo runningRoomVo = new RunningRoomVo();
|
||||
if (personNum > 0) {
|
||||
// 牌照房需要过滤机器人
|
||||
if (roomVo.getIsPermitRoom() == 1) {
|
||||
if (roomCleanService.hasRealUserInRoom(roomVo.getRoomId())) {
|
||||
runningRoomVo.setCount(0);
|
||||
} else {
|
||||
// 开房状态时,每扫描一次若在线人数为0,计数器加1
|
||||
runningRoomVo.setCount(roomVo.getCount() + 1);
|
||||
}
|
||||
} else {
|
||||
runningRoomVo.setCount(0);
|
||||
}
|
||||
} else {
|
||||
// 开房状态时,每扫描一次若在线人数为0,计数器加1
|
||||
runningRoomVo.setCount(roomVo.getCount() + 1);
|
||||
}
|
||||
runningRoomVo.setRoomId(roomVo.getRoomId());
|
||||
runningRoomVo.setUid(roomVo.getUid());
|
||||
runningRoomVo.setOnlineNum(personNum);
|
||||
|
||||
String runningRoomStr = GsonUtil.getDefGson().toJson(runningRoomVo);
|
||||
jedisService.hwrite(RedisKey.room_running.getKey(), roomVo.getUid().toString(), runningRoomStr);
|
||||
updateRoomOnlineNumMysql(roomVo.getUid(), personNum);
|
||||
// 更新房间缓存
|
||||
saveRoomCacheByUid(roomVo.getUid());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取房间在线人数
|
||||
*
|
||||
|
@@ -3,6 +3,8 @@ package com.accompany.scheduler.task;
|
||||
import com.accompany.business.service.room.RoomService;
|
||||
import com.accompany.business.vo.RoomVo;
|
||||
import com.accompany.scheduler.base.BaseTask;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
@@ -30,12 +32,13 @@ public class RefreshPersonTask extends BaseTask {
|
||||
public void execute(){
|
||||
log.info("定时任务:刷新人数正在执行。");
|
||||
List<RoomVo> roomList = roomService.getHomeRunningRoomList();
|
||||
for (RoomVo roomVo : roomList) {
|
||||
List<List<RoomVo>> partitionList = Lists.partition(roomList, 20);
|
||||
for (List<RoomVo> list: partitionList){
|
||||
bizExecutor.execute(()->{
|
||||
try {
|
||||
roomService.scanRoomOnline(roomVo);
|
||||
roomService.scanRoomOnline(list);
|
||||
} catch (Exception e) {
|
||||
log.error("更新房间人数失败, roomVo:{}", gson.toJson(roomVo), e);
|
||||
log.error("更新房间人数失败, list:{}", JSON.toJSONString(list), e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user