package com.ks.daylucky.util.mq.consumer;
|
|
import com.ks.daylucky.exception.UserMsgException;
|
import com.ks.daylucky.pojo.DTO.UserMsgSettings;
|
import com.ks.daylucky.pojo.VO.SimpleUser;
|
import com.ks.daylucky.service.UserInfoExtraService;
|
import com.ks.daylucky.service.UserInfoService;
|
import com.ks.daylucky.service.UserMsgService;
|
import com.ks.daylucky.util.factory.LuckyMsgContentFactory;
|
import com.ks.daylucky.util.factory.UserMsgFactory;
|
import com.ks.daylucky.util.mq.CMQManager;
|
import com.ks.lucky.pojo.DO.*;
|
import com.ks.lucky.pojo.DTO.ActivitySimpleUser;
|
import com.ks.lucky.pojo.DTO.mq.*;
|
import com.ks.lucky.remote.service.LuckyActivityAwardResultService;
|
import com.ks.lucky.remote.service.LuckyActivityAwardService;
|
import com.ks.lucky.remote.service.LuckyActivityJoinAssistService;
|
import com.ks.lucky.remote.service.LuckyActivityJoinService;
|
import com.ks.lucky.utils.LuckyCMQConstant;
|
import com.ks.lucky.utils.mq.CMQConsumeRunner;
|
import com.qcloud.cmq.Message;
|
import org.apache.dubbo.config.annotation.Reference;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.mq.JobThreadExecutorServiceImpl;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public class MsgConsumer implements CMQConsumeRunner {
|
|
Logger logger = LoggerFactory.getLogger(MsgConsumer.class);
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Reference(version = "1.0.0",check = false)
|
private LuckyActivityJoinAssistService luckyActivityJoinAssistService;
|
|
@Reference(version = "1.0.0",check = false)
|
private LuckyActivityJoinService luckyActivityJoinService;
|
|
@Reference(version = "1.0.0",check = false)
|
private LuckyActivityAwardResultService luckyActivityAwardResultService;
|
|
@Reference(version = "1.0.0",check = false)
|
private LuckyActivityAwardService luckyActivityAwardService;
|
|
@Resource
|
private UserMsgService userMsgService;
|
|
private UserMsgSettings getUserMsgSetting(Long uid) {
|
return userInfoExtraService.getUserMsgSettings(uid);
|
}
|
|
/**
|
* 获取有效的参与者
|
*
|
* @param activityId
|
* @return
|
*/
|
private List<ActivitySimpleUser> getValidJoinerList(Long activityId) {
|
List<ActivitySimpleUser> list = new ArrayList<>();
|
//查询所有参与者
|
long count = luckyActivityJoinService.countJoiner(activityId, LuckyActivityJoinRecord.USER_TYPE_REAL);
|
int pageSize = 500;
|
int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
|
for (int i = 0; i < page; i++) {
|
List<ActivitySimpleUser> userList = luckyActivityJoinService.getJoinerList(activityId, LuckyActivityJoinRecord.USER_TYPE_REAL, i + 1, pageSize);
|
list.addAll(userList);
|
}
|
return list;
|
}
|
|
@Override
|
public void start() {
|
new JobThreadExecutorServiceImpl().run(new Runnable() {
|
@Override
|
public void run() {
|
List<Message> messageList = CMQManager.getInstance().consumeMsgMsg(16);
|
if (messageList != null) {
|
for (Message message : messageList) {
|
BaseMQMsg baseMQMsg = JsonUtil.getSimpleGson().fromJson(message.msgBody, BaseMQMsg.class);
|
String tag = baseMQMsg.getCmqMsgTag();
|
|
if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_STATE_CHANGE)) {
|
//活动状态改变
|
ActivityStateChangeMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityStateChangeMsgDTO.class);
|
List<ActivitySimpleUser> userList;
|
switch (dto.getState()) {
|
//开奖
|
case LuckyActivity.STATE_OPENED:
|
//查询所有参与者
|
userList = getValidJoinerList(dto.getActivityId());
|
for (ActivitySimpleUser user : userList) {
|
//判断是否中奖
|
UserMsgSettings settings = getUserMsgSetting(Long.parseLong(user.getUid()));
|
|
LuckyActivityAwardResult result = luckyActivityAwardResultService.getResult(user.getAppId(), user.getUid(), dto.getActivityId());
|
if (result != null) {
|
if (settings.getDrawnMsg()) {
|
LuckyActivityAwards awards = luckyActivityAwardService.getAwardDetail(result.getAwardId());
|
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(result.getUid()), LuckyMsgContentFactory.createDrawn(dto.getActivityId(), awards.getAwardName())));
|
} catch (UserMsgException e) {
|
logger.error("添加中奖消息出错", e.getMessage(), result.getId());
|
}
|
}
|
} else {
|
if (settings.getNotDrawnMsg()) {
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createNotDrawn(dto.getActivityId())));
|
} catch (UserMsgException e) {
|
logger.error("添加未中奖消息出错", e.getMessage(), user.getUid(), dto.getActivityId());
|
}
|
}
|
}
|
}
|
break;
|
|
case LuckyActivity.STATE_OPEN_FAIL:
|
userList = getValidJoinerList(dto.getActivityId());
|
for (ActivitySimpleUser user : userList) {
|
//判断是否中奖
|
UserMsgSettings settings = getUserMsgSetting(Long.parseLong(user.getUid()));
|
if (settings.getNotOpenActivityMsg()) {
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createOpenFail(dto.getActivityId())));
|
} catch (UserMsgException e) {
|
logger.error("添加未开奖消息出错", e.getMessage(), user.getUid(), dto.getActivityId());
|
}
|
}
|
}
|
|
|
break;
|
}
|
|
|
} else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_JOIN)) {
|
ActivityJoinMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityJoinMsgDTO.class);
|
UserMsgSettings settings = getUserMsgSetting(Long.parseLong(dto.getUid()));
|
if (settings.getJoinActivityMsg()) {
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createJoinSuccess(dto.getActivityId())));
|
} catch (UserMsgException e) {
|
logger.error("添加参与成功消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
|
}
|
}
|
|
//查询是否有助力别人
|
LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(dto.getJoinId(), dto.getAppId(), dto.getUid(), ActivityJoinAssistEvent.assistJoin);
|
if (assist != null) {
|
//是否助力过别人
|
LuckyActivityJoinRecord joinRecord = luckyActivityJoinService.getJoinRecord(assist.getJoinId());
|
if (joinRecord != null) {
|
settings = getUserMsgSetting(Long.parseLong(joinRecord.getUid()));
|
if (settings.getAssistSuccessMsg()) {
|
SimpleUser user = userInfoService.getSimpleUser(Long.parseLong(dto.getUid()));
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(joinRecord.getUid()), LuckyMsgContentFactory.createAssistAndJoin(dto.getActivityId(), user, assist.getWeight())));
|
} catch (UserMsgException e) {
|
logger.error("添加助力成功且自己参加消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
|
}
|
|
}
|
}
|
}
|
|
|
} else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ASSIST)) {
|
//助力
|
ActivityAssistMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityAssistMsgDTO.class);
|
UserMsgSettings settings = getUserMsgSetting(Long.parseLong(dto.getUid()));
|
if (settings.getAssistSuccessMsg()) {
|
LuckyActivityJoinRecord record = luckyActivityJoinService.getJoinInfo(dto.getActivityId(), dto.getAppId(), dto.getTargetUid());
|
if (record != null) {
|
LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(record.getId(), dto.getAppId(), dto.getUid(), ActivityJoinAssistEvent.assist);
|
SimpleUser user = userInfoService.getSimpleUser(Long.parseLong(dto.getUid()));
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getTargetUid()), LuckyMsgContentFactory.createAssist(dto.getActivityId(), user, assist.getWeight())));
|
} catch (UserMsgException e) {
|
logger.error("添加助力成功消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
|
}
|
}
|
}
|
|
} else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_DRAWN)) {
|
ActivityDrawnMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityDrawnMsgDTO.class);
|
switch (dto.getAwardResultState()) {
|
case LuckyActivityAwardResult.STATE_OUT_OF_DATE:
|
try {
|
userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createReceiveOutDate(dto.getActivityId())));
|
} catch (UserMsgException e) {
|
logger.error("添加过期未领消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
|
}
|
|
break;
|
}
|
}
|
CMQManager.getInstance().deleteMsgMsg(message.receiptHandle);
|
}
|
}
|
}
|
});
|
}
|
|
@Override
|
public void destroy() {
|
|
}
|
}
|