using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace VRS.Handler { /// /// Boat 的摘要说明 /// public class Boat : BaseHandler, IHttpHandler { DataService.BLL.admin_user bll_user = new DataService.BLL.admin_user(); DataService.BLL.pro_exam_batch bll_exam_batch = new DataService.BLL.pro_exam_batch(); DataService.BLL.pro_lianxi_batch bll_lianxi_batch = new DataService.BLL.pro_lianxi_batch(); DataService.BLL.pro_examination bll_examination = new DataService.BLL.pro_examination(); DataService.BLL.pro_exam_theory bll_pro_exam_theory = new DataService.BLL.pro_exam_theory(); DataService.BLL.pro_theory_base bll_theory_base = new DataService.BLL.pro_theory_base(); DataService.BLL.pro_theory_base_item bll_base_item = new DataService.BLL.pro_theory_base_item(); DataService.BLL.pro_exam_batch_result bll_batch_result = new DataService.BLL.pro_exam_batch_result(); DataService.BLL.pro_exam_batch_result_detail bll_batch_result_detail = new DataService.BLL.pro_exam_batch_result_detail(); DataService.BLL.admin_school bll_school = new DataService.BLL.admin_school(); DataService.BLL.pro_theory_base_cache bll_base_cache = new DataService.BLL.pro_theory_base_cache(); DataService.BLL.pro_theory_base_cache_item bll_base_cache_item = new DataService.BLL.pro_theory_base_cache_item(); DataService.BLL.pro_type_manage bll_type_manage = new DataService.BLL.pro_type_manage(); public void ProcessRequest(HttpContext context) { baseContext = context; context.Response.ContentType = "application/json"; CrossDomain(); if (null == context.Request["action"]) { var result = GetResult(false, "缺少参数:action"); context.Response.Write(result); context.Response.End(); } string action = context.Request["action"]; switch (action) { //查询所有船型 case "all": ALL(context); break; //查询理论试题列表 case "theorylist": QueryTheoryListInfo(context); break; //查询理论试题列表 case "theorybase": QueryTheoryBaseInfo(context); break; //保存理论成绩 case "savetheory": SaveTheoryExam(context); break; //保存练习考试成绩 case "savelianxi": SaveTheoryExam_Lianxi(context); break; //查询练习考试列表包含总成绩 case "querylianxilist": QueryExamLianxiList(context); break; //查询单个练习考试 case "querylianxiresult": QueryExamLianxiResult(context); break; //查询单个练习考试详情 case "querylianxidetails": QueryLianxiResultDetail(context); break; //保存理论缓存 case "savetheorycache": SaveTheoryCache(context); break; //获取理论缓存 case "gettheorycache": GetTheoryCache(context); break; //获取服务器时间 case "servertime": GetServerTime(context); break; //获取id case "getid": GetId(context); break; //获取用户 case "queryuser": QueryUser(context); break; //获取科目类别 case "GetSubjectType": GetSubjectType(context); break; default: var result = GetResult(false, "方法名不存在:" + action); context.Response.Write(result); break; } } /// /// 获取科目类别 /// /// public void GetSubjectType(HttpContext context) { var list = bll_type_manage.GetModelList(" parent_id='SubjectType' ").Select(s => s.type_name).ToList(); var result = GetResult(true, list); context.Response.Write(result); context.Response.End(); } /// /// 查询所有船型 /// /// public void ALL(HttpContext context) { var list_sign_boat = BasePage.list_sign_boat; var result = GetResult(true, list_sign_boat); context.Response.Write(result); context.Response.End(); } /// /// 查询该批次的试题列表 /// /// public void QueryTheoryListInfo(HttpContext context) { var ret = string.Empty; var batch_id = context.Request.Params["batch_id"]; if (string.IsNullOrEmpty(batch_id)) { ret = GetResult(false, "batch_id不能为空"); context.Response.Write(ret); context.Response.End(); } var exam_id = ""; var lianxi = context.Request.Params["lianxi"]; if (lianxi == "1") { var batch_lianxi = bll_lianxi_batch.GetModel(batch_id); if (null == batch_lianxi) { ret = GetResult(false, "练习批次不存在, batch_id:" + batch_id); context.Response.Write(ret); context.Response.End(); } exam_id = batch_lianxi.exam_id; } else { var batch = bll_exam_batch.GetModel(batch_id); if (null == batch) { ret = GetResult(false, "考试批次不存在, batch_id:" + batch_id); context.Response.Write(ret); context.Response.End(); } exam_id = batch.exam_id; } //question_difficult 0 判断题 1 单选题 2 多选题 3 填空题 4 简答题 var question_difficult = context.Request.Params["kind"]; //var exam = bll_examination.GetModel(batch.exam_id); var exam = bll_examination.GetModel(exam_id); var qry = "exam_id = '" + exam.id + "' "; if (!string.IsNullOrEmpty(question_difficult)) { qry = qry + " and question_difficult='" + question_difficult + "' "; } var exam_theory_list = bll_pro_exam_theory.GetModelList(qry).OrderBy(s => s.question_difficult).ThenBy(s => s.no).ToList(); List list = new List(); foreach (var item in exam_theory_list) { var obj = new theory_base_response(); obj.question_kind = item.question_kind; //obj.question_difficult = item.question_difficult; obj.per_score = item.per_score.Value; obj.no = item.no; obj.theory_base_id = item.content; #region new added var theory_base = bll_theory_base.GetModel(item.content); if (null != theory_base) { obj.question = theory_base.question; obj.answer = theory_base.answer; } #endregion list.Add(obj); } var result = GetResult(true, list); context.Response.Write(result); context.Response.End(); } /// /// 查询该批次的试题列表 /// /// public void QueryTheoryBaseInfo(HttpContext context) { var ret = string.Empty; var id = context.Request.Params["theory_base_id"]; if (string.IsNullOrEmpty(id)) { ret = GetResult(false, "id不能为空"); context.Response.Write(ret); context.Response.End(); } var theory_base = bll_theory_base.GetModel(id); if (null == theory_base) { ret = GetResult(false, "题目不存在, id:" + id); context.Response.Write(ret); context.Response.End(); } var base_item_list = bll_base_item.GetModelList("theory_base_id='" + id + "'").OrderBy(s => s.no).ToList(); List list = new List(); foreach (var item in base_item_list) { var obj = new theory_base_item_response(); obj.no = item.no.Value; obj.item_letter = item.item_letter; obj.item = item.item; list.Add(obj); } var back = new theory_base_item_response_full(); back.question = theory_base.question; back.answer = theory_base.answer; back.items = list; var result = GetResult(true, back); context.Response.Write(result); context.Response.End(); } public class theory_base_item_response_full { public string question { get; set; } public string answer { get; set; } public List items { get; set; } } /// /// 查询单个考试详情 /// /// public void QueryExamLianxiResult(HttpContext context) { // bll_batch_result var ret = string.Empty; var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var obj = bll_batch_result.GetModel(result_id); if (null == obj) { ret = GetResult(false, "考试记录不存在,result_id:" + result_id); context.Response.Write(ret); context.Response.End(); } var exam = bll_examination.GetModel(obj.exam_id); if (null != exam) { obj.pass_score = exam.pass_score; } ret = GetResult(true, obj); context.Response.Write(ret); context.Response.End(); } /// /// 查询练习考试列表 /// /// public void QueryExamLianxiList(HttpContext context) { // bll_batch_result var ret = string.Empty; var user_id = context.Request.Params["user_id"]; if (string.IsNullOrEmpty(user_id)) { ret = GetResult(false, "user_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var batch_id = context.Request.Params["batch_id"]; if (string.IsNullOrEmpty(batch_id)) { ret = GetResult(false, "batch_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var qry = string.Format("batch_id='{0}' and user_id='{1}' ", batch_id, user_id); var list = bll_batch_result.GetModelList(qry).OrderByDescending(s => s.result_id).ToList(); List list_back = new List(); foreach (var item in list) { ListLianxiRespnse obj = new ListLianxiRespnse(); obj.result_id = item.result_id; obj.examine_time = item.examine_time; obj.total = item.total; obj.score = item.score; var exam = bll_examination.GetModel(item.exam_id); if (null != exam) { obj.exam_id = exam.id; obj.exam_name = exam.exam_name; obj.pass_score = exam.pass_score; } else { obj.exam_id = item.exam_id; obj.exam_name = item.exam_name; } list_back.Add(obj); } ret = GetResult(true, list_back); context.Response.Write(ret); context.Response.End(); } public class ListLianxiRespnse { public DateTime? examine_time { get; set; } public string result_id { get; set; } public decimal total { get; set; } public decimal score { get; set; } #region 试卷id、名称、及格分数 public string exam_id { get; set; } public string exam_name { get; set; } public decimal? pass_score { get; set; } #endregion } /// /// 查询用户 /// /// public void QueryUser(HttpContext context) { var ret = string.Empty; var user_id = context.Request.Params["user_id"]; if (string.IsNullOrEmpty(user_id)) { ret = GetResult(false, "user_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var model = bll_user.GetModel(user_id); if (null == model) { ret = GetResult(false, "用户不存在,user_id:" + user_id); context.Response.Write(ret); context.Response.End(); } var user = new { user_id = model.user_id, real_name = model.real_name, login_name = model.login_name }; ret = GetResult(true, user); context.Response.Write(ret); context.Response.End(); } public void QueryLianxiResultDetail(HttpContext context) { var ret = string.Empty; var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var qry = " result_id='" + result_id + "' "; var question_difficult = context.Request.Params["question_difficult"]; if (!string.IsNullOrEmpty(question_difficult)) { qry = qry + " and question_difficult='" + question_difficult + "' "; } var data = bll_batch_result_detail.GetModelList(qry).OrderBy(s => s.question_difficult).ThenBy(s => s.no).ToList(); foreach (var item in data) { item.right_answer_desc = new List(); item.your_answer_desc = new List(); if (item.is_right == 1) { item.result_desc = "对"; } else if (item.is_right == 0) { item.result_desc = "错"; } else if (item.is_right == 2) { item.result_desc = "缺"; } if (item.kind == "填空题") { if (item.right_answer.Contains("__")) { var array = item.right_answer.Split(new string[] { "__" }, StringSplitOptions.None); foreach (var sub in array) { var temp = sub.Replace("null", "").Replace("Null", "").Replace("NULL", ""); item.right_answer_desc.Add(temp); } } else { item.right_answer_desc.Add(item.right_answer); } if (item.your_answer.Contains("__")) { var array = item.your_answer.Split(new string[] { "__" }, StringSplitOptions.None); foreach (var sub in array) { var temp = sub.Replace("null", "").Replace("Null", "").Replace("NULL", ""); item.your_answer_desc.Add(temp); } } else { item.your_answer_desc.Add(item.your_answer); } } } ret = GetResult(true, data); context.Response.Write(ret); context.Response.End(); } /// /// 保存练习考试 /// /// public void SaveTheoryExam_Lianxi(HttpContext context) { var data = context.Request.Params["data"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "data参数不能为空"); context.Response.Write(ret); context.Response.End(); } string result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var exist = bll_batch_result.GetModel(result_id); if (null!= exist) { ret = GetResult(false, "result_id:"+ result_id+",考试记录已经存在"); context.Response.Write(ret); context.Response.End(); } //参数 data: {"user_id":"USER202311160932356769","batch_id":"1716253531736","list_item_answer":"[]"} theory_result_request result_item = null; try { result_item = JsonConvert.DeserializeObject(data); } catch (Exception ex) { ret = GetResult(false, "参数data 异常:" + ex.Message); context.Response.Write(ret); context.Response.End(); } var user = bll_user.GetModel(result_item.user_id); if (null == user) { ret = GetResult(false, "用户不存在, user_id:" + result_item.user_id); context.Response.Write(ret); context.Response.End(); } var batch = bll_lianxi_batch.GetModel(result_item.batch_id); if (null == batch) { ret = GetResult(false, "考试场次不存在 ,batch_id:" + result_item.batch_id); context.Response.Write(ret); context.Response.End(); } var exam = bll_examination.GetModel(batch.exam_id); if (null == exam) { ret = GetResult(false, "试卷不存在 ,batch_id:" + result_item.batch_id + ", exam_id:" + batch.exam_id); context.Response.Write(ret); context.Response.End(); } /* var qry = string.Format("batch_id='{0}' and user_id='{1}' ", result_item.batch_id, result_item.user_id); var exist_list = bll_batch_result.GetModelList(qry); if (exist_list.Count > 0) { ret = GetResult(false, "成绩已经提交"); context.Response.Write(ret); context.Response.End(); } */ var list_answer_user = result_item.list_item_answer; var count = SaveResultScore_LianXi(result_id,user, batch, list_answer_user, out DataService.Model.pro_exam_batch_result result); if (count > 0) { ret = GetResult(true, result, ""); context.Response.Write(ret); context.Response.End(); } else { ret = GetResult(false, "保存数据失败"); context.Response.Write(ret); context.Response.End(); } } /// /// 保存理论考核 /// /// public void SaveTheoryExam(HttpContext context) { /* theory_result_request obj = new theory_result_request(); obj.user_id = "USER202311160932356769"; obj.batch_id = "1716253531736"; var list_item_answer_user = new List(); var item = new theory_item_answer(); item.theory_base_id = "1715825424604"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715411027974"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "5438"; item.your_answer = "A,D"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715760455104"; item.your_answer = "A,D"; list_item_answer_user.Add(item); obj.list_item_answer = list_item_answer_user; var json = JsonConvert.SerializeObject(obj); */ var data = context.Request.Params["data"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "data参数不能为空"); context.Response.Write(ret); context.Response.End(); } //参数 data: {"user_id":"USER202311160932356769","batch_id":"1716253531736","list_item_answer":"[]"} theory_result_request result_item = null; try { result_item = JsonConvert.DeserializeObject(data); } catch (Exception ex) { ret = GetResult(false, "参数data 异常:" + ex.Message); context.Response.Write(ret); context.Response.End(); } var user = bll_user.GetModel(result_item.user_id); if (null == user) { ret = GetResult(false, "用户不存在, user_id:" + result_item.user_id); context.Response.Write(ret); context.Response.End(); } var batch = bll_exam_batch.GetModel(result_item.batch_id); if (null == batch) { ret = GetResult(false, "考试场次不存在 ,batch_id:" + result_item.batch_id); context.Response.Write(ret); context.Response.End(); } var exam = bll_examination.GetModel(batch.exam_id); if (null == exam) { ret = GetResult(false, "试卷不存在 ,batch_id:" + result_item.batch_id + ", exam_id:" + batch.exam_id); context.Response.Write(ret); context.Response.End(); } var qry = string.Format("batch_id='{0}' and user_id='{1}' ", result_item.batch_id, result_item.user_id); var exist_list = bll_batch_result.GetModelList(qry); if (exist_list.Count > 0) { ret = GetResult(false, "成绩已经提交"); context.Response.Write(ret); context.Response.End(); } var list_answer_user = result_item.list_item_answer; var count = SaveResultScore(user, batch, list_answer_user); if (count > 0) { ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } } /// /// 保存理论考核缓存 /// /// public void SaveTheoryCache(HttpContext context) { var data = context.Request.Params["data"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "data参数不能为空"); context.Response.Write(ret); context.Response.End(); } //参数 data: {"user_id":"USER202311160932356769","batch_id":"1716253531736","list_item_answer":"[]"} theory_result_request result_item = null; try { result_item = JsonConvert.DeserializeObject(data); } catch (Exception ex) { ret = GetResult(false, "参数data 异常:" + ex.Message); context.Response.Write(ret); context.Response.End(); } var user = bll_user.GetModel(result_item.user_id); if (null == user) { ret = GetResult(false, "用户不存在, user_id:" + result_item.user_id); context.Response.Write(ret); context.Response.End(); } var batch = bll_exam_batch.GetModel(result_item.batch_id); if (null == batch) { ret = GetResult(false, "考试场次不存在 ,batch_id:" + result_item.batch_id); context.Response.Write(ret); context.Response.End(); } var qry = string.Format("batch_id='{0}' and user_id='{1}' ", result_item.batch_id, result_item.user_id); var exist_list = bll_base_cache.GetModelList(qry).OrderByDescending(s => s.start_time).ToList(); if (exist_list.Count <= 0) { var new_cache = new DataService.Model.pro_theory_base_cache(); var id = BasePage.GetId(); new_cache.id = id; new_cache.start_time = DateTime.Now; new_cache.user_id = result_item.user_id; new_cache.batch_id = result_item.batch_id; int index = 1; List list_cache_items = new List(); foreach (var item in result_item.list_item_answer) { var cache_item = new DataService.Model.pro_theory_base_cache_item(); cache_item.id = BasePage.GetNextId(id, index++); cache_item.cache_id = id; cache_item.theory_base_id = item.theory_base_id; cache_item.your_answer = item.your_answer; list_cache_items.Add(cache_item); } //添加缓存及添加缓存项 var count = bll_base_cache.BatchAddCache(new_cache, list_cache_items); if (count > 0) { ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } } else { var update_cache = exist_list[0]; var update_id = update_cache.id; int index = 1; List list_cache_items = new List(); if (result_item.list_item_answer.Count <= 0) { ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } else { foreach (var item in result_item.list_item_answer) { var cache_item = new DataService.Model.pro_theory_base_cache_item(); cache_item.id = BasePage.GetNextId(update_id, index++); cache_item.cache_id = update_id; cache_item.theory_base_id = item.theory_base_id; cache_item.your_answer = item.your_answer; list_cache_items.Add(cache_item); } //删除缓存项及添加缓存项 var count = bll_base_cache.BatchDeleteItemAddItem(update_id, list_cache_items); if (count > 0) { ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } } } /* var qry = string.Format("batch_id='{0}' and user_id='{1}' ", result_item.batch_id, result_item.user_id); var exist_list = bll_base_cache.GetModelList(qry); var new_cache = new DataService.Model.pro_theory_base_cache(); var id = BasePage.GetId(); new_cache.id = id; new_cache.start_time = DateTime.Now; new_cache.user_id = result_item.user_id; new_cache.batch_id = result_item.batch_id; int index = 1; List list_cache_items = new List(); foreach (var item in result_item.list_item_answer) { var cache_item = new DataService.Model.pro_theory_base_cache_item(); cache_item.id = BasePage.GetNextId(id, index++); cache_item.cache_id = id; cache_item.theory_base_id = item.theory_base_id; cache_item.your_answer = item.your_answer; list_cache_items.Add(cache_item); } var count = bll_base_cache.BatchDeleteAddCache(exist_list, new_cache, list_cache_items); if (count > 0) { ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } */ } /// /// 保存理论考核缓存 /// /// public void GetTheoryCache(HttpContext context) { var ret = string.Empty; var user_id = context.Request.Params["user_id"]; if (string.IsNullOrEmpty(user_id)) { ret = GetResult(false, "user_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var batch_id = context.Request.Params["batch_id"]; if (string.IsNullOrEmpty(batch_id)) { ret = GetResult(false, "batch_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } /* var user = bll_user.GetModel(result_item.user_id); if (null == user) { ret = GetResult(false, "用户不存在, user_id:" + result_item.user_id); context.Response.Write(ret); context.Response.End(); } var batch = bll_exam_batch.GetModel(result_item.batch_id); if (null == batch) { ret = GetResult(false, "考试场次不存在 ,batch_id:" + result_item.batch_id); context.Response.Write(ret); context.Response.End(); } */ var qry = string.Format("batch_id='{0}' and user_id='{1}' ", batch_id, user_id); var model = bll_base_cache.GetModelList(qry).OrderByDescending(s => s.start_time).FirstOrDefault(); if (null == model) { ret = GetResult(false, "缓存不存在!"); context.Response.Write(ret); context.Response.End(); } var list = bll_base_cache_item.GetModelList("cache_id='" + model.id + "'"); theory_result_request back = new theory_result_request(); back.user_id = user_id; back.batch_id = batch_id; back.list_item_answer = new List(); foreach (var item in list) { var answer = new theory_item_answer(); answer.theory_base_id = item.theory_base_id; answer.your_answer = item.your_answer; back.list_item_answer.Add(answer); } ret = GetResult(true, back); context.Response.Write(ret); context.Response.End(); } /// /// 保存练习考试并判分 /// /// /// /// /// public int SaveResultScore_LianXi(string result_id_ ,DataService.Model.admin_user user, DataService.Model.pro_lianxi_batch batch, List list_answer_user, out DataService.Model.pro_exam_batch_result result) { var exam = bll_examination.GetModel(batch.exam_id); List list_item_answer_user = list_answer_user; if (null == list_item_answer_user) { list_item_answer_user = new List(); #region 假数据 /* var item = new theory_item_answer(); item.theory_base_id = "1715825424604"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715411027974"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "5438"; item.your_answer = "A,D"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715760455104"; item.your_answer = "A,D"; list_item_answer_user.Add(item); */ #endregion } var list_theory_item_score_stand = bll_pro_exam_theory.QueryTheoryBaseScore(batch.exam_id); var result_insert = new DataService.Model.pro_exam_batch_result(); var list_details_Insert = new List(); var now = DateTime.Now; var result_id = result_id_; result_insert.result_id = result_id; result_insert.batch_id = batch.batch_id; //result_insert.batch_name = batch.batch_name; result_insert.batch_name = batch.subject; result_insert.r1 = "1"; result_insert.exam_id = exam.id; result_insert.exam_name = exam.exam_name; result_insert.pass_score = exam.pass_score; result_insert.user_id = user.user_id; result_insert.login_name = user.login_name; result_insert.real_name = user.real_name; result_insert.grade = user.grade; result_insert.school_id = user.school_id; var school = bll_school.GetModel(user.school_id); if (null != school) { result_insert.school = school.school; } result_insert.examine_time = now; result_insert.create_time = now; result_insert.total = decimal.Parse(exam.total_score); int index = 1; decimal total_score = 0; for (int i = 0; i < list_theory_item_score_stand.Count; i++) { var stand = list_theory_item_score_stand[i]; var model = new DataService.Model.pro_exam_batch_result_detail(); model.id = BasePage.GetNextId(result_id, index++); model.create_time = now; model.result_id = result_id; model.theory_base_id = stand.theory_base_id; model.no = stand.no; model.question = stand.question; model.kind = stand.kind; model.question_difficult = stand.question_difficult; model.right_answer = stand.answer; model.total = stand.per_score; model.score = 0; model.is_right = 0; // 正确 1:是 , 0 :否 model.your_answer = ""; var user_answer = list_item_answer_user.FirstOrDefault(s => s.theory_base_id == stand.theory_base_id); if (null != user_answer) { model.your_answer = user_answer.your_answer; if (model.kind == "多选题") { //逻辑是 //选项=答案 得满分 //选项 in 答案 得半分 //选项 not in 答案 不得分 //选项为空 不得分 var stand_full = ""; var your_full = ""; var stand_array = stand.answer.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (stand_array.Length >= 2) { stand_array = stand_array.OrderBy(s => s).ToArray(); stand_full = string.Join(",", stand_array); } else if (stand_array.Length == 1) { stand_full = stand_array[0]; } var your_array = model.your_answer.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (your_array.Length >= 2) { your_array = your_array.OrderBy(s => s).ToArray(); your_full = string.Join(",", your_array); } else if (your_array.Length == 1) { your_full = your_array[0]; } if (string.IsNullOrWhiteSpace(user_answer.your_answer)) //选项为空 不得分 { ; } //else if (user_answer.your_answer == stand.answer) //选项=答案 得满分 else if (stand_full == your_full) //选项=答案 得满分 { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } else { var all_in = true; foreach (var your in your_array) { if (!stand_array.Contains(your)) { all_in = false; break; } } if (all_in) { model.is_right = 2; //缺 //decimal half_score = stand.per_score / 2; decimal half_score = Math.Floor((stand.per_score / 2) * 1000) / 1000; model.score = half_score; total_score += half_score; } } } #region 填空题 else if (model.kind == "填空题") { if (user_answer.your_answer == stand.answer) { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } else { var array_user = user_answer.your_answer.Split(new string[] { "__" }, StringSplitOptions.None); var array_answer = stand.answer.Split(new string[] { "__" }, StringSplitOptions.None); // 或者使用 Truncate 方法 //decimal resultTruncateAlt = decimal.Truncate((num1 / num2) * 1000) / 1000; decimal tiankong_total = stand.per_score; decimal user_score = 0; if (array_user.Length == array_answer.Length) { // 舍去多余的小数位 decimal resultTruncate = Math.Floor((tiankong_total / array_user.Length) * 1000) / 1000; for (int item_index = 0; item_index < array_user.Length; item_index++) { if (array_user[item_index] == array_answer[item_index]) { user_score += resultTruncate; } } if (user_score > 0) { model.is_right = 2; } model.score = user_score; total_score += user_score; } } } else if (model.kind == "简答题") { ; } #endregion else { if (user_answer.your_answer == stand.answer) { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } } } list_details_Insert.Add(model); } //赋值总得分 result_insert.score = total_score; result = result_insert; return bll_batch_result.BatchAdd_ResultDetails(list_details_Insert, result_insert); } /// /// 保存理论考试并判分 /// /// /// /// /// public int SaveResultScore(DataService.Model.admin_user user, DataService.Model.pro_exam_batch batch, List list_answer_user) { var exam = bll_examination.GetModel(batch.exam_id); List list_item_answer_user = list_answer_user; if (null == list_item_answer_user) { list_item_answer_user = new List(); #region 假数据 /* var item = new theory_item_answer(); item.theory_base_id = "1715825424604"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715411027974"; item.your_answer = "A"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "5438"; item.your_answer = "A,D"; list_item_answer_user.Add(item); item = new theory_item_answer(); item.theory_base_id = "1715760455104"; item.your_answer = "A,D"; list_item_answer_user.Add(item); */ #endregion } var list_theory_item_score_stand = bll_pro_exam_theory.QueryTheoryBaseScore(batch.exam_id); var result_insert = new DataService.Model.pro_exam_batch_result(); var list_details_Insert = new List(); var now = DateTime.Now; var result_id = BasePage.GetId(); result_insert.result_id = result_id; result_insert.batch_id = batch.batch_id; result_insert.batch_name = batch.batch_name; result_insert.exam_id = exam.id; result_insert.exam_name = exam.exam_name; result_insert.user_id = user.user_id; result_insert.login_name = user.login_name; result_insert.real_name = user.real_name; result_insert.grade = user.grade; result_insert.school_id = user.school_id; var school = bll_school.GetModel(user.school_id); if (null != school) { result_insert.school = school.school; } result_insert.examine_time = now; result_insert.create_time = now; result_insert.total = decimal.Parse(exam.total_score); int index = 1; decimal total_score = 0; for (int i = 0; i < list_theory_item_score_stand.Count; i++) { var stand = list_theory_item_score_stand[i]; var model = new DataService.Model.pro_exam_batch_result_detail(); model.id = BasePage.GetNextId(result_id, index++); model.create_time = now; model.result_id = result_id; model.theory_base_id = stand.theory_base_id; model.no = stand.no; model.question = stand.question; model.kind = stand.kind; model.question_difficult = stand.question_difficult; model.right_answer = stand.answer; model.total = stand.per_score; model.score = 0; model.is_right = 0; // 正确 1:是 , 0 :否 model.your_answer = ""; var user_answer = list_item_answer_user.FirstOrDefault(s => s.theory_base_id == stand.theory_base_id); if (null != user_answer) { model.your_answer = user_answer.your_answer; if (model.kind == "多选题") { //逻辑是 //选项=答案 得满分 //选项 in 答案 得半分 //选项 not in 答案 不得分 //选项为空 不得分 var stand_full = ""; var your_full = ""; var stand_array = stand.answer.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (stand_array.Length >= 2) { stand_array = stand_array.OrderBy(s => s).ToArray(); stand_full = string.Join(",", stand_array); } else if (stand_array.Length == 1) { stand_full = stand_array[0]; } var your_array = model.your_answer.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (your_array.Length >= 2) { your_array = your_array.OrderBy(s => s).ToArray(); your_full = string.Join(",", your_array); } else if (your_array.Length == 1) { your_full = your_array[0]; } if (string.IsNullOrWhiteSpace(user_answer.your_answer)) //选项为空 不得分 { ; } //else if (user_answer.your_answer == stand.answer) //选项=答案 得满分 else if (stand_full == your_full) //选项=答案 得满分 { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } else { var all_in = true; foreach (var your in your_array) { if (!stand_array.Contains(your)) { all_in = false; break; } } if (all_in) { model.is_right = 2; //缺 //decimal half_score = stand.per_score / 2; decimal half_score = Math.Floor((stand.per_score / 2) * 1000) / 1000; model.score = half_score; total_score += half_score; } } } #region 填空题 else if (model.kind == "填空题") { if (user_answer.your_answer == stand.answer) { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } else { var array_user = user_answer.your_answer.Split(new string[] { "__" }, StringSplitOptions.None); var array_answer = stand.answer.Split(new string[] { "__" }, StringSplitOptions.None); // 或者使用 Truncate 方法 //decimal resultTruncateAlt = decimal.Truncate((num1 / num2) * 1000) / 1000; decimal tiankong_total = stand.per_score; decimal user_score = 0; if (array_user.Length == array_answer.Length) { // 舍去多余的小数位 decimal resultTruncate = Math.Floor((tiankong_total / array_user.Length) * 1000) / 1000; for (int item_index = 0; item_index < array_user.Length; item_index++) { if (array_user[item_index] == array_answer[item_index]) { user_score += resultTruncate; } } if (user_score > 0) { model.is_right = 2; } model.score = user_score; total_score += user_score; } } } else if (model.kind == "简答题") { ; } #endregion else { if (user_answer.your_answer == stand.answer) { model.is_right = 1; model.score = stand.per_score; total_score += stand.per_score; } } } list_details_Insert.Add(model); } //赋值总得分 result_insert.score = total_score; return bll_batch_result.BatchAdd_ResultDetails(list_details_Insert, result_insert); } /// /// 保存理论考核缓存 /// /// public void GetServerTime(HttpContext context) { var ret = string.Empty; var time = bll_exam_batch.GetServerTime(); ret = GetResult(true, time.ToString("yyyy-MM-dd HH:mm:ss"), ""); context.Response.Write(ret); context.Response.End(); } public void GetId(HttpContext context) { var id = BasePage.GetId(); var ret = GetResult(true, id, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); context.Response.Write(ret); context.Response.End(); } /// /// 理论考试成绩提交实体 /// public class theory_result_request { /// /// 用户id /// public string user_id { get; set; } /// /// 批次id /// public string batch_id { get; set; } /// /// /// public List list_item_answer { get; set; } } public class theory_item_answer { /// /// 题目id /// public string theory_base_id { get; set; } /// /// 批次id /// public string your_answer { get; set; } } /* public class batch_result_request { public string user_id { get; set; } public string batch_id { get; set; } public decimal total { get; set; } public decimal score { get; set; } } */ public class theory_base_item_response { /// /// 题干 /// /// /// 顺序编号 /// public int no { get; set; } /// /// 选项字母 /// public string item_letter { get; set; } /// /// 选项名称 /// public string item { get; set; } } public class theory_base_response { /// /// 题目id /// public string theory_base_id { get; set; } #region new added public string question { get; set; } public string answer { get; set; } #endregion /// /// 题目类型 /// public string question_kind { get; set; } /// /// 顺序编号 /// public int no { get; set; } /// /// 题目分数 /// public decimal per_score { get; set; } } public bool IsReusable { get { return false; } } } }