/// <summary>
 /// 用户画像
 /// </summary>
 /// <param name="areaid"></param>
 /// <param name="strat"></param>
 /// <param name="end"></param>
 /// <param name="type"></param>
 /// <param name="version"></param>
 /// <returns></returns>
 public UserPicModel GetUserPic(int areaid, DateTime start, DateTime end, int type, string version)
 {
     try
     {
         UserPicModel res       = new UserPicModel();
         string       contition = $" and type={type} and version='{version}' and date between '{start}' and '{end}'";
         if (string.IsNullOrEmpty(version))
         {
             contition = $" and type={type}  and date between '{start}' and '{end}'";
         }
         //数据
         //var unitData = _repository.GetActionData(areaid, contition);//从缓存取30天数据
         List <UserActionModel> unitData = new List <UserActionModel>();
         if (string.IsNullOrEmpty(version))
         {
             unitData = _cache.GetRawDataForThirty(areaid.ToString(), start, end).ToList().Where(i => i.type == type && i.date >= start && i.date <= end).ToList();
         }
         else
         {
             unitData = _cache.GetRawDataForThirty(areaid.ToString(), start, end).ToList().Where(i => i.type == type && i.version == version && i.date >= start && i.date <= end).ToList();
         }
         Dictionary <int, string> plats = new Dictionary <int, string>();
         plats = PlatFromEnumExt.GetEnumAllNameAndValue <PlatFromEnum>();
         foreach (var item in plats)
         {
             string plat = item.Value;
             if (plat != "All")
             {
                 res.legendData.Add(plat);
                 seriesData aseries = new seriesData
                 {
                     name  = plat,
                     value = unitData.Where(i => i.platForm?.ToLower() == plat.ToLower() && i.uid != 0).GroupBy(i => i.uid).Count()
                 };
                 seriesData rseries = new seriesData
                 {
                     name  = plat,
                     value = unitData.Where(i => i.platForm?.ToLower() == plat.ToLower() && i.uid == 0).Count()
                 };
                 res.ActiveData.Add(aseries);
                 res.RegisterData.Add(rseries);
             }
         }
         return(res);
     }
     catch (Exception e)
     {
         _logger.LogError($"GetUserPic:{e.Message}");
         throw;
     }
 }
        public JsonResult GetPieCharts(string pId)
        {
            int cntTask = 0;

            var _task = mongoDatabase.GetCollection<Task>("Task");
            var _devBase = mongoDatabase.GetCollection<DevBase>("DevBase");
            var _projects = mongoDatabase.GetCollection<Project>("Project");

            ObjectId projectId;
            var isValid = ObjectId.TryParse(pId, out projectId);
            Project proj = new Project();
            if (isValid)
            {
                var getQuery = Query<Project>.EQ(e => e.ProjectId, projectId);
                proj = _projects.FindOne(getQuery);
            }

            IList<seriesData> lstseriesData = new List<seriesData>();
            var getTasks = _task.FindAs(typeof(Task), Query.Matches("ProjectId", new BsonRegularExpression(pId, "i")));

            foreach (Task tsk in getTasks)
            {
                int ntaCnt = 0;

                var getDBase = _devBase.FindAs(typeof(DevBase), Query.Matches("TaskId", new BsonRegularExpression(tsk.TaskId.ToString(), "i")));

                foreach (DevBase dbase in getDBase)
                {
                    if (dbase.Status.Equals("Not Started"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                        
                    }
                    if (dbase.Status.Equals("In-Process"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Complete"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Waiting Approval"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("On Hold"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Cancelled"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (ntaCnt <= 0)
                    {
                        seriesData mtv = new seriesData();
                        lstseriesData.Add(mtv);
                        lstseriesData[cntTask].name = dbase.Status;
                        lstseriesData[cntTask++].y = ++ntaCnt;
                    }
                }
            }

            return Json(lstseriesData.ToList(), JsonRequestBehavior.AllowGet);
        }  
        public JsonResult GetPieCharts(string pId)
        {
            int cntTask = 0;

            var _task     = mongoDatabase.GetCollection <Task>("Task");
            var _devBase  = mongoDatabase.GetCollection <DevBase>("DevBase");
            var _projects = mongoDatabase.GetCollection <Project>("Project");

            ObjectId projectId;
            var      isValid = ObjectId.TryParse(pId, out projectId);
            Project  proj    = new Project();

            if (isValid)
            {
                var getQuery = Query <Project> .EQ(e => e.ProjectId, projectId);

                proj = _projects.FindOne(getQuery);
            }

            IList <seriesData> lstseriesData = new List <seriesData>();
            var getTasks = _task.FindAs(typeof(Task), Query.Matches("ProjectId", new BsonRegularExpression(pId, "i")));

            foreach (Task tsk in getTasks)
            {
                int ntaCnt = 0;

                var getDBase = _devBase.FindAs(typeof(DevBase), Query.Matches("TaskId", new BsonRegularExpression(tsk.TaskId.ToString(), "i")));

                foreach (DevBase dbase in getDBase)
                {
                    if (dbase.Status.Equals("Not Started"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("In-Process"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Complete"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Waiting Approval"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("On Hold"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (dbase.Status.Equals("Cancelled"))
                    {
                        foreach (seriesData mtv in lstseriesData)
                        {
                            if (mtv.name == dbase.Status)
                            {
                                int cntl = lstseriesData.IndexOf(mtv);
                                lstseriesData[cntl].y = ++(lstseriesData[cntl].y);
                                ntaCnt++;
                            }
                        }
                    }
                    if (ntaCnt <= 0)
                    {
                        seriesData mtv = new seriesData();
                        lstseriesData.Add(mtv);
                        lstseriesData[cntTask].name = dbase.Status;
                        lstseriesData[cntTask++].y  = ++ntaCnt;
                    }
                }
            }

            return(Json(lstseriesData.ToList(), JsonRequestBehavior.AllowGet));
        }