/// <summary> /// 答题操作 /// </summary> /// <param name="tq"></param> private void OperationQuestion(T_TradeQuestion tq) { //"TellerSystem.Client.vshost" //if (!CommonFunction.ProcessIsExist(new[] { "Platform.Launcher.exe", "Platform.Launcher.vshost.exe" })) //{ // Messenger.Default.Send("请先启动综合业务前端系统"); // return; //} // 如果已经是完成状态说明需要重做,就要先清除原来的答案 if (tq.State == QuestionState.Complete) { // bool flag = false; Messenger.Default.Send(new DialogMessage ("请选择\n\n 是:重做并删除原答案【注意:原交易本身不允许重新做的,请勿选择此选项】\n否:重做不删除原答案", result1 => { // 删除此题原答案 if (result1 == MessageBoxResult.Yes) { flag = true; // bool result = ExamHandle.TryExecute(Sql.DELETE_ANSWER, new[] { PaperData.Key, tq.Key }); if (!result) { Messenger.Default.Send("删除原答案时出现异常"); return; } // 删除原答案后需要重置此题状态为未做 tq.State = QuestionState.Normal; } // 保留原题已经做过的答案 else if (result1 == MessageBoxResult.No) { flag = true; } //不重做此题 else { } } ) { Button = MessageBoxButton.YesNoCancel, Caption = "提示", Icon = MessageBoxImage.Question }); if (!flag) { return; } } Dictionary <string, List <string> > dicQuAnswer = new Dictionary <string, List <string> >(); var resultQuTrades = ExamHandle.TryGetData(@"SELECT F_KEY,F_MENU_NO FROM T_TRADE_STA WHERE F_QUESTION_KEY =?", tq.Key); foreach (DataRow item in resultQuTrades.Rows) { var resultTradeFields = ExamHandle.TryGetData(@"SELECT F_FLDCODE FROM T_FLD_STA WHERE F_TRADESTA_KEY =? AND F_LOCATION='主界面' ", item[0].ToString()); List <string> listString = new List <string>(); foreach (DataRow ele in resultTradeFields.Rows) { listString.Add(ele[0].ToString()); } dicQuAnswer.Add(item[1].ToString(), listString); } string strQuAnswer = string.Empty; foreach (var item in dicQuAnswer) { strQuAnswer += item.Key + "=*="; foreach (var ele in item.Value) { strQuAnswer += ele + ";*;"; } strQuAnswer += "]*]"; } // 与前端系统约定A是启动考试模式 string[] strArray = new string[] { //0-题目key tq.Key, //1-题干信息 tq.Index.ToString() + "、" + tq.TitleView, //2-此刻时间 ExamHandle.GetNowDateTime().ToString(), //3-开始时间 PaperData.BeginTime.ToString(), //4-考试时长(秒) CurrentExam.Exam_Space.ToString(), //5-剩余时长 ExamClock.Second.ToString(), //6-主界面采分点 strQuAnswer }; bool istrue = _messageObject.SendMessage(strArray, CommniucationFlag.A); if (!istrue) { Messenger.Default.Send("向前端系统发送信息失败!"); return; } tq.Answer.Clear(); // 数据库删除了,本地实例也要删除 Messenger.Default.Send(Visibility.Collapsed, MessageToken.PaperVisibilityToken); }
/// <summary> /// 收到前端系统发过来的消息 /// </summary> /// <param name="flag"></param> /// <param name="receiveString"></param> private void messageObject_ReceiveMessage(CommniucationFlag flag, string[] receiveString) { switch (flag) { case CommniucationFlag.A: { if (receiveString.Length != 5) { Messenger.Default.Send("从前端系统参数传递过来的参数错误。"); return; } string questionkey = receiveString[0]; // 题主键 string MenuNo = receiveString[1]; // 交易号 string serialid = receiveString[2]; // 前端系统交易的前端流水号 /*Temp0918 * string ciphertext1 = MessageDeal(receiveString[3].Split(new string[] { "@KSXT#" }, StringSplitOptions.RemoveEmptyEntries)[0]); // 提交报文 * string ciphertext2 = MessageDeal(receiveString[4].Split(new string[] { "@KSXT#" }, StringSplitOptions.RemoveEmptyEntries)[0]); // 返回报文 * * var msg1 = new TellerSystemMessage(ciphertext1); * var msg2 = new TellerSystemMessage(ciphertext2); * * // 取附件file1是发送报文的附件,file2是接收报文的附件 * var file1 = new TellerSystemFileData(receiveString[3].Split(new string[] { "@KSXT#" }, StringSplitOptions.None)[1]); * var file2 = new TellerSystemFileData(receiveString[4].Split(new string[] { "@KSXT#" }, StringSplitOptions.None)[1]); */ Dictionary <string, string> DicMainPageData = new Dictionary <string, string>(); Dictionary <string, Dictionary <string, string> > DicChildrenPageData = new Dictionary <string, Dictionary <string, string> >(); Dictionary <string, Dictionary <string, string> > DicPrintPageData = new Dictionary <string, Dictionary <string, string> >(); { var arraySendData = receiveString[3].Split(new string[] { "%*%" }, StringSplitOptions.RemoveEmptyEntries); if (arraySendData != null && arraySendData.Length == 2) { var arrayMainPageData = arraySendData[0].Split(new string[] { "]*]" }, StringSplitOptions.RemoveEmptyEntries); if (arrayMainPageData != null && arrayMainPageData.Length > 0) { foreach (var item in arrayMainPageData) { var arrayItem = item.Split(new string[] { "=*=" }, StringSplitOptions.None); var tempKey = arrayItem[0]; var tempValue = arrayItem[1]; if (!DicMainPageData.Keys.Contains(tempKey)) { DicMainPageData.Add(tempKey, tempValue); } } } var arrayChildrenPageData = arraySendData[1].Split(new string[] { "#*#" }, StringSplitOptions.RemoveEmptyEntries); if (arrayChildrenPageData != null && arraySendData.Length > 0) { foreach (var OneChildPageData in arrayChildrenPageData) { var arrayOneChildPageData = OneChildPageData.Split(new string[] { ":*:" }, StringSplitOptions.RemoveEmptyEntries); if (arrayOneChildPageData != null && arrayOneChildPageData.Length == 2) { var ChildPageIndex = arrayOneChildPageData[0]; var OneChildPageElementDatas = arrayOneChildPageData[1]; var arrayOneChildPageElementDatas = OneChildPageElementDatas.Split(new string[] { "]*]" }, StringSplitOptions.RemoveEmptyEntries); Dictionary <string, string> OneChildPageDataDic = new Dictionary <string, string>(); if (arrayOneChildPageElementDatas != null && arrayOneChildPageElementDatas.Length > 0) { foreach (var OneChildElementGroup in arrayOneChildPageElementDatas) { var arrayOneChildElementGroup = OneChildElementGroup.Split(new string[] { "=*=" }, StringSplitOptions.None); var tempKey = arrayOneChildElementGroup[0]; var tempValue = arrayOneChildElementGroup[1]; if (!OneChildPageDataDic.Keys.Contains(tempKey)) { OneChildPageDataDic.Add(tempKey, tempValue); } } } DicChildrenPageData.Add(ChildPageIndex, OneChildPageDataDic); } } } } } { var arrayChildrenPageData = receiveString[4].Split(new string[] { "#*#" }, StringSplitOptions.RemoveEmptyEntries); if (arrayChildrenPageData != null && arrayChildrenPageData.Length > 0) { foreach (var OneChildPageData in arrayChildrenPageData) { var arrayOneChildPageData = OneChildPageData.Split(new string[] { ":*:" }, StringSplitOptions.RemoveEmptyEntries); if (arrayOneChildPageData != null && arrayOneChildPageData.Length == 2) { var ChildPageIndex = arrayOneChildPageData[0]; var OneChildPageElementDatas = arrayOneChildPageData[1]; var arrayOneChildPageElementDatas = OneChildPageElementDatas.Split(new string[] { "]*]" }, StringSplitOptions.RemoveEmptyEntries); Dictionary <string, string> OneChildPageDataDic = new Dictionary <string, string>(); if (arrayOneChildPageElementDatas != null && arrayOneChildPageElementDatas.Length > 0) { foreach (var OneChildElementGroup in arrayOneChildPageElementDatas) { var arrayOneChildElementGroup = OneChildElementGroup.Split(new string[] { "=*=" }, StringSplitOptions.None); var tempKey = arrayOneChildElementGroup[0]; var tempValue = arrayOneChildElementGroup[1]; if (!OneChildPageDataDic.Keys.Contains(tempKey)) { OneChildPageDataDic.Add(tempKey, tempValue); } } } DicPrintPageData.Add(ChildPageIndex, OneChildPageDataDic); } } } } T_TradeQuestion tq = PaperData.QuestionCollection.SingleOrDefault(c => c.Key == questionkey); if (tq != null) { string sql = @"INSERT INTO T_PAPER_ANSWER (F_KEY, F_QUESTION_KEY, F_PAPER_KEY, F_TRADE_NO, F_CIPHERTEXT1, F_CIPHERTEXT2, F_TELLERSYS_SERIAL) VALUES (SYS_GUID(), ?, ?, ?, ?, ?, ?)"; string[] param = new string[] { questionkey, PaperData.Key, MenuNo, receiveString[3], receiveString[4], serialid }; if (!ExamHandle.TryExecute(sql, param)) { Messenger.Default.Send("保存交易答案失败"); return; } T_Sta_Answer[] an = tq.Sta_Answer.Where(c => { return(c.MenuNo == MenuNo && c.IsCreate); }).ToArray(); if (an.Length > 0) { foreach (T_Sta_Answer item in an) { Variable v = PaperData.Variables.Single(c => { return(c.Name == item.FldValue); }); if (item.Location == "主界面") { v.Value = DicMainPageData.Keys.Contains(item.FldCode) ? DicMainPageData[item.FldCode] : ""; } else if (item.Location == "弹出页") { foreach (var eletempp in DicChildrenPageData) { v.Value = eletempp.Value.Keys.Contains(item.FldCode) ? eletempp.Value[item.FldCode] : ""; if (v.Value != "") { break; } } } else if (item.Location == "打印页") { foreach (var eletempp in DicPrintPageData) { v.Value = eletempp.Value.Keys.Contains(item.FldCode) ? eletempp.Value[item.FldCode] : ""; if (v.Value != "") { break; } } } //if (item.Location == 0) // 0是提交报文 // v.Value = msg1.GetValue("Fd" + item.FldCode); //else if (item.Location == 1) // 1是接受报文 // v.Value = msg2.GetValue("Fd" + item.FldCode); //else if (item.Location == 4) // 4是提交附件 // v.Value = file1.GetValue(int.Parse(item.FldCode)); //else if (item.Location == 5) // 5是回收附件 // v.Value = file2.GetValue(int.Parse(item.FldCode)); } } string variable = string.Empty; for (int i = 0; i < PaperData.Variables.Count; i++) { variable += PaperData.Variables[i].Name + "=" + PaperData.Variables[i].Value; variable += i == PaperData.Variables.Count - 1 ? "" : "]"; } if (!ExamHandle.TryExecute(Sql.UPDATE_PAPERVARIABLE, variable, PaperData.Key)) { Messenger.Default.Send("更新答案时出现异常"); } // 只要走到这里就已经保存此题的答案了,就可以标记它的状态为已做过的状态 T_TradeQuestion question = PaperData.QuestionCollection.SingleOrDefault(c => c.Key == questionkey); if (question != null) { question.State = QuestionState.Complete; PaperData.CompletedQuestion += 1; } } } break; case CommniucationFlag.B: { Messenger.Default.Send(Visibility.Visible, MessageToken.PaperVisibilityToken); if (receiveString.Length != 1) { Messenger.Default.Send("从前端系统参数传递过来的参数错误"); return; } //string questionkey = receiveString[0]; // 题主键 //T_TradeQuestion item = PaperData.QuestionCollection.SingleOrDefault(c => c.Key == questionkey); //if (item != null) //{ // item.State = QuestionState.Complete; // PaperData.CompletedQuestion += 1; //} } break; } }
/// <summary> /// 处理试卷中的变量 /// </summary> /// <param name="question"></param> private void DealVariables(T_TradeQuestion question) { Action <string> forVariables = name => { if (!string.IsNullOrEmpty(name) && PaperData.Variables.All(c => c.Name != name)) { var var = new Variable(name, string.Empty); PaperData.Variables.Add(var); var.VariableValueChanged += new Variable.VariableValueChangedHandle(var_VariableValueChanged); //var.VariableValueChanged += a => // PaperData.QuestionCollection // .ToList() // .ForEach(item => // { // item.TitleView = item.Title; // List<Variable> list = PaperData.Variables.ToList(); // list.ForEach // (c => item.TitleView = item.TitleView // .Replace(c.Name, // "[" + // c.Value + // "]")); // }); } }; // 变量处理 string[] d = question.Variable.Split('|'); string[] v1 = d[0].Split(','); // 题目部分 string[] v2 = d[1].Split('\\'); // 答案部分,可以有多少答案 foreach (string item in v1) { forVariables(item); } int n = 0; // 替换掉混在题目里面的@变量为名称,也是按顺序来对应的 foreach (string item in v1) { if (item == string.Empty) { continue; } n = question.Title.IndexOf("@", n, StringComparison.Ordinal); question.Title = question.Title.Insert(n + 1, item.Substring(1, item.Length - 1)); n += item.Length; } for (int ii = 0; ii < v2.Length; ii++) { if (string.IsNullOrEmpty(v2[ii])) { continue; } string[] v3 = v2[ii].Split(','); foreach (string item in v3) { forVariables(item); } } question.TitleView = question.Title; // 定义全局的初始变量 ////Variable var1 = new Variable("@TELLERNO@", string.Empty); ////PaperData.Variables.Add(var1); ////var1.VariableValueChanged += new Variable.VariableValueChangedHandle(var_VariableValueChanged); ////var1.Value = PaperData.TellerNo; var m = PaperData.Variables.Where(x => { return(x.Name == "@TELLERNO@"); }).ToList(); if (m.Count == 1) { m.FirstOrDefault().Value = PaperData.TellerNo; } }