public ReturnValueModel GetMeetQA(QuestionModel question, WorkUser workUser)
        {
            ReturnValueModel rvm = new ReturnValueModel();

            var meetQA = new MeetQAContentViewModel();

            meetQA.Question = _rep.FirstOrDefault <QuestionModel>(s => s.Id == question.Id);
            meetQA.Answers  = _rep.Where <AnswerModel>(s => s.IsDeleted != 1 && s.QuestionId == meetQA.Question.Id).OrderBy(s => s.Sort);

            if (meetQA.Question != null)
            {
                meetQA = FillFromQA(meetQA);

                rvm.Msg     = "success";
                rvm.Success = true;
                rvm.Result  = new
                {
                    meetQA = meetQA
                };
            }
            else
            {
                rvm.Msg     = "fail";
                rvm.Success = false;
            }

            return(rvm);
        }
        private MeetQAContentViewModel FillToChangeQAModel(MeetQAContentViewModel meetQAView)
        {
            MeetQAContentViewModel meetQA = new MeetQAContentViewModel();

            meetQA = meetQAView;
            //填空做转换
            if (meetQA.Question.QuestionType == 3)
            {
                string             a    = meetQAView.Question.QuestionContent;
                var                r    = Regex.Matches(a, @"\{(.+?)\}");
                int                sort = 1;
                List <AnswerModel> list = new List <AnswerModel>();
                AnswerModel        item;
                foreach (Match x in r)
                {
                    item = new AnswerModel();
                    item.AnswerContent = x.Groups[1].Value;
                    item.IsRight       = true;
                    item.Sort          = sort.ToString();
                    meetQA.Question.QuestionContent = meetQA.Question.QuestionContent.Replace(x.Groups[0].Value, "{" + sort + "}");
                    list.Add(item);
                    sort++;
                }

                meetQA.Answers = list;
            }

            return(meetQA);
        }
        private MeetQAContentViewModel FillFromQA(MeetQAContentViewModel meetQAView)
        {
            MeetQAContentViewModel meetQA = meetQAView;

            //填空做转换
            if (meetQA.Question?.QuestionType == 3)
            {
                string a = meetQAView.Question.QuestionContent;
                var    r = Regex.Matches(a, @"\{(.+?)\}");
                foreach (Match x in r)
                {
                    string item   = x.Groups[1].Value;
                    var    answer = meetQAView.Answers.FirstOrDefault(s => s.IsRight == true && s.Sort.Equals(item)).AnswerContent;
                    meetQA.Question.QuestionContent = meetQAView.Question.QuestionContent.Replace(item, answer);
                }
            }

            return(meetQA);
        }
        /// <summary>
        /// 新增或修改问卷
        /// </summary>
        /// <param name="meetQA"></param>
        /// <param name="workUser"></param>
        /// <returns></returns>
        public ReturnValueModel AddOrUpdateMeetQA(MeetQAContentViewModel meetQA, WorkUser workUser)
        {
            ReturnValueModel rvm = new ReturnValueModel();

            meetQA = FillToChangeQAModel(meetQA);
            var question = _rep.FirstOrDefault <QuestionModel>(s => s.Id == meetQA.Question.Id);

            if (question == null)
            {
                using (var tran = _rep.Database.BeginTransaction())
                {
                    try
                    {
                        meetQA.Question.Id         = Guid.NewGuid().ToString();
                        meetQA.Question.CreateTime = DateTime.Now;
                        meetQA.Question.CreateUser = workUser.User.Id;

                        _rep.Insert(meetQA.Question);
                        _rep.SaveChanges();
                        foreach (var item in meetQA.Answers)
                        {
                            item.QuestionId = meetQA.Question.Id;
                            item.Id         = Guid.NewGuid().ToString();
                            item.CreateTime = DateTime.Now;
                            item.CreateUser = workUser.User.Id;
                            _rep.Insert(item);
                        }
                        _rep.SaveChanges();
                        tran.Commit();
                        rvm.Msg     = "success";
                        rvm.Success = true;
                        rvm.Result  = meetQA;
                    }
                    catch (Exception ex)
                    {
                        rvm.Msg     = "fail";
                        rvm.Success = false;
                        tran.Rollback();
                    }
                }
            }
            else
            {
                using (var tran = _rep.Database.BeginTransaction())
                {
                    try
                    {
                        question.QuestionContent = meetQA.Question.QuestionContent;
                        question.QuestionType    = meetQA.Question.QuestionType;
                        question.MeetId          = meetQA.Question.MeetId;
                        question.UpdateTime      = DateTime.Now;
                        question.UpdateUser      = workUser.User.Id;

                        _rep.Update(question);
                        _rep.SaveChanges();

                        var list = _rep.Where <AnswerModel>(s => s.QuestionId == question.Id);
                        _rep.DeleteList(list);
                        _rep.SaveChanges();

                        foreach (var item in meetQA.Answers)
                        {
                            item.QuestionId = meetQA.Question.Id;
                            item.Id         = Guid.NewGuid().ToString();
                            item.CreateTime = DateTime.Now;
                            item.CreateUser = workUser.User.Id;
                            _rep.Insert(item);
                        }
                        _rep.SaveChanges();
                        tran.Commit();
                        rvm.Msg     = "success";
                        rvm.Success = true;
                        rvm.Result  = meetQA;
                    }
                    catch (Exception ex)
                    {
                        rvm.Msg     = "fail";
                        rvm.Success = false;
                        tran.Rollback();
                    }
                }
            }

            return(rvm);
        }
        public IHttpActionResult AddOrUpdateMeetQA(MeetQAContentViewModel meetQA)
        {
            var ret = _meetQAService.AddOrUpdateMeetQA(meetQA, WorkUser);

            return(Ok(ret));
        }