588 lines
22 KiB
C#
588 lines
22 KiB
C#
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<DataService.Model.pro_exam_batch_result> 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<string> list_result = new List<string>();
|
|
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);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 导出excel
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
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();
|
|
}
|
|
}
|
|
} |