/// <summary>
        /// 获取基本用户维度初始化组
        /// </summary>
        /// <param name="title"></param>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <param name="lstDate"></param>
        /// <param name="ledDate"></param>
        /// <returns>
        /// 带时间参数则返回填充数据的列表
        /// 不带参数返回空列表
        /// </returns>
        public static UgcGroup GetGeneralUserDimension(string title, DateTime?stDate = null, DateTime?edDate = null, DateTime?lstDate = null, DateTime?ledDate = null)
        {
            UgcGroup group = new UgcGroup(title);

            List <ItemGroup> itemGroup = new List <ItemGroup>();

            itemGroup.Add(new ItemGroup("按设备", 4, 1));
            itemGroup.Add(new ItemGroup("按状态", 6, 1));
            itemGroup.Add(new ItemGroup("按版本", 2, 1));
            itemGroup.Add(new ItemGroup("按营业额", 5, 1));
            itemGroup.Add(new ItemGroup("按新老用户", 2, 1));

            itemGroup.Find(x => x.GroupName == "按设备").DataList.Add(new NewAccountItem("Android", 0, 0));
            itemGroup.Find(x => x.GroupName == "按设备").DataList.Add(new NewAccountItem("iPhone", 0, 0));
            itemGroup.Find(x => x.GroupName == "按设备").DataList.Add(new NewAccountItem("iPad", 0, 0));
            itemGroup.Find(x => x.GroupName == "按设备").DataList.Add(new NewAccountItem("Web & PC", 0, 0));

            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("流失", 0, 0));
            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("新注册", 0, 0));
            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("休眠", 0, 0));
            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("需关怀", 0, 0));
            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("活跃", 0, 0));
            itemGroup.Find(x => x.GroupName == "按状态").DataList.Add(new NewAccountItem("忠诚", 0, 0));

            itemGroup.Find(x => x.GroupName == "按版本").DataList.Add(new NewAccountItem("免费版", 0, 0));
            itemGroup.Find(x => x.GroupName == "按版本").DataList.Add(new NewAccountItem("高级版", 0, 0));

            itemGroup.Find(x => x.GroupName == "按营业额").DataList.Add(new NewAccountItem("<1万", 0, 0));
            itemGroup.Find(x => x.GroupName == "按营业额").DataList.Add(new NewAccountItem("1-5万", 0, 0));
            itemGroup.Find(x => x.GroupName == "按营业额").DataList.Add(new NewAccountItem("5-10万", 0, 0));
            itemGroup.Find(x => x.GroupName == "按营业额").DataList.Add(new NewAccountItem("10-30万", 0, 0));
            itemGroup.Find(x => x.GroupName == "按营业额").DataList.Add(new NewAccountItem(">30万", 0, 0));

            itemGroup.Find(x => x.GroupName == "按新老用户").DataList.Add(new NewAccountItem("新用户", 0, 0));
            itemGroup.Find(x => x.GroupName == "按新老用户").DataList.Add(new NewAccountItem("老用户", 0, 0));

            group.DataList = itemGroup;

            //如果传入的时间参数不为null则默认初始化登录数据
            if (stDate != null && edDate != null)
            {
                DateTime st = Convert.ToDateTime(stDate);
                DateTime ed = Convert.ToDateTime(edDate);

                DateTime lst = Convert.ToDateTime(lstDate);
                DateTime led = Convert.ToDateTime(ledDate);

                //本周期登录的分组用户需要持久化 在获取均值的时候作为分母
                DateTime tedDate             = ControlHelper.GetEndDate(ed);
                List <NewAccountItem> tModel = OperationReportBLL.GetDimensionLogin(st, tedDate);

                DateTime ltedDate            = ControlHelper.GetEndDate(led);
                List <NewAccountItem> lModel = OperationReportBLL.GetDimensionLogin(lst, ltedDate);

                return(GetGroupModel(tModel, lModel, group));
            }

            return(group);
        }
        /// <summary>
        /// 获取留存报表
        /// </summary>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <param name="lstDate"></param>
        /// <param name="ledDate"></param>
        /// <returns></returns>
        public static List <UgcGroup> GetRetentionModel(DateTime stDate, DateTime edDate, DateTime lstDate,
                                                        DateTime ledDate)
        {
            List <UgcGroup> list = new List <UgcGroup>();

            //初始化登录分维
            List <ItemGroup> itemGroup = new List <ItemGroup>();

            #region 生成留存头组数据
            //生成通用登录分维组外的字段信息
            ItemGroup logItem = new ItemGroup("日登录数", 1, 1);
            logItem.DataList.Add(new NewAccountItem("日均登录", 0, 0));
            itemGroup.Add(logItem);

            //生成用户登录Model组
            UgcGroup logGroup = GetGeneralUserDimension("用户登录", stDate, edDate, lstDate, ledDate);
            //合并同一条件组的字段信息
            if (itemGroup != null && itemGroup.Count >= 1)
            {
                logGroup = GetMergeGroup(logGroup, itemGroup, null);
            }
            //生成单独数据
            DateTime tedDate             = ControlHelper.GetEndDate(edDate);
            List <NewAccountItem> tModel = OperationReportBLL.GetRetentionData(stDate, tedDate);

            DateTime ltedDate            = ControlHelper.GetEndDate(ledDate);
            List <NewAccountItem> lModel = OperationReportBLL.GetRetentionData(lstDate, ltedDate);

            logGroup = GetGroupModel(tModel, lModel, logGroup);
            list.Add(logGroup);
            #endregion

            #region 生成留存其他数据
            itemGroup.Clear();
            logGroup = new UgcGroup("其他留存数据");

            //表格字段初始化
            itemGroup.Add(new ItemGroup("总登录率", 1, 1, new NewAccountItem("登录率", 0, 0)));
            itemGroup.Add(new ItemGroup("连续登录用户", 1, 1, new NewAccountItem("连续登录", 0, 0)));
            itemGroup.Add(new ItemGroup("净新增活忠", 1, 1, new NewAccountItem("新增活忠", 0, 0)));
            itemGroup.Add(new ItemGroup("流失活忠", 1, 1, new NewAccountItem("流失活忠", 0, 0)));
            itemGroup.Add(new ItemGroup("流失回流数", 1, 1, new NewAccountItem("流失回流", 0, 0)));
            itemGroup.Add(new ItemGroup("只移动端登录", 1, 1, new NewAccountItem("仅移动端登录", 0, 0)));
            itemGroup.Add(new ItemGroup("只电脑端登录", 1, 1, new NewAccountItem("仅电脑端登录", 0, 0)));
            itemGroup.Add(new ItemGroup("全端用户", 1, 1, new NewAccountItem("全端登录", 0, 0)));
            logGroup.DataList = itemGroup;

            list.Add(GetGroupModel(tModel, lModel, logGroup));

            #endregion


            return(list);
        }
        /// <summary>
        /// 获取收入报表
        /// </summary>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <param name="lstDate"></param>
        /// <param name="ledDate"></param>
        /// <returns></returns>
        public static List <UgcGroup> GetIncomeModel(DateTime stDate, DateTime edDate, DateTime lstDate, DateTime ledDate)
        {
            //时间归一化
            DateTime tedDate  = ControlHelper.GetEndDate(edDate);
            DateTime ltedDate = ControlHelper.GetEndDate(ledDate);

            //返回数据组
            List <UgcGroup> list = new List <UgcGroup>();

            #region 生成收入数据
            List <ItemGroup> itemGroupshowCase = new List <ItemGroup>();//组前置行
            UgcGroup         incomeGroup       = new UgcGroup("付费信息");

            //获取订单信息
            Dictionary <string, decimal> tDic = GetOrderInfo(stDate, tedDate);
            Dictionary <string, decimal> lDic = GetOrderInfo(lstDate, ltedDate);

            //表格字段初始化
            itemGroupshowCase.Add(new ItemGroup("总销售额", 1, 1, new NewAccountItem("总订单", tDic["总订单"], lDic["总订单"], ControlHelper.GetFixDecimalStr(tDic["总订单"], lDic["总订单"]))));
            itemGroupshowCase.Add(new ItemGroup("Saas服务", 1, 1, new NewAccountItem("Saas服务", tDic["Saas服务"], lDic["Saas服务"], ControlHelper.GetFixDecimalStr(tDic["Saas服务"], lDic["Saas服务"]))));
            itemGroupshowCase.Add(new ItemGroup("短信", 1, 1, new NewAccountItem("短信", tDic["短信"], lDic["短信"], ControlHelper.GetFixDecimalStr(tDic["短信"], lDic["短信"]))));
            itemGroupshowCase.Add(new ItemGroup("话费", 1, 1, new NewAccountItem("话费", tDic["话费"], lDic["话费"], ControlHelper.GetFixDecimalStr(tDic["话费"], lDic["话费"]))));
            itemGroupshowCase.Add(new ItemGroup("硬件", 1, 1, new NewAccountItem("硬件", tDic["硬件"], lDic["硬件"], ControlHelper.GetFixDecimalStr(tDic["硬件"], lDic["硬件"]))));

            itemGroupshowCase.Add(new ItemGroup("总销售笔数", 1, 1, new NewAccountItem("总订单笔数", tDic["总订单笔数"], lDic["总订单笔数"], ControlHelper.GetFixDecimalStr(tDic["总订单笔数"], lDic["总订单笔数"]))));
            itemGroupshowCase.Add(new ItemGroup("Saas服务笔数", 1, 1, new NewAccountItem("Saas服务笔数", tDic["Saas服务笔数"], lDic["Saas服务笔数"], ControlHelper.GetFixDecimalStr(tDic["Saas服务笔数"], lDic["Saas服务笔数"]))));
            itemGroupshowCase.Add(new ItemGroup("短信笔数", 1, 1, new NewAccountItem("短信笔数", tDic["短信笔数"], lDic["短信笔数"], ControlHelper.GetFixDecimalStr(tDic["短信笔数"], lDic["短信笔数"]))));
            itemGroupshowCase.Add(new ItemGroup("话费笔数", 1, 1, new NewAccountItem("话费笔数", tDic["话费笔数"], lDic["话费笔数"], ControlHelper.GetFixDecimalStr(tDic["话费笔数"], lDic["话费笔数"]))));
            itemGroupshowCase.Add(new ItemGroup("硬件笔数", 1, 1, new NewAccountItem("硬件笔数", tDic["硬件笔数"], lDic["硬件笔数"], ControlHelper.GetFixDecimalStr(tDic["硬件笔数"], lDic["硬件笔数"]))));

            itemGroupshowCase.Add(new ItemGroup("现金券", 1, 1, new NewAccountItem("使用现金券金额", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("抵现", 1, 1, new NewAccountItem("抵现金额", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("发出现金券", 1, 1, new NewAccountItem("发出现金券", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("使用现金券", 1, 1, new NewAccountItem("使用现金券", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("现金券使用率", 1, 1, new NewAccountItem("现金券使用率", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("付费用户数", 1, 1, new NewAccountItem("付费用户数", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("付费用户续约率", 1, 1, new NewAccountItem("付费用户续约率", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("高付费用户续约率", 1, 1, new NewAccountItem("高付费用户续约率", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("活忠用户平均收入", 1, 1, new NewAccountItem("活忠用户平均收入", 0, 0)));

            incomeGroup.DataList = itemGroupshowCase;

            //生成分维数据并处理均值
            List <NewAccountItem> tIncomeModel = OperationReportBLL.GetIncomePart(stDate, tedDate);
            List <NewAccountItem> lIncomeModel = OperationReportBLL.GetIncomePart(lstDate, ltedDate);
            list.Add(GetGroupModel(tIncomeModel, lIncomeModel, incomeGroup));

            #endregion


            return(list);
        }
        /// <summary>
        /// 获取促活报表
        /// </summary>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <param name="lstDate"></param>
        /// <param name="ledDate"></param>
        /// <returns></returns>
        public static List <UgcGroup> GetAvgDateModel(DateTime stDate, DateTime edDate, DateTime lstDate, DateTime ledDate)
        {
            //生成用户登录Model组,用于切分多维用户UGC均值
            UgcGroup logGroup = GetGeneralUserDimension("用户登录", stDate, edDate, lstDate, ledDate);
            //时间归一化
            DateTime tedDate  = ControlHelper.GetEndDate(edDate);
            DateTime ltedDate = ControlHelper.GetEndDate(ledDate);

            int tAllLog = OperationReportBLL.GetIndependLog(stDate, tedDate);
            int lAllLog = OperationReportBLL.GetIndependLog(lstDate, ltedDate);

            //返回数据组
            List <UgcGroup> list = new List <UgcGroup>();


            #region 销售数据
            //生成头数据
            UgcGroup saleGroup = GetGeneralUserDimension("收银记账");          //组中置分维条件

            List <ItemGroup> itemGroupSaleBefore = new List <ItemGroup>(); //组前置行
            itemGroupSaleBefore.Add(new ItemGroup("登录用户日销售笔数", 1, 1, new NewAccountItem("登录日均销售", 0, 0)));

            List <ItemGroup> itemGroupSaleAfter = new List <ItemGroup>();//组后置行
            itemGroupSaleAfter.Add(new ItemGroup("录入销售店铺数", 1, 1, new NewAccountItem("销售独立店铺", 0, 0)));
            itemGroupSaleAfter.Add(new ItemGroup("补录销售笔数", 1, 1, new NewAccountItem("补录笔数", 0, 0)));
            itemGroupSaleAfter.Add(new ItemGroup("补录销售店铺数", 1, 1, new NewAccountItem("补录店铺数", 0, 0)));
            itemGroupSaleAfter.Add(new ItemGroup("挂单笔数", 1, 1, new NewAccountItem("挂单笔数", 0, 0)));

            //生成完整组
            if (itemGroupSaleBefore != null && itemGroupSaleBefore.Count >= 1)
            {
                saleGroup = GetMergeGroup(saleGroup, itemGroupSaleBefore, itemGroupSaleAfter);
            }

            //生成分维数据并处理均值
            List <NewAccountItem> tSaleModel = OperationReportBLL.GetSalePart(stDate, tedDate);
            List <NewAccountItem> lSaleModel = OperationReportBLL.GetSalePart(lstDate, ltedDate);

            saleGroup = GetGroupModel(tSaleModel, lSaleModel, saleGroup);

            //均值处理(总值有“日均”关键字过滤)
            saleGroup = LogAvgProcess(logGroup, saleGroup, tAllLog, lAllLog);

            list.Add(saleGroup);
            #endregion


            #region 商品数据
            //生成头数据
            UgcGroup goodsGroup = GetGeneralUserDimension("商品管理");          //组中置分维条件

            List <ItemGroup> itemGroupgoodsBefore = new List <ItemGroup>(); //组前置行
            itemGroupgoodsBefore.Add(new ItemGroup("登录用户日新增商品", 1, 1, new NewAccountItem("登录日均商品", 0, 0)));

            List <ItemGroup> itemGroupgoodsAfter = new List <ItemGroup>();//组后置行
            itemGroupgoodsAfter.Add(new ItemGroup("录入商品店铺数", 1, 1, new NewAccountItem("商品录入独立店铺", 0, 0)));

            //生成完整组
            if (itemGroupgoodsBefore != null && itemGroupgoodsBefore.Count >= 1)
            {
                goodsGroup = GetMergeGroup(goodsGroup, itemGroupgoodsBefore, itemGroupgoodsAfter);
            }

            //生成分维数据并处理均值
            List <NewAccountItem> tGoodsModel = OperationReportBLL.GetGoodsPart(stDate, tedDate);
            List <NewAccountItem> lGoodsModel = OperationReportBLL.GetGoodsPart(lstDate, ltedDate);

            goodsGroup = GetGroupModel(tGoodsModel, lGoodsModel, goodsGroup);

            //均值处理(总值有“日均”关键字过滤)
            goodsGroup = LogAvgProcess(logGroup, goodsGroup, tAllLog, lAllLog);

            list.Add(goodsGroup);
            #endregion


            #region 会员数据
            //生成头数据
            UgcGroup userGroup = GetGeneralUserDimension("会员管理");          //组中置分维条件

            List <ItemGroup> itemGroupUserBefore = new List <ItemGroup>(); //组前置行
            itemGroupUserBefore.Add(new ItemGroup("登录用户日新增会员", 1, 1, new NewAccountItem("登录日均会员", 0, 0)));

            List <ItemGroup> itemGroupUserAfter = new List <ItemGroup>();//组后置行
            itemGroupUserAfter.Add(new ItemGroup("录入会员店铺数", 1, 1, new NewAccountItem("会员录入独立店铺", 0, 0)));

            //生成完整组
            if (itemGroupUserBefore != null && itemGroupUserBefore.Count >= 1)
            {
                userGroup = GetMergeGroup(userGroup, itemGroupUserBefore, itemGroupUserAfter);
            }

            //生成分维数据并处理均值
            List <NewAccountItem> tUserModel = OperationReportBLL.GetUserPart(stDate, tedDate);
            List <NewAccountItem> lUserModel = OperationReportBLL.GetUserPart(lstDate, ltedDate);

            userGroup = GetGroupModel(tUserModel, lUserModel, userGroup);

            //均值处理(总值有“日均”关键字过滤)
            userGroup = LogAvgProcess(logGroup, userGroup, tAllLog, lAllLog);

            list.Add(userGroup);
            #endregion


            #region 支出数据
            //生成头数据
            UgcGroup payGroup = GetGeneralUserDimension("支出管理");          //组中置分维条件

            List <ItemGroup> itemGroupPayBefore = new List <ItemGroup>(); //组前置行
            itemGroupPayBefore.Add(new ItemGroup("登录用户日新增支出", 1, 1, new NewAccountItem("登录日均支出", 0, 0)));

            List <ItemGroup> itemGroupPayAfter = new List <ItemGroup>();//组后置行
            itemGroupPayAfter.Add(new ItemGroup("录入支出店铺数", 1, 1, new NewAccountItem("支出录入独立店铺", 0, 0)));

            //生成完整组
            if (itemGroupPayBefore != null && itemGroupPayBefore.Count >= 1)
            {
                payGroup = GetMergeGroup(payGroup, itemGroupPayBefore, itemGroupPayAfter);
            }

            //生成分维数据并处理均值
            List <NewAccountItem> tPayModel = OperationReportBLL.GetPayPart(stDate, tedDate);
            List <NewAccountItem> lPayModel = OperationReportBLL.GetPayPart(lstDate, ltedDate);

            payGroup = GetGroupModel(tPayModel, lPayModel, payGroup);

            //均值处理(总值有“日均”关键字过滤)
            payGroup = LogAvgProcess(logGroup, payGroup, tAllLog, lAllLog);

            list.Add(payGroup);
            #endregion


            #region 短信数据
            //生成头数据
            UgcGroup smsGroup = GetGeneralUserDimension("短信发送");          //组中置分维条件

            List <ItemGroup> itemGroupSmsBefore = new List <ItemGroup>(); //组前置行
            itemGroupSmsBefore.Add(new ItemGroup("登录用户日短信数", 1, 1, new NewAccountItem("登录日均短信数", 0, 0)));

            List <ItemGroup> itemGroupSmsAfter = new List <ItemGroup>();//组后置行
            itemGroupSmsAfter.Add(new ItemGroup("发送短信店铺数", 1, 1, new NewAccountItem("发送短信独立店铺", 0, 0)));
            itemGroupSmsAfter.Add(new ItemGroup("营销短信数", 1, 1, new NewAccountItem("营销短信", 0, 0)));
            itemGroupSmsAfter.Add(new ItemGroup("维客短信数", 1, 1, new NewAccountItem("维客短信", 0, 0)));

            //生成完整组
            if (itemGroupSmsBefore != null && itemGroupSmsBefore.Count >= 1)
            {
                smsGroup = GetMergeGroup(smsGroup, itemGroupSmsBefore, itemGroupSmsAfter);
            }

            //生成分维数据并处理均值
            List <NewAccountItem> tSmsModel = OperationReportBLL.GetSmsPart(stDate, tedDate);
            List <NewAccountItem> lSmsModel = OperationReportBLL.GetSmsPart(lstDate, ltedDate);

            smsGroup = GetGroupModel(tSmsModel, lSmsModel, smsGroup);

            //均值处理(总值有“日均”关键字过滤)
            smsGroup = LogAvgProcess(logGroup, smsGroup, tAllLog, lAllLog);

            list.Add(smsGroup);
            #endregion

            #region 生成留存其他数据
            List <ItemGroup> itemGroupshowCase = new List <ItemGroup>();//组前置行
            UgcGroup         showCaseGroup     = new UgcGroup("手机橱窗");

            //表格字段初始化
            itemGroupshowCase.Add(new ItemGroup("手机橱窗浏览数", 1, 1, new NewAccountItem("pv", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("手机橱窗访客数", 1, 1, new NewAccountItem("uv", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("手机橱窗展示商品数", 1, 1, new NewAccountItem("日均新增商品", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("手机橱窗订单数", 1, 1, new NewAccountItem("手机橱窗订单", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("手机橱窗支付数", 1, 1, new NewAccountItem("手机橱窗支付", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("手机橱窗交易金额", 1, 1, new NewAccountItem("周期内交易金额", 0, 0)));
            itemGroupshowCase.Add(new ItemGroup("在版手机橱窗套餐用户数", 1, 1, new NewAccountItem("在版用户", 0, 0)));

            showCaseGroup.DataList = itemGroupshowCase;

            //生成分维数据并处理均值
            List <NewAccountItem> tShowModel = OperationReportBLL.GetShowPart(stDate, tedDate);
            List <NewAccountItem> lShowModel = OperationReportBLL.GetShowPart(lstDate, ltedDate);
            list.Add(GetGroupModel(tShowModel, lShowModel, showCaseGroup));

            #endregion


            return(list);
        }
        /// <summary>
        /// 获取两个时间段拉新数据
        /// </summary>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <param name="lstDate"></param>
        /// <param name="ledDate"></param>
        /// <returns></returns>
        public static NewAccountModel GetNewAccountModel(DateTime stDate, DateTime edDate, DateTime lstDate,
                                                         DateTime ledDate)
        {
            NewAccountModel model = new NewAccountModel();

            DateTime tedDate             = ControlHelper.GetEndDate(edDate);
            List <NewAccountItem> tModel = OperationReportBLL.GetNewAccountModel(stDate, tedDate);

            DateTime ltedDate            = ControlHelper.GetEndDate(ledDate);
            List <NewAccountItem> lModel = OperationReportBLL.GetNewAccountModel(lstDate, ltedDate);

            #region 合并两日数据

            foreach (var item in tModel)
            {
                foreach (var lItem in lModel)
                {
                    if (lItem.SourceName == item.SourceName)
                    {
                        item.LastWeekVal = lItem.ThisWeekVal;
                    }
                }
            }

            #endregion

            #region 数据分组

            List <ItemGroup> itemGroup = new List <ItemGroup>()
            {
                new ItemGroup("iOS", 2, 1),
                new ItemGroup("Android", 10, 1),
                new ItemGroup("主站", 4, 1),
                new ItemGroup("下载站", 1, 2),
                new ItemGroup("其他PC客户端", 1, 2),
                new ItemGroup("来源未知", 1, 2),
                new ItemGroup("总注册", 1, 2)
            };

            itemGroup.Find(x => x.GroupName == "总注册").DataList.Add(new NewAccountItem("总注册", 0, 0));

            itemGroup.Find(x => x.GroupName == "iOS").DataList.Add(new NewAccountItem("iPhone", 0, 0));
            itemGroup.Find(x => x.GroupName == "iOS").DataList.Add(new NewAccountItem("iPad", 0, 0));

            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("360", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("华为", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("小米", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("魅族", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("oppo", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("豌豆荚", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("百度", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("应用宝", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("安智", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("应用宝CPD", 0, 0));
            itemGroup.Find(x => x.GroupName == "Android").DataList.Add(new NewAccountItem("其他", 0, 0));

            itemGroup.Find(x => x.GroupName == "主站").DataList.Add(new NewAccountItem("手机web", 0, 0));
            itemGroup.Find(x => x.GroupName == "主站").DataList.Add(new NewAccountItem("主站安卓", 0, 0));
            itemGroup.Find(x => x.GroupName == "主站").DataList.Add(new NewAccountItem("主站客户端", 0, 0));
            itemGroup.Find(x => x.GroupName == "主站").DataList.Add(new NewAccountItem("主站注册", 0, 0));

            itemGroup.Find(x => x.GroupName == "下载站").DataList.Add(new NewAccountItem("下载站", 0, 0));
            itemGroup.Find(x => x.GroupName == "其他PC客户端").DataList.Add(new NewAccountItem("其他PC客户端", 0, 0));
            itemGroup.Find(x => x.GroupName == "来源未知").DataList.Add(new NewAccountItem("来源未知", 0, 0));

            foreach (var item in tModel)
            {
                itemGroup.Find(x => x.GroupName == "总注册").DataList[0].ThisWeekVal += item.ThisWeekVal;
                itemGroup.Find(x => x.GroupName == "总注册").DataList[0].LastWeekVal += item.LastWeekVal;

                foreach (var gItem in itemGroup)
                {
                    if (gItem.DataList.Find(x => x.SourceName == item.SourceName) != null)
                    {
                        gItem.DataList.Find(x => x.SourceName == item.SourceName).ThisWeekVal = item.ThisWeekVal;
                        gItem.DataList.Find(x => x.SourceName == item.SourceName).LastWeekVal = item.LastWeekVal;
                        gItem.DataList.Find(x => x.SourceName == item.SourceName).Percent     =
                            item.LastWeekVal == 0
                                ? "-"
                                : (Convert.ToDecimal(item.ThisWeekVal - item.LastWeekVal) * 100 / item.LastWeekVal).ToString("F2") +
                            "%";
                    }
                }
            }

            foreach (var item in itemGroup)
            {
                if (item.ColSpan > 1 && item.DataList.Count <= 0)
                {
                    item.GroupName = "Not Support";
                }
                if (item.RowSpan > 1)
                {
                    if (item.DataList.Count <= 0)
                    {
                        item.GroupName = "Not Support";
                    }
                    else
                    {
                        item.RowSpan = item.DataList.Count;
                    }
                }

                foreach (var dItem in item.DataList)
                {
                    if (string.IsNullOrEmpty(dItem.Percent))
                    {
                        if (dItem.LastWeekVal == 0)
                        {
                            dItem.Percent = "-";
                        }
                        else
                        {
                            dItem.Percent = (Convert.ToDecimal(dItem.ThisWeekVal - dItem.LastWeekVal) * 100 / dItem.LastWeekVal).ToString("F2") + "%";
                        }
                    }
                }
            }

            model.ItemGroupList = itemGroup;
            return(model);

            #endregion
        }
        /// <summary>
        /// 获取本周期内转化数据
        /// </summary>
        /// <param name="stDate"></param>
        /// <param name="edDate"></param>
        /// <returns></returns>
        public static ConversionList GetConversionModel(DateTime stDate, DateTime edDate)
        {
            #region 获取转化数据

            List <ConversionModel> pageModelList = new List <ConversionModel>();
            pageModelList.Add(new ConversionModel("注册"));
            pageModelList.Add(new ConversionModel("登录"));
            pageModelList.Add(new ConversionModel("录入数据"));
            pageModelList.Add(new ConversionModel("次日留存"));
            pageModelList.Add(new ConversionModel("活跃"));
            pageModelList.Add(new ConversionModel("付费"));

            List <ConversionSource> modelList = OperationReportBLL.GetConversionList(stDate, edDate);
            foreach (var model in modelList)
            {
                switch (model.Source)
                {
                case "iPhone":
                    pageModelList.Find(x => x.NameStr == "注册").iPhoneNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").iPhoneNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").iPhoneNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").iPhoneNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").iPhoneNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").iPhoneNum   = model.Paid;
                    break;

                case "iPad":
                    pageModelList.Find(x => x.NameStr == "注册").iPadNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").iPadNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").iPadNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").iPadNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").iPadNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").iPadNum   = model.Paid;
                    break;

                case "主站":
                    pageModelList.Find(x => x.NameStr == "注册").ZhuzhanNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").ZhuzhanNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").ZhuzhanNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").ZhuzhanNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").ZhuzhanNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").ZhuzhanNum   = model.Paid;
                    break;

                case "360":
                    pageModelList.Find(x => x.NameStr == "注册").QihuNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").QihuNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").QihuNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").QihuNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").QihuNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").QihuNum   = model.Paid;
                    break;

                case "应用宝":
                    pageModelList.Find(x => x.NameStr == "注册").TengxunNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").TengxunNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").TengxunNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").TengxunNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").TengxunNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").TengxunNum   = model.Paid;
                    break;

                case "小米":
                    pageModelList.Find(x => x.NameStr == "注册").XiaomiNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").XiaomiNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").XiaomiNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").XiaomiNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").XiaomiNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").XiaomiNum   = model.Paid;
                    break;

                case "华为":
                    pageModelList.Find(x => x.NameStr == "注册").HuaweiNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").HuaweiNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").HuaweiNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").HuaweiNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").HuaweiNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").HuaweiNum   = model.Paid;
                    break;

                case "百度":
                    pageModelList.Find(x => x.NameStr == "注册").BaiduNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").BaiduNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").BaiduNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").BaiduNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").BaiduNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").BaiduNum   = model.Paid;
                    break;

                case "魅族":
                    pageModelList.Find(x => x.NameStr == "注册").MeizuNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").MeizuNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").MeizuNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").MeizuNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").MeizuNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").MeizuNum   = model.Paid;
                    break;

                case "oppo":
                    pageModelList.Find(x => x.NameStr == "注册").OppoNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").OppoNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").OppoNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").OppoNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").OppoNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").OppoNum   = model.Paid;
                    break;

                case "安智":
                    pageModelList.Find(x => x.NameStr == "注册").AnzhiNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").AnzhiNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").AnzhiNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").AnzhiNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").AnzhiNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").AnzhiNum   = model.Paid;
                    break;

                case "豌豆荚":
                    pageModelList.Find(x => x.NameStr == "注册").WandoujiaNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").WandoujiaNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").WandoujiaNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").WandoujiaNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").WandoujiaNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").WandoujiaNum   = model.Paid;
                    break;

                case "其他":
                    pageModelList.Find(x => x.NameStr == "注册").Other   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").Other   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").Other = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").Other = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").Other   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").Other   = model.Paid;
                    break;

                case "PC":
                    pageModelList.Find(x => x.NameStr == "注册").PcClientNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").PcClientNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").PcClientNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").PcClientNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").PcClientNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").PcClientNum   = model.Paid;
                    break;

                case "网页":
                    pageModelList.Find(x => x.NameStr == "注册").WebNum   = model.Reg;
                    pageModelList.Find(x => x.NameStr == "登录").WebNum   = model.Login;
                    pageModelList.Find(x => x.NameStr == "录入数据").WebNum = model.DataInput;
                    pageModelList.Find(x => x.NameStr == "次日留存").WebNum = model.SecRetention;
                    pageModelList.Find(x => x.NameStr == "活跃").WebNum   = model.Active;
                    pageModelList.Find(x => x.NameStr == "付费").WebNum   = model.Paid;
                    break;
                }
            }

            ConversionList list = new ConversionList();
            list.DataList = pageModelList;
            return(list);

            #endregion
        }