活动改版,初版

back_recharge
duhui 2021-11-29 18:32:14 +08:00
parent d97164a2db
commit c91b204bdc
6 changed files with 160 additions and 97 deletions

View File

@ -32,7 +32,7 @@ public class GetSomeActivityInfoHandler extends BaseHandler<PlayerInfoProto.GetS
activityUpdateMap.put(activityId, activityMissionMap.get(activityId));
});
List<CommonProto.ActivityInfo> activityInfos =ActivityLogic.getInstance().getActivityInfos(activityUpdateMap, user.getPlayerInfoManager().getCreateTime());
List<CommonProto.ActivityInfo> activityInfos =ActivityLogic.getInstance().getActivityInfos(user,activityUpdateMap, user.getPlayerInfoManager().getCreateTime());
PlayerInfoProto.GetSomeActitityInfoRespone build = PlayerInfoProto.GetSomeActitityInfoRespone.newBuilder().addAllActivityInfo(activityInfos).build();
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GET_SOME_ACTIVITY_INFO_RESPONSE_VALUE,build);
}

View File

@ -370,12 +370,12 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
takeAllReward(sessionByUid);
}
List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(ActivityMission activityMission) {
return getAllMissInfo(activityMission, null);
List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission) {
return getAllMissInfo(user,activityMission,null);
}
@Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(ActivityMission activityMission, Set<Integer> filter) {
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(activityProgressInfoMap.size());
for (Map.Entry<Integer, ActivityProgressInfo> missionProgress : activityProgressInfoMap.entrySet()) {
@ -396,10 +396,19 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
*/
public void sendActivityProgress(ISession session, ActivityMission activityMission, Set<Integer> filterMissId) {
PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder();
builder.setActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).addAllMission(getAllMissInfo(activityMission, filterMissId)).setActivityId(id));
if (session != null) {
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true);
User user = UserManager.getUserInMem(session.getUid());
if (user != null && activityMission != null){
List<CommonProto.ActivityInfo.MissionInfo> missInfo = getAllMissInfo(user, activityMission, filterMissId);
CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder()
.setValue(activityMission.getV())
.addAllMission(missInfo)
.setActivityId(id);
builder.setActivityInfo(builder1);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true);
}
}
}
public void sendActivityProgress(User user, ActivityMission activityMission, Set<Integer> filterMissId) {

View File

@ -241,7 +241,7 @@ public class ActivityLogic implements IEventHandler{
sendLuckWheelPool=true;
activityUpdateMap.put(activityId, activityMissionMap.get(activityId));
}
List<CommonProto.ActivityInfo> activityInfos = getActivityInfos(activityUpdateMap, user1.getPlayerInfoManager().getCreateTime());
List<CommonProto.ActivityInfo> activityInfos = getActivityInfos(user1,activityUpdateMap, user1.getPlayerInfoManager().getCreateTime());
builder.addAllActivityInfo(activityInfos);
if(sendLuckWheelPool){
@ -519,7 +519,7 @@ public class ActivityLogic implements IEventHandler{
long createTime = user.getPlayerInfoManager().getCreateTime();
int rewardResponseValue = MessageTypeProto.MessageType.GET_ALL_ACTIVITY_RESPONSE_VALUE;
checkActivityOfUser(user, null);
List<CommonProto.ActivityInfo> activityInfoList = getActivityInfos(user.getActivityManager().getActivityMissionMap(), createTime);
List<CommonProto.ActivityInfo> activityInfoList = getActivityInfos(user,user.getActivityManager().getActivityMissionMap(), createTime);
PlayerInfoProto.GetAllActivityResponse.Builder builder = PlayerInfoProto.GetAllActivityResponse.newBuilder();
builder.addAllActivityInfo(activityInfoList);
@ -543,7 +543,7 @@ public class ActivityLogic implements IEventHandler{
* @param createTime
* @return
*/
public List<CommonProto.ActivityInfo> getActivityInfos(Map<Integer, ActivityMission> activityMissionMap, long createTime) {
public List<CommonProto.ActivityInfo> getActivityInfos(User user,Map<Integer, ActivityMission> activityMissionMap, long createTime) {
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
List<CommonProto.ActivityInfo> activityInfoList = new ArrayList<>(activityMissionMap.size());
for (Map.Entry<Integer, ActivityMission> activityState : activityMissionMap.entrySet()) {
@ -601,7 +601,7 @@ public class ActivityLogic implements IEventHandler{
LOGGER.error(sGlobalActivity.getId()+":活动类型不存在");
continue;
}
List<CommonProto.ActivityInfo.MissionInfo> missionInfos =abstractActivity.getAllMissInfo(activityMission);
List<CommonProto.ActivityInfo.MissionInfo> missionInfos =abstractActivity.getAllMissInfo(user,activityMission);
CommonProto.ActivityInfo build = CommonProto.ActivityInfo.newBuilder()
.setActivityId(activityId)
.addAllMission(missionInfos)
@ -627,7 +627,7 @@ public class ActivityLogic implements IEventHandler{
||ActivityType.LUCK_WHEEL_ADVANCE == SGlobalActivity.getsGlobalActivityMap().get(activityId).getType())
sendLuckWheelPool=true;
activityUpdateMap.put(activityId, activityMissionMap.get(activityId));
List<CommonProto.ActivityInfo> activityInfos = getActivityInfos(activityUpdateMap, user.getPlayerInfoManager().getCreateTime());
List<CommonProto.ActivityInfo> activityInfos = getActivityInfos(user,activityUpdateMap, user.getPlayerInfoManager().getCreateTime());
builder.addAllActivityInfo(activityInfos);
if(sendLuckWheelPool){
sendLuckWheelPool(user,session);
@ -767,7 +767,7 @@ public class ActivityLogic implements IEventHandler{
long createTime = user.getPlayerInfoManager().getCreateTime();
int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000);
int endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000);
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = abstractActivity.getAllMissInfo(activityMission);
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = abstractActivity.getAllMissInfo(user,activityMission);
fBuilder.addActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build());
fBuilder.setHadLuckTime( user.getPlayerInfoManager().getLuckWheelLimitTime());
fBuilder.setHadAdvanceLuckTime(user.getPlayerInfoManager().getLuckAdvanceWheelLimitTime());

View File

@ -54,6 +54,6 @@ public interface IActivity {
void onActivityEndOnMySelf(User user) throws Exception;
List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(ActivityMission activityMission, Set<Integer> filter);
List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter);
}

View File

@ -63,7 +63,7 @@ public class LevelExpectActivity extends ExpectRankActivity {
@Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(ActivityMission activityMission, Set<Integer> filter) {
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
Map<Integer, Integer> mapValues = RedisUtil.getInstence().getMapValues(RedisKey.ACTIVITY_GIFT_LIMIT, String.valueOf(id), Integer.class, Integer.class);
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(activityProgressInfoMap.size());

View File

@ -5,6 +5,7 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.event.ActivityStateChangeEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
@ -19,6 +20,7 @@ import config.SGlobalActivity;
import config.SRechargeCommodityNewConfig;
import config.SSurpriseBox;
import manager.STableManager;
import rpc.protocols.CommonProto;
import util.TimeUtils;
import java.util.*;
@ -49,17 +51,9 @@ public class SuperBoxActivity extends AbstractActivity {
@Override
public void initActivity(User user) throws Exception {
ActivityMission mission = new ActivityMission();
// 读表获取阶段奖励信息
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>());
if (boxMap.isEmpty()){
LOGGER.error("惊喜礼盒初始化失败,活动id:"+id);
}
List<Integer> list = boxMap.values().stream().mapToInt(SSurpriseBox::getId).boxed().collect(Collectors.toList());
// 初始化阶段奖励
ActivityLogic.getInstance().initOtherMission(mission, list);
ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>());
user.getActivityManager().getActivityMissionMap().put(id, mission);
// 修改状态
updateState(user);
LOGGER.info("惊喜礼盒初始化..."+id);
}
@ -74,8 +68,10 @@ public class SuperBoxActivity extends AbstractActivity {
User user = UserManager.getUser(event1.getUserId());
// 礼包处理
giftHandle(user, event1.getGiftId());
// 状态刷新
updateState(user);
// 客户端推送
ISession session = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(session, user.getActivityManager().getActivityMissionMap().get(id), null);
}
/**
@ -100,10 +96,9 @@ public class SuperBoxActivity extends AbstractActivity {
for (SSurpriseBox box : boxes) {
if (box.getPackId() == giftId){
// 当前礼包状态处理
ActivityProgressInfo current = missionMap.get(box.getId());
if (current != null && !checkBuyGiftCount(user,giftId)){
if (!checkBuyGiftCount(user,giftId)){
ActivityProgressInfo current = new ActivityProgressInfo();
current.setState(ActivityType.HAD_TAKED);
current.setProgrss(8);
missionMap.put(box.getId(),current);
}
break;
@ -117,71 +112,123 @@ public class SuperBoxActivity extends AbstractActivity {
* ,
* @param user
*/
private void updateState(User user){
private int getProgress(User user,int missionId){
// 活动信息是否为null
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
int days = mission.getV();
// 库
ActivityProgressInfo progressInfo = Optional.ofNullable(mission.getActivityMissionMap()).map(v->v.get(missionId)).orElse(null);
// 表
SSurpriseBox box = Optional.ofNullable(SSurpriseBox.map.get(id)).map(v -> v.get(missionId)).orElse(null);
// 返回值
int result = 0;
// 极为恶心的循环,包含超多的if-else
if (box != null){
if (progressInfo != null && progressInfo.getState() == ActivityType.HAD_TAKED){
// 已购买
result = 8;
}else {
// 未购买, 是否解锁
if (days >= box.getUnlockDay()){
// 已解锁, 可买天数
if (days >= box.getBuyDay()){
// 可买, 是否购买前置礼包
if (checkBuyAgo(user,box.getId())){
// 已购买前置. 是否需要特权, 是否激活特权
result = checkRule(user,box.getRule())?1:4;
}else {
// 未购买前置
result = 3;
}
}else {
// 不可买
result = 2;
}
}else {
// 未解锁, 是否可见
if (days >= box.getVisibleDay()){
// 可见, 是否可预览
result = days >= box.getViewDay()?6:7;
}else {
// 不可见
result = 5;
}
}
}
}
return result;
}
@Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
long now = TimeUtils.now();
long start = getSrartTime();
long end = getEndTime();
// 验证活动是否开启
if (now < start || now > end){
return;
return new ArrayList<>();
}
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if (mission == null){
return;
if (activityMission == null){
return new ArrayList<>();
}
// 计算过去了几天
int days = TimeUtils.getSoFarWentDays(start, now)+1;
mission.setV(days);
// mission 单个礼包
Map<Integer, ActivityProgressInfo> missionMap = mission.getActivityMissionMap();
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.get(id);
// 极为恶心的循环,包含超多的if-else
for (Map.Entry<Integer, ActivityProgressInfo> entry : missionMap.entrySet()) {
int k = entry.getKey();
ActivityProgressInfo v = entry.getValue();
int progrss = v.getProgrss();
// 是否已购买
if (progrss == 8){
// 已购买
// 更新记录天数
activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1);
// 库里存储的活动档位信息
Map<Integer, ActivityProgressInfo> progressInfoMap = activityMission.getActivityMissionMap();
// 返回对象
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(progressInfoMap.size());
// 策划表的配置
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>());
for (Map.Entry<Integer, SSurpriseBox> entry : boxMap.entrySet()) {
// 参数初始化
int missionId = entry.getKey();
int progress = getProgress(user,missionId);
if (progress == 0){
continue;
}
int state = progress==8?1:0;
// 封装proto并返回
CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder()
.setMissionId(missionId)
.setProgress(progress)
.setState(state)
.build();
missionInfos.add(build);
}
return missionInfos;
}
SSurpriseBox box = boxMap.get(k);
// 未购买, 是否解锁
if (days >= box.getUnlockDay()){
// 已解锁, 可买天数
if (days >= box.getBuyDay()){
// 可买, 是否购买前置礼包
if (checkBuyAgo(user,box.getId())){
// 已购买前置. 是否需要特权, 是否激活特权
progrss = checkRule(user,box.getRule())?1:4;
}else {
// 未购买前置
progrss = 3;
}
}else {
// 不可买
progrss = 2;
}
}else {
// 未解锁, 是否可见
if (days >= box.getVisibleDay()){
// 可见, 是否可预览
progrss = days >= box.getViewDay()?6:7;
}else {
// 不可见
progrss = 5;
}
}
v.setProgrss(progrss);
mission.getActivityMissionMap().put(k,v);
/**
*
* @param uid
* @param activityId
* @param activityMission
* @return
*/
@Override
public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
if (activityProgressInfoMap.isEmpty()) {
return false;
}
LOGGER.info("========================惊喜礼盒状态刷新,uid={}",user.getId());
// 策划表的配置
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>());
for (Map.Entry<Integer, SSurpriseBox> entry : boxMap.entrySet()) {
ActivityProgressInfo progressInfo = activityProgressInfoMap.get(entry.getKey());
if (progressInfo == null || progressInfo.getState() == ActivityType.WILL_TAKE){
return false;
}
}
// 客户端推送
ISession session = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(session, mission, null);
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
if(sGlobalActivity.getResetGrade()==0){
activityMission.setActivityState(ActivityType.FINISH_STATE);
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(uid,activityId,ActivityType.FINISH_STATE));
}
return true;
}
/**
@ -231,20 +278,24 @@ public class SuperBoxActivity extends AbstractActivity {
* @return
*/
private boolean checkBuyAgo(User user, int boxId){
boolean result = true;
// 获取消息
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId);
// 非空
if (!missionMap.isEmpty() && box != null){
// 前置礼包状态验证
ActivityProgressInfo info = missionMap.get(box.getLimitPackFId());
// info为null代表没有前置条件, state==2代表已买过
if (info != null && info.getState() == ActivityType.WILL_TAKE){
result = false;
}
if (missionMap.isEmpty() || box == null){
return false;
}
return result;
// 0表示没有前置条件
if (box.getLimitPackFId() == 0){
return true;
}
// 前置礼包状态验证
ActivityProgressInfo info = missionMap.get(box.getLimitPackFId());
// info为null代表没有前置条件, state==1代表已买过
if (info != null && info.getState() == ActivityType.HAD_TAKED){
return true;
}
return false;
}
/**
@ -292,6 +343,11 @@ public class SuperBoxActivity extends AbstractActivity {
return false;
}
/**
*
* @param user
* @return
*/
@Override
public Set<Integer> getCloseGoods(User user){
HashSet<Integer> set = new HashSet<>();
@ -302,14 +358,12 @@ public class SuperBoxActivity extends AbstractActivity {
// 活动页签
Map<Integer, ActivityProgressInfo> map = mission.getActivityMissionMap();
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.get(id);
// 活动奖励条件
for (Map.Entry<Integer, ActivityProgressInfo> entry2 : map.entrySet()) {
if (entry2.getValue().getProgrss() != 1){
SSurpriseBox box = boxMap.getOrDefault(entry2.getKey(), null);
if (box == null){
continue;
}
set.add(box.getPackId());
for (Map.Entry<Integer, SSurpriseBox> entry : boxMap.entrySet()) {
int progress = getProgress(user, entry.getKey());
// 不可购买的礼包
if (progress != 1 || progress == 0){
set.add(entry.getValue().getPackId());
}
}
return set;