コード例 #1
0
        public async Task <IActionResult> GetResponseByFeedbackId(string feedbackId)
        {
            /*_equipmentGroup.*/
            //get questionId from feedbackId
            List <Question>              listQuestion      = _questionRepository.GetAll().ToList <Question>();
            List <Question>              listQuestionForFb = new List <Question>();
            List <string>                listQuestionId    = new List <string>();
            List <ResponseModel>         listResponse      = new List <ResponseModel>();
            List <Response>              listTmp           = new List <Response>();
            List <ResponseModel>         listResForOneQues = new List <ResponseModel>();
            List <List <ResponseModel> > listResult        = new List <List <ResponseModel> >();

            foreach (Question que in listQuestion)
            {
                if (que.FeedbackId.Equals(feedbackId))
                {
                    listQuestionId.Add(que.QuestionId);
                    listQuestionForFb.Add(que);
                }
            }
            //get all response from QuestionID
            for (int questionIndex = 0; questionIndex < listQuestionId.Count; questionIndex++)
            {
                listTmp = _responseRepository.GetResponseByQuestionId(listQuestionId[questionIndex]).ToList();
                foreach (Response r in listTmp)
                {
                    String        tmpResponseDetail  = r.ResponseDetail;
                    List <string> listResponseDetail = new List <string>();
                    //TypeOfQuestion 1: Emotion
                    if (r.Question.TypeOfQuestion == 1)
                    {
                        switch (tmpResponseDetail)
                        {
                        case "1":
                            tmpResponseDetail = "Thất vọng";
                            break;

                        case "2":
                            tmpResponseDetail = "Tạm ổn";
                            break;

                        case "3":
                            tmpResponseDetail = "Tốt";
                            break;

                        case "4":
                            tmpResponseDetail = "Tuyệt vời";
                            break;

                        case "5":
                            tmpResponseDetail = "Yêu thích";
                            break;
                        }
                    }
                    //TypeOfQuestion 2: Rating star
                    else if (r.Question.TypeOfQuestion == 2)
                    {
                        tmpResponseDetail = r.ResponseDetail.Substring(0, 1) + " sao";
                    }
                    else if (r.Question.TypeOfQuestion == 3)
                    {
                        listResponseDetail = getResponseDetail(r.ResponseDetail);
                        foreach (string detail in listResponseDetail)
                        {
                            ResponseModel resModelForMultichoice = new ResponseModel
                            {
                                equipmentId    = r.EquipmentId,
                                questionId     = questionIndex + "",
                                responseDetail = detail,
                                typeOfQuestion = r.Question.TypeOfQuestion + "",
                                responseTime   = r.ResponseTime
                            };
                            listResponse.Add(resModelForMultichoice);
                        }
                    }
                    //TypeOfQuestion 4: one choice
                    else if (r.Question.TypeOfQuestion == 4)
                    {
                        tmpResponseDetail = r.ResponseDetail;
                    }

                    if (r.Question.TypeOfQuestion != 3)
                    {
                        ResponseModel resModel = new ResponseModel
                        {
                            equipmentId    = r.EquipmentId,
                            questionId     = questionIndex + "",
                            responseDetail = tmpResponseDetail,
                            typeOfQuestion = r.Question.TypeOfQuestion + "",
                            responseTime   = r.ResponseTime
                        };
                        listResponse.Add(resModel);
                        if (questionIndex == 0)
                        {
                            listResForOneQues.Add(resModel);
                        }
                    }
                }
                listResult.Add(listResponse);
            }

            var settings = new ConnectionConfiguration(new Uri("http://localhost:9200"))
                           .RequestTimeout(TimeSpan.FromMinutes(2));
            var lowlevelClient = new ElasticLowLevelClient(settings);
            //push data on elastic for count response of feedback
            int i = 0;
            int checkIdOfIndexExist = 0;

            if (HttpContext.Session.GetInt32("TotalIdIndexOfCountRes") != null)
            {
                checkIdOfIndexExist = (int)HttpContext.Session.GetInt32("TotalIdIndexOfCountRes");
                if (checkIdOfIndexExist != 0)
                {
                    //Clear all data in index
                    for (int j = 1; j <= checkIdOfIndexExist; j++)
                    {
                        lowlevelClient.Delete <StringResponse>("countresponseforfb", Convert.ToString(j));
                    }
                    HttpContext.Session.Remove("TotalIdIndexOfCountRes");
                }
            }
            foreach (ResponseModel res in listResForOneQues)
            {
                lowlevelClient.Index <StringResponse>("countresponseforfb", Convert.ToString(++i), PostData.Serializable(res));
            }
            HttpContext.Session.SetInt32("TotalIdIndexOfCountRes", i);


            //Id cho tung object trong index
            #region push response on elastic
            i = 0;
            checkIdOfIndexExist = 0;
            if (HttpContext.Session.GetInt32("TotalIdIndex") != null)
            {
                checkIdOfIndexExist = (int)HttpContext.Session.GetInt32("TotalIdIndex");
                if (checkIdOfIndexExist != 0)
                {
                    //Clear all data in index
                    for (int j = 1; j <= checkIdOfIndexExist; j++)
                    {
                        lowlevelClient.Delete <StringResponse>("testresponse", Convert.ToString(j));
                    }
                    HttpContext.Session.Remove("TotalIdIndex");
                }
            }

            foreach (ResponseModel res in listResponse)
            {
                lowlevelClient.Index <StringResponse>("testresponse", Convert.ToString(++i), PostData.Serializable(res));
            }

            HttpContext.Session.SetInt32("TotalIdIndex", i);
            #endregion

            ViewBag.countResponse = listResForOneQues.Count;
            ViewBag.listQuestion  = listQuestionForFb;
            ViewBag.feedbackId    = feedbackId;
            getFeedbackIDByBrandId();
            getEquipmentGroupId();

            await HttpContext.Session.LoadAsync();

            HttpContext.Session.SetString("feedbackId", feedbackId);
            await HttpContext.Session.CommitAsync();

            EquipmentGroup e = new EquipmentGroup {
                EquipmentGroupId = HttpContext.Session.GetString("equipmentGroupId")
            };
            await GetListFeedbackByEquipmentGroupId(e);

            return(View("Admin"));
        }