示例#1
0
        /// <summary>
        /// 后台大屏幕显示界面
        /// </summary>
        /// <param name="pollingid"></param>
        /// <param name="questionid"></param>
        /// <returns></returns>
        public PollingScreenView GetPollingScreenData(int pollingid, int questionid)
        {
            // TODO: check performance
            var pollingScreenView = new PollingScreenView();

            var query = _pollingResultService.Repository.Entities.Where(
                x => x.PollingId == pollingid && x.IsDeleted != true);

            var allAnswersQuery = query.Where(x => x.QuestionId == questionid).GroupBy(x => x.Answer)
                                  .Select(x => new
            {
                x.Key,
                count = x.Count()
            }).Future();

            var totalQuery = query.Select(x => x.UserId.ToUpper()).Distinct().FutureCount();

            var allAnswers = allAnswersQuery.ToList();

            pollingScreenView.PollingTotal = totalQuery.Value;//最新的投票人数

            var sereisLst = new List <SereisData>();

            var allOptions = _pollingOptionService.Repository.Entities.Where(x => x.QuestionId == questionid && x.IsDeleted != true)
                             .Select(x => new { Id = x.Id, OptionName = x.OptionName }).ToList();

            var options = allOptions.AsParallel().Where(x => allAnswers.AsParallel().All(y => x.Id != y.Key)).Select(x => new SereisData {
                Sereisname = x.OptionName, Sereisvalue = 0, Id = x.Id
            }).ToList();

            sereisLst.AddRange(options);

            allAnswers.ForEach(y =>
            {
                int answer      = y.Key;
                int optionCount = y.count;
                int perent      = (optionCount * 100 / allAnswers.Sum(x => x.count));
                var obj         = new SereisData()
                {
                    Sereisname  = allOptions.Find(x => x.Id == answer).OptionName,
                    Sereisvalue = perent,
                    Id          = answer
                };
                sereisLst.Add(obj);
            });

            pollingScreenView.SereisData = sereisLst.OrderBy(x => x.Id).ToList();

            return(pollingScreenView);
        }
示例#2
0
        public PollingScreenView GetPollingScreenData(int pollingid, int questionid)
        {
            var pollingScreenView = new PollingScreenView();

            var allAnswers = _pollingResultService.Repository.Entities.Where(x => x.PollingId == pollingid && x.QuestionId == questionid && x.IsDeleted != true)
                             .Select(x => new { UserId = x.UserId, QuestionId = x.QuestionId, Answer = x.Answer, AnswerText = x.AnswerText })
                             .ToList();

            var total = _pollingResultService.Repository.Entities.Where(x => x.PollingId == pollingid && x.IsDeleted != true)
                        .Select(x => x.UserId.ToUpper()).Distinct().Count();

            pollingScreenView.PollingTotal = total;//最新的投票人数
            var sereisLst = new List <SereisData>();

            var allOptions = _pollingOptionService.Repository.Entities.Where(x => x.QuestionId == questionid && x.IsDeleted != true)
                             .Select(x => new { Id = x.Id, OptionName = x.OptionName }).ToList();


            var options = allOptions.AsParallel().Where(x => allAnswers.AsParallel().All(y => x.Id != y.Answer)).Select(x => new SereisData {
                Sereisname = x.OptionName, Sereisvalue = 0
            }).ToList();

            sereisLst.AddRange(options);

            allAnswers.GroupBy(y => y.Answer).ToList().ForEach(y =>
            {
                int answer      = y.First().Answer;
                int optionCount = y.Count();
                int perent      = (optionCount * 100 / allAnswers.Count());
                var obj         = new SereisData()
                {
                    Sereisname  = allOptions.Find(x => x.Id == answer).OptionName,
                    Sereisvalue = perent
                };
                sereisLst.Add(obj);
            });

            pollingScreenView.SereisData = sereisLst;

            return(pollingScreenView);
        }
        public async Task <ActionResult> Department(string date)
        {
            if (string.IsNullOrEmpty(date))
            {
            }
            else
            {
                // 获取token
                var objConfig = WeChatCommonService.GetWeChatConfigByID(AccountManageID);
                var token     = await getToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

                // 使用获取员工详情的API
                var empDetails = await getEmployeesDetail(token);

                // 获取部门列表
                var departments = await getDepartments(token);

                // 处理部门关系,暂定只有5层
                foreach (var dept in departments.department)
                {
                    int level    = 1;
                    int parentId = dept.parentid;
                    while (parentId != 0)
                    {
                        var parentDept = departments.department.Where(t => t.id == parentId).FirstOrDefault();
                        if (parentDept != null)
                        {
                            level++;
                            parentId = parentDept.parentid;
                        }
                    }
                    dept.level = level;
                }
                //找出部门关系是3的
                //定义柱状图标的list
                List <string> xAxisList = new List <string>();

                //考虑到图表的SereisData数据为一个列表
                List <SereisData> seriesList   = new List <SereisData>();
                List <SereisData> unseriesList = new List <SereisData>();
                int subscrib = 0;
                foreach (var dept in departments.department)
                {
                    if (dept.level == 4)
                    {
                        if (xAxisList.Contains(dept.name))
                        {
                        }
                        else
                        {
                            xAxisList.Add(dept.name);
                        }
                    }
                }
                //根据xAxisList建立对应的seriesList,unseriesList
                foreach (var t in xAxisList)
                {
                    SereisData sda = new SereisData();
                    sda.Sereisname  = t;
                    sda.Sereisvalue = 0;
                    seriesList.Add(sda);
                    SereisData unsda = new SereisData();
                    unsda.Sereisname  = t;
                    unsda.Sereisvalue = 0;
                    unseriesList.Add(unsda);
                }
                // 更新员工信息,把部门的名称填入
                foreach (var emp in empDetails.userlist)
                {
                    if (emp.department.Count() == 1)
                    {
                        var dept = departments.department.Where(t => t.id == emp.department[0]).FirstOrDefault();
                        if (dept != null)
                        {
                            int level = dept.level;
                            while (level > 1)
                            {
                                emp.deptLvs[level] = dept.name;
                                dept = departments.department.Where(t => t.id == dept.parentid).FirstOrDefault();
                                level--;
                            }
                        }
                    }
                }

                //找出部门对应员工的关注数
                foreach (var emp in empDetails.userlist)
                {
                    if (emp.department.Count() != 1)
                    {
                        continue;
                    }
                    foreach (var xAxis in xAxisList)
                    {
                        if (emp.deptLvs[4] == xAxis)
                        {
                            if (emp.status == 1)
                            {
                                foreach (var t in seriesList)
                                {
                                    if (t.Sereisname == xAxis)
                                    {
                                        t.Sereisvalue += 1;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                foreach (var t in unseriesList)
                                {
                                    if (t.Sereisname == xAxis)
                                    {
                                        t.Sereisvalue += 1;
                                        break;
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
                var newObj = new
                {
                    xAxis  = xAxisList,
                    Data   = seriesList,
                    UnData = unseriesList
                };
                return(Json(newObj, JsonRequestBehavior.AllowGet));
            }

            return(View());
        }
        async Task <ActionResult> Statistics(string state, string begindate, string enddate)
        {
            if (string.IsNullOrEmpty(begindate) || string.IsNullOrEmpty(enddate))
            {
            }
            else
            {
                DateTime dt  = DateTime.Parse(begindate);
                DateTime dt1 = DateTime.Parse(enddate).AddDays(1);

                // 获取token
                var objConfig = WeChatCommonService.GetWeChatConfigByID(AccountManageID);
                var token     = await getToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

                // 使用获取app列表的API
                var empagent = await getagentlist(token);

                //定义饼状图标的list
                List <string> legendList = new List <string>();

                List <int> agentList = new List <int>();
                agentList = _userBehaviorService.GetAgentList(dt, dt1);
                Dictionary <int, string> middletrans = new Dictionary <int, string>();
                foreach (var emp in empagent.agentlist)
                {
                    foreach (var agent in agentList)
                    {
                        if (emp.agentid == agent.ToString())
                        {
                            legendList.Add(emp.name);
                            middletrans.Add(agent, emp.name);
                            break;
                        }
                    }
                }


                var tabledata = _userBehaviorService.GetByList(dt, dt1);

                //考虑到图表的SereisData数据为一个列表
                List <SereisData> seriesList = new List <SereisData>();
                string            text       = string.Empty;
                foreach (var kvp in tabledata)
                {
                    SereisData seriesObj = new SereisData();
                    foreach (KeyValuePair <int, string> mtrans in middletrans)
                    {
                        if (kvp.AppId == mtrans.Key)
                        {
                            text = mtrans.Value;
                            if (!string.IsNullOrEmpty(text))
                            {
                                seriesObj.Sereisname  = text;
                                seriesObj.Sereisvalue = kvp.Count;
                                seriesList.Add(seriesObj);
                            }
                            break;
                        }
                    }
                }
                var newObj = new
                {
                    legend = legendList,
                    Data   = seriesList,
                };

                if (state == "2")
                {
                    return(Json(newObj, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(View());
                }
            }
            return(View());
        }