房间日奖励-agent预生成

This commit is contained in:
2025-09-16 16:34:12 +08:00
parent a8a6afadb5
commit 349951a477
16 changed files with 434 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
package com.accompany.business.model.room;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("room_day_send_rank_reward")
public class RoomDaySendRankReward {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 等级名称
*/
private String name;
/**
* 房间流水金额下限
*/
private BigDecimal serialValue;
/**
* 房主奖励数量
*/
private Long roomOwnerReward;
/**
* 前10奖励总数量
*/
private Long topTenTotalReward;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}

View File

@@ -0,0 +1,61 @@
package com.accompany.business.model.room;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("room_day_send_rank_room_record")
public class RoomDaySendRankRoomRecord {
/**
* 统计日期
*/
private Date statDate;
/**
* 房间ID
*/
private Long roomUid;
/**
* 分区ID
*/
private Integer partitionId;
/**
* 房间流水
*/
private BigDecimal serialValue;
/**
* 奖励档位ID
*/
private Long rewardId;
/**
* 房主奖励
*/
private BigDecimal ownerReward;
/**
* 房主已领取奖励
*/
private BigDecimal ownerReceiveReward;
/**
* 前十名奖励总数
*/
private BigDecimal topTenTotalReward;
/**
* 领取时间
*/
private Date receiveTime;
/**
* 更新时间
*/
private Date updateTime;
}

View File

@@ -0,0 +1,76 @@
package com.accompany.business.model.room;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("room_day_send_rank_user_record")
public class RoomDaySendRankUserRecord {
/**
* 统计日期
*/
private Date statDate;
/**
* 房间ID
*/
private Long roomUid;
/**
* 分区ID
*/
private Integer partitionId;
/**
* 用户ID
*/
private Long uid;
/**
* 房间总流水
*/
private BigDecimal serialValue;
/**
* 奖励档位ID
*/
private Long rewardId;
/**
* 用户排名
*/
private Integer rank;
/**
* 用户贡献值
*/
private BigDecimal userSerialValue;
/**
* 用户奖励比例
*/
private BigDecimal userRewardRatio;
/**
* 用户奖励金币
*/
private BigDecimal userReward;
/**
* 用户已领取奖励
*/
private BigDecimal userReceiveReward;
/**
* 领取时间
*/
private Date receiveTime;
/**
* 更新时间
*/
private Date updateTime;
}

View File

@@ -0,0 +1,49 @@
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 java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("房间日流水奖励首页信息")
public class RoomDaySendRankHomeVo {
@ApiModelProperty("房间信息")
private ActivityUserVo roomInfo;
@ApiModelProperty("奖励信息")
private RewardInfoVo rewardInfo;
@ApiModelProperty("排行榜列表")
private List<ActivityRankItemVo> rankList;
@ApiModelProperty("我的排名信息")
private ActivityRankItemVo myRank;
@Data
@ApiModel("奖励信息")
public static class RewardInfoVo {
@ApiModelProperty("当前流水值")
private BigDecimal serialValue;
@ApiModelProperty("当前奖励等级")
private String curLevel;
@ApiModelProperty("下一级奖励信息")
private String nextLevel;
@ApiModelProperty("下一级奖励下限")
private Long nextLevelLimit;
@ApiModelProperty("前10用户瓜分奖励")
private BigDecimal topTenReward;
@ApiModelProperty("房主奖励")
private BigDecimal ownerReward;
}
}

View File

@@ -0,0 +1,8 @@
package com.accompany.business.mybatismapper.room;
import com.accompany.business.model.room.RoomDaySendRankReward;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface RoomDaySendRankRewardMapper extends BaseMapper<RoomDaySendRankReward> {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,8 @@
package com.accompany.business.mybatismapper.room;
import com.accompany.business.model.room.RoomDaySendRankRoomRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface RoomDaySendRankRoomRecordMapper extends BaseMapper<RoomDaySendRankRoomRecord> {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,8 @@
package com.accompany.business.mybatismapper.room;
import com.accompany.business.model.room.RoomDaySendRankUserRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface RoomDaySendRankUserRecordMapper extends BaseMapper<RoomDaySendRankUserRecord> {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,75 @@
package com.accompany.business.service.room;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.room.RoomDaySendRankHomeVo;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
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.PartitionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.ZonedDateTime;
import java.util.Date;
@Component
public class RoomDaySendRankRewardManager {
@Autowired
private RoomService roomService;
@Autowired
private RoomDaySendRankRewardService roomDaySendRankRewardService;
@Autowired
private RoomDaySendRankRoomRecordService roomDaySendRankRoomRecordService;
@Autowired
private RoomDaySendRankUserRecordService roomDaySendRankUserRecordService;
@Autowired
private UsersService usersService;
/**
* 获取房间日流水奖励首页信息
*
* @param uid
* @param roomUid 房间ID
* @param isToday 是否今天
* @return 首页信息VO
*/
public RoomDaySendRankHomeVo getHomeInfo(Long uid, Long roomUid, Boolean isToday) {
// 实现获取首页信息逻辑
// 1. 获取房间信息使用ActivityUserVo
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);
}
Date todayTime = new Date();
Date statTime = Boolean.TRUE.equals(isToday)? todayTime: DateTimeUtil.addDays(todayTime, -1);
// 2. 计算奖励信息
// 3. 获取排行榜列表前3名使用ActivityRankItemVo
// 4. 获取我的排名信息使用ActivityRankItemVo
// 5. 组装返回结果
return new RoomDaySendRankHomeVo();
}
/**
* 计算每日奖励(供定时任务调用)
*/
public void calculateDailyRewards() {
// 具体业务逻辑由您手动实现
// 这里只提供接口供定时任务调用
}
}

View File

@@ -0,0 +1,9 @@
package com.accompany.business.service.room;
import org.springframework.stereotype.Service;
@Service
public class RoomDaySendRankRewardService {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,9 @@
package com.accompany.business.service.room;
import org.springframework.stereotype.Service;
@Service
public class RoomDaySendRankRoomRecordService {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,9 @@
package com.accompany.business.service.room;
import org.springframework.stereotype.Service;
@Service
public class RoomDaySendRankUserRecordService {
// 根据业务需要添加自定义方法
}

View File

@@ -0,0 +1,5 @@
<?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.RoomDaySendRankRewardMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.RoomDaySendRankRoomRecordMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.RoomDaySendRankUserRecordMapper">
</mapper>

View File

@@ -0,0 +1,36 @@
package com.accompany.business.controller.room;
import com.accompany.business.service.room.RoomDaySendRankRewardManager;
import com.accompany.business.vo.room.RoomDaySendRankHomeVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.core.base.UidContextHolder;
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 = "房间日流水奖励")
@RestController
@RequestMapping("/roomSendRank/dayReward")
public class RoomDaySendRankRewardController {
@Autowired
private RoomDaySendRankRewardManager roomDaySendRankRewardManager;
@Authorization
@ApiOperation("获取房间日流水奖励首页信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "roomUid", value = "房间UID", required = true),
@ApiImplicitParam(name = "isToday", value = "是否今天", required = true, dataType = "boolean", defaultValue = "true")
})
@GetMapping("/home")
public BusiResult<RoomDaySendRankHomeVo> getHomeInfo(Long roomUid, Boolean isToday) {
Long uid = UidContextHolder.get();
// 调用Manager处理业务逻辑
RoomDaySendRankHomeVo result = roomDaySendRankRewardManager.getHomeInfo(uid, roomUid, isToday);
return BusiResult.success(result);
}
}

View File

@@ -0,0 +1,24 @@
package com.accompany.scheduler.task.room;
import com.accompany.business.service.room.RoomDaySendRankRewardManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class RoomDaySendRankRewardTask {
@Autowired
private RoomDaySendRankRewardManager roomDaySendRankRewardManager;
/**
* 每天利雅得时间零点执行奖励计算任务
* 利雅得时间比UTC时间快3小时
* Cron表达式: 0 0 0 * * ? (UTC时间21:00即利雅得时间00:00)
*/
@Scheduled(cron = "0 0 21 * * ?", zone = "Asia/Riyadh")
public void calculateDailyRewards() {
// 调用Manager处理每日奖励计算
roomDaySendRankRewardManager.calculateDailyRewards();
}
}