diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankReward.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankReward.java new file mode 100644 index 000000000..09b815d2d --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankReward.java @@ -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; +} \ No newline at end of file diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankRoomRecord.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankRoomRecord.java new file mode 100644 index 000000000..6cac83d03 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankRoomRecord.java @@ -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; +} \ No newline at end of file diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankUserRecord.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankUserRecord.java new file mode 100644 index 000000000..0ace2fc94 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/room/RoomDaySendRankUserRecord.java @@ -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; +} \ No newline at end of file diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/room/RoomDaySendRankHomeVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/room/RoomDaySendRankHomeVo.java new file mode 100644 index 000000000..d9eacb9c2 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/room/RoomDaySendRankHomeVo.java @@ -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 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; + } +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRewardMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRewardMapper.java new file mode 100644 index 000000000..c71d6bde7 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRewardMapper.java @@ -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 { + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRoomRecordMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRoomRecordMapper.java new file mode 100644 index 000000000..7c861d526 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankRoomRecordMapper.java @@ -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 { + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankUserRecordMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankUserRecordMapper.java new file mode 100644 index 000000000..fae666cf8 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/room/RoomDaySendRankUserRecordMapper.java @@ -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 { + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardManager.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardManager.java new file mode 100644 index 000000000..367d270da --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardManager.java @@ -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() { + // 具体业务逻辑由您手动实现 + // 这里只提供接口供定时任务调用 + } +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardService.java new file mode 100644 index 000000000..99a53b700 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRewardService.java @@ -0,0 +1,9 @@ +package com.accompany.business.service.room; + +import org.springframework.stereotype.Service; + +@Service +public class RoomDaySendRankRewardService { + + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRoomRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRoomRecordService.java new file mode 100644 index 000000000..ef4947dec --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankRoomRecordService.java @@ -0,0 +1,9 @@ +package com.accompany.business.service.room; + +import org.springframework.stereotype.Service; + +@Service +public class RoomDaySendRankRoomRecordService { + + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankUserRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankUserRecordService.java new file mode 100644 index 000000000..91072d1c4 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDaySendRankUserRecordService.java @@ -0,0 +1,9 @@ +package com.accompany.business.service.room; + +import org.springframework.stereotype.Service; + +@Service +public class RoomDaySendRankUserRecordService { + + // 根据业务需要添加自定义方法 +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRewardMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRewardMapper.xml new file mode 100644 index 000000000..d6b6f7c79 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRewardMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRoomRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRoomRecordMapper.xml new file mode 100644 index 000000000..83e2401c9 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankRoomRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankUserRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankUserRecordMapper.xml new file mode 100644 index 000000000..36a7302cb --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDaySendRankUserRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDaySendRankRewardController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDaySendRankRewardController.java new file mode 100644 index 000000000..fd5a9c020 --- /dev/null +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDaySendRankRewardController.java @@ -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 getHomeInfo(Long roomUid, Boolean isToday) { + Long uid = UidContextHolder.get(); + // 调用Manager处理业务逻辑 + RoomDaySendRankHomeVo result = roomDaySendRankRewardManager.getHomeInfo(uid, roomUid, isToday); + return BusiResult.success(result); + } +} \ No newline at end of file diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/room/RoomDaySendRankRewardTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/room/RoomDaySendRankRewardTask.java new file mode 100644 index 000000000..606da9fac --- /dev/null +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/room/RoomDaySendRankRewardTask.java @@ -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(); + } +} \ No newline at end of file