void addDataRemain(StatIncomeExpensesItemBase item, DateTime time, Dictionary <int, IncomeExInfo> incomeInfo) { IMongoQuery imq = Query.EQ("genTime", BsonValue.Create(time)); Dictionary <string, object> data = new Dictionary <string, object>(); data.Add("goldRemain", item.m_goldRemain); data.Add("gemRemain", item.m_gemRemain); data.Add("dbRemain", item.m_dbRemain); data.Add("chipRemain", item.m_chipRemain); IncomeExInfo info = incomeInfo[1]; data.Add("dayGoldStart", info.m_start); data.Add("dayGoldRemain", info.m_end); info = incomeInfo[2]; data.Add("dayGemStart", info.m_start); data.Add("dayGemRemain", info.m_end); info = incomeInfo[11]; data.Add("dayChipStart", info.m_start); data.Add("dayChipRemain", info.m_end); info = incomeInfo[14]; data.Add("dayDbStart", info.m_start); data.Add("dayDbRemain", info.m_end); info = incomeInfo[-1]; data.Add("dayPlayerCount", info.m_start); MongodbLog.Instance.ExecuteUpdateByQuery(TableName.STAT_INCOME_EXPENSES_REMAIN, imq, data); }
void stat() { DateTime startTime = m_statDay.AddDays(-1); DateTime endTime = m_statDay; IMongoQuery imq1 = Query.LT("genTime", BsonValue.Create(endTime)); IMongoQuery imq2 = Query.GTE("genTime", BsonValue.Create(startTime)); IMongoQuery imq = Query.And(imq1, imq2); beginStat("StatPlayerTotalIncomeExpensesNew MapReduce开始统计"); MapReduceResult mapResult = MongodbLog.Instance.executeMapReduce(TableName.PUMP_PLAYER_MONEY, imq, MapReduceTable.getMap("incomeExpensesNew"), MapReduceTable.getReduce("incomeExpensesNew")); endStat("StatPlayerTotalIncomeExpensesNew MapReduce结束统计"); if (mapResult != null) { beginStat("StatPlayerTotalIncomeExpensesNew 开始写入数据"); IEnumerable <BsonDocument> bson = mapResult.GetResults(); StatIncomeExpensesItemBase item = new StatIncomeExpensesItemBase(); foreach (BsonDocument d in bson) { BsonValue resValue = d["value"]; BsonDocument bd = (BsonDocument)resValue; foreach (var gameName in bd.Names) { int gameId = Convert.ToInt32(gameName); BsonDocument gameData = (BsonDocument)bd[gameName]; foreach (var itemId in gameData.Names) { Dictionary <string, object> upData = new Dictionary <string, object>(); upData.Add("genTime", startTime); upData.Add("gameId", gameId); upData.Add("itemId", Convert.ToInt32(itemId)); BsonDocument itemData = (BsonDocument)gameData[itemId]; bool isAdd = false; foreach (var ulkey in itemData.Names) { BsonDocument uldate = (BsonDocument)itemData[ulkey]; long income = uldate["income"].ToInt64(); long outlay = uldate["outlay"].ToInt64(); if (income > 0) { upData.Add(ulkey + "z", income); isAdd = true; } if (outlay > 0) { upData.Add(ulkey + "f", outlay); isAdd = true; } } if (isAdd) { MongodbLog.Instance.ExecuteInsert(TableName.STAT_INCOME_EXPENSES_NEW, upData); } } } } endStat("StatPlayerTotalIncomeExpensesNew 结束写入数据"); } IMongoQuery imq3 = Query.EQ("is_robot", false); MapReduceResult mapResult1 = MongodbPlayer.Instance.executeMapReduce(TableName.PLAYER_INFO, imq3, MapReduceTable.getMap("incomeExpensesRemain"), MapReduceTable.getReduce("incomeExpensesRemain")); if (mapResult1 != null) { IEnumerable <BsonDocument> bson = mapResult1.GetResults(); StatIncomeExpensesItemBase item = new StatIncomeExpensesItemBase(); foreach (BsonDocument d in bson) { BsonValue resValue = d["value"]; item.m_goldRemain = resValue["goldRemain"].ToInt64(); item.m_gemRemain = resValue["gemRemain"].ToInt64(); item.m_dbRemain = resValue["dbRemain"].ToInt64(); item.m_chipRemain = resValue["chipRemain"].ToInt64(); Dictionary <int, IncomeExInfo> incomeInfo = calStartRemain(imq); addDataRemain(item, startTime, incomeInfo); } } }