protected override List <List <string> > ObjectParseListFillDetailTable <T>(List <T> list, bool isDetailTable)
        {
            var tempList = new List <List <string> >();

            if (list is List <D_StatDownPositionDistribution> )
            {
                var  temp         = list as List <D_StatDownPositionDistribution>;
                long downcountsum = temp.Sum(p => p.DownCount);
                foreach (D_StatDownPositionDistribution item in temp)
                {
                    List <string> values = new List <string>();

                    string pAndP        = "";
                    string positionname = "未知";
                    if (!string.IsNullOrEmpty(item.PageName))
                    {
                        if (!string.IsNullOrEmpty(item.PositionName))
                        {
                            pAndP        = item.PageName + "_" + item.PositionName;
                            positionname = item.PositionName;
                        }
                        else
                        {
                            pAndP = item.PageName;
                        }
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(item.PositionName))
                        {
                            pAndP        = item.PositionName;
                            positionname = item.PositionName;
                        }
                        else
                        {
                            pAndP = "未知";
                        }
                    }
                    if (isdiffpage == 1)
                    {
                        pAndP = string.IsNullOrEmpty(item.PageType) ? pAndP : pAndP + "_" + item.PageType;
                    }
                    values.Add(pAndP);
                    values.Add(item.ByTag == 1 ? "专辑" : pAndP.Equals("未知")?"0":item.PositionId.ToString());
                    values.Add(UtilityHelp.FormatNum <long>(item.DownCount, true));
                    values.Add(UtilityHelp.FormatPercent <double>(item.DownCount * 1.0 / downcountsum, true));
                    values.Add(UtilityHelp.FormatNum <double>(item.DownCount * 1.0 / diffdays, true));
                    if (isDetailTable)
                    {
                        values.Add(item.ByTag == 1 ? item.PageType + "_" + Guid.NewGuid().GetHashCode() :  item.PositionId.ToString());
                        values.Add(item.ByTag.ToString());
                    }
                    tempList.Add(values);
                }
            }
            return(tempList);
        }
        private List <List <string> > GetStringList(List <List <Sjqd_StatRetainedUsers> > lists, int peroid)
        {
            var tempList = new List <List <string> >();

            //输出表格
            foreach (var objs in lists)
            {
                var values = new List <string>();


                if (peroid != (int)PeriodOptions.Daily)
                {
                    values.Add(string.Format("{0:yyyy-MM-dd} ~ {1:yyyy-MM-dd}",
                                             peroid == (int)PeriodOptions.Weekly
                                                 ? objs[0].OriginalDate.AddDays(-6)
                                                 : objs[0].OriginalDate.AddMonths(-1).AddDays(1),
                                             objs[0].OriginalDate));
                    values.Add(UtilityHelp.FormatNum <long>(objs[0].OriginalNewUserCount));
                }
                else
                {
                    values.Add(objs[0].OriginalDate.ToString("yyyyMMdd"));
                    values.Add(UtilityHelp.FormatNum <long>(objs[0].OriginalNewUserCount));
                }
                List <Sjqd_StatRetainedUsers> objs2 = objs.OrderByDescending(p => p.StatDate).ToList();
                for (int index = objs2.Count - 1; index >= 0; index--)
                {
                    values.Add(UtilityHelp.FormatNum <long>(objs2[index].RetainedUserCount));
                    values.Add(
                        UtilityHelp.FormatPercent(objs2[index].RetainedUserCount /
                                                  (double)objs2[index].OriginalNewUserCount));
                }
                if (objs.Count < 6)
                {
                    for (int ii = 0; ii < 6 - objs.Count; ii++)
                    {
                        values.Add("");
                        values.Add("");
                    }
                }
                tempList.Add(values);
            }
            return(tempList);
        }