每日首冲和累计充值天数

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.handler.map.MapLogic;
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.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.RechargeInfo;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
import com.ljsd.jieling.logic.dao.UserMissionManager;
import com.ljsd.jieling.logic.dao.root.GlobalSystemControl;
@ -250,6 +253,8 @@ public class GlobalDataManaager {
ActivityLogic.getInstance().flushEveryDay(user,fBuilder);
PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder);
user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0);
ActivityLogic.getInstance().resumeActivity(user,ActivityType.DAILY_RECHARGE);
user.getPlayerInfoManager().getRechargeInfo().setDailyFirst(1);
FriendLogic.getInstance().refreshState(session);
// MapLogic.getInstance().towerAutoReset(session,fBuilder);
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.UserManager;
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.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
@ -21,20 +22,35 @@ import org.slf4j.LoggerFactory;
import java.util.*;
public abstract class AbstractActivity implements IActivity {
/**
*
*/
public abstract class AbstractActivity implements IActivity, IEventHandler {
static final Logger LOGGER = LoggerFactory.getLogger(AbstractActivity.class);
final int rewardResponseValue = MessageTypeProto.MessageType.TAKE_ACTIVITY_REWARD_RESPONSE_VALUE;
int id;
int id; //活动id
public AbstractActivity(int id) {
this.id = id;
}
@Override
public void onEvent(GameEvent event) {
}
@Override
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
public void update(User user, int count) {
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
@ -91,12 +107,12 @@ public abstract class AbstractActivity implements IActivity {
if (!takeRewardsProcess(session, sActivityRewardConfig, activityProgressInfo)) {
return;
}
//upto client and db
//up miss
int[][] reward = sActivityRewardConfig.getReward();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
activityProgressInfo.setState(ActivityType.HAD_TAKED);
activityMission.updateProgressInfo(missionId, activityProgressInfo);
//send
sendActivityProgress(session, activityMission, Collections.singleton(missionId));
KtEventUtils.onKtEvent(user, ParamEventBean.UserActivityEvent, id, missionId);
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();
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;
}
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activityId);
for (Integer id: getOpenActivityIdsByType(user, activityType)) {
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(id);
if (abstractActivity == null) {
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();
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();
if(activityMission.getActivityState() != ActivityType.OPEN_STATE){
if (activityMission.getActivityState() != ActivityType.OPEN_STATE) {
continue;
}
Integer activityId= item.getKey();
Integer activityId = item.getKey();
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
int targetActivityType = sGlobalActivity.getType();
if(targetActivityType != activityType){
if (targetActivityType != activityType) {
continue;
}
@ -293,9 +309,12 @@ public class ActivityLogic {
continue;
}
if(fBuilder==null){
return;
}
long createTime = user.getPlayerInfoManager().getCreateTime();
int startTime = (int)(sGlobalActivity.getTimeLong(createTime, 1)/1000);
int endTime = (int)(sGlobalActivity.getTimeLong(createTime, 2)/1000);
int startTime = (int) (sGlobalActivity.getTimeLong(createTime, 1) / 1000);
int endTime = (int) (sGlobalActivity.getTimeLong(createTime, 2) / 1000);
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());

View File

@ -28,5 +28,7 @@ public interface ActivityType {
int SERVERHAPPY =10; //七日狂欢
int FORCERANK = 11; //战力排行
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),
LUCKYCAT(ActivityType.LUCKYCAT, LuckyCatActivity::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 Function<Integer, AbstractActivity> toActivityFunction;
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.logic.dao.ActivityMission;
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.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
class ForceStandardActivity extends AbstractActivity {
@ -17,19 +15,12 @@ class ForceStandardActivity extends AbstractActivity {
@Override
public void initActivity(User user) throws Exception {
super.initActivity(user);
update(user,user.getPlayerInfoManager().getMaxForce());
update(user, user.getPlayerInfoManager().getMaxForce());
}
@Override
boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception {
int[][] values = sActivityRewardConfig.getValues();
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;
return checkValue(session, sActivityRewardConfig, activityProgressInfo);
}
@Override

View File

@ -19,6 +19,11 @@ public interface IActivity {
*/
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
public void initActivity(User user){
public void initActivity(User user) {
ActivityMission mission = new ActivityMission();
List<Integer> luckyMisionIds = new ArrayList<>();
SLuckyCatConfig.getConfigMapByActivityId(id).values().forEach(sLuckyCatConfig ->
@ -41,7 +41,7 @@ public class LuckyCatActivity extends AbstractActivity {
@Override
void updateProgress(ActivityMission activityMission, int count) {
activityMission.setValue(count);
activityMission.setValue(count + activityMission.getValue());
}
@Override
@ -78,7 +78,7 @@ public class LuckyCatActivity extends AbstractActivity {
return;
}
if (activityMission.getValue() < sLuckyRewardConfig.getRmbValue()){
if (activityMission.getValue() < sLuckyRewardConfig.getRmbValue()) {
MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "value illegality");
return;
}
@ -105,7 +105,7 @@ public class LuckyCatActivity extends AbstractActivity {
activityProgressInfo.setState(ActivityType.HAD_TAKED);
}
sendActivityProgress(session,activityMission, Collections.singleton(missionId));
sendActivityProgress(session, activityMission, Collections.singleton(missionId));
//drop
int[][] reward = new int[1][];
int[] temp2 = new int[2];
@ -118,8 +118,8 @@ public class LuckyCatActivity extends AbstractActivity {
String nickName = user.getPlayerInfoManager().getNickName();
SItem sItem = SItem.getsItemMap().get(temp2[0]);
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);
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);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
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;
}
activityState = ActivityType.OPEN_STATE;
value=0;
return true;
}
@ -42,6 +42,7 @@ public class ActivityMission extends MongoBase {
activityProgressInfoMap.put(missionId, new ActivityProgressInfo(0,0));
}
openType=1;
value=0;
activityState = ActivityType.OPEN_STATE;
}

View File

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

View File

@ -145,6 +145,12 @@ public class BuyGoodsLogic {
String content = SErrorCodeEerverConfig.getI18NMessage("recharge_first_txt");
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){
int[][] result = new int[length][];
int i=0;
@ -172,7 +178,7 @@ public class BuyGoodsLogic {
int saveAmt = rechargeInfo.getSaveAmt();
rechargeInfo.setSaveAmt(price+saveAmt);
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);