每日首冲和累计充值天数

back_recharge
zhangshanxue 2019-08-05 17:00:06 +08:00
parent dba41c51a3
commit 919163f51b
14 changed files with 164 additions and 48 deletions

View File

@ -12,8 +12,11 @@ import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.handler.map.MapLogic;
import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.RechargeInfo;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction; import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
import com.ljsd.jieling.logic.dao.UserMissionManager; import com.ljsd.jieling.logic.dao.UserMissionManager;
import com.ljsd.jieling.logic.dao.root.GlobalSystemControl; import com.ljsd.jieling.logic.dao.root.GlobalSystemControl;
@ -250,6 +253,8 @@ public class GlobalDataManaager {
ActivityLogic.getInstance().flushEveryDay(user,fBuilder); ActivityLogic.getInstance().flushEveryDay(user,fBuilder);
PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder); PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder);
user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0); user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0);
ActivityLogic.getInstance().resumeActivity(user,ActivityType.DAILY_RECHARGE);
user.getPlayerInfoManager().getRechargeInfo().setDailyFirst(1);
FriendLogic.getInstance().refreshState(session); FriendLogic.getInstance().refreshState(session);
// MapLogic.getInstance().towerAutoReset(session,fBuilder); // MapLogic.getInstance().towerAutoReset(session,fBuilder);
if(fBuilder!=null){ if(fBuilder!=null){

View File

@ -10,6 +10,7 @@ import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.ActivityProgressInfo; import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
@ -21,20 +22,35 @@ import org.slf4j.LoggerFactory;
import java.util.*; import java.util.*;
public abstract class AbstractActivity implements IActivity { /**
*
*/
public abstract class AbstractActivity implements IActivity, IEventHandler {
static final Logger LOGGER = LoggerFactory.getLogger(AbstractActivity.class); static final Logger LOGGER = LoggerFactory.getLogger(AbstractActivity.class);
final int rewardResponseValue = MessageTypeProto.MessageType.TAKE_ACTIVITY_REWARD_RESPONSE_VALUE; final int rewardResponseValue = MessageTypeProto.MessageType.TAKE_ACTIVITY_REWARD_RESPONSE_VALUE;
int id; int id; //活动id
public AbstractActivity(int id) { public AbstractActivity(int id) {
this.id = id; this.id = id;
} }
@Override
public void onEvent(GameEvent event) {
}
@Override @Override
public void initActivity(User user) throws Exception { public void initActivity(User user) throws Exception {
} }
@Override
public void onResume(User user) throws Exception {
ActivityManager activityManager = user.getActivityManager();
activityManager.removeActivity(id);
activityManager.initAllActivityMission(id);
}
@Override @Override
public void update(User user, int count) { public void update(User user, int count) {
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
@ -91,12 +107,12 @@ public abstract class AbstractActivity implements IActivity {
if (!takeRewardsProcess(session, sActivityRewardConfig, activityProgressInfo)) { if (!takeRewardsProcess(session, sActivityRewardConfig, activityProgressInfo)) {
return; return;
} }
//upto client and db //up miss
int[][] reward = sActivityRewardConfig.getReward(); int[][] reward = sActivityRewardConfig.getReward();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
activityProgressInfo.setState(ActivityType.HAD_TAKED); activityProgressInfo.setState(ActivityType.HAD_TAKED);
activityMission.updateProgressInfo(missionId, activityProgressInfo); activityMission.updateProgressInfo(missionId, activityProgressInfo);
//send
sendActivityProgress(session, activityMission, Collections.singleton(missionId)); sendActivityProgress(session, activityMission, Collections.singleton(missionId));
KtEventUtils.onKtEvent(user, ParamEventBean.UserActivityEvent, id, missionId); KtEventUtils.onKtEvent(user, ParamEventBean.UserActivityEvent, id, missionId);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();

View File

@ -245,46 +245,62 @@ public class ActivityLogic {
} }
public void updateActivityMissionProgress(User user,int activityType,int count){ public void updateActivityMissionProgress(User user, int activityType, int count) {
ActivityManager activityManager = user.getActivityManager(); for (Integer id: getOpenActivityIdsByType(user, activityType)) {
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap(); AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(id);
for(Map.Entry<Integer,ActivityMission> item : activityMissionMap.entrySet()){
ActivityMission activityMission = item.getValue();
if(activityMission.getActivityState() != ActivityType.OPEN_STATE){
continue;
}
Integer activityId= item.getKey();
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
int targetActivityType = sGlobalActivity.getType();
if(targetActivityType != activityType){
continue;
}
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activityId);
if (abstractActivity == null) { if (abstractActivity == null) {
continue; continue;
} }
abstractActivity.update(user,count); abstractActivity.update(user, count);
}
}
public void resumeActivity(User user, int activityType) throws Exception{
for (Integer id: getOpenActivityIdsByType(user, activityType)) {
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(id);
if (abstractActivity == null) {
continue;
}
abstractActivity.onResume(user);
} }
} }
private Set<Integer> getOpenActivityIdsByType(User user, int activityType) {
Set<Integer> ids = new HashSet<>();
ActivityManager activityManager = user.getActivityManager();
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for (Map.Entry<Integer, ActivityMission> item : activityMissionMap.entrySet()) {
ActivityMission activityMission = item.getValue();
if (activityMission.getActivityState() != ActivityType.OPEN_STATE) {
continue;
}
Integer activityId = item.getKey();
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
int targetActivityType = sGlobalActivity.getType();
if (targetActivityType != activityType) {
continue;
}
ids.add(activityId);
}
return ids;
}
public void upFivePlayerActivity(User user,int activityType, PlayerInfoProto.FivePlayerUpdateIndication.Builder fBuilder){ public void upFivePlayerActivity(User user, int activityType, PlayerInfoProto.FivePlayerUpdateIndication.Builder fBuilder) {
ActivityManager activityManager = user.getActivityManager(); ActivityManager activityManager = user.getActivityManager();
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap(); Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for(Map.Entry<Integer,ActivityMission> item : activityMissionMap.entrySet()){ for (Map.Entry<Integer, ActivityMission> item : activityMissionMap.entrySet()) {
ActivityMission activityMission = item.getValue(); ActivityMission activityMission = item.getValue();
if(activityMission.getActivityState() != ActivityType.OPEN_STATE){ if (activityMission.getActivityState() != ActivityType.OPEN_STATE) {
continue; continue;
} }
Integer activityId= item.getKey(); Integer activityId = item.getKey();
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
int targetActivityType = sGlobalActivity.getType(); int targetActivityType = sGlobalActivity.getType();
if(targetActivityType != activityType){ if (targetActivityType != activityType) {
continue; continue;
} }
@ -293,9 +309,12 @@ public class ActivityLogic {
continue; continue;
} }
if(fBuilder==null){
return;
}
long createTime = user.getPlayerInfoManager().getCreateTime(); long createTime = user.getPlayerInfoManager().getCreateTime();
int startTime = (int)(sGlobalActivity.getTimeLong(createTime, 1)/1000); int startTime = (int) (sGlobalActivity.getTimeLong(createTime, 1) / 1000);
int endTime = (int)(sGlobalActivity.getTimeLong(createTime, 2)/1000); int endTime = (int) (sGlobalActivity.getTimeLong(createTime, 2) / 1000);
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = abstractActivity.getAllMissInfo(activityMission); List<CommonProto.ActivityInfo.MissionInfo> missionInfos = abstractActivity.getAllMissInfo(activityMission);
fBuilder.addActivityInfo(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build()); fBuilder.addActivityInfo(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build());

View File

@ -28,5 +28,7 @@ public interface ActivityType {
int SERVERHAPPY =10; //七日狂欢 int SERVERHAPPY =10; //七日狂欢
int FORCERANK = 11; //战力排行 int FORCERANK = 11; //战力排行
int FORCESTANDARD = 12;//战力达标 int FORCESTANDARD = 12;//战力达标
int DAILY_RECHARGE = 13;//每日充值
int RECHARGE_SUM = 14;//累计充值天数
} }

View File

@ -17,7 +17,9 @@ public enum ActivityTypeEnum {
TREASUREACTIVITY(ActivityType.TREASURE, TreasureActivity::new), TREASUREACTIVITY(ActivityType.TREASURE, TreasureActivity::new),
LUCKYCAT(ActivityType.LUCKYCAT, LuckyCatActivity::new), LUCKYCAT(ActivityType.LUCKYCAT, LuckyCatActivity::new),
FORCERANK(ActivityType.FORCERANK, ForceRankActivity::new), FORCERANK(ActivityType.FORCERANK, ForceRankActivity::new),
FORCESTANDARD(ActivityType.FORCESTANDARD, ForceStandardActivity::new); FORCESTANDARD(ActivityType.FORCESTANDARD, ForceStandardActivity::new),
DAILY_RECHARGE(ActivityType.DAILY_RECHARGE, DailyRechargeActivity::new),
RECHARGE_SUM(ActivityType.RECHARGE_SUM, RechargeSumActivity::new);
private int type; private int type;
private Function<Integer, AbstractActivity> toActivityFunction; private Function<Integer, AbstractActivity> toActivityFunction;
private static HashMap<Integer, AbstractActivity> acticityCache = new HashMap<>(); private static HashMap<Integer, AbstractActivity> acticityCache = new HashMap<>();

View File

@ -0,0 +1,24 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.config.SActivityRewardConfig;
import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.network.session.ISession;
class DailyRechargeActivity extends AbstractActivity {
public DailyRechargeActivity(int id) {
super(id);
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
activityMission.setValue(count + activityMission.getValue());
}
@Override
boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception {
return checkValue(session, sActivityRewardConfig, activityProgressInfo);
}
}

View File

@ -3,10 +3,8 @@ package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.config.SActivityRewardConfig; import com.ljsd.jieling.config.SActivityRewardConfig;
import com.ljsd.jieling.logic.dao.ActivityMission; import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.ActivityProgressInfo; import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
class ForceStandardActivity extends AbstractActivity { class ForceStandardActivity extends AbstractActivity {
@ -17,19 +15,12 @@ class ForceStandardActivity extends AbstractActivity {
@Override @Override
public void initActivity(User user) throws Exception { public void initActivity(User user) throws Exception {
super.initActivity(user); super.initActivity(user);
update(user,user.getPlayerInfoManager().getMaxForce()); update(user, user.getPlayerInfoManager().getMaxForce());
} }
@Override @Override
boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception { boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception {
int[][] values = sActivityRewardConfig.getValues(); return checkValue(session, sActivityRewardConfig, activityProgressInfo);
User user = UserManager.getUser(session.getUid());
int value = user.getActivityManager().getActivityMissionMap().get(sActivityRewardConfig.getActivityId()).getValue();
if (value < values[0][0]) {
MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "time not");
return false;
}
return true;
} }
@Override @Override

View File

@ -19,6 +19,11 @@ public interface IActivity {
*/ */
void initActivity(User user) throws Exception; void initActivity(User user) throws Exception;
/**
*
*/
void onResume(User user)throws Exception;
/** /**
* *
*/ */

View File

@ -0,0 +1,10 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.logic.mission.GameEvent;
public interface IEventHandler {
void onEvent(GameEvent event);
}

View File

@ -29,7 +29,7 @@ public class LuckyCatActivity extends AbstractActivity {
} }
@Override @Override
public void initActivity(User user){ public void initActivity(User user) {
ActivityMission mission = new ActivityMission(); ActivityMission mission = new ActivityMission();
List<Integer> luckyMisionIds = new ArrayList<>(); List<Integer> luckyMisionIds = new ArrayList<>();
SLuckyCatConfig.getConfigMapByActivityId(id).values().forEach(sLuckyCatConfig -> SLuckyCatConfig.getConfigMapByActivityId(id).values().forEach(sLuckyCatConfig ->
@ -41,7 +41,7 @@ public class LuckyCatActivity extends AbstractActivity {
@Override @Override
void updateProgress(ActivityMission activityMission, int count) { void updateProgress(ActivityMission activityMission, int count) {
activityMission.setValue(count); activityMission.setValue(count + activityMission.getValue());
} }
@Override @Override
@ -78,7 +78,7 @@ public class LuckyCatActivity extends AbstractActivity {
return; return;
} }
if (activityMission.getValue() < sLuckyRewardConfig.getRmbValue()){ if (activityMission.getValue() < sLuckyRewardConfig.getRmbValue()) {
MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "value illegality"); MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "value illegality");
return; return;
} }
@ -105,7 +105,7 @@ public class LuckyCatActivity extends AbstractActivity {
activityProgressInfo.setState(ActivityType.HAD_TAKED); activityProgressInfo.setState(ActivityType.HAD_TAKED);
} }
sendActivityProgress(session,activityMission, Collections.singleton(missionId)); sendActivityProgress(session, activityMission, Collections.singleton(missionId));
//drop //drop
int[][] reward = new int[1][]; int[][] reward = new int[1][];
int[] temp2 = new int[2]; int[] temp2 = new int[2];
@ -118,8 +118,8 @@ public class LuckyCatActivity extends AbstractActivity {
String nickName = user.getPlayerInfoManager().getNickName(); String nickName = user.getPlayerInfoManager().getNickName();
SItem sItem = SItem.getsItemMap().get(temp2[0]); SItem sItem = SItem.getsItemMap().get(temp2[0]);
String message = SErrorCodeEerverConfig.getI18NMessage("luck_cat_take_reward_content", new Object[]{nickName,sItem.getName(),temp2[1]}); String message = SErrorCodeEerverConfig.getI18NMessage("luck_cat_take_reward_content", new Object[]{nickName, sItem.getName(), temp2[1]});
ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKCAT,0,0,0,0,0,0); ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKCAT, 0, 0, 0, 0, 0, 0);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);

View File

@ -0,0 +1,24 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.config.SActivityRewardConfig;
import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.network.session.ISession;
class RechargeSumActivity extends AbstractActivity {
public RechargeSumActivity(int id) {
super(id);
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
activityMission.setValue(count + activityMission.getValue());
}
@Override
boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception {
return checkValue(session, sActivityRewardConfig, activityProgressInfo);
}
}

View File

@ -32,7 +32,7 @@ public class ActivityMission extends MongoBase {
openType=0; openType=0;
} }
activityState = ActivityType.OPEN_STATE; activityState = ActivityType.OPEN_STATE;
value=0;
return true; return true;
} }
@ -42,6 +42,7 @@ public class ActivityMission extends MongoBase {
activityProgressInfoMap.put(missionId, new ActivityProgressInfo(0,0)); activityProgressInfoMap.put(missionId, new ActivityProgressInfo(0,0));
} }
openType=1; openType=1;
value=0;
activityState = ActivityType.OPEN_STATE; activityState = ActivityType.OPEN_STATE;
} }

View File

@ -13,6 +13,7 @@ public class RechargeInfo extends MongoBase{
private int isFirst; private int isFirst;
private long createTime; private long createTime;
private int hadBuyFound; private int hadBuyFound;
private int isDayFirst;
private Map<Integer,Long> levelBagMap = new HashMap<>(); private Map<Integer,Long> levelBagMap = new HashMap<>();
@ -79,6 +80,12 @@ public class RechargeInfo extends MongoBase{
isFirst = first; isFirst = first;
} }
public void setDailyFirst(int first) {
updateString("isFirst",first);
isDayFirst = first;
}
public void setCreateTime(long createTime) { public void setCreateTime(long createTime) {
updateString("createTime",createTime); updateString("createTime",createTime);
this.createTime = createTime; this.createTime = createTime;
@ -120,6 +127,10 @@ public class RechargeInfo extends MongoBase{
return isFirst; return isFirst;
} }
public int getIsDayFirst() {
return isDayFirst;
}
public int getHadBuyFound() { public int getHadBuyFound() {
return hadBuyFound; return hadBuyFound;
} }

View File

@ -145,6 +145,12 @@ public class BuyGoodsLogic {
String content = SErrorCodeEerverConfig.getI18NMessage("recharge_first_txt"); String content = SErrorCodeEerverConfig.getI18NMessage("recharge_first_txt");
MailLogic.getInstance().sendMail(user.getId(),title,content,ItemUtil.getMailReward(sActivityRewardConfig.getReward()),nowTime, Global.MAIL_EFFECTIVE_TIME); MailLogic.getInstance().sendMail(user.getId(),title,content,ItemUtil.getMailReward(sActivityRewardConfig.getReward()),nowTime, Global.MAIL_EFFECTIVE_TIME);
} }
if(rechargeInfo.getIsDayFirst()==0){
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.DAILY_RECHARGE,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_SUM,1);
rechargeInfo.setDailyFirst(1);
}
if(length>baseReward.length){ if(length>baseReward.length){
int[][] result = new int[length][]; int[][] result = new int[length][];
int i=0; int i=0;
@ -172,7 +178,7 @@ public class BuyGoodsLogic {
int saveAmt = rechargeInfo.getSaveAmt(); int saveAmt = rechargeInfo.getSaveAmt();
rechargeInfo.setSaveAmt(price+saveAmt); rechargeInfo.setSaveAmt(price+saveAmt);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RechargeTotal,rechargeInfo.getSaveAmt()); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RechargeTotal,rechargeInfo.getSaveAmt());
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.LUCKYCAT,rechargeInfo.getSaveAmt()); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.LUCKYCAT,saveAmt);
} }
buyGoodsTimes.put(goodsId,buyCount); buyGoodsTimes.put(goodsId,buyCount);