房间日奖励-具体实现

This commit is contained in:
2025-09-16 21:04:54 +08:00
parent 349951a477
commit e6c3d4dd1a
10 changed files with 440 additions and 31 deletions

View File

@@ -272,6 +272,8 @@ public enum BillObjTypeEnum {
GUILD_POLICY2_SUB_GOLDS( 181, "土耳其公会结算扣除钻石", BillTypeEnum.OUT, CurrencyEnum.GOLD, BillDomainTypeEnum.GUILD_POLICY2),
ROOM_WEEK_DIAMOND_REWARD(182, "房间周奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.GUILD),
ROOM_SEND_RANK_DAY_REWARD(183, "房间爱意榜日榜贡献奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.ACTIVITY),
;
BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) {

View File

@@ -322,6 +322,9 @@ public enum I18nAlertEnum {
ROOM_WEEK_DIAMOND_REWARD_SYS("恭喜你你上周的房间ID{0} 流水达到:{1}。房间周奖励已经发放,快去看看吧~"),
GUILD_MEMBER_WEEK_LEVEL_REWARD("你获得的奖励已经发放到你的背包,快去看看吧!"),
ROOM_SEND_RANK_DAY_OWNER_REWARD_TIP("房间ID{0} 已经成功领取房主奖励"),
ROOM_SEND_RANK_DAY_USER_REWARD_TIP("房间ID{0} 已经成功领取贡献者奖励"),
;
private final String defaultStr;

View File

@@ -38,7 +38,12 @@ public class RoomDaySendRankUserRecord {
* 奖励档位ID
*/
private Long rewardId;
/**
* 奖励类型 0=房主 1=贡献
*/
private Byte type;
/**
* 用户排名
*/
@@ -57,12 +62,12 @@ public class RoomDaySendRankUserRecord {
/**
* 用户奖励金币
*/
private BigDecimal userReward;
private Long userReward;
/**
* 用户已领取奖励
*/
private BigDecimal userReceiveReward;
private Long userReceiveReward;
/**
* 领取时间

View File

@@ -1,16 +1,17 @@
package com.accompany.business.vo.room;
import com.accompany.business.common.vo.ActivityRankItemVo;
import com.accompany.business.common.vo.ActivityUserVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("房间日流水奖励首页信息")
public class RoomDaySendRankHomeVo {
public class RoomDaySendRankRewardHomeVo {
@ApiModelProperty("房间信息")
private ActivityUserVo roomInfo;
@@ -19,10 +20,10 @@ public class RoomDaySendRankHomeVo {
private RewardInfoVo rewardInfo;
@ApiModelProperty("排行榜列表")
private List<ActivityRankItemVo> rankList;
private List<RankItemVo> top10RankList;
@ApiModelProperty("我的排名信息")
private ActivityRankItemVo myRank;
private RankItemVo myRank;
@Data
@ApiModel("奖励信息")
@@ -38,12 +39,32 @@ public class RoomDaySendRankHomeVo {
private String nextLevel;
@ApiModelProperty("下一级奖励下限")
private Long nextLevelLimit;
private BigDecimal nextLevelLimit;
@ApiModelProperty("下一级总奖励")
private Long nextLevelReward;
@ApiModelProperty("前10用户瓜分奖励")
private BigDecimal topTenReward;
private Long topTenReward;
@ApiModelProperty("房主奖励")
private BigDecimal ownerReward;
private Long ownerReward;
}
@Data
@ApiModel
@NoArgsConstructor
public static class RankItemVo extends ActivityUserVo {
@ApiModelProperty("排名0=未上榜)")
private Integer ranking;
@ApiModelProperty("得分")
private BigDecimal score;
@ApiModelProperty("房主奖励")
private Long ownerReward;
@ApiModelProperty("贡献奖励")
private Long myReward;
}
}

View File

@@ -0,0 +1,16 @@
package com.accompany.business.vo.room;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("房间日流水奖励记录")
public class RoomDaySendRankRewardRecordVo {
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("奖励")
private Long reward;
}

View File

@@ -1,33 +1,60 @@
package com.accompany.business.service.room;
import com.accompany.business.common.vo.ActivityUserVo;
import com.accompany.business.model.room.RoomDaySendRankReward;
import com.accompany.business.model.room.RoomDaySendRankRoomRecord;
import com.accompany.business.model.room.RoomDaySendRankUserRecord;
import com.accompany.business.service.SendSysMsgService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.rank.room.RoomDayRankService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.room.RoomDaySendRankHomeVo;
import com.accompany.business.vo.room.RoomDaySendRankRewardHomeVo;
import com.accompany.business.vo.room.RoomDaySendRankRewardRecordVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.enums.RedisZSetEnum;
import com.accompany.common.model.PageReq;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.base.SpringContextHolder;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Room;
import com.accompany.core.model.Users;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.accompany.core.util.PartitionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.*;
@Component
public class RoomDaySendRankRewardManager {
@Autowired
private UsersService usersService;
@Autowired
private RoomService roomService;
@Autowired
private RoomDaySendRankRewardService roomDaySendRankRewardService;
private RoomDayRankService roomDayRankService;
@Autowired
private RoomDaySendRankRoomRecordService roomDaySendRankRoomRecordService;
private RoomDaySendRankRewardService rewardService;
@Autowired
private RoomDaySendRankUserRecordService roomDaySendRankUserRecordService;
private RoomDaySendRankRoomRecordService roomRecordService;
@Autowired
private UsersService usersService;
private RoomDaySendRankUserRecordService userRecordService;
@Autowired
private UserPurseService userPurseService;
@Autowired
private SendSysMsgService sendSysMsgService;
/**
* 获取房间日流水奖励首页信息
@@ -37,8 +64,10 @@ public class RoomDaySendRankRewardManager {
* @param isToday 是否今天
* @return 首页信息VO
*/
public RoomDaySendRankHomeVo getHomeInfo(Long uid, Long roomUid, Boolean isToday) {
public RoomDaySendRankRewardHomeVo getHomeInfo(Long uid, Long roomUid, Boolean isToday) {
// 实现获取首页信息逻辑
RoomDaySendRankRewardHomeVo vo = new RoomDaySendRankRewardHomeVo();
// 1. 获取房间信息使用ActivityUserVo
Users u = usersService.getNotNullUsersByUid(uid);
@@ -55,16 +84,234 @@ public class RoomDaySendRankRewardManager {
throw new ServiceException(BusiStatus.PARTITION_ERROR);
}
Users owner = usersService.getNotNullUsersByUid(room.getUid());
ActivityUserVo roomInfo = new ActivityUserVo(room.getUid(), owner.getErbanNo(), room.getTitle(), room.getAvatar());
vo.setRoomInfo(roomInfo);
// 2. 计算奖励信息
Date todayTime = new Date();
Date statTime = Boolean.TRUE.equals(isToday)? todayTime: DateTimeUtil.addDays(todayTime, -1);
// 2. 计算奖励信息
// 3. 获取排行榜列表前3名使用ActivityRankItemVo
Set<Map<String, Object>> rankList = roomDayRankService.getRank(statTime, roomUid, 1L, -1L, room.getPartitionId());
BigDecimal roomSerialValue = rankList.stream().map(entry-> new BigDecimal(entry.get(RedisZSetEnum.score.name()).toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
RoomDaySendRankRewardHomeVo.RewardInfoVo rewardInfoVo = rewardService.buildBySerialValue(roomSerialValue);
vo.setRewardInfo(rewardInfoVo);
// 3. 获取排行榜列表前10名使用ActivityRankItemVo
List<Map<String, Object>> top10RankList = rankList.stream().limit(10L).toList();
List<RoomDaySendRankRewardHomeVo.RankItemVo> top10RankVoList = buildTop10RankList(top10RankList, rewardInfoVo);
vo.setTop10RankList(top10RankVoList);
// 4. 获取我的排名信息使用ActivityRankItemVo
// 5. 组装返回结果
return new RoomDaySendRankHomeVo();
RoomDaySendRankRewardHomeVo.RankItemVo myRank = buildMyRank(u, roomUid, top10RankList, rewardInfoVo);
vo.setMyRank(myRank);
return vo;
}
private List<RoomDaySendRankRewardHomeVo.RankItemVo> buildTop10RankList(List<Map<String, Object>> top10RankList, RoomDaySendRankRewardHomeVo.RewardInfoVo rewardInfoVo) {
if (CollectionUtils.isEmpty(top10RankList)){
return Collections.emptyList();
}
List<Long> uidList = top10RankList.stream().map(entry-> Long.parseLong(entry.get(RedisZSetEnum.member.name()).toString())).toList();
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uidList);
BigDecimal top10SerialValue = top10RankList.stream().map(entry-> new BigDecimal(entry.get(RedisZSetEnum.score.name()).toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
int rank = 1;
List<RoomDaySendRankRewardHomeVo.RankItemVo> voList = new ArrayList<>();
for (Map<String, Object> entry: top10RankList){
Long uid = Long.parseLong(entry.get(RedisZSetEnum.member.name()).toString());
BigDecimal score = new BigDecimal(entry.get(RedisZSetEnum.score.name()).toString());
RoomDaySendRankRewardHomeVo.RankItemVo itemVo = new RoomDaySendRankRewardHomeVo.RankItemVo();
itemVo.setRanking(rank++);
itemVo.setScore(score);
itemVo.setUid(uid);
if (rewardInfoVo.getTopTenReward() > 0L){
BigDecimal ratio = score.divide(top10SerialValue, 2, RoundingMode.HALF_UP);
long reward = ratio.multiply(BigDecimal.valueOf(rewardInfoVo.getTopTenReward())).longValue();
itemVo.setMyReward(reward);
} else {
itemVo.setMyReward(0L);
}
voList.add(itemVo);
Users u = usersMap.get(uid);
if (null == u){
continue;
}
itemVo.setErbanNo(u.getErbanNo());
itemVo.setNick(u.getNick());
itemVo.setAvatar(u.getAvatar());
}
return voList;
}
private RoomDaySendRankRewardHomeVo.RankItemVo buildMyRank(Users u, Long roomUid, List<Map<String, Object>> top10RankList,
RoomDaySendRankRewardHomeVo.RewardInfoVo rewardInfoVo) {
RoomDaySendRankRewardHomeVo.RankItemVo vo = new RoomDaySendRankRewardHomeVo.RankItemVo();
vo.setUid(u.getUid());
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
vo.setAvatar(u.getAvatar());
vo.setRanking(0);
//vo.setOwnerReward(0L);
vo.setMyReward(0L);
BigDecimal top10SerialValue = BigDecimal.ZERO;
int rank = 1;
for (Map<String, Object> entry: top10RankList){
Long uid = Long.parseLong(entry.get(RedisZSetEnum.member.name()).toString());
BigDecimal score = new BigDecimal(entry.get(RedisZSetEnum.score.name()).toString());
if (uid.equals(u.getUid())){
vo.setRanking(rank);
vo.setScore(score);
break;
}
rank++;
top10SerialValue = top10SerialValue.add(score);
}
if (u.getUid().equals(roomUid)){
vo.setOwnerReward(rewardInfoVo.getOwnerReward());
}
if (vo.getRanking() > 0 && rewardInfoVo.getTopTenReward() > 0L){
BigDecimal ratio = vo.getScore().divide(top10SerialValue, 2, RoundingMode.HALF_DOWN);
long myReward = BigDecimal.valueOf(rewardInfoVo.getTopTenReward()).divide(ratio, 0, RoundingMode.HALF_DOWN).longValue();
vo.setMyReward(myReward);
}
return vo;
}
public Long receiveReward(Long uid, Long roomUid, Boolean isRoomOwnerReward) {
Users u = usersService.getNotNullUsersByUid(uid);
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(u.getPartitionId());
if (!PartitionEnum.ARAB.equals(partitionEnum)){
throw new ServiceException(BusiStatus.PARTITION_ERROR);
}
Room room = roomService.getRoomByUid(roomUid);
if (null == room){
throw new ServiceException(BusiStatus.PARAMERROR);
} else if (!PartitionUtil.equalsPartition(u.getPartitionId(), room.getPartitionId())){
throw new ServiceException(BusiStatus.PARTITION_ERROR);
}
Users owner = usersService.getNotNullUsersByUid(room.getUid());
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(partitionEnum.getZoneId());
String yesterdayStr = zdt.format(DateTimeUtil.dateFormatter);
Byte rewardType = isRoomOwnerReward? Constant.status.delete: Constant.status.valid;
RoomDaySendRankUserRecord userRecord = userRecordService.lambdaQuery()
.eq(RoomDaySendRankUserRecord::getRoomUid, roomUid)
.eq(RoomDaySendRankUserRecord::getPartitionId, u.getPartitionId())
.eq(RoomDaySendRankUserRecord::getUid, uid)
.eq(RoomDaySendRankUserRecord::getStatDate, yesterdayStr)
.eq(RoomDaySendRankUserRecord::getType, rewardType)
.one();
if (null == userRecord){
throw new ServiceException(BusiStatus.PARAMERROR);
} else if (userRecord.getUserReward() > 0L && userRecord.getUserReceiveReward() > 0L) {
throw new ServiceException(BusiStatus.REQUEST_FAST);
}
Date now = new Date();
boolean updateSuccess = userRecordService.lambdaUpdate()
.set(RoomDaySendRankUserRecord::getUserReceiveReward, userRecord.getUserReward())
.set(RoomDaySendRankUserRecord::getUpdateTime, now)
.eq(RoomDaySendRankUserRecord::getRoomUid, roomUid)
.eq(RoomDaySendRankUserRecord::getPartitionId, u.getPartitionId())
.eq(RoomDaySendRankUserRecord::getUid, uid)
.eq(RoomDaySendRankUserRecord::getStatDate, yesterdayStr)
.eq(RoomDaySendRankUserRecord::getType, rewardType)
.eq(RoomDaySendRankUserRecord::getUserReceiveReward, 0L)
.update();
if (!updateSuccess){
throw new ServiceException(BusiStatus.REQUEST_FAST);
}
userPurseService.addDiamond(uid, userRecord.getUserReward().doubleValue(), BillObjTypeEnum.ROOM_SEND_RANK_DAY_REWARD);
if (!isRoomOwnerReward){
return userRecord.getUserReward();
}
roomRecordService.lambdaUpdate()
.set(RoomDaySendRankRoomRecord::getOwnerReward, userRecord.getUserReward())
.set(RoomDaySendRankRoomRecord::getUpdateTime, now)
.eq(RoomDaySendRankRoomRecord::getStatDate, yesterdayStr)
.eq(RoomDaySendRankRoomRecord::getRoomUid, roomUid)
.eq(RoomDaySendRankRoomRecord::getPartitionId, u.getPartitionId())
.eq(RoomDaySendRankRoomRecord::getOwnerReceiveReward, 0L)
.update();
SpringContextHolder.getBean(RoomDaySendRankRewardManager.class).sendTip(uid, u.getPartitionId(), owner.getErbanNo(), isRoomOwnerReward);
return userRecord.getUserReward();
}
@Async
public void sendTip(Long uid, Integer partitionId, Long roomErbanNo, Boolean isRoomOwnerReward) {
I18nAlertEnum i18nAlertEnum = isRoomOwnerReward? I18nAlertEnum.ROOM_SEND_RANK_DAY_OWNER_REWARD_TIP: I18nAlertEnum.ROOM_SEND_RANK_DAY_USER_REWARD_TIP;
String tip = I18NMessageSourceUtil.getMessage(i18nAlertEnum, new Object[]{roomErbanNo}, partitionId);
sendSysMsgService.sendPersonTextMsg(uid, tip);
}
public Page<RoomDaySendRankRewardRecordVo> pageRecord(Long uid, Long roomUid, PageReq pageReq) {
Users u = usersService.getNotNullUsersByUid(uid);
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(u.getPartitionId());
if (!PartitionEnum.ARAB.equals(partitionEnum)){
throw new ServiceException(BusiStatus.PARTITION_ERROR);
}
Room room = roomService.getRoomByUid(roomUid);
if (null == room){
throw new ServiceException(BusiStatus.PARAMERROR);
} else if (!PartitionUtil.equalsPartition(u.getPartitionId(), room.getPartitionId())){
throw new ServiceException(BusiStatus.PARTITION_ERROR);
}
Page<RoomDaySendRankRewardRecordVo> voPage = new Page<>(pageReq.getPage(), pageReq.getPageSize());
Page<RoomDaySendRankUserRecord> doPage = new Page<>(pageReq.getPage(), pageReq.getPageSize());
userRecordService.page(doPage, new LambdaQueryWrapper<RoomDaySendRankUserRecord>()
.eq(RoomDaySendRankUserRecord::getRoomUid, roomUid)
.eq(RoomDaySendRankUserRecord::getPartitionId, u.getPartitionId())
.eq(RoomDaySendRankUserRecord::getUid, uid)
.gt(RoomDaySendRankUserRecord::getUserReceiveReward, 0L)
.orderByDesc(RoomDaySendRankUserRecord::getUpdateTime));
if (CollectionUtils.isEmpty(doPage.getRecords())){
return voPage;
}
List<RoomDaySendRankRewardRecordVo> voList = doPage.getRecords().stream().map(record -> {
RoomDaySendRankRewardRecordVo vo = new RoomDaySendRankRewardRecordVo();
vo.setCreateTime(DateTimeUtil.convertDateTime(DateTimeUtil.withZoneSameInstant(record.getUpdateTime(), partitionEnum.getZoneId())));
vo.setReward(record.getUserReward());
return vo;
}).toList();
voPage.setRecords(voList);
voPage.setTotal(doPage.getTotal());
return voPage;
}
/**
* 计算每日奖励(供定时任务调用)
*/
@@ -72,4 +319,5 @@ public class RoomDaySendRankRewardManager {
// 具体业务逻辑由您手动实现
// 这里只提供接口供定时任务调用
}
}

View File

@@ -1,9 +1,65 @@
package com.accompany.business.service.room;
import com.accompany.business.model.room.RoomDaySendRankReward;
import com.accompany.business.mybatismapper.room.RoomDaySendRankRewardMapper;
import com.accompany.business.vo.room.RoomDaySendRankRewardHomeVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 房间每日发送排行榜奖励业务逻辑处理类。
* 提供对房间排行榜奖励记录的数据库操作及自定义业务逻辑。
* </p>
*
* @author YourName
* @since 2025-05-13
*/
@Service
public class RoomDaySendRankRewardService {
public class RoomDaySendRankRewardService extends ServiceImpl<RoomDaySendRankRewardMapper, RoomDaySendRankReward> {
/**
* <p>
* 构造方法由 Spring 自动注入 Mapper。
* </p>
*/
// 根据业务需要添加自定义方法
public RoomDaySendRankRewardHomeVo.RewardInfoVo buildBySerialValue(BigDecimal roomSerialValue) {
RoomDaySendRankRewardHomeVo.RewardInfoVo vo = new RoomDaySendRankRewardHomeVo.RewardInfoVo();
vo.setSerialValue(roomSerialValue);
vo.setCurLevel("-");
vo.setNextLevel("-");
vo.setNextLevelLimit(BigDecimal.ZERO);
vo.setNextLevelReward(0L);
vo.setOwnerReward(0L);
vo.setTopTenReward(0L);
List<RoomDaySendRankReward> rewardList = lambdaQuery().orderByAsc(RoomDaySendRankReward::getSerialValue).list();
if (CollectionUtils.isEmpty(rewardList)){
return vo;
}
List<RoomDaySendRankReward> levelList = rewardList.stream().filter(reward -> roomSerialValue.compareTo(reward.getSerialValue()) >= 0).limit(2).toList();
if (CollectionUtils.isEmpty(levelList)){
RoomDaySendRankReward nextLevel = rewardList.get(0);
vo.setNextLevel(nextLevel.getName());
vo.setNextLevelLimit(nextLevel.getSerialValue());
} else {
RoomDaySendRankReward curLevel = levelList.get(0);
vo.setCurLevel(curLevel.getName());
vo.setOwnerReward(curLevel.getRoomOwnerReward());
vo.setTopTenReward(curLevel.getTopTenTotalReward());
RoomDaySendRankReward nextLevel = levelList.get(levelList.size() - 1);
vo.setNextLevel(nextLevel.getName());
vo.setNextLevelLimit(nextLevel.getSerialValue());
}
return vo;
}
}

View File

@@ -1,9 +1,12 @@
package com.accompany.business.service.room;
import com.accompany.business.model.room.RoomDaySendRankRoomRecord;
import com.accompany.business.mybatismapper.room.RoomDaySendRankRoomRecordMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RoomDaySendRankRoomRecordService {
public class RoomDaySendRankRoomRecordService extends ServiceImpl<RoomDaySendRankRoomRecordMapper, RoomDaySendRankRoomRecord> {
// 根据业务需要添加自定义方法
}

View File

@@ -1,9 +1,12 @@
package com.accompany.business.service.room;
import com.accompany.business.model.room.RoomDaySendRankUserRecord;
import com.accompany.business.mybatismapper.room.RoomDaySendRankUserRecordMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RoomDaySendRankUserRecordService {
public class RoomDaySendRankUserRecordService extends ServiceImpl<RoomDaySendRankUserRecordMapper, RoomDaySendRankUserRecord> {
// 根据业务需要添加自定义方法
}

View File

@@ -1,15 +1,21 @@
package com.accompany.business.controller.room;
import com.accompany.business.model.room.RoomDaySendRankReward;
import com.accompany.business.service.room.RoomDaySendRankRewardManager;
import com.accompany.business.vo.room.RoomDaySendRankHomeVo;
import com.accompany.business.vo.room.RoomDaySendRankRewardHomeVo;
import com.accompany.business.vo.room.RoomDaySendRankRewardRecordVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.model.PageReq;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.base.UidContextHolder;
import com.accompany.core.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "房间日流水奖励")
@@ -18,7 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
public class RoomDaySendRankRewardController {
@Autowired
private RoomDaySendRankRewardManager roomDaySendRankRewardManager;
private RoomDaySendRankRewardManager manager;
@Authorization
@ApiOperation("获取房间日流水奖励首页信息")
@@ -27,10 +33,56 @@ public class RoomDaySendRankRewardController {
@ApiImplicitParam(name = "isToday", value = "是否今天", required = true, dataType = "boolean", defaultValue = "true")
})
@GetMapping("/home")
public BusiResult<RoomDaySendRankHomeVo> getHomeInfo(Long roomUid, Boolean isToday) {
public BusiResult<RoomDaySendRankRewardHomeVo> getHomeInfo(Long roomUid, Boolean isToday) {
if (null == roomUid || null == isToday){
throw new ServiceException(BusiStatus.PARAMERROR);
}
Long uid = UidContextHolder.get();
// 调用Manager处理业务逻辑
RoomDaySendRankHomeVo result = roomDaySendRankRewardManager.getHomeInfo(uid, roomUid, isToday);
RoomDaySendRankRewardHomeVo result = manager.getHomeInfo(uid, roomUid, isToday);
return BusiResult.success(result);
}
@Authorization
@ApiOperation("获取奖励")
@ApiImplicitParams({
@ApiImplicitParam(name = "roomUid", value = "房间UID", required = true),
@ApiImplicitParam(name = "isRoomOwnerReward", value = "是否是房主奖励", required = true, dataType = "boolean", defaultValue = "true")
})
@GetMapping("/receiveReward")
public BusiResult<Long> receiveReward(Long roomUid, Boolean isRoomOwnerReward) {
if (null == roomUid || null == isRoomOwnerReward){
throw new ServiceException(BusiStatus.PARAMERROR);
}
Long uid = UidContextHolder.get();
if (isRoomOwnerReward && !uid.equals(roomUid)){
throw new ServiceException(BusiStatus.PARAMERROR);
}
// 调用Manager处理业务逻辑
Long reward = manager.receiveReward(uid, roomUid, isRoomOwnerReward);
return BusiResult.success(reward);
}
@Authorization
@ApiOperation("获取奖励")
@ApiImplicitParams({
@ApiImplicitParam(name = "roomUid", value = "房间UID", required = true),
@ApiImplicitParam(name = "page", value = "页码", required = true, defaultValue = "1"),
@ApiImplicitParam(name = "pageSize", value = "页长", required = true, defaultValue = "10"),
})
@GetMapping("/pageRecord")
public BusiResult<PageResult<RoomDaySendRankRewardRecordVo>> pageRecord(Long roomUid, PageReq pageReq) {
if (null == roomUid){
throw new ServiceException(BusiStatus.PARAMERROR);
}
Long uid = UidContextHolder.get();
// 调用Manager处理业务逻辑
Page<RoomDaySendRankRewardRecordVo> page = manager.pageRecord(uid, roomUid, pageReq);
return BusiResult.success(new PageResult<>(page));
}
}