コード例 #1
0
        /// <summary>
        /// 取得最新一筆用戶問卷答題資料
        /// </summary>
        /// <param name="uid">問卷主檔紀錄識別碼</param>
        /// <param name="userId">用戶ID</param>
        /// <returns>問卷答題資料</returns>
        public QuestionnaireAnswerDO GetLatestQuestionnaireAnswer(Guid uid, string userId)
        {
            QuestionnaireAnswerDO questAnswerDO = null;

            if (uid == Guid.Empty)
            {
                throw new ArgumentNullException("questAnswerId");
            }
            else if (String.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            string query = @"
SELECT TOP 1
    [Uid],[QuestUid],[QuestAnswerId],[TesteeId],
    [QuestScore],[ActualScore],[TesteeSource],[CreateUserId],
    [CreateTime],[ModifyUserId],[ModifyTime]
FROM QuestionnaireAnswer
WHERE QuestUid = @QuestUid
    AND TesteeId = @TesteeId
ORDER BY CreateTime DESC;";

            using (SqlConnection connection = DbConnection)
            {
                SqlCommand command = new SqlCommand(query, connection);

                command.Parameters.Add(new SqlParameter("@QuestUid", SqlDbType.UniqueIdentifier)
                {
                    Value = uid,
                });
                command.Parameters.Add(new SqlParameter("@TesteeId", SqlDbType.VarChar)
                {
                    Value = userId,
                });

                connection.Open();

                DataTable      dt      = new DataTable();
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                adapter.Fill(dt);

                if (dt.Rows.Count == 1)
                {
                    questAnswerDO = ConvertQuestionnaireAnswerDO(dt.Rows[0]);
                }

                adapter = null;
                dt      = null;
                command = null;

                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }

            return(questAnswerDO);
        }
コード例 #2
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);
        }
コード例 #3
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);
        }
コード例 #4
0
        /// <summary>
        /// 新增問卷填答結果至問卷答題主檔
        /// </summary>
        /// <param name="questAnswerDO">問卷填答資料</param>
        /// <returns></returns>
        public void Insert(QuestionnaireAnswerDO questAnswerDO)
        {
            if (questAnswerDO == null)
            {
                throw new ArgumentNullException("questAnswerDO");
            }

            string query = @"
INSERT INTO [QuestionnaireAnswer]
    ([Uid],[QuestUid],[QuestAnswerId],[TesteeId],[QuestScore],[ActualScore],[TesteeSource],
    [CreateUserId],[CreateTime],[ModifyUserId],[ModifyTime]) 
VALUES (@Uid, @QuestUid, @QuestAnswerId, @TesteeId, @QuestScore, @ActualScore, @TesteeSource,
    @CreateUserId, @CreateTime, @ModifyUserId, @ModifyTime);";

            using (SqlConnection connection = DbConnection)
            {
                SqlCommand command = new SqlCommand(query, connection);
                command.Parameters.Add(new SqlParameter("@Uid", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.Uid.ToString()
                });
                command.Parameters.Add(new SqlParameter("@QuestUid", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.QuestUid.ToString()
                });
                command.Parameters.Add(new SqlParameter("@QuestAnswerId", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.QuestAnswerId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@TesteeId", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.TesteeId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@QuestScore", SqlDbType.Int)
                {
                    Value = questAnswerDO.QuestScore ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ActualScore", SqlDbType.Int)
                {
                    Value = questAnswerDO.ActualScore ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@TesteeSource", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.TesteeSource ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@CreateUserId", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.CreateUserId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@CreateTime", SqlDbType.DateTime)
                {
                    Value = questAnswerDO.CreateTime ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyUserId", SqlDbType.VarChar)
                {
                    Value = questAnswerDO.ModifyUserId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyTime", SqlDbType.DateTime)
                {
                    Value = questAnswerDO.ModifyTime ?? Convert.DBNull
                });

                connection.Open();
                command.ExecuteNonQuery();

                command = null;

                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }