From add923399318967756b0945045bc4a86116dab36 Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 7 Sep 2022 10:36:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E6=B0=91=E7=A6=8F=E5=88=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 3 + .../jieling/logic/activity/ActivityType.java | 2 + .../logic/activity/ActivityTypeEnum.java | 3 +- .../activity/AllPeopleWelfareActivity.java | 165 ++++++++++++++++++ .../logic/activity/event/SuperBoxEvent.java | 2 - .../java/config/SUniversalWelfareConfig.java | 53 ++++++ 6 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AllPeopleWelfareActivity.java create mode 100644 tablemanager/src/main/java/config/SUniversalWelfareConfig.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 29affb2d6..2dc0f3c2f 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 @@ -443,6 +443,9 @@ public class RedisKey { // 御剑飞行时间锁 public static final String RIDING_SWARD_TIME_LOCK = "RIDING_SWARD_TIME_LOCK"; + //全民福利购买礼包次数 + public static final String ALL_PEOPLE_WELFARE_BUY_COUNT = "ALL_PEOPLE_WELFARE_BUY_COUNT"; + public static Set newAreaCacChe = new HashSet<>();//进程排行 合区统一 public static Set rankCacChe = new HashSet<>(); 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 25329e519..da38cdf65 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 @@ -136,4 +136,6 @@ public interface ActivityType { int WHOLE_LIFE_CARD = 99;//终生卡 int WEEK_CARD = 102;//月卡 + + int ALL_PEOPLE_WELFARE = 105;//全民福利 } 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 7d1fb8f39..32f3b005e 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 @@ -110,8 +110,9 @@ public enum ActivityTypeEnum { DONGHAI_XUNXIAN_ACTIVITY(ActivityType.DonghaiXunxian,DonghaiXunxianActivity::new),//东海寻仙 WHOEL_LIFE_ACTIVITY(ActivityType.WHOLE_LIFE_CARD,WholeLifeActivity::new),//东海寻仙 ENCHANTER_STORE(ActivityType.ENCHANTER_STORE,DefaultEmptyActivity::new),//寻仙商城 - WEEK_CARD(ActivityType.WEEK_CARD,WeekCardActivity::new),//月卡 + // bt + ALL_PEOPLE_WELFARE(ActivityType.ALL_PEOPLE_WELFARE,AllPeopleWelfareActivity::new),//全民福利 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AllPeopleWelfareActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AllPeopleWelfareActivity.java new file mode 100644 index 000000000..6542f8cef --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AllPeopleWelfareActivity.java @@ -0,0 +1,165 @@ +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.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.SuperBoxEvent; +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.SUniversalWelfareConfig; +import manager.STableManager; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.*; + +/** + * @author hj + * 全民福利活动-bt版 + * 2022-9-6 + */ +public class AllPeopleWelfareActivity extends AbstractActivity { + + AllPeopleWelfareActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, SuperBoxEvent.class); + } + + @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 void onEvent(IEvent event) throws Exception { + // 类型验证 + if (!(event instanceof SuperBoxEvent)) { + return; + } + // 获取信息 + SuperBoxEvent event1 = (SuperBoxEvent) event; + User user = UserManager.getUser(event1.getUserId()); + // 活动数据处理 + updateValue(event1.getGiftId()); + // 状态推送 + sendActivityProgress(user, user.getActivityManager().getActivityMissionMap().get(id), null); + } + + public static int getValue(){ + return (int)Optional.ofNullable(RedisUtil.getInstence().get(RedisKey.ALL_PEOPLE_WELFARE_BUY_COUNT)).orElse(0); + } + + public static void addValue(int count){ + int value = getValue()+count; + RedisUtil.getInstence().set(RedisKey.ALL_PEOPLE_WELFARE_BUY_COUNT,String.valueOf(value)); + } + + /** + * 修改参数 + * @param giftId + */ + private void updateValue(int giftId){ + List giftList = SUniversalWelfareConfig.getGiftList(); + // 验证礼包id + if (giftList.contains(giftId)){ + addValue(1); + } + } + + @Override + public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { + if (activityMission == null){ + return new ArrayList<>(); + } + // 库里存储的活动档位信息 + Map progressInfoMap = activityMission.getActivityMissionMap(); + // 策划表的配置 + Map config = STableManager.getConfig(SUniversalWelfareConfig.class); + // 返回对象 + List missionInfos = new ArrayList<>(config.size()); + int value = getValue(); + for (Map.Entry entry : config.entrySet()) { + // 参数初始化 + int missionId = entry.getKey(); + int state = getState(progressInfoMap.get(missionId)); + // 封装proto并返回 + CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder() + .setMissionId(missionId) + .setProgress(value) + .setState(state) + .build(); + missionInfos.add(build); + } + return missionInfos; + } + + /** + * 获取状态 + * @param progressInfo + * @return + */ + private int getState(ActivityProgressInfo progressInfo){ + int state = 0; + if (progressInfo != null && progressInfo.getState() == ActivityType.HAD_TAKED){ + state = ActivityType.HAD_TAKED; + } + return state; + } + + /** + * 领取奖励 + * @param session + * @param missionId + * @return + * @throws Exception + */ + @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 ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"活动信息不存在:"+id); + } + SUniversalWelfareConfig welfareConfig = STableManager.getConfig(SUniversalWelfareConfig.class).get(missionId); + if (welfareConfig == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"领取挡位不存在,活动id ==> 挡位id:"+id+"==>"+missionId); + } + ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(missionId); + if (progressInfo != null && progressInfo.getState() == ActivityType.HAD_TAKED){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"档位已领取,活动id ==> 挡位id:"+id+"==>"+missionId); + } + int value = getValue(); + if (value < welfareConfig.getPeolple()){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"条件不满足,活动id ==> 挡位id ==> 当前数量:"+id+"==>"+missionId+"==>"+value); + } + // reward + CommonProto.Drop.Builder drop = ItemUtil.drop(user, welfareConfig.getType(), BIReason.TAKE_ACTIVITY_REWARD); + // 更新数据库 + ActivityProgressInfo info = new ActivityProgressInfo(); + info.setState(ActivityType.HAD_TAKED); + mission.getActivityMissionMap().put(missionId,info); + + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, mission, null); + // 打点上报 + reportTakeActivityReward(user,welfareConfig.getType(),missionId); + return true; + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java index 0f7e27354..53f02d54f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java @@ -1,7 +1,5 @@ package com.ljsd.jieling.logic.activity.event; -import org.springframework.data.domain.PageRequest; - /** * @Author hj * @Date 2021/5/26 11:05 diff --git a/tablemanager/src/main/java/config/SUniversalWelfareConfig.java b/tablemanager/src/main/java/config/SUniversalWelfareConfig.java new file mode 100644 index 000000000..c62608cdd --- /dev/null +++ b/tablemanager/src/main/java/config/SUniversalWelfareConfig.java @@ -0,0 +1,53 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Table(name ="UniversalWelfareConfig") +public class SUniversalWelfareConfig implements BaseConfig { + + private int id; + + private int peolple; + + private int[][] type; + + private int rechargeCom; + + private static List giftList = new ArrayList<>(); + + @Override + public void init() throws Exception { + Map config = STableManager.getConfig(SUniversalWelfareConfig.class); + List list = config.values().stream().map(SUniversalWelfareConfig::getRechargeCom).collect(Collectors.toList()); + giftList.clear(); + giftList = list; + } + + public static List getGiftList() { + return giftList; + } + + public int getid() { + return id; + } + + public int getPeolple() { + return peolple; + } + + public int[][] getType() { + return type; + } + + public int getRechargeCom() { + return rechargeCom; + } + + +} \ No newline at end of file