diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java index bf338028f..73c715caf 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java @@ -162,8 +162,9 @@ public class GuildTaskService { GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel()); if (existOne != null) { //不是当天并且等级已经达标,计算下一级 - RMap receicveStatus = this.receicveStatus(existOne.getTaskKey(), existOne.getGuildId()); - if (statDate.equals(existOne.getStatDate()) && !receicveStatus.containsKey(existOne.getLevel())) { + RMap receicveStatus = receicveStatus(existOne.getTaskKey(), existOne.getGuildId(), existOne.getId()); + RMap oldReceicveStatus = oldReceicveStatus(existOne.getTaskKey(), existOne.getGuildId()); + if (statDate.equals(existOne.getStatDate()) && (!receicveStatus.containsKey(existOne.getLevel()) || !oldReceicveStatus.containsKey(existOne.getLevel()))) { existOne.setDiamondNum(diamond); existOne.setAnchorNum(memberNum.intValue()); existOne.setAnchorMicReachNum(anchorReachNum); @@ -428,10 +429,11 @@ public class GuildTaskService { if (reachRecord.getReceiveStatus() > 0) { throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST); } - RMap receicveStatus = this.receicveStatus(reachRecord.getTaskKey(), reachRecord.getGuildId()); - if (receicveStatus.fastPutIfAbsent(reachRecord.getLevel(), 1)) { + RMap receicveStatus = this.receicveStatus(reachRecord.getTaskKey(), reachRecord.getGuildId(), reachId); + if (!receicveStatus.fastPutIfAbsent(reachRecord.getLevel(), 1)) { throw new ServiceException(BusiStatus.ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST); } + receicveStatus.expire(Duration.ofDays(15)); Integer guildId = reachRecord.getGuildId(); Guild guild = guildService.getVaildGuildById(guildId); if (guild == null) { @@ -529,7 +531,11 @@ public class GuildTaskService { baseSendService.sendSystemMsg(uidStr, tip); } - private RMap receicveStatus(String taskKey, Integer guildId) { + private RMap receicveStatus(String taskKey, Integer guildId, Long reachId) { + return redissonClient.getMap(guild_task_receive.getKey(taskKey, guildId.toString(), reachId.toString()), new TypedJsonJacksonCodec(Integer.class, Integer.class)); + } + + private RMap oldReceicveStatus(String taskKey, Integer guildId) { return redissonClient.getMap(guild_task_receive.getKey(taskKey, guildId.toString()), new TypedJsonJacksonCodec(Integer.class, Integer.class)); } }