From 898bc5aed4ba2d166fe41ca3ce61dad88adc449f Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Thu, 4 Jun 2026 20:28:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=A0=E9=80=81=E4=BB=96=E4=BA=BA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E9=87=91=E5=B8=81-=E6=94=B9=E6=88=90=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E6=8E=A5=E6=94=B6=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/listener/gift/GiveGiftsListener.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/GiveGiftsListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/GiveGiftsListener.java index 54f41331..58263160 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/GiveGiftsListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/GiveGiftsListener.java @@ -69,6 +69,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Timestamp; import java.util.*; +import java.util.HashSet; import java.util.stream.Collectors; import kotlin.Pair; @@ -493,6 +494,11 @@ public class GiveGiftsListener implements MessageListener { Map teamMemberMap = teamMemberService.mapByMemberIds(anchorUserIds); + Set acceptUserIds = event.getAccepts().stream() + .map(GiveAwayGiftRoomAccepts::getAcceptUserId) + .collect(Collectors.toSet()); + Set teamMemberIds = new HashSet<>(teamMemberService.listMemberIds(acceptUserIds)); + return event.getAccepts().stream().map(accept -> { // 接受人区域与金币比例 @@ -545,8 +551,8 @@ public class GiveGiftsListener implements MessageListener { acceptAmount = giftValue.getGiftValue().multiply(acceptAssistRatio).setScale(0, RoundingMode.DOWN); } else { // 普通礼物 - acceptAssistRatio = calculateAcceptAssistRatio(event, acceptRegion); - BigDecimal effectiveSendRatio = calculateEffectiveSendRatio(event, sendRegion, sendAssistRatio, acceptRegion, accept); + acceptAssistRatio = calculateAcceptAssistRatio(teamMemberIds, accept.getAcceptUserId(), acceptRegion); + BigDecimal effectiveSendRatio = calculateEffectiveSendRatio(event, sendRegion, sendAssistRatio, acceptRegion, accept, teamMemberIds); acceptAmount = enumConfigCacheService.giftGoldRatioFormula(effectiveSendRatio, giftValue.getGiftValue()); targetAmount = giftValue.getGiftValue() @@ -580,8 +586,8 @@ public class GiveGiftsListener implements MessageListener { /** * 计算接收方助力比例. */ - private BigDecimal calculateAcceptAssistRatio(GiveAwayGiftBatchEvent event, RegionConfig acceptRegion) { - if (userRegionGateway.isOrdinaryUser(event.getSendUserId())) { + private BigDecimal calculateAcceptAssistRatio(Set teamMemberIds, Long acceptUserId, RegionConfig acceptRegion) { + if (!teamMemberIds.contains(acceptUserId)) { return getAssistGiftToOtherGoldRatioNormal(acceptRegion.getId()); } return getAssistGiftToOtherGoldRatio(acceptRegion.getId()); @@ -592,7 +598,7 @@ public class GiveGiftsListener implements MessageListener { */ private BigDecimal calculateEffectiveSendRatio(GiveAwayGiftBatchEvent event, RegionConfig sendRegion, BigDecimal sendAssistRatio, RegionConfig acceptRegion, - GiveAwayGiftRoomAccepts accept) { + GiveAwayGiftRoomAccepts accept, Set teamMemberIds) { // 送给自己 if (Objects.equals(event.getSendUserId(), accept.getAcceptUserId())) { if (userRegionGateway.isOrdinaryUser(event.getSendUserId())) { @@ -601,7 +607,7 @@ public class GiveGiftsListener implements MessageListener { return sendAssistRatio; } // 送给别人 - return calculateAcceptAssistRatio(event, acceptRegion); + return calculateAcceptAssistRatio(teamMemberIds, accept.getAcceptUserId(), acceptRegion); } /**