/* 按天排序的 */ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; using System.IO; using System.Text; using Google.Protobuf.WellKnownTypes; using Sog; namespace bill_statistics { public class BillAlldays : Singleton { public Dictionary m_billAllDays = new Dictionary(); public Dictionary m_firstRecharge = new Dictionary(); public Dictionary m_newUserWithDay = new Dictionary(); public Dictionary m_newUserLongKeepWithDay = new Dictionary(); //广告id和上报信息的对应,比如渠道 public Dictionary m_adjustCallback = new Dictionary(); public Dictionary m_adjustAllChannel = new Dictionary(); public NumberFormatInfo nfi; //自己的月玩牌局数 //public Dictionary m_ourOwnGameCount = new Dictionary(); public Dictionary m_ownNameCount = new Dictionary(); private DateTime m_readFileDayStartTime; public BillAlldays() { var numFormat = CultureInfo.CurrentCulture.NumberFormat; nfi = new NumberFormatInfo() { CurrencyDecimalDigits = numFormat.PercentDecimalDigits, CurrencyDecimalSeparator = numFormat.PercentDecimalSeparator, CurrencyGroupSeparator = numFormat.PercentGroupSeparator, CurrencyGroupSizes = numFormat.PercentGroupSizes, CurrencyNegativePattern = numFormat.PercentNegativePattern, CurrencyPositivePattern = numFormat.PercentPositivePattern, CurrencySymbol = numFormat.PercentSymbol }; } public void ReadDataFromFile(int onlyDayNumber) { LogFileListSvc.ReadDataFromFile(); if (onlyDayNumber > 0) { //只保留可以计算昨天到今天留存之类的数据 LogFileListSvc.DeleteNoUseFileByOnlyDayNumber(onlyDayNumber); } int readcountSeq = 0; foreach (var filename in LogFileListSvc.AllFileName) { readcountSeq++; string strFullPathName = LogFileListSvc.strDir + "/" + filename; //入库模式需要预先判断是否已经入过了,重复入库会有问题 if (BillMode.Mode == BillModeType.EXPORT_HOUR_LOG || BillMode.Mode == BillModeType.EXPROT_ALL_HOUR) { //已经入过库了,忽略 if(ExportToMysql.Instance.CheckThisHourAlreadyInSql(strFullPathName)) { continue; } } ReadOneFile(strFullPathName, readcountSeq); } BillStatistics.SaveDataToDB(Statistics_type.register, ExportToMysql.Instance.GetMySqlDB()); BillStatistics.SaveDataToDB(Statistics_type.recharge, ExportToMysql.Instance.GetMySqlDB()); } private void ReadOneFile(string fileName, int readcountSeq) { Console.WriteLine("ReadOneFile {0}", fileName); FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8); fileStream.Seek(0, SeekOrigin.Begin); string content = streamReader.ReadLine(); //int line = 10; while (content != null/* && line-- > 0*/) //注释掉的为不读数据, { ReadOneLineBillLog(content); content = streamReader.ReadLine(); } streamReader.Dispose(); fileStream.Dispose(); //最后一个文件读完了 if(readcountSeq == LogFileListSvc.AllFileName.Count) { BillInfoEveryDay lastDayInfo = GetBillInfoByDay(m_readFileDayStartTime, false); if (lastDayInfo != null) { lastDayInfo.CalcAfterThisDayAllHourReadFinish(); } } } private void ReadOneLineBillLog(string billlog) { //1055是客户端上报操作日志,没有计算意义,直接返回,提高效率 if (billlog.Contains("|iType=1055|")) { return; } string[] splitStr = billlog.Split('|'); if(splitStr.Length < 3) { return; } int billType = BillTypeUtils.GetBillType(splitStr[1]); DateTime curedateTime = BillTypeUtils.GetTime(splitStr[0]); //获取这一天的标准时间 DateTime dayStartTime = curedateTime - curedateTime.TimeOfDay; //新的一天了,说明老的一天的数据已经读完,调用一下计算接口,清理一些临时数据,节省内存 if(m_readFileDayStartTime != dayStartTime) { BillInfoEveryDay lastDayInfo = GetBillInfoByDay(m_readFileDayStartTime, false); if(lastDayInfo != null) { lastDayInfo.CalcAfterThisDayAllHourReadFinish(); } //设置成新的一天 m_readFileDayStartTime = dayStartTime; } int uid = 0; string smallStrUid = splitStr[2].ToLower(); if (smallStrUid.Contains("uid")) { uid = BillTypeUtils.GetUid(smallStrUid); } //长时间的留存和付费,只计算少数逻辑 if (BillMode.Mode == BillModeType.LONG_KEEP) { //计算长留存和付费 switch (billType) { //login case 1000: ReadLoginBill(dayStartTime, splitStr); break; case 1005: ReadPayGoogleSuccessRes(dayStartTime, splitStr); break; } return; } switch (billType) { //login case (int)BillLogType.Login: ReadLoginBill(dayStartTime, splitStr); break; case (int)BillLogType.Logout: ReadLogoutBill(dayStartTime, splitStr); break; case (int)BillLogType.PayGoogleSuccessRes: ReadPayGoogleSuccessRes(dayStartTime, splitStr); break; case (int)BillLogType.DiamondChipExchange: ReadDiamondChipExchange(dayStartTime, uid, splitStr); break; case (int)BillLogType.ChangeDiamond: ReadChangeDiamond(dayStartTime, uid, splitStr); break; case (int)BillLogType.ChangeChip: ReadChangeChip(dayStartTime, uid, splitStr); break; case (int)BillLogType.ChangeItem: ReadChangeItem(dayStartTime, uid, splitStr); break; case 1030: ReadMailStart(dayStartTime, uid, splitStr); break; case 1031: ReadMailOpRet(dayStartTime, splitStr); break; case 1032: ReadSendMailToPlayer(dayStartTime, uid, splitStr); break; /*case 1041: ReadExchangeCouponDbRes(curedateTime,dayStartTime, splitStr); break;*/ case 1051: ReadFinishNewbitStep(dayStartTime, splitStr); break; case 1070: ReadShareFacebook(dayStartTime, uid, splitStr); break; case 1071: ReadGiveFriendChipDaily(dayStartTime, uid, splitStr); break; case 1072: ReadInviteFacebook(dayStartTime, uid, splitStr); break; case 1090: ReadFocusFacebook(dayStartTime, uid, splitStr); break; case 1091: ReadFriendList(dayStartTime, uid, splitStr); break; case 3001: ReadOnlineBill(dayStartTime, splitStr); break; case 4001: ReadAdjustInstallReport(dayStartTime, splitStr); break; case 1142: ReadDayRetentionOptimizetion(dayStartTime, uid, splitStr); break; case 1146: ReadHorsePlay(dayStartTime, uid, splitStr); break; } if (BillMode.Mode == BillModeType.EXPORT_HOUR_LOG || BillMode.Mode == BillModeType.EXPROT_ALL_HOUR) { if (BillTypeUtils.NeedExportToSqlByType(billType)) { ExportToMysql.Instance.DoExportBillType(splitStr); } } } private void ReadTreasureBuy(DateTime dateTime, int uid ,string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int id = int.Parse(splitStr[3].Split('=')[1]); long openTime = long.Parse(splitStr[4].Split('=')[1]); int seq = int.Parse(splitStr[5].Split('=')[1]); int totalCountPlayer = int.Parse(splitStr[7].Split('=')[1]); info.AddTreasureBuy(uid, id, totalCountPlayer); } private void ReadTreasurePrize(DateTime dateTime, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int id = int.Parse(splitStr[2].Split('=')[1]); long openTime = long.Parse(splitStr[3].Split('=')[1]); int seq = int.Parse(splitStr[4].Split('=')[1]); long prizeUId = long.Parse(splitStr[7].Split('=')[1]); int prizeIndex = int.Parse(splitStr[8].Split('=')[1]); info.AddTreasure(id, prizeIndex,prizeUId); } private void ReadOnlineBill( DateTime dateTime, string[] splitStr ) { int hour = int.Parse(splitStr[0].Split(' ')[1].Split(':')[0]); int userNum = int.Parse(splitStr[2].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddOnlineUser(hour, userNum); } private void ReadLoginBill(DateTime dateTime, string[] splitStr) { DateTime curedateTime = BillTypeUtils.GetTime(splitStr[0]); int accType = int.Parse(splitStr[2].Split('=')[1]); int uid = int.Parse(splitStr[4].Split('=')[1]); int loginCount = int.Parse(splitStr[5].Split('=')[1]); bool bIsNew = (loginCount == 1); BillInfoEveryDay info = GetBillInfoByDay(dateTime); if (BillMode.Mode == BillModeType.LONG_KEEP) { info.AddLoginInfoForLongKeep(curedateTime, uid, accType, bIsNew); } else { string strAccount = splitStr[3].Split('=')[1]; int onlineTime = int.Parse(splitStr[6].Split('=')[1]); int level = int.Parse(splitStr[7].Split('=')[1]); Int64 chip = Int64.Parse(splitStr[8].Split('=')[1]); Int64 diamond = Int64.Parse(splitStr[9].Split('=')[1]); string nick = ""; if (splitStr.Length > 12) { nick = splitStr[12].Split('=')[1]; } int totalPayCount = 0;// string adid = null;//广告id if(splitStr.Length > 14) { totalPayCount = int.Parse(splitStr[14].Split('=')[1]); } if(splitStr.Length > 22) { adid = splitStr[22].Split('=')[1]; } int platform = 0; if (splitStr.Length > 23) { platform = int.Parse(splitStr[23].Split('=')[1]); } int winPercent = 0; if(splitStr.Length > 26) { winPercent = int.Parse(splitStr[26].Split('=')[1]); } info.AddLoginInfo(curedateTime, uid, strAccount, accType, bIsNew, chip, diamond, onlineTime, nick, totalPayCount,adid,platform, winPercent); } } private void ReadLogoutBill(DateTime dateTime, string[] splitStr) { DateTime curedateTime = BillTypeUtils.GetTime(splitStr[0]); int accType = int.Parse(splitStr[2].Split('=')[1]); string strAccount = splitStr[3].Split('=')[1]; int uid = int.Parse(splitStr[4].Split('=')[1]); int loginCount = int.Parse(splitStr[5].Split('=')[1]); int onlineTime = int.Parse(splitStr[6].Split('=')[1]); int level = int.Parse(splitStr[7].Split('=')[1]); Int64 chip = Int64.Parse(splitStr[8].Split('=')[1]); Int64 diamond = Int64.Parse(splitStr[9].Split('=')[1]); string adid = null; if (splitStr.Length > 11) { adid = splitStr[11].Split('=')[1]; } bool bIsNew = (loginCount == 1); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddLogoutInfo(dateTime, curedateTime, accType, strAccount, uid, loginCount, onlineTime, level, chip, diamond, bIsNew, adid); } //2021-07-05 04:28:47|iType=1005|Iuid=104716|sitemid=gp_novicePack1|idiamond=0|imoney=499|sorderid=104716-1625473704-699-116737-gp_novicePack1-0-0-pm_499|iret=0|sorderid3rd=HUA10186179029|idiamondGift=0|ifirstPayUser=1|snick=nea200pl|ipayType=3|IaddChip=0|ipayStatus=2|iamount=499|scurrency=USD private void ReadPayGoogleSuccessRes(DateTime dateTime, string[] splitStr) { int uid = int.Parse(splitStr[2].Split('=')[1]); string strItemId = splitStr[3].Split('=')[1]; Int64 diamond = Int64.Parse(splitStr[4].Split('=')[1]); int money = int.Parse(splitStr[5].Split('=')[1]); string orderid = splitStr[6].Split('=')[1]; int ret = int.Parse(splitStr[7].Split('=')[1]); int firstPay = 0; if (splitStr.Length > 10) { firstPay = int.Parse(splitStr[10].Split('=')[1]); } Int64 addDiamond = 0; if (splitStr.Length > 9) { addDiamond = int.Parse(splitStr[9].Split('=')[1]); } if (splitStr.Length == 9) { addDiamond = diamond; } DateTime now = DateTime.Parse(splitStr[0]); //if (addDiamond > 0) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddPayGoogleSuccessRes(dateTime, uid, strItemId, addDiamond, money, orderid, ret, now, firstPay); } } public BillInfoEveryDay GetBillInfoByDay(DateTime dateTime, bool addNewIfNotExist = true) { if (m_billAllDays.ContainsKey(dateTime)) { return m_billAllDays[dateTime]; } if (addNewIfNotExist) { BillInfoEveryDay info = new BillInfoEveryDay(); info.BillDate = dateTime; m_billAllDays.Add(dateTime, info); return info; } return null; } public void CalcAll() { //先排序 m_billAllDays = m_billAllDays.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); if(BillMode.Mode == BillModeType.LONG_KEEP) { foreach (KeyValuePair pair in m_billAllDays) { CalcOneDayLongKeep(pair.Key, pair.Value); } } else { foreach (KeyValuePair pair in m_billAllDays) { pair.Value.CalcThis(); } foreach (KeyValuePair pair in m_billAllDays) { CalcOneDay(pair.Key, pair.Value); } //月数据 CalcAllDayMonth(); } // 新用户付费 CalcNewUserRechargeInfo(); } public void NewUserRechargeMethod(PayGoogleSuccessRes pay, DateTime dateTime) { DateTime firstLoginBillDate; if (BillMode.Mode == BillModeType.LONG_KEEP) { UserInfoLongKeep userInfo; if (!m_newUserLongKeepWithDay.TryGetValue(pay.uid, out userInfo)) { return; } firstLoginBillDate = userInfo.firstLoginBillDate; } else { UserInfo userInfo; if (!m_newUserWithDay.TryGetValue(pay.uid, out userInfo)) { return; } firstLoginBillDate = userInfo.firstLoginBillDate; } var firstDayInfo = GetBillInfoByDay(firstLoginBillDate); TimeSpan ts = dateTime - firstLoginBillDate; int daysGap = (int)ts.TotalDays; if (daysGap < 1) { firstDayInfo.m_newUserRechargeMoney1 += pay.money; firstDayInfo.m_newUserRechargeCount1++; } if (daysGap < 2) { firstDayInfo.m_newUserRechargeMoney2 += pay.money; firstDayInfo.m_newUserRechargeCount2++; } if (daysGap < 3) { firstDayInfo.m_newUserRechargeMoney3 += pay.money; firstDayInfo.m_newUserRechargeCount3++; } if (daysGap < 7) { firstDayInfo.m_newUserRechargeMoney7 += pay.money; firstDayInfo.m_newUserRechargeCount7++; } if (daysGap < 14) { firstDayInfo.m_newUserRechargeMoney14 += pay.money; firstDayInfo.m_newUserRechargeCount14++; } if (daysGap < 30) { firstDayInfo.m_newUserRechargeMoney30 += pay.money; firstDayInfo.m_newUserRechargeCount30++; } if (daysGap < 60) { firstDayInfo.m_newUserRechargeMoney60 += pay.money; firstDayInfo.m_newUserRechargeCount60++; } if (daysGap < 90) { firstDayInfo.m_newUserRechargeMoney90 += pay.money; firstDayInfo.m_newUserRechargeCount90++; } if (daysGap < 120) { firstDayInfo.m_newUserRechargeMoney120 += pay.money; firstDayInfo.m_newUserRechargeCount120++; } if (daysGap < 150) { firstDayInfo.m_newUserRechargeMoney150 += pay.money; firstDayInfo.m_newUserRechargeCount150++; } if (daysGap < 180) { firstDayInfo.m_newUserRechargeMoney180 += pay.money; firstDayInfo.m_newUserRechargeCount180++; } } public void CalcNewUserRechargeInfo() { foreach (KeyValuePair pair in m_billAllDays) { DateTime dateTime = pair.Key; BillInfoEveryDay info = pair.Value; foreach (var pay in info.m_PayGoogleSuccessResUser.Values) { NewUserRechargeMethod(pay, dateTime); } } } private void CalcOneDayKeepLostUser(int index, DateTime dateTime, BillInfoEveryDay billInfo) { DateTime dateTimeNew = dateTime.AddDays(index); if (m_billAllDays.ContainsKey(dateTimeNew)) { BillInfoEveryDay billInfoNew = m_billAllDays[dateTimeNew]; billInfo.CalcUserKeep(index, billInfoNew); billInfo.CalcLostUserChip(index, billInfoNew); billInfo.CalcLostNewUserChip(index, billInfoNew); } } private void CalcOneDayKeepLostUserLongKeep(int index, DateTime dateTime, BillInfoEveryDay billInfo) { DateTime dateTimeNew = dateTime.AddDays(index); if (m_billAllDays.ContainsKey(dateTimeNew)) { BillInfoEveryDay billInfoNew = m_billAllDays[dateTimeNew]; billInfo.CalcUserKeepNewLongKeep(index, billInfoNew); } } private void CalcOneDay(DateTime dateTime, BillInfoEveryDay billInfo) { //算7天留存 int i = 0; for (; i < 7; i++) { CalcOneDayKeepLostUser(i + 1, dateTime, billInfo); } //15 //30 CalcOneDayKeepLostUser(15, dateTime, billInfo); CalcOneDayKeepLostUser(30, dateTime, billInfo); } private void CalcOneDayLongKeep(DateTime dateTime, BillInfoEveryDay billInfo) { //算7天留存 int i = 0; for (; i < 7; i++) { CalcOneDayKeepLostUserLongKeep(i + 1, dateTime, billInfo); } //15 //30 CalcOneDayKeepLostUserLongKeep(15, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(30, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(60, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(90, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(120, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(150, dateTime, billInfo); CalcOneDayKeepLostUserLongKeep(180, dateTime, billInfo); } //计算月数据 private void CalcAllDayMonth() { foreach(var onedayPair in m_billAllDays) { DateTime datTime = onedayPair.Key; //先把自己的加上 onedayPair.Value.AddForMonth(onedayPair.Value); for (int i = 1 ; i < datTime.Day; i++) { //取前一天 DateTime lastDay = datTime.AddDays(-i); if(m_billAllDays.ContainsKey(lastDay)) { BillInfoEveryDay lastDayInfo = m_billAllDays[lastDay]; onedayPair.Value.AddForMonth(lastDayInfo); } } } } private void ReadMailOpRet(DateTime dateTime, string[] splitStr) { int opUid = int.Parse(splitStr[2].Split('=')[1]); int opType = int.Parse(splitStr[3].Split('=')[1]); uint mailID = uint.Parse(splitStr[4].Split('=')[1]); int mailType = int.Parse(splitStr[5].Split('=')[1]); int ownerUid = int.Parse(splitStr[6].Split('=')[1]); int senderUid = int.Parse(splitStr[7].Split('=')[1]); long senderTime = int.Parse(splitStr[8].Split('=')[1]); int ret = int.Parse(splitStr[9].Split('=')[1]); long insertUniqueID = long.Parse(splitStr[10].Split('=')[1]); long getItemTime = long.Parse(splitStr[11].Split('=')[1]); long deleteTime = long.Parse(splitStr[12].Split('=')[1]); string title = splitStr[13].Split('=')[1]; string content = splitStr[14].Split('=')[1]; Int64 chip = 0; if (splitStr.Length > 15) { if (splitStr[15].Contains("=")) { chip = Int64.Parse(splitStr[15].Split('=')[1]); } } Int64 diamond = 0; if (splitStr.Length > 16) { if (splitStr[16].Contains("=")) { diamond = Int64.Parse(splitStr[16].Split('=')[1]); } } //Int64 chip = Int64.Parse(splitStr[15].Split('=')[1]); //Int64 diamond = Int64.Parse(splitStr[16].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddMailOpRet(opUid, opType, mailID, mailType, ownerUid, senderUid, senderTime, ret, insertUniqueID, getItemTime, deleteTime, title, content, chip, diamond); } private void ReadSendMailToPlayer(DateTime dateTime, long uid, string[] splitStr) { long targetUid = long.Parse(splitStr[3].Split('=')[1]); long chip = long.Parse(splitStr[5].Split('=')[1]); long tax = long.Parse(splitStr[6].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.ChipSendPlayerMail += chip; info.ChipSendPlayerMailTax += tax; info.ChipConsume += /*chip + */tax; info.ChipTrans += chip; } private void ReadExchangeCouponDbRes(DateTime curedateTim, DateTime dateTime, string[] splitStr) { int uid = int.Parse(splitStr[2].Split('=')[1]); string nick = splitStr[3].Split('=')[1]; int itemid = int.Parse(splitStr[4].Split('=')[1]); long uniqueID = long.Parse(splitStr[5].Split('=')[1]); int phoneCardMoney = int.Parse(splitStr[6].Split('=')[1]); string transactionId = splitStr[7].Split('=')[1]; int status = int.Parse(splitStr[8].Split('=')[1]); int ret = int.Parse(splitStr[9].Split('=')[1]); string trueName = splitStr[10].Split('=')[1]; string phoneNum = splitStr[11].Split('=')[1]; string telcom = splitStr[12].Split('=')[1]; string email = splitStr[13].Split('=')[1]; BillInfoEveryDay info = GetBillInfoByDay(dateTime); if (ret == 0) { info.AddExchangeCouponDbRes(curedateTim, uid, nick, itemid, uniqueID, phoneCardMoney, transactionId, status, ret, trueName, phoneNum, telcom, email); } } private void ReadFinishNewbitStep(DateTime dateTime, string[] splitStr) { int uid = int.Parse(splitStr[2].Split('=')[1]); int step = int.Parse(splitStr[3].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddFinishNewbitStep(uid, step); } private void ReadShareFacebook(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int rewardId = 0; // 兼容老的日志格式 if (splitStr.Count() > 3) { rewardId = int.Parse(splitStr[3].Split('=')[1]); } info.AddShareFacebook(uid, rewardId); } private void ReadGiveFriendChipDaily(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int recvUid = int.Parse(splitStr[3].Split('=')[1]); info.AddGiveFriendChipDaily(uid, recvUid); } private void ReadInviteFacebook(DateTime dateTime, int uid, string[] splitStr) { int iCount = int.Parse(splitStr[3].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddInviteFacebook(uid, iCount); } private void ReadFocusFacebook(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddFocusFacebook(uid); } private void ReadDiamondChipExchange(DateTime dateTime, int uid, string[] splitStr) { int iDescID = int.Parse(splitStr[3].Split('=')[1]); Int64 iDiamond = Int64.Parse(splitStr[4].Split('=')[1]); Int64 iChip = Int64.Parse(splitStr[5].Split('=')[1]); Int64 iAfterDiamond = Int64.Parse(splitStr[6].Split('=')[1]); Int64 iAfterChip = Int64.Parse(splitStr[7].Split('=')[1]); int iIsDiscount = int.Parse(splitStr[8].Split('=')[1]); int iItemId = int.Parse(splitStr[9].Split('=')[1]); int iItemCount = int.Parse(splitStr[10].Split('=')[1]); BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddDiamondChipExchange(uid, iDescID, iDiamond, iChip, iAfterDiamond, iAfterChip, iIsDiscount, iItemId, iItemCount); } private void ReadChangeDiamond(DateTime dateTime, int uid, string[] splitStr) { Int64 ioldDiamond = Int64.Parse(splitStr[3].Split('=')[1]); Int64 inewDiamond = Int64.Parse(splitStr[4].Split('=')[1]); Int64 ichange = Int64.Parse(splitStr[5].Split('=')[1]); string reason = splitStr[6].Split('=')[1]; string param1 = null; if (splitStr.Length > 7) { param1 = splitStr[7].Split('=')[1]; } BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddChangeDiamond(uid, ioldDiamond, inewDiamond, ichange, reason, param1); } private void ReadChangeChip(DateTime dateTime, int uid, string[] splitStr) { DateTime curedateTime = BillTypeUtils.GetTime(splitStr[0]); Int64 ioldChip = Int64.Parse(splitStr[3].Split('=')[1]); Int64 inewChip = Int64.Parse(splitStr[4].Split('=')[1]); Int64 ichange = Int64.Parse(splitStr[5].Split('=')[1]); string reason = splitStr[6].Split('=')[1]; string param1 = null; if(splitStr.Length > 7) { param1 = splitStr[7].Split('=')[1]; } BillInfoEveryDay info = GetBillInfoByDay(dateTime); BillInfoEveryDay lastDayInfo = GetBillInfoByDay(dateTime.AddDays(-1),false); info.AddChangeChip(curedateTime, uid, ioldChip, inewChip, ichange, reason, lastDayInfo,param1); } private void ReadChangeItem(DateTime dateTime, int uid, string[] splitStr) { DateTime curedateTime = BillTypeUtils.GetTime(splitStr[0]); int itemId = Int32.Parse(splitStr[3].Split('=')[1]); Int64 ioldCount = Int64.Parse(splitStr[5].Split('=')[1]); Int64 inewCount = Int64.Parse(splitStr[6].Split('=')[1]); Int64 ichangeCount = Int64.Parse(splitStr[7].Split('=')[1]); string reason = splitStr[8].Split('=')[1]; //string param1 = null; BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddChangeItem(curedateTime, uid, itemId, ioldCount, inewCount, ichangeCount, reason); } public int GetOffDay(DateTime dTime) { DateTime tmpTime = dTime; foreach (KeyValuePair pair in m_billAllDays) { if(pair.Key>tmpTime) { tmpTime = pair.Key; } } TimeSpan x = tmpTime - dTime; int iDays = 7; if((int)x.TotalDays<7) { iDays = (int)x.TotalDays; } return iDays; } private void ReadAdjustInstallReport(DateTime dateTime, string[] splitStr) { string channel = null; string subchannel = null; string adid = null; foreach(var param in splitStr) { string[] keyvalue = param.Split('='); if(keyvalue.Length != 2) { continue; } //渠道 if(keyvalue[0] == "snetwork_name") { channel = keyvalue[1]; }//广告id else if(keyvalue[0] == "sgps_adid") { adid = keyvalue[1]; } else if(keyvalue[0] == "sadgroup_name") { //applift需要子渠道 /* if (channel == "Applift") { subchannel = keyvalue[1]; } */ } } //添加到广告id和渠道的对应表中 if(string.IsNullOrEmpty(channel) == false && string.IsNullOrEmpty(adid) == false) { string full_channel = channel; if(string.IsNullOrEmpty(subchannel) == false) { full_channel = channel + "|" + subchannel; } if(m_adjustCallback.ContainsKey(adid) == false) { m_adjustCallback.Add(adid, full_channel); } //所有渠道 if(m_adjustAllChannel.ContainsKey(channel) == false) { m_adjustAllChannel.Add(channel, 1); } if(full_channel != channel) { if (m_adjustAllChannel.ContainsKey(full_channel) == false) { m_adjustAllChannel.Add(full_channel, 1); } } BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddAdjustInstallReport(channel, full_channel, adid); } } public string GetAdjustFullChannelByAdid(string adid) { if(string.IsNullOrEmpty(adid)) { return null; } if(m_adjustCallback.ContainsKey(adid)) { return m_adjustCallback[adid]; } return null; } private void ReadMailStart(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); long opuid = long.Parse(splitStr[2].Split('=')[1]); int mailType = int.Parse(splitStr[5].Split('=')[1]); info.ReadMailStart(uid, mailType); } private void ReadFriendList(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int friendCount = int.Parse(splitStr[4].Split('=')[1]); int snsFriendCount = 0; if (splitStr.Count() >= 6) { snsFriendCount = int.Parse(splitStr[5].Split('=')[1]); } int day = -1; if(splitStr.Count() >= 7) { day = int.Parse(splitStr[6].Split('=')[1]); } info.AddFriendInfo(uid, friendCount, snsFriendCount, day); } private void ReadDayRetentionOptimizetion(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); int push1 = int.Parse(splitStr[2].Split('=')[1]); int succ1 = int.Parse(splitStr[3].Split('=')[1]); int push2 = int.Parse(splitStr[4].Split('=')[1]); int succ2 = int.Parse(splitStr[5].Split('=')[1]); int twice = int.Parse(splitStr[6].Split('=')[1]); int total = int.Parse(splitStr[7].Split('=')[1]); int totalsucc = int.Parse(splitStr[8].Split('=')[1]); int day = 1; if (splitStr.Count() >= 10) { day = int.Parse(splitStr[9].Split('=')[1]); } info.AddRetentionOptimizetion(day, push1, succ1, push2, succ2, twice, total, totalsucc); } private void ReadHorsePlay(DateTime dateTime, int uid, string[] splitStr) { BillInfoEveryDay info = GetBillInfoByDay(dateTime); info.AddHorsePlay(uid); } } }