直购首冲活动
parent
d9c771e49b
commit
3881e066ed
|
@ -1346,6 +1346,13 @@ public class TimeUtils {
|
|||
return canRefresh;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询两个时间戳的第x小时中间相隔几天
|
||||
* @param date1
|
||||
* @param date2
|
||||
* @param hour
|
||||
* @return
|
||||
*/
|
||||
public static int differentDaysByHour(long date1, long date2, int hour) {
|
||||
Calendar cal1 = Calendar.getInstance();
|
||||
cal1.setTimeInMillis(date1);
|
||||
|
|
|
@ -144,4 +144,5 @@ public interface ActivityType {
|
|||
int ALL_PEOPLE_WELFARE = 105;//全民福利
|
||||
int GIVE_ENDLESS_DRAW = 106;//送无限抽
|
||||
int GM_DIAL = 107;//gm转盘
|
||||
int RECHARGE_FIRST = 108;//直充首冲活动
|
||||
}
|
||||
|
|
|
@ -116,7 +116,8 @@ public enum ActivityTypeEnum {
|
|||
INFINITE_RESOURCES_PAVILION(ActivityType.INFINITE_RESOURCES_PAVILION, InfiniteResourcesPavilionActivity::new),//无限资源阁
|
||||
ALL_PEOPLE_WELFARE(ActivityType.ALL_PEOPLE_WELFARE, AllPeopleWelfareActivity::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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue