日常任务-房间流水奖励
This commit is contained in:
@@ -979,6 +979,7 @@ public enum BusiStatus {
|
||||
GUILD_H5_INVITE_EMAIL_ALREADY_BOUND(33001, "该邮箱地址不是新的"),
|
||||
GUILD_H5_INVITE_JOIN_GUILD_NOT_EXIST(33002, "邀请人公会不存在"),
|
||||
DAILY_TASK_LIMIT(500, "ACCESS DENIED"),
|
||||
ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST(500, "RECEIVED"),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
@@ -13,6 +13,8 @@ public enum DailyTaskTypeEnum {
|
||||
RECV_LUCKY_GIFT("RECV_LUCKY_GIFT"),//收到Lucky/Bravo礼物
|
||||
RECV_NOMAL_GIFT("RECV_NOMAL_GIFT"),//收到普通礼物
|
||||
RECV_NOMAL_GIFT_GOLD("RECV_NOMAL_GIFT_GOLD"),//收到礼物(价值超过2w金币)
|
||||
UP_MIC_COIN("UP_MIC_COIN"),//上麦聊天(获得金币)
|
||||
ROOM_DAY_DIAMOND("ROOM_DAY_DIAMOND"),//房间日流水奖励
|
||||
;
|
||||
|
||||
private String handlerType;
|
||||
|
@@ -1,10 +1,10 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 房间日奖励政策实体类
|
||||
@@ -16,7 +16,10 @@ import lombok.Data;
|
||||
public class RoomDayDiamondReward implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 等级
|
||||
*/
|
||||
private String level;
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
@@ -29,6 +32,10 @@ public class RoomDayDiamondReward implements Serializable {
|
||||
* 金币奖励
|
||||
*/
|
||||
private BigDecimal rewardGold;
|
||||
/**
|
||||
* 金币奖励
|
||||
*/
|
||||
private BigDecimal levelRewardGold;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
@@ -0,0 +1,58 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 房间日奖励金币领取记录实体类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Data
|
||||
public class RoomDayDiamondRewardRecvRecord implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
private Integer partitionId;
|
||||
/**
|
||||
* 领取uid
|
||||
*/
|
||||
private Long uid;
|
||||
/**
|
||||
* 房间room_uid
|
||||
*/
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 领取日期
|
||||
*/
|
||||
private String statDate;
|
||||
/**
|
||||
* 领取挡位
|
||||
*/
|
||||
private String level;
|
||||
/**
|
||||
* 金币流水
|
||||
*/
|
||||
private BigDecimal goldNum;
|
||||
/**
|
||||
* 金币奖励
|
||||
*/
|
||||
private BigDecimal rewardGold;
|
||||
/**
|
||||
* 领取时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
package com.accompany.business.vo.dailytask;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class DailyTaskRoomDiamondDetailVo {
|
||||
@ApiModelProperty("等级")
|
||||
private String level;
|
||||
@ApiModelProperty("进度")
|
||||
private BigDecimal processNum;
|
||||
@ApiModelProperty("长度")
|
||||
private BigDecimal maxNum;
|
||||
@ApiModelProperty("上一级长度")
|
||||
private BigDecimal preMaxNum;
|
||||
@ApiModelProperty("奖励")
|
||||
private BigDecimal rewardNum;
|
||||
@ApiModelProperty("状态0不可领取,1-可领取,2-已经领取")
|
||||
private Byte status;
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
package com.accompany.business.vo.dailytask;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DailyTaskRoomDiamondVo {
|
||||
private Long roomUid;
|
||||
private String statDate;
|
||||
private String avatar;
|
||||
private BigDecimal totalGoldNum;
|
||||
private List<DailyTaskRoomDiamondDetailVo> levelVos;
|
||||
}
|
@@ -31,4 +31,6 @@ public class DailyTaskVo {
|
||||
@ApiModelProperty("奖励列表")
|
||||
private List<DailyTaskRewardVo> rewardVos;
|
||||
private List<DailyTaskReward> configRewards;
|
||||
@ApiModelProperty("房间流水奖励")
|
||||
private DailyTaskRoomDiamondVo diamondVo;
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
package com.accompany.business.vo.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecord;
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
@@ -44,6 +43,12 @@ public class RoomDayDiamondRewardRecordVo {
|
||||
@ExcelProperty("对应流水发放金币")
|
||||
@ApiModelProperty("对应流水发放金币")
|
||||
private BigDecimal rewardGold;
|
||||
@ExcelProperty("主播已领金币")
|
||||
@ApiModelProperty("主播已领金币")
|
||||
private BigDecimal receivedGold;
|
||||
@ExcelProperty("领取主播ID")
|
||||
@ApiModelProperty("领取主播ID")
|
||||
private Long receiveErbanNo;
|
||||
@ExcelProperty("发放状态:0:未发放,1已经发放")
|
||||
@ApiModelProperty("发放状态:0:未发放,1已经发放")
|
||||
private Byte status;
|
||||
|
@@ -0,0 +1,19 @@
|
||||
package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecvRecord;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 房间日奖励金币领取记录 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
public interface RoomDayDiamondRewardRecvRecordMapper extends BaseMapper<RoomDayDiamondRewardRecvRecord> {
|
||||
|
||||
List<RoomDayDiamondRewardRecvRecord> getUniqueKeyList(@Param("partitionId") Integer partitionId, @Param("startDate") String startDate,
|
||||
@Param("endDate") String endDate, @Param("roomUids") List<Long> roomUids);
|
||||
}
|
@@ -30,7 +30,6 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.accompany.business.constant.dailytask.DailyTaskTypeEnum.valueOf;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@@ -169,7 +168,7 @@ public class DailyTaskService {
|
||||
try {
|
||||
DailyTaskVo dailyTaskVo = DailyTaskVo.builder().
|
||||
taskConfigId(dailyTaskConfig.getTaskConfigId()).
|
||||
taskType(valueOf(dailyTaskConfig.getTaskKey())).
|
||||
taskType(DailyTaskTypeEnum.valueOf(dailyTaskConfig.getTaskKey())).
|
||||
standardValue(dailyTaskConfig.getReachNum())
|
||||
.build();
|
||||
resultList.add(dailyTaskVo);
|
||||
@@ -216,7 +215,7 @@ public class DailyTaskService {
|
||||
|
||||
DailyTaskVo dailyTaskVo = DailyTaskVo.builder().
|
||||
taskConfigId(dailyTaskConfig.getTaskConfigId()).
|
||||
taskType(valueOf(dailyTaskConfig.getTaskKey())).
|
||||
taskType(DailyTaskTypeEnum.valueOf(dailyTaskConfig.getTaskKey())).
|
||||
standardValue(dailyTaskConfig.getReachNum())
|
||||
.build();
|
||||
|
||||
|
@@ -0,0 +1,95 @@
|
||||
package com.accompany.business.service.dailytask.handler;
|
||||
|
||||
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
|
||||
import com.accompany.business.model.room.RoomDayDiamondReward;
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecvRecord;
|
||||
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
|
||||
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
|
||||
import com.accompany.business.service.room.RoomDayDiamondNumService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardRecvRecordService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardService;
|
||||
import com.accompany.business.service.room.RoomService;
|
||||
import com.accompany.business.vo.dailytask.*;
|
||||
import com.accompany.core.model.Room;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@DailyTaskHandlerType(DailyTaskTypeEnum.ROOM_DAY_DIAMOND)
|
||||
public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
|
||||
@Autowired
|
||||
private RoomService roomService;
|
||||
@Autowired
|
||||
private RoomDayDiamondNumService roomDayDiamondNumService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardService roomDayDiamondRewardService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecvRecordService RoomDayDiamondRewardRecvRecordService;
|
||||
|
||||
@Override
|
||||
public void doExecuteProgress(DailyProgressContext progressContext) {
|
||||
Long uid = progressContext.getUid();
|
||||
Integer partitionId = progressContext.getPartitionId();
|
||||
String todayDate = getTodayDate(partitionId, progressContext.getCreateTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DailyTaskVo doHandle(DailyTaskContext context) {
|
||||
DailyTaskVo dailyTaskVo = context.getDailyTaskVo();
|
||||
Integer partitionId = context.getPartitionId();
|
||||
Long uid = context.getUid();
|
||||
DailyTaskRoomDiamondVo dailyTaskRoomDiamondVo = new DailyTaskRoomDiamondVo();
|
||||
dailyTaskVo.setDiamondVo(dailyTaskRoomDiamondVo);
|
||||
dailyTaskRoomDiamondVo.setRoomUid(uid);
|
||||
String todayDate = context.getTodayDate();
|
||||
dailyTaskRoomDiamondVo.setStatDate(todayDate);
|
||||
Room roomByUid = roomService.getRoomByUid(uid);
|
||||
dailyTaskRoomDiamondVo.setAvatar(roomByUid.getAvatar());
|
||||
BigDecimal totalGoldNum = roomDayDiamondNumService.getGoldNum(partitionId, uid, todayDate);
|
||||
dailyTaskRoomDiamondVo.setTotalGoldNum(totalGoldNum);
|
||||
List<DailyTaskRoomDiamondDetailVo> rewardList = new ArrayList<>();
|
||||
dailyTaskRoomDiamondVo.setLevelVos(rewardList);
|
||||
List<RoomDayDiamondReward> roomDayDiamondRewards = roomDayDiamondRewardService.listByPartitionIdAsc(partitionId);
|
||||
if (CollectionUtils.isEmpty(roomDayDiamondRewards)) {
|
||||
return dailyTaskVo;
|
||||
}
|
||||
Map<String, RoomDayDiamondRewardRecvRecord> levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, todayDate);
|
||||
int size = roomDayDiamondRewards.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
RoomDayDiamondReward diamondReward = roomDayDiamondRewards.get(i);
|
||||
DailyTaskRoomDiamondDetailVo detailVo = new DailyTaskRoomDiamondDetailVo();
|
||||
detailVo.setLevel(diamondReward.getLevel());
|
||||
detailVo.setRewardNum(diamondReward.getLevelRewardGold());
|
||||
BigDecimal preMaxNum = BigDecimal.ZERO;
|
||||
if (i > 0) {
|
||||
preMaxNum = roomDayDiamondRewards.get(i - 1).getDiamondNum();
|
||||
}
|
||||
detailVo.setPreMaxNum(preMaxNum);
|
||||
detailVo.setMaxNum(diamondReward.getDiamondNum());
|
||||
BigDecimal length = detailVo.getMaxNum().subtract(preMaxNum);
|
||||
BigDecimal tmpTotalGoldNum = totalGoldNum.subtract(detailVo.getPreMaxNum());
|
||||
BigDecimal processNum = tmpTotalGoldNum.compareTo(BigDecimal.ZERO) >= 0
|
||||
? tmpTotalGoldNum.compareTo(length)>=0 ? length : tmpTotalGoldNum
|
||||
: BigDecimal.ZERO;
|
||||
detailVo.setProcessNum(processNum);
|
||||
Boolean received = levelMap.containsKey(diamondReward.getLevel());
|
||||
if (received) {
|
||||
detailVo.setStatus((byte) 2);
|
||||
} else if (processNum.compareTo(length) == 0) {
|
||||
detailVo.setStatus((byte) 1);
|
||||
} else {
|
||||
detailVo.setStatus((byte) 0);
|
||||
}
|
||||
rewardList.add(detailVo);
|
||||
}
|
||||
return dailyTaskVo;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,65 @@
|
||||
package com.accompany.business.service.dailytask.handler;
|
||||
|
||||
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
|
||||
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
|
||||
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
|
||||
import com.accompany.business.service.room.RoomMicService;
|
||||
import com.accompany.business.vo.dailytask.DailyProgressContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskVo;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import org.redisson.api.RAtomicLong;
|
||||
import org.redisson.api.RBucket;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Calendar;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@DailyTaskHandlerType(DailyTaskTypeEnum.UP_MIC_COIN)
|
||||
public class UpMicCoinHandler extends AbstractDailyTaskHandler {
|
||||
|
||||
@Autowired
|
||||
private RoomMicService roomMicService;
|
||||
|
||||
|
||||
@Override
|
||||
public void doExecuteProgress(DailyProgressContext progressContext) {
|
||||
// Long uid = progressContext.getUid();
|
||||
// Integer partitionId = progressContext.getPartitionId();
|
||||
// String todayDate = getTodayDate(partitionId, progressContext.getCreateTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DailyTaskVo doHandle(DailyTaskContext context) {
|
||||
Long uid = context.getUid();
|
||||
DailyTaskVo dailyTaskVo = context.getDailyTaskVo();
|
||||
String todayDate = context.getTodayDate();
|
||||
RAtomicLong userDayUpMicDuration = roomMicService.userDayUpMicDuration(todayDate, uid);
|
||||
long totalDuration = userDayUpMicDuration.get();
|
||||
RBucket<Long> longRBucket = roomMicService.userUpMicTime(uid);
|
||||
Long upMicTime = longRBucket.get();
|
||||
DailyTaskTypeEnum taskType = dailyTaskVo.getTaskType();
|
||||
if (longRBucket.isExists()) {
|
||||
Map<String, Integer> upMicDuration = roomMicService.calUserUpMicDuration(upMicTime, Calendar.getInstance().getTimeInMillis(), context.getPartitionId());
|
||||
if (!upMicDuration.isEmpty()) {
|
||||
totalDuration += upMicDuration.getOrDefault(todayDate, 0);
|
||||
}
|
||||
}
|
||||
if (totalDuration >= dailyTaskVo.getStandardValue()) {
|
||||
taskStatus(uid, todayDate, taskType).set(1, Duration.ofDays(1));
|
||||
}
|
||||
dailyTaskVo.setReachNum(totalDuration);
|
||||
dailyTaskVo.setReceiveStatus(computeReceiveStatus(uid, todayDate, taskType));
|
||||
return dailyTaskVo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo) {
|
||||
super.receive(uid, receiveDate, dailyTaskVo);
|
||||
|
||||
return BusiResult.success();
|
||||
}
|
||||
}
|
@@ -15,4 +15,8 @@ import java.util.Date;
|
||||
public interface RoomDayDiamondNumService extends IService<RoomDayDiamondNum> {
|
||||
|
||||
Integer addDiamondNum(Integer partitionId, Long roomUid, Date statDate, Double diamondNum, Double goldNum);
|
||||
|
||||
|
||||
BigDecimal getGoldNum(Integer partitionId, Long roomUid, String statDate);
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,114 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomDayDiamondReward;
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecvRecord;
|
||||
import com.accompany.business.mybatismapper.room.RoomDayDiamondRewardRecvRecordMapper;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.record.BillRecordService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.BillObjTypeEnum;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 房间日奖励金币领取记录 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Service
|
||||
public class RoomDayDiamondRewardRecvRecordService extends ServiceImpl<RoomDayDiamondRewardRecvRecordMapper, RoomDayDiamondRewardRecvRecord> {
|
||||
|
||||
@Autowired
|
||||
private UsersService usersService;
|
||||
@Autowired
|
||||
private RoomDayDiamondNumService roomDayDiamondNumService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardService roomDayDiamondRewardService;
|
||||
@Autowired
|
||||
private UserPurseService userPurseService;
|
||||
@Autowired
|
||||
private BillRecordService billRecordService;
|
||||
|
||||
public BusiResult receive(Long uid, Long roomUid, String receiveDate, String level) {
|
||||
Users users = usersService.getUsersByUid(roomUid);
|
||||
Integer partitionId = users.getPartitionId();
|
||||
LambdaQueryWrapper<RoomDayDiamondRewardRecvRecord> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(RoomDayDiamondRewardRecvRecord::getPartitionId, partitionId)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getRoomUid, roomUid)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getStatDate, receiveDate)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getLevel, level);
|
||||
Long count = baseMapper.selectCount(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST);
|
||||
}
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());
|
||||
String todayDate = zonedDateTime.format(DateTimeUtil.dateFormatter);
|
||||
if (!todayDate.equals(receiveDate)) {
|
||||
throw new ServiceException(BusiStatus.DAILY_RECEIVE_EXPIRE);
|
||||
}
|
||||
BigDecimal goldNum = roomDayDiamondNumService.getGoldNum(partitionId, roomUid, receiveDate);
|
||||
RoomDayDiamondReward diamondReward = roomDayDiamondRewardService.getByLevel(partitionId, level);
|
||||
if (diamondReward == null || goldNum.compareTo(diamondReward.getDiamondNum()) < 0) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
RoomDayDiamondRewardRecvRecord roomDayDiamondRewardRecvRecord = new RoomDayDiamondRewardRecvRecord();
|
||||
roomDayDiamondRewardRecvRecord.setPartitionId(partitionId);
|
||||
roomDayDiamondRewardRecvRecord.setRoomUid(roomUid);
|
||||
roomDayDiamondRewardRecvRecord.setUid(uid);
|
||||
roomDayDiamondRewardRecvRecord.setLevel(level);
|
||||
roomDayDiamondRewardRecvRecord.setStatDate(receiveDate);
|
||||
roomDayDiamondRewardRecvRecord.setCreateTime(new Date());
|
||||
roomDayDiamondRewardRecvRecord.setGoldNum(goldNum);
|
||||
// 领取的奖励,用户逐级领取只能用字段levelRewardGold
|
||||
BigDecimal levelRewardGold = diamondReward.getLevelRewardGold();
|
||||
roomDayDiamondRewardRecvRecord.setRewardGold(levelRewardGold);
|
||||
int insert = baseMapper.insert(roomDayDiamondRewardRecvRecord);
|
||||
if (insert <= 0) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
userPurseService.addDiamond(roomUid, levelRewardGold.doubleValue(), BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD,
|
||||
(userPurse) -> billRecordService.insertGeneralBillRecord(roomUid, roomDayDiamondRewardRecvRecord.getId().toString(),
|
||||
BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD, levelRewardGold.doubleValue(), userPurse));
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
public Map<String, RoomDayDiamondRewardRecvRecord> getLevelMap(Integer partitionId, Long roomUid, String statDate) {
|
||||
LambdaQueryWrapper<RoomDayDiamondRewardRecvRecord> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(RoomDayDiamondRewardRecvRecord::getPartitionId, partitionId)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getRoomUid, roomUid)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getStatDate, statDate);
|
||||
List<RoomDayDiamondRewardRecvRecord> roomDayDiamondRewardRecvRecords = baseMapper.selectList(queryWrapper);
|
||||
if (CollectionUtils.isEmpty(roomDayDiamondRewardRecvRecords)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return roomDayDiamondRewardRecvRecords.stream().collect(Collectors.toMap(RoomDayDiamondRewardRecvRecord::getLevel, x -> x));
|
||||
}
|
||||
|
||||
public Map<String, RoomDayDiamondRewardRecvRecord> getUniqueKeyMap(Integer partitionId, String startDate, String endDate, List<Long> roomUids) {
|
||||
List<RoomDayDiamondRewardRecvRecord> uniqueKeyList = baseMapper.getUniqueKeyList(partitionId, startDate, endDate, roomUids);
|
||||
if (CollectionUtils.isEmpty(uniqueKeyList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return uniqueKeyList.stream().collect(Collectors.toMap(x -> String.format("%s_%s", x.getRoomUid(), x.getStatDate()),
|
||||
x -> x));
|
||||
}
|
||||
}
|
@@ -4,6 +4,7 @@ import com.accompany.business.model.room.RoomDayDiamondReward;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
@@ -23,4 +24,8 @@ public interface RoomDayDiamondRewardService extends IService<RoomDayDiamondRewa
|
||||
* @return
|
||||
*/
|
||||
BigDecimal calGoldReward(TreeMap<BigDecimal, RoomDayDiamondReward> treeMap, BigDecimal diamondNum);
|
||||
|
||||
List<RoomDayDiamondReward> listByPartitionIdAsc(Integer partitionId);
|
||||
|
||||
RoomDayDiamondReward getByLevel(Integer partitionId, String level);
|
||||
}
|
||||
|
@@ -6,6 +6,8 @@ import com.accompany.business.service.room.RoomDayDiamondNumService;
|
||||
import com.accompany.business.service.room.RoomHourDiamondNumService;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -39,4 +41,17 @@ public class RoomDayDiamondNumServiceImpl extends ServiceImpl<RoomDayDiamondNumM
|
||||
String format = zonedDateTime.format(DateTimeUtil.dateFormatter);
|
||||
return baseMapper.addDiamondNum(partitionId, roomUid, format, BigDecimal.valueOf(diamondNum), BigDecimal.valueOf(goldNum));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getGoldNum(Integer partitionId, Long roomUid, String statDate) {
|
||||
LambdaQueryWrapper<RoomDayDiamondNum> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomDayDiamondNum::getPartitionId, partitionId);
|
||||
wrapper.eq(RoomDayDiamondNum::getRoomUid, roomUid);
|
||||
wrapper.eq(RoomDayDiamondNum::getStatDate, statDate);
|
||||
RoomDayDiamondNum roomDayDiamondNum = baseMapper.selectOne(wrapper, false);
|
||||
if (roomDayDiamondNum != null) {
|
||||
return roomDayDiamondNum.getGoldNum();
|
||||
}
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ import com.accompany.business.model.guild.Guild;
|
||||
import com.accompany.business.model.room.RoomDayDiamondNum;
|
||||
import com.accompany.business.model.room.RoomDayDiamondReward;
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecord;
|
||||
import com.accompany.business.model.room.RoomDayDiamondRewardRecvRecord;
|
||||
import com.accompany.business.mybatismapper.room.RoomDayDiamondRewardRecordMapper;
|
||||
import com.accompany.business.service.BaseSendService;
|
||||
import com.accompany.business.service.guild.GuildService;
|
||||
@@ -12,6 +13,7 @@ import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.record.BillRecordService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondNumService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardRecordService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardRecvRecordService;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.vo.room.RoomDayDiamondRewardRecordVo;
|
||||
@@ -29,6 +31,7 @@ import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.core.service.message.MessageRobotPushService;
|
||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.accompany.core.util.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
@@ -36,6 +39,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -76,6 +80,8 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
private MessageRobotPushService messageRobotPushService;
|
||||
@Autowired
|
||||
private GuildService guildService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecvRecordService roomDayDiamondRewardRecvRecordService;
|
||||
|
||||
@Override
|
||||
public PageResult<RoomDayDiamondRewardRecordVo> listRecord(Integer partitionId, Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId,
|
||||
@@ -84,6 +90,11 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
if (partitionId == null) {
|
||||
throw new AdminServiceException("分区不能为空");
|
||||
}
|
||||
if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) {
|
||||
Date date = new Date();
|
||||
startDate = DateUtil.formatDate(DateUtil.offsetDay(date, -30));
|
||||
endDate = DateUtil.formatDate(date);
|
||||
}
|
||||
//查询列表不包含今天
|
||||
String notEqualsTodate = DateTimeUtil.convertWithZoneId(new Date(), PartitionEnum.getByPartitionId(partitionId).getZoneId())
|
||||
.format(DateTimeUtil.dateFormatter);
|
||||
@@ -118,6 +129,13 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
List<Integer> collect = rows.stream().map(RoomDayDiamondRewardRecordVo::getPartitionId).collect(Collectors.toList());
|
||||
collect.stream().distinct()
|
||||
.forEach(x -> partitionTreeMap.put(x, roomDayDiamondRewardService.getRewardTreeMapByPartitionId(partitionId)));
|
||||
Map<String, RoomDayDiamondRewardRecvRecord> recvRecordMap = roomDayDiamondRewardRecvRecordService.getUniqueKeyMap(partitionId, startDate, endDate, rows.stream()
|
||||
.map(RoomDayDiamondRewardRecordVo::getRoomUid).collect(Collectors.toList()));
|
||||
Map<Long, Users> usersMapByUids = new HashMap<>();
|
||||
if (MapUtils.isNotEmpty(recvRecordMap)) {
|
||||
List<Long> uids = recvRecordMap.values().stream().map(RoomDayDiamondRewardRecvRecord::getUid).collect(Collectors.toList());
|
||||
usersMapByUids = usersService.getUsersMapByUids(uids);
|
||||
}
|
||||
for (RoomDayDiamondRewardRecordVo row : rows) {
|
||||
if (row.getCreateTime() != null) {
|
||||
row.setSendTime(DateUtil.formatDateTime(row.getCreateTime()));
|
||||
@@ -130,6 +148,15 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
}
|
||||
TreeMap<BigDecimal, RoomDayDiamondReward> dayDiamondRewardTreeMap = partitionTreeMap.get(row.getPartitionId());
|
||||
row.setRewardGold(roomDayDiamondRewardService.calGoldReward(dayDiamondRewardTreeMap, row.getGoldNum()));
|
||||
RoomDayDiamondRewardRecvRecord roomDayDiamondRewardRecvRecord = recvRecordMap.get(String.format("%s_%s", row.getRoomUid(), row.getStatDate()));
|
||||
if (roomDayDiamondRewardRecvRecord != null) {
|
||||
row.setReceivedGold(roomDayDiamondRewardRecvRecord.getGoldNum());
|
||||
row.setStatus((byte)1);
|
||||
Users users = usersMapByUids.get(roomDayDiamondRewardRecvRecord.getUid());
|
||||
if (users != null) {
|
||||
row.setReceiveErbanNo(roomDayDiamondRewardRecvRecord.getUid());
|
||||
}
|
||||
}
|
||||
}
|
||||
return pageResult;
|
||||
}
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.accompany.business.service.room.impl;
|
||||
|
||||
import com.accompany.business.model.room.RoomDayDiamondReward;
|
||||
import com.accompany.business.model.room.RoomLevelInfo;
|
||||
import com.accompany.business.mybatismapper.room.RoomDayDiamondRewardMapper;
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -27,9 +26,7 @@ public class RoomDayDiamondRewardServiceImpl extends ServiceImpl<RoomDayDiamondR
|
||||
@Override
|
||||
public TreeMap<BigDecimal, RoomDayDiamondReward> getRewardTreeMapByPartitionId(Integer partitionId) {
|
||||
TreeMap<BigDecimal, RoomDayDiamondReward> resultMap = new TreeMap<>();
|
||||
LambdaQueryWrapper<RoomDayDiamondReward> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomDayDiamondReward::getPartitionId, partitionId).orderByAsc(RoomDayDiamondReward::getDiamondNum);
|
||||
List<RoomDayDiamondReward> roomDayDiamondRewards = baseMapper.selectList(wrapper);
|
||||
List<RoomDayDiamondReward> roomDayDiamondRewards = this.listByPartitionIdAsc(partitionId);
|
||||
if (CollectionUtils.isEmpty(roomDayDiamondRewards)) {
|
||||
return resultMap;
|
||||
}
|
||||
@@ -48,4 +45,19 @@ public class RoomDayDiamondRewardServiceImpl extends ServiceImpl<RoomDayDiamondR
|
||||
return totalLevelInfoEntry.getValue().getRewardGold();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RoomDayDiamondReward> listByPartitionIdAsc(Integer partitionId) {
|
||||
LambdaQueryWrapper<RoomDayDiamondReward> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomDayDiamondReward::getPartitionId, partitionId).orderByAsc(RoomDayDiamondReward::getDiamondNum);
|
||||
return baseMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RoomDayDiamondReward getByLevel(Integer partitionId, String level) {
|
||||
LambdaQueryWrapper<RoomDayDiamondReward> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomDayDiamondReward::getPartitionId, partitionId)
|
||||
.eq(RoomDayDiamondReward::getLevel, level);
|
||||
return baseMapper.selectOne(wrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,22 @@
|
||||
<?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.RoomDayDiamondRewardRecvRecordMapper">
|
||||
|
||||
<select id="getUniqueKeyList" resultType="com.accompany.business.model.room.RoomDayDiamondRewardRecvRecord">
|
||||
SELECT
|
||||
stat_date,
|
||||
room_uid,
|
||||
uid,
|
||||
sum(reward_gold) reward_gold
|
||||
FROM
|
||||
room_day_diamond_reward_recv_record
|
||||
WHERE
|
||||
partition_id = #{partitionId}
|
||||
and stat_date >= #{startDate}
|
||||
and stat_date <= #{endDate}
|
||||
<foreach collection="roomUids" separator="," close=")" open="AND room_uid IN (" item="ru">
|
||||
#{ru}
|
||||
</foreach>
|
||||
GROUP BY stat_date, room_uid
|
||||
</select>
|
||||
</mapper>
|
@@ -0,0 +1,26 @@
|
||||
package com.accompany.business.controller.room;
|
||||
|
||||
import com.accompany.business.service.room.RoomDayDiamondRewardRecvRecordService;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/roomDayGoldReward")
|
||||
public class RoomDayDiamondRewardController {
|
||||
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecvRecordService roomDayDiamondRewardRecvRecordService;
|
||||
|
||||
@ApiOperation(value = "领取房间日钻石奖励", httpMethod = "POST")
|
||||
@PostMapping("/recv")
|
||||
public BusiResult recv(@RequestHeader(PUB_UID) Long uid, Long roomUid, String receiveDate, String level) {
|
||||
return roomDayDiamondRewardRecvRecordService.receive(uid, roomUid, receiveDate, level);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user