Exemple #1
0
        public ActionResult ResultDetail(int resultId)
        {
            CdeSurveyResult model = _cdeSurveyManager.GetSurveyResult(resultId);

            ViewBag.surveyInfo = _cdeSurveyManager.GetSurveyInfoByUserSurveyId(model.UserSurveyId);
            return(View(model));
        }
Exemple #2
0
        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);
        }