天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

310 lines
12 KiB

3 years ago
using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;
using AX.TrackRecord;
using System.Collections.Generic;
using AX.NetworkSystem;
using System.IO;
using System.Xml;
using System.Text;
using AX.MessageSystem;
public class MakeScoreGenerateStudentsManager : BaseItemManager {
public override void SetItemPrefab()
{
ItemPrefab = Resources.Load<GameObject>("UIPrefab/Examination/QuestionScorePrefab");
}
public override void CheckIfShowSubmitButton()
{
}
[HideInInspector]
public GameObject EditSaveBtn;
[HideInInspector]
public GameObject EditGiveUpBtn;
public override void Awake()
{
SetItemPrefab();
ParentGrid = transform.Find("StudentSelectWin/ScrollView/Viewport/Content").gameObject;
ExamNameText = transform.Find("CaptionText").GetComponent<Text>();
EditSaveBtn = transform.Find("EditSaveButton").gameObject;
EditGiveUpBtn = transform.Find("EditGiveUpButton").gameObject;
GetAnswerListFromServer();
}
void Start()
{
GenerateQuestionItem();
}
private void GetAnswerListFromServer()
{
//连接服务器,获取该场考试下该道考题的所有答案及对应考生信息,刷新到考生列表
//访问答案数据表,根据考试ID、考题ID获取答案信息列表。AnswerInfo字段跟Question字段基本一致,此处使用Question代替AnswerInfo
//因为答案列表刷新的是附带Question属性的Item
//列表每一项显示的是考生姓名
//所有的答案Xml文件下载到本地answer文件夹
//ToDo...
//ExamNameText.text = CurExam.QuestionInfos.Find(delegate (QuestionInfo q) { return q.ID == CurQuestionID; }).Name;//获取考题题目
ExamNameText.text = CurExam.QuestionInfos.Find((q) => { return q.ID == CurQuestionID; }).Name;
var ansList = CurExam.AnswerInfos;//答案列表,筛选属于该道考题的答案
exam = CurExam;
items.Clear();//将符合条件的答案数据塞入questionList
for (int i = 0; i < ansList.Count; i++)
{
if (CurQuestionID == ansList[i].QuestionID)
{
QuestionInfo question = new QuestionInfo();
question.Name = ansList[i].CreatorName;//获取该答案的考生姓名
question.FilePath = ansList[i].FilePath;//获取该答案的Xml文件路径
question.CreatorID = ansList[i].CreatorID;//获取该答案的考生ID
question.ID = ansList[i].ID;//获取该答案的答案ID
question.CreatorName = ansList[i].QuestionID.ToString();//获取该答案的考题ID
items.Add(question);
}
}
}
/// <summary>
/// 选中一条答案,开始评分
/// </summary>
public void MakeScoreButton()
{
Text funcInfo = transform.Find("MakeScoreButton").GetComponentInChildren<Text>();
GameObject AddTagBtn = GameObject.Find("Canvas").transform.Find("AddTag").gameObject;
if (funcInfo.text == "打分")
{
string filename = "Answers/" + question.ID + "/" + question.FilePath;
Record_One_root record_Load = TrackRecordHelpClass.LoadRecord_DeserializeXMLToRecord(filename);
if (!record_Load.AlreadyAnswered)
{
MessageDispatcher.SendMessage( "Operatinghints", (object)"此条没有作答");
return;
}
funcInfo.text = "保存";
AddTagBtn.SetActive(true);
//选中某一个考生,加载其答案开始打分记录
Debug.Log(CurQuestionID);
NodeSet.Instance.LoadRecordFromFile(filename);
TheBackView.instance.EndBtn.SetActive(true);
LoadManager.Instance.IsMakeScore = true;
//MakeSorceSet.instance.stopped = false;//右下时间开始计时
}
else
{
AddTagBtn.SetActive(false);
//点击保存时暂停记录
if (!LoadManager.Instance.IsPause)
{
TheBackView.instance.ZanTing();
}
GameObject TipWindow = Instantiate(Resources.Load<GameObject>("UIPrefab/TipWindow"));
TipWindow.GetComponent<TipWindowManager>().SetWindow(
"确定保存?", new UnityEngine.Events.UnityAction(OKSaveScoreButton), new UnityEngine.Events.UnityAction(NOSaveScoreButton));
}
}
/// <summary>
/// 保存评分
/// </summary>
private void OKSaveScoreButton()
{
transform.Find("MakeScoreButton").GetComponentInChildren<Text>().text = "打分";
//结束评分录制,保存Xml文件,放到本地score文件夹
//使用的是record_load
//string filename = "Scores/" + question.ID + ".xml";//该条评分Xml文件以答案ID命名(answer数据塞入了question对象中)
//自动算一下总分数
var list = LoadManager.Instance.record_Load.EventList;
int sumScore = 100;//总分0,负数值//总分改为100分
for (int i = 0; i < list.Count; i++)
{
if (list[i].eventType == eventTypeRecord.AddLoadTag || list[i].eventType == eventTypeRecord.AddGpcAUTOTag
|| list[i].eventType == eventTypeRecord.ZongJiePingPanTag)
{
var score=0;
if (list[i].eventType == eventTypeRecord.AddLoadTag)
{
if (list[i].objAttriList[0].ObjName == "")
{
score = 0;
}
else
{
score = int.Parse(list[i].objAttriList[0].ObjName);
}
}
else if (list[i].eventType == eventTypeRecord.ZongJiePingPanTag)
{
if(list[i].ScoreAttri.Count>0)
{
score = list[i].ScoreAttri[0].AllScore;
}
}
else if(list[i].eventType == eventTypeRecord.AddGpcAUTOTag)
{
if (list[i].objAttriList[0].ObjName == "")
{
score=0;
}else
{
score = int.Parse(list[i].objAttriList[0].ObjName);
}
}
sumScore += -score;
}
}
if (sumScore < 0)
{
sumScore = 0;
}
//发送评分请求
ScoreInfo scoreI = new ScoreInfo();
scoreI.FilePath = question.ID + ".xml";//评分文件用答案ID命名
scoreI.CreatorName = MySelf.mySelf.Name;
scoreI.CreatorID = MySelf.mySelf.ID;
scoreI.AnswerID = question.ID;
scoreI.QuestionID = long.Parse(question.CreatorName);
scoreI.Score = sumScore.ToString();//ToDo...
scoreI.ExaminationID = CurExam.ID;
scoreI.PaperID = CurExam.PaperID;
scoreI.ID = CheckScorIDTOXml(scoreI);
//查找
//NetworkManager.Default.SendRequestAsync("MARKING_SAVE_REQUEST", scoreI);//评分请求
for (int i = 0; i < MakeSorceSet.instance.ScoreList.Count; i++)
{
if (MakeSorceSet.instance.ScoreList[i].FilePath.Equals(scoreI.FilePath))
{
MakeSorceSet.instance.ScoreList.RemoveAt(i);
}
}
MakeSorceSet.instance.ScoreList.Add(scoreI);
//确定保存评分,调用回放结束模块
LoadManager.Instance.ExePlayBackOverEvent(true);
string filename = "Scores/" + question.ID + ".xml";
LoadManager.Instance.SubmitScore(filename);
string path = ExamInfoHelpClass.CurrentWorkPath + "/" + filename;
if (File.Exists(path))
{
CurSelectedTrans.GetComponent<MakeScoreStudentQuestionItem>().ShowBtn(true);
}
//对于已评分的考生答案项,显示查看评分按钮
//ShowViewScoreButton();
//CurSelectedTrans.gameObject.SetActive(false);
TheBackView.instance.ShowText.SetActive(false);
transform.Find("MakeScoreButton").gameObject.SetActive(false);
LoadManager.Instance.LoadTimer = 0;
}
public long CheckScorIDTOXml(ScoreInfo SCORE)
{
string path = Application.dataPath + @"/ExtendFolder/xml/" + MySelf.mySelf.ID + "/" + "SocreData.xml";
if (File.Exists(path))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNode root = xmlDoc.SelectSingleNode("ScoreAssets");
XmlNodeList nodeList = root.ChildNodes;
foreach (XmlElement elem in nodeList)
{
if (elem.Name == "Child")
{
foreach (XmlElement sore in elem)
{
if (sore.Name == "score")
{
if (sore.GetAttribute("AnwserID") == SCORE.AnswerID.ToString() && sore.GetAttribute("CreatID") == SCORE.CreatorID.ToString())
{
return long.Parse(sore.GetAttribute("ScoreID"));
}
}
}
}
}
return long.Parse("0");
}
return long.Parse("0");
}
private void ShowViewScoreButton()
{
//当前选中的已评分的项显示出查看按钮
CurSelectedTrans.Find("check").gameObject.SetActive(true);
}
public void EditSaveScoreButton()
{
OKSaveScoreButton();
GameObject.Find("Canvas").transform.Find("AddTag").gameObject.SetActive(false);
EditSaveBtn.SetActive(false);
EditGiveUpBtn.SetActive(false);
}
public void EditGiveUpButton()
{
GameObject TipWindow = Instantiate(Resources.Load<GameObject>("UIPrefab/TipWindow"));
TipWindow.GetComponent<TipWindowManager>().SetWindow(
"是否删除评分?", new UnityEngine.Events.UnityAction(OKEditScoreButton), new UnityEngine.Events.UnityAction(NOEditScoreButton));
TheBackView.instance.ZanTing();
}
private void OKEditScoreButton()
{
EditSaveBtn.SetActive(false);
EditGiveUpBtn.SetActive(false);
GameObject.Find("Canvas").transform.Find("AddTag").gameObject.SetActive(false);
TheBackView.instance.MakeSoreEnd();
}
private void NOEditScoreButton()
{
TheBackView.instance.BoFang();
}
private void NOSaveScoreButton()
{
//继续开始记录
if (LoadManager.Instance.LoadTimer != 0)
{
TheBackView.instance.BoFang();
if (GameObject.Find("Canvas").transform.Find("时间轴").gameObject.activeInHierarchy)
{
GameObject.Find("Canvas").transform.Find("AddTag").gameObject.SetActive(true);
}
}
}
public override void CheckIfHasFile(List<QuestionInfo> items)
{
//下载所有的答案文件
var fList = new List<string>();
for(int i = 0; i < items.Count; i++)
{
var filename = "Answers/" + items[i].ID + "/" + items[i].FilePath;
if (!File.Exists(ExamInfoHelpClass.CurrentWorkPath + filename))
{
fList.Add(filename);
}
}
string[] files = fList.ToArray();
if (files.Length > 0)
{
if (GameObject.Find("FileTransTipWindow"))//如果已经存在文件传输窗口,不再相应
return;
//下载文件
GameObject FileTransTipWin = Instantiate(Resources.Load<GameObject>("UIPrefab/FileTransTipWin"));
FileTransTipWin.GetComponent<FileTransTipWinManager>().SetWindow(
"Download", files, TransferType.Download);
}
}
}