找回开天上报,注释数数上报

back_recharge
jiahuiwen 2022-04-24 16:44:51 +08:00
parent a45d00b522
commit 7c806e5a27
4 changed files with 228 additions and 177 deletions

View File

@ -1,10 +1,21 @@
package com.ljsd.jieling.config.reportData;
import com.google.gson.Gson;
import com.ljsd.GameApplication;
import com.ljsd.GameLogicService;
import com.ljsd.common.mogodb.util.BlockingUniqueQueue;
import com.ljsd.jieling.ktbeans.KTParam;
import com.ljsd.jieling.ktbeans.KTSendBody;
import com.ljsd.jieling.util.http.HttpPool;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import util.StringUtil;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -18,6 +29,10 @@ public class DataMessageUtils {
public static final String restURL = "https://log.trackingio.com/receive/tkio/payment";
// 开天上报
static final BlockingQueue<Object> logQueue = new BlockingUniqueQueue<>();
private static final String sendUrl = "https://gskuld.receiver.extranet.kt007.com:8081/skuld/game/common/";
public static String sendRechargePost(Object info){
String str = gson.toJson(info);
@ -33,10 +48,9 @@ public class DataMessageUtils {
}
return null;
}
public static String sendOnlinePost(Object info){
String str = gson.toJson(info);
return HttpPool.sendPost(sendOnlineURL,str,"application/json");
}
@ -57,4 +71,36 @@ public class DataMessageUtils {
}
return ret.toString().replace("+", "%20");
}
//入队列
public static void addLogQueue(Object info) {
if(GameLogicService.isServiceShutdown()){
return;
}
if (info instanceof KTParam) {
logQueue.offer(info);
}
}
public static void manageData() {
try {
List<Object> sendDataList = new ArrayList<>(10);
logQueue.drainTo(sendDataList, 10);
if (!sendDataList.isEmpty()) {
KTSendBody sendBody = new KTSendBody(sendDataList);
HttpPool.sendPost(sendUrl, gson.toJson(sendBody),"application/json");
}
if (sendDataList.isEmpty()) {
try {
Thread.sleep(10);
return;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.ktbeans;
import com.google.gson.Gson;
import com.ljsd.jieling.config.reportData.DataMessageUtils;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.BeanBuilder.ParamBuilder;
import com.ljsd.jieling.ktbeans.parmsBean.*;
@ -11,6 +12,7 @@ import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.item.ItemLog;
import com.ljsd.jieling.logic.item.ItemLogic;
import config.SGlobalActivity;
import config.SRechargeCommodityNewConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.TimeUtils;
@ -20,143 +22,147 @@ import java.util.Map;
public class KtEventUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(KtEventUtils.class);
private static String[] itemUseType = new String[]{"source","sink"}; //固定字符source 表示收入sink 表示支出
private static String[] userloginType = new String[]{"LOGIN","LOGOUT"}; //仅两种状态登录LOGIN、登出LOGOUT
private static String[] payResult = new String[]{"INVALID","VALID"}; //仅两种状态登录LOGIN、登出LOGOUT
private static String[] itemUseType = new String[]{"source", "sink"}; //固定字符source 表示收入sink 表示支出
private static String[] userloginType = new String[]{"LOGIN", "LOGOUT"}; //仅两种状态登录LOGIN、登出LOGOUT
private static String[] payResult = new String[]{"INVALID", "VALID"}; //仅两种状态登录LOGIN、登出LOGOUT
public static final Logger BILog = LoggerFactory.getLogger("BILog");
private static Map<Integer,String> currencyMap = new HashMap<>();
private static Map<Integer, String> currencyMap = new HashMap<>();
static {
currencyMap.put(Global.SOULCRYSTAL,"currency_1_d"); //魂晶
currencyMap.put(Global.GEM,"currency_2_d"); //妖精
currencyMap.put(Global.GOLD,"currency_3_d");//金币
currencyMap.put(Global.DEVILJADE,"currency_4_d");//妖灵玉
currencyMap.put(Global.ELITEPROOF,"currency_5_d");//精英证明
currencyMap.put(Global.HEARTFIRE,"currency_6_d");//心火明晶
currencyMap.put(Global.SOULCRYSTAL, "currency_1_d"); //魂晶
currencyMap.put(Global.GEM, "currency_2_d"); //妖精
currencyMap.put(Global.GOLD, "currency_3_d");//金币
currencyMap.put(Global.DEVILJADE, "currency_4_d");//妖灵玉
currencyMap.put(Global.ELITEPROOF, "currency_5_d");//精英证明
currencyMap.put(Global.HEARTFIRE, "currency_6_d");//心火明晶
}
private static Gson gson = new Gson();
private static Gson gson = RedisUtil.getInstence().getGson();
public static void onKtEvent(User user,int eventType,Object ...parm){
// ParamEventBean paramEventBean = new ParamEventBean(eventType);
// switch (eventType){
// case ParamEventBean.UserActivityEvent:
// int activityId = (int)parm[0];
// SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
// paramEventBean.add(sGlobalActivity.getSesc());
// paramEventBean.add(sGlobalActivity.getSesc());
// paramEventBean.add(parm[1].toString());
// paramEventBean.add("COMPLETE");
// break;
// case ParamEventBean.UserItemEvent:
// case ParamEventBean.UserCurrencyEvent:
// int useReson = (int)parm[0];
// int useType = (int)parm[1];
// int itemId = (int)parm[2];
// int itemNum = (int)parm[3];
// int itemTotalNum = (int)parm[4];
// paramEventBean.add(itemUseType[useType]);
// paramEventBean.add(String.valueOf(useReson));
// if(currencyMap.containsKey(itemId)){
// paramEventBean.add(currencyMap.get(itemId));
// }else{
// paramEventBean.add(String.valueOf(itemId));
// }
// paramEventBean.add(String.valueOf(itemNum));
// PlayerManager playerInfoManager = user.getPlayerInfoManager();
// ItemLogic.getInstance().addItemLog(new ItemLog(user.getId(),useType,String.valueOf(TimeUtils.now()),useReson,itemId,itemNum,itemTotalNum));
//
// if(parm.length==6){
// String sbReson = String.valueOf(parm[5]);
// BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}|{}",user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(),useType,useReson,itemId,itemNum,itemTotalNum,sbReson);
// }else {
// BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}",user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(),useType,useReson,itemId,itemNum,itemTotalNum);
// }
//
// break;
// case ParamEventBean.UserLoginOutEvent:
// case ParamEventBean.UserLogin:
// int loginType = (int)parm[0];
// paramEventBean.add(userloginType[loginType]);
// break;
// case ParamEventBean.UserStoreEvent:
// int storeId = (int)parm[0];
// int buyItemId = (int)parm[1];
// int goldType = (int)parm[2];
// int buyTimes = (int)parm[3];
// int costTotal = (int)parm[4];
// paramEventBean.add(String.valueOf(storeId));
// paramEventBean.add(String.valueOf(buyItemId));
// if(currencyMap.containsKey(goldType)){
// paramEventBean.add(currencyMap.get(goldType));
// }else{
// paramEventBean.add(Integer.toString(goldType));
// }
// paramEventBean.add(String.valueOf(buyTimes));
// paramEventBean.add(String.valueOf(costTotal/buyTimes));
// paramEventBean.add(String.valueOf(costTotal));
// break;
// case ParamEventBean.UserPayEvent:
// int goodsId = (int)parm[0];
// String orderId = (String)parm[1];
// String payValid = payResult[(int)parm[2]];
// String amount = String.valueOf( ((int)parm[3]));
// SRechargeCommodityConfig sRechargeCommodityConfig = SRechargeCommodityConfig.rechargeCommodityConfigMap.get(goodsId);
// paramEventBean.add(sRechargeCommodityConfig.getName());
// paramEventBean.add(orderId);
// paramEventBean.add(payValid);
// paramEventBean.add(amount);
// break;
// case ParamEventBean.UserRegister:
// break;
// case ParamEventBean.UserTaskEvent:
// int misionType = (int)parm[0];
// int misionId = (int)parm[1];
// paramEventBean.add(misionType+"_"+misionId);
// paramEventBean.add("COMPLETE");
// break;
// case ParamEventBean.UserGameType:
// paramEventBean.add("玩法");
// String type = KTGameType.getName((int) parm[0]);
// paramEventBean.add(String.valueOf(type));
// paramEventBean.add(String.valueOf(parm[1]));
// paramEventBean.add("COMPLETE");
// eventType = ParamEventBean.UserActivityEvent;
// break;
// }
//
// KTParam ktParam = ParamBuilder.paramBuild(user, eventType, paramEventBean);
// DataMessageUtils.addLogQueue(ktParam);
// LOGGER.info("ktparm -- > {}",gson.toJson(ktParam));
public static void onKtEvent(User user, int eventType, Object... parm) {
ParamEventBean paramEventBean = new ParamEventBean(eventType);
switch (eventType) {
case ParamEventBean.UserActivityEvent:
int activityId = (int) parm[0];
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
paramEventBean.add(sGlobalActivity.getSesc());
paramEventBean.add(sGlobalActivity.getSesc());
paramEventBean.add(parm[1].toString());
paramEventBean.add("COMPLETE");
break;
case ParamEventBean.UserItemEvent:
case ParamEventBean.UserCurrencyEvent:
int useReson = (int) parm[0];
int useType = (int) parm[1];
int itemId = (int) parm[2];
long itemNum = (long) parm[3];
long itemTotalNum = (long) parm[4];
paramEventBean.add(itemUseType[useType]);
paramEventBean.add(String.valueOf(useReson));
if (currencyMap.containsKey(itemId)) {
paramEventBean.add(currencyMap.get(itemId));
} else {
paramEventBean.add(String.valueOf(itemId));
}
paramEventBean.add(String.valueOf(itemNum));
PlayerManager playerInfoManager = user.getPlayerInfoManager();
ItemLogic.getInstance().addItemLog(new ItemLog(user.getId(), useType, user.getPlayerInfoManager().getLevel(), String.valueOf(TimeUtils.now()), useReson, itemId, itemNum, itemTotalNum));
if (parm.length == 6) {
String sbReson = String.valueOf(parm[5]);
BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}|{}", user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(), useType, useReson, itemId, itemNum, itemTotalNum, sbReson);
} else {
BILog.info("itemflow {}|{}|{}|{}|{}|{}|{}|{}", user.getId(), playerInfoManager.getLevel(), playerInfoManager.getVipLevel(), useType, useReson, itemId, itemNum, itemTotalNum);
}
break;
case ParamEventBean.UserLoginOutEvent:
case ParamEventBean.UserLogin:
int loginType = (int) parm[0];
paramEventBean.add(userloginType[loginType]);
break;
case ParamEventBean.UserStoreEvent:
int storeId = (int) parm[0];
int buyItemId = (int) parm[1];
int goldType = (int) parm[2];
int buyTimes = (int) parm[3];
int costTotal = (int) parm[4];
paramEventBean.add(String.valueOf(storeId));
paramEventBean.add(String.valueOf(buyItemId));
if (currencyMap.containsKey(goldType)) {
paramEventBean.add(currencyMap.get(goldType));
} else {
paramEventBean.add(Integer.toString(goldType));
}
paramEventBean.add(String.valueOf(buyTimes));
paramEventBean.add(String.valueOf(costTotal / buyTimes));
paramEventBean.add(String.valueOf(costTotal));
break;
case ParamEventBean.UserPayEvent:
int goodsId = (int) parm[0];
String orderId = (String) parm[1];
String payValid = payResult[(int) parm[2]];
String amount = String.valueOf(((int) parm[3]));
SRechargeCommodityNewConfig sRechargeCommodityConfig = SRechargeCommodityNewConfig.sdkconfigMap.get(goodsId);
paramEventBean.add(sRechargeCommodityConfig.getName());
paramEventBean.add(orderId);
paramEventBean.add(payValid);
paramEventBean.add(amount);
break;
case ParamEventBean.UserRegister:
break;
case ParamEventBean.UserTaskEvent:
int misionType = (int) parm[0];
int misionId = (int) parm[1];
paramEventBean.add(misionType + "_" + misionId);
paramEventBean.add("COMPLETE");
break;
case ParamEventBean.UserGameType:
paramEventBean.add("玩法");
String type = KTGameType.getName((int) parm[0]);
paramEventBean.add(String.valueOf(type));
paramEventBean.add(String.valueOf(parm[1]));
paramEventBean.add("COMPLETE");
eventType = ParamEventBean.UserActivityEvent;
break;
}
KTParam ktParam = ParamBuilder.paramBuild(user, eventType, paramEventBean);
DataMessageUtils.addLogQueue(ktParam);
LOGGER.info("ktparm -- > {}", gson.toJson(ktParam));
}
public static ParamEnvironmentBean enviromentBuild(int uid){
return KTEnvironmentUtil.getUserEnviromentInfoById(uid);
public static ParamEnvironmentBean enviromentBuild(int uid) {
return KTEnvironmentUtil.getUserEnviromentInfoById(uid);
}
public static ParamEnvironmentSimpleBean simpleEnviromentBuild(int uid){
public static ParamEnvironmentSimpleBean simpleEnviromentBuild(int uid) {
return KTEnvironmentUtil.getUserSimpleEnviromentInfoById(uid);
}
public static ParamDataBean dataBuild(int uid){
public static ParamDataBean dataBuild(int uid) {
return KTDataUtil.getUserDataInfoById(uid);
}
public static ParamUserBean userBuild(User user){
public static ParamUserBean userBuild(User user) {
return KTUserUtil.getUserById(user);
}
public static ParamSimpleUserBean userSimpleBuild(User user){
public static ParamSimpleUserBean userSimpleBuild(User user) {
return KTUserUtil.getSimpleUserById(user);
}
public static ParamRoleBean roleBuild(User user){
public static ParamRoleBean roleBuild(User user) {
return KTRoleUtil.getRoleById(user);
}
public static ParamRoleBean roleForLoginOrLogoutBuild(User user){
public static ParamRoleBean roleForLoginOrLogoutBuild(User user) {
ParamRoleBean paramRoleBean = KTRoleUtil.getRoleById(user);
paramRoleBean.setEco_force_11_a(HeroLogic.getInstance().getEcoForce11A(user));
return paramRoleBean;
}
}

View File

@ -30,15 +30,15 @@ import java.util.concurrent.ConcurrentHashMap;
public class ReportUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ReportUtil.class);
private static final String LOG_PATH = "../reportLog_"+GameApplication.serverId;
// private static final String LOG_PATH = "../reportLog_"+GameApplication.serverId;
public static Map<Integer,ReportBaseBean> baseBeanMap = new ConcurrentHashMap<>();
private static ThinkingDataAnalytics ta = new ThinkingDataAnalytics(new ThinkingDataAnalytics.LoggerConsumer(LOG_PATH));
// private static ThinkingDataAnalytics ta = new ThinkingDataAnalytics(new ThinkingDataAnalytics.LoggerConsumer(LOG_PATH));
private static ThinkingDataAnalytics serverTa = new ThinkingDataAnalytics(new ThinkingDataAnalytics.LoggerConsumer(LOG_PATH));
// private static ThinkingDataAnalytics serverTa = new ThinkingDataAnalytics(new ThinkingDataAnalytics.LoggerConsumer(LOG_PATH));
public static BlockingQueue<ReportUserEvent> queue = new BlockingUniqueQueue<>();
// public static BlockingQueue<ReportUserEvent> queue = new BlockingUniqueQueue<>();
public static final int COIN_ID = 14;
@ -49,27 +49,26 @@ public class ReportUtil {
//对外接口只有一个
public static void onReportEvent(User user,int type,Object... param) throws Exception {
if(!GameApplication.serverProperties.isSendlog37()){
ta=null;
return;
}
ReportUserEvent reportUserEvent = userToReportBean(user);
//根据事件类型获取对应处理
ReportEventEnum report = ReportEventEnum.getReport(type);
if(report==null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
//设置用户属性
Map<Integer,Map<String, Object>> userProperties = report.getEventHandler().getUserProperties(user);
reportUserEvent.setUserProperties(userProperties);
//设置事件属性
Map<String, Object> eventProperties = report.getEventHandler().getEventProperties(report,param);
reportUserEvent.setEventInfo(eventProperties);
//设置事件名称
reportUserEvent.setEventName(report.getEventName());
//执行(改为异步)
queue.offer(reportUserEvent);
// doReport(reportUserEvent);
// if(!GameApplication.serverProperties.isSendlog37()){
// ta=null;
// return;
// }
// ReportUserEvent reportUserEvent = userToReportBean(user);
// //根据事件类型获取对应处理
// ReportEventEnum report = ReportEventEnum.getReport(type);
// if(report==null){
// throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
// }
// //设置用户属性
// Map<Integer,Map<String, Object>> userProperties = report.getEventHandler().getUserProperties(user);
// reportUserEvent.setUserProperties(userProperties);
// //设置事件属性
// Map<String, Object> eventProperties = report.getEventHandler().getEventProperties(report,param);
// reportUserEvent.setEventInfo(eventProperties);
// //设置事件名称
// reportUserEvent.setEventName(report.getEventName());
// //执行(改为异步)
// queue.offer(reportUserEvent);
}
private static ReportUserEvent userToReportBean(User user){
@ -113,43 +112,43 @@ public class ReportUtil {
}
public static void doReport(ReportUserEvent reportUserEvent){
try {
//todo 访客id
ta.setSuperProperties(reportUserEvent.getBaseInfo());
ReportBaseBean baseBean = reportUserEvent.getBaseBean();
if(reportUserEvent.getUserProperties()!=null){
for(int type:reportUserEvent.getUserProperties().keySet()){
if(type==1){
ta.user_set(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getUserProperties().get(type));
}else{
ta.user_setOnce(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getUserProperties().get(type));
}
}
}
if(!reportUserEvent.getEventName().isEmpty()){
ta.track(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getEventName(),reportUserEvent.getEventInfo());
}
ta.flush();
} catch (Exception e) {
//异常处理
e.printStackTrace();
System.out.println(reportUserEvent.getBaseInfo().toString());
System.out.println("except:"+e);
}
// try {
// //todo 访客id
// ta.setSuperProperties(reportUserEvent.getBaseInfo());
// ReportBaseBean baseBean = reportUserEvent.getBaseBean();
// if(reportUserEvent.getUserProperties()!=null){
// for(int type:reportUserEvent.getUserProperties().keySet()){
// if(type==1){
// ta.user_set(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getUserProperties().get(type));
// }else{
// ta.user_setOnce(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getUserProperties().get(type));
// }
// }
// }
// if(!reportUserEvent.getEventName().isEmpty()){
// ta.track(baseBean.getAccount_id(),baseBean.getDistinct_id(),reportUserEvent.getEventName(),reportUserEvent.getEventInfo());
// }
// ta.flush();
// } catch (Exception e) {
// //异常处理
// e.printStackTrace();
// System.out.println(reportUserEvent.getBaseInfo().toString());
// System.out.println("except:"+e);
// }
}
public static void doReport(ReportServerEvent reportServerEvent){
try {
//todo 访客id
Map<String, Object> eventProperties = reportServerEvent.getEventProperties();
Object server_id = eventProperties.getOrDefault("server_id", "10001");
serverTa.track(server_id.toString(),server_id.toString(),reportServerEvent.getEventName(),eventProperties);
serverTa.flush();
} catch (Exception e) {
//异常处理
e.printStackTrace();
System.out.println("except:"+e);
}
// try {
// //todo 访客id
// Map<String, Object> eventProperties = reportServerEvent.getEventProperties();
// Object server_id = eventProperties.getOrDefault("server_id", "10001");
// serverTa.track(server_id.toString(),server_id.toString(),reportServerEvent.getEventName(),eventProperties);
// serverTa.flush();
// } catch (Exception e) {
// //异常处理
// e.printStackTrace();
// System.out.println("except:"+e);
// }
}
public static void saveBaseInfo(int uid,PlayerInfoProto.LoginRequest loginRequest){

View File

@ -1,5 +1,6 @@
package com.ljsd.jieling.thread.task;
import com.ljsd.jieling.config.reportData.DataMessageUtils;
import com.ljsd.jieling.ktbeans.ReportUserEvent;
import com.ljsd.jieling.ktbeans.ReportUtil;
import org.springframework.stereotype.Component;
@ -12,14 +13,13 @@ public class DataReportTask extends Thread {
}
@Override
public void run() {
// if(GameApplication.serverProperties.isDebug()){
// return;
// }
try {
int i = 0;
while(true){
ReportUserEvent event = ReportUtil.queue.take();
ReportUtil.doReport(event);
// ReportUserEvent event = ReportUtil.queue.take();
// ReportUtil.doReport(event);
DataMessageUtils.manageData();
i++;
if (i >= 1000) {
i = 0;