From 04f8ec61a68132b3820fa57457c193ab65d1af1a Mon Sep 17 00:00:00 2001 From: liaozetao <1107136310@qq.com> Date: Tue, 26 Mar 2024 19:48:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=81=E7=A4=BC=E5=AE=8C=E6=88=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B7=BB=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/accompany/common/redis/RedisKey.java | 2 ++ .../mq/consumer/ActUserTaskConsumer.java | 1 + .../business/activity/dto/ActTaskContext.java | 5 +++++ .../activity/handle/IGiftBoxTaskHandler.java | 2 ++ .../activity/listener/ActTaskListener.java | 1 + .../handler/AprilFoolsDayBoxHandler.java | 4 ++++ .../business/message/GiftMessage.java | 12 +++++++++++ .../service/gift/GiftSendService.java | 21 +++++++++++++++---- .../mq/model/ActUserTaskMqMessage.java | 5 +++++ 9 files changed, 49 insertions(+), 4 deletions(-) diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/common/redis/RedisKey.java b/accompany-base/accompany-core/src/main/java/com/accompany/common/redis/RedisKey.java index bfe5c286f..8a084a3fa 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/common/redis/RedisKey.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/common/redis/RedisKey.java @@ -2295,6 +2295,8 @@ public enum RedisKey { act_user_complete_task_lock, + act_user_complete_task_status, + mq_status, act_user_task_score_for_send, diff --git a/accompany-business/accompany-business-festival-activity/fastival-activity-mq/src/main/java/com/accompany/mq/consumer/ActUserTaskConsumer.java b/accompany-business/accompany-business-festival-activity/fastival-activity-mq/src/main/java/com/accompany/mq/consumer/ActUserTaskConsumer.java index 86726bd7e..eb68fce20 100644 --- a/accompany-business/accompany-business-festival-activity/fastival-activity-mq/src/main/java/com/accompany/mq/consumer/ActUserTaskConsumer.java +++ b/accompany-business/accompany-business-festival-activity/fastival-activity-mq/src/main/java/com/accompany/mq/consumer/ActUserTaskConsumer.java @@ -183,6 +183,7 @@ public class ActUserTaskConsumer extends AbstractMessageListenerlambdaQuery() .eq(ActUserTask::getActivityCode, activityCode) diff --git a/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/activity/listener/ActTaskListener.java b/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/activity/listener/ActTaskListener.java index 475e1c0a7..7791e5331 100644 --- a/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/activity/listener/ActTaskListener.java +++ b/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/activity/listener/ActTaskListener.java @@ -106,6 +106,7 @@ public class ActTaskListener implements ApplicationListener { message.setGiftValue(giftMessage.getGoldNum()); message.setMessTime(now.getTime()); message.setGiftNum(giftNum); + message.setGiftSendUuid(giftMessage.getGiftSendUuid()); mqMessageProducer.send(MqConstant.ACT_USER_TASK_TOPIC, message); } } catch (Exception e) { diff --git a/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/fools/handler/AprilFoolsDayBoxHandler.java b/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/fools/handler/AprilFoolsDayBoxHandler.java index 2ec906063..fd429225a 100644 --- a/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/fools/handler/AprilFoolsDayBoxHandler.java +++ b/accompany-business/accompany-business-festival-activity/festival-activity-service/src/main/java/com/accompany/business/fools/handler/AprilFoolsDayBoxHandler.java @@ -10,6 +10,7 @@ import com.accompany.business.fools.task.AprilFoolsDayBoxTaskService; import com.accompany.business.service.SendSysMsgService; import com.accompany.business.service.room.RoomService; import com.accompany.business.vo.message.MessageTemplate; +import com.accompany.common.redis.RedisKey; import com.accompany.core.model.Room; import com.accompany.core.model.Users; import com.accompany.core.service.user.UsersBaseService; @@ -47,6 +48,9 @@ public class AprilFoolsDayBoxHandler extends IGiftBoxTaskHandler { @Override protected boolean eq(ActTaskCondition actTaskCondition, ActTaskContext context) { + if (jedisService.exits(RedisKey.act_user_complete_task_status.getKey(context.getGiftSendUuid()))) { + return false; + } boolean isComplete = super.eq(actTaskCondition, context); if (isComplete) { Long roomUid = context.getRoomUid(); diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/message/GiftMessage.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/message/GiftMessage.java index 43eecba7e..f9b574538 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/message/GiftMessage.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/message/GiftMessage.java @@ -26,6 +26,11 @@ public class GiftMessage extends BaseMqMessage { @Deprecated private Boolean luckyBagGift; // 是否是福袋开出的礼物 + /** + * 判断是否为同一次送礼操作 + */ + private String giftSendUuid; + @Override public String toString() { return "GiftMessage{" + @@ -174,4 +179,11 @@ public class GiftMessage extends BaseMqMessage { this.luckyBagGift = luckyBagGift; } + public String getGiftSendUuid() { + return giftSendUuid; + } + + public void setGiftSendUuid(String giftSendUuid) { + this.giftSendUuid = giftSendUuid; + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/gift/GiftSendService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/gift/GiftSendService.java index 5737b5849..7cdf8b760 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/gift/GiftSendService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/gift/GiftSendService.java @@ -405,7 +405,15 @@ public class GiftSendService extends BaseService { */ private void sendGiftMessage2MQ(long sendUid, long recvUid, Long roomUid, int giftId, byte giftConsumeType, byte giftType, int giftNum, Long goldNum, byte sendType, Byte roomType, String msg, int giftSource, Boolean luckyBagGift) { - GiftMessage message = buildGiftMessage(sendUid, recvUid, roomUid, giftId, giftConsumeType, giftType, giftNum, goldNum, sendType, roomType, msg, giftSource, luckyBagGift); + sendGiftMessage2MQ(sendUid, recvUid, roomUid, giftId, giftConsumeType, giftType, giftNum, goldNum, sendType, roomType, msg, giftSource, luckyBagGift, UUID.randomUUID().toString()); + } + + /** + * 发送礼物消息到MQ处理(加钻石、写DB记录) + */ + private void sendGiftMessage2MQ(long sendUid, long recvUid, Long roomUid, int giftId, byte giftConsumeType, byte giftType, int giftNum, Long goldNum, + byte sendType, Byte roomType, String msg, int giftSource, Boolean luckyBagGift, String giftSendUuid) { + GiftMessage message = buildGiftMessage(sendUid, recvUid, roomUid, giftId, giftConsumeType, giftType, giftNum, goldNum, sendType, roomType, msg, giftSource, luckyBagGift, giftSendUuid); // 缓存消息的消费状态,便于队列消息做幂等处理 jedisService.hwrite(RedisKey.mq_gift_status.getKey(), message.getMessId(), gson.toJson(message)); rocketMQService.sendGiftMessage(message); @@ -513,7 +521,7 @@ public class GiftSendService extends BaseService { * @return */ private GiftMessage buildGiftMessage(Long sendUid, Long recvUid, Long roomUid, Integer giftId, Byte giftConsumeType, Byte giftType, - Integer giftNum, Long goldNum, Byte sendType, Byte roomType, String msg, Integer giftSource, Boolean luckyBagGift) { + Integer giftNum, Long goldNum, Byte sendType, Byte roomType, String msg, Integer giftSource, Boolean luckyBagGift, String giftSendUuid) { GiftMessage message = new GiftMessage(); message.setSendUid(sendUid); message.setRecvUid(recvUid); @@ -530,6 +538,7 @@ public class GiftSendService extends BaseService { message.setMsg(msg); message.setGiftSource(giftSource); message.setLuckyBagGift(luckyBagGift); + message.setGiftSendUuid(giftSendUuid); return message; } @@ -893,6 +902,8 @@ public class GiftSendService extends BaseService { List luckyBagRecordList = new ArrayList<>(); Gift displayGift = gifts.get(0); + String giftSendUuid = UUID.randomUUID().toString(); + // 处理用户抽奖后逻辑 for (Long receiveUid : drawMap.keySet()) { // 用户抽到奖池礼物列表 @@ -932,7 +943,7 @@ public class GiftSendService extends BaseService { // 发送队列消息 sendGiftMessage2MQ(sendUid, receiveUid, roomUid, drawGift.getGiftId(), drawGift.getConsumeType(), drawGift.getGiftType(), record.getGiftNum(), record.getTotalPlatformValue(), - sendType, roomType, msg, giftSource, true); + sendType, roomType, msg, giftSource, true, giftSendUuid); } Long totalPlaformValue = recordList.stream().mapToLong(LuckyBagRecord::getTotalPlatformValue).sum(); @@ -1052,6 +1063,8 @@ public class GiftSendService extends BaseService { Map> recordMap = new HashMap<>(); + String giftSendUuid = UUID.randomUUID().toString(); + for (Long recvUid : recvUids) { // 抽奖 List recordList = luckyBagLinearPoolService.pollReward(luckyBagGiftId, giftNum, sendUid, recvUid); @@ -1085,7 +1098,7 @@ public class GiftSendService extends BaseService { // 房间流水根据实际开出的礼物价值,发送队列消息 sendGiftMessage2MQ(sendUid, recvUid, roomUid, giftId, g.getConsumeType(), g.getGiftType(), record.getGiftNum(), record.getTotalPlatformValue(), - sendType, room != null ? room.getType() : null, msg, giftSource, true); + sendType, room != null ? room.getType() : null, msg, giftSource, true, giftSendUuid); } recordMap.put(recvUid, recordList); diff --git a/accompany-mq/accompany-mq-sdk/src/main/java/com/accompany/mq/model/ActUserTaskMqMessage.java b/accompany-mq/accompany-mq-sdk/src/main/java/com/accompany/mq/model/ActUserTaskMqMessage.java index 4a2333077..76fe8233c 100644 --- a/accompany-mq/accompany-mq-sdk/src/main/java/com/accompany/mq/model/ActUserTaskMqMessage.java +++ b/accompany-mq/accompany-mq-sdk/src/main/java/com/accompany/mq/model/ActUserTaskMqMessage.java @@ -44,4 +44,9 @@ public class ActUserTaskMqMessage extends BaseMqMessage { * 礼物数量 */ private Integer giftNum; + + /** + * 区分是否为同一次送礼操作 + */ + private String giftSendUuid; }