Example #1
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));
        }
Example #2
0
        //[HttpGet]
        //public IActionResult RabbitMqFanout()
        //{
        //    try
        //    {
        //        var bus = Communication.MQ.Client.CreateConnection();
        //        var advancedBus = bus.Advanced;
        //        if (advancedBus.IsConnected)
        //        {

        //            var queueName = "hzl";
        //            //var queue = advancedBus.QueueDeclare(queueName);

        //            ////获取员工的审批中待审批的数量 和 我的绩效中待处理的绩效
        //            //advancedBus.Publish(EasyNetQ.Topology.Exchange.GetDefault(), queue.Name, false, new EasyNetQ.Message<ApprovalNotificationDto>(new ApprovalNotificationDto
        //            //{
        //            //    MyApprovalCount = 1,
        //            //    MyPerformanceCount = 20
        //            //}));

        //            var exchange = advancedBus.ExchangeDeclare("HZLExchange", EasyNetQ.Topology.ExchangeType.Fanout);
        //            var queue1 = advancedBus.QueueDeclare("hzl1");
        //            var queue2 = advancedBus.QueueDeclare("hzl2");
        //            advancedBus.Bind(exchange, queue1, queue1.Name);
        //            advancedBus.Bind(exchange, queue2, queue2.Name);
        //            advancedBus.Publish(exchange, "", false, new EasyNetQ.Message<ApprovalNotificationDto>(new ApprovalNotificationDto
        //            {
        //                MyApprovalCount = 10,
        //                MyPerformanceCount = 11
        //            }));


        //        }
        //        bus.Dispose();
        //    }
        //    catch (Exception ex)
        //    {

        //    }
        //    return Success();
        //}
        #endregion



        /// <summary>
        /// 获取问题的依赖描述
        /// </summary>
        /// <param name="questions">问题集合</param>
        /// <param name="answers">答案项集合</param>
        /// <param name="targetQuestion">目标问题</param>
        /// <returns></returns>
        private string GetDependDescription(List <QuestionnaireQuestionModel> questions, List <QuestionnaireAnswerModel> answers, QuestionnaireQuestionModel targetQuestion)
        {
            if (!targetQuestion.IsDepend)
            {
                return(null);
            }
            if (answers == null)
            {
                return(null);
            }
            var dependQuestionModel = questions.FirstOrDefault(a => a.QuestionGuid == targetQuestion.DependQuestion);
            var dependAnswerModel   = answers.FirstOrDefault(a => a.AnswerGuid == targetQuestion.DependAnswer);

            return($"*依赖于第{dependQuestionModel.Sort}题的第{dependAnswerModel?.Sort}个选项,当题目{dependQuestionModel.Sort}选择[{dependAnswerModel?.AnswerLabel}]时,此题才显示。");
        }
        /// <summary>
        /// 给返回对象赋值
        /// </summary>
        /// <param name="questionnaireQuestionResponse"></param>
        /// <param name="i"></param>
        /// <param name="qestionnaireQestion"></param>
        /// <returns></returns>
        private static async Task Assignment(GetQuestionnaireQuestionResponseDto questionnaireQuestionResponse, int i, QuestionnaireQuestionModel qestionnaireQestion, QuestionnaireResultModel questionnaireResultModel = null)
        {
            questionnaireQuestionResponse.QuestionnaireQuestionDto = new GetQuestionnaireQuestionDto
            {
                QuestionGuid      = qestionnaireQestion.QuestionGuid,
                QuestionNumber    = i,
                QuestionnaireGuid = qestionnaireQestion.QuestionnaireGuid,
                QuestionName      = qestionnaireQestion.QuestionName,
                QuestionType      = qestionnaireQestion.QuestionType,
                Unit       = qestionnaireQestion.Unit,
                PromptText = qestionnaireQestion.PromptText
            };
            //查找答案列表
            questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionnaireAnswerDtoList = await new QuestionnaireAnswerBiz().GetQuestionnaireAnswerModelAsync(questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionnaireGuid, questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionGuid);
            ////获取问卷指定问题
            //var nextQestionnaireQestion = await new QestionnaireQestionBiz().AppointQuestionnaireQuestionModelAsync(qestionnaireQestion.QuestionnaireGuid, i + 1);
            ////若下一题不为空
            //if (nextQestionnaireQestion != null)
            //{
            //    //下一题存在依赖
            //    if (nextQestionnaireQestion.IsDepend)
            //    {
            //        //如果下一题依赖的是当前题目,则需要遍历当前题目的选择项
            //        if (nextQestionnaireQestion.DependQuestion == questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionGuid)
            //        {
            //            questionnaireQuestionResponse.QuestionnaireQuestionDto.HasNext = true;
            //            questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionnaireAnswerDtoList.ForEach(a => a.HasNext = nextQestionnaireQestion.DependAnswer == a.AnswerGuid);
            //        }
            //        else//如果依赖的不是当前题目,则需要检测之前的答卷结果有没有选择被依赖的选择项
            //        {
            //            var theAnswer = await new QuestionnaireResultDetailBiz().AppointQuestionnaireResultDetailModelAsync(questionnaireResultModel.ResultGuid, nextQestionnaireQestion.QuestionGuid);
            //            if (theAnswer.AnswerGuids.Contains(nextQestionnaireQestion.DependAnswer))
            //            {
            //                questionnaireQuestionResponse.QuestionnaireQuestionDto.HasNext = true;
            //                questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionnaireAnswerDtoList.ForEach(a => a.HasNext = true);
            //            }
            //        }
            //    }
            //    else
            //    {
            //        questionnaireQuestionResponse.QuestionnaireQuestionDto.HasNext = true;
            //        questionnaireQuestionResponse.QuestionnaireQuestionDto.QuestionnaireAnswerDtoList.ForEach(a => a.HasNext = true);
            //    }

            //}
        }