mongodb-用mysql代替roomPK
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package com.accompany.business.event.listener;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import com.accompany.business.event.RoomPKEvent;
|
||||
import com.accompany.business.message.GiftMagicMessage;
|
||||
import com.accompany.business.message.GiftMessage;
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import com.accompany.business.param.RoomPKTeam;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.service.common.JedisService;
|
||||
import com.accompany.business.service.room.RoomPKJobLoadService;
|
||||
import com.google.gson.Gson;
|
||||
@@ -21,6 +23,7 @@ import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -87,19 +90,19 @@ public class RoomPKListener implements ApplicationListener<RoomPKEvent> {
|
||||
/**
|
||||
* PK业务处理
|
||||
* @param roomPkStr
|
||||
* @param messTime
|
||||
* @param recvUid
|
||||
* @param sendUid
|
||||
* @param goldNum
|
||||
*/
|
||||
private void doPKBusiness(String roomPkStr,Long messTime,Long recvUid,Long sendUid,Long goldNum){
|
||||
private void doPKBusiness(String roomPkStr, Long messTimestamp, Long recvUid, Long sendUid, Long goldNum){
|
||||
if(BlankUtil.isBlank(roomPkStr)||ApplicationConstant.NULL_JSON_OBJECT.equalsIgnoreCase(roomPkStr)){
|
||||
return;
|
||||
}
|
||||
Date messTime = DateTimeUtil.convertMsToDate(messTimestamp);
|
||||
RoomPK roomPk = gson.fromJson(roomPkStr,RoomPK.class);
|
||||
Long beginTime = roomPk.getBeginTime();
|
||||
Long endTime = roomPk.getEndTime();
|
||||
if(beginTime!=null&&endTime!=null&&messTime!=null&&messTime.compareTo(beginTime)>=0&&messTime.compareTo(endTime)<=0) {
|
||||
Date beginTime = roomPk.getBeginTime();
|
||||
Date endTime = roomPk.getEndTime();
|
||||
if(beginTime!=null && endTime!=null && messTime!=null && messTime.compareTo(beginTime)>=0 && messTime.compareTo(endTime)<=0) {
|
||||
//在PK时间段内,统计PK数据
|
||||
calculatePKResult(roomPk,recvUid,sendUid,goldNum);
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
package com.accompany.business.event.listener;
|
||||
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import com.accompany.core.service.base.BaseService;
|
||||
import com.accompany.business.service.room.RoomPKService;
|
||||
import com.accompany.common.constant.Constant;
|
||||
@@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Component
|
||||
public class RoomPKNotifyJob extends BaseService implements Job {
|
||||
|
||||
|
@@ -0,0 +1,67 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import com.accompany.business.mybatis.typehandler.LuckySeaDrawItemListTypeHandler;
|
||||
import com.accompany.business.param.RoomPKTeam;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@TableName(value = "room_pk" , autoResultMap = true)
|
||||
public class RoomPK implements Serializable {
|
||||
/**
|
||||
* PK主键
|
||||
*/
|
||||
@TableId
|
||||
private String pkId;
|
||||
/**
|
||||
* PK的模式(1:个人模式;2.团队模式)
|
||||
*/
|
||||
private Byte pkMode;
|
||||
/**
|
||||
* 投票类型(1.按礼物价值;2.按送礼物人数)
|
||||
*/
|
||||
private Byte voteMode;
|
||||
/**
|
||||
* 创建PK的房间
|
||||
*/
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 创建PK的人
|
||||
*/
|
||||
private Long operUid;
|
||||
/**
|
||||
* PK持续时间(单位:s)
|
||||
*/
|
||||
private Long duration;
|
||||
/**
|
||||
* PK开始时间
|
||||
*/
|
||||
private Date beginTime;
|
||||
/**
|
||||
* PK结束时间(重新开始立即结束,否则为beginTime+duration)
|
||||
*/
|
||||
private Date endTime;
|
||||
/**
|
||||
* PK创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
/**
|
||||
* PK状态(0:尚未开始,1:正在进行中,2:已经结束)
|
||||
*/
|
||||
private Byte pkStatus;
|
||||
/**
|
||||
* 参与PK的队伍
|
||||
*/
|
||||
@TableField(value = "teams", typeHandler = LuckySeaDrawItemListTypeHandler.class)
|
||||
private List<RoomPKTeam> teams;
|
||||
/**
|
||||
* PK结果
|
||||
*/
|
||||
private Byte result;
|
||||
}
|
@@ -1,161 +0,0 @@
|
||||
package com.accompany.business.mongodb.document.room;
|
||||
|
||||
import com.accompany.business.param.RoomPKTeam;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.mongodb.core.index.Indexed;
|
||||
import org.springframework.data.mongodb.core.mapping.Document;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yangming
|
||||
* @date 2018-11-07
|
||||
* @description 聊天室类型消息体
|
||||
*
|
||||
*/
|
||||
@Document(collection = "room_pk")
|
||||
public class RoomPK implements Serializable {
|
||||
/**
|
||||
* PK主键
|
||||
*/
|
||||
@Id
|
||||
private String pkId;
|
||||
/**
|
||||
* PK的模式(1:个人模式;2.团队模式)
|
||||
*/
|
||||
private Byte pkMode;
|
||||
/**
|
||||
* 投票类型(1.按礼物价值;2.按送礼物人数)
|
||||
*/
|
||||
private Byte voteMode;
|
||||
/**
|
||||
* 创建PK的房间
|
||||
*/
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 创建PK的人
|
||||
*/
|
||||
private Long operUid;
|
||||
/**
|
||||
* PK持续时间(单位:s)
|
||||
*/
|
||||
private Long duration;
|
||||
/**
|
||||
* PK开始时间
|
||||
*/
|
||||
private Long beginTime;
|
||||
/**
|
||||
* PK结束时间(重新开始立即结束,否则为beginTime+duration)
|
||||
*/
|
||||
private Long endTime;
|
||||
/**
|
||||
* PK创建时间
|
||||
*/
|
||||
@Indexed
|
||||
private Long createTime;
|
||||
/**
|
||||
* PK状态(0:尚未开始,1:正在进行中,2:已经结束)
|
||||
*/
|
||||
private Byte pkStatus;
|
||||
/**
|
||||
* 参与PK的队伍
|
||||
*/
|
||||
private List<RoomPKTeam> teams;
|
||||
/**
|
||||
* PK结果
|
||||
*/
|
||||
private Byte result;
|
||||
|
||||
public String getPkId() {
|
||||
return pkId;
|
||||
}
|
||||
|
||||
public void setPkId(String pkId) {
|
||||
this.pkId = pkId;
|
||||
}
|
||||
|
||||
public Byte getPkMode() {
|
||||
return pkMode;
|
||||
}
|
||||
|
||||
public void setPkMode(Byte pkMode) {
|
||||
this.pkMode = pkMode;
|
||||
}
|
||||
|
||||
public Byte getVoteMode() {
|
||||
return voteMode;
|
||||
}
|
||||
|
||||
public void setVoteMode(Byte voteMode) {
|
||||
this.voteMode = voteMode;
|
||||
}
|
||||
|
||||
public Long getRoomUid() {
|
||||
return roomUid;
|
||||
}
|
||||
|
||||
public void setRoomUid(Long roomUid) {
|
||||
this.roomUid = roomUid;
|
||||
}
|
||||
|
||||
public Long getOperUid() {
|
||||
return operUid;
|
||||
}
|
||||
|
||||
public void setOperUid(Long operUid) {
|
||||
this.operUid = operUid;
|
||||
}
|
||||
|
||||
public Long getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public void setDuration(Long duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
public Long getBeginTime() {
|
||||
return beginTime;
|
||||
}
|
||||
|
||||
public void setBeginTime(Long beginTime) {
|
||||
this.beginTime = beginTime;
|
||||
}
|
||||
|
||||
public Long getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
|
||||
public void setEndTime(Long endTime) {
|
||||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
public Long getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Long createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public Byte getPkStatus() { return pkStatus; }
|
||||
|
||||
public void setPkStatus(Byte pkStatus) { this.pkStatus = pkStatus; }
|
||||
|
||||
public List<RoomPKTeam> getTeams() {
|
||||
return teams;
|
||||
}
|
||||
|
||||
public void setTeams(List<RoomPKTeam> teams) {
|
||||
this.teams = teams;
|
||||
}
|
||||
|
||||
public Byte getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(Byte result) {
|
||||
this.result = result;
|
||||
}
|
||||
}
|
@@ -1,61 +0,0 @@
|
||||
package com.accompany.business.mongodb.room;
|
||||
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yangming
|
||||
* @date 2018-11-14
|
||||
* @description mongodb
|
||||
*/
|
||||
@Component
|
||||
public class RoomPKDAO {
|
||||
|
||||
private static transient final Logger logger = LoggerFactory.getLogger(RoomPKDAO.class);
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
/**
|
||||
* 插入(存在则不处理,不存在则插入)
|
||||
* @param data
|
||||
*/
|
||||
public void insert(RoomPK data){
|
||||
mongoTemplate.insert(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存(存在则更新,不存在则插入)
|
||||
* @param data
|
||||
*/
|
||||
public void save(RoomPK data) {
|
||||
mongoTemplate.save(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID查询
|
||||
*/
|
||||
public RoomPK findById(String pkId){ return mongoTemplate.findById(pkId,RoomPK.class);}
|
||||
/**
|
||||
* 根据查询条件查询
|
||||
* @param query
|
||||
*/
|
||||
public List<RoomPK> findByQuery(Query query){
|
||||
return mongoTemplate.find(query, RoomPK.class);
|
||||
}
|
||||
/**
|
||||
* 根据查询条件查询记录数
|
||||
* @param query
|
||||
* @return
|
||||
*/
|
||||
public long count(Query query){
|
||||
return mongoTemplate.count(query, RoomPK.class);
|
||||
}
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.accompany.business.mybatis.typehandler;
|
||||
|
||||
import com.accompany.business.param.RoomPKTeam;
|
||||
import com.accompany.core.mybatis.typehandler.ListTypeHandler;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by 恒仔 on 2023/3/5.
|
||||
*/
|
||||
public class RoomPkTeamListTypeHandler extends ListTypeHandler<RoomPKTeam> {
|
||||
// 将ListTypeHandler<T>(T为任意对象),具体为特定的对象String
|
||||
@Override
|
||||
protected TypeReference<List<RoomPKTeam>> specificType() {
|
||||
return new TypeReference<List<RoomPKTeam>>() {};
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RoomPkMapper extends BaseMapper<RoomPK> {
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.event.listener.RoomPKNotifyJob;
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import org.quartz.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -22,15 +22,15 @@ public class RoomPKJobLoadService {
|
||||
public void loadRoomPKTaskJob(RoomPK roomPK){
|
||||
try {
|
||||
SimpleDateFormat format = new SimpleDateFormat(CRON_FORMAT);
|
||||
Date date = new Date(roomPK.getEndTime());
|
||||
Date now = new Date();
|
||||
//已经结束的任务不处理
|
||||
if (date.getTime() < System.currentTimeMillis()){
|
||||
if (now.after(roomPK.getEndTime())){
|
||||
return ;
|
||||
}
|
||||
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(roomPK.getPkId());
|
||||
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
||||
String taskCron = format.format(date);
|
||||
String taskCron = format.format(roomPK.getEndTime());
|
||||
if (trigger == null) {
|
||||
JobDetail jobDetail = JobBuilder.newJob(RoomPKNotifyJob.class).withIdentity(roomPK.getPkId()).build();
|
||||
jobDetail.getJobDataMap().put("roomPkNotifyJob", roomPK);
|
||||
@@ -39,7 +39,7 @@ public class RoomPKJobLoadService {
|
||||
scheduler.scheduleJob(jobDetail, trigger);
|
||||
} else {
|
||||
//已经创建了定时任务,判断PK是否提前结束
|
||||
if (date.getTime() <= System.currentTimeMillis()){
|
||||
if (now.compareTo(roomPK.getEndTime()) >= 0){
|
||||
//提前结束,禁用定时任务
|
||||
scheduler.unscheduleJob(trigger.getKey());
|
||||
}
|
||||
|
@@ -2,8 +2,8 @@ package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.event.RoomPKEvent;
|
||||
import com.accompany.business.model.redis.RoomMic;
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import com.accompany.business.mongodb.room.RoomPKDAO;
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import com.accompany.business.mybatismapper.room.RoomPkMapper;
|
||||
import com.accompany.business.param.QueueMicroParam;
|
||||
import com.accompany.business.param.RoomPKTeam;
|
||||
import com.accompany.business.service.ErBanNetEaseService;
|
||||
@@ -19,12 +19,15 @@ import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.netease.neteaseacc.result.RoomRet;
|
||||
import com.accompany.common.redis.RedisKey;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.common.utils.UUIDUitl;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Room;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.core.service.base.BaseService;
|
||||
import com.accompany.core.util.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.util.concurrent.RateLimiter;
|
||||
@@ -55,7 +58,7 @@ public class RoomPKService extends BaseService {
|
||||
|
||||
private RateLimiter roomQueueLimiter = RateLimiter.create(8);
|
||||
@Autowired
|
||||
private RoomPKDAO roomPkDAO;
|
||||
private RoomPkMapper roomPkMapper;
|
||||
@Autowired
|
||||
private RoomService roomService;
|
||||
@Autowired
|
||||
@@ -75,7 +78,6 @@ public class RoomPKService extends BaseService {
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public RoomRet updateRoomPkInfo(Long roomUid, Long operUid, Boolean isOpenPk) throws Exception{
|
||||
|
||||
if(!roomQueueLimiter.tryAcquire(1, TimeUnit.SECONDS)){
|
||||
throw new ServiceException(BusiStatus.SERVER_BUSY);
|
||||
}
|
||||
@@ -136,7 +138,7 @@ public class RoomPKService extends BaseService {
|
||||
* @param duration
|
||||
* @return
|
||||
*/
|
||||
public RoomPK createPkAct(Long roomUid, Long operUid, Byte PkMode, Byte voteMode, Long duration) throws Exception{
|
||||
public RoomPK createPkAct(Long roomUid, Long operUid, Byte PkMode, Byte voteMode, Long duration) {
|
||||
Integer second = forceFinish(roomUid);
|
||||
RoomPK roomPk = new RoomPK();
|
||||
roomPk.setPkId(UUIDUitl.get());
|
||||
@@ -146,8 +148,8 @@ public class RoomPKService extends BaseService {
|
||||
roomPk.setPkMode(PkMode);
|
||||
roomPk.setVoteMode(voteMode);
|
||||
roomPk.setDuration(duration);
|
||||
roomPk.setCreateTime(System.currentTimeMillis());
|
||||
roomPkDAO.save(roomPk);
|
||||
roomPk.setCreateTime(new Date());
|
||||
roomPkMapper.insert(roomPk);
|
||||
this.sendChatRoomMsg(roomUid,Constant.DefineProtocol.CUSTOM_MESS_HEAD_ROOM_PK,second,roomPk);
|
||||
return roomPk;
|
||||
}
|
||||
@@ -164,7 +166,7 @@ public class RoomPKService extends BaseService {
|
||||
if(StringUtils.isNotBlank(roomPkStr)&&!ApplicationConstant.NULL_JSON_OBJECT.equalsIgnoreCase(roomPkStr)){
|
||||
RoomPK roomInPk = gson.fromJson(roomPkStr,RoomPK.class);
|
||||
//PK还没结束
|
||||
Long endTime = System.currentTimeMillis();
|
||||
Date endTime = new Date();
|
||||
if(roomInPk.getEndTime().compareTo(endTime)> 0){
|
||||
second = Constant.DefineProtocol.CUSTOM_MESS_SUB_ROOM_PK_RE_START;
|
||||
roomInPk.setEndTime(endTime);
|
||||
@@ -311,7 +313,7 @@ public class RoomPKService extends BaseService {
|
||||
* @param userVos
|
||||
* @return
|
||||
*/
|
||||
public RoomPKRecordVo beginPKAct(Long roomUid,String pkId,List<QueueUserVo> userVos) throws Exception{
|
||||
public RoomPKRecordVo beginPKAct(Long roomUid, String pkId, List<QueueUserVo> userVos) {
|
||||
|
||||
if (userVos == null || userVos.size() <= 0) {
|
||||
throw new ServiceException(BusiStatus.PK_USER_NOT_NULL);
|
||||
@@ -329,7 +331,7 @@ public class RoomPKService extends BaseService {
|
||||
throw new ServiceException(BusiStatus.PK_TEAM_ERROR);
|
||||
}
|
||||
|
||||
RoomPK roomPk = roomPkDAO.findById(pkId);
|
||||
RoomPK roomPk = roomPkMapper.selectById(pkId);
|
||||
if (roomPk == null) {
|
||||
throw new ServiceException(BusiStatus.PK_NOT_EXIST);
|
||||
}
|
||||
@@ -337,9 +339,10 @@ public class RoomPKService extends BaseService {
|
||||
throw new ServiceException(BusiStatus.PK_HAS_EXIST);
|
||||
}
|
||||
roomPk.setPkStatus(Constant.RoomPKStatus.BEGINING);
|
||||
roomPk.setBeginTime(System.currentTimeMillis());
|
||||
Date now = new Date();
|
||||
roomPk.setBeginTime(now);
|
||||
//roomPk.getDuration()以秒为单位
|
||||
roomPk.setEndTime(System.currentTimeMillis() + roomPk.getDuration() * 1000);
|
||||
roomPk.setEndTime(DateTimeUtil.addSeconds(now, roomPk.getDuration().intValue()));
|
||||
//保红蓝两队的信息
|
||||
List<RoomPKTeam> roomPkTeams = saveRoomPkTeam(userVos);
|
||||
roomPk.setTeams(roomPkTeams);
|
||||
@@ -350,7 +353,7 @@ public class RoomPKService extends BaseService {
|
||||
}catch (Exception e){
|
||||
logger.error("publishRoomPKEvent roomPkBegin error",e);
|
||||
}
|
||||
roomPkDAO.save(roomPk);
|
||||
roomPkMapper.updateById(roomPk);
|
||||
RoomPKRecordVo pkRecordVo = buildRoomPKRecord(roomPk,false);
|
||||
sendChatRoomMsg(roomUid,Constant.DefineProtocol.CUSTOM_MESS_HEAD_ROOM_PK,Constant.DefineProtocol.CUSTOM_MESS_SUB_ROOM_PK_MODE_START,pkRecordVo);
|
||||
return pkRecordVo;
|
||||
@@ -363,14 +366,14 @@ public class RoomPKService extends BaseService {
|
||||
* @param endTime
|
||||
* @throws Exception
|
||||
*/
|
||||
public void finishPkAct(Long roomUid,String pkId,Long endTime,Byte pkStatus){
|
||||
public void finishPkAct(Long roomUid, String pkId, Date endTime, Byte pkStatus){
|
||||
String lockVal = null;
|
||||
try {
|
||||
lockVal = jedisLockService.lock(RedisKey.lock_finish_pk.getKey(pkId),5000);
|
||||
if(StringUtils.isEmpty(lockVal)){
|
||||
throw new ServiceException(BusiStatus.SERVER_BUSY);
|
||||
}
|
||||
RoomPK roomPk = roomPkDAO.findById(pkId);
|
||||
RoomPK roomPk = roomPkMapper.selectById(pkId);
|
||||
if (roomPk == null) {
|
||||
throw new ServiceException(BusiStatus.PK_NOT_EXIST);
|
||||
}
|
||||
@@ -382,7 +385,7 @@ public class RoomPKService extends BaseService {
|
||||
RoomPKRecordVo recordVo = buildRoomPKRecord(roomPk, true);
|
||||
//发送消息给服务端
|
||||
sendChatRoomMsg(roomUid, Constant.DefineProtocol.CUSTOM_MESS_HEAD_ROOM_PK, Constant.DefineProtocol.CUSTOM_MESS_SUB_ROOM_PK_RESULT, recordVo);
|
||||
roomPkDAO.save(roomPk);
|
||||
roomPkMapper.updateById(roomPk);
|
||||
//清理无用的redisKey
|
||||
jedisService.hdel(RedisKey.room_pk_ing.getKey(), roomUid.toString());
|
||||
cleanRedisKey(pkId);
|
||||
@@ -397,7 +400,7 @@ public class RoomPKService extends BaseService {
|
||||
* 统计PK数据(礼物)
|
||||
* @param roomPk
|
||||
*/
|
||||
private RoomPK completeRoomPK(RoomPK roomPk, Long endTime) {
|
||||
private RoomPK completeRoomPK(RoomPK roomPk, Date endTime) {
|
||||
switch (roomPk.getVoteMode()) {
|
||||
case Constant.RoomPKVoteType.GIFT:
|
||||
roomPk = completeRoomPKAsGift(roomPk);
|
||||
@@ -530,7 +533,7 @@ public class RoomPKService extends BaseService {
|
||||
List<Long> blueTeamMem = Lists.newArrayList();
|
||||
List<Long> redTeamMem = Lists.newArrayList();
|
||||
for(QueueUserVo queueUserVo : userVos){
|
||||
byte type = queueUserVo.getType().byteValue();
|
||||
byte type = queueUserVo.getType();
|
||||
switch (type){
|
||||
case Constant.RoomPKTeamType.BULE_TEAM:
|
||||
blueTeamMem.add(queueUserVo.getUid());
|
||||
@@ -569,27 +572,27 @@ public class RoomPKService extends BaseService {
|
||||
*/
|
||||
public RoomPKRecordVo getPkInRoom(Long roomUid){
|
||||
//查询最新一条的PK模式
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("roomUid").is(roomUid))
|
||||
.with(Sort.by(Sort.Direction.DESC, "createTime"));
|
||||
query.skip(0).limit(1);
|
||||
List<RoomPK> list = roomPkDAO.findByQuery(query);
|
||||
QueryWrapper<RoomPK> queryWrapper = Wrappers.query();
|
||||
queryWrapper.lambda().eq(RoomPK::getRoomUid, roomUid).orderByDesc(RoomPK::getCreateTime);
|
||||
queryWrapper.last("limit 1");
|
||||
List<RoomPK> list = roomPkMapper.selectList(queryWrapper);
|
||||
|
||||
if(list==null||list.size()<=0){
|
||||
return new RoomPKRecordVo();
|
||||
}
|
||||
Date now = new Date();
|
||||
RoomPK roomPk = list.get(0);
|
||||
//pk中,需要展示当前队伍的分数
|
||||
if(roomPk.getPkStatus()==Constant.RoomPKStatus.BEGINING){
|
||||
roomPk = completeRoomPK(roomPk,roomPk.getEndTime());
|
||||
if(System.currentTimeMillis()>roomPk.getEndTime()){
|
||||
if(now.after(roomPk.getEndTime())){
|
||||
roomPk.setPkStatus(Constant.RoomPKStatus.FINISH);
|
||||
roomPkDAO.save(roomPk);
|
||||
roomPkMapper.updateById(roomPk);
|
||||
}
|
||||
}
|
||||
RoomPKRecordVo roomPKRecordVo = buildRoomPKRecord(roomPk,true);
|
||||
if(roomPk.getPkStatus()==Constant.RoomPKStatus.BEGINING
|
||||
&&Constant.RoomPKVoteType.PERSON==roomPk.getVoteMode().byteValue()){
|
||||
&&Constant.RoomPKVoteType.PERSON == roomPk.getVoteMode()){
|
||||
roomPKRecordVo = setSendGiftUids(roomPKRecordVo);
|
||||
}
|
||||
return roomPKRecordVo;
|
||||
@@ -603,16 +606,19 @@ public class RoomPKService extends BaseService {
|
||||
* @return
|
||||
*/
|
||||
public RoomPKRecordPageVo getRoomPkRecord(Long roomUid, Integer page, Integer pageSize){
|
||||
Integer start = (page - 1) * pageSize;
|
||||
Query query = new Query();
|
||||
int start = (page - 1) * pageSize;
|
||||
|
||||
List<Byte> pkStatus = Lists.newArrayList();
|
||||
pkStatus.add(Constant.RoomPKStatus.FINISH);
|
||||
pkStatus.add(Constant.RoomPKStatus.FORCE_FINISH);
|
||||
query.addCriteria(Criteria.where("roomUid").is(roomUid).and("endTime").lt(System.currentTimeMillis()).and("pkStatus").in(pkStatus))
|
||||
.with(Sort.by(Sort.Direction.DESC, "createTime"));
|
||||
long count = roomPkDAO.count(query);
|
||||
query.skip(start).limit(pageSize);
|
||||
List<RoomPK> list = roomPkDAO.findByQuery(query);
|
||||
|
||||
Date now = new Date();
|
||||
QueryWrapper<RoomPK> queryWrapper = Wrappers.query();
|
||||
queryWrapper.lambda().eq(RoomPK::getRoomUid, roomUid).lt(RoomPK::getEndTime, now).in(RoomPK::getPkStatus, pkStatus)
|
||||
.orderByDesc(RoomPK::getCreateTime);
|
||||
long count = roomPkMapper.selectCount(queryWrapper);
|
||||
queryWrapper.last("limit " + start + "," + pageSize);
|
||||
List<RoomPK> list = roomPkMapper.selectList(queryWrapper);
|
||||
return convertToRoomPkRecordPageVo(list,count);
|
||||
}
|
||||
|
||||
@@ -814,21 +820,21 @@ public class RoomPKService extends BaseService {
|
||||
* @return
|
||||
*/
|
||||
public RoomPKRecordVo getPKResult(String pkId) {
|
||||
RoomPK roomPK = roomPkDAO.findById(pkId);
|
||||
RoomPK roomPK = roomPkMapper.selectById(pkId);
|
||||
if (roomPK == null) {
|
||||
throw new ServiceException(BusiStatus.PK_NOT_EXIST);
|
||||
}
|
||||
Date now = new Date();
|
||||
//如果发现PK已经过了结束时间但是还未结束
|
||||
if(roomPK.getPkStatus()==Constant.RoomPKStatus.BEGINING&&
|
||||
System.currentTimeMillis()>roomPK.getBeginTime()){
|
||||
if(roomPK.getPkStatus() == Constant.RoomPKStatus.BEGINING
|
||||
&& now.after(roomPK.getBeginTime())){
|
||||
roomPK.setPkStatus(Constant.RoomPKStatus.FINISH);
|
||||
roomPK = completeRoomPK(roomPK,roomPK.getEndTime());
|
||||
roomPkDAO.save(roomPK);
|
||||
roomPkMapper.updateById(roomPK);
|
||||
//清理无用的redisKey
|
||||
jedisService.hdel(RedisKey.room_pk_ing.getKey(),roomPK.getRoomUid().toString());
|
||||
cleanRedisKey(pkId);
|
||||
}
|
||||
RoomPKRecordVo roomPKRecordVo = buildRoomPKRecord(roomPK,true);
|
||||
return roomPKRecordVo;
|
||||
return buildRoomPKRecord(roomPK,true);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.accompany.business.mybatismapper.room.RoomPkMapper">
|
||||
|
||||
|
||||
</mapper>
|
@@ -1,7 +1,7 @@
|
||||
package com.accompany.business.controller.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomPK;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.business.mongodb.document.room.RoomPK;
|
||||
import com.accompany.business.service.room.RoomPKService;
|
||||
import com.accompany.core.util.StringUtils;
|
||||
import com.accompany.business.vo.room.PkMircoQueueVo;
|
||||
|
Reference in New Issue
Block a user