From 6c85b29aabf8f22979567fdddd3f5fa510e565c8 Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Thu, 15 Aug 2024 16:01:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A9=E5=A4=A9=E6=94=BE=E5=88=B8=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 2 + .../jieling/logic/activity/ActivityType.java | 1 + .../logic/activity/ActivityTypeEnum.java | 1 + .../activity/DailySendVoucherActivity.java | 120 ++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailySendVoucherActivity.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 1c96ab969..b26aa97ca 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -381,6 +381,8 @@ public class RedisKey { public static final String NEW_ARENA_REFRESH_FIRST_MARK = "NEW_ARENA_REFRESH_FIRST_MARK";//新竞技场第一次匹配标记 // public static final String NEW_ARENA_FIRST_PUSH = "NEW_ARENA_FIRST_PUSH";//竞技场第一名推送标记 + public static final String DAILY_SEND_VOUCHER_MARK = "DAILY_SEND_VOUCHER_MARK";// 每日放券标记 + // 唯一key生成 public static final String UUID_KEY = "UUID_KEY";//唯一key // 补单 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index 3b91ac2ae..355aa9a46 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -161,4 +161,5 @@ public interface ActivityType { int FENGSHEN_TREASURE_TWO = 115;//双队封神 int FENGSHEN_TREASURE_THREE = 116;//三队封神 int EVERY_DAY_DISCOUNT = 126;//天天0.1折扣 + int DAILY_SEND_VOUCHER = 127;//每日放券 } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index 8c61a0471..77ea89464 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -142,6 +142,7 @@ public enum ActivityTypeEnum { GM_DAILY_GIFT(ActivityType.GM_DAILY_GIFT, DefaultEmptyActivity::new),//gm每日礼包 GM_WEEK_GIFT(ActivityType.GM_WEEK_GIFT, DefaultEmptyActivity::new),//gm每周礼包 EVERY_DAY_DISCOUNT(ActivityType.EVERY_DAY_DISCOUNT, EveryDayDiscountActivity::new),//每日折扣 + DAILY_SEND_VOUCHER(ActivityType.DAILY_SEND_VOUCHER, DailySendVoucherActivity::new),//每日放券 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailySendVoucherActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailySendVoucherActivity.java new file mode 100644 index 000000000..8d15f4ed3 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailySendVoucherActivity.java @@ -0,0 +1,120 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.exception.ErrorTableException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityMission; +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.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author hj + * 每日放券-bt版 + * 2022-9-6 + */ +public class DailySendVoucherActivity extends AbstractActivity { + + private static final int countProgress = -1; + + DailySendVoucherActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception { + // 活动信息初始化 + ActivityMission mission = new ActivityMission(); + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); + user.getActivityManager().getActivityMissionMap().put(id, mission); + LOGGER.info("每日放券活动-bt版...uid={},activityId={}",user.getId(), id); + } + + @Override + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { + if (activityMission == null){ + return new ArrayList<>(); + } + // 策划表的配置 + List rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + if (rewardConfigs == null || rewardConfigs.isEmpty()){ + return new ArrayList<>(); + } + + Map map = getValue(user.getId()); + + // 返回对象 + List missionInfos = new ArrayList<>(rewardConfigs.size()); + for (SActivityRewardConfig config : rewardConfigs) { + int missionId = config.getId(); + String number = map.getOrDefault(missionId + "", "0"); + // 封装proto并返回 + CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder() + .setMissionId(missionId) + .setProgress(Integer.parseInt(number)) + .setState(Integer.parseInt(number) >= config.getValues()[0][0]? 1:0) + .build(); + missionInfos.add(build); + } + return missionInfos; + } + + public static Map getValue(int uid){ + String key = RedisKey.DAILY_SEND_VOUCHER_MARK + ":" + uid; + return RedisUtil.getInstence().getmapvaluekeyclass(key, String.class, String.class); + } + + public static void setValue(int uid, int missionId, int count){ + String key = RedisKey.DAILY_SEND_VOUCHER_MARK + ":" + uid; + RedisUtil.getInstence().putmap(key, missionId + "", count + ""); + RedisUtil.getInstence().expireMills(key, TimeUtils.getToTomorrowTimeS()); + } + + /** + * 领取奖励 + */ + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + User user = UserManager.getUser(session.getUid()); + // activity check + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + throw new ErrorTableException(182);// 活动不存在 + } + + SActivityRewardConfig rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (rewardConfig == null){ + throw new ErrorTableException(183);// 档位不存在 + } + + Map map = getValue(user.getId()); + String number = map.getOrDefault(missionId + "", "0"); + int count = Integer.parseInt(number); + if (count >= 1){ + throw new ErrorCodeException(ErrorCode.HAD_TAKE_REWARD); + } + CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewardConfig.getReward(), BIReason.TAKE_ACTIVITY_REWARD); + setValue(user.getId(), missionId, 1); + // 协议返回 + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, null); + return true; + } + +}