public ActionResult ResultDetail(int resultId) { CdeSurveyResult model = _cdeSurveyManager.GetSurveyResult(resultId); ViewBag.surveyInfo = _cdeSurveyManager.GetSurveyInfoByUserSurveyId(model.UserSurveyId); return(View(model)); }
public bool GenerateSurveyResult(int userSurveyId, int userId, out string errorMsg) { //找出所有回答 var ans = _dataAccess.GetList <Cde_SurveyReplyAnswer>("Cde_SurveyReplyAnswer.UserSurveyId=" + userSurveyId); if (ans.Count == 0) { errorMsg = @RetechWing.LanguageResources.TalnetUI.CdeSurvey.NoPersonnelSubmit; return(false); } //找出所有所答者跟被评估者的关系 var sendusers = _dataAccess.GetList <Cde_SurveySendUsers>("Cde_SurveySendUsers.UserSurveyId=" + userSurveyId); foreach (var answer in ans) { var su = sendusers.FirstOrDefault(p => p.UserId == answer.UserID); if (su != null) { answer.Relationship = su.Relationship; } } //找出所有的问题 var questions = _dataAccess.GetList <Cde_IndexQuestion>("Cde_IndexQuestion.QuestionId IN (" + ans.Select(p => p.QuestionId).GetString() + ")"); var cdeConfig = _dataAccess.Get <Cde_Configuration>(questions.First().TenantId, "TenantId"); var result = new CdeSurveyResult(); //处理权重 //参评者 var partics = sendusers; int lew = 0, colw = 0, subw = 0, selfw = 0; if (partics.Any(p => p.Relationship == 0 && p.Status == 3)) { lew = cdeConfig.LeaderWeight; } if (partics.Any(p => p.Relationship == 1 && p.Status == 3)) { colw = cdeConfig.ColleagueWeight; } if (partics.Any(p => p.Relationship == 2 && p.Status == 3)) { subw = cdeConfig.SubordinateWeight; } if (partics.Any(p => p.Relationship == 3 && p.Status == 3)) { selfw = cdeConfig.SelfWeight; } int total = lew + colw + subw + selfw;//按理说,应该是100,但是找谁说理呢 decimal ev = 100m / total; //计算最终的真实权重 result.LeaderWeight = lew * ev; result.ColleagueWeight = colw * ev; result.SubordinateWeight = subw * ev; result.SelfWeight = selfw * ev; //按照二级指标处理 var allIndexIds = questions.Select(p => p.SecondSortId).Distinct(); //var allIndexIds = questions.Select(p => p.SecondSortId).Distinct(); var resultlist = new List <CdeSurveyResultDetail>(); foreach (var indexId in allIndexIds) { var indexQs = questions.Where(p => p.SecondSortId == indexId); var detail = new CdeSurveyResultDetail(); detail.IndexId = indexId; var leaderAns = ans.Where(p => indexQs.Any(q => q.QuestionId == p.QuestionId)) .Where(p => p.Relationship == 0).ToArray(); detail.LeaderScore = leaderAns.Any() ? (decimal)leaderAns.Average(p => p.Score) : 0m; var collAns = ans.Where(p => indexQs.Any(q => q.QuestionId == p.QuestionId)) .Where(p => p.Relationship == 1).ToArray(); detail.ColleagueScore = collAns.Any() ? (decimal)collAns.Average(p => p.Score) : 0m; var subAns = ans.Where(p => indexQs.Any(q => q.QuestionId == p.QuestionId)) .Where(p => p.Relationship == 2).ToArray(); detail.SubordinateScore = subAns.Any() ? (decimal)subAns.Average(p => p.Score) : 0m; var selfAns = ans.Where(p => indexQs.Any(q => q.QuestionId == p.QuestionId)) .Where(p => p.Relationship == 3).ToArray(); detail.SelfScore = selfAns.Any() ? (decimal)selfAns.Average(p => p.Score) : 0m; detail.AvgScore = ( detail.LeaderScore * result.LeaderWeight + detail.ColleagueScore * result.ColleagueWeight + detail.SubordinateScore * result.SubordinateWeight + detail.SelfScore * result.SelfWeight ) / 100M; resultlist.Add(detail); } result.UserSurveyId = userSurveyId; result.StatisUser = userId; result.StatisticalTime = DateTime.Now; result.TotalScore = resultlist.Average(p => p.AvgScore); _dataAccess.AddEntity(result); resultlist.ForEach(p => p.ResultId = result.ResultId); _dataAccess.AddEntities(resultlist); var model = _dataAccess.Get <UserSurvey>(userSurveyId); model.ResultGenerated = result.ResultId; _dataAccess.UpdateEntity(model); errorMsg = string.Empty; return(true); }