351 lines
14 KiB
C#
351 lines
14 KiB
C#
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<decimal, string>();
|
|
var subjectList = subject.ToObject<List<subject>>();
|
|
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<EXAM_PAPER>();
|
|
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<decimal?> groupList = new List<decimal?>();
|
|
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<decimal> ALLdeptIDS = new List<decimal>();
|
|
List<decimal> ALLgidS = new List<decimal>();
|
|
UserServices userservices = new UserServices();
|
|
foreach (var item in depts)
|
|
{
|
|
List<decimal> deptIDS = new List<decimal>();
|
|
List<decimal> gidS = new List<decimal>();
|
|
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("<a href=\"javascript:parent.ChildAddTab('试卷详细', '{0}', '')\">查看</a>", "/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<EXAM_ITEMBANKSUBJECT>();
|
|
|
|
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<EXAM_PAPERSUBJECT> SingleSubject { get; set; }
|
|
public IEnumerable<EXAM_PAPERSUBJECT> ComposeSubject { get; set; }
|
|
}
|
|
|
|
}
|
|
}
|