日任务房间日流水返回今天结构
This commit is contained in:
@@ -24,7 +24,7 @@ import java.nio.charset.StandardCharsets;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/admin/roomDayDiamond")
|
||||
public class RoomDayDiamondRewardController extends BaseController {
|
||||
public class RoomDayDiamondRewardAdminController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecordService roomDayDiamondRewardRecordService;
|
||||
@@ -69,7 +69,7 @@ public class RoomDayDiamondRewardController extends BaseController {
|
||||
|
||||
@ApiOperation(value = "每日钻石流水列表-发放", httpMethod = "POST")
|
||||
@PostMapping("/send")
|
||||
public BusiResult send(Long id) {
|
||||
public BusiResult send(Long id) throws InterruptedException {
|
||||
return roomDayDiamondRewardRecordService.send(id, getAdminId());
|
||||
}
|
||||
}
|
@@ -985,6 +985,7 @@ public enum BusiStatus {
|
||||
SUPER_BLOCK_NOAUTHORITY(500, "NOAUTHORITY OPERATE"),
|
||||
SUPER_BLOCK_MUST_BLOCK_REASON(500, "MUST SIGN BLOCK REASON"),
|
||||
DAILY_TASK_REWARD_ERROR(500, "DAILY TASK REWARD ERROR"),
|
||||
ROOM_DAY_DIAMOND_REWARD_DATE_CHECK(500, "TODAY NOT ALLOW RECEIVE"),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
@@ -15,5 +15,7 @@ public class DailyTaskRoomDiamondVo {
|
||||
private BigDecimal totalGoldNum;
|
||||
@ApiModelProperty("状态,0不可领取,1-可领取,2-已经领取")
|
||||
private Byte status;
|
||||
private String maxLevel;
|
||||
private BigDecimal totalRewardNum = BigDecimal.ZERO;
|
||||
private List<DailyTaskRoomDiamondDetailVo> levelVos;
|
||||
}
|
||||
|
@@ -6,10 +6,7 @@ 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.service.room.*;
|
||||
import com.accompany.business.vo.dailytask.*;
|
||||
import com.accompany.core.model.Room;
|
||||
import com.accompany.core.model.Users;
|
||||
@@ -33,7 +30,9 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardService roomDayDiamondRewardService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecvRecordService RoomDayDiamondRewardRecvRecordService;
|
||||
private RoomDayDiamondRewardRecvRecordService roomDayDiamondRewardRecvRecordService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecordService roomDayDiamondRewardRecordService;
|
||||
|
||||
@Override
|
||||
public void doExecuteProgress(DailyProgressContext progressContext) {
|
||||
@@ -52,9 +51,9 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
}
|
||||
Room roomByUid = roomService.getRoomByUid(uid);
|
||||
String todayDate = context.getTodayDate();
|
||||
resultList.add(buildRoomDiamondVo(1, todayDate, roomDayDiamondRewards, uid, partitionId, roomByUid));
|
||||
resultList.add(buildRoomDiamondVo(DateType.TODAY, todayDate, roomDayDiamondRewards, uid, partitionId, roomByUid));
|
||||
String yesterdayDate = DateUtil.formatDate(DateUtil.offsetDay(DateUtil.parseDate(todayDate), -1));
|
||||
resultList.add(buildRoomDiamondVo(2, yesterdayDate, roomDayDiamondRewards, uid, partitionId, roomByUid));
|
||||
resultList.add(buildRoomDiamondVo(DateType.YESTERDAY, yesterdayDate, roomDayDiamondRewards, uid, partitionId, roomByUid));
|
||||
|
||||
return dailyTaskVo;
|
||||
}
|
||||
@@ -64,8 +63,7 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
dailyTaskRoomDiamondVo.setRoomUid(uid);
|
||||
dailyTaskRoomDiamondVo.setDateType(dateType);
|
||||
dailyTaskRoomDiamondVo.setStatDate(dayDate);
|
||||
|
||||
dailyTaskRoomDiamondVo.setStatus((byte) 3);
|
||||
dailyTaskRoomDiamondVo.setStatus(ReceiveStatus.NOT_RECEIVE);
|
||||
if (roomByUid == null) {
|
||||
Users users = usersService.getUsersByUid(uid);
|
||||
dailyTaskRoomDiamondVo.setAvatar(users.getAvatar());
|
||||
@@ -76,13 +74,15 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
dailyTaskRoomDiamondVo.setTotalGoldNum(totalGoldNum);
|
||||
List<DailyTaskRoomDiamondDetailVo> rewardList = new ArrayList<>();
|
||||
dailyTaskRoomDiamondVo.setLevelVos(rewardList);
|
||||
Map<String, RoomDayDiamondRewardRecvRecord> levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, dayDate);
|
||||
Map<String, RoomDayDiamondRewardRecvRecord> levelMap = roomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, dayDate);
|
||||
Boolean domainSendCheck = roomDayDiamondRewardRecordService.checkExist(partitionId, uid, dayDate);
|
||||
int size = roomDayDiamondRewards.size();
|
||||
RoomDayDiamondReward bigDiamondReward = null;
|
||||
for (int i = 0; i < size; i++) {
|
||||
RoomDayDiamondReward diamondReward = roomDayDiamondRewards.get(i);
|
||||
DailyTaskRoomDiamondDetailVo detailVo = new DailyTaskRoomDiamondDetailVo();
|
||||
detailVo.setLevel(diamondReward.getLevel());
|
||||
detailVo.setRewardNum(diamondReward.getLevelRewardGold());
|
||||
detailVo.setRewardNum(diamondReward.getRewardGold());
|
||||
BigDecimal preMaxNum = BigDecimal.ZERO;
|
||||
if (i > 0) {
|
||||
preMaxNum = roomDayDiamondRewards.get(i - 1).getDiamondNum();
|
||||
@@ -95,17 +95,39 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
|
||||
? tmpTotalGoldNum.compareTo(length)>=0 ? length : tmpTotalGoldNum
|
||||
: BigDecimal.ZERO;
|
||||
detailVo.setProcessNum(processNum);
|
||||
Boolean received = levelMap.containsKey(diamondReward.getLevel());
|
||||
Boolean received = !levelMap.isEmpty() && domainSendCheck;
|
||||
if (received) {
|
||||
detailVo.setStatus((byte) 2);
|
||||
} else if (processNum.compareTo(length) == 0) {
|
||||
detailVo.setStatus((byte) 1);
|
||||
detailVo.setStatus(ReceiveStatus.RECEIVED);
|
||||
dailyTaskRoomDiamondVo.setStatus(ReceiveStatus.RECEIVED);
|
||||
bigDiamondReward = diamondReward;
|
||||
} else if (processNum.compareTo(length) == 0 && DateType.TODAY == dateType) {
|
||||
detailVo.setStatus(ReceiveStatus.RECEIVE_YESTERDAY);
|
||||
bigDiamondReward = diamondReward;
|
||||
} else if (processNum.compareTo(length) == 0 && DateType.YESTERDAY == dateType) {
|
||||
detailVo.setStatus(ReceiveStatus.AVAILABLE);
|
||||
dailyTaskRoomDiamondVo.setStatus(ReceiveStatus.AVAILABLE);
|
||||
bigDiamondReward = diamondReward;
|
||||
} else {
|
||||
detailVo.setStatus((byte) 0);
|
||||
detailVo.setStatus(ReceiveStatus.NOT_RECEIVE);
|
||||
}
|
||||
rewardList.add(detailVo);
|
||||
}
|
||||
if (DateType.YESTERDAY == dateType && bigDiamondReward != null) {
|
||||
dailyTaskRoomDiamondVo.setMaxLevel(bigDiamondReward.getLevel());
|
||||
dailyTaskRoomDiamondVo.setTotalRewardNum(bigDiamondReward.getRewardGold());
|
||||
}
|
||||
return dailyTaskRoomDiamondVo;
|
||||
}
|
||||
|
||||
interface DateType {
|
||||
int TODAY = 1;
|
||||
int YESTERDAY = 2;
|
||||
}
|
||||
|
||||
interface ReceiveStatus {
|
||||
byte NOT_RECEIVE = 0;
|
||||
byte AVAILABLE = 1;
|
||||
byte RECEIVED = 2;
|
||||
byte RECEIVE_YESTERDAY = 3;
|
||||
}
|
||||
}
|
@@ -17,7 +17,7 @@ public interface RoomDayDiamondRewardRecordService extends IService<RoomDayDiamo
|
||||
PageResult<RoomDayDiamondRewardRecordVo> listRecord(Integer partitionId, Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId,
|
||||
String startDate, String endDate, Integer status, Integer pageNo, Integer pageSize);
|
||||
|
||||
BusiResult send(Long id, Integer adminId);
|
||||
BusiResult send(Long id, Integer adminId) throws InterruptedException;
|
||||
|
||||
void loadDayDataRobotSend(Integer partitionId, String startDate, String endDate);
|
||||
|
||||
|
@@ -11,28 +11,31 @@ 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.AdminServiceException;
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
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.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 房间日奖励金币领取记录 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class RoomDayDiamondRewardRecvRecordService extends ServiceImpl<RoomDayDiamondRewardRecvRecordMapper, RoomDayDiamondRewardRecvRecord> {
|
||||
|
||||
@@ -48,51 +51,73 @@ public class RoomDayDiamondRewardRecvRecordService extends ServiceImpl<RoomDayDi
|
||||
private BillRecordService billRecordService;
|
||||
@Autowired
|
||||
private RoomDayDiamondRewardRecordService roomDayDiamondRewardRecordService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
public BusiResult receive(Long uid, Long roomUid, String receiveDate, String level) {
|
||||
public BusiResult receive(Long uid, Long roomUid, String receiveDate) {
|
||||
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);
|
||||
if (todayDate.equals(receiveDate)) {
|
||||
throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_DATE_CHECK);
|
||||
}
|
||||
if (roomDayDiamondRewardRecordService.checkExist(partitionId, roomUid, receiveDate)) {
|
||||
throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_SEND);
|
||||
|
||||
String lockKey = String.format("RoomDayDiamondNum:%s_%s_%s" , partitionId, receiveDate, roomUid);
|
||||
RLock lock = redissonClient.getLock(lockKey);
|
||||
boolean locked = false;
|
||||
try {
|
||||
locked = lock.tryLock(5L, TimeUnit.SECONDS);
|
||||
if (!locked) {
|
||||
log.error("房间日流水奖励已经发放,partitionId:{}, receiveDate:{}, roomUid:{}", partitionId, receiveDate, roomUid);
|
||||
throw new ServiceException(BusiStatus.SERVERERROR);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<RoomDayDiamondRewardRecvRecord> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(RoomDayDiamondRewardRecvRecord::getPartitionId, partitionId)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getRoomUid, roomUid)
|
||||
.eq(RoomDayDiamondRewardRecvRecord::getStatDate, receiveDate);
|
||||
Long count = baseMapper.selectCount(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST);
|
||||
}
|
||||
|
||||
if (roomDayDiamondRewardRecordService.checkExist(partitionId, roomUid, receiveDate)) {
|
||||
throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_SEND);
|
||||
}
|
||||
BigDecimal roomGoldNum = roomDayDiamondNumService.getGoldNum(partitionId, roomUid, receiveDate);
|
||||
TreeMap<BigDecimal, RoomDayDiamondReward> treeMap = roomDayDiamondRewardService.getRewardTreeMapByPartitionId(partitionId);
|
||||
RoomDayDiamondReward diamondReward = roomDayDiamondRewardService.calGoldRewardEntity(treeMap, roomGoldNum);
|
||||
if (diamondReward == null || roomGoldNum.compareTo(diamondReward.getDiamondNum()) < 0) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
RoomDayDiamondRewardRecvRecord roomDayDiamondRewardRecvRecord = new RoomDayDiamondRewardRecvRecord();
|
||||
roomDayDiamondRewardRecvRecord.setPartitionId(partitionId);
|
||||
roomDayDiamondRewardRecvRecord.setRoomUid(roomUid);
|
||||
roomDayDiamondRewardRecvRecord.setUid(uid);
|
||||
roomDayDiamondRewardRecvRecord.setLevel(diamondReward.getLevel());
|
||||
roomDayDiamondRewardRecvRecord.setStatDate(receiveDate);
|
||||
roomDayDiamondRewardRecvRecord.setCreateTime(new Date());
|
||||
roomDayDiamondRewardRecvRecord.setGoldNum(roomGoldNum);
|
||||
// 领取的奖励,用户逐级领取只能用字段levelRewardGold
|
||||
BigDecimal rewardGold = diamondReward.getRewardGold();
|
||||
roomDayDiamondRewardRecvRecord.setRewardGold(rewardGold);
|
||||
int insert = baseMapper.insert(roomDayDiamondRewardRecvRecord);
|
||||
if (insert <= 0) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
userPurseService.addDiamond(roomUid, rewardGold.doubleValue(), BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD,
|
||||
(userPurse) -> billRecordService.insertGeneralBillRecord(roomUid, roomDayDiamondRewardRecvRecord.getId().toString(),
|
||||
BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD, rewardGold.doubleValue(), userPurse));
|
||||
} catch (InterruptedException e) {
|
||||
throw new AdminServiceException(BusiStatus.SERVERBUSY);
|
||||
} finally {
|
||||
if (locked) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -113,11 +138,11 @@ public class RoomDayDiamondRewardRecvRecordService extends ServiceImpl<RoomDayDi
|
||||
if (CollectionUtils.isEmpty(uniqueKeyList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return uniqueKeyList.stream().collect(Collectors.toMap(x -> String.format("%s_%s", x.getRoomUid(), x.getStatDate()),
|
||||
return uniqueKeyList.stream().collect(Collectors.toMap(x -> String.format("%s_%s" , x.getRoomUid(), x.getStatDate()),
|
||||
x -> x));
|
||||
}
|
||||
|
||||
public RoomDayDiamondRewardRecvRecord getUniqueKeyOne(Integer partitionId, String statDate, Long roomUid) {
|
||||
public RoomDayDiamondRewardRecvRecord getUniqueKeyOne(Integer partitionId, String statDate, Long roomUid) {
|
||||
return baseMapper.getUniqueKeyOne(partitionId, statDate, roomUid);
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,14 @@ public interface RoomDayDiamondRewardService extends IService<RoomDayDiamondRewa
|
||||
*/
|
||||
BigDecimal calGoldReward(TreeMap<BigDecimal, RoomDayDiamondReward> treeMap, BigDecimal diamondNum);
|
||||
|
||||
/**
|
||||
* 根据钻石流水获取奖励
|
||||
* @param treeMap
|
||||
* @param diamondNum
|
||||
* @return
|
||||
*/
|
||||
RoomDayDiamondReward calGoldRewardEntity(TreeMap<BigDecimal, RoomDayDiamondReward> treeMap, BigDecimal diamondNum);
|
||||
|
||||
List<RoomDayDiamondReward> listByPartitionIdAsc(Integer partitionId);
|
||||
|
||||
RoomDayDiamondReward getByLevel(Integer partitionId, String level);
|
||||
|
@@ -166,7 +166,7 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
}
|
||||
|
||||
@Override
|
||||
public BusiResult send(Long id, Integer adminId) {
|
||||
public BusiResult send(Long id, Integer adminId) throws InterruptedException {
|
||||
RoomDayDiamondNum dayDiamondNum = roomDayDiamondNumService.getById(id);
|
||||
if (dayDiamondNum == null) {
|
||||
throw new AdminServiceException("记录id:" + id + "不存在");
|
||||
@@ -181,13 +181,7 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
throw new AdminServiceException("该区(" + PartitionEnum.getByPartitionId(partitionId).getDesc() + ")当天未结束,不允许发放");
|
||||
}
|
||||
|
||||
RoomDayDiamondRewardRecvRecord uniqueKeyOne = roomDayDiamondRewardRecvRecordService
|
||||
.getUniqueKeyOne(partitionId, dayDiamondNum.getStatDate(), dayDiamondNum.getRoomUid());
|
||||
if (uniqueKeyOne != null && uniqueKeyOne.getRewardGold().compareTo(BigDecimal.ZERO) > 0) {
|
||||
throw new AdminServiceException("该房间房主今日已经在app日常任务中领取过奖励,不允许发放");
|
||||
}
|
||||
|
||||
String lockKey = "RoomDayDiamondNum:" + id;
|
||||
String lockKey = String .format("RoomDayDiamondNum:%s_%s_%s", partitionId, dayDiamondNum.getStatDate(), dayDiamondNum.getRoomUid());
|
||||
RLock lock = redissonClient.getLock(lockKey);
|
||||
boolean locked = false;
|
||||
try {
|
||||
@@ -196,6 +190,11 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
log.error("房间日流水奖励已经发放,id:{}", id.toString());
|
||||
throw new ServiceException(BusiStatus.SERVERERROR);
|
||||
}
|
||||
RoomDayDiamondRewardRecvRecord uniqueKeyOne = roomDayDiamondRewardRecvRecordService
|
||||
.getUniqueKeyOne(partitionId, dayDiamondNum.getStatDate(), dayDiamondNum.getRoomUid());
|
||||
if (uniqueKeyOne != null && uniqueKeyOne.getRewardGold().compareTo(BigDecimal.ZERO) > 0) {
|
||||
throw new AdminServiceException("该房间房主今日已经在app日常任务中领取过奖励,不允许发放");
|
||||
}
|
||||
if (checkExist(partitionId, dayDiamondNum.getRoomUid(), dayDiamondNum.getStatDate())) {
|
||||
throw new AdminServiceException("该房间奖励已经发放");
|
||||
}
|
||||
@@ -223,8 +222,6 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl<RoomDayDi
|
||||
BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD, goldReward.doubleValue(), userPurse));
|
||||
baseSendService.sendSystemMsg(roomUid.toString(),
|
||||
I18NMessageSourceUtil.getMessage(I18nAlertEnum.ROOM_DAY_DIAMOND_REWARD_SYS, new Object[]{dayDiamondNum.getGoldNum(), goldReward}, partitionId));
|
||||
} catch (InterruptedException e) {
|
||||
throw new AdminServiceException(BusiStatus.SERVERBUSY);
|
||||
} finally {
|
||||
if (locked) {
|
||||
lock.unlock();
|
||||
|
@@ -38,11 +38,20 @@ public class RoomDayDiamondRewardServiceImpl extends ServiceImpl<RoomDayDiamondR
|
||||
|
||||
@Override
|
||||
public BigDecimal calGoldReward(TreeMap<BigDecimal, RoomDayDiamondReward> treeMap, BigDecimal diamondNum) {
|
||||
Map.Entry<BigDecimal, RoomDayDiamondReward> totalLevelInfoEntry = treeMap.headMap(diamondNum, true).lastEntry();
|
||||
if (totalLevelInfoEntry == null) {
|
||||
RoomDayDiamondReward diamondReward = this.calGoldRewardEntity(treeMap, diamondNum);
|
||||
if (diamondReward == null) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return totalLevelInfoEntry.getValue().getRewardGold();
|
||||
return diamondReward.getRewardGold();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RoomDayDiamondReward calGoldRewardEntity(TreeMap<BigDecimal, RoomDayDiamondReward> treeMap, BigDecimal diamondNum) {
|
||||
Map.Entry<BigDecimal, RoomDayDiamondReward> totalLevelInfoEntry = treeMap.headMap(diamondNum, true).lastEntry();
|
||||
if (totalLevelInfoEntry == null) {
|
||||
return null;
|
||||
}
|
||||
return totalLevelInfoEntry.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -32,5 +32,6 @@
|
||||
partition_id = #{partitionId}
|
||||
and stat_date = #{statDate}
|
||||
AND room_uid = #{roomUid}
|
||||
GROUP BY stat_date, room_uid
|
||||
</select>
|
||||
</mapper>
|
||||
|
@@ -21,6 +21,6 @@ public class RoomDayDiamondRewardController {
|
||||
@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);
|
||||
return roomDayDiamondRewardRecvRecordService.receive(uid, roomUid, receiveDate);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user