达人排行榜奖励

back_recharge
zhangshanxue 2019-08-06 15:28:15 +08:00
parent 61f49b7114
commit 797a484250
8 changed files with 174 additions and 26 deletions

View File

@ -0,0 +1,71 @@
package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Table(name = "ActivityRankingReward")
public class SActivityRankingReward implements BaseConfig {
private int id;
private int activityId;
private int minRank;
private int maxRank;
private int[][] rankingReward;
private static Map<Integer, SActivityRankingReward> sActivityRankingRewardMap;
private static Map<Integer, List<SActivityRankingReward>> sActivityRankingRewardMapByActivityId;
@Override
public void init() throws Exception {
sActivityRankingRewardMap = STableManager.getConfig(SActivityRankingReward.class);
Map<Integer, List<SActivityRankingReward>> integerListHashMap = new HashMap<>();
for (SActivityRankingReward sActivityRankingReward : sActivityRankingRewardMap.values()) {
int activityId = sActivityRankingReward.getActivityId();
if (!integerListHashMap.containsKey(activityId)) {
integerListHashMap.put(activityId, new ArrayList<>());
}
integerListHashMap.get(activityId).add(sActivityRankingReward);
}
}
public static Map<Integer, SActivityRankingReward> getsActivityRankingRewardMap() {
return sActivityRankingRewardMap;
}
public static List<SActivityRankingReward> getsActivityRankingRewardMapByActivityId(int Id) {
return sActivityRankingRewardMapByActivityId.get(Id);
}
public int getId() {
return id;
}
public int getActivityId() {
return activityId;
}
public int getMinRank() {
return minRank;
}
public int getMaxRank() {
return maxRank;
}
public int[][] getRankingReward() {
return rankingReward;
}
}

View File

@ -73,8 +73,8 @@ public class ActivityLogic {
if (time == 2) {
continue;
}
long startTime = sGlobalActivity.getTimeLong(0, time);
long endTime = sGlobalActivity.getTimeLong(0, time);
long startTime = sGlobalActivity.getTimeLong(0, 1);
long endTime = sGlobalActivity.getTimeLong(0, 2);
if (now < startTime) {
continue;
}

View File

@ -1,15 +1,24 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.config.SActivityRankingReward;
import com.ljsd.jieling.config.SActivityRewardConfig;
import com.ljsd.jieling.config.SErrorCodeEerverConfig;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
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.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.TimeUtils;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.*;
class ExpectRankActivity extends AbstractActivity {
@ -19,9 +28,8 @@ class ExpectRankActivity extends AbstractActivity {
@Override
void updateProgress(User user, ActivityMission activityMission, int count) {
activityMission.setValue(count+activityMission.getValue());
activityMission.setValue(count + activityMission.getValue());
String key = RedisKey.getKey(RedisKey.EXPERT_RANK, String.valueOf(id), false);
//todo 删除长度以外数值
RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), count);
}
@ -45,4 +53,55 @@ class ExpectRankActivity extends AbstractActivity {
return true;
}
@Override
public void onActivityEnd() throws Exception {
List<SActivityRankingReward> sActivityRankingReward = SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id);
int maxRank = 0;
Map<Integer, Integer> rank2miss = new HashMap<>();
for (SActivityRankingReward sActivityRankingReward1 : sActivityRankingReward) {
maxRank = Math.max(maxRank, sActivityRankingReward1.getMaxRank());
for (Integer rank : getRankSet(sActivityRankingReward1.getMinRank(), sActivityRankingReward1.getMaxRank())) {
rank2miss.put(rank, sActivityRankingReward1.getId());
}
}
Set<ZSetOperations.TypedTuple<String>> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.EXPERT_RANK, Integer.toString(id), 0, maxRank - 1);
int rank = 1;
int nowTime = (int) (TimeUtils.now() / 1000);
for (ZSetOperations.TypedTuple<String> item : rankInfo) {
String value = item.getValue();
int uid = Integer.parseInt(value);
User user = UserManager.getUser(uid);
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
if (activityMission == null || activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) {
continue;
}
int missionId = rank2miss.get(rank++);
//check value
SActivityRankingReward sActivityRankingReward1 = SActivityRankingReward.getsActivityRankingRewardMap().get(missionId);
//sendmail
String content = SErrorCodeEerverConfig.getI18NMessage("powerrank_activity_title");
String title = SErrorCodeEerverConfig.getI18NMessage("powerrank_activity_txt", new Object[]{rank});
String mailReward = ItemUtil.getMailReward(sActivityRankingReward1.getRankingReward());
MailLogic.getInstance().sendMail(uid, title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME);
}
}
private Set<Integer> getRankSet(int start, int end) {
Set<Integer> set = new HashSet<>();
if (start > end) {
return set;
}
for (int i = start; i <= end; i++) {
set.add(i);
}
return set;
}
}

View File

@ -89,7 +89,7 @@ class ForceRankActivity extends AbstractActivity {
continue;
}
int value2 = values[0][2];
int missionProgress = activityProgressInfo.getProgrss();
int missionProgress = activityMission.getValue();
if (missionProgress < value2) {
continue;
}

View File

@ -44,7 +44,6 @@ class HeroUpExpectRankActivity extends ExpectRankActivity {
void updateProgress(User user, ActivityMission activityMission, int count) {
activityMission.setValue(count+activityMission.getValue());
String key = RedisKey.getKey(RedisKey.EXPERT_RANK, String.valueOf(id), false);
//todo 删除长度以外数值
RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), count);
}
}

View File

@ -4,8 +4,15 @@ import com.ljsd.jieling.config.SActivityRewardConfig;
import com.ljsd.jieling.logic.dao.ActivityManager;
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;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
class RechargeSumDayActivity extends AbstractActivity {
@ -21,7 +28,6 @@ class RechargeSumDayActivity extends AbstractActivity {
@Override
void updateProgress(ActivityMission activityMission, int count) {
//TODO 走配置 每日金额大于多少更新天数
activityMission.setValue(activityMission.getValue() + count);
}
@ -30,4 +36,31 @@ class RechargeSumDayActivity extends AbstractActivity {
return checkValue(session, sActivityRewardConfig, activityProgressInfo);
}
/**
*
*/
boolean checkValue(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][1]) {
MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "value illegality");
return false;
}
TreeMap<Integer, SActivityRewardConfig> sortMap = new TreeMap<>();
SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).forEach(sActivityRewardConfig1 ->
sortMap.put(sActivityRewardConfig1.getId(), sActivityRewardConfig1)
);
Map.Entry<Integer, SActivityRewardConfig> entry = sortMap.lowerEntry(sActivityRewardConfig.getId());
if (null != entry) {
ActivityProgressInfo progressInfo = user.getActivityManager().getActivityMissionMap().get(id).getActivityProgressInfoMap().get(entry.getKey());
if (progressInfo != null && activityProgressInfo.getState() != ActivityType.HAD_TAKED) {
return false;
}
}
return true;
}
}

View File

@ -1,12 +1,11 @@
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;
import com.ljsd.jieling.util.MessageUtil;
/**
*
*/
@Deprecated
class SignInSumActivity extends AbstractActivity {
public SignInSumActivity(int id) {
@ -17,19 +16,5 @@ class SignInSumActivity extends AbstractActivity {
void updateProgress(ActivityMission activityMission, int count) {
activityMission.setValue(count + activityMission.getValue());
}
//
// @Override
// boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception {
// //TODO 检查下 客户端是否会跳着领取
//
//// SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
//// if (sActivityRewardConfig == null || sActivityRewardConfig.getActivityId() != id) {
//// MessageUtil.sendErrorResponse(session, 0, rewardResponseValue, "");
//// return false;
//// }
//// return checkValue(session, sActivityRewardConfig, activityProgressInfo);
// }
}

View File

@ -172,6 +172,7 @@ public class BuyGoodsLogic {
if(sRechargeCommodityConfig.getAccumulativeRecharge() == 1){
int saveAmt = rechargeInfo.getSaveAmt();
rechargeInfo.setSaveAmt(price+saveAmt);
//TODO 用事件分发
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RechargeTotal,rechargeInfo.getSaveAmt());
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.LUCKYCAT,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.DAILY_RECHARGE,price);