重载房间等级经验
This commit is contained in:
@@ -19,15 +19,20 @@ public class RoomLevelDayExp implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 房间uid
|
||||
*/
|
||||
@TableId(value = "room_uid", type = IdType.NONE)
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 房间金币流水
|
||||
*/
|
||||
private BigDecimal roomVal;
|
||||
/**
|
||||
* 统计时间(每天统计一次的分区统计)
|
||||
*/
|
||||
private String statDate;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
@@ -80,10 +80,10 @@ public class RankListener implements ApplicationListener<GiftMessageEvent> {
|
||||
boolean isFreeGift = Constant.GiftConsumeType.ROOM_FREE_GIFT == gift.getConsumeType();
|
||||
Long giftGoldNum = isFreeGift ? Math.abs(gift.getGoldPrice() * giftNum) : goldNum;
|
||||
roomRankService.updateRoomRank(roomUid, sendUid, recvUid, giftGoldNum.doubleValue(), date, isFreeGift, partitionId);
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, giftGoldNum.doubleValue());
|
||||
//发送榜单更新
|
||||
if (roomUid != null) {
|
||||
RoomVo roomVo = roomService.queryRoomByUid(roomUid, roomUid);
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, giftGoldNum.doubleValue(), roomVo);
|
||||
if (roomVo != null) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("serialValue", roomVo.getSerialValue());
|
||||
|
@@ -54,10 +54,10 @@ public class SuperLuckyGiftSendListener implements ApplicationListener<SuperLuck
|
||||
try {
|
||||
rankService.updateAllRank(sendUid, recvUid, roomUid, totalDiamondNum, messTime.getTime(), partitionId);
|
||||
roomRankService.updateRoomRank(roomUid, sendUid, recvUid, totalDiamondNum, messTime, Boolean.FALSE, partitionId);
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, totalDiamondNum);
|
||||
//发送榜单更新
|
||||
if (roomUid != null) {
|
||||
RoomVo roomVo = roomService.queryRoomByUid(roomUid, roomUid);
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, totalDiamondNum, roomVo);
|
||||
if (roomVo != null) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("serialValue", roomVo.getSerialValue());
|
||||
|
@@ -2,6 +2,9 @@ package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomLevelDayExp;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 房间等级表 Mapper 接口
|
||||
@@ -11,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
public interface RoomLevelDayExpMapper extends BaseMapper<RoomLevelDayExp> {
|
||||
|
||||
List<RoomLevelDayExp> loadDayDataByBill(@Param("dateStr") String dateStr);
|
||||
|
||||
List<RoomLevelDayExp> statRoomTotalVal(@Param("roomUids") List<Long> roomUids);
|
||||
}
|
||||
|
@@ -5,6 +5,8 @@ import com.accompany.business.model.room.RoomLevelInfo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.redisson.api.RScoredSortedSet;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 房间等级表 服务类
|
||||
*
|
||||
@@ -13,4 +15,12 @@ import org.redisson.api.RScoredSortedSet;
|
||||
*/
|
||||
public interface RoomLevelDayExpService extends IService<RoomLevelDayExp> {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param dateStr 账单的日期后缀 eg: 20241225
|
||||
*/
|
||||
void loadDayDataByBill(String dateStr);
|
||||
|
||||
List<RoomLevelDayExp> loadRoomVal(List<Long> roomUid);
|
||||
}
|
||||
|
@@ -1,10 +1,12 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.constant.RoomConstant;
|
||||
import com.accompany.business.model.room.RoomLevelDayExp;
|
||||
import com.accompany.business.model.room.RoomLevelInfo;
|
||||
import com.accompany.business.model.room.RoomMicDress;
|
||||
import com.accompany.business.service.SendSysMsgService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.vo.RoomVo;
|
||||
import com.accompany.business.vo.room.RoomLevelVo;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.netease.ErBanNetEaseService;
|
||||
@@ -52,11 +54,14 @@ public class RoomLevelService {
|
||||
@Autowired
|
||||
private SendSysMsgService sendSysMsgService;
|
||||
|
||||
@Autowired
|
||||
private RoomLevelDayExpService roomLevelDayExpService;
|
||||
|
||||
public RScoredSortedSet<Long> roomExpCache(Integer partitionId) {
|
||||
return redissonClient.getScoredSortedSet(RoomConstant.RedisKey.room_val.getKey(partitionId), LongCodec.INSTANCE);
|
||||
}
|
||||
|
||||
public void updateRoomLevelExp(Integer partitionId, Long roomUid, Double exp) {
|
||||
public void updateRoomLevelExp(Integer partitionId, Long roomUid, Double exp, RoomVo roomVo) {
|
||||
if (roomUid == null) {
|
||||
return;
|
||||
}
|
||||
@@ -68,10 +73,10 @@ public class RoomLevelService {
|
||||
Map.Entry<BigDecimal, RoomLevelInfo> lastLevelInfoEntry = levelInfoTreeMap.headMap(lastScore, true).lastEntry();
|
||||
Integer totalLevel = totalLevelInfoEntry.getValue().getLevelSeq();
|
||||
Integer lastLevel = lastLevelInfoEntry.getValue().getLevelSeq();
|
||||
if ((totalLevel - lastLevel) > 0) {
|
||||
if (totalLevel > lastLevel) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("roomLevelIcon", totalLevelInfoEntry.getValue().getLevelIcon());
|
||||
sendSysMsgService.sendSingleRoomMessage(roomUid, String.valueOf(roomUid), Constant.DefMsgType.ROOM_LEVEL, Constant.DefMsgType.ROOM_LEVEL_UP, jsonObject);
|
||||
sendSysMsgService.sendSingleRoomMessage(roomVo.getRoomId(), String.valueOf(roomUid), Constant.DefMsgType.ROOM_LEVEL, Constant.DefMsgType.ROOM_LEVEL_UP, jsonObject);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("updateRoomLevelExp:partitionId:{},roomUid:{},exp:{},e:{}", partitionId, roomUid, exp, e.getMessage(), e);
|
||||
@@ -190,4 +195,21 @@ public class RoomLevelService {
|
||||
public RBucket<String> roomMicDressCache(Integer dressType, Long roomUid) {
|
||||
return roomMicDressService.roomMicDressCache(dressType, roomUid);
|
||||
}
|
||||
|
||||
public void reloadRoomVal(List<Long> roomUids) {
|
||||
List<RoomLevelDayExp> roomLevelDayExps = roomLevelDayExpService.loadRoomVal(roomUids);
|
||||
if (CollectionUtils.isEmpty(roomLevelDayExps)) {
|
||||
return;
|
||||
}
|
||||
Map<Long, Users> usersMapByUids = usersService.getUsersMapByUids(roomUids);
|
||||
for (RoomLevelDayExp roomLevelDayExp : roomLevelDayExps) {
|
||||
Long roomUid = roomLevelDayExp.getRoomUid();
|
||||
Users users = usersMapByUids.get(roomUid);
|
||||
if (users == null) {
|
||||
continue;
|
||||
}
|
||||
roomExpCache(users.getPartitionId()).addScore(roomUid, roomLevelDayExp.getRoomVal());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,21 +1,15 @@
|
||||
package com.accompany.business.service.room.impl;
|
||||
|
||||
import com.accompany.business.constant.RoomConstant;
|
||||
import com.accompany.business.model.room.RoomLevelDayExp;
|
||||
import com.accompany.business.model.room.RoomLevelInfo;
|
||||
import com.accompany.business.mybatismapper.room.RoomLevelDayExpMapper;
|
||||
import com.accompany.business.service.room.RoomLevelDayExpService;
|
||||
import com.accompany.business.service.room.RoomLevelInfoService;
|
||||
import com.accompany.common.utils.PageUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.redisson.api.RScoredSortedSet;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.redisson.client.codec.LongCodec;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 房间等级表 服务实现类
|
||||
@@ -27,4 +21,29 @@ import java.util.TreeMap;
|
||||
public class RoomLevelDayExpServiceImpl extends ServiceImpl<RoomLevelDayExpMapper, RoomLevelDayExp> implements RoomLevelDayExpService {
|
||||
|
||||
|
||||
@Override
|
||||
public void loadDayDataByBill(String dateStr) {
|
||||
List<RoomLevelDayExp> roomLevelDayExps = baseMapper.loadDayDataByBill(dateStr);
|
||||
if (CollectionUtils.isEmpty(roomLevelDayExps)) {
|
||||
return;
|
||||
}
|
||||
Date date = new Date();
|
||||
for (RoomLevelDayExp roomLevelDayExp : roomLevelDayExps) {
|
||||
roomLevelDayExp.setStatDate(dateStr);
|
||||
roomLevelDayExp.setCreateTime(date);
|
||||
}
|
||||
int pageSize = 1000;
|
||||
for (int pageNum = 1; pageNum < 10000; pageNum++) {
|
||||
List<RoomLevelDayExp> page = PageUtil.page(roomLevelDayExps, pageNum, pageSize);
|
||||
if (CollectionUtils.isEmpty(page)) {
|
||||
break;
|
||||
}
|
||||
baseMapper.insert(page);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RoomLevelDayExp> loadRoomVal(List<Long> roomUid) {
|
||||
return baseMapper.statRoomTotalVal(roomUid);
|
||||
}
|
||||
}
|
||||
|
@@ -2,4 +2,31 @@
|
||||
<!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.RoomLevelDayExpMapper">
|
||||
|
||||
<select id="loadDayDataByBill" resultType="com.accompany.business.model.room.RoomLevelDayExp">
|
||||
SELECT
|
||||
b.room_uid roomUid,
|
||||
SUM(IF(FIND_IN_SET(b.gift_id, '16,18'), b.amount, b.gift_total_gold_num)) roomVal
|
||||
FROM
|
||||
bill_record_${dateStr} b
|
||||
LEFT JOIN users u on u.uid = b.room_uid
|
||||
left join gift g on g.gift_id = b.gift_id
|
||||
WHERE
|
||||
obj_type = 4
|
||||
AND b.room_uid != 0
|
||||
GROUP BY
|
||||
b.room_uid
|
||||
</select>
|
||||
|
||||
<select id="statRoomTotalVal" resultType="com.accompany.business.model.room.RoomLevelDayExp">
|
||||
SELECT
|
||||
room_uid roomUid,
|
||||
SUM(room_val) roomVal
|
||||
FROM
|
||||
room_level_day_exp
|
||||
where
|
||||
<foreach collection="roomUids" separator="," open="room_uid in(" item="roomUid" close=")">
|
||||
#{roomUid}
|
||||
</foreach>
|
||||
group by room_uid
|
||||
</select>
|
||||
</mapper>
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package com.accompany.business.controller.room;
|
||||
|
||||
import com.accompany.business.constant.SymbolConstants;
|
||||
import com.accompany.business.service.room.RoomLevelDayExpService;
|
||||
import com.accompany.business.service.room.RoomLevelService;
|
||||
import com.accompany.business.vo.room.RoomLevelVo;
|
||||
import com.accompany.common.annotation.Authorization;
|
||||
@@ -9,9 +11,14 @@ import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.ibatis.javassist.compiler.ast.Symbol;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID;
|
||||
|
||||
@RestController
|
||||
@@ -22,7 +29,7 @@ public class RoomLevelController {
|
||||
@Autowired
|
||||
private RoomLevelService roomLevelService;
|
||||
@Autowired
|
||||
private ErBanNetEaseService erBanNetEaseService;
|
||||
private RoomLevelDayExpService roomLevelDayExpService;
|
||||
|
||||
|
||||
@ApiImplicitParams({
|
||||
@@ -56,4 +63,22 @@ public class RoomLevelController {
|
||||
public BusiResult<Void> checkManageNum(@RequestParam Long roomUid) {
|
||||
return roomLevelService.checkManageNum(roomUid);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "统计数据", httpMethod = "GET")
|
||||
@GetMapping("/taskStatDate")
|
||||
public BusiResult<Void> checkManageNum(@RequestParam String dateStr) {
|
||||
roomLevelDayExpService.loadDayDataByBill(dateStr);
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "重新加载房间等级经验", httpMethod = "GET")
|
||||
@GetMapping("/reloadRoomVal")
|
||||
public BusiResult<Void> reloadRoomVal(@RequestParam String roomUidArr) {
|
||||
String[] split = roomUidArr.split(SymbolConstants.COMMA);
|
||||
List<Long> roomUids = Arrays.stream(split)
|
||||
.map(Long::parseLong)
|
||||
.collect(Collectors.toList());
|
||||
roomLevelService.reloadRoomVal(roomUids);
|
||||
return BusiResult.success();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,32 @@
|
||||
package com.accompany.scheduler.task.room;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.business.service.room.RoomLevelDayExpService;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RoomLevelDayExpTask {
|
||||
|
||||
@Autowired
|
||||
private RoomLevelDayExpService roomLevelDayExpService;
|
||||
|
||||
/**
|
||||
* 加载东三区的数据
|
||||
*/
|
||||
@Scheduled(cron = "0 13 4 * * ?")
|
||||
public void roomLevelDayExpTask() {
|
||||
Date date = new Date();
|
||||
String dateStr = DateUtil.format(DateUtil.offsetDay(date, -1), DatePattern.PURE_DATE_PATTERN);
|
||||
log.info("roomLevelDayExpTask start,dateStr:{},date:{}==============", dateStr, DateUtil.formatDateTime(date));
|
||||
roomLevelDayExpService.loadDayDataByBill(dateStr);
|
||||
log.info("roomLevelDayExpTask end,dateStr:{},date:{}==============", dateStr, DateUtil.formatDateTime(date));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user