Пример #1
0
        public async Task <IActionResult> RemoveQuestionnaireQuestionAsync(string questionGuid)
        {
            var questionBiz = new QuestionnaireQuestionBiz();
            var model       = await questionBiz.GetAsync(questionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.UserData, "未找到此问题"));
            }
            var questionnaireModel = await new QuestionnaireBiz().GetAsync(model.QuestionnaireGuid);

            if (questionnaireModel.IssuingStatus)
            {
                return(Failed(ErrorCode.UserData, "问卷已发放不能修改"));
            }
            var dependModels = await questionBiz.GetModelsByDependQuestionGuidAsync(model.QuestionGuid);

            if (dependModels.Any())
            {
                return(Failed(ErrorCode.UserData, $"该问题被第{string.Join("、", dependModels.OrderBy(a => a.Sort).Select(a => a.Sort))}题依赖,无法删除"));
            }
            var result = await questionBiz.RemoveQuestionAsync(model);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "移除问题失败"));
        }
Пример #2
0
        public async Task <IActionResult> ChangeQuestionSortAsync([FromBody] ChangeQuestionSortRequestDto requestDto)
        {
            var biz   = new QuestionnaireQuestionBiz();
            var model = await biz.GetAsync(requestDto.QuestionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.UserData, "未找到此问题"));
            }
            var newSort = requestDto.Sort;

            if (model.Sort == newSort)
            {
                return(Failed(ErrorCode.UserData, "问题序号未产生变化,请核对"));
            }
            if (model.IsDepend)
            {
                var dependQuestionModel = await biz.GetAsync(model.DependQuestion);

                if (dependQuestionModel == null)
                {
                    return(Failed(ErrorCode.UserData, "当前问题的依赖数据异常"));
                }
                if (newSort <= dependQuestionModel.Sort)
                {
                    return(Failed(ErrorCode.UserData, $"当前问题的序号不能先于其依赖问题[第{dependQuestionModel.Sort}题]"));
                }
            }
            //查询依赖当前问题的题目列表
            var dependModels = await biz.GetModelsByDependQuestionGuidAsync(model.QuestionGuid);

            if (dependModels.Any())
            {
                var minSortModel = dependModels.OrderBy(a => a.Sort).FirstOrDefault();
                if (minSortModel.Sort <= newSort)
                {
                    return(Failed(ErrorCode.UserData, $"第{minSortModel.Sort}题依赖当前题目,移动序号不能大于{minSortModel.Sort}"));
                }
            }
            // 一.其他问题为待变化问题顺次移动位置
            //  1.若向前移动,则原序号和新序号之间所有问题序号+1 (不包括待变化问题)
            //  2.若向后移动,则原序号和新序号之间所有问题序号-1 (不包括待变化问题)
            // 二.将待变化问题序号变为新序号
            var result = await biz.ChangeQuestionSortAsync(model, newSort, UserID);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "问题变化序号失败"));
        }
Пример #3
0
        public async Task <IActionResult> CreateQuestionnaireQuestionAsync([FromBody] CreateQuestionnaireQuestionRequestDto requestDto)
        {
            QuestionnaireQuestionModel model = null;
            var answers     = new List <QuestionnaireAnswerModel>();
            var questionBiz = new QuestionnaireQuestionBiz();
            var cancelDependQuestionModels = new List <QuestionnaireQuestionModel>(); //由于问题类型变化或答案选项被删除,需要删除依赖关系的问题列表
            var isCreate = true;                                                      //是否是创建问题

            //新增
            if (string.IsNullOrWhiteSpace(requestDto.QuestionGuid))
            {
                model = new QuestionnaireQuestionModel
                {
                    QuestionGuid  = Guid.NewGuid().ToString("N"),
                    CreatedBy     = UserID,
                    LastUpdatedBy = UserID
                };
            }
            else//编辑
            {
                model = await questionBiz.GetAsync(requestDto.QuestionGuid);

                if (model == null)
                {
                    return(Failed(ErrorCode.UserData, $"未找到编辑的问题"));
                }
                if (model.QuestionnaireGuid != requestDto.QuestionnaireGuid)
                {
                    return(Failed(ErrorCode.UserData, $"传入的问卷guid和待编辑问题的问卷guid不一致"));
                }

                //由于问题类型变化或答案选项被删除,需要删除依赖关系的问题列表
                if (model.QuestionType != requestDto.QuestionType.ToString())
                {
                    //获取依赖此问题的问题列表
                    var dependonQuestionModel = await questionBiz.GetModelsByDependQuestionGuidAsync(model.QuestionGuid);

                    dependonQuestionModel.ForEach(a =>
                    {
                        a.DependAnswer   = string.Empty;
                        a.DependQuestion = string.Empty;
                        a.IsDepend       = false;
                    });
                    cancelDependQuestionModels.AddRange(dependonQuestionModel);
                }
                else if (model.QuestionType == QuestionnaireQuestionTypeEnum.Bool.ToString() || model.QuestionType == QuestionnaireQuestionTypeEnum.Enum.ToString())
                {
                    var answerModels = await new QuestionnaireAnswerBiz().GetModelsByQuestionGuidAsync(model.QuestionGuid);
                    //获取被删除的选项id集合
                    var exceptAnswerIds = answerModels.Select(a => a.AnswerGuid)
                                          .Except(requestDto.Answers
                                                  .Where(a => !string.IsNullOrWhiteSpace(a.AnswerGuid))
                                                  .Select(a => a.AnswerGuid));

                    //获取依赖此问题的问题列表
                    var dependonQuestionModel = await questionBiz.GetModelsByDependQuestionGuidAsync(model.QuestionGuid);

                    //获取依赖此问题中被删除选项的问题列表,这些问题的对此问题的依赖将被取消
                    var cancelDependQuestionModelList = dependonQuestionModel.Join(exceptAnswerIds, d => d.DependAnswer, a => a, (d, a) => d).ToList();
                    cancelDependQuestionModelList.ForEach(a =>
                    {
                        a.DependAnswer   = string.Empty;
                        a.DependQuestion = string.Empty;
                        a.IsDepend       = false;
                    });
                    cancelDependQuestionModels.AddRange(cancelDependQuestionModelList);
                }
                model.LastUpdatedBy   = UserID;
                model.LastUpdatedDate = DateTime.Now;
                isCreate = false;
            }

            model.QuestionnaireGuid = requestDto.QuestionnaireGuid;
            model.QuestionName      = requestDto.QuestionName;
            model.QuestionType      = requestDto.QuestionType.ToString();
            model.Unit       = requestDto.Unit;
            model.Sort       = requestDto.Sort;//判断有无重复的sort
            model.PromptText = requestDto.PromptText;
            if (!string.IsNullOrWhiteSpace(requestDto.DependAnswer))
            {
                var dependAnswerModel = await new QuestionnaireAnswerBiz().GetAsync(requestDto.DependAnswer);
                if (dependAnswerModel == null)
                {
                    return(Failed(ErrorCode.UserData, $"依赖的答案未找到"));
                }
                model.DependAnswer   = requestDto.DependAnswer;
                model.DependQuestion = dependAnswerModel.QuestionGuid;
                model.IsDepend       = true;
            }
            else
            {
                model.DependAnswer   = string.Empty;
                model.DependQuestion = string.Empty;
                model.IsDepend       = false;
            }
            if (requestDto.Answers != null)
            {
                answers = requestDto.Answers.Select((item, index) => new QuestionnaireAnswerModel
                {
                    AnswerGuid        = Guid.NewGuid().ToString("N"),
                    QuestionnaireGuid = model.QuestionnaireGuid,
                    QuestionGuid      = model.QuestionGuid,
                    AnswerLabel       = item.AnswerLabel,
                    IsDefault         = item.IsDefault,
                    Sort          = index + 1,
                    CreatedBy     = UserID,
                    LastUpdatedBy = UserID
                }).ToList();
            }

            var result = await questionBiz.CreateQuestionnaireQuestionAsync(model, answers, isCreate, cancelDependQuestionModels);

            if (!result)
            {
                return(Failed(ErrorCode.UserData, $"保存问题失败"));
            }

            var dependQuestions = await questionBiz.GetQuestionWithDependAsync(requestDto.QuestionnaireGuid);

            var questionnaireModel = await new QuestionnaireBiz().GetAsync(requestDto.QuestionnaireGuid);

            if (questionnaireModel.HasDepend != dependQuestions.Any())
            {
                questionnaireModel.HasDepend = dependQuestions.Any();
                await new QuestionnaireBiz().UpdateAsync(questionnaireModel);
            }


            #region 将提交的数据返回(携带问题guid)
            var response = new CreateQuestionnaireQuestionResponseDto
            {
                QuestionnaireGuid = model.QuestionnaireGuid,
                QuestionGuid      = model.QuestionGuid,
                QuestionName      = model.QuestionName,
                QuestionType      = requestDto.QuestionType,
                IsDepend          = model.IsDepend,
                DependAnswer      = model.DependAnswer,
                Sort    = model.Sort,
                Answers = requestDto.Answers
            };
            if (model.IsDepend)
            {
                var dependAnswerModel   = await new QuestionnaireAnswerBiz().GetAsync(model.DependAnswer);
                var dependQuestionModel = await questionBiz.GetAsync(model.DependQuestion);

                response.DependDescription = $"*依赖于第{dependQuestionModel?.Sort}题的第{dependAnswerModel?.Sort}个选项,当题目{dependQuestionModel?.Sort}选择[{dependAnswerModel?.AnswerLabel}]时,此题才显示。";
            }
            #endregion
            return(Success(response));
        }