using Ninject; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web; using System.Web.Mvc; using WX.CRM.BLL; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.Common; using WX.CRM.IBLL.Exam; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.Exam { public class ExamController : BaseController { [Inject] public IEXAM_ITEMBANK _itembankSubject { get; set; } [Inject] public IEXAM_PAPER _paper { get; set; } [Inject] public IEXAM_PAPERSUBJECT _paperSubject { get; set; } [Inject] public ICACHE_Q _cache { get; set; } [HttpGet] public ActionResult Index() { return View(); } [HttpPost] public JsonResult Index(decimal type) { try { decimal paperId = 0; var isNew = true; //结束时间大于当前时间,然后还没有交卷,说明这个是正在进行中的考试,直接取出 var doPaper = _paper.Get(p => p.EID == Eid && p.TYPE == type && p.ENDTIME > DateTime.Now && p.HANDTIME == null); if (doPaper != null) { paperId = doPaper.ID; isNew = false; } else { paperId = _itembankSubject.GenerateExam(type, Eid); } var paper = _paper.Get(p => p.ID == paperId); var subject = _paperSubject.GetList(p => p.PAPERID == paperId); var singleSubject = subject.Where(p => p.SUBJECTTYPE == 1).OrderBy(p => p.RN); var composeSubject = subject.Where(p => p.SUBJECTTYPE == 2).OrderBy(p => p.RN); return Json(new { isNew, paper, singleSubject, composeSubject }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); } return Json(new { }, JsonRequestBehavior.AllowGet); } [HttpPost] public JsonResult Save(decimal paperId, string subject) { var answerList = new Dictionary(); var subjectList = subject.ToObject>(); foreach (var item in subjectList) { answerList.Add(item.subjectId, item.answer); } var ret = _paper.HandExamPaper(Eid, paperId, answerList); return Json(new { result = ret }, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult List() { Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("STARTTIME", "", "时间"); tab.AddHeadCol("TYPENAME", "", "类型"); tab.AddHeadCol("TITLE", "", "试卷标题"); tab.AddHeadCol("EID", "", "工号"); tab.AddHeadCol("NAME", "", "名称"); tab.AddHeadCol("SCORE", "", "分数"); tab.AddHeadCol("", "", "操作"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "20,50,100"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); return View(); } [HttpPost] public JsonResult List(Pager pager, string columns, QueryUserComboDto usercomboDto, decimal? type, DateTime? sTime, DateTime? eTime) { var where = PredicateExtensionses.True(); if (type.HasValue) { where = where.And(p => p.TYPE == type); } if (sTime.HasValue) { where = where.And(p => p.STARTTIME > sTime.Value); } if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); where = where.And(p => p.STARTTIME < eTime.Value); } if (usercomboDto.userId.HasValue) { var eid = Convert.ToDecimal(InnerUserHelper.Instance.GetEid(usercomboDto.userId)); where = where.And(p => p.EID == eid); } else { if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.ToString().Split(',')); List groupList = new List(); if (_groupids != null) { foreach (var g in _groupids) { groupList.Add(g); } } if (groupList != null) { var users = _cache.GetUserList(); var userGroup = _cache.GetList_InnerUserGroup(); var ug = userGroup.Where(p => groupList.Contains(p.GID)).Select(p => p.INNERUSERID); var eids = users.Where(p => ug.Contains(p.PKID)).Select(p => p.EID); where = where.And(p => eids.Contains(p.EID)); } } else if (!string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } var users = _cache.GetUserList(); var userGroup = _cache.GetList_InnerUserGroup(); var ug = userGroup.Where(p => (p.GID != null && ALLgidS.Contains(p.GID.Value)) || (p.DEPTID != null && ALLdeptIDS.Contains(p.DEPTID.Value))).Select(p => p.INNERUSERID); var eids = users.Where(p => ug.Contains(p.PKID)).Select(p => p.EID); where = where.And(p => eids.Contains(p.EID)); } } var list = _paper.GetList(where, p => p.ID, pager).ToList(); Table table = new Table(columns, true); foreach (var model in list) { table.AddCol(model.STARTTIME); table.AddCol(model.TYPENAME); table.AddCol(model.TITLE); table.AddCol(model.EID); table.AddCol(InnerUserHelper.Instance.GetUsername(InnerUserHelper.Instance.GetUserIdByEid(model.EID))); table.AddCol("color:red", string.Empty, model.SCORE); if (model.HANDTIME != null || model.ENDTIME < DateTime.Now) { table.AddCol(string.Format("查看", "/Exam/Exam/Show?paperId=" + model.ID)); } else { table.AddCol("考试中..."); } table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Show(decimal paperId) { var paper = _paper.Get(p => p.ID == paperId); var subject = _paperSubject.GetList(p => p.PAPERID == paperId); var singleSubject = subject.Where(p => p.SUBJECTTYPE == 1).OrderBy(p => p.RN); var composeSubject = subject.Where(p => p.SUBJECTTYPE == 2).OrderBy(p => p.RN); var model = new PaperView() { Paper = paper, SingleSubject = singleSubject, ComposeSubject = composeSubject }; return View(model); } [HttpGet] public ActionResult Import() { return View(); } [HttpPost] public JsonResult Import(HttpPostedFileBase fileData) { if (fileData != null) { try { //文件上传后的保存路径 var filePath = Server.MapPath("~/UploadFile/Exam/"); if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } var fileName = Path.GetFileName(fileData.FileName);//原始文件名称 var fileExtension = Path.GetExtension(fileName); //文件扩展名 var saveName = Guid.NewGuid() + fileExtension; //保存文件名称 fileData.SaveAs(filePath + saveName); var ret = handleImport(saveName); return Json(ret ? new { Success = true, Message = "上传成功" } : new { Success = false, Message = "上传失败" }); } catch (Exception ex) { return Json(new { Success = false, Message = ex.Message }, JsonRequestBehavior.AllowGet); } } return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet); } private bool handleImport(string file) { try { var path = AppDomain.CurrentDomain.BaseDirectory + "UploadFile\\Exam\\" + file; var dt = NPOIHelper.ImportExcelX(path); var title = dt.Rows[0][0].ToString(); var typeName = dt.Rows[0][1].ToString(); var type = 0; if (typeName == "法律法规") { type = 1; } else if (typeName == "基础知识") { type = 2; } var itembank = new EXAM_ITEMBANK() { TITLE = title, TYPE = type, TYPENAME = typeName, CREATEUSER = Eid }; //删除掉前面两行 dt.Rows.RemoveAt(0); dt.Rows.RemoveAt(0); var itembankSubject = new List(); for (int i = 0; i < dt.Rows.Count; i = i + 8) { if (dt.Rows[i][0] == null || dt.Rows[i][0].ToString() == "") { //空行跳过 i++; } if (dt.Rows[i + 1][0] != null && dt.Rows[i + 1][0].ToString() != "") { var subItem = new EXAM_ITEMBANKSUBJECT() { ITEMBANKTYPE = type, SUBJECTTYPE = 1, SUBJECT = dt.Rows[i + 1][0].ToString().Trim(), OPTIONS = dt.Rows[i + 2][0].ToString().Trim() + "##" + dt.Rows[i + 3][0].ToString().Trim() + "##" + dt.Rows[i + 4][0].ToString().Trim() + "##" + dt.Rows[i + 5][0].ToString().Trim(), RIGHTANSWER = dt.Rows[i + 6][0].ToString().Trim(), REMARK = dt.Rows[i + 7][0].ToString().Trim() }; itembankSubject.Add(subItem); } } for (int i = 0; i < dt.Rows.Count; i = i + 8) { if (dt.Rows[i][1] == null || dt.Rows[i][1].ToString() == "") { //空行跳过 i++; } if (dt.Rows[i + 1][1] != null && dt.Rows[i + 1][1].ToString() != "") { var subItem = new EXAM_ITEMBANKSUBJECT() { ITEMBANKTYPE = type, SUBJECTTYPE = 2, SUBJECT = dt.Rows[i + 1][1].ToString(), OPTIONS = dt.Rows[i + 2][1].ToString() + "##" + dt.Rows[i + 3][1].ToString() + "##" + dt.Rows[i + 4][1].ToString() + "##" + dt.Rows[i + 5][1].ToString(), RIGHTANSWER = dt.Rows[i + 6][1].ToString(), REMARK = dt.Rows[i + 7][1].ToString() }; itembankSubject.Add(subItem); } } _itembankSubject.Import(itembank, itembankSubject); return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } } public class subject { public decimal subjectId { get; set; } public string answer { get; set; } } public class PaperView { public EXAM_PAPER Paper { get; set; } public IEnumerable SingleSubject { get; set; } public IEnumerable ComposeSubject { get; set; } } } }