修改发送礼物mq逻辑

This commit is contained in:
liaozetao
2024-03-25 18:39:02 +08:00
parent ab93ff06e4
commit 77af2423dc
4 changed files with 62 additions and 14 deletions

View File

@@ -64,6 +64,7 @@ public class ActUserTaskConsumer extends AbstractMessageListener<ActUserTaskMqMe
Long sendUid = object.getSendUid();
Long receiveUid = object.getReceiveUid();
Date messTime = new Date(object.getMessTime());
Integer giftNum = object.getGiftNum();
List<ActActivity> actActivities = actActivityService.list(Wrappers.<ActActivity>lambdaQuery()
.eq(ActActivity::getActivityStatus, Constant.Yes1No0.YES)
.le(ActActivity::getStartTime, messTime)
@@ -86,8 +87,10 @@ public class ActUserTaskConsumer extends AbstractMessageListener<ActUserTaskMqMe
//若锁超时,直接执行
String lockVal = jedisLockService.lock(redisKey, 2 * 60 * 1000);
try {
for (ActTask parentTask : parentTasks) {
iterate(actActivity, object, parentTask, actTasks);
for (int i = 0; i < giftNum; i++) {
for (ActTask parentTask : parentTasks) {
iterate(actActivity, object, parentTask, actTasks);
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);

View File

@@ -5,6 +5,7 @@ import com.accompany.business.activity.model.ActActivity;
import com.accompany.business.activity.service.ActActivityService;
import com.accompany.business.event.GiftMessageEvent;
import com.accompany.business.message.GiftMessage;
import com.accompany.business.service.redenvelope.RedEnvelopeRainService;
import com.accompany.common.constant.Constant;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.utils.DateTimeUtil;
@@ -35,6 +36,9 @@ public class ActTaskListener implements ApplicationListener<GiftMessageEvent> {
@Autowired
private ActActivityService actActivityService;
@Autowired
private RedEnvelopeRainService redEnvelopeRainService;
@Autowired
private JedisService jedisService;
@@ -94,16 +98,15 @@ public class ActTaskListener implements ApplicationListener<GiftMessageEvent> {
jedisService.hincrBy(roomKey, roomUid.toString(), goldNum);
jedisService.expire(roomKey, HALF_MONTH);
}
for (int i = 0; i < giftNum; i++) {
ActUserTaskMqMessage message = new ActUserTaskMqMessage();
message.setRoomUid(giftMessage.getRoomUid());
message.setSendUid(giftMessage.getSendUid());
message.setReceiveUid(giftMessage.getRecvUid());
message.setGiftId(giftId);
message.setGiftValue(giftMessage.getGoldNum());
message.setMessTime(now.getTime());
mqMessageProducer.send(MqConstant.ACT_USER_TASK_TOPIC, message);
}
ActUserTaskMqMessage message = new ActUserTaskMqMessage();
message.setRoomUid(giftMessage.getRoomUid());
message.setSendUid(giftMessage.getSendUid());
message.setReceiveUid(giftMessage.getRecvUid());
message.setGiftId(giftId);
message.setGiftValue(giftMessage.getGoldNum());
message.setMessTime(now.getTime());
message.setGiftNum(giftNum);
mqMessageProducer.send(MqConstant.ACT_USER_TASK_TOPIC, message);
}
} catch (Exception e) {
log.error(e.getMessage(), e);

View File

@@ -1,16 +1,25 @@
package com.accompany.business.service.redenvelope.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.accompany.business.activity.model.ActActivity;
import com.accompany.business.constant.redenvelope.OuterRedEnvelopeTypeEnum;
import com.accompany.business.constant.redenvelope.RedEnvelopStateEnum;
import com.accompany.business.model.redenvelope.RedEnvelope;
import com.accompany.business.model.redenvelope.RedEnvelopeRain;
import com.accompany.business.model.redenvelope.RedEnvelopeRainRecord;
import com.accompany.business.mybatismapper.redenvelope.RedEnvelopeRainMapper;
import com.accompany.business.service.redenvelope.RedEnvelopeRainRecordService;
import com.accompany.business.service.redenvelope.RedEnvelopeRainService;
import com.accompany.business.service.redenvelope.RedEnvelopeService;
import com.accompany.business.service.redenvelope.strategy.RedEnvelopeContext;
import com.accompany.business.vo.redenvelope.OpenRedEnvelopeRequest;
import com.accompany.business.vo.redenvelope.SendRedEnvelopeRequest;
import com.accompany.common.redis.RedisKey;
import com.accompany.core.model.Room;
import com.accompany.core.mybatismapper.RoomMapper;
import com.accompany.core.service.common.JedisService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -20,6 +29,8 @@ import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author: liaozetao
@@ -30,6 +41,8 @@ import java.util.List;
@Service
public class RedEnvelopeRainServiceImpl extends ServiceImpl<RedEnvelopeRainMapper, RedEnvelopeRain> implements RedEnvelopeRainService {
@Autowired
private RoomMapper roomMapper;
@Autowired
private RedEnvelopeService redEnvelopeService;
@@ -107,8 +120,32 @@ public class RedEnvelopeRainServiceImpl extends ServiceImpl<RedEnvelopeRainMappe
}
public boolean isUnderway(Long roomUid) {
String redisKey = RedisKey.red_envelope_rain_list.getKey(String.valueOf(roomUid));
return jedisService.exits(redisKey) || jedisService.llen(redisKey) != 0;
Room room = roomMapper.selectByPrimaryKey(roomUid);
if (room == null) {
return false;
}
Byte permitType = room.getIsPermitRoom();
List<RedEnvelopeRain> redEnvelopeRains = getRedEnvelopeRainByPermitType(Integer.valueOf(permitType));
if (CollectionUtil.isEmpty(redEnvelopeRains)) {
return false;
}
List<Long> redEnvelopeRainIds = redEnvelopeRains.stream().map(RedEnvelopeRain::getId).collect(Collectors.toList());
List<RedEnvelopeRainRecord> redEnvelopeRainRecords = redEnvelopeRainRecordService.list(Wrappers.<RedEnvelopeRainRecord>lambdaQuery()
.select(RedEnvelopeRainRecord::getRedEnvelopeId)
.eq(RedEnvelopeRainRecord::getRoomUid, roomUid)
.isNotNull(RedEnvelopeRainRecord::getRedEnvelopeId)
.in(RedEnvelopeRainRecord::getRedEnvelopeRainId, redEnvelopeRainIds));
if (CollectionUtil.isEmpty(redEnvelopeRainRecords)) {
return false;
}
List<Long> redEnvelopeIds = redEnvelopeRainRecords.stream().map(RedEnvelopeRainRecord::getRedEnvelopeId).filter(Objects::nonNull).collect(Collectors.toList());
for (Long redEnvelopeId : redEnvelopeIds) {
RedEnvelopStateEnum state = redEnvelopeService.stateById(redEnvelopeId);
if (RedEnvelopStateEnum.WILL.compareTo(state) == 0 || RedEnvelopStateEnum.ING.compareTo(state) == 0) {
return true;
}
}
return false;
}
}

View File

@@ -39,4 +39,9 @@ public class ActUserTaskMqMessage extends BaseMqMessage {
* 消息时间
*/
private Long messTime;
/**
* 礼物数量
*/
private Integer giftNum;
}