ComplianceServer/oldcode/WEB/Controllers/Exam/ExamController.cs

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; }
}
}
}