diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EveryDayDiscountActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EveryDayDiscountActivity.java index de8916104..1ae329dd4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EveryDayDiscountActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EveryDayDiscountActivity.java @@ -18,10 +18,7 @@ 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; +import java.util.*; /** * @author hj @@ -37,6 +34,7 @@ public class EveryDayDiscountActivity extends AbstractActivity { Poster.getPoster().listenEvent(this, ActivityZeroRefreshEvent.class); Poster.getPoster().listenEvent(this, EveryDayDiscountNumUpdateEvent.class); Poster.getPoster().listenEvent(this, EveryDayDiscountUnlockEvent.class); + Poster.getPoster().listenEvent(this, EveryDayDiscountBuyCheckEvent.class); } @Override @@ -52,127 +50,65 @@ public class EveryDayDiscountActivity extends AbstractActivity { @Override public void onEvent(IEvent event) throws Exception { - long now = TimeUtils.now(); - User user = null; - // 任务完成刷新次数 - if (event instanceof EveryDayDiscountNumUpdateEvent){ - EveryDayDiscountNumUpdateEvent event1 = (EveryDayDiscountNumUpdateEvent) event; - user = UserManager.getUser(event1.getUserId()); - ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); - if (mission == null){ - return; - } - ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(countProgress); - if (progressInfo == null){ - progressInfo = new ActivityProgressInfo(); - } - int count = progressInfo.getProgrss(); - progressInfo.setProgrss(count + event1.getNum()); - // 道具日志记录 - ItemLogic.getInstance().addItemLog(new ItemLog(user, 0, BIReason.EVERYDAY_DISCOUNT_GET_REFRESH_COUNT,1578, count, progressInfo.getProgrss())); - progressInfo.setState(1); - mission.getActivityMissionMap().put(countProgress, progressInfo); - } - - // 每日刷新 - if (event instanceof ActivityZeroRefreshEvent) { - ActivityZeroRefreshEvent event1 = (ActivityZeroRefreshEvent) event; - user = UserManager.getUser(event1.getUserId()); - user.getUserMissionManager().onGameEvent(user, GameEvent.EVERY_DAY_TASK_REFRESH, id); - cleanValue(user); - } - - // 位置解锁 - if (event instanceof EveryDayDiscountUnlockEvent) { - Map giftMap = SEveryDayGift.activitymap.get(id); - if (giftMap == null){ - LOGGER.error("天天0.1折扣活动,活动id未找到对应档位:{},耗时:{}",id,TimeUtils.now()-now); - return; - } - EveryDayDiscountUnlockEvent event1 = (EveryDayDiscountUnlockEvent) event; - user = UserManager.getUser(event1.getUserId()); - ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); - if (mission == null){ - return; - } - for (SEveryDayGift dayGift : giftMap.values()) { - int missionId = dayGift.getId(); - int defaultCount = dayGift.getLimit(); - ActivityProgressInfo info = mission.getActivityMissionMap().get(missionId); - if (info != null){ - continue; - } - boolean open = ifOpen(user, missionId); - if (!open){ - continue; - } - info = new ActivityProgressInfo(); - info.setProgrss(defaultCount); - info.setState(1); - mission.getActivityMissionMap().put(missionId, info); - // 默认开启次数存储 - int packId = ToolsUtil.getPackId(missionId); - ActivityProgressInfo storage = new ActivityProgressInfo(); - storage.setProgrss(defaultCount); - storage.setState(1); - mission.getActivityMissionMap().put(packId, storage); - } - } - - // 购买礼包 -// if (event instanceof SuperBoxEvent) { -// SuperBoxEvent event1 = (SuperBoxEvent) event; -// user = UserManager.getUser(event1.getUserId()); -// SEveryDayGift dayGift = SEveryDayGift.activitygiftmap.getOrDefault(id, new HashMap<>()).get(event1.getGiftId()); -// if (dayGift == null){ -// return; -// } -// ISession session = OnlineUserManager.getSessionByUid(user.getId()); -// if (session == null){ -// LOGGER.error("天天0.1折扣活动,用户未登录,活动id:{},uid:{},耗时:{}",id, user.getId(),TimeUtils.now()-now); -// return; -// } -// takeReward(session, dayGift.getId()); -// } - - if (user == null) { - LOGGER.error("天天0.1折扣活动未知监听退出:{},耗时:{}",id,TimeUtils.now()-now); - return; - } - // 状态推送 - sendActivityProgress(user, null); - LOGGER.info("天天0.1折扣活动:{},耗时:{}",id,TimeUtils.now()-now); + finishMissionUpdate(event); + // 清零次数 + cleanValue(event); + // 解锁商品位置 + unlockGoodPosition(event); + // 购买检查 + buyCheckAndUpdate(event); } /** - * 判断档位是否解锁 + * 任务完成刷新次数 */ - public static boolean ifOpen(User user, int id) { - SEveryDayGift dayGift = SEveryDayGift.map.get(id); - if (dayGift == null){ - return false; + public void finishMissionUpdate(IEvent event) throws Exception { + long now = TimeUtils.now(); + if (!(event instanceof EveryDayDiscountNumUpdateEvent)) { + return; } - for (int[] ints : dayGift.getCondition()) { - if (ints[0] == 1) { // 等级 - if (user.getPlayerInfoManager().getLevel() < ints[1]) { - return false; - } - } + EveryDayDiscountNumUpdateEvent event1 = (EveryDayDiscountNumUpdateEvent) event; + User user = UserManager.getUser(event1.getUserId()); + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + LOGGER.error("天天0.1折扣活动,任务完成刷新抽奖次数退出,玩家任务信息为空:{},uid:{},耗时:{}",id, user.getId(), TimeUtils.now()-now); + return; } - return true; + ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(countProgress); + if (progressInfo == null){ + progressInfo = new ActivityProgressInfo(); + } + int count = progressInfo.getProgrss(); + progressInfo.setProgrss(count + event1.getNum()); + // 道具日志记录 + ItemLogic.getInstance().addItemLog(new ItemLog(user, 0, BIReason.EVERYDAY_DISCOUNT_GET_REFRESH_COUNT,1578, count, progressInfo.getProgrss())); + progressInfo.setState(1); + mission.getActivityMissionMap().put(countProgress, progressInfo); + + sendActivityProgress(user, null); + LOGGER.info("天天0.1折扣活动,任务完成刷新抽奖次数:{},耗时:{}",id,TimeUtils.now()-now); } /** * 清零次数, 并保留默认次数 */ - public void cleanValue(User user){ + public void cleanValue(IEvent event) throws Exception { + long now = TimeUtils.now(); + if (!(event instanceof ActivityZeroRefreshEvent)) { + return; + } + ActivityZeroRefreshEvent event1 = (ActivityZeroRefreshEvent) event; + User user = UserManager.getUser(event1.getUserId()); + user.getUserMissionManager().onGameEvent(user, GameEvent.EVERY_DAY_TASK_REFRESH, id); ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); if (mission == null){ + LOGGER.error("天天0.1折扣活动,清零次数退出,玩家任务信息为空:{},uid:{},耗时:{}",id, user.getId(), TimeUtils.now()-now); return; } Map giftMap = SEveryDayGift.activitymap.get(id); if (giftMap == null){ + LOGGER.error("天天0.1折扣活动,清零次数退出,天天礼包表无活动信息:{},耗时:{}",id,TimeUtils.now()-now); return; } for (SEveryDayGift dayGift : giftMap.values()) { @@ -192,6 +128,131 @@ public class EveryDayDiscountActivity extends AbstractActivity { progressInfo.setProgrss(count); mission.getActivityMissionMap().put(missionId, progressInfo); } + sendActivityProgress(user, null); + LOGGER.info("天天0.1折扣活动,清零次数:{},耗时:{}",id,TimeUtils.now()-now); + } + + /** + * 解锁商品位置 + */ + public void unlockGoodPosition(IEvent event) throws Exception { + long now = TimeUtils.now(); + if (!(event instanceof EveryDayDiscountUnlockEvent)) { + return; + } + Map giftMap = SEveryDayGift.activitymap.get(id); + if (giftMap == null){ + LOGGER.error("天天0.1折扣活动,解锁商品位置退出,活动id未找到对应档位:{},耗时:{}",id,TimeUtils.now()-now); + return; + } + EveryDayDiscountUnlockEvent event1 = (EveryDayDiscountUnlockEvent) event; + User user = UserManager.getUser(event1.getUserId()); + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + LOGGER.error("天天0.1折扣活动,解锁商品位置退出,玩家任务信息为空:{},uid:{},耗时:{}",id, user.getId(), TimeUtils.now()-now); + return; + } + for (SEveryDayGift dayGift : giftMap.values()) { + int missionId = dayGift.getId(); + int defaultCount = dayGift.getLimit(); + ActivityProgressInfo info = mission.getActivityMissionMap().get(missionId); + if (info != null){ + continue; + } + boolean open = ifOpen(user, missionId); + if (!open){ + continue; + } + info = new ActivityProgressInfo(); + info.setProgrss(defaultCount); + info.setState(1); + mission.getActivityMissionMap().put(missionId, info); + // 默认开启次数存储 + int packId = ToolsUtil.getPackId(missionId); + ActivityProgressInfo storage = new ActivityProgressInfo(); + storage.setProgrss(defaultCount); + storage.setState(1); + mission.getActivityMissionMap().put(packId, storage); + } + sendActivityProgress(user, null); + LOGGER.info("天天0.1折扣活动,解锁商品位置:{},耗时:{}",id,TimeUtils.now()-now); + } + + /** + * 查验购买次数 + */ + public void buyCheckAndUpdate(IEvent event) throws Exception { + long now = TimeUtils.now(); + if (!(event instanceof EveryDayDiscountBuyCheckEvent)) { + return; + } + EveryDayDiscountBuyCheckEvent event1 = (EveryDayDiscountBuyCheckEvent) event; + User user = UserManager.getUser(event1.getUserId()); + int giftId = event1.getGiftId(); + int updateState = event1.getUpdateState(); + + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + LOGGER.error("天天0.1折扣活动,查验购买次数退出,玩家没有活动信息,uid:{},活动id:{},耗时:{}",user.getId(), id,TimeUtils.now()-now); + throw new ErrorTableException(182);// 活动不存在 + } + SEveryDayGift dayGift = SEveryDayGift.activitygiftmap.getOrDefault(id, new HashMap<>()).get(giftId); + if (dayGift == null){ + LOGGER.error("天天0.1折扣活动,查验购买次数退出,EveryDayGift没有活动信息,活动id:{},耗时:{}", id,TimeUtils.now()-now); + throw new ErrorTableException(183);// 档位不存在 + } + int missionId = dayGift.getId(); + ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(missionId); + if (progressInfo == null){ + LOGGER.error("天天0.1折扣活动,查验购买次数退出,没有商品信息,uid:{},活动id:{},商品id:{},耗时:{}",user.getId(), id, missionId, TimeUtils.now()-now); + throw new ErrorTableException(183);// 档位不存在 + } + if (progressInfo.getState() != 1){ + LOGGER.error("天天0.1折扣活动,查验购买次数退出,商品为解锁,uid:{},活动id:{},商品id:{},耗时:{}",user.getId(), id, missionId, TimeUtils.now()-now); + throw new ErrorTableException(184);// 档位未解锁 + } + if (progressInfo.getProgrss() <= 0){ + LOGGER.error("天天0.1折扣活动,查验购买次数退出,商品够吗次数不足,uid:{},活动id:{},商品id:{},耗时:{}",user.getId(), id, missionId, TimeUtils.now()-now); + throw new ErrorTableException(185);// 购买次数不足 + } + // 消耗 + if (updateState == 1){ + LOGGER.error("天天0.1折扣活动,查验购买次数消耗,uid:{},活动id:{},商品id:{}",user.getId(), id, missionId); + // 消耗默认次数 + if (progressInfo.getProgrss() == dayGift.getLimit()){ + int packId = ToolsUtil.getPackId(missionId); + ActivityProgressInfo packInfo = mission.getActivityMissionMap().get(packId); + if (packInfo != null && packInfo.getProgrss() > 0){ + packInfo.setProgrss(packInfo.getProgrss() - 1); + mission.getActivityMissionMap().put(packId,packInfo); + } + } + // 道具日志记录 + ItemLogic.getInstance().addItemLog(new ItemLog(user, 1, BIReason.EVERYDAY_DISCOUNT_COST_MISSION_COUNT,dayGift.getItemID(), progressInfo.getProgrss(), progressInfo.getProgrss()-1)); + progressInfo.setProgrss(progressInfo.getProgrss() - 1); + // 更新数据库 + mission.getActivityMissionMap().put(missionId,progressInfo); + sendActivityProgress(user, null); + } + LOGGER.info("天天0.1折扣活动,查验购买次数:{},耗时:{}",id,TimeUtils.now()-now); + } + + /** + * 判断档位是否解锁 + */ + public static boolean ifOpen(User user, int id) { + SEveryDayGift dayGift = SEveryDayGift.map.get(id); + if (dayGift == null){ + return false; + } + for (int[] ints : dayGift.getCondition()) { + if (ints[0] == 1) { // 等级 + if (user.getPlayerInfoManager().getLevel() < ints[1]) { + return false; + } + } + } + return true; } /** @@ -292,33 +353,6 @@ public class EveryDayDiscountActivity extends AbstractActivity { progressInfo.setProgrss(progressInfo.getProgrss() - 1); mission.getActivityMissionMap().put(missionId, progressInfo); } - // 其他档位id,消耗次数 - else { - SEveryDayGift dayGift = SEveryDayGift.map.get(missionId); - if (dayGift == null){ - throw new ErrorTableException(183);// 档位不存在 - } - if (progressInfo.getState() != 1){ - throw new ErrorTableException(184);// 档位未解锁 - } - if (progressInfo.getProgrss() <= 0){ - throw new ErrorTableException(185);// 购买次数不足 - } - // 消耗默认次数 - if (progressInfo.getProgrss() == dayGift.getLimit()){ - int packId = ToolsUtil.getPackId(missionId); - ActivityProgressInfo packInfo = mission.getActivityMissionMap().get(packId); - if (packInfo != null && packInfo.getProgrss() > 0){ - packInfo.setProgrss(packInfo.getProgrss() - 1); - mission.getActivityMissionMap().put(packId,packInfo); - } - } - // 道具日志记录 - ItemLogic.getInstance().addItemLog(new ItemLog(user, 1, BIReason.EVERYDAY_DISCOUNT_COST_MISSION_COUNT,dayGift.getItemID(), progressInfo.getProgrss(), progressInfo.getProgrss()-1)); - progressInfo.setProgrss(progressInfo.getProgrss() - 1); - // 更新数据库 - mission.getActivityMissionMap().put(missionId,progressInfo); - } // 协议返回 PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().build(); MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/EveryDayDiscountBuyCheckEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/EveryDayDiscountBuyCheckEvent.java new file mode 100644 index 000000000..b444ccfb8 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/EveryDayDiscountBuyCheckEvent.java @@ -0,0 +1,35 @@ +package com.ljsd.jieling.logic.activity.event; + +/** + * @Author hj + * @Date 2021/5/26 11:05 + * @Description: 每日折扣购买检验 + * @Version 1.0 + */ +public class EveryDayDiscountBuyCheckEvent implements IEvent { + + private int userId;//uid + private int giftId;//礼包id + private int updateState;//0 不消耗 1消耗 + + public EveryDayDiscountBuyCheckEvent() { + } + + public EveryDayDiscountBuyCheckEvent(int userId, int giftId, int updateState) { + this.userId = userId; + this.giftId = giftId; + this.updateState = updateState; + } + + public int getUserId() { + return userId; + } + + public int getGiftId() { + return giftId; + } + + public int getUpdateState() { + return updateState; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index e50f74719..3fb9fe1ea 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -188,6 +188,8 @@ public class BuyGoodsNewLogic { private static void rechargeHandler(User user, String orderId, int giftId, int amount, List list) throws Exception { // 其他礼包活动 Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),giftId,1,1)); + // 天天零点1折购买消耗 + Poster.getPoster().dispatchEvent(new EveryDayDiscountBuyCheckEvent(user.getId(),giftId,1)); SRechargeCommodityNewConfig config = SRechargeCommodityNewConfig.getConfigById(giftId); // 测试购买 || 扶持购买 @@ -1062,9 +1064,6 @@ public class BuyGoodsNewLogic { /** * 礼包购买判断 - * @param session - * @param goodsId - * @throws Exception */ public static void checkBuyGoods(ISession session,int goodsId) throws Exception { User user = UserManager.getUser(session.getUid()); @@ -1085,6 +1084,7 @@ public class BuyGoodsNewLogic { if(config.getPrice() > 0){ order = KeyGenUtils.produceIdByModule(UUIDEnum.ORDER, user.getId()); } + PlayerInfoProto.CheckBuyGoodsResponse response = PlayerInfoProto.CheckBuyGoodsResponse.newBuilder().setOrderId(order).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHECK_BUY_GOODS_RESPONSE_VALUE,response); }