ZhiYeJianKang_PeiXun/Song.Site/TestScene.ashx.cs

206 lines
8.1 KiB
C#
Raw Permalink Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WeiSha.Common;
using Song.ServiceInterfaces;
using Song.Entities;
namespace Song.Site
{
/// <summary>
/// 测试现场
/// </summary>
public class TestScene : BasePage
{
//当前试卷id
protected int tpid = WeiSha.Common.Request.QueryString["id"].Int32 ?? 0;
//当前学员收藏的试题
Song.Entities.Questions[] collectQues = null;
string[] types = null;
//当前试卷
Song.Entities.TestPaper pager = null;
//是否选学的当前课程
bool isStudy = false;
protected override void InitPageTemplate(HttpContext context)
{
if (!Extend.LoginState.Accounts.IsLogin)
{
context.Response.Redirect("~/student/index.ashx");
return;
}
this.Document.SetValue("tpid", tpid);
//自定义配置项
WeiSha.Common.CustomConfig config = CustomConfig.Load(Organ.Org_Config);
//如果需要学员登录后才能学习
bool isTraningLogin = config["IsTraningLogin"].Value.Boolean ?? false;
this.Document.SetValue("isTraningLogin", isTraningLogin);
//当前试卷
pager = Business.Do<ITestPaper>().PagerSingle(tpid);
if (pager != null)
{
this.Document.SetValue("pager", pager);
this.Document.SetValue("path", Upload.Get["TestPaper"].Virtual);
//是否学习当前课程
if (this.Account != null)
{
if (pager != null)
{
Song.Entities.Course cou = Business.Do<ICourse>().CourseSingle(pager.Cou_ID);
if (cou != null)
{
isStudy = Business.Do<ICourse>().StudyIsCourse(this.Account.Ac_ID, cou.Cou_ID);
this.Document.Variables.SetValue("isStudy", isStudy || cou.Cou_IsFree);
}
}
}
//唯一值
string uid = WeiSha.Common.Request.UniqueID();
this.Document.Variables.SetValue("uid", uid);
//服务器端时间
this.Document.Variables.SetValue("Time", WeiSha.Common.Server.getTime());
//试卷所属课程
Song.Entities.Course course = Business.Do<ICourse>().CourseSingle(pager.Cou_ID);
this.Document.SetValue("course", course);
//题型
this.Document.SetValue("quesType", WeiSha.Common.App.Get["QuesType"].Split(','));
//取果是第一次打开,则随机生成试题,此为获取试卷
//难度区间
int diff1 = pager.Tp_Diff > pager.Tp_Diff2 ? (int)pager.Tp_Diff2 : (int)pager.Tp_Diff;
int diff2 = pager.Tp_Diff > pager.Tp_Diff2 ? (int)pager.Tp_Diff : (int)pager.Tp_Diff2;
//开始抽题
List<Song.Entities.Questions> ques = new List<Entities.Questions>();
Dictionary<TestPaperItem, Questions[]> dic = Business.Do<ITestPaper>().Putout(pager);
foreach (var d in dic)
{
Song.Entities.Questions[] qs = (Song.Entities.Questions[])d.Value;
for (int n = 0; n < qs.Length; n++)
{
qs[n].Qus_Explain = "";
qs[n].Qus_Answer = "";
qs[n] = Extend.Questions.TranText(qs[n]);
qs[n].Qus_Title = qs[n].Qus_Title.Replace("&lt;", "<");
qs[n].Qus_Title = qs[n].Qus_Title.Replace("&gt;", ">");
qs[n].Qus_Title = Extend.Html.ClearHTML(qs[n].Qus_Title, "p", "div");
ques.Add(qs[n]);
}
}
this.Document.SetValue("ques", ques);
this.Document.RegisterGlobalFunction(this.getQuesType);
this.Document.RegisterGlobalFunction(this.AnswerItems);
this.Document.RegisterGlobalFunction(this.GetOrder);
this.Document.RegisterGlobalFunction(this.IsCollect);
}
}
/// <summary>
/// 获取试题类型
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
protected string getQuesType(object[] id)
{
int type = 0;
if (id.Length > 0)
int.TryParse(id[0].ToString(), out type);
if (types == null) types = WeiSha.Common.App.Get["QuesType"].Split(',');
if (type < 1) return null;
return types[type - 1].Trim();
}
/// <summary>
/// 计算每道试题的分数
/// </summary>
/// <param name="ques">试题</param>
/// <param name="total">试题的总分</param>
/// <returns></returns>
protected 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;
}
/// <summary>
/// 当前试题的选项,仅用于单选与多选
/// </summary>
/// <returns>0为没有子级其它有子级</returns>
protected object AnswerItems(object[] p)
{
Song.Entities.Questions qus = null;
if (p.Length > 0)
qus = (Song.Entities.Questions)p[0];
//当前试题的答案
Song.Entities.QuesAnswer[] ans = Business.Do<IQuestions>().QuestionsAnswer(qus, null);
for (int i = 0; i < ans.Length; i++)
{
ans[i] = Extend.Questions.TranText(ans[i]);
//ans[i].Ans_Context = ans[i].Ans_Context.Replace("<", "&lt;");
//ans[i].Ans_Context = ans[i].Ans_Context.Replace(">", "&gt;");
}
return ans;
}
/// <summary>
/// 试题是否被当前学员收藏
/// </summary>
/// <param name="objs"></param>
/// <returns></returns>
protected object IsCollect(object[] objs)
{
int qid = 0;
if (objs.Length > 0)
qid = Convert.ToInt32(objs[0]);
//当前收藏
if (collectQues == null)
{
if (Extend.LoginState.Accounts.IsLogin)
{
Song.Entities.Accounts st = Extend.LoginState.Accounts.CurrentUser;
collectQues = Business.Do<IStudent>().CollectAll4Ques(st.Ac_ID, 0, pager.Cou_ID, 0);
}
else
{
collectQues = Business.Do<IStudent>().CollectAll4Ques(0, 0, pager.Cou_ID, 0);
}
}
if (collectQues != null)
{
foreach (Song.Entities.Questions q in collectQues)
{
if (qid == q.Qus_ID) return true;
}
}
return false;
}
/// <summary>
/// 获取序号
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
protected object GetOrder(object[] index)
{
int tax = 0;
if (index.Length > 0)
tax = Convert.ToInt32(index[0]);
return (char)(tax - 1 + 65);
}
}
}