天天0.1折活动bug修复

grimm 2024-06-10 18:11:20 +08:00
parent 0077a33e52
commit a94289e86e
3 changed files with 206 additions and 137 deletions

View File

@ -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<Integer, SEveryDayGift> 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<Integer, SEveryDayGift> 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<Integer, SEveryDayGift> 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);

View File

@ -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;
}
}

View File

@ -188,6 +188,8 @@ public class BuyGoodsNewLogic {
private static void rechargeHandler(User user, String orderId, int giftId, int amount, List<int[][]> 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);
}