ZhiYeJianKang_PeiXun/Song.ServiceImpls/ExaminationCom.cs
2025-02-20 15:41:53 +08:00

1314 lines
60 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using WeiSha.Common;
using Song.Entities;
using WeiSha.Data;
using Song.ServiceInterfaces;
using System.Data.Common;
using System.Xml;
using Newtonsoft.Json;
using System.Collections.Specialized;
using System.Configuration;
namespace Song.ServiceImpls
{
public class ExaminationCom : IExamination
{
public int ExamAdd(Examination entity)
{
entity.Exam_CrtTime = DateTime.Now;
//当前考试的创建人
entity.Th_ID = Extend.LoginState.Accounts.Teacher.Th_ID;
entity.Th_Name = Extend.LoginState.Accounts.Teacher.Th_Name;
//
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null)
{
entity.Org_ID = org.Org_ID;
entity.Org_Name = org.Org_Name;
}
return Gateway.Default.Save<Examination>(entity);
}
public void ExamAdd(Examination theme, List<Examination> items, List<ExamGroup> groups)
{
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null)
{
theme.Org_ID = org.Org_ID;
theme.Org_Name = org.Org_Name;
}
theme.Exam_CrtTime = DateTime.Now;
//当前考试的创建人
if (Extend.LoginState.Accounts.Teacher != null)
{
theme.Th_ID = Extend.LoginState.Accounts.Teacher.Th_ID;
theme.Th_Name = Extend.LoginState.Accounts.Teacher.Th_Name;
}
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
if (items != null)
{
//考试主题时间
DateTime examDate = DateTime.MaxValue;
foreach (Song.Entities.Examination it in items)
{
it.Exam_DateType = theme.Exam_DateType;
if (theme.Exam_DateType == 1)
{
if (it.Exam_Date.AddYears(100) > DateTime.Now)
examDate = it.Exam_Date < examDate ? it.Exam_Date : examDate;
}
if (theme.Exam_DateType == 2)
{
it.Exam_Date = theme.Exam_Date;
it.Exam_DateOver = theme.Exam_DateOver;
}
if (it.Sbj_ID < 1) continue;
it.Exam_CrtTime = DateTime.Now;
it.Exam_Title = theme.Exam_Title;
it.Exam_GroupType = theme.Exam_GroupType;
it.Exam_IsUse = theme.Exam_IsUse;
it.Exam_IsRightClick = theme.Exam_IsRightClick;
it.Exam_IsShowBtn = theme.Exam_IsShowBtn;
it.Exam_IsToggle = theme.Exam_IsToggle;
tran.Save<Examination>(it);
}
if (theme.Exam_DateType == 1)
{
theme.Exam_Date = examDate;
theme.Exam_DateOver = examDate;
}
}
tran.Save<Examination>(theme);
if (groups != null)
{
foreach (Song.Entities.ExamGroup g in groups)
{
g.Org_ID = org.Org_ID;
g.Org_Name = org.Org_Name;
tran.Save<ExamGroup>(g);
}
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
public void ExamSave(Examination entity)
{
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
tran.Save<Examination>(entity);
tran.Update<Examination>(new Field[] { Examination._.Exam_IsUse }, new object[] { entity.Exam_IsUse }, Examination._.Exam_UID == entity.Exam_UID);
tran.Update<ExamResults>(new Field[] { ExamResults._.Exam_Name }, new object[] { entity.Exam_Name }, ExamResults._.Exam_UID == entity.Exam_UID);
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
public void ExamSave(Examination theme, List<Examination> items, List<ExamGroup> groups)
{
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
//场次
if (items != null && items.Count > 0)
{
//考试主题时间
DateTime examDate = DateTime.MaxValue;
foreach (Song.Entities.Examination it in items)
{
it.Exam_DateType = theme.Exam_DateType;
if (theme.Exam_DateType == 1)
{
if (it.Exam_Date.AddYears(100) > DateTime.Now)
examDate = it.Exam_Date < examDate ? it.Exam_Date : examDate;
}
if (theme.Exam_DateType == 2)
{
it.Exam_Date = theme.Exam_Date;
it.Exam_DateOver = theme.Exam_DateOver;
}
if (it.Sbj_ID < 1)
{
Gateway.Default.Delete<Examination>(it);
}
else
{
it.Exam_Title = theme.Exam_Title;
it.Exam_GroupType = theme.Exam_GroupType;
it.Exam_IsUse = theme.Exam_IsUse;
it.Exam_IsRightClick = theme.Exam_IsRightClick;
it.Exam_IsShowBtn = theme.Exam_IsShowBtn;
it.Exam_IsToggle = theme.Exam_IsToggle;
tran.Update<ExamResults>(new Field[] { ExamResults._.Exam_Name },
new object[] { it.Exam_Name }, ExamResults._.Exam_UID == it.Exam_UID);
tran.Save<Examination>(it);
}
}
if (theme.Exam_DateType == 1)
{
theme.Exam_Date = examDate;
theme.Exam_DateOver = examDate;
}
}
tran.Save<Examination>(theme);
//参考人员范围
tran.Delete<ExamGroup>(ExamGroup._.Exam_UID == theme.Exam_UID);
if (groups != null)
{
foreach (Song.Entities.ExamGroup g in groups)
{
tran.Save<ExamGroup>(g);
}
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
public void ExamDelete(int identify)
{
Song.Entities.Examination exam = this.ExamSingle(identify);
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
tran.Delete<Examination>(Examination._.Exam_ID == identify);
tran.Delete<Examination>(Examination._.Exam_UID == exam.Exam_UID && Examination._.Exam_IsTheme == false);
tran.Delete<ExamGroup>(ExamGroup._.Exam_UID == exam.Exam_UID);
tran.Delete<ExamResults>(ExamResults._.Exam_ID == exam.Exam_ID);
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
public Examination ExamSingle(int identify)
{
return Gateway.Default.From<Examination>().Where(Examination._.Exam_ID == identify).ToFirst<Examination>();
}
/// <summary>
/// 通过学员ID与考试ID获取成绩最好成绩
/// </summary>
/// <param name="accid"></param>
/// <param name="examid"></param>
/// <returns></returns>
public ExamResults ResultSingle(int accid, int examid)
{
WhereClip wc = new WhereClip();
wc.And(ExamResults._.Ac_ID == accid);
wc.And(ExamResults._.Exam_ID == examid);
return Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_Score.Desc).ToFirst<ExamResults>();
}
public Examination ExamSingle(string uid)
{
return Gateway.Default.From<Examination>().Where(Examination._.Exam_UID == uid && Examination._.Exam_IsTheme == true).ToFirst<Examination>();
}
/// <summary>
/// 获取单一实体对象,取最近一次考试;此处获取的是考试主题或场次
/// </summary>
/// <returns></returns>
public Examination ExamLast()
{
return Gateway.Default.From<Examination>().Where(Examination._.Exam_IsTheme == false)
.OrderBy(Examination._.Exam_Date.Desc)
.ToFirst<Examination>();
}
public ExamResults ResultClacScore(ExamResults resu)
{
return ClacScore(resu);
}
public Examination[] ExamItem(string uid)
{
return Gateway.Default.From<Examination>()
.Where(Examination._.Exam_UID == uid && Examination._.Exam_IsTheme == false)
.OrderBy(Examination._.Exam_CrtTime.Asc).ToArray<Examination>();
}
public Examination[] ExamItem(int id)
{
Song.Entities.Examination exam = this.ExamSingle(id);
if (exam == null) return null;
return this.ExamItem(exam.Exam_UID);
}
/// <summary>
/// 当前考试主题关联的学生分类
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
public StudentSort[] GroupForStudentSort(string uid)
{
//所在班组的考试
Song.Entities.StudentSort[] sts = Gateway.Default.From<StudentSort>().InnerJoin<ExamGroup>(ExamGroup._.Sts_ID == StudentSort._.Sts_ID)
.Where(ExamGroup._.Exam_UID == uid && ExamGroup._.Eg_Type == 2).ToArray<StudentSort>();
return sts;
}
public List<Examination> ExamCount(int orgid, bool? isUse, int count)
{
WhereClip wc = Examination._.Org_ID == orgid && Examination._.Exam_IsTheme == true;
if (isUse != null) wc.And(Examination._.Exam_IsUse == (bool)isUse);
count = count > 0 ? count : int.MaxValue;
Song.Entities.Examination[] all = Gateway.Default.From<Examination>().Where(wc).OrderBy(Examination._.Exam_Date.Desc).ToArray<Examination>(count);
List<Song.Entities.Examination> exams = new List<Examination>();
foreach (Song.Entities.Examination t in all)
_GetSelfExam_Add(exams, t);
return exams;
}
public List<Examination> GetSelfExam(int stid, DateTime? start, DateTime? end)
{
Song.Entities.Accounts acc = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == stid).ToFirst<Accounts>();
if (acc == null) return null;
#region
//查询条件
WhereClip wc = Examination._.Exam_IsTheme == false && Examination._.Exam_IsUse == true; //基础条件
//准时开始的条件
WhereClip wcType1 = Examination._.Exam_DateType == 1;
if (start != null) wcType1.And(Examination._.Exam_Date >= (DateTime)start);
if (end != null) wcType1.And(Examination._.Exam_Date < (DateTime)end);
//区间开始的条件
WhereClip wcType2 = Examination._.Exam_DateType == 2;
if (start != null) wcType2.And(Examination._.Exam_Date >= (DateTime)start || Examination._.Exam_DateOver > (DateTime)start);
if (end != null) wcType2.And(Examination._.Exam_DateOver < (DateTime)end);
//
WhereClip wcType = wcType1.Or(wcType2);
wc.And(wcType);
#endregion
//全员参加的考试
Song.Entities.Examination[] all = Gateway.Default.From<Examination>().Where(wc && Examination._.Exam_GroupType == 1).ToArray<Examination>();
//所在学生组的考试
Song.Entities.Examination[] group = Gateway.Default.From<Examination>().InnerJoin<ExamGroup>(ExamGroup._.Exam_UID == Examination._.Exam_UID)
.Where(wc && Examination._.Exam_GroupType == 2 && ExamGroup._.Sts_ID == acc.Sts_ID).ToArray<Examination>();
//合并到一起
List<Song.Entities.Examination> exams = new List<Examination>();
foreach (Song.Entities.Examination t in all)
_GetSelfExam_Add(exams, t);
foreach (Song.Entities.Examination t in group)
_GetSelfExam_Add(exams, t);
//排序
for (int i = 0; i < exams.Count; i++)
{
for (int j = i; j < exams.Count; j++)
{
if (exams[i].Exam_Date < exams[j].Exam_Date)
{
Song.Entities.Examination temp = exams[i];
exams[i] = exams[j];
exams[j] = temp;
}
}
}
return exams;
}
public List<Examination> GetCountExam(int stid, DateTime? start, DateTime? end, bool? isUse, int count)
{
//查询条件
WhereClip wc = Examination._.Exam_IsTheme == false && Examination._.Exam_IsUse == true;
if (isUse != null) wc.And(Examination._.Exam_IsUse == (bool)isUse);
if (start != null) wc.And(Examination._.Exam_Date >= (DateTime)start);
if (end != null) wc.And(Examination._.Exam_Date < (DateTime)end);
count = count > 0 ? count : int.MaxValue;
//全员参加的考试
Song.Entities.Examination[] all = Gateway.Default.From<Examination>().Where(wc).ToArray<Examination>();
List<Song.Entities.Examination> exams = new List<Examination>();
foreach (Song.Entities.Examination t in all)
_GetSelfExam_Add(exams, t);
//排序
for (int i = 0; i < exams.Count; i++)
{
for (int j = i; j < exams.Count; j++)
{
if (exams[i].Exam_Date > exams[j].Exam_Date)
{
Song.Entities.Examination temp = exams[i];
exams[i] = exams[j];
exams[j] = temp;
}
}
}
return exams;
}
public List<Examination> _GetSelfExam_Add(List<Examination> list, Examination exam)
{
foreach (Song.Entities.Examination t in list)
{
if (t.Exam_ID == exam.Exam_ID) return list;
}
list.Add(exam);
return list;
}
/// <summary>
/// 判断某个考试是否允许某个学生参加
/// </summary>
/// <param name="examid">考试id</param>
/// <param name="stid">学生id</param>
/// <returns></returns>
public bool ExamIsForStudent(int examid, int stid)
{
List<Examination> list = this.GetSelfExam(stid, null, null);
foreach (Song.Entities.Examination exam in list)
{
if (exam.Exam_ID == examid) return true;
}
return false;
}
public Examination[] GetPager(int orgid, DateTime? start, DateTime? end, bool? isUse, string searName, int size, int index, out int countSum)
{
WhereClip wc = Examination._.Org_ID == orgid && Examination._.Exam_IsTheme == true;
if (isUse != null) wc.And(Examination._.Exam_IsUse == (bool)isUse);
if (searName != null && searName != "") wc.And(Examination._.Exam_Title.Like("%" + searName + "%"));
if (start != null) wc.And(Examination._.Exam_Date >= (DateTime)start);
if (end != null) wc.And(Examination._.Exam_Date < (DateTime)end);
countSum = Gateway.Default.Count<Examination>(wc);
return Gateway.Default.From<Examination>().Where(wc).OrderBy(Examination._.Exam_Date.Desc && Examination._.Exam_ID.Desc).ToArray<Examination>(size, (index - 1) * size);
}
public ExamResults[] GetAttendPager(int stid, int sbjid, int orgid, string sear, int size, int index, out int countSum)
{
WhereClip wc = ExamResults._.Exr_SubmitTime > DateTime.Now.AddYears(-100);
if (stid > 0) wc.And(ExamResults._.Ac_ID == stid);
if (sbjid > 0) wc.And(ExamResults._.Sbj_ID == sbjid);
if (orgid > 0) wc.And(ExamResults._.Org_ID == orgid);
if (sear != null && sear != "") wc.And(ExamResults._.Exam_Title.Like("%" + sear + "%"));
countSum = Gateway.Default.Count<ExamResults>(wc);
ExamResults[] exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToArray<ExamResults>(size, (index - 1) * size);
for (int i = 0; i < exr.Length; i++)
{
if (exr[i].Exr_Score < 0 || exr[i].Exr_IsCalc==false)
exr[i] = ClacScore(exr[i]);
}
return exr;
}
#region
/// <summary>
/// 添加考试答题信息
/// </summary>
/// <param name="result"></param>
public ExamResults ResultAdd(ExamResults result)
{
WhereClip wc = ExamResults._.Exam_ID == result.Exam_ID && ExamResults._.Tp_Id == result.Tp_Id && ExamResults._.Ac_ID == result.Ac_ID;
Song.Entities.ExamResults exr = Gateway.Default.From<ExamResults>().Where(wc).ToFirst<ExamResults>();
if (exr != null)
{
if (exr.Exr_Results == result.Exr_Results) return exr; //如果答案与记录的相同
if (exr.Exr_IsSubmit) return exr; //如果已经交卷
Gateway.Default.Update<ExamResults>(
new Field[] { ExamResults._.Exr_Results, ExamResults._.Exr_IsSubmit, ExamResults._.Exr_IP, ExamResults._.Exr_Mac, ExamResults._.Exr_SubmitTime, ExamResults._.Exr_LastTime },
new object[] { result.Exr_Results, result.Exr_IsSubmit, result.Exr_IP, result.Exr_Mac, DateTime.Now, DateTime.Now },
ExamResults._.Exr_ID == exr.Exr_ID);
}
else
{
result.Exr_CrtTime = DateTime.Now;
result.Exr_Score = -1;
//考试主题
Examination tm = this.ExamSingle((int)result.Exam_ID);
if (tm != null)
{
result.Exam_Title = tm.Exam_Title;
result.Exam_UID = tm.Exam_UID;
result.Exam_Name = tm.Exam_Name;
}
zybPxEntities zybPxEntities = new zybPxEntities();
Song.Entities.Accounts st = Extend.LoginState.Accounts.CurrentUser;
zybPxEntities.ygId = st.Ac_ygid;
zybPxEntities.pxrName = st.Ac_Name;
zybPxEntities.enterpriseId = st.Ac_qyid;
zybPxEntities.pxDate= DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
zybPxEntities.pxfs = result.Exr_ScoreFinal.ToString();
Song.Entities.TestPaper mm = Gateway.Default.From<TestPaper>().Where(TestPaper._.Tp_Id == result.Tp_Id).ToFirst<TestPaper>();
zybPxEntities.pxkc = mm.Cou_ID.ToString();
if (result.Exr_ScoreFinal >= mm.Tp_PassScore)
{
zybPxEntities.pxStuts = "1";
}
else
{
zybPxEntities.pxStuts = "0";
}
List<zybPxEntities> zybList = new List<zybPxEntities>();
zybList.Add(zybPxEntities);
string peixun = JsonConvert.SerializeObject(zybList);
//http://36.133.51.104:8911 正式
//string str = "http://localhost:8080/dzzyb/a/zybPx/insertPx"; //测试
//string str = "http://36.133.51.104:8911/dzzyb/a/zybPx/insertPx";
string str = ConfigurationManager.AppSettings["zyb_insertPx"] + "dzzyb/a/zybPx/insertPx";
System.Net.WebClient zybTj = new System.Net.WebClient();
zybTj.Encoding = System.Text.Encoding.UTF8;
NameValueCollection nvls = new NameValueCollection();
nvls.Add("peixun", peixun);
byte[] bts = zybTj.UploadValues(str, nvls);
string message = System.Text.Encoding.UTF8.GetString(bts);
Gateway.Default.Save<ExamResults>(result);
}
return result;
}
/// <summary>
/// 保存考试答题信息
/// </summary>
/// <param name="result"></param>
public void ResultSave(ExamResults result)
{
Gateway.Default.Save<ExamResults>(result);
}
/// <summary>
/// 成绩提交
/// </summary>
/// <param name="result"></param>
public void ResultSubmit(ExamResults result)
{
Song.Entities.ExamResults exr = this.ResultSingle(result.Exam_ID, result.Tp_Id, result.Ac_ID);
if (exr == null)
{
exr = result;
exr.Exr_CrtTime = DateTime.Now;
exr.Exr_SubmitTime = DateTime.Now;
Song.Entities.Accounts st= Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID==result.Ac_ID).ToFirst<Accounts>();
Song.Entities.Organization org = Gateway.Default.From<Organization>().Where(Organization._.Org_ID == st.Org_ID).ToFirst<Organization>();
if (org != null)
{
exr.Org_ID = org.Org_ID;
exr.Org_Name = org.Org_Name;
}
}
else
{
//if (exr.Exr_Results == result.Exr_Results) return;
exr.Exr_SubmitTime = DateTime.Now;
exr.Exr_Results = result.Exr_Results;
exr.Exr_IsSubmit = result.Exr_IsSubmit;
exr.Exr_IP = result.Exr_IP;
exr.Exr_Mac = result.Exr_Mac;
}
Gateway.Default.Save<ExamResults>(exr);
}
/// <summary>
/// 删除考试成绩
/// </summary>
/// <param name="id"></param>
public void ResultDelete(int id)
{
Gateway.Default.Delete<ExamResults>(ExamResults._.Exr_ID == id);
}
/// <summary>
/// 删除某个员工的某个考试的成绩
/// </summary>
/// <param name="stid"></param>
/// <param name="examid"></param>
public void ResultDelete(int stid, int examid)
{
Examination exam = Gateway.Default.From<Examination>().Where(Examination._.Exam_ID == examid).ToFirst<Examination>();
if (exam != null)
{
string uid = string.Format("ExamResults{0}-{1}-{2}", examid, exam.Tp_Id, stid); //缓存的uid
QuestionsMethod.QuestionsCache.Singleton.Delete(uid);
//删除上传的附件
string filepath = Upload.Get["Exam"].Physics + examid + "\\" + stid + "\\";
if (System.IO.Directory.Exists(filepath)) System.IO.Directory.Delete(filepath, true);
}
WhereClip wc = new WhereClip();
if (stid > -1) wc.And(ExamResults._.Ac_ID == stid);
if (examid > -1) wc.And(ExamResults._.Exam_ID == examid);
Gateway.Default.Delete<ExamResults>(wc);
}
/// <summary>
/// 获取最新的答题信息(临时信息)
/// </summary>
/// <param name="examid">考试id</param>
/// <param name="tpid">试卷id</param>
/// <param name="accid">考生id</param>
/// <returns></returns>
public ExamResultsTemp ExamResultsTempSingle(int examid, int tpid, int accid)
{
WhereClip wc = ExamResultsTemp._.Exam_ID == examid && ExamResultsTemp._.Tp_Id == tpid && ExamResultsTemp._.Acc_Id == accid;
Song.Entities.ExamResultsTemp exr = Gateway.Default.From<ExamResultsTemp>().Where(wc).ToFirst<ExamResultsTemp>();
return exr;
}
/// <summary>
/// 获取最新的答题信息(正式答题信息),获取时并不进行计算状态的判断
/// </summary>
/// <param name="examid">考试id</param>
/// <param name="tpid">试卷id</param>
/// <param name="acid">考生id</param>
/// <returns></returns>
public ExamResults ResultSingle(int examid, int tpid, int acid)
{
WhereClip wc = new WhereClip();
if (examid > 0) wc.And(ExamResults._.Exam_ID == examid);
if (tpid > 0) wc.And(ExamResults._.Tp_Id == tpid);
if (acid > 0) wc.And(ExamResults._.Ac_ID == acid);
Song.Entities.ExamResults exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToFirst<ExamResults>();
return exr;
}
/// <summary>
/// 从缓存中获取考试答题信息
/// </summary>
/// <param name="examid"></param>
/// <param name="tpid"></param>
/// <param name="acid"></param>
/// <returns></returns>
public ExamResults ResultSingleForCache(int examid, int tpid, int acid)
{
string uid = string.Format("ExamResults{0}-{1}-{2}", examid, tpid, acid); //缓存的uid
ExamResults r = QuestionsMethod.QuestionsCache.Singleton.GetExamResults(uid);
if (r == null) r = this.ResultSingle(examid, tpid, acid);
return r;
}
/// <summary>
/// 获取当前考试的所有考生答题信息
/// </summary>
/// <param name="examid"></param>
/// <param name="count"></param>
/// <returns></returns>
public ExamResults[] ResultCount(int examid, int count)
{
WhereClip wc = new WhereClip();
if (examid > 0) wc.And(ExamResults._.Exam_ID == examid);
ExamResults[] exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToArray<ExamResults>(count);
for (int i = 0; i < exr.Length; i++)
{
if (exr[i].Exr_Score < 0 || exr[i].Exr_IsCalc == false)
exr[i] = ClacScore(exr[i]);
}
return exr;
}
/// <summary>
/// 当前考试信息中,下一个
/// </summary>
/// <param name="examid"></param>
/// <param name="stid"></param>
/// <param name="isCorrect">是否是人工判卷过的false下一个未判卷的信息</param>
/// <returns></returns>
public ExamResults ResultSingleNext(int examid, int stid, bool? isCorrect)
{
WhereClip wc = new WhereClip();
if (examid > 0) wc.And(ExamResults._.Exam_ID == examid);
if (stid > 0) wc.And(ExamResults._.Ac_ID == stid);
Song.Entities.ExamResults exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToFirst<ExamResults>();
//
Song.Entities.ExamResults next = null;
if (isCorrect != null)
{
if ((bool)isCorrect)
{
wc.And(ExamResults._.Exr_Score <= ExamResults._.Exr_ScoreFinal);
}
else
{
wc.And(ExamResults._.Exr_Score == ExamResults._.Exr_ScoreFinal);
}
}
next = Gateway.Default.From<ExamResults>()
.Where(wc && ExamResults._.Exr_CrtTime < exr.Exr_CrtTime).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToFirst<ExamResults>();
if (next != null)
{
if (next.Exr_Score < 0 || next.Exr_IsCalc == false)
next = ClacScore(exr);
}
return next;
}
public ExamResults ResultSingle(int exrid)
{
Song.Entities.ExamResults exr = Gateway.Default.From<ExamResults>().Where(ExamResults._.Exr_ID == exrid).ToFirst<ExamResults>();
if (exr != null)
{
if (exr.Exr_Score < 0 || exr.Exr_IsCalc == false)
exr = ClacScore(exr);
}
return exr;
}
/// <summary>
/// 根据答题信息,获取试题(针对答题过程中死机,又上线时)
/// </summary>
/// <returns></returns>
public List<Questions> QuesForResults(string results)
{
XmlDocument resXml = new XmlDocument();
resXml.XmlResolver = null;
resXml.LoadXml(results, false);
XmlNodeList nodeList = resXml.SelectSingleNode("results").ChildNodes;
string ids = "";
for (int i = 0; i < nodeList.Count;i++ )
{
ids += nodeList[i].Attributes["id"].Value;
if (i < nodeList.Count - 1) ids += ",";
}
string[] s = ids.Split(',');
List<Questions> quesList = new List<Questions>();
//取数据库中的题
for (int i = 0; i < s.Length; i++)
{
if (s[i].Trim() == "") continue;
int id = Convert.ToInt32(s[i]);
Song.Entities.Questions q = Gateway.Default.From<Questions>().Where(Questions._.Qus_ID == id).ToFirst<Questions>();
if (q == null) continue;
quesList.Add(q);
}
//设置该题分数
foreach (Song.Entities.Questions q in quesList)
{
for (int i = 0; i < nodeList.Count; i++)
{
double num= Convert.ToDouble(nodeList[i].Attributes["num"].Value);
int id = Convert.ToInt32(nodeList[i].Attributes["id"].Value);
if (q.Qus_ID == id)
{
q.Qus_Number = (float)num;
break;
}
}
}
return quesList;
}
#endregion
#region
/// <summary>
/// 计算当前考试成绩
/// </summary>
/// <param name="result"></param>
/// <returns></returns>
public Song.Entities.ExamResults ClacScore(ExamResults result)
{
//如果考试没有结束,且学员没有交卷,则不进行计算;
if (DateTime.Now < result.Exr_OverTime && result.Exr_IsSubmit == false) return result;
string resultXML = result.Exr_Results;
result.Exr_Score = _ClacScore(resultXML, out resultXML);
result.Exr_Results = resultXML;
//考试得分,加绘图得分,加综合评分
result.Exr_ScoreFinal = result.Exr_Score + result.Exr_Draw + result.Exr_Colligate;
result.Exr_IsCalc = true;
result.Exr_CalcTime = DateTime.Now;
//记录成绩
Field[] fields = new Field[] { ExamResults._.Exr_Score, ExamResults._.Exr_ScoreFinal, ExamResults._.Exr_IsCalc, ExamResults._.Exr_CalcTime };
object[] objs = new object[] { result.Exr_Score, result.Exr_ScoreFinal, result.Exr_IsCalc, result.Exr_CalcTime };
if (result.Exr_ID <= 0) result = ResultAdd(result);
Gateway.Default.Update<ExamResults>(fields, objs, ExamResults._.Exr_ID == result.Exr_ID);
return result;
}
/// <summary>
/// 通过答题的XML信息计算成绩
/// </summary>
/// <param name="resultXML"></param>
/// <returns></returns>
public static float _ClacScore(string resultXML,out string outXml)
{
XmlDocument resXml = new XmlDocument();
resXml.XmlResolver = null;
resXml.LoadXml(resultXML, false);
XmlNode root = resXml.LastChild;
var info = new
{
examid = Convert.ToInt32(root.Attributes["examid"].Value == null ? "0" : root.Attributes["examid"].Value),
tpid = Convert.ToInt32(root.Attributes["tpid"].Value),
stid = Convert.ToInt32(root.Attributes["stid"].Value),
stname = root.Attributes["stname"].Value,
sbjid = Convert.ToInt32(root.Attributes["sbjid"].Value),
sbjname = root.Attributes["sbjname"].Value,
patter = Convert.ToInt32(root.Attributes["patter"].Value)
};
#region
//得分记录
double score = 0;
//大题的节点
XmlNodeList quesNodes = root.ChildNodes;
for (int i = 0; i < quesNodes.Count; i++)
{
int type = Convert.ToInt32(quesNodes[i].Attributes["type"].Value);
//小题的节点
XmlNodeList qnode = quesNodes[i].ChildNodes;
((XmlElement)quesNodes[i]).SetAttribute("count",qnode.Count.ToString());
for (int j = 0; j < qnode.Count; j++)
{
//当前试题的信息id分数答案
var ques = new
{
id = Convert.ToInt32(qnode[j].Attributes["id"].Value),
num = Convert.ToDouble(qnode[j].Attributes["num"].Value),
ans = type == 1 || type == 2 || type == 3 ? qnode[j].Attributes["ans"].Value : qnode[j].InnerText
};
//是否正确
bool isSucess = Business.Do<IQuestions>().ClacQues(ques.id, ques.ans);
score += isSucess ? ques.num : 0;
((XmlElement)qnode[j]).SetAttribute("sucess", isSucess.ToString().ToLower());
((XmlElement)qnode[j]).SetAttribute("score", isSucess ? ques.num.ToString() : "0");
//如果错了,则记录为错题,以方便复习
if (!isSucess)
{
Song.Entities.Student_Ques sq = new Student_Ques();
//学生Id
sq.Ac_ID = info.stid;
//试题id与类型
sq.Qus_ID = ques.id;
sq.Qus_Type = type;
//学科
sq.Sbj_ID = info.sbjid;
////难度
//sq.Qus_Diff = qus.Qus_Diff;
Business.Do<IStudent>().QuesAdd(sq);
}
}
}
#endregion
outXml = resXml.InnerXml;
return (float)score;
}
#endregion
/// <summary>
/// 考试主题下的所有参考人员成绩
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public DataTable Result4Theme(int id)
{
return Result4Theme(id, -1);
}
/// <summary>
/// 考试主题下的所有参考人员的班组
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public StudentSort[] StudentSort4Theme(int id)
{
Examination theme = this.ExamSingle(id);
string sql = @"select distinct sts.* from studentsort as sts inner join
(select * from ExamResults where ExamResults.Exam_UID='{0}') as exr
on sts.sts_id=exr.sts_id";
sql=string.Format(sql,theme.Exam_UID);
return Gateway.Default.FromSql(sql).ToArray<StudentSort>();
}
/// <summary>
/// 考试主题下的所有参考人员成绩
/// </summary>
/// <param name="id">当前考试主题的ID</param>
/// <param name="stsid">学生分组的id为0时取所有为-1时取不在组的学员大于0则取当前组学员</param>
/// <returns></returns>
public DataTable Result4Theme(int examid, int stsid)
{
Examination theme = this.ExamSingle(examid);
Examination[] exams = this.ExamItem(theme.Exam_UID); //当前考试下的多场考试
DataTable dt = new DataTable("DataBase");
//人员id与姓名
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("姓名", typeof(string)));
dt.Columns.Add(new DataColumn("账号", typeof(string)));
dt.Columns.Add(new DataColumn("性别", typeof(string)));
dt.Columns.Add(new DataColumn("身份证", typeof(string)));
foreach (Examination ex in exams)
{
dt.Columns.Add(new DataColumn(ex.Exam_Name, Type.GetType("System.String")));
}
//取出所有的成绩
WhereClip wc = ExamResults._.Exam_UID == theme.Exam_UID;
if (stsid > 0) wc.And(ExamResults._.Sts_ID == stsid); //取所有已分组的学员
if (stsid < 0) wc.And(ExamResults._.Sts_ID <= 0); //取所有未分组的学员
ExamResults[] results = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_ScoreFinal.Desc).ToArray<ExamResults>();
//计算成绩
for (int i = 0; i < results.Length; i++)
{
if (results[i].Exr_Score < 0 || results[i].Exr_IsCalc == false)
results[i] = ClacScore(results[i]);
}
foreach (ExamResults er in results)
{
bool isHav = false;
for (int i = 0; i < dt.Rows.Count; i++)
{
int accid = Convert.ToInt32(dt.Rows[i]["ID"]);
if (er.Ac_ID == accid)
{
isHav = true;
break;
}
}
if (isHav == false)
{
DataRow dr = dt.NewRow();
dr["ID"] = er.Ac_ID;
dr["姓名"] = er.Ac_Name;
Accounts student = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == er.Ac_ID).ToFirst<Accounts>();
if (student != null)
{
dr["账号"] = student.Ac_AccName;
}
dr["性别"] = er.Ac_Sex == 0 ? "未知" : (er.Ac_Sex == 1 ? "男" : "女");
dr["身份证"] = er.Ac_IDCardNumber;
dt.Rows.Add(dr);
}
}
foreach (Examination ex in exams)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
int accid = Convert.ToInt32(dt.Rows[i]["ID"]);
foreach (ExamResults er in results)
{
if (er.Ac_ID == accid && er.Exam_ID == ex.Exam_ID)
{
double score = Math.Floor(er.Exr_ScoreFinal * 100) / 100;
//此处是两个数值(用$分隔前面是成绩后面是成绩记的id
dt.Rows[i][ex.Exam_Name] = score.ToString() + "$" + er.Exr_ID;
break;
}
}
}
}
DataView dv = dt.DefaultView;
dv.Sort = "姓名 Asc";
return dv.ToTable();
}
/// <summary>
/// 考试主题下的所有参考人员成绩
/// </summary>
/// <param name="id">当前考试主题的ID</param>
/// <param name="stsid">学生分组的id多个组用逗号分隔</param>
/// <returns></returns>
public DataTable Result4Theme(int examid, string stsid)
{
DataTable dtFirst = null;
foreach (string s in stsid.Split(','))
{
if (string.IsNullOrWhiteSpace(s)) continue;
int sid = 0;
int.TryParse(s, out sid);
//if (sid <= 0) continue;
//取每个组的学员的考试成绩
DataTable dtSecond = this.Result4Theme(examid, sid);
if (dtSecond == null) continue;
if (dtFirst == null || dtFirst.Rows.Count < 1) dtFirst = dtSecond;
if (!dtFirst.Equals(dtSecond))
{
//将两个表都存在的数据,合并
for (int i = 0; i < dtFirst.Rows.Count; i++)
{
DataRow dr1 = dtFirst.Rows[i];
foreach (DataRow dr2 in dtSecond.Rows)
{
if (dr1["ID"].ToString() == dr2["ID"].ToString())
{
for (var n = 0; n < dr1.ItemArray.Length; n++)
{
if (!string.IsNullOrWhiteSpace(dr2[n].ToString()))
dr1[n] = dr2[n];
}
}
}
}
//如果第二个表比第一个表多,则添加
foreach (DataRow dr2 in dtSecond.Rows)
{
bool isExist = false;
foreach (DataRow dr1 in dtFirst.Rows)
{
if (dr1["ID"].ToString() == dr2["ID"].ToString())
{
isExist = true;
break;
}
}
if (!isExist)
{
DataRow drnew = dtFirst.NewRow();
for (var n = 0; n < drnew.ItemArray.Length; n++)
drnew[n] = dr2[n];
dtFirst.Rows.Add(drnew);
}
}
}
}
return dtFirst;
}
/// <summary>
/// 考试主题下的所有参考人员成绩
/// </summary>
/// <param name="id"></param>
/// <param name="stsid">学生分组的id为0时取所有为-1时取不在组的学员大于0则取当前组学员</param>
/// <param name="isAll">是否取所有人员(含缺考人员),false为仅参考人员</param>
/// <returns></returns>
public DataTable Result4Theme(int id, int stsid, bool isAll)
{
if (!isAll) return Result4Theme(id, stsid);
Examination theme = this.ExamSingle(id);
Examination[] exams = this.ExamItem(theme.Exam_UID); //当前考试下的多场考试
//构建表结构
DataTable dt = new DataTable("DataBase");
//人员id与姓名
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("姓名", typeof(string)));
dt.Columns.Add(new DataColumn("账号", typeof(string)));
dt.Columns.Add(new DataColumn("性别", typeof(string)));
dt.Columns.Add(new DataColumn("身份证", typeof(string)));
foreach (Examination ex in exams)
{
dt.Columns.Add(new DataColumn(ex.Exam_Name, typeof(string)));
}
//取学员
WhereClip wcAcc = Accounts._.Org_ID == theme.Org_ID;
if (stsid > 0) wcAcc.And(Accounts._.Sts_ID == stsid); //取所有已分组的学员
if (stsid < 0) wcAcc.And(Accounts._.Sts_ID <= 0); //取所有未分组的学员
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wcAcc).ToArray<Accounts>();
foreach (Accounts ac in accs)
{
DataRow dr = dt.NewRow();
dr["ID"] = ac.Ac_ID;
dr["姓名"] = ac.Ac_Name;
dr["账号"] = ac.Ac_AccName;
dr["性别"] = ac.Ac_Sex == 0 ? "未知" : (ac.Ac_Sex == 1 ? "男" : "女");
dr["身份证"] = ac.Ac_IDCardNumber;
dt.Rows.Add(dr);
}
//取出所有的成绩
WhereClip wcEr = ExamResults._.Exam_UID == theme.Exam_UID;
if (stsid > 0) wcEr.And(ExamResults._.Sts_ID == stsid); //取所有已分组的学员
if (stsid < 0) wcEr.And(ExamResults._.Sts_ID <= 0); //取所有未分组的学员
ExamResults[] results = Gateway.Default.From<ExamResults>().Where(wcEr).ToArray<ExamResults>();
for (int i = 0; i < results.Length; i++)
{
//如果没有计算,则计算成绩
if (results[i].Exr_Score < 0 || results[i].Exr_IsCalc == false)
results[i] = ClacScore(results[i]);
}
//遍历学员datatable向其填充考试成绩
foreach (DataRow dr in dt.Rows)
{
int accid = Convert.ToInt32(dr["ID"]);
foreach (ExamResults er in results)
{
if (er.Ac_ID == accid) dr[er.Exam_Name] = er.Exr_ScoreFinal;
}
}
//排序,优先显示已经考试的,成绩倒序显示
string order = "";
foreach (ExamResults er in results)
order += er.Exam_Name + " DESC,";
if (order.EndsWith(",")) order = order.Substring(0, order.Length - 1);
DataView dv = dt.DefaultView;
dv.Sort = order;
return dv.ToTable();
}
/// <summary>
/// 当前考试主题下的各学员分组成绩排行
/// </summary>
/// <param name="examid"></param>
/// <returns></returns>
public DataTable Result4StudentSort(int examid)
{
//当前考试下的所有学员分组
StudentSort[] sts = null;
string sql = @"select distinct sts.* from studentsort as sts inner join (select * from ExamResults where ExamResults.Exam_ID='{0}') as exr on sts.sts_id=exr.sts_id";
sql = string.Format(sql, examid.ToString());
sts = Gateway.Default.FromSql(sql).ToArray<StudentSort>();
//数据集
DataTable dt = new DataTable("DataBase");
dt.Columns.Add(new DataColumn("ID", Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("Sts_Name", Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("参训率", Type.GetType("System.Double")));
dt.Columns.Add(new DataColumn("平均分", Type.GetType("System.Double")));
foreach (StudentSort s in sts)
{
DataRow dr = dt.NewRow();
dr["ID"] = s.Sts_ID;
dr["Sts_Name"] = s.Sts_Name;
//++++++++++++++++++++++++++++++++++++++++++++ 平均分
object avgobj = Gateway.Default.Avg<ExamResults>(ExamResults._.Exr_ScoreFinal, ExamResults._.Sts_ID == s.Sts_ID);
double avg = 0;
double.TryParse(avgobj.ToString(), out avg);
dr["平均分"] = Math.Round(Math.Round(avg * 10000) / 10000, 2, MidpointRounding.AwayFromZero);
//++++++++++++++++++++++++++++++++++++++++++++ 参训度,当前分组参加考试的比率
double attend = 0;
//当前分组学员数量
int stTotal = Gateway.Default.Count<Accounts>(Accounts._.Sts_ID == s.Sts_ID);
if (stTotal <= 0) dr["参训率"] = 0;
//当前分组参加考试的数量
int stCount = Gateway.Default.Count<ExamResults>(ExamResults._.Sts_ID == s.Sts_ID);
if (stCount <= 0) dr["参训率"] = 0;
attend = (double)stCount / (double)stTotal * 100;
attend = Math.Round(Math.Round(attend * 10000) / 10000, 2, MidpointRounding.AwayFromZero);
dr["参训率"] = attend > 100 ? 100 : attend;
//++++++++++++++++++++++++++++++++++++++++++++
dt.Rows.Add(dr);
}
DataView dv = dt.DefaultView;
dv.Sort = "平均分 Desc";
DataTable dt2 = dv.ToTable();
return dt2;
}
///// <summary>
///// 统计各院系在某个考试中的平均分
///// </summary>
///// <param name="id"></param>
///// <returns></returns>
//public DataTable Analysis4Depart(int id)
//{
// Examination theme = this.ExamSingle(id);
// Examination[] exams = this.ExamItem(theme.Exam_UID);
// DataTable dt = new DataTable("DataBase");
// //院系id与名称
// dt.Columns.Add(new DataColumn("Dep_Id", Type.GetType("System.Int32")));
// dt.Columns.Add(new DataColumn("院系", Type.GetType("System.String")));
// foreach (Examination ex in exams)
// dt.Columns.Add(new DataColumn(ex.Sbj_Name, Type.GetType("System.String")));
// //取出所有的成绩
// ExamResults[] results = Gateway.Default.From<ExamResults>().Where(ExamResults._.Exam_UID == theme.Exam_UID).ToArray<ExamResults>();
// for (int i = 0; i < results.Length; i++)
// {
// if (results[i].Exr_Score < 0)
// results[i] = _ClacScore(results[i]);
// }
// Song.Entities.Depart[] deps = this.GroupForDepart(theme.Exam_UID);
// if (deps.Length < 1) deps = Gateway.Default.From<Depart>().OrderBy(Depart._.Dep_Tax.Asc).ToArray<Depart>();
// foreach (Depart dep in deps)
// {
// DataRow dr = dt.NewRow();
// dr["Dep_Id"] = dep.Dep_Id;
// dr["院系"] = dep.Dep_CnName;
// dt.Rows.Add(dr);
// }
// foreach (Examination ex in exams)
// {
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// int depid = Convert.ToInt32(dt.Rows[i]["Dep_Id"]);
// double score = 0;
// int tmNum = 0;
// foreach (ExamResults er in results)
// {
// if (er.Dep_Id == depid && er.Sbj_Name == ex.Sbj_Name)
// {
// score += (float)er.Exr_Score;
// tmNum++;
// break;
// }
// }
// double avg = tmNum == 0 ? 0 : score / tmNum;
// avg = Math.Round(avg * 100) / 100;
// dt.Rows[i][ex.Sbj_Name] = avg.ToString();
// }
// }
// return dt;
//}
///// <summary>
///// 统计各班组在某个考试中的平均分
///// </summary>
///// <param name="id"></param>
///// <returns></returns>
//public DataTable Analysis4Team(int id)
//{
// Examination theme = this.ExamSingle(id);
// Examination[] exams = this.ExamItem(theme.Exam_UID);
// DataTable dt = new DataTable("DataBase");
// //院系id与名称
// dt.Columns.Add(new DataColumn("Team_ID", Type.GetType("System.Int32")));
// dt.Columns.Add(new DataColumn("班组", Type.GetType("System.String")));
// foreach (Examination ex in exams)
// dt.Columns.Add(new DataColumn(ex.Sbj_Name, Type.GetType("System.String")));
// //取出所有的成绩
// ExamResults[] results = Gateway.Default.From<ExamResults>().Where(ExamResults._.Exam_UID == theme.Exam_UID).ToArray<ExamResults>();
// for (int i = 0; i < results.Length; i++)
// {
// if (results[i].Exr_Score < 0)
// results[i] = _ClacScore(results[i]);
// }
// Song.Entities.Team[] teams = this.GroupForTeam(theme.Exam_UID);
// foreach (Team team in teams)
// {
// DataRow dr = dt.NewRow();
// dr["Team_ID"] = team.Team_ID;
// dr["班组"] = team.Team_Name;
// dt.Rows.Add(dr);
// }
// foreach (Examination ex in exams)
// {
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// int tmid = Convert.ToInt32(dt.Rows[i]["Team_ID"]);
// double score = 0;
// int tmNum = 0;
// foreach (ExamResults er in results)
// {
// if (er.Team_ID == tmid && er.Sbj_Name == ex.Sbj_Name)
// {
// score += (float)er.Exr_Score;
// tmNum++;
// break;
// }
// }
// double avg = tmNum == 0 ? 0 : score / tmNum;
// avg = Math.Round(avg * 100) / 100;
// dt.Rows[i][ex.Sbj_Name] = avg.ToString();
// }
// }
// return dt;
//}
/// <summary>
/// 计算某个考试主题的及格率
/// </summary>
/// <param name="examid"></param>
/// <returns></returns>
public double PassRate4Theme(string uid)
{
Examination[] exam = this.ExamItem(uid);
double rate = 0;
foreach (Examination ex in exam)
{
rate += this.PassRate4Exam(ex);
}
return rate / exam.Length;
}
/// <summary>
/// 计算某场考试的及极率
/// </summary>
/// <param name="examid"></param>
/// <returns></returns>
public double PassRate4Exam(Examination exam)
{
int sum = Gateway.Default.Count<ExamResults>(ExamResults._.Exam_ID == exam.Exam_ID && ExamResults._.Exr_Score >= 0);
if (sum < 1) return 0;
TestPaper tp = Gateway.Default.From<TestPaper>().Where(TestPaper._.Tp_Id == exam.Tp_Id).ToFirst<TestPaper>();
int pass = Gateway.Default.Count<ExamResults>(ExamResults._.Exam_ID == exam.Exam_ID && ExamResults._.Exr_Score >= tp.Tp_Total * 0.6);
double s = (double)sum;
double p = (double)pass;
double rate = Math.Round(p / s * 10000) / 100;
return rate;
}
/// <summary>
/// 计算某个考试主题的平均分
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
public double Avg4Theme(string uid)
{
Examination[] exam = this.ExamItem(uid);
double avg = 0;
foreach (Examination ex in exam)
{
avg += this.Avg4Exam(ex.Exam_ID);
}
return avg / exam.Length;
}
/// <summary>
/// 计算某场考试的平均分
/// </summary>
/// <param name="exam"></param>
/// <returns></returns>
public double Avg4Exam(int examid)
{
object obj = Gateway.Default.Avg<ExamResults>(ExamResults._.Exr_Score, ExamResults._.Exam_ID == examid);
if (obj == null || obj.GetType().FullName == "System.DBNull") return 0;
double tm = obj is DBNull ? 0 : Convert.ToDouble(obj);
return tm;
}
/// <summary>
/// 当前考试的参考人数
/// </summary>
/// <param name="examid"></param>
/// <returns></returns>
public int Number4Exam(int examid)
{
ExamResults[] erx = Gateway.Default.From<ExamResults>().Where(ExamResults._.Exam_ID == examid)
.SubQuery().Select(ExamResults._.Exr_ID.Sum()).GroupBy(ExamResults._.Ac_ID.Group).ToArray<ExamResults>();
//return Gateway.Default.Count<ExamResults>(ExamResults._.Exam_ID == examid);
return erx.Length;
}
public ExamResults[] Results(int examid, int size, int index, out int countSum)
{
WhereClip wc = ExamResults._.Exam_ID == examid && ExamResults._.Exr_SubmitTime > DateTime.Now.AddYears(-100);
countSum = Gateway.Default.Count<ExamResults>(wc);
ExamResults[] exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToArray<ExamResults>(size, (index - 1) * size);
for (int i = 0; i < exr.Length; i++)
{
if (exr[i].Exr_Score < 0 || exr[i].Exr_IsCalc == false)
exr[i] = ClacScore(exr[i]);
}
return exr;
}
public ExamResults[] Results(string examuid, int size, int index, out int countSum)
{
WhereClip wc = ExamResults._.Exam_UID == examuid && ExamResults._.Exr_SubmitTime > DateTime.Now.AddYears(-100);
countSum = Gateway.Default.Count<ExamResults>(wc);
ExamResults[] exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToArray<ExamResults>(size, (index - 1) * size);
for (int i = 0; i < exr.Length; i++)
{
if (exr[i].Exr_Score < 0 || exr[i].Exr_IsCalc == false)
exr[i] = ClacScore(exr[i]);
}
return exr;
}
/// <summary>
/// 当前考试场次下的所有人员成绩
/// </summary>
/// <param name="examid">考试场次id</param>
/// <param name="count">取多少条</param>
/// <returns></returns>
public ExamResults[] Results(int examid, int count)
{
WhereClip wc = ExamResults._.Exam_ID == examid && ExamResults._.Exr_SubmitTime > DateTime.Now.AddYears(-100);
ExamResults[] exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_CrtTime.Desc).ToArray<ExamResults>();
for (int i = 0; i < exr.Length; i++)
{
if (exr[i].Exr_Score < 0 || exr[i].Exr_IsCalc == false)
exr[i] = ClacScore(exr[i]);
}
exr = Gateway.Default.From<ExamResults>().Where(wc).OrderBy(ExamResults._.Exr_ScoreFinal.Desc).ToArray<ExamResults>(count);
return exr;
}
}
}