超值基金活动修改,线上兼容2

duhui 2022-01-24 18:03:13 +08:00
parent a29f8a08c2
commit b94adebdc7
1 changed files with 56 additions and 52 deletions

View File

@ -17,14 +17,12 @@ import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SGlobalActivity;
import config.SLuxuryFund;
import config.SSurpriseBox;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @author hj
@ -38,6 +36,8 @@ public class SuperFundNewActivity extends AbstractActivity {
Poster.getPoster().listenEvent(this, SuperBoxEvent.class);
}
private static int finish = 2;
@Override
public void initActivity(User user) throws Exception {
ActivityMission mission = new ActivityMission();
@ -63,8 +63,6 @@ public class SuperFundNewActivity extends AbstractActivity {
User user = UserManager.getUser(event1.getUserId());
// 活动数据处理
updateValue(user,event1.getGiftId());
// 状态礼包刷新
updateState(user);
// 零点刷新
zeroRefresh(user,event1.getGiftId());
// 状态推送
@ -86,7 +84,7 @@ public class SuperFundNewActivity extends AbstractActivity {
return;
}
long count = SLuxuryFund.typeMap.get(id).values().stream().count();
long count1 = mission.getActivityMissionMap().values().stream().filter(v -> v.getState() == ActivityType.HAD_TAKED).count();
long count1 = mission.getActivityMissionMap().values().stream().filter(v -> v.getState() == finish).count();
if (count == count1){
initActivity(user);
}
@ -104,7 +102,7 @@ public class SuperFundNewActivity extends AbstractActivity {
}
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
// 礼包是否已购买
if (mission == null || mission.getV() == 2){
if (mission == null || mission.getV() == finish){
return;
}
// 旧信息兼容
@ -112,41 +110,55 @@ public class SuperFundNewActivity extends AbstractActivity {
// 已购买基金
if (bagInfo != null && bagInfo.isBought()){
// 初始化基金
mission.setV(2);
mission.setV(finish);
mission.setCreatTime(TimeUtils.now());
}
}
@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<CommonProto.ActivityInfo.MissionInfo> missionInfos = new ArrayList<>(progressInfoMap.size());
// 策划表的配置
Map<Integer, SLuxuryFund> fundMap = SLuxuryFund.typeMap.getOrDefault(id, new HashMap<>(0));
for (Map.Entry<Integer, SLuxuryFund> entry : fundMap.entrySet()) {
// 参数初始化
int missionId = entry.getKey();
int state = getState(activityMission,progressInfoMap.get(missionId),entry.getValue());
// 封装proto并返回
CommonProto.ActivityInfo.MissionInfo build = CommonProto.ActivityInfo.MissionInfo.newBuilder()
.setMissionId(missionId)
.setProgress(0)
.setState(state)
.build();
missionInfos.add(build);
}
return missionInfos;
}
/**
*
* @param user
* @throws ErrorCodeException
*
* @param activityMission
* @param progressInfo
* @param fund
* @return
*/
private void updateState(User user){
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if(mission == null){
LOGGER.error("活动数据为空:{}",id);
return;
}
if (mission.getV() != 2){
LOGGER.error("活动礼包未购买,活动id{}",id);
return;
}
// 间隔天数,购买当天算第一天,所以需要+1
int days = TimeUtils.differentDays(mission.getCreatTime(), TimeUtils.getTodayZero())+1;
// 活动数据
ArrayList<SLuxuryFund> funds = new ArrayList<>(SLuxuryFund.typeMap.getOrDefault(id,new HashMap<>()).values());
Map<Integer, ActivityProgressInfo> infoMap = mission.getActivityMissionMap();
for (SLuxuryFund fund : funds) {
ActivityProgressInfo progressInfo = infoMap.get(fund.getId());
// 已领取的不再处理
if (progressInfo == null && days >= fund.getDay()){
// 满足条件的新增
ActivityProgressInfo info = new ActivityProgressInfo();
mission.getActivityMissionMap().put(fund.getId(),info);
}
private int getState(ActivityMission activityMission, ActivityProgressInfo progressInfo, SLuxuryFund fund){
int state;
int days = TimeUtils.differentDays(activityMission.getCreatTime(), TimeUtils.getTodayZero())+1;
if (activityMission.getV() != finish){
state = 0;
} else if (progressInfo != null && progressInfo.getState() == finish){
state = 2;
}else {
state = days >= fund.getDay()?1:0;
}
return state;
}
/**
@ -165,25 +177,17 @@ public class SuperFundNewActivity extends AbstractActivity {
throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"活动信息不存在:"+id);
}
Map<Integer, ActivityProgressInfo> infoMap = mission.getActivityMissionMap();
if (infoMap == null || infoMap.isEmpty()){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"暂无可领取奖励:"+id);
}
List<int[][]> rewards = new ArrayList<>();
Map<Integer, SLuxuryFund> fundMap = SLuxuryFund.typeMap.get(id);
for (Map.Entry<Integer, ActivityProgressInfo> entry : infoMap.entrySet()) {
Integer key = entry.getKey();
ActivityProgressInfo progressInfo = entry.getValue();
// 未领取的奖励全部领取
if (progressInfo.getState() == ActivityType.WILL_TAKE){
SLuxuryFund fund = fundMap.get(key);
if (fund == null){
LOGGER.error("超值基金缺少奖励天数配置活动id{}, missionID{}",id,key);
continue;
}
rewards.add(fund.getReward());
progressInfo.setState(2);
for (SLuxuryFund fund : fundMap.values()) {
ActivityProgressInfo progressInfo = infoMap.get(fund);
int state = getState(mission, progressInfo, fund);
if (state == 1){
ActivityProgressInfo info = new ActivityProgressInfo();
info.setState(finish);
// 更新数据库
mission.getActivityMissionMap().put(key,progressInfo);
mission.getActivityMissionMap().put(fund.getId(),info);
rewards.add(fund.getReward());
}
}
// 已领取全部奖励