/// <summary> /// 采用命名通道发送消息 /// </summary> /// <param name="strMsg">参数</param> /// <param name="flag">标记</param> /// <returns>是否成功</returns> public bool SendMessage(string[] strMsg, CommniucationFlag flag) { bool result = true; try { if (strMsg == null) { return(false); } //组织发送实体 var gm = new GenericMessage { MessageId = Guid.NewGuid(), Recipient = "TellerSystem", Originator = "ExamSystem", MessageFlag = flag, MessageDateTime = DateTime.Now, Payload = Encoding.UTF8.GetBytes(strMsg.Aggregate((c1, c2) => c1 + "!@" + c2)) }; byte[] b = MessageSerializers.SerializeMessage(gm); pipeClient.SendMessage(b); } catch (Exception) { result = false; } return(result); }
public GenericMessage(Guid messageId, string originator, string recipient, DateTime messageDateTime, CommniucationFlag flag, byte[] payload) { _messageId = messageId; _originator = originator; _recipient = recipient; _messageDateTime = messageDateTime; MessageFlag = flag; _payload = payload; }
/// <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; } }