diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/ExtraDiamondDayService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/ExtraDiamondDayService.java index 6f15b5c3b..0c255e887 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/ExtraDiamondDayService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/ExtraDiamondDayService.java @@ -5,6 +5,7 @@ import com.accompany.business.model.extradiamond.GuildExtraDiamondDay; import com.accompany.business.model.extradiamond.RoomExtraDiamondDay; import com.accompany.business.model.guild.Guild; import com.accompany.business.model.guild.GuildMember; +import com.accompany.business.service.guild.GuildMemberService; import com.accompany.business.service.guild.GuildService; import com.accompany.business.service.purse.UserPurseService; import com.accompany.common.status.BusiStatus; @@ -21,7 +22,9 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import static com.accompany.common.constant.Constant.SysConfId.EXTRA_DIAMOND_RATE_CONFIG; @@ -42,6 +45,8 @@ public class ExtraDiamondDayService { private UserPurseService userPurseService; @Autowired private RedissonClient redissonClient; + @Autowired + private GuildMemberService guildMemberService; public void updateGuildExtraDiamond(GuildMember guildMember, String cycleDate, String statDate, Double normalDiamondNum, Double luckyDiamondNum, Date time) { @@ -102,16 +107,29 @@ public class ExtraDiamondDayService { if (!locked){ throw new ServiceException(BusiStatus.SERVERBUSY); } - //主播额外奖励 + Map guildMemberMap = guildMemberService.mapByPartitionId(partitionId); + if (guildMemberMap.isEmpty()) { + log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember"); + return; + } List guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate); if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) { - for (GuildExtraDiamondDay diamondDay : guildExtraDiamondDays) { + Iterator iterator = guildExtraDiamondDays.iterator(); + while (iterator.hasNext()) { + GuildExtraDiamondDay diamondDay = iterator.next(); + if (guildMemberMap.get(diamondDay.getGuildMemberId()) == null) { + iterator.remove(); + continue; + } BigDecimal anchorExtraNum = diamondDay.getDiamondNum().multiply(diamondRateConfig.getAnchorExtraRate()); BigDecimal anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate()); diamondDay.setAnchorExtraNum(anchorExtraNum); diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum); diamondDay.setUpdateTime(updateTime); } + if (CollectionUtils.isEmpty(guildExtraDiamondDays)) { + return; + } boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays); if (updateBatchById) { for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) { @@ -131,43 +149,6 @@ public class ExtraDiamondDayService { lock.unlock(); } } - - //房间额外奖励 - lockKey = "sendLastDayDiamondtask_room_" + partitionId + "_" + statDate; - lock = redissonClient.getLock(lockKey); - locked = false; - try { - locked = lock.tryLock(20, TimeUnit.SECONDS); - if (!locked){ - throw new ServiceException(BusiStatus.SERVERBUSY); - } - - List roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate); - if (CollectionUtils.isNotEmpty(roomExtraDiamondDays)) { - for (RoomExtraDiamondDay roomExtraDiamondDay : roomExtraDiamondDays) { - BigDecimal anchorExtraNum = roomExtraDiamondDay.getDiamondNum().multiply(diamondRateConfig.getRoomExtraRate()); - BigDecimal anchorExtraLuckyNum = roomExtraDiamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getRoomExtraLuckyRate()); - roomExtraDiamondDay.setRoomExtraNum(anchorExtraNum); - roomExtraDiamondDay.setRoomExtraLuckyNum(anchorExtraLuckyNum); - roomExtraDiamondDay.setUpdateTime(updateTime); - } - boolean updateBatchById = roomExtraDiamondDayService.updateBatchById(roomExtraDiamondDays); - if (updateBatchById) { - for (RoomExtraDiamondDay extraDiamondDay : roomExtraDiamondDays) { - BigDecimal addGold = extraDiamondDay.getRoomExtraNum().add(extraDiamondDay.getRoomExtraLuckyNum()); - if (addGold.compareTo(BigDecimal.ZERO) > 0) { - userPurseService.addGold(extraDiamondDay.getUid(), addGold.doubleValue(), ROOM_EXTRA_GOLD); - } - } - } - } - } catch (Exception e) { - log.error("sendLastDayDiamondtask room error" , e); - } finally { - if (locked){ - lock.unlock(); - } - } } public void sendRoomExtraDiamondTask(Integer partitionId, String statDate) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java index cf491ee5b..b13ab65f5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java @@ -127,4 +127,12 @@ public class GuildMemberService extends ServiceImpl mapByPartitionId(Integer partitionId) { + return this.lambdaQuery() + .eq(GuildMember::getPartitionId, partitionId) + .eq(GuildMember::getEnable, Boolean.TRUE) + .list().stream() + .collect(Collectors.toMap(GuildMember::getUid, fm->fm)); + } }