示例#1
0
        /// <summary>
        ///  更新一条数据
        /// </summary>
        public int Update(SqlTransaction sqltran, Entities.ExamBigQuestion model)
        {
            SqlParameter[] parameters =
            {
                new SqlParameter("@BQID",              SqlDbType.Int,         8),
                new SqlParameter("@EPID",              SqlDbType.Int,         8),
                new SqlParameter("@Name",              SqlDbType.NVarChar,  300),
                new SqlParameter("@BQDesc",            SqlDbType.NVarChar,  500),
                new SqlParameter("@AskCategory",       SqlDbType.Int,         4),
                new SqlParameter("@EachQuestionScore", SqlDbType.Int,         4),
                new SqlParameter("@QuestionCount",     SqlDbType.Int,         4),
                new SqlParameter("@Status",            SqlDbType.Int,         4),
                new SqlParameter("@CreateTime",        SqlDbType.DateTime),
                new SqlParameter("@CreateUserID",      SqlDbType.Int,         4),
                new SqlParameter("@ModifyTime",        SqlDbType.DateTime),
                new SqlParameter("@ModifyUserID",      SqlDbType.Int, 4)
            };
            parameters[0].Value  = model.BQID;
            parameters[1].Value  = model.EPID;
            parameters[2].Value  = model.Name;
            parameters[3].Value  = model.BQDesc;
            parameters[4].Value  = model.AskCategory;
            parameters[5].Value  = model.EachQuestionScore;
            parameters[6].Value  = model.QuestionCount;
            parameters[7].Value  = model.Status;
            parameters[8].Value  = model.CreateTime;
            parameters[9].Value  = model.CreateUserID;
            parameters[10].Value = model.ModifyTime;
            parameters[11].Value = model.ModifyUserID;

            return(SqlHelper.ExecuteNonQuery(sqltran, CommandType.StoredProcedure, P_EXAMBIGQUESTION_UPDATE, parameters));
        }
示例#2
0
        /// <summary>
        ///  增加一条数据
        /// </summary>
        public int Insert(Entities.ExamBigQuestion model)
        {
            SqlParameter[] parameters =
            {
                new SqlParameter("@BQID",              SqlDbType.BigInt,      8),
                new SqlParameter("@EPID",              SqlDbType.BigInt,      8),
                new SqlParameter("@Name",              SqlDbType.NVarChar,  300),
                new SqlParameter("@BQDesc",            SqlDbType.NVarChar,  500),
                new SqlParameter("@AskCategory",       SqlDbType.Int,         4),
                new SqlParameter("@EachQuestionScore", SqlDbType.Int,         4),
                new SqlParameter("@QuestionCount",     SqlDbType.Int,         4),
                new SqlParameter("@Status",            SqlDbType.Int,         4),
                new SqlParameter("@CreateTime",        SqlDbType.DateTime),
                new SqlParameter("@CreateUserID",      SqlDbType.Int,         4),
                new SqlParameter("@ModifyTime",        SqlDbType.DateTime),
                new SqlParameter("@ModifyUserID",      SqlDbType.Int, 4)
            };
            parameters[0].Direction = ParameterDirection.Output;
            parameters[1].Value     = model.EPID;
            parameters[2].Value     = model.Name;
            parameters[3].Value     = model.BQDesc;
            parameters[4].Value     = model.AskCategory;
            parameters[5].Value     = model.EachQuestionScore;
            parameters[6].Value     = model.QuestionCount;
            parameters[7].Value     = model.Status;
            parameters[8].Value     = model.CreateTime;
            parameters[9].Value     = model.CreateUserID;
            parameters[10].Value    = model.ModifyTime;
            parameters[11].Value    = model.ModifyUserID;

            SqlHelper.ExecuteNonQuery(CONNECTIONSTRINGS, CommandType.StoredProcedure, P_EXAMBIGQUESTION_INSERT, parameters);
            return((int)parameters[0].Value);
        }
示例#3
0
        private Entities.ExamBigQuestion LoadSingleExamBigQuestion(DataRow row)
        {
            Entities.ExamBigQuestion model = new Entities.ExamBigQuestion();

            if (row["BQID"].ToString() != "")
            {
                model.BQID = long.Parse(row["BQID"].ToString());
            }
            if (row["EPID"].ToString() != "")
            {
                model.EPID = long.Parse(row["EPID"].ToString());
            }
            model.Name   = row["Name"].ToString();
            model.BQDesc = row["BQDesc"].ToString();
            if (row["AskCategory"].ToString() != "")
            {
                model.AskCategory = int.Parse(row["AskCategory"].ToString());
            }
            if (row["EachQuestionScore"].ToString() != "")
            {
                model.EachQuestionScore = int.Parse(row["EachQuestionScore"].ToString());
            }
            if (row["QuestionCount"].ToString() != "")
            {
                model.QuestionCount = int.Parse(row["QuestionCount"].ToString());
            }
            if (row["Status"].ToString() != "")
            {
                model.Status = int.Parse(row["Status"].ToString());
            }
            if (row["CreateTime"].ToString() != "")
            {
                model.CreateTime = DateTime.Parse(row["CreateTime"].ToString());
            }
            if (row["CreateUserID"].ToString() != "")
            {
                model.CreateUserID = int.Parse(row["CreateUserID"].ToString());
            }
            if (row["ModifyTime"].ToString() != "")
            {
                model.ModifyTime = DateTime.Parse(row["ModifyTime"].ToString());
            }
            if (row["ModifyUserID"].ToString() != "")
            {
                model.ModifyUserID = int.Parse(row["ModifyUserID"].ToString());
            }
            return(model);
        }
        public void Validate(out Entities.ExamPaper examPaper, out List <Entities.ExamBigQuestion> bigQList, out List <Entities.ExamBSQuestionShip> shipList, out string delBigQIDs, out string msg)
        {
            examPaper  = null;
            bigQList   = null;
            shipList   = null;
            delBigQIDs = DelBigQIDs;

            msg = "";

            #region 验证试卷信息

            if (ExamPaper != null)
            {
                examPaper = new Entities.ExamPaper();

                #region 验证

                int intVal = 0;

                if (ExamPaper.EPID != "" && !int.TryParse(ExamPaper.EPID, out intVal))
                {
                    msg += "试卷ID应该为数字!";
                }

                if (ExamPaper.Name == "")
                {
                    msg += "试卷名称不能为空!";
                }
                if (ExamPaper.ECID == "")
                {
                    msg += "试卷分类不能为空!";
                }
                if (!int.TryParse(ExamPaper.ECID, out intVal))
                {
                    msg += "试卷分类应该为数字!";
                }
                if (ExamPaper.ExamDesc == "")
                {
                    msg += "试卷说明不能为空!";
                }
                if (ExamPaper.TotalScore == "")
                {
                    msg += "总分不能为空!";
                }
                if (!int.TryParse(ExamPaper.TotalScore, out intVal))
                {
                    msg += "总分应该为数字!";
                }

                #endregion

                #region 赋值

                if (msg == "")
                {
                    if (ExamPaper.EPID != "" && int.TryParse(ExamPaper.EPID, out intVal))
                    {
                        examPaper.EPID = intVal;
                    }
                    examPaper.Name       = ExamPaper.Name;
                    examPaper.ECID       = int.Parse(ExamPaper.ECID);
                    examPaper.ExamDesc   = ExamPaper.ExamDesc;
                    examPaper.TotalScore = int.Parse(ExamPaper.TotalScore);
                    examPaper.BGID       = int.Parse(ExamPaper.BGID);
                }
                #endregion
            }

            #endregion

            #region 验证试卷大题信息

            if (ExamBigQuestioninfoList != null)
            {
                bigQList = new List <Entities.ExamBigQuestion>();

                #region 验证

                int intVal = 0;

                foreach (ExamBigQuestionPageinfo item in ExamBigQuestioninfoList)
                {
                    #region 验证大题数据

                    BigQPageInfo itemBigInfo = item.bigqpageinfo;
                    if (itemBigInfo != null)
                    {
                        if (itemBigInfo.BQID != "" && !int.TryParse(itemBigInfo.BQID, out intVal))
                        {
                            msg += "试卷大题ID应该为数字!";
                        }
                    }

                    if (itemBigInfo.EPID != "" && !int.TryParse(itemBigInfo.EPID, out intVal))
                    {
                        msg += "试卷大题的试卷ID应该为数字!";
                    }
                    if (itemBigInfo.Name == "")
                    {
                        msg += "试卷大题的名称不能为空!";
                    }
                    if (itemBigInfo.BQDesc == "")
                    {
                        msg += "试卷大题的描述不能为空!";
                    }
                    if (itemBigInfo.AskCategory == "")
                    {
                        msg += "试卷大题的题型不能为空!";
                    }
                    if (!int.TryParse(itemBigInfo.AskCategory, out intVal))
                    {
                        msg += "试卷大题的题型应该为数字!";
                    }
                    if (itemBigInfo.EachQuestionScore == "")
                    {
                        msg += "试卷大题的每题分值不能为空!";
                    }
                    if (!int.TryParse(itemBigInfo.EachQuestionScore, out intVal))
                    {
                        msg += "试卷大题的每题分值应该为数字!";
                    }
                    if (itemBigInfo.QuestionCount == "")
                    {
                        msg += "试卷大题的试题总量不能为空!";
                    }
                    if (!int.TryParse(itemBigInfo.QuestionCount, out intVal))
                    {
                        msg += "试卷大题的试题总量应该为数字!";
                    }

                    #endregion

                    #region 验证大小题关系数据

                    List <QuestinShipPageInfo> shiplist = item.shipList;
                    if (shiplist != null)
                    {
                        foreach (QuestinShipPageInfo shipItem in shiplist)
                        {
                            if (shipItem.BQID != "" && !int.TryParse(shipItem.BQID, out intVal))
                            {
                                msg += "大小题关系的大题ID应该为数字!";
                            }
                            if (shipItem.KLQID == "" && !int.TryParse(shipItem.KLQID, out intVal))
                            {
                                msg += "大小题关系的小题ID应该为数字!";
                            }
                        }
                    }

                    #endregion
                }

                #endregion

                #region 赋值

                if (msg == "")
                {
                    bigQList = new List <Entities.ExamBigQuestion>();
                    shipList = new List <Entities.ExamBSQuestionShip>();

                    Entities.ExamBigQuestion    bigQModel;
                    Entities.ExamBSQuestionShip shipModel;
                    int rownum = 0;
                    foreach (ExamBigQuestionPageinfo item in ExamBigQuestioninfoList)
                    {
                        #region 大题赋值

                        BigQPageInfo itemBigInfo = item.bigqpageinfo;
                        bigQModel = new Entities.ExamBigQuestion();
                        if (itemBigInfo.BQID != "")
                        {
                            bigQModel.BQID = int.Parse(itemBigInfo.BQID);
                        }
                        bigQModel.Name              = itemBigInfo.Name;
                        bigQModel.BQDesc            = itemBigInfo.BQDesc;
                        bigQModel.AskCategory       = int.Parse(itemBigInfo.AskCategory);
                        bigQModel.EachQuestionScore = int.Parse(itemBigInfo.EachQuestionScore);
                        bigQModel.QuestionCount     = int.Parse(itemBigInfo.QuestionCount);
                        bigQModel.NO = rownum++;

                        bigQList.Add(bigQModel);

                        #endregion

                        #region 大小题关系赋值

                        List <QuestinShipPageInfo> shiplist = item.shipList;
                        if (shiplist != null)
                        {
                            foreach (QuestinShipPageInfo shipItem in shiplist)
                            {
                                shipModel = new Entities.ExamBSQuestionShip();

                                if (shipItem.BQID != "")
                                {
                                    shipModel.BQID = int.Parse(shipItem.BQID);
                                }
                                else if (itemBigInfo.BQID != "")
                                {
                                    shipModel.BQID = int.Parse(itemBigInfo.BQID);
                                }

                                if (shipItem.KLQID != "")
                                {
                                    shipModel.KLQID = int.Parse(shipItem.KLQID);
                                }
                                shipModel.NO = bigQModel.NO;
                                shipList.Add(shipModel);
                            }
                        }
                        #endregion
                    }
                }
                #endregion
            }


            #endregion

            #region 验证删除的大题IDs

            if (!String.IsNullOrEmpty(delBigQIDs))
            {
                long     longval = 0;
                string[] idslist = delBigQIDs.Split(',');
                foreach (string item in idslist)
                {
                    if (!long.TryParse(item, out longval))
                    {
                        msg += "删除的大题ID格式不正确!";
                        break;
                    }
                }
            }

            #endregion
        }
        //提交或保存:type=submit 提交;type=save 保存
        public void examOnlineOperate(string type, out string msg)
        {
            msg = string.Empty;


            int  loginerID   = BLL.Util.GetLoginUserID(); //登陆者ID
            int  _EOLID      = 0;                         //插入该考生在线考试记录后返回的主键
            int  _EOLDID     = 0;                         //插入在线考试小题明细记录后返回的主键
            int  _totalScore = 0;                         //记录总得分,最后一步更新到在线考试表中
            bool isSubject   = false;                     //是否存在主观题,默认false 不存在(在线考试试卷则为已阅);true存在(在线考试试卷则为未阅)
            int  _paperID;                                //试卷ID

            if (!int.TryParse(RequestExamPaperID, out _paperID))
            {
                msg = "{msg:'试卷ID出错,操作失败!'}";
                return;
            }
            Entities.ExamOnline model_examOnlineInsert       = null;            //新增时增加的在线考试实体,如果之前没保存过,则需要新增
            Entities.ExamOnline model_examOnlineToUpdate     = null;            //需要修改之前保存过的试卷信息
            ArrayList           array_examOnlineDetailDelete = new ArrayList(); //如果有过保存的记录,则保存需要删除的小题明细ID 集合
            ArrayList           array_examOnlineAnswerDelete = new ArrayList(); //如果有过保存的记录,则保存需要删除的答案ID 集合
            bool paperIsSave = false;                                           //该考生试卷是否被保存过,false 没有;true 是;

            ArrayList array_appendValueAnswer = new ArrayList();                //记录答案对应的小题明细数组
            int       examOnlineDetailIndex   = 0;                              //数组值

            int _EIID;

            if (!int.TryParse(RequestEIID, out _EIID))
            {
                msg = "{msg:'项目ID出错,操作失败!'}";
                return;
            }

            judgeSubmitExamLimit(_EIID, out msg);
            if (msg != string.Empty)
            {
                return;
            }

            //在线考试明细表 集合(非主观题)
            List <Entities.ExamOnlineDetail> list_examOnlineDetail = new List <Entities.ExamOnlineDetail>();
            //在线考试答案表 集合(非主观题)
            List <Entities.ExamOnlineAnswer> list_examOnlineAnswer = new List <Entities.ExamOnlineAnswer>();

            //在线考试明细表 集合(主观题)
            List <Entities.ExamOnlineDetail> list_SubjetExamOnlineDetail = new List <Entities.ExamOnlineDetail>();
            //在线考试答案表 集合(主观题)
            List <Entities.ExamOnlineAnswer> list_SubjetExamOnlineAnswer = new List <Entities.ExamOnlineAnswer>();

            //日志:修改 在线考试表 集合
            ArrayList array_updateExamOnlineLog = new ArrayList();

            //在线考试表 修改前的model
            Entities.ExamOnline model_updateExamOnlineLog_Old = null;
            //日志:插入 在线考试表 集合
            ArrayList arry_insertExamOnlineLog = new ArrayList();
            //日志:插入 在线考试明细表 记录集合
            ArrayList array_insertExamOnlineDetailLog = new ArrayList();
            //日志:插入 在线考试答案表 记录集合
            ArrayList array_insertExamOnlineAnswerLog = new ArrayList();



            #region 准备数据

            Entities.QueryExamOnline query_examOnlineSave = new Entities.QueryExamOnline();
            int saveCount;
            if (RequestExamType == "1")    //补考项目考试
            {
                query_examOnlineSave.MEIID    = _EIID;
                query_examOnlineSave.IsMakeUp = 1;
            }
            else if (RequestExamType == "0")    //正常项目考试
            {
                query_examOnlineSave.IsMakeUp = 0;
                query_examOnlineSave.EIID     = _EIID;
            }
            query_examOnlineSave.ExamPersonID = loginerID;
            DataTable dt_examOnlineSave = BLL.ExamOnline.Instance.GetExamOnline(query_examOnlineSave, "", 1, 10000, out saveCount);
            if (dt_examOnlineSave.Rows.Count > 0)
            {
                paperIsSave = true;
                //存在数据,准备上次保存的数据,对其进行修改
                model_examOnlineToUpdate      = BLL.ExamOnline.Instance.GetExamOnline(long.Parse(dt_examOnlineSave.Rows[0]["EOLID"].ToString()));
                model_updateExamOnlineLog_Old = model_examOnlineToUpdate;
                if (model_examOnlineToUpdate != null)
                {
                    model_examOnlineToUpdate.ExamEndTime = DateTime.Now;
                    model_examOnlineToUpdate.IsLack      = 0;
                    //准备需要删除的小题明细ID 集合
                    Entities.QueryExamOnlineDetail query_examOnlineDetailDelete = new Entities.QueryExamOnlineDetail();
                    query_examOnlineDetailDelete.EOLID = int.Parse(model_examOnlineToUpdate.EOLID.ToString());
                    DataTable dt_detailDelete = BLL.ExamOnlineDetail.Instance.GetExamOnlineDetail(query_examOnlineDetailDelete, "", 1, 10000, out saveCount);
                    for (int i = 0; i < dt_detailDelete.Rows.Count; i++)
                    {
                        //插入 集合
                        array_examOnlineDetailDelete.Add(dt_detailDelete.Rows[i]["EOLDID"].ToString());
                        //准备需要删除的该小题答案ID 集合
                        Entities.QueryExamOnlineAnswer query_examOnlineAnswerDelete = new Entities.QueryExamOnlineAnswer();
                        query_examOnlineAnswerDelete.EOLDID = int.Parse(dt_detailDelete.Rows[i]["EOLDID"].ToString());
                        DataTable dt_answerDelete = BLL.ExamOnlineAnswer.Instance.GetExamOnlineAnswer(query_examOnlineAnswerDelete, "", 1, 10000, out saveCount);
                        for (int j = 0; j < dt_answerDelete.Rows.Count; j++)
                        {
                            //插入 集合
                            array_examOnlineAnswerDelete.Add(dt_answerDelete.Rows[j]["RecID"].ToString());
                        }
                    }
                }
            }

            //  a、准备 插入在线考试表记录 数据

            //  如果之前保存过数据,则不需要新增,修改即可
            if (paperIsSave == false)
            {
                model_examOnlineInsert = new Entities.ExamOnline();
                if (RequestExamType == "1")    //补考项目考试
                {
                    model_examOnlineInsert.IsMakeUp = 1;
                    model_examOnlineInsert.MEIID    = _EIID;
                    //根据补考项目ID,找到对应的考试项目ID,并赋值
                    Entities.MakeUpExamInfo model_makeUpExamInfoGetEIID = BLL.MakeUpExamInfo.Instance.GetMakeUpExamInfo(_EIID);
                    if (model_makeUpExamInfoGetEIID == null)
                    {
                        msg = "{msg:'该补考项目对应考试项目ID未找到,操作失败!'}";
                        return;
                    }
                    model_examOnlineInsert.EIID = int.Parse(model_makeUpExamInfoGetEIID.EIID.ToString());
                }
                else if (RequestExamType == "0")    //正常项目考试
                {
                    model_examOnlineInsert.IsMakeUp = 0;
                    model_examOnlineInsert.EIID     = _EIID;
                }
                model_examOnlineInsert.ExamPersonID  = loginerID;
                model_examOnlineInsert.ExamStartTime = DateTime.Parse(RequestExamStartTime);
                model_examOnlineInsert.ExamEndTime   = DateTime.Now;
                model_examOnlineInsert.CreateTime    = DateTime.Now;
                model_examOnlineInsert.CreaetUserID  = loginerID;
                model_examOnlineInsert.IsLack        = 0; //不算缺考

                //_EOLID = insertExamOnline(tran, model_examOnlineInsert);
            }
            if (model_examOnlineInsert != null)
            {
                model_examOnlineInsert.Status = type == "save" ? 0 : 1;
            }
            if (model_examOnlineToUpdate != null)
            {
                model_examOnlineToUpdate.Status = type == "save" ? 0 : 1;
            }

            #endregion

            #region b、准备 插入在线考试小题明细 数据

            #region 1)准备 非主观题 数据
            if (RequestNoSubjectQestion != "")
            {
                //分解成每一个小题数组,类似['大题ID:小题ID:单选题答案','大题ID:小题ID:复选题答案1;复选题答案2;复选题答案3']
                string[] noSubjectQuestion = RequestNoSubjectQestion.Split(',');
                for (int i = 0; i < noSubjectQuestion.Length; i++)
                {
                    examOnlineDetailIndex = i;
                    //分解成每一个小题详细信息的数组,类似['大题ID','小题ID','复选题答案1;复选题答案2;复选题答案3']
                    string[] eachNoSubjectQuestion = noSubjectQuestion[i].Split(':');
                    //如果该小题的详细信息都有值,则插入;否则,不插入
                    if (eachNoSubjectQuestion[0] != "" && eachNoSubjectQuestion[1] != "" && eachNoSubjectQuestion[2] != "")
                    {
                        Entities.ExamOnlineDetail model_examOnlineDetailInsert = new Entities.ExamOnlineDetail();
                        //model_examOnlineDetailInsert.EOLID = int.Parse(_EOLID.ToString());
                        model_examOnlineDetailInsert.EPID  = _paperID;
                        model_examOnlineDetailInsert.BQID  = long.Parse(eachNoSubjectQuestion[0]);
                        model_examOnlineDetailInsert.KLQID = long.Parse(eachNoSubjectQuestion[1]);
                        model_examOnlineDetailInsert.Score = 0;

                        //  (1)根据该生给出的答案去比较正确的答案
                        //  先根据该小题ID去找出该题正确答案串
                        string rightAnswer = string.Empty;
                        Entities.QueryKLQAnswer query_KLQAnswer = new Entities.QueryKLQAnswer();
                        int totalCount;
                        query_KLQAnswer.KLQID = model_examOnlineDetailInsert.KLQID;
                        DataTable dt_KLQAnswer = BLL.KLQAnswer.Instance.GetKLQAnswer(query_KLQAnswer, "", 1, 10000, out totalCount);
                        if (dt_KLQAnswer.Rows.Count == 0)
                        {
                            msg = "{msg:'对应题目的答案未找到,操作失败!'}";
                            return;
                        }
                        for (int j = 0; j < dt_KLQAnswer.Rows.Count; j++)
                        {
                            rightAnswer += dt_KLQAnswer.Rows[j]["KLAOID"].ToString() + ";";
                        }
                        rightAnswer = rightAnswer.TrimEnd(';');

                        //  比较该串与考生给出的答案串是否相同,相同则得分;不相同给零分
                        //  比较方法(两个长度相同,分解考生答案,保证每一个答案都在正确答案内)
                        if (eachNoSubjectQuestion[2].Length == rightAnswer.Length)
                        {
                            string[] eachNoSubjectAnswer = eachNoSubjectQuestion[2].Split(';');
                            bool     IsRightOrWrong      = true; //  答案是否正确,正确true;错误false
                            for (int ea = 0; ea < eachNoSubjectAnswer.Length; ea++)
                            {
                                if (!rightAnswer.Contains(eachNoSubjectAnswer[ea]))
                                {
                                    IsRightOrWrong = false;
                                }
                            }
                            if (IsRightOrWrong)
                            {
                                //  (2)找到该小题如果正确则应得的分数
                                Entities.ExamBigQuestion model_examBigQuestion = BLL.ExamBigQuestion.Instance.GetExamBigQuestion(model_examOnlineDetailInsert.BQID);
                                if (model_examBigQuestion == null)
                                {
                                    msg = "{msg:'对应该小题的对应的分数未找到,操作失败!'}";
                                    return;
                                }
                                int eachQuestionScore = model_examBigQuestion.EachQuestionScore;
                                model_examOnlineDetailInsert.Score = eachQuestionScore;
                                _totalScore += eachQuestionScore;   //计入总得分
                            }
                        }
                        model_examOnlineDetailInsert.CreaetUserID = loginerID;
                        model_examOnlineDetailInsert.CreateTime   = DateTime.Now;
                        //插入在线考试小题明细表 集合
                        list_examOnlineDetail.Add(model_examOnlineDetailInsert);
                        //插入在线考试小题明细表 日志集合
                        string detailsLog = "在线考试小题明细表【插入】";
                        int    epidLog;
                        int    bqidLog;
                        int    klqidLog;
                        if (int.TryParse(model_examOnlineDetailInsert.EPID.ToString(), out epidLog))
                        {
                            Entities.ExamPaper model_examPaperLog = BLL.ExamPaper.Instance.GetExamPaper(epidLog);
                            if (model_examPaperLog != null)
                            {
                                detailsLog += "试卷名称【" + model_examPaperLog.Name + "】";
                            }
                        }
                        if (int.TryParse(model_examOnlineDetailInsert.BQID.ToString(), out bqidLog))
                        {
                            Entities.ExamBigQuestion model_examBigQuestionLog = BLL.ExamBigQuestion.Instance.GetExamBigQuestion(bqidLog);
                            if (model_examBigQuestionLog != null)
                            {
                                detailsLog += "大题名称【" + model_examBigQuestionLog.Name + "】";
                            }
                        }
                        if (int.TryParse(model_examOnlineDetailInsert.KLQID.ToString(), out klqidLog))
                        {
                            Entities.KLQuestion model_klqQestionLog = BLL.KLQuestion.Instance.GetKLQuestion(klqidLog);
                            if (model_klqQestionLog != null)
                            {
                                detailsLog += "小题内容【" + model_klqQestionLog.Ask + "】";
                            }
                        }
                        detailsLog += "本小题得分【" + model_examOnlineDetailInsert.Score + "】插入时间【" + model_examOnlineDetailInsert.CreateTime + "】的记录";
                        array_insertExamOnlineDetailLog.Add(detailsLog);

                        //  (3)插入在线考试答案表
                        //  分解答案串,分条插入该表
                        string[] eachAnswer = eachNoSubjectQuestion[2].Split(';');
                        for (int k = 0; k < eachAnswer.Length; k++)
                        {
                            Entities.ExamOnlineAnswer model_examOnlineAnswer = new Entities.ExamOnlineAnswer();
                            //model_examOnlineAnswer.EOLDID = int.Parse(_EOLDID.ToString());
                            model_examOnlineAnswer.ExamAnswer   = eachAnswer[k];
                            model_examOnlineAnswer.CreaetUserID = loginerID;
                            model_examOnlineAnswer.CreateTime   = DateTime.Now;
                            //插入在线考试答案表 集合
                            list_examOnlineAnswer.Add(model_examOnlineAnswer);

                            array_appendValueAnswer.Add(examOnlineDetailIndex);

                            //插入在线考试答案表 日志集合
                            array_insertExamOnlineAnswerLog.Add("在线考试答案表【插入】提交答案:【" + model_examOnlineAnswer.ExamAnswer + "】插入时间【" + model_examOnlineAnswer.CreateTime + "】的记录");
                        }
                    }
                }
            }

            #endregion

            #region 2)准备 插入主观题 数据(主观题答案为空,也会插入)

            if (RequestSubjectQuestion != "")
            {
                //分解成每一个小题数组,类似['大题ID^^小题ID^^答案','大题ID^^小题ID^^答案','大题ID^^小题ID^^答案']
                string[] subjectQuestion = RequestSubjectQuestion.Split(new string[] { "$$" }, StringSplitOptions.None);
                for (int i = 0; i < subjectQuestion.Length; i++)
                {
                    //分解成每一题的每个详细信息,类似['大题ID','小题ID','答案']
                    string[] eachSubjectQuestion = subjectQuestion[i].Split(new string[] { "^^" }, StringSplitOptions.None);
                    Entities.ExamOnlineDetail model_subjectExamOnlineDetail = new Entities.ExamOnlineDetail();
                    //model_subjectExamOnlineDetail.EOLID = _EOLID.ToString;
                    model_subjectExamOnlineDetail.EPID         = _paperID;
                    model_subjectExamOnlineDetail.BQID         = long.Parse(eachSubjectQuestion[0]);
                    model_subjectExamOnlineDetail.KLQID        = long.Parse(eachSubjectQuestion[1]);
                    model_subjectExamOnlineDetail.Score        = 0;
                    model_subjectExamOnlineDetail.CreaetUserID = loginerID;
                    model_subjectExamOnlineDetail.CreateTime   = DateTime.Now;
                    //插入在线考试小题明细表 集合
                    list_SubjetExamOnlineDetail.Add(model_subjectExamOnlineDetail);
                    //插入在线考试小题明细表 日志集合
                    string detailsLog = "在线考试小题明细表【主观题】【插入】";
                    int    epidLog;
                    int    bqidLog;
                    int    klqidLog;
                    if (int.TryParse(model_subjectExamOnlineDetail.EPID.ToString(), out epidLog))
                    {
                        Entities.ExamPaper model_examPaperLog = BLL.ExamPaper.Instance.GetExamPaper(epidLog);
                        if (model_examPaperLog != null)
                        {
                            detailsLog += "试卷名称【" + model_examPaperLog.Name + "】";
                        }
                    }
                    if (int.TryParse(model_subjectExamOnlineDetail.BQID.ToString(), out bqidLog))
                    {
                        Entities.ExamBigQuestion model_examBigQuestionLog = BLL.ExamBigQuestion.Instance.GetExamBigQuestion(bqidLog);
                        if (model_examBigQuestionLog != null)
                        {
                            detailsLog += "大题名称【" + model_examBigQuestionLog.Name + "】";
                        }
                    }
                    if (int.TryParse(model_subjectExamOnlineDetail.KLQID.ToString(), out klqidLog))
                    {
                        Entities.KLQuestion model_klqQestionLog = BLL.KLQuestion.Instance.GetKLQuestion(klqidLog);
                        if (model_klqQestionLog != null)
                        {
                            detailsLog += "小题内容【" + model_klqQestionLog.Ask + "】";
                        }
                    }
                    detailsLog += "本小题得分【" + model_subjectExamOnlineDetail.Score + "】插入时间【" + model_subjectExamOnlineDetail.CreateTime + "】的记录";
                    array_insertExamOnlineDetailLog.Add(detailsLog);

                    //在线考试答案表 实体
                    Entities.ExamOnlineAnswer model_subjectExamOnlineAnswer = new Entities.ExamOnlineAnswer();
                    //model_subjectExamOnlineAnswer.EOLDID = _EOLDID;
                    model_subjectExamOnlineAnswer.ExamAnswer   = eachSubjectQuestion[2];
                    model_subjectExamOnlineAnswer.CreaetUserID = loginerID;
                    model_subjectExamOnlineAnswer.CreateTime   = DateTime.Now;
                    //插入在线考试答案表 集合
                    list_SubjetExamOnlineAnswer.Add(model_subjectExamOnlineAnswer);

                    //插入在线考试答案表 日志集合
                    array_insertExamOnlineAnswerLog.Add("在线考试答案表【插入】提交答案:【" + model_subjectExamOnlineAnswer.ExamAnswer + "】插入时间【" + model_subjectExamOnlineAnswer.CreateTime + "】的记录");

                    //将isSubject字段修改为 true;在线考试的IsMarking需修改为0未阅
                    isSubject = true;
                }
            }

            if (model_examOnlineInsert != null)
            {
                model_examOnlineInsert.SumScore  = _totalScore;
                model_examOnlineInsert.IsMarking = isSubject == false ? 1 : 0;

                //准备插入数据的日志
                string logStr = string.Empty;
                if (type == "save")
                {
                    logStr += "【保存】";
                }
                else
                {
                    logStr += "【提交】";
                }
                logStr += "在线考试表【插入】";
                string meiidStr  = model_examOnlineInsert.IsMakeUp == 1 ? "补考项目ID【" + model_examOnlineInsert.MEIID + "】" : "";
                string isMakeUp  = model_examOnlineInsert.IsMakeUp == 1 ? "补考" : "未补考";
                string isMakeing = model_examOnlineInsert.IsMarking == 1 ? "已阅" : "未阅";
                string status    = model_examOnlineInsert.Status == 1 ? "提交" : "保存";
                //考试项目名称
                string            eiidName       = string.Empty;
                Entities.ExamInfo model_examInfo = BLL.ExamInfo.Instance.GetExamInfo(model_examOnlineInsert.EIID);
                if (model_examInfo != null)
                {
                    eiidName = model_examInfo.Name;
                    logStr  += "考试项目名称【" + eiidName + "】";
                }
                logStr += meiidStr + "考生名称【" + BLL.Util.GetNameInHRLimitEID(loginerID) + "】考试开始时间【"
                          + model_examOnlineInsert.ExamStartTime + "】考试结束时间【"
                          + model_examOnlineInsert.ExamEndTime + "】总得分【"
                          + model_examOnlineInsert.SumScore + "】是否补考【"
                          + isMakeUp + "】是否阅卷【" + isMakeing + "】状态【" + status + "】的记录";

                arry_insertExamOnlineLog.Add(logStr);
            }
            if (model_examOnlineToUpdate != null)
            {
                model_examOnlineToUpdate.SumScore  = _totalScore;
                model_examOnlineToUpdate.IsMarking = isSubject == false ? 1 : 0;

                //准备修改数据的日志
                string logStr = string.Empty;
                if (type == "save")
                {
                    logStr += "【保存】";
                }
                else
                {
                    logStr += "【提交】";
                }
                logStr += "在线考试表【更新】";
                if (model_updateExamOnlineLog_Old.SumScore != model_examOnlineToUpdate.SumScore)
                {
                    logStr += "总得分从【" + model_updateExamOnlineLog_Old.SumScore + "】修改成【" + model_examOnlineToUpdate.SumScore + "】";
                }
                if (model_updateExamOnlineLog_Old.IsMarking != model_examOnlineToUpdate.IsMarking)
                {
                    string isMarking_Old = model_updateExamOnlineLog_Old.IsMarking == 1 ? "是" : "否";
                    string isMarking_Now = model_examOnlineToUpdate.IsMarking == 1 ? "是" : "否";
                    logStr += "是否阅卷从【" + isMarking_Old + "】修改成【" + isMarking_Now + "】";
                }
                if (model_updateExamOnlineLog_Old.ExamEndTime != model_examOnlineToUpdate.ExamEndTime)
                {
                    logStr += "考试结束时间从【" + model_updateExamOnlineLog_Old.ExamEndTime + "】修改成【" + model_examOnlineToUpdate.ExamEndTime + "】";
                }
                if (model_updateExamOnlineLog_Old.Status != model_examOnlineToUpdate.Status)
                {
                    string status_Old = model_updateExamOnlineLog_Old.Status == 1 ? "提交" : "保存";
                    string status_Now = model_examOnlineToUpdate.Status == 1 ? "提交" : "保存";
                    logStr += "考生试卷状态从【" + status_Old + "】修改成【" + status_Now + "】";
                }
                logStr += "记录";
                array_updateExamOnlineLog.Add(logStr);
            }

            #endregion

            #endregion

            #region 提交、保存 实务操作

            string        connectionstrings = ConfigurationUtil.GetAppSettingValue("ConnectionStrings_CC");
            SqlConnection connection        = new SqlConnection(connectionstrings);
            connection.Open();
            SqlTransaction tran = connection.BeginTransaction("SampleTransaction");
            try
            {
                //如果没有保存过的,新增一条;如果被保存过,修改在线考试这条记录并删除之前的小题明细和答案,然后重新插入,反之都要插入
                if (paperIsSave == false)
                {
                    //插入在线考试表一条记录 _EOLID得到返回的主键值
                    _EOLID = insertExamOnline(tran, model_examOnlineInsert);
                }
                else
                {
                    _EOLID = int.Parse(model_examOnlineToUpdate.EOLID.ToString());

                    //修改在线考试表的该条记录
                    updateExamOnline(tran, model_examOnlineToUpdate);
                    //删除明细表的该考生本张试卷ID的所有明细记录
                    for (int i = 0; i < array_examOnlineDetailDelete.Count; i++)
                    {
                        long eoldid = long.Parse(array_examOnlineDetailDelete[i].ToString());
                        BLL.ExamOnlineDetail.Instance.Delete(tran, eoldid);
                        BLL.Util.InsertUserLog(tran, "在线考试明细表【删除】主键ID:【" + eoldid + "】的记录");
                    }
                    //删除答案表的该考生本张试卷ID的所有答案记录
                    for (int j = 0; j < array_examOnlineAnswerDelete.Count; j++)
                    {
                        long recid = long.Parse(array_examOnlineAnswerDelete[j].ToString());
                        BLL.ExamOnlineAnswer.Instance.Delete(tran, recid);
                        BLL.Util.InsertUserLog(tran, "在线考试答案表【删除】主键ID:【" + recid + "】的记录");
                    }
                }

                //插入非主观题
                for (int kk = 0; kk < list_examOnlineDetail.Count; kk++)
                {
                    //插入在线考试小题明细表 _EOLDID到返回的主键值
                    Entities.ExamOnlineDetail eachExamOnlineDetail = list_examOnlineDetail[kk];
                    eachExamOnlineDetail.EOLID = _EOLID;
                    _EOLDID = insertOnlineDetail(tran, eachExamOnlineDetail);

                    //插入在线考试答案表  这两个表的插入不一定是一对,因为有的是多选,需要多条插入
                    for (int n = kk; n < array_appendValueAnswer.Count; n++)
                    {
                        if (kk == int.Parse(array_appendValueAnswer[n].ToString()))
                        {
                            Entities.ExamOnlineAnswer eachExamOnlineAnswer = list_examOnlineAnswer[n];
                            eachExamOnlineAnswer.EOLDID = _EOLDID;
                            insertExamOnlineAnswer(tran, eachExamOnlineAnswer);
                        }
                    }
                }

                //插入主观题
                for (int tt = 0; tt < list_SubjetExamOnlineDetail.Count; tt++)
                {
                    //插入在线考试小题明细表 _EOLDID到返回的主键值
                    Entities.ExamOnlineDetail eachExamOnlineDetail = list_SubjetExamOnlineDetail[tt];
                    eachExamOnlineDetail.EOLID = _EOLID;
                    _EOLDID = int.Parse(insertOnlineDetail(tran, eachExamOnlineDetail).ToString());

                    //插入在线考试答案表 这两个表的插入肯定是一对,所以不用循环list
                    Entities.ExamOnlineAnswer eachExamOnlineAnswer = list_SubjetExamOnlineAnswer[tt];
                    eachExamOnlineAnswer.EOLDID = _EOLDID;
                    insertExamOnlineAnswer(tran, eachExamOnlineAnswer);
                }

                //插入日志
                for (int log1 = 0; log1 < arry_insertExamOnlineLog.Count; log1++)
                {
                    BLL.Util.InsertUserLog(tran, arry_insertExamOnlineLog[log1].ToString());
                }
                for (int log2 = 0; log2 < array_updateExamOnlineLog.Count; log2++)
                {
                    BLL.Util.InsertUserLog(tran, array_updateExamOnlineLog[log2].ToString());
                }
                for (int log3 = 0; log3 < array_insertExamOnlineDetailLog.Count; log3++)
                {
                    BLL.Util.InsertUserLog(tran, array_insertExamOnlineDetailLog[log3].ToString());
                }
                for (int log4 = 0; log4 < array_insertExamOnlineAnswerLog.Count; log4++)
                {
                    BLL.Util.InsertUserLog(tran, array_insertExamOnlineAnswerLog[log4].ToString());
                }

                //事务提交
                tran.Commit();

                msg = "{msg:'true'}";
            }
            catch (Exception ex)
            {
                tran.Rollback();
                msg = "{msg:'" + ex.Message.ToString() + "'}";
                BLL.Loger.Log4Net.Error("在线考试异常", ex);
            }
            finally
            {
                connection.Close();
            }

            #endregion
        }
 /// <summary>
 /// 更新一条数据
 /// </summary>
 public int Update(SqlTransaction sqltran, Entities.ExamBigQuestion model)
 {
     return(Dal.ExamBigQuestion.Instance.Update(sqltran, model));
 }
 /// <summary>
 /// 更新一条数据
 /// </summary>
 public int Update(Entities.ExamBigQuestion model)
 {
     return(Dal.ExamBigQuestion.Instance.Update(model));
 }
 /// <summary>
 /// 增加一条数据
 /// </summary>
 public int Insert(Entities.ExamBigQuestion model)
 {
     return(Dal.ExamBigQuestion.Instance.Insert(model));
 }