/// <summary>
        /// 查询问卷列表
        /// </summary>
        public string GetQuestionnairesData()
        {
            var form             = Request("form").DeserializeJSONTo <QuestionnairesQueryEntity>();
            var questionnaireBLL = new QuestionnaireBLL(this.CurrentUserInfo);

            string content = string.Empty;

            string QuestionnaireName = FormatParamValue(form.QuestionnaireName);
            //string Title = FormatParamValue(form.Title);
            //string DateBegin = FormatParamValue(form.DateBegin);
            //string DateEnd = FormatParamValue(form.DateEnd);
            int pageIndex = Utils.GetIntVal(FormatParamValue(Request("page"))) - 1;

            QuestionnaireEntity queryEntity = new QuestionnaireEntity();

            queryEntity.QuestionnaireName = QuestionnaireName;
            //if (this.CurrentUserInfo.CurrentUser.User_Name.ToLower() == "admin")
            //{
            //    queryEntity.CreateBy = this.CurrentUserInfo.CurrentUser.User_Name.ToLower();
            //}
            //else
            //{
            //    queryEntity.CreateBy = this.CurrentUserInfo.UserID;
            //}

            var data           = questionnaireBLL.GetWebQuestionnaires(queryEntity, pageIndex, PageSize);
            var dataTotalCount = questionnaireBLL.GetWebQuestionnairesCount(queryEntity);

            content = string.Format("{{\"totalCount\":{1},\"topics\":{0}}}",
                                    data.ToJSON(),
                                    dataTotalCount);

            return(content);
        }
예제 #2
0
        /// <summary>
        /// 取得問卷資料
        /// </summary>
        /// <param name="uid">問卷識別碼</param>
        /// <returns>問卷資料</returns>
        public QuestionnaireEntity GetQuestionnaire(string uid)
        {
            QuestionnaireEntity questionEntity = null;

            if (String.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException("uid");
            }


            QuestionnaireDO questionDO = new QuestionnaireDAO().GetQuestionnaire(uid);

            if (questionDO == null)
            {
                var ex = new InvalidOperationException($"questionnaireDO not found");
                ex.Data["uid"] = uid;
                throw ex;
            }

            IEnumerable <QuestDefineEntity> questDefineEntities = GetQuestDefineEntities(questionDO.Uid);

            if ((questDefineEntities == null) ||
                (questDefineEntities.Count() == 0))
            {
                var ex = new InvalidOperationException($"questDefineEntities not found");
                ex.Data["questionDO.Uid"] = questionDO.Uid;
                throw ex;
            }

            questionEntity = new QuestionnaireEntity()
            {
                Uid               = questionDO.Uid,
                QuestId           = questionDO.QuestId,
                Version           = questionDO.Version,
                Kind              = questionDO.Kind,
                Name              = questionDO.Name,
                Memo              = questionDO.Memo,
                Ondate            = questionDO.Ondate,
                Offdate           = questionDO.Offdate,
                NeedScore         = questionDO.NeedScore,
                QuestScore        = questionDO.QuestScore,
                ScoreKind         = questionDO.ScoreKind,
                HeadBackgroundImg = questionDO.HeadBackgroundImg,
                HeadDescription   = questionDO.HeadDescription,
                FooterDescription = questionDO.FooterDescription,
                CreateUserId      = questionDO.CreateUserId,
                CreateTime        = questionDO.CreateTime,
                ModifyUserId      = questionDO.ModifyUserId,
                ModifyTime        = questionDO.ModifyTime,

                QuestDefineEntities = questDefineEntities,
            };

            return(questionEntity);
        }
예제 #3
0
        /// <summary>
        /// 保存用户考题
        /// 返回
        /// </summary>
        /// <param name="pSurveyTestId"></param>
        /// <param name="pAnswerList"></param>
        /// <returns></returns>
        public int SaveAnswerSheet(string pSurveyTestId, string pUserId, List <AnswerItem> pAnswerList, out decimal lastScore)
        {
            int     isPassed        = 0;
            decimal score           = 0;
            decimal outSocre        = 0;
            int     singleIsCorrect = -1;

            MLAnswerSheetBLL sheetBll      = new MLAnswerSheetBLL(_loggingSessionInfo);
            string           answerSheetId = Guid.NewGuid().ToString().Replace("-", "");

            foreach (var item in pAnswerList)
            {
                //保存答题
                singleIsCorrect = SaveAnswerSheetItem(answerSheetId, item.QuestionId, item.Answer, out outSocre);
                if (singleIsCorrect == 1)
                {
                    score += outSocre;
                }
            }

            //判断是否通过
            //条件:score>=PassScore
            QuestionnaireBLL    quesBll    = new QuestionnaireBLL(_loggingSessionInfo);
            QuestionnaireEntity quesEntity = quesBll.GetByID(pSurveyTestId);

            if (quesEntity != null)
            {
                if (score >= quesEntity.PassScore)
                {
                    isPassed = 1;
                }
                else
                {
                    isPassed = 0;
                }
            }

            lastScore = score;

            //保存考卷
            MLAnswerSheetEntity sheetEntity = new MLAnswerSheetEntity()
            {
                AnswerSheetId   = answerSheetId,
                AnswerTime      = DateTime.Now,
                CustomerID      = _loggingSessionInfo.CurrentUser.customer_id,
                IsDelete        = 0,
                IsPassed        = isPassed,
                QuestionnaireID = pSurveyTestId,
                Score           = score,
                UserId          = pUserId
            };

            sheetBll.Create(sheetEntity);
            return(isPassed);
        }
        public ActionResult QuestionnaireResult()
        {
            var questionnaireResult = new QuestionnaireResult(Request.Form,
                                                              creatorOfInctances.GetInstanceQuestionnaireQuery(),
                                                              creatorOfInctances.GetInstanceWebBlogRatingRepository());
            var userMark = questionnaireResult.UserEvaluation();

            var questionnaireEntity = new QuestionnaireEntity {
                Name = Request.Form["personeName"], Mark = userMark
            };

            return(View(questionnaireEntity));
        }
예제 #5
0
        /// <summary>
        /// 取得有效的問卷資料
        /// </summary>
        /// <param name="id">問卷編號</param>
        /// <returns></returns>
        public Questionnaire GetActiveQuestionnaire(string id)
        {
            QuestionnaireDAO questionnaireDAO = new QuestionnaireDAO();
            QuestionnaireDO  questionnaireDO  = questionnaireDAO.Read(id);
            //DO傳給Entity
            QuestionnaireEntity questionnaireEntity = new QuestionnaireEntity();

            questionnaireEntity.MappingDO(questionnaireDO);
            //Entity傳給DTO
            Questionnaire questionnaire = new Questionnaire(questionnaireEntity);

            return(questionnaire);
        }
예제 #6
0
 public Questionnaire(QuestionnaireEntity questionnaireDO)
 {
     QuestId           = questionnaireDO.QuestId;
     Version           = questionnaireDO.Version;
     Kind              = questionnaireDO.Kind;
     Name              = questionnaireDO.Name;
     Ondate            = questionnaireDO.Ondate;
     Offdate           = questionnaireDO.Offdate;
     NeedScore         = questionnaireDO.NeedScore;
     QuestScore        = questionnaireDO.QuestScore;
     ScoreKind         = questionnaireDO.ScoreKind;
     HeadBackgroundImg = questionnaireDO.HeadBackgroundImg;
     HeadDescription   = questionnaireDO.HeadDescription;
     FooterDescription = questionnaireDO.FooterDescription;
 }
예제 #7
0
        /// <summary>
        /// 驗證問卷填答規則
        /// </summary>
        /// <param name="answer">問卷填答資料</param>
        /// <param name="questionEntity">問卷資料</param>
        /// <returns>驗證結果</returns>
        public Dictionary <string, string> ValidateRule(QuestionnaireAnswerEntity answer,
                                                        QuestionnaireEntity questionEntity)
        {
            Dictionary <string, string>      validateResult   = new Dictionary <string, string>();
            IEnumerable <AnswerDetailEntity> answerDetailList = null;
            string errorMsg = null;


            foreach (QuestDefineEntity questDefineEntity in questionEntity.QuestDefineEntities)
            {
                errorMsg         = null;
                answerDetailList = null;

                answerDetailList = answer.AnswerDetailEntities.
                                   Where(x => x.QuestionId == questDefineEntity.QuestionId);


                if (!ValidateNeedAnswer(questDefineEntity, answerDetailList, answer.AnswerDetailEntities))
                {
                    errorMsg = $"此題必須填答!";
                }
                else if (!ValidateMinMultipleAnswers(questDefineEntity, answerDetailList))
                {
                    errorMsg = $"此題至少須勾選{questDefineEntity.MinMultipleAnswers}個項目!";
                }
                else if (!ValidateMaxMultipleAnswers(questDefineEntity, answerDetailList))
                {
                    errorMsg = $"此題至多僅能勾選{questDefineEntity.MaxMultipleAnswers}個項目!";
                }
                else if (!ValidateSingleAnswerCondition(questDefineEntity, answerDetailList,
                                                        answer.AnswerDetailEntities))
                {
                    errorMsg = $"此題僅能勾選1個項目!";
                }
                else if (!ValidateOtherAnswer(questDefineEntity, answerDetailList))
                {
                    errorMsg = $"請輸入其他說明文字!";
                }

                if (!String.IsNullOrEmpty(errorMsg))
                {
                    validateResult.Add(questDefineEntity.QuestionId, errorMsg);
                }
            }

            return(validateResult);
        }
예제 #8
0
        /// <summary>
        /// Web列表获取
        /// </summary>
        /// <param name="Page">分页页码。从0开始</param>
        /// <param name="PageSize">每页的数量。未指定时默认为15</param>
        /// <returns></returns>
        public IList <QuestionnaireEntity> GetWebQuestionnaires(QuestionnaireEntity entity, int Page, int PageSize)
        {
            if (PageSize <= 0)
            {
                PageSize = 15;
            }

            IList <QuestionnaireEntity> list = new List <QuestionnaireEntity>();
            DataSet ds = new DataSet();

            ds = _currentDAO.GetWebQuestionnaires(entity, Page, PageSize);
            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                list = DataTableToObject.ConvertToList <QuestionnaireEntity>(ds.Tables[0]);
            }
            return(list);
        }
예제 #9
0
        /// <summary>
        /// 取得風險評估問卷資料
        /// </summary>
        /// <param name="questId">問卷編號</param>
        /// <param name="userId">用戶ID</param>
        /// <returns>風險評估問卷資料</returns>
        public RiskEvaQuestionnaireEntity GetRiskQuestionnaire(string questId, string userId)
        {
            RiskEvaQuestionnaireEntity result = null;

            if (String.IsNullOrEmpty(questId))
            {
                throw new ArgumentNullException("questId");
            }
            else if (String.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            RiskEvaluationDO riskEvaluationDO = new RiskEvaluationDAO().GetLatestRiskEvaluation(userId);

            bool canEvaluteRisk = CheckCanEvaluteRisk(riskEvaluationDO);

            if (!canEvaluteRisk)
            {
                var ex = new InvalidOperationException("Not can used risk evaluation");
                ex.Data["canEvaluteRisk"] = canEvaluteRisk;
                throw ex;
            }

            QuestionnaireEntity activeQuestionnaire = QuestService.GetActiveQuestionnaire(questId);

            if (activeQuestionnaire == null)
            {
                var ex = new InvalidOperationException("activeQuestionnaire not found");
                ex.Data["questId"] = questId;
                throw ex;
            }

            result = new RiskEvaQuestionnaireEntity()
            {
                QuestionnaireEntity = activeQuestionnaire,
            };

            return(result);
        }
예제 #10
0
 public void Update(QuestionnaireEntity pEntity, bool pIsUpdateNullField)
 {
     _currentDAO.Update(pEntity, pIsUpdateNullField);
 }
예제 #11
0
 /// <summary>
 /// 删除
 /// </summary>
 /// <param name="pEntity"></param>
 public void Delete(QuestionnaireEntity pEntity)
 {
     _currentDAO.Delete(pEntity);
 }
예제 #12
0
 /// <summary>
 /// 根据实体条件查询实体
 /// </summary>
 /// <param name="pQueryEntity">以实体形式传入的参数</param>
 /// <param name="pOrderBys">排序组合</param>
 /// <returns>符合条件的实体集</returns>
 public QuestionnaireEntity[] QueryByEntity(QuestionnaireEntity pQueryEntity, OrderBy[] pOrderBys)
 {
     return(_currentDAO.QueryByEntity(pQueryEntity, pOrderBys));
 }
        public void ValidateRule_When_OtherAnswer_Then_Fail()
        {
            //Arrange
            var answer = new QuestionnaireAnswerEntity()
            {
                AnswerDetailEntities = new List <AnswerDetailEntity>()
                {
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q1", AnswerCode = "A", OtherAnswer = "", Score = null,
                    },
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q2", AnswerCode = "A", OtherAnswer = "", Score = null,
                    },
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q3", AnswerCode = "A", OtherAnswer = "", Score = null,
                    },
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q3", AnswerCode = "E", OtherAnswer = "", Score = null,
                    },
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q4", AnswerCode = "A", OtherAnswer = "", Score = null,
                    },
                    new AnswerDetailEntity()
                    {
                        QuestionId = "Q5", AnswerCode = "A", OtherAnswer = "", Score = null,
                    },
                },
            };

            var question = new QuestionnaireEntity()
            {
                ScoreKind           = "",
                QuestScore          = null,
                NeedScore           = "N",
                QuestDefineEntities = new List <QuestDefineEntity>()
                {
                    new QuestDefineEntity()
                    {
                        Uid = Guid.Empty, QuestUid = Guid.Empty, QuestionId = "Q1", QuestionContent = "請輸入您的手機號碼(格式為0912345678,將作為活動通知使用)", NeedAnswer = "Y", AllowNaCondition = "", AnswerType = "F", MinMultipleAnswers = null, MaxMultipleAnswers = null, SingleAnswerCondition = "", CountScoreType = "", Memo = "", OrderSn = 10, CreateUserId = "", CreateTime = null, ModifyUserId = "", ModifyTime = null, AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = " ", AnswerContent = "旅遊行程(例如:來回機票、住宿券)", Memo = "", HaveOtherAnswer = "Y", NeedOtherAnswer = "Y", Score = null, OrderSn = 10,
                            },
                        }
                    },
                    new QuestDefineEntity()
                    {
                        Uid = Guid.Empty, QuestUid = Guid.Empty, QuestionId = "Q2", QuestionContent = "下列哪種活動贈品最吸引您參加活動?", NeedAnswer = "Y", AllowNaCondition = "", AnswerType = "M", MinMultipleAnswers = 1, MaxMultipleAnswers = null, SingleAnswerCondition = "", CountScoreType = "", Memo = "", OrderSn = 20, CreateUserId = "", CreateTime = null, ModifyUserId = "", ModifyTime = null, AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "A", AnswerContent = "3C產品(例如:手機、平板電腦、相機)", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 10,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "B", AnswerContent = "禮券(例如:知名百貨、量販店、便利商店禮券)", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 20,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "C", AnswerContent = "簡訊", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 30,
                            }
                        }
                    },
                    new QuestDefineEntity()
                    {
                        Uid = Guid.Empty, QuestUid = Guid.Empty, QuestionId = "Q3", QuestionContent = "您最喜歡透過下列何種方式收到行銷優惠資訊?", NeedAnswer = "Y", AllowNaCondition = "", AnswerType = "M", MinMultipleAnswers = 1, MaxMultipleAnswers = null, SingleAnswerCondition = "", CountScoreType = "", Memo = "", OrderSn = 30, CreateUserId = "", CreateTime = null, ModifyUserId = "", ModifyTime = null, AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "A", AnswerContent = "電子DM", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 10,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "B", AnswerContent = "實體DM", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 20,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "C", AnswerContent = "即時通訊軟體(例如:LINE、what’s app)", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 30,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "D", AnswerContent = "其他", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 40,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "E", AnswerContent = "臨櫃", Memo = "", HaveOtherAnswer = "Y", NeedOtherAnswer = "Y", Score = null, OrderSn = 50,
                            },
                        }
                    },
                    new QuestDefineEntity()
                    {
                        Uid = Guid.Empty, QuestUid = Guid.Empty, QuestionId = "Q4", QuestionContent = "下列哪一項通路服務是您最常使用的?(一個月至少使用3次以上)", NeedAnswer = "Y", AllowNaCondition = "", AnswerType = "S", MinMultipleAnswers = null, MaxMultipleAnswers = null, SingleAnswerCondition = "", CountScoreType = "", Memo = "", OrderSn = 40, CreateUserId = "", CreateTime = null, ModifyUserId = "", ModifyTime = null, AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "A", AnswerContent = "ATM", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 10,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "B", AnswerContent = "網站", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 20,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "C", AnswerContent = "行動APP", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 30,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "D", AnswerContent = "都沒有", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 40,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "E", AnswerContent = "1分", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 50,
                            },
                        }
                    },
                    new QuestDefineEntity()
                    {
                        Uid = Guid.Empty, QuestUid = Guid.Empty, QuestionId = "Q5", QuestionContent = "您對我們的服務滿意度1至5分是?", NeedAnswer = "Y", AllowNaCondition = "{\"Conditions\":[{\"QuestionId\": \"Q4\", \"AnswerCode\": [\"E\"]}]}", AnswerType = "S", MinMultipleAnswers = null, MaxMultipleAnswers = null, SingleAnswerCondition = "", CountScoreType = "", Memo = "", OrderSn = 50, CreateUserId = "", CreateTime = null, ModifyUserId = "", ModifyTime = null, AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "A", AnswerContent = "2分", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 10,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "B", AnswerContent = "3分", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 20,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "C", AnswerContent = "4分", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 30,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "D", AnswerContent = "5分", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 40,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "E", AnswerContent = "", Memo = "", HaveOtherAnswer = "N", NeedOtherAnswer = "N", Score = null, OrderSn = 50,
                            },
                        }
                    },


                    new QuestDefineEntity()
                    {
                        Uid = Guid.Parse("F9DD6938-2DBD-48AF-9D44-428DCB2AC5D6"), QuestionId = "Q001", CountScoreType = "2", NeedAnswer = "N", AnswerType = "S", MinMultipleAnswers = null, MaxMultipleAnswers = null, SingleAnswerCondition = "", AllowNaCondition = "", AnswerDefineEntities = new List <AnswerDefineEntity>()
                        {
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "1", Score = 1,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "2", Score = 2,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "3", Score = 3,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "4", Score = 4,
                            },
                            new AnswerDefineEntity()
                            {
                                AnswerCode = "5", Score = 5,
                            },
                        }
                    },
                }
            };


            Dictionary <string, string> expected = new Dictionary <string, string>()
            {
                { "Q3", "請輸入其他說明文字!" },
            };

            //Actual
            Dictionary <string, string> actual = new QuestionnaireService().ValidateRule(answer, question);


            //Assert
            CollectionAssert.AreEqual(expected, actual);
        }
예제 #14
0
 /// <summary>
 /// 创建一个新实例
 /// </summary>
 /// <param name="pEntity">实体实例</param>
 public void Create(QuestionnaireEntity pEntity)
 {
     _currentDAO.Create(pEntity);
 }
예제 #15
0
 /// <summary>
 /// 分页根据实体条件查询实体
 /// </summary>
 /// <param name="pQueryEntity">以实体形式传入的参数</param>
 /// <param name="pOrderBys">排序组合</param>
 /// <returns>符合条件的实体集</returns>
 public PagedQueryResult <QuestionnaireEntity> PagedQueryByEntity(QuestionnaireEntity pQueryEntity, OrderBy[] pOrderBys, int pPageSize, int pCurrentPageIndex)
 {
     return(_currentDAO.PagedQueryByEntity(pQueryEntity, pOrderBys, pPageSize, pCurrentPageIndex));
 }
예제 #16
0
 /// <summary>
 /// 更新
 /// </summary>
 /// <param name="pEntity">实体实例</param>
 public void Update(QuestionnaireEntity pEntity)
 {
     Update(pEntity, true);
 }
예제 #17
0
        /// <summary>
        /// 紀錄問卷填答資料至問卷答題主檔與答題明細
        /// </summary>
        /// <param name="questEntity">問卷資料</param>
        /// <param name="calculateResult">問卷得分與填答資料</param>
        /// <param name="userId">用戶ID</param>
        /// <returns>問卷答題資料</returns>
        private QuestionnaireAnswerDO SaveQuestionAnswer(QuestionnaireEntity questEntity,
                                                         CalculateScoreEntity calculateResult, string userId)
        {
            QuestionnaireAnswerDO questionnaireAnswerDO = null;

            if (questEntity == null)
            {
                throw new ArgumentNullException("questEntity");
            }
            else if (calculateResult == null)
            {
                throw new ArgumentNullException("calculateResult");
            }
            else if (String.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            DateTime currentTiem = DateTime.Now;

            using (TransactionScope scope = new TransactionScope())
            {
                questionnaireAnswerDO = new QuestionnaireAnswerDO()
                {
                    Uid           = Guid.NewGuid(),
                    QuestUid      = questEntity.Uid,
                    QuestAnswerId = currentTiem.ToString("yyMMddHHmmssfff"),
                    TesteeId      = userId,
                    QuestScore    = questEntity.QuestScore,
                    ActualScore   = calculateResult.ActualScore,
                    TesteeSource  = _testeeSource,
                    CreateUserId  = userId,
                    CreateTime    = currentTiem,
                    ModifyUserId  = null,
                    ModifyTime    = null,
                };

                IEnumerable <QuestionnaireAnswerDetailDO> questAnswerDetailList =
                    calculateResult.FullAnswerDetailList.Select(answerDetail =>
                                                                new QuestionnaireAnswerDetailDO()
                {
                    Uid          = Guid.NewGuid(),
                    AnswerUid    = questionnaireAnswerDO.Uid,
                    QuestionUid  = answerDetail.QuestionUid,
                    AnswerCode   = answerDetail.AnswerCode,
                    OtherAnswer  = answerDetail.OtherAnswer,
                    Score        = answerDetail.Score,
                    CreateUserId = userId,
                    CreateTime   = currentTiem,
                    ModifyUserId = null,
                    ModifyTime   = null,
                });

                new QuestionnaireAnswerDAO().Insert(questionnaireAnswerDO);
                new QuestionnaireAnswerDetailDAO().Insert(questAnswerDetailList);

                scope.Complete();
            }

            return(questionnaireAnswerDO);
        }
예제 #18
0
 /// <summary>
 /// 列表数量获取
 /// </summary>
 public int GetWebQuestionnairesCount(QuestionnaireEntity entity)
 {
     return(_currentDAO.GetWebQuestionnairesCount(entity));
 }
예제 #19
0
        /// <summary>
        /// 計算問卷填答得分
        /// </summary>
        /// <param name="answer">問卷填答資料</param>
        /// <returns>問卷填答評分結果</returns>
        public QuestionnaireResultEntity Calculate(QuestionnaireAnswerEntity answer)
        {
            QuestionnaireResultEntity questionResultEntity = null;
            QuestionnaireAnswerDO     questionAnswerDO     = null;

            if (answer == null)
            {
                throw new ArgumentNullException("沒有提供問卷填答資料");
            }

            QuestionnaireEntity questionEntity = GetQuestionnaire(answer.QuestUid);
            DateTime            currentTime    = DateTime.Now;

            if ((questionEntity == null) ||
                (questionEntity.Ondate >= currentTime) ||
                (questionEntity.Offdate != null) && (questionEntity.Offdate <= currentTime))
            {
                var ex = new InvalidOperationException("問卷資料不存在或沒有有效的問卷資料");
                ex.Data["QuestionUis"] = answer.QuestUid;
                throw ex;
            }


            Dictionary <string, string> validateResult = ValidateRule(answer, questionEntity);

            if (validateResult == null)
            {
                throw new InvalidOperationException("validateResult not found");
            }


            Dictionary <string, string> riskResult = null;
            string dialogMsg = null;


            if (validateResult.Count == 0)
            {
                CalculateScoreEntity calculateResult = CalculateScore(answer, questionEntity);

                if (calculateResult == null)
                {
                    throw new InvalidOperationException("calculateResult not found");
                }

                riskResult = calculateResult.FullAnswerDetailList.
                             Where(x => !String.IsNullOrEmpty(x.AnswerCode)).
                             GroupBy(x => x.QuestionId).
                             Select(group => new
                {
                    group.Key,
                    Value = String.Join(",", group.Select(item => item.AnswerCode))
                }).ToDictionary(x => x.Key, x => x.Value);

                if (riskResult == null)
                {
                    throw new InvalidOperationException("riskResult not found");
                }

                questionAnswerDO = SaveQuestionAnswer(questionEntity, calculateResult,
                                                      answer.UserId);

                if (questionAnswerDO == null)
                {
                    throw new InvalidOperationException("questionAnswerDO not found");
                }

                if (questionEntity.NeedScore != "Y")
                {
                    dialogMsg = "您的問卷己填答完畢,謝謝您的參與";
                }
            }


            questionResultEntity = new QuestionnaireResultEntity()
            {
                QuestionnaireEntity  = questionEntity,
                AnswerDetailEntities = answer.AnswerDetailEntities,
                ValidateFailInfo     = validateResult,
                RiskResult           = riskResult,
                QuestionnaireMessage = dialogMsg,
            };

            if (questionAnswerDO != null)
            {
                questionResultEntity.Uid           = questionAnswerDO.Uid;
                questionResultEntity.QuestUid      = questionAnswerDO.QuestUid;
                questionResultEntity.QuestAnswerId = questionAnswerDO.QuestAnswerId;
                questionResultEntity.TesteeId      = questionAnswerDO.TesteeId;
                questionResultEntity.QuestScore    = questionAnswerDO.QuestScore;
                questionResultEntity.ActualScore   = questionAnswerDO.ActualScore;
                questionResultEntity.TesteeSource  = questionAnswerDO.TesteeSource;
                questionResultEntity.CreateUserId  = questionAnswerDO.CreateUserId;
                questionResultEntity.CreateTime    = questionAnswerDO.CreateTime;
                questionResultEntity.ModifyUserId  = questionAnswerDO.ModifyUserId;
                questionResultEntity.ModifyTime    = questionAnswerDO.ModifyTime;
            }

            return(questionResultEntity);
        }
예제 #20
0
 public void Update(QuestionnaireEntity pEntity, bool pIsUpdateNullField, IDbTransaction pTran)
 {
     _currentDAO.Update(pEntity, pIsUpdateNullField, pTran);
 }
예제 #21
0
 /// <summary>
 /// 更新
 /// </summary>
 /// <param name="pEntity">实体实例</param>
 /// <param name="pTran">事务实例,可为null,如果为null,则不使用事务来更新</param>
 public void Update(QuestionnaireEntity pEntity, IDbTransaction pTran)
 {
     Update(pEntity, true, pTran);
 }
예제 #22
0
 /// <summary>
 /// 在事务内创建一个新实例
 /// </summary>
 /// <param name="pEntity">实体实例</param>
 /// <param name="pTran">事务实例,可为null,如果为null,则不使用事务来更新</param>
 public void Create(QuestionnaireEntity pEntity, IDbTransaction pTran)
 {
     _currentDAO.Create(pEntity, pTran);
 }
예제 #23
0
        /// <summary>
        /// 活动报名表数据获取
        /// </summary>
        /// <param name="EventID">活动标识</param>
        /// <returns></returns>
        public GetResponseParams <QuestionnaireEntity> getEventApplyQues(string EventID)
        {
            #region
            if (EventID == null)
            {
                return(new GetResponseParams <QuestionnaireEntity>
                {
                    Flag = "0",
                    Code = "404",
                    Description = "活动标识为空",
                });
            }
            #endregion
            GetResponseParams <QuestionnaireEntity> response = new GetResponseParams <QuestionnaireEntity>
            {
                Flag        = "1",
                Code        = "200",
                Description = "成功"
            };
            try
            {
                QuestionnaireEntity quesInfo = new QuestionnaireEntity();
                #region 业务处理
                //1.获取问题数量
                quesInfo.QuestionCount = _currentDAO.GetEventApplyQuesCount(EventID);
                //2.获取问题列表
                if (quesInfo.QuestionCount > 0)
                {
                    DataSet ds = new DataSet();
                    ds = _currentDAO.GetEventApplyQuesList(EventID);
                    IList <QuesQuestionsEntity> questionList = new List <QuesQuestionsEntity>();
                    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                    {
                        questionList = DataTableToObject.ConvertToList <QuesQuestionsEntity>(ds.Tables[0]);
                        if (questionList != null && questionList.Count > 0)
                        {
                            //3.获取问题选项
                            foreach (QuesQuestionsEntity questionInfo in questionList)
                            {
                                DataSet ds1 = new DataSet();
                                ds1 = _currentDAO.GetEventApplyOptionList(questionInfo.QuestionID);
                                if (ds1 != null && ds1.Tables.Count > 0 && ds1.Tables[0].Rows.Count > 0)
                                {
                                    IList <QuesOptionEntity> optionList = new List <QuesOptionEntity>();
                                    optionList = DataTableToObject.ConvertToList <QuesOptionEntity>(ds1.Tables[0]);
                                    questionInfo.QuesOptionEntityList = optionList;
                                }
                            }
                            quesInfo.QuesQuestionEntityList = questionList;
                        }
                    }
                }

                #endregion
                response.Params = quesInfo;
                return(response);
            }
            catch (Exception ex)
            {
                response.Flag        = "0";
                response.Code        = "103";
                response.Description = "失败:" + ex.ToString();
                return(response);
            }
        }
예제 #24
0
        /// <summary>
        /// 計算問卷得分,回傳問卷得分類別
        /// </summary>
        /// <param name="answer">問卷填答資料</param>
        /// <param name="questionEntity">問卷定義資料</param>
        /// <returns>問卷得分類別</returns>
        public CalculateScoreEntity CalculateScore(QuestionnaireAnswerEntity answer,
                                                   QuestionnaireEntity questionEntity)
        {
            List <AnswerDetailEntity> answerFullDetailList = new List <AnswerDetailEntity>();

            int        actualScore       = 0;
            List <int> questionScoreList = new List <int>();

            IEnumerable <AnswerDetailEntity> answerDetailList = null;
            AnswerDetailEntity answerDetail    = null;
            AnswerDefineEntity answerDefine    = null;
            IEnumerable <int>  answerScoreList = null;

            foreach (QuestDefineEntity questDefine in questionEntity.QuestDefineEntities)
            {
                answerDetailList = null;
                answerDetail     = null;
                answerDefine     = null;
                answerScoreList  = null;

                answerDetailList = answer.AnswerDetailEntities.
                                   Where(x => (x.QuestionId == questDefine.QuestionId) &&
                                         !String.IsNullOrEmpty(x.AnswerCode));

                if (questDefine.AnswerType == "S")
                {
                    if (answerDetailList.Count() == 0)
                    {
                        continue;
                    }
                    else if (answerDetailList.Count() > 1)
                    {
                        var ex = new InvalidOperationException("answerCode not the only");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        ex.Data["answerCodeList"]         = String.Join(",", answerDetailList);
                        throw ex;
                    }

                    answerDetail = answerDetailList.First();

                    answerDefine = questDefine.AnswerDefineEntities.
                                   FirstOrDefault(x => x.AnswerCode == answerDetail.AnswerCode);

                    if (answerDefine == null)
                    {
                        var ex = new InvalidOperationException("answerDefine not found");
                        ex.Data["answerDetail.AnswerCode"] = answerDetail.AnswerCode;
                        throw ex;
                    }

                    answerFullDetailList.Add(new AnswerDetailEntity
                    {
                        QuestionUid = questDefine.Uid,
                        Score       = answerDefine.Score,

                        QuestionId  = answerDetail.QuestionId,
                        AnswerCode  = answerDetail.AnswerCode,
                        OtherAnswer = answerDetail.OtherAnswer,
                    });
                }
                else if (questDefine.AnswerType == "M")
                {
                    foreach (AnswerDetailEntity answerDetailEntity in answerDetailList)
                    {
                        answerDefine = null;

                        answerDefine = questDefine.AnswerDefineEntities.
                                       FirstOrDefault(x => x.AnswerCode == answerDetailEntity.AnswerCode);

                        if (answerDefine == null)
                        {
                            var ex = new InvalidOperationException("answerDefine not found");
                            ex.Data["questDefine.QuestionId"]        = questDefine.QuestionId;
                            ex.Data["answerDetailEntity.AnswerCode"] = answerDetailEntity.AnswerCode;
                            throw ex;
                        }

                        answerFullDetailList.Add(new AnswerDetailEntity
                        {
                            QuestionUid = questDefine.Uid,
                            Score       = answerDefine.Score,

                            QuestionId  = answerDetailEntity.QuestionId,
                            AnswerCode  = answerDetailEntity.AnswerCode,
                            OtherAnswer = answerDetailEntity.OtherAnswer,
                        });
                    }
                }
                else if (questDefine.AnswerType == "F")
                {
                    if (answerDetailList.Count() == 0)
                    {
                        var ex = new InvalidOperationException("answerCode not the only");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        throw ex;
                    }
                    else if (answerDetailList.Count() != 1)
                    {
                        var ex = new InvalidOperationException("answerCode not the only");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        ex.Data["answerCodeList"]         = String.Join(",", answerDetailList);
                        throw ex;
                    }

                    answerDetail = answerDetailList.First();

                    IEnumerable <AnswerDefineEntity> answerDefineList = questDefine.AnswerDefineEntities.
                                                                        Where(x => x.AnswerCode == String.Empty);

                    if (answerDefineList.Count() == 0)
                    {
                        var ex = new InvalidOperationException("answerDefineList not found");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        throw ex;
                    }
                    else if (answerDefineList.Count() != 1)
                    {
                        var ex = new InvalidOperationException("answerDefineList not the only");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        throw ex;
                    }

                    answerDefine = answerDefineList.First();

                    answerFullDetailList.Add(new AnswerDetailEntity
                    {
                        QuestionUid = questDefine.Uid,
                        Score       = answerDefine.Score,

                        QuestionId  = answerDetail.QuestionId,
                        AnswerCode  = null,
                        OtherAnswer = answerDetail.AnswerCode,
                    });
                }


                if (questionEntity.NeedScore == "Y")
                {
                    answerScoreList = answerFullDetailList.
                                      Where(x => (x.QuestionId == questDefine.QuestionId) && (x.Score != null)).
                                      Select(x => x.Score.Value);

                    if ((answerScoreList == null) ||
                        (answerScoreList.Count() == 0))
                    {
                        var ex = new InvalidOperationException("answerScoreList not found");
                        ex.Data["questDefine.QuestionId"] = questDefine.QuestionId;
                        throw ex;
                    }

                    switch (questDefine.CountScoreType)
                    {
                    case "1":
                        questionScoreList.Add(answerScoreList.Sum());
                        break;

                    case "2":
                        questionScoreList.Add(answerScoreList.Max());
                        break;

                    case "3":
                        questionScoreList.Add(answerScoreList.Min());
                        break;

                    case "4":
                        questionScoreList.Add(Convert.ToInt32(Math.
                                                              Round(answerScoreList.Average(), 0, MidpointRounding.AwayFromZero)));
                        break;

                    default:

                        var ex = new InvalidOperationException("countScoreType not found");
                        ex.Data["questDefine.QuestionId"]     = questDefine.QuestionId;
                        ex.Data["questDefine.CountScoreType"] = questDefine.CountScoreType;
                        throw ex;
                    }
                }
            }

            if (questionEntity.NeedScore == "Y")
            {
                if (questionEntity.ScoreKind == "1")
                {
                    actualScore = questionScoreList.Sum();
                }

                if ((questionEntity.QuestScore != null) &&
                    (actualScore > questionEntity.QuestScore.Value))
                {
                    actualScore = questionEntity.QuestScore.Value;
                }
            }

            return(new CalculateScoreEntity()
            {
                ActualScore = actualScore,
                FullAnswerDetailList = answerFullDetailList,
            });
        }