/// <summary>
        /// 获取Yw_SubjectContent对象,以及对对象如何操作(添加/更新)
        /// 用于向数据库添加或更新数据
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="bll"></param>
        /// <param name="currentUser"></param>
        /// <param name="entity"></param>
        /// <returns></returns>
        public Action <Yw_SubjectContent> Fetch(
            QuestionInputModel subject,
            SubjectBll bll,
            int currentUser,
            out Yw_SubjectContent entity)
        {
            Check.IfNull(subject, nameof(subject));
            if (currentUser < 10000)
            {
                throw new ArgumentException(
                          "当前登录用户的ID不能小于10000",
                          nameof(currentUser));
            }

            Action <Yw_SubjectContent> saveContentMethod = null;
            Yw_SubjectContent          contentInDb       = bll.GetSubjectContent(subject.Id);

            if (contentInDb == null)
            {
                saveContentMethod = bll.InsertContent;
            }
            else
            {
                saveContentMethod = bll.UpdateContent;
            }
            Yw_SubjectContent content = GetContent(subject, bll, currentUser, contentInDb);

            entity = content;
            return(saveContentMethod);
        }
Exemple #2
0
        protected override QuestionInputModel ConvertToDerived2(
            Yw_SubjectContent content)
        {
            var inputModel = new MultipleChoice();

            if (content != null)
            {
                var c = content as Yw_SubjectSelectContent;
                inputModel.StemType    = (UeditorType)c.Ysc_Content_Obj.StemType;
                inputModel.ContentType = (UeditorType)c.Ysc_Content_Obj.ContentType;
                inputModel.Display     = c.Ysc_Content_Obj.Display;
                UeditorType contentType = (UeditorType)c.Ysc_Content_Obj.ContentType;
                inputModel.Options = c.Ysc_Content_Obj.Options
                                     .Select(o => UeditorContentFactory.RestoreContent(o.Text, contentType)).ToList();
                inputModel.Random = c.Ysc_Content_Obj.Random;
                UeditorType t    = (UeditorType)c.Ysc_Content_Obj.StemType;
                string      name = UeditorContentFactory.RestoreContent(c.Ysc_Content_Obj.Stem, t);
                inputModel.Name    = name;
                inputModel.Answers = c.Ysc_Answer_Obj.Answers;
            }
            else
            {
                inputModel.StemType    = UeditorType.Text;
                inputModel.ContentType = UeditorType.Text;
                inputModel.Display     = 1;
                inputModel.Options     = new List <string>();
                inputModel.Random      = 1;
                inputModel.Name        = string.Empty;
                inputModel.Answers     = new List <int>();
            }

            return(inputModel);
        }
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            FillInBlank           subject        = sub as FillInBlank;
            Yw_FillInBlankContent derivedContent = null;

            if (content == null)
            {
                derivedContent = new Yw_FillInBlankContent();
                derivedContent.Ysc_CreateTime  = DateTime.Now;
                derivedContent.Ysc_Creator     = currentUser;
                derivedContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                derivedContent = content as Yw_FillInBlankContent;
            }
            derivedContent.Ysc_Editor      = currentUser;
            derivedContent.Ysc_Explain     = subject.Explain;
            derivedContent.Ysc_Content_Obj = new FillInBlankContentObj
            {
                Stem = UeditorContentFactory.Blank(subject.Name)
            };
            derivedContent.Ysc_Answer_Obj = new FillInBlankAnswerObj
            {
                Correct = subject.Correct.Blanks,
                Other   = subject.Other.Blanks,
                Perfect = subject.Perfect.Blanks
            };
            derivedContent.Ysc_UpdateTime = DateTime.Now;
            return(derivedContent);
        }
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            TrueFalse           subject        = sub as TrueFalse;
            Yw_TrueFalseContent derivedContent = null;

            if (content == null)
            {
                derivedContent = new Yw_TrueFalseContent();
                derivedContent.Ysc_CreateTime  = DateTime.Now;
                derivedContent.Ysc_Creator     = currentUser;
                derivedContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                derivedContent = content as Yw_TrueFalseContent;
            }
            derivedContent.Ysc_Editor      = currentUser;
            derivedContent.Ysc_Explain     = subject.Explain;
            derivedContent.Ysc_Content_Obj = new TrueFalseContentObj
            {
                StemType = (int)subject.StemType,
                Stem     = UeditorContentFactory.FetchUrl(subject.Name, subject.StemType)
            };
            derivedContent.Ysc_Answer_Obj = new TrueFalseAnswerObj
            {
                Answer = subject.Answer
            };
            derivedContent.Ysc_UpdateTime = DateTime.Now;

            return(derivedContent);
        }
Exemple #5
0
        public void SubjectContentDtoBuilder_Create_ShouldReturnCorrect()
        {
            Yw_SubjectContent content = null;
            Yw_Subject        subject = null;
            DtoSubjectContent dto     = SubjectContentDtoBuilder.Create(content, subject);

            Assert.IsNotNull(dto);
            Console.WriteLine(dto.ToJson());
        }
Exemple #6
0
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            var inputModel = new FillInBlank();
            var c          = content as Yw_FillInBlankContent;

            inputModel.Perfect.Blanks = c.Ysc_Answer_Obj.Perfect;
            inputModel.Correct.Blanks = c.Ysc_Answer_Obj.Correct;
            inputModel.Other.Blanks   = c.Ysc_Answer_Obj.Other;
            inputModel.Name           = c.Ysc_Content_Obj.Stem;
            return(inputModel);
        }
Exemple #7
0
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            MultipleChoice          subject       = sub as MultipleChoice;
            Yw_SubjectSelectContent selectContent = null;

            if (content == null)
            {
                selectContent = new Yw_SubjectSelectContent();
                selectContent.Ysc_CreateTime  = DateTime.Now;
                selectContent.Ysc_Creator     = currentUser;
                selectContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                selectContent = content as Yw_SubjectSelectContent;
            }
            selectContent.Ysc_Editor  = currentUser;
            selectContent.Ysc_Explain = subject.Explain;
            if (subject.ContentType == UeditorType.Image)
            {
                subject.Options = subject.Options.Select(o =>
                                                         UeditorContentFactory.FetchUrl(o, subject.ContentType)).ToList();
            }
            var options = subject.Options
                          .Select((o, i) => new SubjectOption {
                Text = o, Key = i
            })
                          .ToList();

            selectContent.Ysc_Answer_Obj = new SubjectSelectAnswerObj
            {
                Answers = subject.Answers
            };
            string stem = UeditorContentFactory.FetchUrl(subject.Name, subject.StemType);

            selectContent.Ysc_Content_Obj = new SubjectSelectContentObj
            {
                StemType    = (int)subject.StemType,
                Stem        = stem,
                ContentType = (int)subject.ContentType,
                Options     = options,
                Display     = subject.Display,
                Random      = subject.Random
            };
            selectContent.Ysc_UpdateTime = DateTime.Now;

            return(selectContent);
        }
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            TrueFalse           inputModel = new TrueFalse();
            Yw_TrueFalseContent c          = content as Yw_TrueFalseContent;

            inputModel.Answer   = c.Ysc_Answer_Obj.Answer;
            inputModel.StemType = (UeditorType)c.Ysc_Content_Obj.StemType;
            inputModel.Name     = UeditorContentFactory.RestoreContent(
                c.Ysc_Content_Obj.Stem,
                inputModel.StemType);
            return(inputModel);
        }
Exemple #9
0
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            var inputModel = new Free();
            var c          = content as Yw_SubjectFreeContent;

            inputModel.StemType = (UeditorType)c.Ysc_Content_Obj.StemType;
            inputModel.Name     = UeditorContentFactory.RestoreContent(
                c.Ysc_Content_Obj.Stem,
                inputModel.StemType);
            inputModel.Answer     = c.Ysc_Answer_Obj.Answer;
            inputModel.ScoreRules = c.Ysc_Content_Obj.ScoreRules;
            return(inputModel);
        }
Exemple #10
0
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            var inputModel = new Mark();
            var c          = content as Yw_SubjectMarkContent;

            inputModel.Color     = c.Ysc_Content_Obj.Color;
            inputModel.Content   = c.Ysc_Content_Obj.Content;
            inputModel.Alignment = c.Ysc_Content_Obj.Alignment;
            inputModel.StemType  = (UeditorType)c.Ysc_Content_Obj.StemType;
            inputModel.Name      = UeditorContentFactory.RestoreContent(
                c.Ysc_Content_Obj.Stem,
                inputModel.StemType);
            return(inputModel);
        }
Exemple #11
0
        public Tuple <StudentAnswerBase, Yw_SubjectContent, Yw_Subject, Yw_StudentWrongSubject> GetWorngSubjectVm(int studentId, int wrongSubjectId)
        {
            Yw_StudentWrongSubject wrongSubject = StudentWrongSubjectRepository.Get(wrongSubjectId);

            if (wrongSubject == null || wrongSubject.Yws_StudentId != studentId)
            {
                wrongSubject = null;
            }
            if (wrongSubject != null)
            {
                StudentAnswerBase answer         = (wrongSubject as Yw_StudentWrongSubjectExt).Yws_Answer_Obj;
                Yw_SubjectContent subjectContent = SubjectBll.GetSubjectContent(wrongSubject.Yws_WrongSubjectId);
                Yw_Subject        subject        = SubjectBll.GetSubject(wrongSubject.Yws_WrongSubjectId);
                return(new Tuple <StudentAnswerBase, Yw_SubjectContent, Yw_Subject, Yw_StudentWrongSubject>(answer, subjectContent, subject, wrongSubject));
            }
            return(null);
        }
Exemple #12
0
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            var inputModel = new Match();
            var c          = content as Yw_MatchContent;

            inputModel.StemType = (UeditorType)c.Ysc_Content_Obj.StemType;
            inputModel.TitleOptionContentType   = (UeditorType)c.Ysc_Content_Obj.LeftOptionContentType;
            inputModel.AnswertOptionContentType = (UeditorType)c.Ysc_Content_Obj.RightOptionContentType;
            inputModel.Title = c.Ysc_Content_Obj.LeftOptions.Select(s =>
                                                                    UeditorContentFactory.RestoreContent(s.Text, inputModel.TitleOptionContentType)).ToList();
            inputModel.LinedAnswers = c.Ysc_Answer_Obj.Answers.Select(s => s[1]).ToList();
            inputModel.Answer       = c.Ysc_Content_Obj.RightOptions.Select(s =>
                                                                            UeditorContentFactory.RestoreContent(s.Text, inputModel.AnswertOptionContentType)).ToList();
            inputModel.Name = UeditorContentFactory.RestoreContent(
                c.Ysc_Content_Obj.Stem,
                inputModel.StemType);
            return(inputModel);
        }
        public void SubjectContentRepository_Insert_ShouldSuccess()
        {
            SubjectContentRepository repository = new SubjectContentRepository();
            DateTime          now         = DateTime.Now;
            Yw_SubjectContent addedEntity = repository.Insert(new Yw_SubjectContent()
            {
                Ysc_SubjectId   = 90000,
                Ysc_CreateTime  = now,
                Ysc_Creator     = 1000,
                Ysc_Editor      = 1000,
                Ysc_SubjectType = (int)SubjectTypeEnum.择题,
                Ysc_UpdateTime  = now,
                Ysc_Answer      = "answer-zhcy",
                Ysc_Content     = "content-zhcy",
                Ysc_Explain     = "explain-zhcy"
            });

            Assert.IsNotNull(addedEntity);
            Assert.AreEqual(90000, addedEntity.Ysc_SubjectId);
        }
        protected override QuestionInputModel ConvertToDerived2(Yw_SubjectContent content)
        {
            TrueFalse inputModel = new TrueFalse();

            if (content != null)
            {
                Yw_TrueFalseContent c = content as Yw_TrueFalseContent;
                inputModel.Answer   = c.Ysc_Answer_Obj.Answer;
                inputModel.StemType = (UeditorType)c.Ysc_Content_Obj.StemType;
                inputModel.Name     = UeditorContentFactory.RestoreContent(
                    c.Ysc_Content_Obj.Stem,
                    inputModel.StemType);
            }
            else
            {
                inputModel.StemType = UeditorType.Text;
                inputModel.Name     = string.Empty;
                inputModel.Answer   = 1;
            }
            return(inputModel);
        }
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            Mark2 subject = sub as Mark2;
            Yw_SubjectMark2Content selectContent = null;

            if (content == null)
            {
                selectContent = new Yw_SubjectMark2Content();
                selectContent.Ysc_CreateTime  = DateTime.Now;
                selectContent.Ysc_Creator     = currentUser;
                selectContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                selectContent = content as Yw_SubjectMark2Content;
            }
            selectContent.Ysc_Editor      = currentUser;
            selectContent.Ysc_Explain     = subject.Explain;
            selectContent.Ysc_Content_Obj = new SubjectMark2ContentObj
            {
                Alignment = subject.Alignment,
                Color     = subject.Color,
                Content   = subject.Content,
                Stem      = UeditorContentFactory.FetchUrl(subject.Name, subject.StemType),
                StemType  = (int)subject.StemType
            };

            selectContent.Ysc_Answer_Obj = new SubjectMark2AnswerObj
            {
                Answers = GenareteAnswers(subject.Content)
            };
            selectContent.Ysc_UpdateTime = DateTime.Now;

            return(selectContent);
        }
        protected override QuestionInputModel ConvertToDerived(
            Yw_SubjectContent content)
        {
            var inputModel = new MultipleChoiceFillInBlank();
            var c          = content as MultipleChoiceFillInBlankContent;

            inputModel.AnswerIndexes = new List <int>();
            UeditorType type = (UeditorType)c.Ysc_Content_Obj.ContentType;

            inputModel.Options = c.Ysc_Content_Obj.SubjectOptions.Select(o =>
                                                                         UeditorContentFactory.RestoreContent(o.Text, type)).ToList();
            inputModel.Goptions = c.Ysc_Content_Obj.SubjectGOptions.Select(o =>
                                                                           UeditorContentFactory.RestoreContent(o.Text, type)).ToList();
            inputModel.Name        = c.Ysc_Content_Obj.Stem;
            inputModel.ContentType = (UeditorType)c.Ysc_Content_Obj.ContentType;
            //inputModel.GPositions = new List<int>();
            //foreach (var item in c.Ysc_Content_Obj.GPositions)
            //{
            //    inputModel.GPositions.Add(item.Key);
            //}
            return(inputModel);
        }
Exemple #17
0
        public void SubmitSubject(
            Yw_Subject subject,
            Yw_SubjectContent content,
            IEnumerable <Yw_SubjectIndex> subjectIndexToAdd,
            IEnumerable <int> subjectIndexToDelete,
            Yw_SubjectKnowledge mainKnowledge,
            IEnumerable <Yw_SubjectKnowledge> knowledgesToAdd,
            IEnumerable <int> knowledgesToDelete,
            Yw_SubjectProcess subjectProcess)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (!Saved(subject.Ysj_Id))
                    {
                        //SaveSubject(
                        //    subject,
                        //    content,
                        //    subjectIndexToAdd,
                        //    subjectIndexToDelete,
                        //    mainKnowledge,
                        //    knowledgesToAdd,
                        //    knowledgesToDelete);
                    }

                    subjectProcess.Ysp_SubjectId = subject.Ysj_Id;
                    MoveSubjectProcessToNext(subjectProcess);

                    scope.Complete();
                }
                catch
                {
                    RollbackTran();
                    throw;
                }
            }
        }
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            Free subject = sub as Free;
            Yw_SubjectFreeContent selectContent = null;

            if (content == null)
            {
                selectContent = new Yw_SubjectFreeContent();
                selectContent.Ysc_CreateTime  = DateTime.Now;
                selectContent.Ysc_Creator     = currentUser;
                selectContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                selectContent = content as Yw_SubjectFreeContent;
            }
            selectContent.Ysc_Editor     = currentUser;
            selectContent.Ysc_Explain    = subject.Explain;
            selectContent.Ysc_Answer_Obj = new SubjectFreeAnswerObj
            {
                Answer = subject.Answer
            };
            selectContent.Ysc_Content_Obj = new SubjectFreeContentObj
            {
                ScoreRules = subject.ScoreRules,
                Stem       = UeditorContentFactory.FetchUrl(subject.Name, subject.StemType),
                StemType   = (int)subject.StemType
            };
            selectContent.Ysc_UpdateTime = DateTime.Now;

            return(selectContent);
        }
Exemple #19
0
 public void InsertContent(Yw_SubjectContent content)
 {
     Service.Insert(content);
 }
        public static SubjectVm Create(Yw_SubjectContent content)
        {
            Check.IfNull(content, nameof(content));

            SubjectVm       vm          = null;
            SubjectTypeEnum subjectType = (SubjectTypeEnum)content.Ysc_SubjectType;

            switch (subjectType)
            {
            case SubjectTypeEnum.择题:
                Yw_SubjectSelectContent select = content as Yw_SubjectSelectContent;
                var random   = select.Ysc_Content_Obj.Random;
                var mOptions = select.Ysc_Content_Obj.Options;
                if (random == 1)    //随机显示
                {
                    mOptions = mOptions.OrderBy(c => Guid.NewGuid()).ToList();
                }
                vm = new MultipleChoiceSubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = select.Ysc_Explain,
                    Answer      = select.Ysc_Answer_Obj.Answers,
                    StemType    = select.Ysc_Content_Obj.StemType,
                    Stem        = select.Ysc_Content_Obj.Stem,
                    Options     = mOptions,
                    OptionType  = select.Ysc_Content_Obj.ContentType,
                    SubjectType = select.Ysc_SubjectType,
                    Display     = select.Ysc_Content_Obj.Display
                };
                break;

            case SubjectTypeEnum.判断题:
                Yw_TrueFalseContent trueFalse = content as Yw_TrueFalseContent;
                vm = new TrueFalseSubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = trueFalse.Ysc_Explain,
                    Answer      = trueFalse.Ysc_Answer_Obj.Answer,
                    StemType    = trueFalse.Ysc_Content_Obj.StemType,
                    Stem        = trueFalse.Ysc_Content_Obj.Stem,
                    SubjectType = trueFalse.Ysc_SubjectType
                };
                break;

            case SubjectTypeEnum.填空题:
                Yw_FillInBlankContent fillInBlank = content as Yw_FillInBlankContent;
                string blankStem = UeditorContentFactory.Blank(
                    fillInBlank.Ysc_Content_Obj.Stem);
                vm = new FillInBlankSubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = fillInBlank.Ysc_Explain,
                    Answer      = new
                    {
                        Perfect = fillInBlank.Ysc_Answer_Obj.Perfect,
                        Correct = fillInBlank.Ysc_Answer_Obj.Correct,
                        Other   = fillInBlank.Ysc_Answer_Obj.Other
                    },
                    StemType    = (int)UeditorType.Text,
                    Stem        = blankStem,
                    SubjectType = fillInBlank.Ysc_SubjectType
                };
                break;

            case SubjectTypeEnum.择填空:
                MultipleChoiceFillInBlankContent multipleChoiceFillInBlank = content as MultipleChoiceFillInBlankContent;
                List <SubjectOption>             options = new List <SubjectOption>();
                options.AddRange(multipleChoiceFillInBlank.Ysc_Content_Obj.SubjectOptions);
                options.AddRange(multipleChoiceFillInBlank.Ysc_Content_Obj.SubjectGOptions);
                UeditorType contentType =
                    (UeditorType)multipleChoiceFillInBlank.Ysc_Content_Obj.ContentType;
                RestoreUrl(options, contentType);
                options = options.OrderBy(c => Guid.NewGuid()).ToList();
                string mBlankStem = UeditorContentFactory.Blank(
                    multipleChoiceFillInBlank.Ysc_Content_Obj.Stem);
                vm = new MultipleChoiceFillInBlankSubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = multipleChoiceFillInBlank.Ysc_Explain,
                    Answer      = multipleChoiceFillInBlank.Ysc_Answer_Obj.Answers,
                    StemType    = (int)UeditorType.Text,
                    Stem        = mBlankStem,
                    Options     = options,
                    OptionType  = multipleChoiceFillInBlank.Ysc_Content_Obj.ContentType,
                    SubjectType = multipleChoiceFillInBlank.Ysc_SubjectType
                };
                break;

            case SubjectTypeEnum.连线题:
                Yw_MatchContent match = content as Yw_MatchContent;

                var contentObj = match.Ysc_Content_Obj;

                var leftOptions = new List <SubjectOption>();
                leftOptions.AddRange(contentObj.LeftOptions);
                RestoreUrl(leftOptions, (UeditorType)contentObj.LeftOptionContentType);
                leftOptions = leftOptions.OrderBy(c => Guid.NewGuid()).ToList();

                var rightOptions = new List <SubjectOption>();
                rightOptions.AddRange(contentObj.RightOptions);
                RestoreUrl(rightOptions, (UeditorType)contentObj.RightOptionContentType);
                rightOptions = rightOptions.OrderBy(c => Guid.NewGuid()).ToList();
                vm           = new MatchSubjectVm
                {
                    KnowledgeId     = 0,
                    Analysis        = match.Ysc_Explain,
                    Answer          = match.Ysc_Answer_Obj.Answers,
                    StemType        = contentObj.StemType,
                    Stem            = contentObj.Stem,
                    LeftOptions     = leftOptions,
                    RightOptions    = rightOptions,
                    SubjectType     = match.Ysc_SubjectType,
                    LeftOptionType  = match.Ysc_Content_Obj.LeftOptionContentType,
                    RightOptionType = match.Ysc_Content_Obj.RightOptionContentType
                };
                break;

            case SubjectTypeEnum.主观题:
                Yw_SubjectFreeContent free = content as Yw_SubjectFreeContent;
                string freeAnswer          = free.Ysc_Answer_Obj.Answer;
                if (free.Ysc_Content_Obj.AnswerType == (int)UeditorType.Image)
                {
                    freeAnswer = ConfigurationManager.AppSettings["OssHostUrl"]
                                 + freeAnswer;
                }

                string freeStandard = free.Ysc_Content_Obj.ScoreRules;
                if (free.Ysc_Content_Obj.ScoreRulesType == (int)UeditorType.Image)
                {
                    freeStandard = ConfigurationManager.AppSettings["OssHostUrl"]
                                   + freeStandard;
                }

                string freeStem = free.Ysc_Content_Obj.Stem;
                if (free.Ysc_Content_Obj.StemType == (int)UeditorType.Image)
                {
                    freeStem = ConfigurationManager.AppSettings["OssHostUrl"]
                               + freeStem;
                }
                vm = new FreeSubjectVm
                {
                    KnowledgeId  = 0,
                    Analysis     = free.Ysc_Explain,
                    Answer       = freeAnswer,
                    AnswerType   = free.Ysc_Content_Obj.AnswerType,
                    StemType     = free.Ysc_Content_Obj.StemType,
                    Stem         = freeStem,
                    SubjectType  = free.Ysc_SubjectType,
                    Standard     = freeStandard,
                    StandardType = free.Ysc_Content_Obj.ScoreRulesType
                };
                break;

            case SubjectTypeEnum.圈点批注标色:
                Yw_SubjectMarkContent mark = content as Yw_SubjectMarkContent;
                string stem = mark.Ysc_Content_Obj.Stem;
                if (mark.Ysc_Content_Obj.StemType == (int)UeditorType.Image)
                {
                    stem = ConfigurationManager.AppSettings["OssHostUrl"]
                           + stem;
                }
                string markContent = mark.Ysc_Content_Obj.Content?
                                     .Replace("{:", string.Empty)
                                     .Replace("{:", string.Empty)
                                     .Replace("}", string.Empty);

                vm = new MarkSubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = mark.Ysc_Explain,
                    Answer      = mark.Ysc_Answer_Obj.Answers,
                    StemType    = mark.Ysc_Content_Obj.StemType,
                    Stem        = stem,
                    SubjectType = mark.Ysc_SubjectType,
                    Content     = markContent,
                    Color       = mark.Ysc_Content_Obj.Color
                };
                break;

            case SubjectTypeEnum.圈点批注断句:
                Yw_SubjectMark2Content mark2 = content as Yw_SubjectMark2Content;
                string mark2Stem             = mark2.Ysc_Content_Obj.Stem;
                if (mark2.Ysc_Content_Obj.StemType == (int)UeditorType.Image)
                {
                    mark2Stem = ConfigurationManager.AppSettings["OssHostUrl"]
                                + mark2Stem;
                }
                string mark2Content = mark2.Ysc_Content_Obj.Content?
                                      .Replace("/", string.Empty);
                vm = new Mark2SubjectVm
                {
                    KnowledgeId = 0,
                    Analysis    = mark2.Ysc_Explain,
                    Answer      = mark2.Ysc_Answer_Obj.Answers,
                    StemType    = mark2.Ysc_Content_Obj.StemType,
                    Stem        = mark2Stem,
                    SubjectType = mark2.Ysc_SubjectType,
                    Content     = mark2Content,
                    Color       = mark2.Ysc_Content_Obj.Color
                };
                break;

            default:
                break;
            }

            return(vm);
        }
 /// <summary>
 /// 生成一个Subject Content对象,该对象用于向数据库中添加/更新数据
 /// </summary>
 /// <param name="sub">封装着前端传来的数据</param>
 /// <param name="bll">SubjectBll对象</param>
 /// <param name="currentUser">当前用户</param>
 /// <param name="content">Subject Content对象,该对象从数据库中查询所得,用于判断是添加还是更新操作</param>
 /// <returns></returns>
 protected abstract Yw_SubjectContent GetContent(
     QuestionInputModel sub,
     SubjectBll bll,
     int currentUser,
     Yw_SubjectContent content);
Exemple #22
0
 public void SaveSubject(Yw_SubjectContent content)
 {
     Service.Update(content);
 }
Exemple #23
0
 protected override QuestionInputModel ConvertToDerived2(Yw_SubjectContent content)
 {
     throw new NotImplementedException();
 }
Exemple #24
0
 public void UpdateContent(Yw_SubjectContent subjectEntity)
 {
     Service.Update(subjectEntity);
 }
        public static DtoSubjectContent Create(Yw_SubjectContent content, Yw_Subject subject)
        {
            Check.IfNull(content, nameof(content));
            Check.IfNull(subject, nameof(subject));

            DtoSubjectContent dto         = null;
            dynamic           contentObj  = null;
            UeditorType       optionType  = UeditorType.Text;
            SubjectTypeEnum   subjectType = (SubjectTypeEnum)content.Ysc_SubjectType;

            switch (subjectType)
            {
            case SubjectTypeEnum.择题:
                Yw_SubjectSelectContent select = content as Yw_SubjectSelectContent;
                contentObj = select.Ysc_Content_Obj;
                optionType = (UeditorType)contentObj.ContentType;
                AppendUrlIfIsImage(contentObj.Options, optionType);
                dto = new DtoSelectSubjectContent
                {
                    Random     = contentObj.Random,
                    Answer     = select.Ysc_Answer_Obj.Answers,
                    Options    = contentObj.Options,
                    OptionType = optionType,
                    Display    = contentObj.Display
                };
                break;

            case SubjectTypeEnum.判断题:
                Yw_TrueFalseContent trueFalse = content as Yw_TrueFalseContent;
                contentObj = trueFalse.Ysc_Content_Obj;
                dto        = new DtoTrueFalseSubjectContent
                {
                    Answer = trueFalse.Ysc_Answer_Obj.Answer
                };
                break;

            case SubjectTypeEnum.填空题:
                Yw_FillInBlankContent fillInBlank = content as Yw_FillInBlankContent;
                contentObj = fillInBlank.Ysc_Content_Obj;
                dto        = new DtoFillInBlankSubjectContent
                {
                    Answer = new
                    {
                        Perfect = fillInBlank.Ysc_Answer_Obj.Perfect,
                        Correct = fillInBlank.Ysc_Answer_Obj.Correct,
                        Other   = fillInBlank.Ysc_Answer_Obj.Other
                    }
                };
                break;

            case SubjectTypeEnum.择填空:
                MultipleChoiceFillInBlankContent multipleChoiceFillInBlank
                           = content as MultipleChoiceFillInBlankContent;
                contentObj = multipleChoiceFillInBlank.Ysc_Content_Obj;
                optionType = (UeditorType)contentObj.ContentType;
                AppendUrlIfIsImage(contentObj.SubjectOptions, optionType);
                AppendUrlIfIsImage(contentObj.SubjectGOptions, optionType);
                dto = new DtoSelectFillInBlankSubjectContent
                {
                    Answer = multipleChoiceFillInBlank.Ysc_Answer_Obj.Answers,
                    //Options = options,
                    OptionType = optionType
                };
                break;

            case SubjectTypeEnum.连线题:
                Yw_MatchContent match = content as Yw_MatchContent;
                contentObj = match.Ysc_Content_Obj;

                var leftOptionType = (UeditorType)contentObj.LeftOptionContentType;
                AppendUrlIfIsImage(contentObj.LeftOptions, leftOptionType);

                var rightOptionType = (UeditorType)contentObj.RightOptionContentType;
                AppendUrlIfIsImage(contentObj.RightOptions, rightOptionType);

                dto = new DtoMatchSubjectContent
                {
                    Answer          = match.Ysc_Answer_Obj.Answers,
                    LeftOptions     = contentObj.LeftOptions,
                    RightOptions    = contentObj.RightOptions,
                    LeftOptionType  = leftOptionType,
                    RightOptionType = rightOptionType
                };
                break;

            case SubjectTypeEnum.主观题:
                Yw_SubjectFreeContent free = content as Yw_SubjectFreeContent;
                contentObj = free.Ysc_Content_Obj;
                dto        = new DtoFreeSubjectContent
                {
                    Answer   = free.Ysc_Answer_Obj.Answer,
                    Standard = contentObj.ScoreRules
                };
                break;

            case SubjectTypeEnum.圈点批注标色:
                Yw_SubjectMarkContent mark = content as Yw_SubjectMarkContent;
                contentObj = mark.Ysc_Content_Obj;
                dto        = new DtoMarkSubjectContent
                {
                    Answer  = mark.Ysc_Answer_Obj.Answers,
                    Content = contentObj.Content,
                    Color   = mark.Ysc_Content_Obj.Color
                };
                break;

            case SubjectTypeEnum.圈点批注断句:
                Yw_SubjectMark2Content mark2 = content as Yw_SubjectMark2Content;
                contentObj = mark2.Ysc_Content_Obj;
                dto        = new DtoMark2SubjectContent
                {
                    Answer  = mark2.Ysc_Answer_Obj.Answers,
                    Content = contentObj.Content,
                    Color   = contentObj.Color
                };
                break;

            default:
                dto        = new DtoDefaultSubjectContent();
                contentObj = new ExpandoObject();
                break;
            }
            dto.SubjectId   = content.Ysc_SubjectId;
            dto.KnowledgeId = GetKnowledgeId(subject);
            dto.Analysis    = content.Ysc_Explain;
            dto.Stem        = contentObj.Stem;
            dto.StemType    = (UeditorType)contentObj.StemType;
            dto.SubjectType = subjectType;

            return(dto);
        }
Exemple #26
0
        public static ReportVm Create(Yw_SubjectContent content, StudentAnswerBase studentAnswer, Yw_Subject subject)
        {
            DtoSubjectContent subjectContent = SubjectContentDtoBuilder.Create(content, subject);

            ReportVm        vm          = null;
            SubjectTypeEnum subjectType = (SubjectTypeEnum)studentAnswer.Type;

            switch (subjectType)
            {    //选择、选择填空、连线
            case SubjectTypeEnum.择题:
                StuSelectAnswer         selectAnswer  = studentAnswer as StuSelectAnswer;
                DtoSelectSubjectContent selectContent = subjectContent as DtoSelectSubjectContent;
                vm = new MultipleChoiceReportVm
                {
                    SubjectId   = selectAnswer.SubjectId,
                    Stem        = selectContent.Stem,
                    StemType    = (int)selectContent.StemType,
                    Answer      = selectContent.Answer,
                    Options     = selectContent.Options.OrderBy(s => Array.IndexOf(selectAnswer.OptionSequences.ToArray(), s.Key)).ToList(),
                    OptionType  = (int)selectContent.OptionType,
                    SubjectType = (int)selectContent.SubjectType,
                    Analysis    = selectContent.Analysis,

                    StudentAnswer = selectAnswer.Answers,
                    ResultStars   = selectAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.判断题:
                StuTrueFalseAnswer         trueFalseAns = studentAnswer as StuTrueFalseAnswer;
                DtoTrueFalseSubjectContent trueFalseCon = subjectContent as DtoTrueFalseSubjectContent;
                vm = new TrueFalseReportVm
                {
                    SubjectId   = trueFalseAns.SubjectId,
                    Stem        = trueFalseCon.Stem,
                    StemType    = (int)trueFalseCon.StemType,
                    Answer      = trueFalseCon.Answer,
                    SubjectType = (int)trueFalseCon.SubjectType,
                    Analysis    = trueFalseCon.Analysis,

                    StudentAnswer = trueFalseAns.Answer,
                    ResultStars   = trueFalseAns.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.填空题:
                StuBlankAnswer blankAnswer = studentAnswer as StuBlankAnswer;
                DtoFillInBlankSubjectContent fillInBlank = subjectContent as DtoFillInBlankSubjectContent;
                vm = new FillInBlankReportVm
                {
                    SubjectId   = blankAnswer.SubjectId,
                    Stem        = fillInBlank.Stem,
                    StemType    = (int)fillInBlank.StemType,
                    Answer      = fillInBlank.Answer,
                    SubjectType = (int)fillInBlank.SubjectType,
                    Analysis    = fillInBlank.Analysis,

                    StudentAnswer = blankAnswer.Answers,
                    ResultStars   = blankAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.择填空:
                StuSelectBlankAnswer selectBlankAnswer = studentAnswer as StuSelectBlankAnswer;

                DtoSelectFillInBlankSubjectContent multipleChoiceFillInBlank = subjectContent as DtoSelectFillInBlankSubjectContent;

                vm = new MultipleChoiceFillInBlankReportVm
                {
                    SubjectId   = selectBlankAnswer.SubjectId,
                    Stem        = multipleChoiceFillInBlank.Stem,
                    StemType    = (int)multipleChoiceFillInBlank.StemType,
                    Answer      = multipleChoiceFillInBlank.Answer,
                    Options     = multipleChoiceFillInBlank.Options.OrderBy(s => Array.IndexOf(selectBlankAnswer.OptionSequences.ToArray(), s.Key)).ToList(),
                    OptionType  = (int)multipleChoiceFillInBlank.OptionType,
                    SubjectType = (int)multipleChoiceFillInBlank.SubjectType,
                    Analysis    = multipleChoiceFillInBlank.Analysis,

                    StudentAnswer = selectBlankAnswer.Answers,
                    ResultStars   = selectBlankAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.连线题:
                StuMatchAnswer matchAnswer = studentAnswer as StuMatchAnswer;

                DtoMatchSubjectContent match = subjectContent as DtoMatchSubjectContent;

                vm = new MatchReportVm
                {
                    SubjectId       = matchAnswer.SubjectId,
                    Stem            = match.Stem,
                    StemType        = (int)match.StemType,
                    Answer          = match.Answer,
                    SubjectType     = (int)match.SubjectType,
                    LeftOptions     = match.LeftOptions.OrderBy(s => Array.IndexOf(matchAnswer.LeftOptionSequences.ToArray(), s.Key)).ToList(),
                    RightOptions    = match.RightOptions.OrderBy(s => Array.IndexOf(matchAnswer.RightOptionSequences.ToArray(), s.Key)).ToList(),
                    LeftOptionType  = (int)match.LeftOptionType,
                    RightOptionType = (int)match.RightOptionType,
                    Analysis        = match.Analysis,

                    StudentAnswer = matchAnswer.Answers,
                    ResultStars   = matchAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.主观题:
                StuFreeAnswer         freeAnswer = studentAnswer as StuFreeAnswer;
                DtoFreeSubjectContent free       = subjectContent as DtoFreeSubjectContent;

                vm = new FreeReportVm
                {
                    SubjectId   = freeAnswer.SubjectId,
                    Stem        = free.Stem,
                    StemType    = (int)free.StemType,
                    Answer      = free.Answer,
                    SubjectType = (int)free.SubjectType,
                    Analysis    = free.Analysis,
                    Standard    = free.Standard,

                    StudentAnswer = freeAnswer.Answer,
                    ResultStars   = freeAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.圈点批注标色:
                StuMarkColorAnswer    markColorAnswer = studentAnswer as StuMarkColorAnswer;
                DtoMarkSubjectContent mark            = subjectContent as DtoMarkSubjectContent;

                vm = new MarkReportVm
                {
                    SubjectId   = markColorAnswer.SubjectId,
                    Stem        = mark.Stem,
                    StemType    = (int)mark.StemType,
                    Answer      = mark.Answer,
                    SubjectType = (int)mark.SubjectType,
                    Analysis    = mark.Analysis,
                    Content     = mark.Content,
                    Color       = mark.Color,

                    StudentAnswer = markColorAnswer.Answers,
                    ResultStars   = markColorAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            case SubjectTypeEnum.圈点批注断句:
                StuMarkCutAnswer       markCutAnswer = studentAnswer as StuMarkCutAnswer;
                DtoMark2SubjectContent mark2         = subjectContent as DtoMark2SubjectContent;

                vm = new Mark2ReportVm
                {
                    SubjectId   = markCutAnswer.SubjectId,
                    Stem        = mark2.Stem,
                    StemType    = (int)mark2.StemType,
                    Answer      = mark2.Answer,
                    SubjectType = (int)mark2.SubjectType,
                    Analysis    = mark2.Analysis,
                    Content     = mark2.Content,
                    Color       = mark2.Color,

                    StudentAnswer = markCutAnswer.Answers,
                    ResultStars   = markCutAnswer.ResultStars,
                    Difficulty    = subject.Ysj_Difficulty
                };
                break;

            default:
                break;
            }
            return(vm);
        }
        protected override Yw_SubjectContent GetContent(
            QuestionInputModel sub,
            SubjectBll bll,
            int currentUser,
            Yw_SubjectContent content)
        {
            MultipleChoiceFillInBlank        subject       = sub as MultipleChoiceFillInBlank;
            MultipleChoiceFillInBlankContent selectContent = null;

            if (content == null)
            {
                selectContent = new MultipleChoiceFillInBlankContent();
                selectContent.Ysc_CreateTime  = DateTime.Now;
                selectContent.Ysc_Creator     = currentUser;
                selectContent.Ysc_SubjectType = subject.SubjectType;
            }
            else
            {
                selectContent = content as MultipleChoiceFillInBlankContent;
            }
            selectContent.Ysc_Editor  = currentUser;
            selectContent.Ysc_Explain = subject.Explain;
            List <int[]> anses = new List <int[]>();

            if (subject.Options != null)
            {
                for (int i = 0; i < subject.Options.Count; i++)
                {
                    int[] ds = new int[2] {
                        i, i
                    };
                    anses.Add(ds);
                }
            }
            selectContent.Ysc_Answer_Obj = new MultipleChoiceFillInBlankAnswerObj
            {
                Answers = anses
            };

            //答案的选项
            List <SubjectOption> subjectOptions = new List <SubjectOption>();

            if (subject.Options != null)
            {
                for (int i = 0; i < subject.Options.Count; i++)
                {
                    subjectOptions.Add(new SubjectOption
                    {
                        Key  = i,
                        Text = UeditorContentFactory.FetchUrl(subject.Options[i],
                                                              subject.ContentType)
                    });
                }
            }

            //干扰项
            List <SubjectOption> subjectGOptions = new List <SubjectOption>();

            if (subject.Goptions != null)
            {
                for (int i = 0; i < subject.Goptions.Count; i++)
                {
                    subjectGOptions.Add(new SubjectOption
                    {
                        Key  = i + 100,//干扰项的key设置值
                        Text = UeditorContentFactory.FetchUrl(subject.Goptions[i],
                                                              subject.ContentType)
                    });
                }
            }
            selectContent.Ysc_Content_Obj = new MultipleChoiceFillInBlankContentObj
            {
                Stem            = UeditorContentFactory.Blank(subject.Name),
                ContentType     = (int)subject.ContentType,
                SubjectOptions  = subjectOptions,
                SubjectGOptions = subjectGOptions,
                //GPositions = gps
            };

            selectContent.Ysc_UpdateTime = DateTime.Now;

            return(selectContent);
        }
 protected abstract QuestionInputModel ConvertToDerived2(
     Yw_SubjectContent content);
Exemple #29
0
        public int SaveSubject(
            Action <Yw_Subject> saveSubject, Yw_Subject subject,
            Action <Yw_SubjectContent> saveContent, Yw_SubjectContent content,
            Action <Yw_SubjectKnowledge> saveKnowledge, Yw_SubjectKnowledge knowledge,
            IEnumerable <Yw_SubjectIndex> keywordsToAdd, IEnumerable <int> keywordIdsToDelete,
            IEnumerable <Yw_SubjectKnowledge> knowledgesToAdd,
            IEnumerable <int> idsOfknowledgeToDelete,
            Yw_SubjectProcess process,
            FormSubmitButton button)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    Check.IfNull(saveSubject, nameof(saveSubject));
                    Check.IfNull(saveContent, nameof(saveContent));
                    Check.IfNull(saveKnowledge, nameof(saveKnowledge));

                    //题目
                    saveSubject(subject);

                    //题目的内容
                    content.Ysc_SubjectId = subject.Ysj_Id;
                    saveContent(content);

                    //主知识点
                    if (knowledge != null)
                    {
                        knowledge.Ysw_SubjectId = subject.Ysj_Id;
                        saveKnowledge(knowledge);
                    }

                    //关键词
                    if (keywordsToAdd != null)
                    {
                        for (int i = 0; i < keywordsToAdd.Count(); i++)
                        {
                            var k = keywordsToAdd.ElementAt(i);
                            k.Ysi_SubjectId = subject.Ysj_Id;
                        }
                    }
                    InsertKeywords(keywordsToAdd);
                    DeleteKeywords(keywordIdsToDelete);

                    //次级知识点
                    if (knowledgesToAdd != null)
                    {
                        for (int i = 0; i < knowledgesToAdd.Count(); i++)
                        {
                            var k = knowledgesToAdd.ElementAt(i);
                            k.Ysw_SubjectId = subject.Ysj_Id;
                        }
                    }
                    InsertSecondaryKnowledges(knowledgesToAdd);
                    DeleteSecondaryKnowledges(idsOfknowledgeToDelete);

                    //如果是提交操作,进入审批流程
                    if (button == FormSubmitButton.Submit)
                    {
                        process.Ysp_SubjectId = subject.Ysj_Id;
                        MoveToNext(process);
                    }

                    scope.Complete();
                    return(subject.Ysj_Id);
                }
                catch
                {
                    RollbackTran();
                    throw;
                }
            }
        }
        protected int SaveSubject(QuestionInputModel subject)
        {
            SubjectBll bll = new SubjectBll();

            //题目信息
            Yw_Subject          subjectEntity     = null;
            Action <Yw_Subject> saveSubjectMethod =
                SubjectFetcher.Fetch(subject, bll, CurrentUserID, out subjectEntity);

            //题目内容
            Yw_SubjectContent          content           = null;
            ContentFetcher             fetcher           = GetContentFetcher();
            Action <Yw_SubjectContent> saveContentMethod = fetcher.Fetch(
                subject,
                bll,
                CurrentUserID,
                out content);

            //要删除的关键词
            IList <int> keywordIdsToDelete = null;
            //要添加的关键词
            IList <Yw_SubjectIndex> keywordsToAdd = KeywordFetcher.Fetch(
                subject,
                bll,
                CurrentUserID,
                out keywordIdsToDelete);

            //主知识点
            Yw_SubjectKnowledge          mainKnowledgeEntity = null;
            Action <Yw_SubjectKnowledge> saveKnowledgeMethod = MainKnowledgeFetcher.Fetch(
                subject,
                bll,
                CurrentUserID,
                out mainKnowledgeEntity);

            //次级知识点
            //需要删除的次级知识点
            IEnumerable <int> idsOfknowledgeToDelete = null;
            //需要添加的次级知识点
            IEnumerable <Yw_SubjectKnowledge> knowledgesToAdd =
                SecondaryKnowledgeFetcher.Fetch(
                    subject,
                    bll,
                    CurrentUserID,
                    out idsOfknowledgeToDelete);

            Yw_SubjectProcess process = null;

            if (subject.Button == FormSubmitButton.Submit)
            {
                process = bll.GetNextProcess(
                    subject.Id,
                    CurrentUserID,
                    subject.NextStatus,
                    SubjectActionEnum.提交);
                subjectEntity.Ysj_Status = process.Ysp_Status;
            }

            return(bll.SaveSubject(saveSubjectMethod, subjectEntity,
                                   saveContentMethod, content,
                                   saveKnowledgeMethod, mainKnowledgeEntity,
                                   keywordsToAdd, keywordIdsToDelete,
                                   knowledgesToAdd, idsOfknowledgeToDelete,
                                   process, subject.Button));
        }