641 lines
26 KiB
C#
641 lines
26 KiB
C#
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;
|
||
|
||
namespace Song.ServiceImpls
|
||
{
|
||
public class TestPaperCom : ITestPaper
|
||
{
|
||
|
||
|
||
#region ITestPaper 成员
|
||
|
||
public int PagerAdd(TestPaper entity)
|
||
{
|
||
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
|
||
if (org != null)
|
||
{
|
||
entity.Org_ID = org.Org_ID;
|
||
entity.Org_Name = org.Org_Name;
|
||
}
|
||
entity.Tp_CrtTime = DateTime.Now;
|
||
//相关联的课程名称
|
||
Course cou = Gateway.Default.From<Course>().Where(Course._.Cou_ID == entity.Cou_ID).ToFirst<Course>();
|
||
if (cou != null) entity.Cou_Name = cou.Cou_Name;
|
||
Gateway.Default.Save<TestPaper>(entity);
|
||
return entity.Tp_Id;
|
||
//if (items == null)
|
||
//{
|
||
// return Gateway.Default.Save<TestPaper>(entity);
|
||
//}
|
||
//int id = -1;
|
||
//using (DbTrans tran = Gateway.Default.BeginTrans())
|
||
// try
|
||
// {
|
||
// int sumCount = 0;
|
||
// foreach (TestPaperItem tpi in items)
|
||
// {
|
||
// tpi.Tp_UID = entity.Tp_UID;
|
||
// tran.Save<TestPaperItem>(tpi);
|
||
// sumCount += (int)tpi.TPI_Count;
|
||
// }
|
||
// entity.Tp_Count = sumCount;
|
||
// id = tran.Save<TestPaper>(entity);
|
||
// tran.Commit();
|
||
// return id;
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// tran.Rollback();
|
||
// throw ex;
|
||
// }
|
||
// finally
|
||
// {
|
||
// tran.Close();
|
||
// }
|
||
}
|
||
|
||
public void PagerSave(TestPaper entity)
|
||
{
|
||
entity.Tp_Lasttime = DateTime.Now;
|
||
//相关联的课程名称
|
||
Course cou = Gateway.Default.From<Course>().Where(Course._.Cou_ID == entity.Cou_ID).ToFirst<Course>();
|
||
if (cou != null) entity.Cou_Name = cou.Cou_Name;
|
||
using (DbTrans tran = Gateway.Default.BeginTrans())
|
||
{
|
||
try
|
||
{
|
||
tran.Save<TestPaper>(entity);
|
||
tran.Update<Examination>(new Field[] { Examination._.Exam_PassScore, Examination._.Exam_Total },
|
||
new object[] { entity.Tp_PassScore, entity.Tp_Total }, Examination._.Tp_Id == entity.Tp_Id);
|
||
tran.Commit();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
tran.Rollback();
|
||
throw ex;
|
||
}
|
||
finally
|
||
{
|
||
tran.Close();
|
||
}
|
||
}
|
||
}
|
||
|
||
public void PagerDelete(int identify)
|
||
{
|
||
using (DbTrans tran = Gateway.Default.BeginTrans())
|
||
{
|
||
try
|
||
{
|
||
Examination exam = Gateway.Default.From<Examination>().Where(Examination._.Tp_Id == identify).ToFirst<Examination>();
|
||
if (exam != null) throw new WeiSha.Common.ExceptionForPrompt("该试卷已被考试采用,不能删除");
|
||
tran.Delete<TestPaper>(TestPaper._.Tp_Id == identify);
|
||
tran.Delete<TestResults>(TestResults._.Tp_Id == identify);
|
||
tran.Commit();
|
||
}
|
||
catch
|
||
{
|
||
tran.Rollback();
|
||
throw;
|
||
}
|
||
finally
|
||
{
|
||
tran.Close();
|
||
}
|
||
}
|
||
}
|
||
|
||
public TestPaper PagerSingle(int identify)
|
||
{
|
||
TestPaper pager = Gateway.Default.From<TestPaper>().Where(TestPaper._.Tp_Id == identify).ToFirst<TestPaper>();
|
||
return pager;
|
||
}
|
||
|
||
public TestPaper PagerSingle(string name)
|
||
{
|
||
return Gateway.Default.From<TestPaper>().Where(TestPaper._.Tp_Name == name).ToFirst<TestPaper>();
|
||
}
|
||
|
||
public TestPaper[] PagerCount(int orgid, int sbjid, int couid, int diff, bool? isUse, int count)
|
||
{
|
||
WhereClip wc = TestPaper._.Tp_Id > -1;
|
||
if (orgid > 0) wc.And(TestPaper._.Org_ID == orgid);
|
||
if (sbjid > 0)
|
||
{
|
||
WhereClip wcSbjid = new WhereClip();
|
||
List<int> list = Business.Do<ISubject>().TreeID(sbjid);
|
||
foreach (int l in list)
|
||
wcSbjid.Or(TestPaper._.Sbj_ID == l);
|
||
wc.And(wcSbjid);
|
||
}
|
||
if (couid > 0) wc.And(TestPaper._.Cou_ID == couid);
|
||
if (diff > 0) wc.And(TestPaper._.Tp_Diff == diff);
|
||
if (isUse != null) wc.And(TestPaper._.Tp_IsUse == (bool)isUse);
|
||
count = count > 0 ? count : int.MaxValue;
|
||
return Gateway.Default.From<TestPaper>().Where(wc).OrderBy(TestPaper._.Tp_CrtTime.Desc).ToArray<TestPaper>(count);
|
||
}
|
||
|
||
public int PagerOfCount(int orgid, int sbjid, int couid, int diff, bool? isUse)
|
||
{
|
||
WhereClip wc = new WhereClip();
|
||
if (orgid > 0) wc.And(TestPaper._.Org_ID == orgid);
|
||
if (sbjid > 0)
|
||
{
|
||
WhereClip wcSbjid = new WhereClip();
|
||
List<int> list = Business.Do<ISubject>().TreeID(sbjid);
|
||
foreach (int l in list)
|
||
wcSbjid.Or(TestPaper._.Sbj_ID == l);
|
||
wc.And(wcSbjid);
|
||
}
|
||
if (couid > 0) wc.And(TestPaper._.Cou_ID == couid);
|
||
if (diff > 0) wc.And(TestPaper._.Tp_Diff == diff);
|
||
if (isUse != null) wc.And(TestPaper._.Tp_IsUse == (bool)isUse);
|
||
return Gateway.Default.Count<TestPaper>(wc);
|
||
}
|
||
|
||
public TestPaper[] PagerCount(string search, int orgid, int sbjid, int couid, int diff, bool? isUse, int count)
|
||
{
|
||
WhereClip wc = new WhereClip();
|
||
if (orgid > 0) wc.And(TestPaper._.Org_ID == orgid);
|
||
if (sbjid > 0)
|
||
{
|
||
WhereClip wcSbjid = new WhereClip();
|
||
List<int> list = Business.Do<ISubject>().TreeID(sbjid);
|
||
foreach (int l in list)
|
||
wcSbjid.Or(TestPaper._.Sbj_ID == l);
|
||
wc.And(wcSbjid);
|
||
}
|
||
if (couid > 0) wc.And(TestPaper._.Cou_ID == couid);
|
||
if (diff > 0) wc.And(TestPaper._.Tp_Diff == diff);
|
||
if (isUse != null) wc.And(TestPaper._.Tp_IsUse == (bool)isUse);
|
||
if (search != null && search.Trim() != "") wc.And(TestPaper._.Tp_Name.Like("%" + search + "%"));
|
||
count = count > 0 ? count : int.MaxValue;
|
||
return Gateway.Default.From<TestPaper>().Where(wc).OrderBy(TestPaper._.Tp_CrtTime.Desc).ToArray<TestPaper>(count);
|
||
}
|
||
|
||
public TestPaper[] PaperPager(int orgid, int sbjid, int couid, int diff, bool? isUse, string sear, int size, int index, out int countSum)
|
||
{
|
||
WhereClip wc = new WhereClip();
|
||
if (orgid > 0) wc &= TestPaper._.Org_ID == orgid;
|
||
if (sbjid > 0)
|
||
{
|
||
WhereClip wcSbjid = new WhereClip();
|
||
List<int> list = Business.Do<ISubject>().TreeID(sbjid);
|
||
foreach (int l in list)
|
||
wcSbjid.Or(TestPaper._.Sbj_ID == l);
|
||
wc.And(wcSbjid);
|
||
}
|
||
if (couid > 0) wc.And(TestPaper._.Cou_ID == couid);
|
||
if (diff > 0) wc.And(TestPaper._.Tp_Diff == diff);
|
||
if (isUse != null) wc.And(TestPaper._.Tp_IsUse == (bool)isUse);
|
||
if (sear != null && sear.Trim() != "") wc.And(TestPaper._.Tp_Name.Like("%" + sear + "%"));
|
||
countSum = Gateway.Default.Count<TestPaper>(wc);
|
||
return Gateway.Default.From<TestPaper>().Where(wc).OrderBy(TestPaper._.Tp_CrtTime.Desc).ToArray<TestPaper>(size, (index - 1) * size);
|
||
}
|
||
|
||
public TestPaperItem[] GetItemForAll(TestPaper tp)
|
||
{
|
||
TestPaperItem[] tpi = null;
|
||
if (tp != null && !string.IsNullOrWhiteSpace(tp.Tp_FromConfig))
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(tp.Tp_FromConfig, false);
|
||
XmlNodeList nodes = xmlDoc.SelectNodes("Config/All/Items/TestPaperItem");
|
||
tpi = new TestPaperItem[nodes.Count];
|
||
for (int i = 0; i < nodes.Count; i++)
|
||
{
|
||
tpi[i] = new TestPaperItem();
|
||
tpi[i].FromXML(nodes[i].OuterXml);
|
||
}
|
||
}
|
||
if (tpi == null)
|
||
{
|
||
tpi = Gateway.Default.From<TestPaperItem>()
|
||
.Where(TestPaperItem._.Tp_UID == tp.Tp_UID && TestPaperItem._.TPI_Count > 0)
|
||
.OrderBy(TestPaperItem._.TPI_Type.Asc)
|
||
.ToArray<TestPaperItem>();
|
||
}
|
||
return _getItemCoutomOrder(tpi);
|
||
}
|
||
/// <summary>
|
||
/// 按章节抽题时,各题型占比
|
||
/// </summary>
|
||
/// <param name="tp">试卷对象</param>
|
||
/// <returns></returns>
|
||
public TestPaperItem[] GetItemForOlPercent(TestPaper tp)
|
||
{
|
||
TestPaperItem[] tpi = null;
|
||
if (tp != null && !string.IsNullOrWhiteSpace(tp.Tp_FromConfig))
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(tp.Tp_FromConfig, false);
|
||
XmlNodeList nodes = xmlDoc.SelectNodes("Config/Outline/Percent/TestPaperItem");
|
||
tpi = new TestPaperItem[nodes.Count];
|
||
for (int i = 0; i < nodes.Count; i++)
|
||
{
|
||
tpi[i] = new TestPaperItem();
|
||
tpi[i].FromXML(nodes[i].OuterXml);
|
||
}
|
||
}
|
||
return _getItemCoutomOrder(tpi);
|
||
}
|
||
/// <summary>
|
||
/// 按章节抽题时,各章节题型数量
|
||
/// </summary>
|
||
/// <param name="tp">试卷对象</param>
|
||
/// <param name="olid">章节id,如果小于1,则取所有</param>
|
||
/// <returns></returns>
|
||
public TestPaperItem[] GetItemForOlCount(TestPaper tp, int olid)
|
||
{
|
||
List<TestPaperItem> list = new List<TestPaperItem>();
|
||
if (tp != null && !string.IsNullOrWhiteSpace(tp.Tp_FromConfig))
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(tp.Tp_FromConfig, false);
|
||
XmlNodeList nodes = xmlDoc.SelectNodes("Config/Outline/Items/TestPaperItem");
|
||
for (int i = 0; i < nodes.Count; i++)
|
||
{
|
||
TestPaperItem tpi = new TestPaperItem();
|
||
tpi.FromXML(nodes[i].OuterXml);
|
||
if (olid <= 0) list.Add(tpi);
|
||
if (olid > 0 && tpi.Ol_ID == olid) list.Add(tpi);
|
||
}
|
||
}
|
||
return _getItemCoutomOrder(list.ToArray());
|
||
}
|
||
/// <summary>
|
||
/// 返回试卷的大项,不管是按课程,还是按章节
|
||
/// </summary>
|
||
/// <param name="tp"></param>
|
||
/// <returns></returns>
|
||
public TestPaperItem[] GetItemForAny(TestPaper tp)
|
||
{
|
||
Song.Entities.TestPaperItem[] tpi = null;
|
||
List<TestPaperItem> list = new List<TestPaperItem>();
|
||
if (tp.Tp_FromType == 0)
|
||
{
|
||
tpi = this.GetItemForAll(tp);
|
||
foreach (Song.Entities.TestPaperItem t in tpi)
|
||
if (t.TPI_Count > 0) list.Add(t);
|
||
}
|
||
if (tp.Tp_FromType == 1)
|
||
{
|
||
tpi = this.GetItemForOlPercent(tp);
|
||
foreach (Song.Entities.TestPaperItem t in tpi)
|
||
if (t.TPI_Percent > 0) list.Add(t);
|
||
}
|
||
return _getItemCoutomOrder(list.ToArray());
|
||
}
|
||
/// <summary>
|
||
/// 自定义题型的出现顺序,方法比较弱智
|
||
/// </summary>
|
||
/// <param name="tpi"></param>
|
||
/// <returns></returns>
|
||
private TestPaperItem[] _getItemCoutomOrder(TestPaperItem[] tpi)
|
||
{
|
||
if (tpi == null) return tpi;
|
||
//按照自己的思路排列顺序,方法有些笨
|
||
int[] order = { 1, 2, 5, 3, 4 };
|
||
List<TestPaperItem> list = new List<TestPaperItem>();
|
||
for (int i = 0; i < order.Length; i++)
|
||
{
|
||
for (int j = 0; j < tpi.Length; j++)
|
||
{
|
||
TestPaperItem t = tpi[j];
|
||
if (order[i] == t.TPI_Type)
|
||
{
|
||
list.Add(t);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return list.ToArray();
|
||
}
|
||
#endregion
|
||
|
||
#region 出卷
|
||
/// <summary>
|
||
/// 出卷,输出试卷内容
|
||
/// </summary>
|
||
/// <param name="tp">试卷对象</param>
|
||
/// <returns></returns>
|
||
public Dictionary<TestPaperItem, Questions[]> Putout(TestPaper tp)
|
||
{
|
||
if (tp.Tp_FromType == 1)
|
||
return _putout_1(tp);
|
||
else
|
||
return _putout_0(tp);
|
||
}
|
||
/// <summary>
|
||
/// 按课程抽题组卷
|
||
/// </summary>
|
||
/// <param name="tp"></param>
|
||
/// <returns></returns>
|
||
private Dictionary<TestPaperItem, Questions[]> _putout_0(TestPaper tp)
|
||
{
|
||
//获取试题项,例如单选题、多选题
|
||
Song.Entities.TestPaperItem[] tpi = this.GetItemForAll(tp);
|
||
List<TestPaperItem> list = new List<TestPaperItem>();
|
||
foreach (Song.Entities.TestPaperItem t in tpi)
|
||
{
|
||
if (t.TPI_Count > 0) list.Add(t);
|
||
}
|
||
tpi = _getItemCoutomOrder(list.ToArray());
|
||
//开始出卷
|
||
Dictionary<TestPaperItem, Questions[]> dic = new Dictionary<TestPaperItem, Questions[]>();
|
||
foreach (Song.Entities.TestPaperItem t in tpi)
|
||
{
|
||
int type = (int)t.TPI_Type;
|
||
int count = (int)t.TPI_Count; //当前题型的试题数
|
||
float num = (float)t.TPI_Number; //当前题型占的分数
|
||
if (count < 1) continue;
|
||
//当前类型的试题
|
||
Song.Entities.Questions[] ques = Business.Do<IQuestions>().QuesRandom(tp.Org_ID, (int)tp.Sbj_ID, tp.Cou_ID, -1, type, -1, -1, true, count);
|
||
if (ques.Length < 1) continue;
|
||
ques = clacScore(ques, num);
|
||
dic.Add(t, ques);
|
||
}
|
||
return dic;
|
||
}
|
||
/// <summary>
|
||
/// 按章节抽题组卷
|
||
/// </summary>
|
||
/// <param name="tp"></param>
|
||
/// <returns></returns>
|
||
private Dictionary<TestPaperItem, Questions[]> _putout_1(TestPaper tp)
|
||
{
|
||
//获取试题项,例如单选题、多选题
|
||
Song.Entities.TestPaperItem[] tpi = this.GetItemForOlPercent(tp);
|
||
List<TestPaperItem> list = new List<TestPaperItem>();
|
||
foreach (Song.Entities.TestPaperItem t in tpi) if (t.TPI_Percent > 0) list.Add(t);
|
||
tpi = _getItemCoutomOrder(list.ToArray());
|
||
//*************** 开始抽取试题
|
||
List<Questions> listQus = new List<Questions>();
|
||
//1、获取章节
|
||
Outline[] outlines = Gateway.Default.From<Outline>().Where(Outline._.Cou_ID == tp.Cou_ID && Outline._.Ol_PID == 0).ToArray<Outline>();
|
||
foreach (Outline ol in outlines)
|
||
{
|
||
//2、取当前章节的各题型数量
|
||
TestPaperItem[] tpols = this.GetItemForOlCount(tp, ol.Ol_ID);
|
||
foreach (TestPaperItem it in tpols)
|
||
{
|
||
if (it.TPI_Count < 1) continue;
|
||
bool isExist = false;
|
||
foreach (TestPaperItem t in tpi)
|
||
{
|
||
if (it.TPI_Type == t.TPI_Type)
|
||
{
|
||
isExist = true;
|
||
continue;
|
||
}
|
||
}
|
||
if (!isExist) continue;
|
||
//3、抽取试题,并将抽到题汇集到一起,即到listQus列表中去
|
||
Questions[] ques = Business.Do<IQuestions>().QuesRandom(tp.Org_ID, -1, tp.Cou_ID, ol.Ol_ID, it.TPI_Type, -1, -1, true, it.TPI_Count);
|
||
foreach (Questions q in ques) listQus.Add(q);
|
||
}
|
||
}
|
||
//**************** 开始出卷
|
||
Dictionary<TestPaperItem, Questions[]> dic = new Dictionary<TestPaperItem, Questions[]>();
|
||
foreach (Song.Entities.TestPaperItem t in tpi)
|
||
{
|
||
float num = (float)t.TPI_Number; //当前题型占的分数
|
||
List<Questions> qusTm = new List<Questions>();
|
||
//当前类型的试题
|
||
foreach (Questions q in listQus)
|
||
{
|
||
if (q.Qus_Type == t.TPI_Type) qusTm.Add(q);
|
||
}
|
||
if (qusTm.Count < 1) continue;
|
||
Questions[] ques = clacScore(qusTm.ToArray(), num);
|
||
dic.Add(t, ques);
|
||
}
|
||
return dic;
|
||
}
|
||
/// <summary>
|
||
/// 计算每道试题的分数
|
||
/// </summary>
|
||
/// <param name="ques">试题</param>
|
||
/// <param name="total">试题的总分</param>
|
||
/// <returns></returns>
|
||
private Song.Entities.Questions[] clacScore(Song.Entities.Questions[] ques, float total)
|
||
{
|
||
float surplus = total;
|
||
for (int j = 0; j < ques.Length; j++)
|
||
{
|
||
ques[j].Qus_Explain = ques[j].Qus_Answer = ques[j].Qus_ErrorInfo = "";
|
||
ques[j] = Extend.Questions.TranText(ques[j]);
|
||
//当前试题的分数
|
||
float curr = total / ques.Length;
|
||
curr = ((float)Math.Round(curr * 10)) / 10;
|
||
if (j < ques.Length - 1)
|
||
{
|
||
ques[j].Qus_Number = curr;
|
||
surplus = surplus - curr;
|
||
}
|
||
else
|
||
{
|
||
ques[j].Qus_Number = surplus;
|
||
}
|
||
}
|
||
return ques;
|
||
}
|
||
#endregion
|
||
|
||
#region 试卷测试的答题
|
||
/// <summary>
|
||
/// 添加测试成绩,返回得分
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <returns>返回得分</returns>
|
||
public float ResultsAdd(TestResults entity)
|
||
{
|
||
entity.Tr_CrtTime = DateTime.Now;
|
||
//计算得分
|
||
float score = 0;
|
||
//
|
||
XmlDocument resXml = new XmlDocument();
|
||
string resultXML = entity.Tr_Results;
|
||
resXml.LoadXml(resultXML, false);
|
||
XmlNode xn = resXml.SelectSingleNode("results");
|
||
//是否已经计算过
|
||
if (xn.Attributes["isclac"] != null)
|
||
{
|
||
if (xn.Attributes["isclac"].Value == "true")
|
||
{
|
||
if (xn.Attributes["score"] != null)
|
||
{
|
||
score = (float)Convert.ToDouble(xn.Attributes["score"].Value);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//如果没有计算过,则在服务器端计算
|
||
entity.Tr_Score = ExaminationCom._ClacScore(resultXML, out resultXML);
|
||
entity.Tr_Results = resultXML;
|
||
score = (float)entity.Tr_Score;
|
||
}
|
||
}
|
||
Gateway.Default.Save<TestResults>(entity);
|
||
return score;
|
||
}
|
||
/// <summary>
|
||
/// 修改测试成绩,返回得分
|
||
/// </summary>
|
||
/// <param name="entity">业务实体</param>
|
||
/// <returns>返回得分</returns>
|
||
public float ResultsSave(TestResults entity)
|
||
{
|
||
return ResultsAdd(entity);
|
||
}
|
||
/// <summary>
|
||
/// 当前考试的及格率
|
||
/// </summary>
|
||
/// <param name="identify"></param>
|
||
/// <returns></returns>
|
||
public float ResultsPassrate(int identify)
|
||
{
|
||
Song.Entities.TestPaper mm = Gateway.Default.From<TestPaper>().Where(TestPaper._.Tp_Id == identify).ToFirst<TestPaper>();
|
||
//参考人次
|
||
int sum = Gateway.Default.Count<TestResults>(TestResults._.Tp_Id == identify);
|
||
//及格数
|
||
int pass = Gateway.Default.Count<TestResults>(TestResults._.Tp_Id == identify && TestResults._.Tr_Score >= mm.Tp_PassScore);
|
||
if (sum == 0) return 0;
|
||
return pass / (float)sum;
|
||
}
|
||
/// <summary>
|
||
/// 参考人次
|
||
/// </summary>
|
||
/// <param name="identify"></param>
|
||
/// <returns></returns>
|
||
public int ResultsPersontime(int identify)
|
||
{
|
||
return Gateway.Default.Count<TestResults>(TestResults._.Tp_Id == identify);
|
||
}
|
||
/// <summary>
|
||
/// 计算该试卷的所有测试的平均分
|
||
/// </summary>
|
||
/// <param name="identify"></param>
|
||
/// <returns></returns>
|
||
public float ResultsAverage(int identify)
|
||
{
|
||
object obj = Gateway.Default.Avg<TestResults>(TestResults._.Tr_Score, TestResults._.Tp_Id == identify);
|
||
if (obj == null) return 0;
|
||
float avg = 0;
|
||
float.TryParse(obj.ToString(), out avg);
|
||
return avg;
|
||
}
|
||
/// <summary>
|
||
/// 计算该试卷的所有测试的最高分
|
||
/// </summary>
|
||
/// <param name="identify"></param>
|
||
/// <returns></returns>
|
||
public TestResults ResultsHighest(int identify)
|
||
{
|
||
return Gateway.Default.From<TestResults>().Where(TestResults._.Tp_Id == identify).OrderBy(TestResults._.Tr_Score.Desc).ToFirst<TestResults>();
|
||
}
|
||
/// <summary>
|
||
/// 计算该试卷的所有测试的最低分
|
||
/// </summary>
|
||
/// <param name="identify"></param>
|
||
/// <returns></returns>
|
||
public TestResults ResultsLowest(int identify)
|
||
{
|
||
return Gateway.Default.From<TestResults>().Where(TestResults._.Tp_Id == identify).OrderBy(TestResults._.Tr_Score.Asc).ToFirst<TestResults>();
|
||
}
|
||
/// <summary>
|
||
/// 删除测试成绩,按主键ID;
|
||
/// </summary>
|
||
/// <param name="identify">实体的主键</param>
|
||
public void ResultsDelete(int identify)
|
||
{
|
||
Gateway.Default.Delete<TestResults>(TestResults._.Tr_ID == identify);
|
||
}
|
||
/// <summary>
|
||
/// 获取单一实体对象,按主键ID;
|
||
/// </summary>
|
||
/// <param name="identify">实体的主键</param>
|
||
/// <returns></returns>
|
||
public TestResults ResultsSingle(int identify)
|
||
{
|
||
return Gateway.Default.From<TestResults>().Where(TestResults._.Tr_ID == identify).ToFirst<TestResults>();
|
||
}
|
||
/// <summary>
|
||
/// 获取某员工的测试成绩
|
||
/// </summary>
|
||
/// <param name="stid"></param>
|
||
/// <param name="sbjid"></param>
|
||
/// <param name="count"></param>
|
||
/// <returns></returns>
|
||
public TestResults[] ResultsCount(int stid, int sbjid, int couid, string sear, int count)
|
||
{
|
||
WhereClip wc = TestResults._.Tr_ID > -1;
|
||
if (stid > 0) wc.And(TestResults._.Ac_ID == stid);
|
||
if (sbjid > 0) wc.And(TestResults._.Sbj_ID == sbjid);
|
||
if (couid > 0) wc.And(TestResults._.Cou_ID == couid);
|
||
if (sear != null && sear != "") wc.And(TestResults._.Tp_Name.Like("%" + sear + "%"));
|
||
return Gateway.Default.From<TestResults>().Where(wc).OrderBy(TestResults._.Tr_CrtTime.Desc).ToArray<TestResults>(count);
|
||
}
|
||
/// <summary>
|
||
/// 分页获取测试成绩
|
||
/// </summary>
|
||
/// <param name="stid"></param>
|
||
/// <param name="sbjid"></param>
|
||
/// <param name="size"></param>
|
||
/// <param name="index"></param>
|
||
/// <param name="countSum"></param>
|
||
/// <returns></returns>
|
||
public TestResults[] ResultsPager(int stid, int sbjid, int couid, int size, int index, out int countSum)
|
||
{
|
||
WhereClip wc = TestResults._.Tr_ID > -1;
|
||
if (stid > 0) wc.And(TestResults._.Ac_ID == stid);
|
||
if (sbjid > 0) wc.And(TestResults._.Sbj_ID == sbjid);
|
||
if (couid > 0) wc.And(TestResults._.Cou_ID == couid);
|
||
countSum = Gateway.Default.Count<TestResults>(wc);
|
||
return Gateway.Default.From<TestResults>().Where(wc).OrderBy(TestResults._.Tr_CrtTime.Desc).ToArray<TestResults>(size, (index - 1) * size);
|
||
}
|
||
public TestResults[] ResultsPager(int stid, int sbjid, int couid, string sear, int size, int index, out int countSum)
|
||
{
|
||
WhereClip wc = new WhereClip();
|
||
if (stid > 0) wc.And(TestResults._.Ac_ID == stid);
|
||
if (sbjid > 0) wc.And(TestResults._.Sbj_ID == sbjid);
|
||
if (couid > 0) wc.And(TestResults._.Cou_ID == couid);
|
||
if (sear != null && sear != "") wc.And(TestResults._.Tp_Name.Like("%" + sear + "%"));
|
||
countSum = Gateway.Default.Count<TestResults>(wc);
|
||
TestResults[] exr = Gateway.Default.From<TestResults>().Where(wc).OrderBy(TestResults._.Tr_CrtTime.Desc).ToArray<TestResults>(size, (index - 1) * size);
|
||
return exr;
|
||
}
|
||
/// <summary>
|
||
/// 按试卷分页返回测试成绩
|
||
/// </summary>
|
||
/// <param name="stid">学员id</param>
|
||
/// <param name="tpid">试卷id</param>
|
||
/// <param name="size"></param>
|
||
/// <param name="index"></param>
|
||
/// <param name="countSum"></param>
|
||
/// <returns></returns>
|
||
public TestResults[] ResultsPager(int stid, int tpid, int size, int index, out int countSum)
|
||
{
|
||
WhereClip wc = new WhereClip();
|
||
if (stid > 0) wc &= TestResults._.Ac_ID == stid;
|
||
if (tpid > 0) wc &= TestResults._.Tp_Id == tpid;
|
||
countSum = Gateway.Default.Count<TestResults>(wc);
|
||
TestResults[] exr = Gateway.Default.From<TestResults>().Where(wc).OrderBy(TestResults._.Tr_Score.Desc).ToArray<TestResults>(size, (index - 1) * size);
|
||
return exr;
|
||
}
|
||
#endregion
|
||
}
|
||
}
|