using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Telerik.Web.UI; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespace VRS.Management.VSAT { public partial class ResultQueryExamBatch : BaseListPage { DataService.BLL.admin_user bll_user = new DataService.BLL.admin_user(); 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.pro_file bll_file = new DataService.BLL.pro_file(); protected override void Page_Load(object sender, EventArgs e) { base.Page_Load(sender, e); if (!IsPostBack) { hid_lianxi.Value = Request.Params["lianxi"]; start.SelectedDate = DateTime.Today.AddDays(-365); end.SelectedDate = DateTime.Today; var user = DataService.BLL.admin_user.load_login(); var userModel = bll_user.GetModel(user.user_id); if (bll_user.IsAdministrator(userModel)) { BindSchool(dp_school, ""); } else //老师、学校管理员 { BindSchool(dp_school, ""); dp_school.SelectedValue = userModel.school_id; dp_school.Enabled = false; var school_id = userModel.school_id; BindSchoolGrade(school_id, cbx_schoolgrade, ""); BindSchoolExamBatchFromResult(school_id, cbx_batch,"", hid_lianxi.Value); } DataLoad(); } } protected void ddp_province_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e) { BindCity(ddp_city, ddp_province.SelectedValue, ""); ddp_unit.SelectedIndex = 0; ddp_unit.Items.Clear(); DataLoad(); } protected void ddp_city_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e) { BindUnit(ddp_unit, ddp_city.SelectedValue, ""); DataLoad(); } public List GetBatchResultList() { var start_date = start.SelectedDate.HasValue ? start.SelectedDate.Value.ToString("yyyy-MM-dd") : ""; var end_date = end.SelectedDate.HasValue ? end.SelectedDate.Value.ToString("yyyy-MM-dd") : ""; if (!string.IsNullOrEmpty(end_date)) { end_date = DateTime.Parse(end_date).AddDays(1).ToString("yyyy-MM-dd"); } // 身份证号、姓名、部门、性别、科目、船型、时间联合筛选 (3列) var query = new StringBuilder(" 1 = 1 "); var user = DataService.BLL.admin_user.load_login(); var userModel = bll_user.GetModel(user.user_id); if (bll_user.IsAdministrator(userModel)) { if (!string.IsNullOrWhiteSpace(dp_school.SelectedValue)) { query.AppendFormat(" AND school_id = '{0}' ", dp_school.SelectedValue); } } else //老师、学校管理员只能看到自己的学校的 $$ { query.AppendFormat(" AND school_id = '{0}' ", userModel.school_id); } if (!string.IsNullOrWhiteSpace(cbx_schoolgrade.SelectedValue)) { query.AppendFormat(" AND grade = '{0}' ", cbx_schoolgrade.SelectedValue); } //开始时间、结束时间 if (!string.IsNullOrWhiteSpace(start_date)) { query.AppendFormat(" AND examine_time >= '{0}' ", start_date); } if (!string.IsNullOrWhiteSpace(end_date)) { query.AppendFormat(" AND examine_time < '{0}' ", end_date); } //姓名、登录账号 if (!string.IsNullOrWhiteSpace(user_name.Text.Trim())) { query.AppendFormat(" AND (login_name LIKE '%{0}%' or real_name LIKE '%{0}%' )", user_name.Text.Trim()); } //批次id if (!string.IsNullOrWhiteSpace(cbx_batch.SelectedValue)) { query.AppendFormat(" AND batch_id = '{0}' ", cbx_batch.SelectedValue); } if (hid_lianxi.Value == "1") //练习模式 { query.AppendFormat(" AND r1 = '1' "); } else { query.AppendFormat(" AND IFNULL(r1, '') != '1' "); } var where = query.ToString(); //var order = " order by result_id desc"; var list = bll_batch_result.GetModelList(where).OrderByDescending(s => s.result_id).ToList(); return list; } protected override void DataLoad() { /* var start_date = start.SelectedDate.HasValue ? start.SelectedDate.Value.ToString("yyyy-MM-dd") : ""; var end_date = end.SelectedDate.HasValue ? end.SelectedDate.Value.ToString("yyyy-MM-dd") : ""; var examine_type = 1; var data = bll.GetListDetailByName(user_name.Text, subject_name.Text, start_date, end_date, examine_type); */ /* 假数据 var data = getDataSet(); data.Rows.Clear(); var r = data.NewRow(); r["id"] = "1"; r["school"] = "常州信息职业技术学院"; r["grade"] = "信息一班"; r["real_name"] = "张璇"; r["login_name"] = "zs1345"; r["subject"] = "1#楼考试0515_下午"; r["sjms"] = "1#理论试卷"; r["total"] = "100"; r["score"] = "90"; r["create_time"] = DateTime.Parse("2024-5-15 16:20:35"); data.Rows.Add(r); r = data.NewRow(); r["id"] = "1"; r["school"] = "常州信息职业技术学院"; r["grade"] = "信息二班"; r["real_name"] = "王小兵"; r["login_name"] = "wsb2538"; r["subject"] = "2#楼考试0514_上午"; r["sjms"] = "2#理论试卷"; r["total"] = "100"; r["score"] = "85"; r["create_time"] = DateTime.Parse("2024-5-14 9:45:03"); data.Rows.Add(r); dataList.DataSource = data; dataList.Rebind(); */ var list = GetBatchResultList(); dataList.DataSource = list; dataList.Rebind(); } protected override void GridList_PageIndexChanged(object sender, GridPageChangedEventArgs e) { DataLoad(); } protected override void GridList_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e) { DataLoad(); } protected override void GridList_SortCommand(object sender, GridSortCommandEventArgs e) { DataLoad(); } protected override void GrdList_DeleteCommand(object sender, GridCommandEventArgs e) { //string Id = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["Id"].ToString(); //bll.Delete(Id); //DataLoad(); } protected override void AjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e) { } protected void btnSelect_Click(object sender, EventArgs e) { DataLoad(); } protected void btnDelete_Click(object sender, EventArgs e) { //bll.Delete(IdInput.Value); //DataLoad(); } protected void btnBatchDel_Click(object sender, EventArgs e) { var count = dataList.SelectedItems.Count; if (count <= 0) { RadAjaxManager1.Alert("请选择需要删除的记录!"); return; } List list_result = new List(); foreach (var obj in dataList.SelectedItems) { GridDataItem item = obj as GridDataItem; var result_id = item.GetDataKeyValue("result_id").ToString(); list_result.Add(result_id); } var flag = false; //批量删除 if (list_result.Count > 0) { for (int i = 0; i < list_result.Count; i++) { var result_id = list_result[i]; if (bll_batch_result.Delete(result_id)) { flag = true; bll_batch_result_detail.DeleteByResultId(result_id); //删除图片文件 var file_list = bll_file.GetModelList(" out_id='" + result_id + "' "); foreach (var item in file_list) { var url = item.file_url; try { bll_file.Delete(item.file_id); var file_dir = Server.MapPath(url); if (File.Exists(file_dir)) { File.Delete(file_dir); } } catch (Exception ex) { continue; } } } } } if (flag) { DataLoad(); } } protected void dp_school_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e) { var school_id = dp_school.SelectedValue; BindSchoolGrade(school_id, cbx_schoolgrade, ""); BindSchoolExamBatchFromResult(school_id, cbx_batch,"", hid_lianxi.Value); } /// /// 导出excel /// /// /// protected void btnExport_Click(object sender, EventArgs e) { var data = GetBatchResultList(); string filePath = Server.MapPath("~/Download/"); if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } string prefix = ""; if (hid_lianxi.Value == "1") { prefix = "练习"; } string fileName = string.Format("{0}.xls", prefix + "成绩列表_" + DateTime.Now.ToString("yyyyMMddHHmmss")); filePath = filePath + fileName; //学校 班级 姓名 账号 考试场次 试卷名称 总分 得分 考试时间 var table = new DataTable(); table.Columns.Add("学校"); table.Columns.Add("班级"); table.Columns.Add("姓名"); table.Columns.Add("账号"); if (hid_lianxi.Value == "1") { table.Columns.Add("科目名称"); } else { table.Columns.Add("考试场次"); } table.Columns.Add("试卷名称"); table.Columns.Add("总分"); table.Columns.Add("得分"); table.Columns.Add("考试时间"); for (int i = 0; i < data.Count; i++) { var row = table.NewRow(); var r = data[i]; row["学校"] = r.school; row["班级"] = r.grade; row["姓名"] = r.real_name; row["账号"] = r.login_name; if (hid_lianxi.Value == "1") { row["科目名称"] = r.batch_name; } else { row["考试场次"] = r.batch_name; } row["试卷名称"] = r.exam_name; row["总分"] = r.total; row["得分"] = r.score; row["考试时间"] = r.examine_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); table.Rows.Add(row); } #region old excel /* VRS.Util.Import.DateTableToExcel(table, filePath); FileInfo fileInfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); Response.AddHeader("Content-Length", fileInfo.Length.ToString()); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(fileInfo.FullName); //Response.BinaryWrite Response.Flush(); Response.End(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); */ #endregion var buffer = VRS.Util.Import.DateTableToExcelBytes(table); Response.AddHeader("content-disposition", "attachment;filename=" + fileName); Response.BinaryWrite(buffer); Response.Flush(); Response.End(); } protected void btnExportDetails_Click(object sender, EventArgs e) { var data = GetBatchResultList(); HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); ICellStyle style = workbook.CreateCellStyle(); style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; style.WrapText = true; //若字符串过大换行填入单元格 style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; IFont font2 = workbook.CreateFont(); font2.FontHeightInPoints = 11; font2.FontName = "微软雅黑"; style.SetFont(font2); for (int j = 0; j < data.Count; j++) { var user_result = data[j]; //ISheet sheet1 = workbook.CreateSheet(user_result.login_name + "_" + user_result.real_name); ISheet sheet1 = workbook.CreateSheet(user_result.login_name + "_" + user_result.real_name + "_" + j.ToString()); sheet1.SetColumnWidth(0, 20 * 256); sheet1.SetColumnWidth(1, 20 * 256); sheet1.SetColumnWidth(2, 90 * 256); sheet1.SetColumnWidth(3, 50 * 256); sheet1.SetColumnWidth(4, 50 * 256); var row_tit1 = sheet1.CreateRow(0);//选择第1行 var cell_tit1_1 = row_tit1.CreateCell(0);//选择第1列 cell_tit1_1.CellStyle = style; cell_tit1_1.SetCellValue("账号"); var cell_tit1_2 = row_tit1.CreateCell(1); cell_tit1_2.CellStyle = style; cell_tit1_2.SetCellValue("名称"); var cell_tit1_3 = row_tit1.CreateCell(2); cell_tit1_3.CellStyle = style; cell_tit1_3.SetCellValue("成绩"); //增加考试时间 var cell_tit1_4 = row_tit1.CreateCell(3); cell_tit1_4.CellStyle = style; cell_tit1_4.SetCellValue("时间"); var row_tit2 = sheet1.CreateRow(1);//选择第2行 var cell_tit2_1 = row_tit2.CreateCell(0); cell_tit2_1.CellStyle = style; cell_tit2_1.SetCellValue(user_result.login_name); var cell_tit2_2 = row_tit2.CreateCell(1); cell_tit2_2.CellStyle = style; cell_tit2_2.SetCellValue(user_result.real_name); var cell_tit2_3 = row_tit2.CreateCell(2); cell_tit2_3.CellStyle = style; cell_tit2_3.SetCellValue((double)user_result.score); //增加考试时间 var cell_tit2_4 = row_tit2.CreateCell(3); cell_tit2_4.CellStyle = style; cell_tit2_4.SetCellValue(user_result.examine_time.HasValue? user_result.examine_time.Value.ToString("yyyy-MM-dd HH:mm:ss"):""); //1 2 3 4 5 6 7 8 //题号 题目类型 题目 标准答案 考生答案 结果 得分 分数 var row_tit3 = sheet1.CreateRow(2);//选择第3行 var cell_tit3_1 = row_tit3.CreateCell(0);//选择第1列 cell_tit3_1.SetCellValue("题号"); cell_tit3_1.CellStyle = style; var cell_ti3_2 = row_tit3.CreateCell(1); cell_ti3_2.SetCellValue("题目类型"); cell_ti3_2.CellStyle = style; var cell_tit3_3 = row_tit3.CreateCell(2); cell_tit3_3.SetCellValue("题目"); cell_tit3_3.CellStyle = style; var cell_tit3_4 = row_tit3.CreateCell(3);//选择第1列 cell_tit3_4.SetCellValue("标准答案"); cell_tit3_4.CellStyle = style; var cell_ti3_5 = row_tit3.CreateCell(4); cell_ti3_5.SetCellValue("考生答案"); cell_ti3_5.CellStyle = style; var cell_tit3_6 = row_tit3.CreateCell(5); cell_tit3_6.SetCellValue("结果"); cell_tit3_6.CellStyle = style; var cell_ti3_7 = row_tit3.CreateCell(6); cell_ti3_7.SetCellValue("得分"); cell_ti3_7.CellStyle = style; var cell_tit3_8 = row_tit3.CreateCell(7); cell_tit3_8.SetCellValue("分数"); cell_tit3_8.CellStyle = style; var details_data = bll_batch_result_detail.GetModelList("result_id='" + user_result.result_id + "'").OrderBy(s => s.question_difficult).ThenBy(s => s.no).ToList(); var row_index = 3; for (int i = 0; i < details_data.Count; i++) { var temp = details_data[i]; var row = sheet1.CreateRow(row_index);//选择第1行 var cell1 = row.CreateCell(0); cell1.SetCellValue(temp.no); cell1.CellStyle = style; var cell2 = row.CreateCell(1); cell2.SetCellValue(temp.kind); cell2.CellStyle = style; var cell3 = row.CreateCell(2); cell3.SetCellValue(temp.question); cell3.CellStyle = style; var cell4 = row.CreateCell(3); cell4.SetCellValue(temp.right_answer); cell4.CellStyle = style; var cell5 = row.CreateCell(4); cell5.SetCellValue(temp.your_answer); cell5.CellStyle = style; var cell6 = row.CreateCell(5); var result_desc = ""; if (temp.is_right == 1) { result_desc = "对"; } else if (temp.is_right == 0) { result_desc = "错"; } else if (temp.is_right == 2) { result_desc = "缺"; } cell6.SetCellValue(result_desc); cell6.CellStyle = style; var cell7 = row.CreateCell(6); cell7.SetCellValue((double)temp.score); cell7.CellStyle = style; var cell8 = row.CreateCell(7); cell8.SetCellValue((double)temp.total); cell8.CellStyle = style; if (temp.kind=="简答题") { cell6.SetCellValue(""); cell7.SetCellValue(""); cell8.SetCellValue(""); } row_index++; } } var stream = new MemoryStream(); workbook.Write(stream); stream.Flush(); stream.Position = 0; //sheet1 = null; workbook = null; string prefix = ""; if (hid_lianxi.Value == "1") { prefix = "练习"; } var exam_name = prefix + "成绩详情_" + DateTime.Now.ToString("yyyyMMddHHmmss"); var ExcelName = exam_name + ".xls"; //文件下载 Response.Clear(); Response.Charset = "utf-8"; Response.Buffer = true; this.EnableViewState = false; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(ExcelName, System.Text.Encoding.UTF8)); Response.BinaryWrite(stream.ToArray());//通过内存流下载 Response.Flush(); Response.End(); } } }