From b9cee71c31f5334bb113749440655743d9a1e8e4 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Wed, 10 Sep 2025 18:24:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E4=BB=BB=E5=8A=A1=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E6=97=A5=E6=B5=81=E6=B0=B4=E8=BF=94=E5=9B=9E=E4=BB=8A=E5=A4=A9?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... RoomDayDiamondRewardAdminController.java} | 4 +- .../accompany/common/status/BusiStatus.java | 1 + .../vo/dailytask/DailyTaskRoomDiamondVo.java | 2 + .../handler/RoomDayDiamondHandler.java | 54 ++++++--- .../RoomDayDiamondRewardRecordService.java | 2 +- ...RoomDayDiamondRewardRecvRecordService.java | 113 +++++++++++------- .../room/RoomDayDiamondRewardService.java | 8 ++ ...RoomDayDiamondRewardRecordServiceImpl.java | 17 ++- .../impl/RoomDayDiamondRewardServiceImpl.java | 15 ++- .../RoomDayDiamondRewardRecvRecordMapper.xml | 1 + .../room/RoomDayDiamondRewardController.java | 2 +- 11 files changed, 142 insertions(+), 77 deletions(-) rename accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/{RoomDayDiamondRewardController.java => RoomDayDiamondRewardAdminController.java} (96%) diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardAdminController.java similarity index 96% rename from accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardController.java rename to accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardAdminController.java index c465264fa..32e1b46e6 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/room/RoomDayDiamondRewardAdminController.java @@ -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()); } } diff --git a/accompany-base/accompany-common/src/main/java/com/accompany/common/status/BusiStatus.java b/accompany-base/accompany-common/src/main/java/com/accompany/common/status/BusiStatus.java index b67dca503..1d231a266 100644 --- a/accompany-base/accompany-common/src/main/java/com/accompany/common/status/BusiStatus.java +++ b/accompany-base/accompany-common/src/main/java/com/accompany/common/status/BusiStatus.java @@ -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; diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskRoomDiamondVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskRoomDiamondVo.java index dddbece74..39f760b87 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskRoomDiamondVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskRoomDiamondVo.java @@ -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 levelVos; } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java index d9c750170..0258a88b5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java @@ -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 rewardList = new ArrayList<>(); dailyTaskRoomDiamondVo.setLevelVos(rewardList); - Map levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, dayDate); + Map 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; + } } \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecordService.java index 420207c38..67bbaa697 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecordService.java @@ -17,7 +17,7 @@ public interface RoomDayDiamondRewardRecordService extends IService 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); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecvRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecvRecordService.java index 909d8cb4b..765fad148 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecvRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardRecvRecordService.java @@ -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 { @@ -48,51 +51,73 @@ public class RoomDayDiamondRewardRecvRecordService extends ServiceImpl 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 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 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 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); } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardService.java index 07185591e..c9d46e5bf 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomDayDiamondRewardService.java @@ -25,6 +25,14 @@ public interface RoomDayDiamondRewardService extends IService treeMap, BigDecimal diamondNum); + /** + * 根据钻石流水获取奖励 + * @param treeMap + * @param diamondNum + * @return + */ + RoomDayDiamondReward calGoldRewardEntity(TreeMap treeMap, BigDecimal diamondNum); + List listByPartitionIdAsc(Integer partitionId); RoomDayDiamondReward getByLevel(Integer partitionId, String level); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/RoomDayDiamondRewardRecordServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/RoomDayDiamondRewardRecordServiceImpl.java index 566d60f2a..66d2456a2 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/RoomDayDiamondRewardRecordServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/RoomDayDiamondRewardRecordServiceImpl.java @@ -166,7 +166,7 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl 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 0) { + throw new AdminServiceException("该房间房主今日已经在app日常任务中领取过奖励,不允许发放"); + } if (checkExist(partitionId, dayDiamondNum.getRoomUid(), dayDiamondNum.getStatDate())) { throw new AdminServiceException("该房间奖励已经发放"); } @@ -223,8 +222,6 @@ public class RoomDayDiamondRewardRecordServiceImpl extends ServiceImpl treeMap, BigDecimal diamondNum) { - Map.Entry 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 treeMap, BigDecimal diamondNum) { + Map.Entry totalLevelInfoEntry = treeMap.headMap(diamondNum, true).lastEntry(); + if (totalLevelInfoEntry == null) { + return null; + } + return totalLevelInfoEntry.getValue(); } @Override diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDayDiamondRewardRecvRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDayDiamondRewardRecvRecordMapper.xml index b7cbda916..39714d3c4 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDayDiamondRewardRecvRecordMapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomDayDiamondRewardRecvRecordMapper.xml @@ -32,5 +32,6 @@ partition_id = #{partitionId} and stat_date = #{statDate} AND room_uid = #{roomUid} + GROUP BY stat_date, room_uid diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDayDiamondRewardController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDayDiamondRewardController.java index 940ad2624..92355c8ae 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDayDiamondRewardController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/room/RoomDayDiamondRewardController.java @@ -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); } }