直购首冲活动

back_recharge
duhui 2022-09-19 16:32:55 +08:00
parent d9c771e49b
commit 3881e066ed
4 changed files with 184 additions and 1 deletions

View File

@ -1346,6 +1346,13 @@ public class TimeUtils {
return canRefresh; return canRefresh;
} }
/**
* x
* @param date1
* @param date2
* @param hour
* @return
*/
public static int differentDaysByHour(long date1, long date2, int hour) { public static int differentDaysByHour(long date1, long date2, int hour) {
Calendar cal1 = Calendar.getInstance(); Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(date1); cal1.setTimeInMillis(date1);

View File

@ -144,4 +144,5 @@ public interface ActivityType {
int ALL_PEOPLE_WELFARE = 105;//全民福利 int ALL_PEOPLE_WELFARE = 105;//全民福利
int GIVE_ENDLESS_DRAW = 106;//送无限抽 int GIVE_ENDLESS_DRAW = 106;//送无限抽
int GM_DIAL = 107;//gm转盘 int GM_DIAL = 107;//gm转盘
int RECHARGE_FIRST = 108;//直充首冲活动
} }

View File

@ -116,7 +116,8 @@ public enum ActivityTypeEnum {
INFINITE_RESOURCES_PAVILION(ActivityType.INFINITE_RESOURCES_PAVILION, InfiniteResourcesPavilionActivity::new),//无限资源阁 INFINITE_RESOURCES_PAVILION(ActivityType.INFINITE_RESOURCES_PAVILION, InfiniteResourcesPavilionActivity::new),//无限资源阁
ALL_PEOPLE_WELFARE(ActivityType.ALL_PEOPLE_WELFARE, AllPeopleWelfareActivity::new),//全民福利 ALL_PEOPLE_WELFARE(ActivityType.ALL_PEOPLE_WELFARE, AllPeopleWelfareActivity::new),//全民福利
GIVE_ENDLESS_DRAW(ActivityType.GIVE_ENDLESS_DRAW, GiveEndlessDrawActivity::new),//送无限抽 GIVE_ENDLESS_DRAW(ActivityType.GIVE_ENDLESS_DRAW, GiveEndlessDrawActivity::new),//送无限抽
GM_DIAL(ActivityType.GM_DIAL, LuckWheelNormalActivity::new);//gm转盘 GM_DIAL(ActivityType.GM_DIAL, LuckWheelNormalActivity::new),//gm转盘
RECHARGE_FIRST(ActivityType.RECHARGE_FIRST, RechargeFirstActivity::new),//直充购买礼包活动
; ;
private int type; private int type;

View File

@ -0,0 +1,174 @@
package com.ljsd.jieling.logic.activity;
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.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 RechargeFirstActivity extends AbstractActivity {
RechargeFirstActivity(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(user, event1.getGiftId());
// 状态推送
sendActivityProgress(user, user.getActivityManager().getActivityMissionMap().get(id), null);
}
/**
*
* @param giftId
*/
private void updateValue(User user, int giftId){
if (giftId <= 0){
return;
}
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
List<SActivityRewardConfig> rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
for (SActivityRewardConfig reward : rewardConfigs) {
// 礼包id相等并且库里没有那么则创建一条新的
if (reward.getValues()[0][0] == giftId && missionMap.get(reward.getId()) == null){
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setProgrss(TimeUtils.nowInt());
progressInfo.setState(0);
}
}
}
@Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
if (activityMission == null){
return new ArrayList<>();
}
// 库里存储的活动档位信息
Map<Integer, ActivityProgressInfo> progressInfoMap = activityMission.getActivityMissionMap();
// 策划表的配置
List<SActivityRewardConfig> rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
// 返回对象
List<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(rewardConfigs.size());
for (SActivityRewardConfig rewardConfig : rewardConfigs) {
// 参数初始化
int missionId = rewardConfig.getId();
int state = getState(missionId, progressInfoMap.get(missionId));
// 封装proto并返回
CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder()
.setMissionId(missionId)
.setProgress(0)
.setState(state)
.build();
missionInfos.add(build);
}
return missionInfos;
}
/**
*
* @param progressInfo
* @return
*/
private int getState(int missionId, ActivityProgressInfo progressInfo){
// 未购买过任何条目礼包
if (progressInfo == null){
return 0;
}
// 已领取
if (progressInfo.getState() == 2){
return 2;
}
SActivityRewardConfig rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
int days = TimeUtils.differentDaysByHour(progressInfo.getProgrss()*1000L, TimeUtils.now(),0) + 1;
// 判断金额和天数
if (days >= rewardConfig.getValues()[0][1]){
return 1;
}
return 0;
}
/**
*
* @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);
}
SActivityRewardConfig rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if (rewardConfig == null){
throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"领取挡位不存在活动id ==> "+id+"挡位id==>"+missionId);
}
int state = getState(missionId, mission.getActivityMissionMap().get(missionId));
if (state != 1){
throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"档位已领取或条件不满足活动id ==> "+id+"挡位id ==>"+missionId);
}
// reward
int[][] reward = rewardConfig.getReward();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
// 更新数据库
ActivityProgressInfo info = new ActivityProgressInfo();
info.setState(2);
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, reward, missionId);
return true;
}
public boolean checkActivityMissionFinishAndTake(int uid,int activityId,ActivityMission activityMission){
return false;
}
}