示例#1
0
    // 统计留存
    private void statXDayRemain(ParamStat param, int days, ref int remainCount)
    {
        m_regeditAccList.Clear();

        ChannelInfo statDay = (ChannelInfo)param.m_channel;

        queryRegeditAcc(param, StatBase.getRemainRegTime(statDay, days));

        int regeditCount = m_regeditAccList.Count;

        if (regeditCount == 0) // 没有注册,此时今天的留存是0
        {
            return;
        }

        DateTime mint  = statDay.m_statDay.Date.AddDays(-1);
        DateTime maxt  = statDay.m_statDay.Date;
        int      count = 0;

        foreach (var acc in m_regeditAccList)
        {
            if (isLogin(param, ACC_KEY, acc, mint, maxt))
            {
                count++;
            }
        }

        remainCount = count;
    }
示例#2
0
 // 统计30日留存
 private void stat30DayRemain(ParamStat param, StatResult result)
 {
     queryAccList(param, 30);
     statXDayRemain(param, m_regeditAccList, ref result.m_30DayRemainCountTmp);
     statXDayRemain(param, m_regeditWithRecharge, ref result.m_30DayRemainCountRechargeTmp);
     statXDayDevRemain(param, 30, ref result.m_30DayDevRemainCountTmp);
 }
示例#3
0
    public override void doStat(object param, StatResult result)
    {
        ParamStat p = (ParamStat)param;

        ChannelInfo cinfo = p.m_channel;

        DateTime    mint = cinfo.m_statDay.Date.AddDays(-1), maxt = cinfo.m_statDay.Date;
        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ("channel", BsonValue.Create(cinfo.m_channelNum));

        IMongoQuery imq = Query.And(imq1, imq2, imq3);

        MapReduceResult mapResult = MongodbPayment.Instance.executeMapReduce(cinfo.m_paymentTable,
                                                                             imq,
                                                                             MapReduceTable.getMap("recharge"),
                                                                             MapReduceTable.getReduce("recharge"));

        if (mapResult != null)
        {
            IEnumerable <BsonDocument> bson = mapResult.GetResults();
            foreach (BsonDocument d in bson)
            {
                BsonValue resValue = d["value"];
                result.m_totalIncome += resValue["total"].ToInt32();
                result.m_rechargePersonNum++;
                result.m_rechargeCount += resValue["rechargeCount"].ToInt32();
            }
        }

        statPaytype(imq, cinfo);
    }
示例#4
0
    private bool statChannelByInterval(ChannelInfo info)
    {
        //beginStat("渠道[{0}]开始统计", info.m_channelName);

        ParamStat param = new ParamStat();

        param.m_channel = info;

        StatResult result = new StatResult();

        foreach (var stat in m_statModule)
        {
            if (stat.Key == StatFlag.STAT_FLAG_REMAIN)
            {
                continue;
            }
            if (stat.Key == StatFlag.STAT_LTV)
            {
                continue;
            }

            stat.Value.doStat(param, result);
        }

        IMongoQuery imq = null;
        Dictionary <string, object> newData = getData(result, info, ref imq);

        string str = MongodbAccount.Instance.ExecuteStoreByQuery(TableName.CHANNEL_TD, imq, newData);

        //endStat("渠道[{0}]结束统计", info.m_channelName);
        return(str == string.Empty);
    }
示例#5
0
    // 统计几天前,注册玩家充值总额
    private void statXDayTotalRecharge(ParamStat param, int days, ref int totalRecharge, StatResult result = null)
    {
        totalRecharge = 0;
        m_regeditAccList.Clear();

        ChannelInfo statDay = (ChannelInfo)param.m_channel;

        queryRegeditAcc(param, StatBase.getRemainRegTime(statDay, days));
        if (m_regeditAccList.Count == 0) // 没有注册
        {
            return;
        }

        int         playerCount = 0;
        IMongoQuery imq         = StatBase.getRechargeCond(param, days + 1);

        foreach (var acc in m_regeditAccList)
        {
            int tmp = statPlayerRecharge(statDay, imq, acc);
            totalRecharge += tmp;

            if (tmp > 0)
            {
                playerCount++;
            }
        }

        if (days == 0)
        {
            result.m_newAccRechargePersonNum = playerCount;
        }
    }
    public override void doStat(object param, StatResult result)
    {
        ParamStat   p = (ParamStat)param;
        ChannelInfo cinfo = p.m_channel;
        DateTime    mint = cinfo.m_statDay.Date.AddDays(-1), maxt = cinfo.m_statDay.Date;

        statRegeditCount(cinfo, result, mint, maxt);
        statDeviceActivation(cinfo, result, mint, maxt);
    }
示例#7
0
    public override void doStat(object param, StatResult result)
    {
        ParamStat p = (ParamStat)param;

        stat2DayRemain(p, result);
        stat3DayRemain(p, result);
        stat7DayRemain(p, result);
        stat30DayRemain(p, result);
    }
示例#8
0
    private bool statChannel(ChannelInfo info)
    {
        if (!StatBase.canStat(info))
        {
            return(false);
        }

        ParamStat param = new ParamStat();

        param.m_channel = info;

        StatResult result = new StatResult();

        foreach (var stat in m_statModule.Values)
        {
            stat.doStat(param, result);
        }

        Dictionary <string, object> newData = new Dictionary <string, object>();

        newData.Add("genTime", info.m_statDay.Date.AddDays(-1));
        newData.Add("channel", info.m_channelNum);

        newData.Add("regeditCount", result.m_regeditCount);
        newData.Add("deviceActivationCount", result.m_deviceActivationCount);
        newData.Add("activeCount", result.m_activeCount);

        newData.Add("totalIncome", result.m_totalIncome);
        newData.Add("rechargePersonNum", result.m_rechargePersonNum);
        newData.Add("rechargeCount", result.m_rechargeCount);

        // newData.Add("2DayRegeditCount", result.m_2DayRegeditCount);
        newData.Add("2DayRemainCount", result.m_2DayRemainCount);

        // newData.Add("3DayRegeditCount", result.m_3DayRegeditCount);
        newData.Add("3DayRemainCount", result.m_3DayRemainCount);

        // newData.Add("7DayRegeditCount", result.m_7DayRegeditCount);
        newData.Add("7DayRemainCount", result.m_7DayRemainCount);

        //newData.Add("30DayRegeditCount", result.m_30DayRegeditCount);
        newData.Add("30DayRemainCount", result.m_30DayRemainCount);

        IMongoQuery imq1 = Query.EQ("genTime", BsonValue.Create(info.m_statDay.Date.AddDays(-1)));
        IMongoQuery imq2 = Query.EQ("channel", BsonValue.Create(info.m_channelNum));
        IMongoQuery imq  = Query.And(imq1, imq2);

        updateRemain(info, 1, result);
        updateRemain(info, 3, result);
        updateRemain(info, 7, result);
        updateRemain(info, 30, result);

        string str = MongodbAccount.Instance.ExecuteStoreByQuery(TableName.CHANNEL_TD, imq, newData);

        return(str == string.Empty);
    }
示例#9
0
    // 指定渠道的账号是否在一段时间内登录过
    private bool isLogin(ParamStat param, string key, string acc, DateTime mint, DateTime maxt)
    {
        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ(key, BsonValue.Create(acc));
        IMongoQuery imq4 = Query.EQ("channel", BsonValue.Create(param.m_channel.m_channelNum));
        IMongoQuery imq  = Query.And(imq1, imq2, imq3, imq4);

        bool res = MongodbAccount.Instance.KeyExistsByQuery(param.m_channel.m_loginTable, imq);

        return(res);
    }
示例#10
0
    // 返回充值统计条件
    public static IMongoQuery getRechargeCond(ParamStat param, int days)
    {
        ChannelInfo cinfo = param.m_channel;

        DateTime    mint = cinfo.m_statDay.Date.AddDays(-days), maxt = cinfo.m_statDay.Date;
        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ("channel", BsonValue.Create(cinfo.m_channelNum));

        IMongoQuery imq = Query.And(imq1, imq2, imq3);

        return(imq);
    }
示例#11
0
    // 账号在dt这一天是否有过付费行为
    bool isRecharge(ParamStat param, DateTime dt, string acc)
    {
        DateTime mint = dt.Date, maxt = dt.Date.AddDays(1);

        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ("channel", BsonValue.Create(param.m_channel.m_channelNum));
        IMongoQuery imq4 = Query.EQ(StatLTV.ACC_KEY_1, acc);
        IMongoQuery imq  = Query.And(imq1, imq2, imq3, imq4);
        bool        res  = MongodbPayment.Instance.KeyExistsByQuery(param.m_channel.m_paymentTable, imq);

        return(res);
    }
示例#12
0
    public override void doStat(object param, StatResult result)
    {
        ParamStat p = (ParamStat)param;

        statXDayTotalRecharge(p, 0, ref result.m_newAccIncome, result);
        statXDayTotalRecharge(p, 1, ref result.m_1DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 3, ref result.m_3DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 7, ref result.m_7DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 14, ref result.m_14DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 30, ref result.m_30DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 60, ref result.m_60DayTotalRechargeTmp);
        statXDayTotalRecharge(p, 90, ref result.m_90DayTotalRechargeTmp);
    }
示例#13
0
    // 查询2个列表,1是dt这一天的注册用户,2是注册账号并且付费的账号
    protected void queryAccList(ParamStat param, int days)
    {
        m_regeditAccList.Clear();
        m_regeditWithRecharge.Clear();

        DateTime dt = StatBase.getRemainRegTime(param.m_channel, days);

        queryRegeditAcc(param, dt);

        foreach (var acc in m_regeditAccList)
        {
            if (isRecharge(param, dt, acc))
            {
                m_regeditWithRecharge.Add(acc);
            }
        }
    }
示例#14
0
    private bool statChannel(ChannelInfo info)
    {
        if (!StatBase.canStat(info))
        {
            return(false);
        }

        beginStat("渠道[{0}]开始统计", info.m_channelName);

        ParamStat param = new ParamStat();

        param.m_channel = info;

        StatResult result = new StatResult();

        foreach (var stat in m_statModule.Values)
        {
            stat.doStat(param, result);
        }

        IMongoQuery imq = null;
        Dictionary <string, object> newData = getData(result, info, ref imq);

        foreach (var d in s_remain)
        {
            updateRemain(info, d, result);
            updateDevRemain(info, d, result);
        }
        foreach (var d in s_totalRecharge)
        {
            updateTotalRecharge(info, d, result);
        }

        string str = MongodbAccount.Instance.ExecuteStoreByQuery(TableName.CHANNEL_TD, imq, newData);

        endStat("渠道[{0}]结束统计", info.m_channelName);
        return(str == string.Empty);
    }
    public override void doStat(object param, StatResult result)
    {
        ParamStat p = (ParamStat)param;

        ChannelInfo cinfo = p.m_channel;

        DateTime    mint = cinfo.m_statDay.Date.AddDays(-1), maxt = cinfo.m_statDay.Date;
        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ("channel", BsonValue.Create(cinfo.m_channelNum));

        IMongoQuery imq = Query.And(imq1, imq2, imq3);

        MapReduceResult mapResult = MongodbAccount.Instance.executeMapReduce(cinfo.m_loginTable,
                                                                             imq,
                                                                             MapReduceTable.getMap("active"),
                                                                             MapReduceTable.getReduce("active"));

        if (mapResult != null)
        {
            result.m_activeCount = (int)mapResult.OutputCount;
        }
    }
示例#16
0
    /*
     *          获取某渠道在指定日的注册列表
     *          dt  指定日期
     */
    protected void queryRegeditAcc(ParamStat param, DateTime dt)
    {
        ChannelInfo cinfo = param.m_channel;

        DateTime mint = dt.Date, maxt = dt.Date.AddDays(1);

        IMongoQuery imq1 = Query.LT("time", BsonValue.Create(maxt));
        IMongoQuery imq2 = Query.GTE("time", BsonValue.Create(mint));
        IMongoQuery imq3 = Query.EQ("channel", BsonValue.Create(cinfo.m_channelNum));

        IMongoQuery imq = Query.And(imq1, imq2, imq3);

        List <Dictionary <string, object> > dataList =
            MongodbAccount.Instance.ExecuteGetListByQuery(cinfo.m_regeditTable, imq, new string[] { ACC_KEY });

        for (int i = 0; i < dataList.Count; i++)
        {
            if (dataList[i].ContainsKey(ACC_KEY))
            {
                string acc = Convert.ToString(dataList[i][ACC_KEY]);
                m_regeditAccList.Add(acc);
            }
        }
    }
示例#17
0
 // 统计30日留存
 private void stat30DayRemain(ParamStat param, StatResult result)
 {
     statXDayRemain(param, 30, ref result.m_30DayRemainCountTmp);
     statXDayDevRemain(param, 30, ref result.m_30DayDevRemainCountTmp);
 }