修改gm线下返利活动

back_recharge
duhui 2022-12-08 11:56:07 +08:00
parent 3463c2052b
commit c6cb0c2bff
11 changed files with 119 additions and 159 deletions

View File

@ -767,6 +767,20 @@ public class TimeUtils {
return c.getTimeInMillis();
}
/**
*
* @return
*/
public static long getTomorrowZero(String time, int day) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(stringToTimeLong2(time));
c.add(Calendar.DATE, day);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
return c.getTimeInMillis();
}
/**
*
* @return

View File

@ -379,6 +379,7 @@ public class RedisKey {
public static final String CROSS_LINGMAISECRET_RECORD = "CROSS_LINGMAISECRET_RECORD";//灵脉记录
public static final String CROSS_LINGMAI_RANK_PERSON = "CROSS_LINGMAI_RANK_PERSON";//灵脉积分排行
public static final String GM_ACTIVITY_INFO = "GM_ACTIVITY_INFO";//GM活动信息
public static Set<String> familyKey = new HashSet<>();
/**

View File

@ -1394,6 +1394,18 @@ public class RedisUtil {
return result;
}
public <K,T> Map<K,T> getMapValues2(String type,String key,Class<K> keyClazz,Class<T> valueClazz){
Map<K,T> result = new HashMap<>();
String rkey = getKey(type, key, false);
Map<Object, Object> entries = redisTemplate.opsForHash().entries(rkey);
for(Map.Entry<Object,Object> item : entries.entrySet()){
Object key1 = item.getKey();
Object value = item.getValue();
result.put(gson.fromJson(gson.toJson(key1),keyClazz),gson.fromJson(value.toString(),valueClazz));
}
return result;
}
public <K,T> Map<K,T> getMapValues(String key,Class<K> keyClazz,Class<T> valueClazz){
Map<K,T> result = new HashMap<>();
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key);

View File

@ -20,7 +20,6 @@ import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
import com.ljsd.jieling.logic.activity.ChoiceDrawCardActivity;
import com.ljsd.jieling.logic.activity.LimitRandomSpecialMonsterActivityNew;
import com.ljsd.jieling.logic.activity.activityLogic.GmActivityLogic;
import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SaveHeroForceEvent;
@ -83,7 +82,6 @@ public class GetPlayerInfoHandler extends BaseHandler{
PlayerLogic.getInstance().checkOldMonthCard(user);
ActivityLogic.getInstance().flushForLogin(user,iSession);
GlobalDataManaager.checkNeedReFlush(iSession,user,null);
GmActivityLogic.getInstance().updateGmActivity(user);
BuyGoodsNewLogic.refreshWelfareState(user);
user.getUserMissionManager().onGameEvent(user, GameEvent.LOGIN_GAME,0);
long now = TimeUtils.now();

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.jbean.gm;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.db.mongo.gmActivity.ARBActivity;
import com.ljsd.jieling.logic.dao.root.User;
import java.util.HashMap;
@ -16,14 +17,19 @@ public class GmActivity extends MongoBase {
private String id;
private int type;
private int value;
private String startTime;
private String endTime;
public GmActivity() {
//绑定关系
this.setRootCollection(User._COLLECTION_NAME);
}
public GmActivity(ARBActivity arbActivity) {
this.id = arbActivity.getId();
this.type = arbActivity.getType();
//绑定关系
this.setRootCollection(User._COLLECTION_NAME);
}
public String getId() {
return id;
}
@ -64,22 +70,4 @@ public class GmActivity extends MongoBase {
this.value = value;
updateString("value",value);
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
updateString("startTime",startTime);
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
updateString("endTime",endTime);
}
}

View File

@ -13,8 +13,6 @@ import java.util.HashMap;
public class GmActivityManager extends MongoBase {
private HashMap<String, GmActivity> activityMap = new HashMap<>();
private int updateVersion;
public HashMap<String, GmActivity> getActivityMap() {
return activityMap;
}
@ -33,13 +31,4 @@ public class GmActivityManager extends MongoBase {
this.activityMap.remove(activityId);
updateString("activityMap",activityMap);
}
public int getUpdateVersion() {
return updateVersion;
}
public void setUpdateVersion(int updateVersion) {
this.updateVersion = updateVersion;
updateString("updateVersion",updateVersion);
}
}

View File

@ -304,8 +304,7 @@ public class GlobalDataManaager implements IManager {
new SummonTreasureHandler();
new ArchitectureUnLockHandler();
new SaveHeroForceEventHandler();
// 四灵试炼转移数据,只执行一次
// FourChallengeLogic.getInstance().redisToMongoDB();
new GmActivityLogic();
ChampionshipLogic.minuteCheck(true);
GuildFightLogic.minuteCheckForCarFight();
} catch (Exception e) {

View File

@ -830,7 +830,7 @@ public class ActivityLogic implements IEventHandler{
}
public void checkActivityIsFinish(User user) {
public void checkActivityIsFinish(User user) throws Exception {
ActivityManager activityManager = user.getActivityManager();
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for (Map.Entry<Integer, ActivityMission> item : activityMissionMap.entrySet()) {
@ -839,9 +839,6 @@ public class ActivityLogic implements IEventHandler{
}
ActivityMission activityMission = item.getValue();
//7201活动弃用
if(activityMission == null){
continue;
}
if(item.getKey() == 7201){
continue;
}

View File

@ -10,20 +10,14 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.gm.GmActivity;
import com.ljsd.jieling.jbean.gm.GmActivityManager;
import com.ljsd.jieling.jbean.gm.GmMission;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.AutoRechargeBackEvent;
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.logic.mail.MailLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.AyyncWorker;
import com.ljsd.jieling.util.ItemUtil;
import config.SErrorCodeEerverConfig;
import config.SRechargeCommodityNewConfig;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
@ -34,6 +28,7 @@ import org.springframework.data.mongodb.core.query.Query;
import util.StringUtil;
import util.TimeUtils;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
@ -59,8 +54,6 @@ public class GmActivityLogic implements IEventHandler {
public final static GmActivityLogic instance = new GmActivityLogic();
}
private static int gameUpdateVersion = 0;
@Override
public void onEvent(IEvent event) throws Exception {
if (!(event instanceof AutoRechargeBackEvent)){
@ -76,54 +69,83 @@ public class GmActivityLogic implements IEventHandler {
}
User user = UserManager.getUser(rechargeBackEvent.getUserId());
GmActivityManager manager = user.getGmActivityManager();
HashMap<String, GmActivity> activityMap = manager.getActivityMap();
// 邮件信息
String title = SErrorCodeEerverConfig.getI18NMessage("zidongfanli_mail_title");
String content = SErrorCodeEerverConfig.getI18NMessage("zidongfanli_mail_text");
Map<String, ARBActivity> arbActivityMap = getArbActivity();
for (Map.Entry<String, GmActivity> entry : activityMap.entrySet()) {
GmActivity gmActivity = entry.getValue();
for (Map.Entry<String, ARBActivity> entry : arbActivityMap.entrySet()) {
ARBActivity arbActivity = entry.getValue();
// 时间校验
long start = TimeUtils.dateFormat2(gmActivity.getStartTime());
long end = TimeUtils.dateFormat2(gmActivity.getEndTime());
long start = getStartTime(arbActivity);
long end = getEndTime(arbActivity);
long now = TimeUtils.now();
if (start > now || end <= now){
continue;
}
List<int[][]> rewards = new ArrayList<>();
// 获取全部活动信息
GmActivity gmActivity = manager.getActivityMap().getOrDefault(entry.getKey(), new GmActivity(arbActivity));
switch (gmActivity.getType()){
case 1:
case 3:
case 5://单笔累充,多日累充,永久大充
getDefaultReward(gmActivity,config.getPrice(),rewards);
break;
case 2://妖晶返利
getRewardToMonsterCurrencyBack(gmActivity,config.getPrice(),rewards);
getRewardToMonsterCurrencyBack(user, gmActivity,config.getPrice());
break;
case 4://单笔充值
getRewardToSingleRecharge(gmActivity,config.getPrice(),rewards);
getRewardToSingleRecharge(user, gmActivity,config.getPrice());
break;
default:
LOGGER.error("充值返利未找到得活动类型uid:{}, activityId{}", user.getId(), gmActivity.getId());
default://1、3、5、6单笔累充多日累充永久大充开服首日累充
getDefaultReward(user, gmActivity,config.getPrice());
continue;
}
manager.putActivityMap(gmActivity.getId(),gmActivity);
// 验证奖励非空
String mailReward = ItemUtil.getMailReward(rewards);
if (StringUtil.isEmpty(mailReward)){
continue;
}
MailLogic.getInstance().sendMail(user.getId(),title,content,mailReward,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
}
}
/**
*
* @param arbActivity
* @return
* @throws ParseException
*/
private long getStartTime(ARBActivity arbActivity) throws ParseException {
long start = TimeUtils.dateFormat2(arbActivity.getStartTime());
if (arbActivity.getType() == 6){
start = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime());
}
return start;
}
/**
*
* @param arbActivity
* @return
* @throws ParseException
*/
private long getEndTime(ARBActivity arbActivity) throws ParseException {
long end = TimeUtils.dateFormat2(arbActivity.getEndTime());
if (arbActivity.getType() == 6){
end = TimeUtils.getTomorrowZero(GameApplication.serverConfig.getOpenTime(),1);
}
return end;
}
/**
* gm
* @return
*/
private Map<String, ARBActivity> getArbActivity(){
HashMap<String, ARBActivity> map = new HashMap<>();
// 单属于本服的活动
Map<String, ARBActivity> arbActivityMap = RedisUtil.getInstence().getMapValues2(RedisKey.GM_ACTIVITY_INFO, String.valueOf(GameApplication.serverId), String.class, ARBActivity.class);
map.putAll(arbActivityMap);
// 全部服务器的活动
Map<String, ARBActivity> allActivityMap = RedisUtil.getInstence().getMapValues2(RedisKey.GM_ACTIVITY_INFO, "0", String.class, ARBActivity.class);
map.putAll(allActivityMap);
return map;
}
/**
*
* @param gmActivity
* @param price
* @param rewards
*/
private void getDefaultReward(GmActivity gmActivity, double price, List<int[][]> rewards){
private void getDefaultReward(User user, GmActivity gmActivity, double price) throws Exception {
List<ARBMission> gmMissionList = findAllGmMission(gmActivity.getId());
int num = gmActivity.getValue() + (int) price;
for (ARBMission arbMission : gmMissionList) {
@ -136,8 +158,11 @@ public class GmActivityLogic implements IEventHandler {
if (num < arbMission.getRechargeNum()){
continue;
}
// 奖励
rewards.add(arbMission.getReward());
// 发邮件
String mailReward = ItemUtil.getMailReward(arbMission.getReward());
if (!StringUtil.isEmpty(mailReward)){
MailLogic.getInstance().sendMail(user.getId(),arbMission.getActivity().getName(),arbMission.getTitle(),mailReward,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
}
// 记录到库
gmMission.setId(arbMission.getId());
gmMission.setState(1);
@ -150,9 +175,8 @@ public class GmActivityLogic implements IEventHandler {
*
* @param gmActivity
* @param price
* @param rewards
*/
private void getRewardToSingleRecharge(GmActivity gmActivity, double price, List<int[][]> rewards){
private void getRewardToSingleRecharge(User user, GmActivity gmActivity, double price) throws Exception {
List<ARBMission> gmMissionList = findAllGmMission(gmActivity.getId());
for (ARBMission arbMission : gmMissionList) {
GmMission gmMission = gmActivity.getMissionMap().getOrDefault(arbMission.getId(), new GmMission());
@ -164,8 +188,11 @@ public class GmActivityLogic implements IEventHandler {
if (price != arbMission.getRechargeNum()){
continue;
}
// 奖励
rewards.add(arbMission.getReward());
// 发邮件
String mailReward = ItemUtil.getMailReward(arbMission.getReward());
if (!StringUtil.isEmpty(mailReward)){
MailLogic.getInstance().sendMail(user.getId(),arbMission.getActivity().getName(),arbMission.getTitle(),mailReward,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
}
// 记录到库
gmMission.setId(arbMission.getId());
gmMission.setState(1);
@ -177,9 +204,8 @@ public class GmActivityLogic implements IEventHandler {
*
* @param gmActivity
* @param price
* @param rewards
*/
private void getRewardToMonsterCurrencyBack(GmActivity gmActivity, double price, List<int[][]> rewards){
private void getRewardToMonsterCurrencyBack(User user, GmActivity gmActivity, double price) throws Exception {
List<ARBMission> gmMissionList = findAllGmMission(gmActivity.getId());
List<ARBMission> arbMissions = gmMissionList.stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList());
int num = gmActivity.getValue() + (int) price;
@ -205,7 +231,12 @@ public class GmActivityLogic implements IEventHandler {
int rewardNum = (int) (arbMission.getBackRatio()/100d*1000*min);
// 返利妖晶
int[][] reward = {{16,rewardNum}};
rewards.add(reward);
// 发邮件
String mailReward = ItemUtil.getMailReward(reward);
if (!StringUtil.isEmpty(mailReward)){
MailLogic.getInstance().sendMail(user.getId(),arbMission.getActivity().getName(),arbMission.getTitle(),mailReward,TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
}
// 档位信息更新
gmMission.setId(arbMission.getId());
if (num - min > 0){
@ -218,46 +249,20 @@ public class GmActivityLogic implements IEventHandler {
}
}
/**
*
* @param user
*/
public void updateGmActivity(User user){
GmActivityManager gmActivityManager = user.getGmActivityManager();
int version = getRedisUpdateVersion();
if (gmActivityManager.getUpdateVersion() == version){
return;
}
List<ARBActivity> list = findServerActivityList(String.valueOf(GameApplication.serverId));
HashMap<String, GmActivity> activityMap = gmActivityManager.getActivityMap();
// 删除不存在得活动
Set<String> gmKeys = list.stream().map(ARBActivity::getId).collect(Collectors.toSet());
Set<String> gameKeys = new HashSet<>(activityMap.keySet());
for (String key : gameKeys) {
if (!gmKeys.contains(key)){
gmActivityManager.removeActivity(key);
}
}
// 更新活动信息
for (ARBActivity arbActivity : list) {
GmActivity gmActivity = activityMap.getOrDefault(arbActivity.getId(),new GmActivity());
gmActivity.setId(arbActivity.getId());
gmActivity.setType(arbActivity.getType());
gmActivity.setStartTime(arbActivity.getStartTime());
gmActivity.setEndTime(arbActivity.getEndTime());
gmActivityManager.putActivityMap(gmActivity.getId(),gmActivity);
}
gmActivityManager.setUpdateVersion(version);
}
/**
*
* @param user
*/
public void zeroUpdateGmActivity(User user){
updateGmActivity(user);
Map<String, ARBActivity> arbActivityMap = getArbActivity();
GmActivityManager manager = user.getGmActivityManager();
for (GmActivity gmActivity : manager.getActivityMap().values()) {
ARBActivity arbActivity = arbActivityMap.get(gmActivity.getId());
// 活动已经从gm上删除了在这里删除数据库中的
if (arbActivity == null){
manager.removeActivity(gmActivity.getId());
continue;
}
// 单笔累充和妖晶返利每日清零
if (gmActivity.getType() == 1 || gmActivity.getType() == 2){
gmActivity.setValue(0);
@ -266,35 +271,11 @@ public class GmActivityLogic implements IEventHandler {
}
}
/**
*
*/
public static void minuteTask(){
int version = getRedisUpdateVersion();
if (gameUpdateVersion == version){
return;
}
gameUpdateVersion = version;
try {
for (ISession session : OnlineUserManager.sessionMap.values()) {
User user = UserManager.getUser(session.getUid());
AyyncWorker ayyncWorker = new AyyncWorker(user, true, user1 -> {
GmActivityLogic.getInstance().updateGmActivity(user);
});
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
}
MongoUtil.getInstence().lastUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public List<ARBActivity> findAllGmActivity() {
MongoTemplate coreMonoTemplate = MongoUtil.getCoreMongoTemplate();
return coreMonoTemplate.findAll(ARBActivity.class);
}
public List<ARBActivity> findServerActivityList(String serverId) {
List<ARBActivity> resultList = new ArrayList<>();
for (ARBActivity activity : findAllGmActivity()) {
@ -311,16 +292,4 @@ public class GmActivityLogic implements IEventHandler {
return coreMonoTemplate.find(query, ARBMission.class);
}
/**
* redis
* @return
*/
public static int getRedisUpdateVersion(){
String updateVersion = (String) RedisUtil.getInstence().get(RedisKey.GM_ACTIVITY_UPDATE);
if (updateVersion == null){
return 0;
}
return Integer.parseInt(updateVersion);
}
}

View File

@ -1992,7 +1992,7 @@ public class PlayerLogic {
return 0;
}
int lv = 0;
List<SPrestigeConfig> list = typeMap.values().stream().collect(Collectors.toList());
List<SPrestigeConfig> list = new ArrayList<>(typeMap.values());
Item item = user.getItemManager().getItem(list.get(0).getExperience()[0]);
long num = Optional.ofNullable(item).map(Item::getItemNum).orElse(0L);
for (SPrestigeConfig value : list) {

View File

@ -175,13 +175,6 @@ public class MinuteTask extends Thread {
LOGGER.error("跨服排行榜初始化异常Exception::=>{}",e.toString());
}
try {
GmActivityLogic.minuteTask();
}catch (Exception e){
e.printStackTrace();
LOGGER.error("自动返利初始化异常Exception::=>{}",e.toString());
}
try {
ArenaLogic.getInstance().worldSendReward();
}catch (Exception e){