/// <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); }
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()); }