diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SActivityRankingReward.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SActivityRankingReward.java new file mode 100644 index 000000000..4aa052a7b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SActivityRankingReward.java @@ -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 sActivityRankingRewardMap; + + private static Map> sActivityRankingRewardMapByActivityId; + + @Override + public void init() throws Exception { + sActivityRankingRewardMap = STableManager.getConfig(SActivityRankingReward.class); + Map> 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 getsActivityRankingRewardMap() { + return sActivityRankingRewardMap; + } + + public static List 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; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index ec18a2c15..f6565eac5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -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; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java index ff6775fb5..efca85670 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ExpectRankActivity.java @@ -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.getsActivityRankingRewardMapByActivityId(id); + int maxRank = 0; + Map 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> 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 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 getRankSet(int start, int end) { + Set set = new HashSet<>(); + if (start > end) { + return set; + } + for (int i = start; i <= end; i++) { + set.add(i); + } + return set; + } + + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java index 5ad811cba..c3f130d62 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java @@ -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; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HeroUpExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HeroUpExpectRankActivity.java index a8fea9689..ab68315d4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HeroUpExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HeroUpExpectRankActivity.java @@ -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); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java index 0dc07a9e7..28ddcbdf3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java @@ -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 sortMap = new TreeMap<>(); + SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).forEach(sActivityRewardConfig1 -> + sortMap.put(sActivityRewardConfig1.getId(), sActivityRewardConfig1) + ); + + Map.Entry 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; + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java index 843fb338c..3206c54e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SignInSumActivity.java @@ -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); -// } - - } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index ccfc0aa2a..8946cc08f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -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);