public void ParseResult(string strSource, ref string strResult, ref string strReserved, ref string strCmd) { string result = may.sendQCK(strSource, strDevice, strDeviceID); //如果是质控到话 if (result.StartsWith("4")) { try { writelog.Write(strDevice, "接收到数据: " + strSource, "log"); StreamReader sr = new StreamReader(@".\BS400.txt"); //解析结果检验项目标识符和zlchs定义的变量对应 lis,zlchs|lis1,zlchs1 StringBuilder sBuilder = new StringBuilder(""); string correspondence = sr.ReadLine(); sr.Close(); string[] correspondenceArray = correspondence.Split('|'); string[] analysis = strSource.Split('|'); string strTestTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string messageTime = analysis[6]; string messageID = analysis[9]; string ACK_R01_OK = may.SB + @"MSH|^~\&|||||{0}||ACK^R01|{1}|P|2.3.1||||2||ASCII|||" + may.CR + "MSA|AA|{1}|Message accepted|||0|" + may.CR + may.EB + may.CR; strCmd = string.Format(ACK_R01_OK, strTestTime, messageID); string[] strSourceArray = strSource.Split(may.CR); for (int i = 0; i < strSourceArray.Length; i++) { string s = strSourceArray[i]; if (s.IndexOf("OBR") > -1) { string times = s.Split('|')[7]; strTestTime = times.Substring(0, 4) + "-" + times.Substring(4, 2) + "-" + times.Substring(6, 2) + " " + times.Substring(8, 2) + ":" + times.Substring(10, 2) + ":" + times.Substring(12, 2); string[] no = s.Split('|')[13].Split('^'); if (no.Length > 1) { strSampleNo = "900" + no[1]; } else { strSampleNo = "900" + s.Split('|')[12]; } for (int j = 0; j < correspondenceArray.Length; j++) { string lis = correspondenceArray[j].Split(',')[0]; string zlchs = correspondenceArray[j].Split(',')[1]; if (s.IndexOf('|' + lis + '|') > 0) { sBuilder.Append(zlchs + ',' + s.Split('|')[20] + '|'); } } } } string str = sBuilder.ToString().Remove(sBuilder.Length - 1); writelog.Write(strDevice, "BS400质控数据sBuilder:" + str, "log"); string[] strs = str.Split('|'); string ChannelType = ""; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 string testItemID = ""; string TestResultValue = ""; for (int i = 0; i < strs.Length; i++) { FindRow = tItemChannel.Select("通道编码='" + strs[i].Split(',')[0] + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { ChannelType = null; writelog.Write(strDevice, "未设置通道:" + strs[i].Split(',')[0], "log"); } else { testItemID = FindRow[0]["项目id"].ToString(); ChannelType = "0"; //普通结果 TestResultValue = TestResultValue + testItemID + "^" + strs[i].Split(',')[1].Replace("RuPT", "阴性") + "|"; } } TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; writelog.Write(strDevice, "BS400质控数据|TestResultValue:" + str, "log"); saveResult = new SaveResult(); if (!string.IsNullOrEmpty(strSampleNo) || !string.IsNullOrEmpty(strBarCode)) { saveResult.SaveTextResult(strInstrument_id, TestResultValue, TestGraph, DrSampleNoField); if (ImmediatelyUpdate) { saveResult.UpdateData(); } } if (!ImmediatelyUpdate) { saveResult.UpdateData(); } } catch (Exception e) { writelog.Write(strDevice, "质控异常:" + e.ToString(), "log"); } } //如果是样本结果的话 else if (result.StartsWith("5")) { try { writelog.Write(strDevice, "接收到数据: " + strSource, "log"); // string[] analysis = strSource.Split('|'); string strTestTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string messageTime = analysis[6]; string messageID = analysis[9]; StreamReader sr = new StreamReader(@".\BS400.txt"); //解析结果检验项目标识符和zlchs定义的变量对应 lis,zlchs|lis1,zlchs1 StringBuilder sBuilder = new StringBuilder(""); string correspondence = sr.ReadLine(); sr.Close(); string ACK_R01_OK = may.SB + @"MSH|^~\&|||||{0}||ACK^R01|{1}|P|2.3.1||||0||ASCII|||" + may.CR + "MSA|AA|{1}|Message accepted|||0|" + may.CR + may.EB + may.CR; strCmd = string.Format(ACK_R01_OK, strTestTime, messageID); string times = ""; string[] correspondenceArray = correspondence.Split('|'); string[] strSourceArray = strSource.Split(new char[] { '\r' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strSourceArray.Length; i++) { if (strSourceArray[i].Split(new char[] { '|' })[0].Replace("\n", "").Equals("OBR")) { strSampleNo = strSourceArray[i].Split('|')[3]; if ("".Equals(strSourceArray[i].Split('|')[6])) { times = DateTime.Now.ToString("yyyyMMddHHmmss"); } else { times = strSourceArray[i].Split('|')[6]; } //如果有条码号,取核收时间作为检验时间 string sampleBarstr = strSourceArray[i].Split(new char[] { '|' })[2]; if (!string.IsNullOrEmpty(sampleBarstr)) { IniFile ConfigIni = new IniFile("SOLVESET.INI"); string encode = ConfigIni.IniReadValue("EQUIPMENT", "Encode"); DataSet ds = new DataSet(); string orgId = ConfigIni.IniReadValue("EQUIPMENT", "Agencies"); string sql = @"to_char(核收时间,'yyyymmddhh24miss') as 核收时间,样本序号"; string where = @" 机构id='" + orgId + "' and 样本条码='" + sampleBarstr + "'"; ds = dsHandle.GetDataSet(sql, "检验记录", where); times = ds.Tables[0].Rows[0]["核收时间"].ToString();//20160202145321 strSampleNo = ds.Tables[0].Rows[0]["样本序号"].ToString(); } strTestTime = times.Substring(0, 4) + "-" + times.Substring(4, 2) + "-" + times.Substring(6, 2); } if (strSourceArray[i].Split(new char[] { '|' })[0].Replace("\n", "").Equals("OBX")) { for (int j = 0; j < correspondenceArray.Length; j++) { string lis = correspondenceArray[j].Split(',')[0]; string zlchs = correspondenceArray[j].Split(',')[1]; if (strSourceArray[i].IndexOf('|' + lis + '|') > 0) { sBuilder.Append(zlchs + ',' + strSourceArray[i].Split('|')[5] + '|'); } } } } string str = sBuilder.ToString().Remove(sBuilder.Length - 1); string[] strs = str.Split('|'); string ChannelType = ""; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 string testItemID = ""; string TestResultValue = ""; for (int i = 0; i < strs.Length; i++) { FindRow = tItemChannel.Select("通道编码='" + strs[i].Split(',')[0] + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { ChannelType = null; writelog.Write(strDevice, "未设置通道:" + strs[i].Split(',')[0], "log"); } else { testItemID = FindRow[0]["项目id"].ToString(); ChannelType = "0"; //普通结果 TestResultValue = TestResultValue + testItemID + "^" + strs[i].Split(',')[1].Replace("RuPT", "阴性") + "|"; } } TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; saveResult = new SaveResult(); if (!string.IsNullOrEmpty(strSampleNo) || !string.IsNullOrEmpty(strBarCode)) { saveResult.SaveTextResult(strInstrument_id, TestResultValue, TestGraph, DrSampleNoField); if (ImmediatelyUpdate) { saveResult.UpdateData(); } } if (!ImmediatelyUpdate) { saveResult.UpdateData(); } } catch (Exception e) { writelog.Write(strDevice, "处理失败: " + e.ToString(), "log"); } } else { strCmd = result; } }
public void ParseResult(string strSource, ref string strResult, ref string strReserved, ref string strCmd) { string result = may.sendQCK(strSource, strDevice, strDeviceID); //如果是质控到话 if (result.StartsWith("4")) { try { writelog.Write(strDevice, "接收到数据: " + strSource, "log"); StreamReader sr = new StreamReader(@".\CL1000i.txt"); //解析结果检验项目标识符和zlchs定义的变量对应 lis,zlchs|lis1,zlchs1 StringBuilder sBuilder = new StringBuilder(""); string correspondence = sr.ReadLine(); sr.Close(); string[] correspondenceArray = correspondence.Split('|'); string[] analysis = strSource.Split('|'); string strTestTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string messageTime = analysis[6]; string messageID = analysis[9]; string ACK_R01_OK = may.SB + @"MSH|^~\&|||||{0}||ACK^R01|{1}|P|2.3.1||||2||ASCII|||" + may.CR + "MSA|AA|{1}|Message accepted|||0|" + may.CR + may.EB + may.CR; strCmd = string.Format(ACK_R01_OK, strTestTime, messageID); string[] strSourceArray = strSource.Split(may.CR); for (int i = 0; i < strSourceArray.Length; i++) { string s = strSourceArray[i]; if (s.StartsWith("OBR")) { string times = s.Split('|')[7]; strTestTime = times.Substring(0, 4) + "-" + times.Substring(4, 2) + "-" + times.Substring(6, 2) + " " + times.Substring(8, 2) + ":" + times.Substring(10, 2) + ":" + times.Substring(12, 2); string[] no = s.Split('|')[13].Split('^'); if (no.Length > 1) { strSampleNo = "900" + no[1]; } else { strSampleNo = "900" + s.Split('|')[12]; } for (int j = 0; j < correspondenceArray.Length; j++) { string lis = correspondenceArray[j].Split(',')[0]; string zlchs = correspondenceArray[j].Split(',')[1]; if (s.IndexOf('|' + lis + '|') > 0) { sBuilder.Append(zlchs + ',' + s.Split('|')[20] + '|'); } } } } string str = sBuilder.ToString().Remove(sBuilder.Length - 1); string[] strs = str.Split('|'); string ChannelType = ""; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 string testItemID = ""; string TestResultValue = ""; for (int i = 0; i < strs.Length; i++) { FindRow = tItemChannel.Select("通道编码='" + strs[i].Split(',')[0] + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { ChannelType = null; writelog.Write(strDevice, "未设置通道:" + strs[i].Split(',')[0], "log"); } else { testItemID = FindRow[0]["项目id"].ToString(); ChannelType = "0"; //普通结果 TestResultValue = TestResultValue + testItemID + "^" + strs[i].Split(',')[1].Replace("RuPT", "阴性") + "|"; } } TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; saveResult = new SaveResult(); if (!string.IsNullOrEmpty(strSampleNo) || !string.IsNullOrEmpty(strBarCode)) { saveResult.SaveTextResult(strInstrument_id, TestResultValue, TestGraph, DrSampleNoField); if (ImmediatelyUpdate) { saveResult.UpdateData(); } } if (!ImmediatelyUpdate) { saveResult.UpdateData(); } } catch (Exception e) { writelog.Write(strDevice, "质控异常:" + e.ToString(), "log"); } } //如果是样本结果的话 else if (result.StartsWith("5")) { try { writelog.Write(strDevice, "接收到数据: " + strSource, "log"); // string[] analysis = strSource.Split('|'); string strTestTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string messageTime = analysis[6]; string messageID = analysis[9]; StreamReader sr = new StreamReader(@".\CL1000i.txt"); //解析结果检验项目标识符和zlchs定义的变量对应 lis,zlchs|lis1,zlchs1 StringBuilder sBuilder = new StringBuilder(""); string correspondence = sr.ReadLine(); sr.Close(); string ACK_R01_OK = may.SB + @"MSH|^~\&|||||{0}||ACK^R01|{1}|P|2.3.1||||0||ASCII|||" + may.CR + "MSA|AA|{1}|Message accepted|||0|" + may.CR + may.EB + may.CR; strCmd = string.Format(ACK_R01_OK, strTestTime, messageID); string times = ""; string[] correspondenceArray = correspondence.Split('|'); string[] strSourceArray = strSource.Split(new char[] { '\r' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strSourceArray.Length; i++) { if (strSourceArray[i].Split(new char[] { '|' })[0].Replace("\n", "").Equals("OBR")) { strSampleNo = strSourceArray[i].Split('|')[3]; if ("".Equals(strSourceArray[i].Split('|')[6])) { times = DateTime.Now.ToString("yyyyMMddHHmmss"); } else { times = strSourceArray[i].Split('|')[6]; } strTestTime = times.Substring(0, 4) + "-" + times.Substring(4, 2) + "-" + times.Substring(6, 2); //样本编号转换为条码号 string returns = Helper.SampleNoToSampleBar(strSampleNo); if (!string.IsNullOrEmpty(returns)) { strTestTime = returns.Split('|')[0]; strSampleNo = returns.Split('|')[1]; strBarCode = strSampleNo; } } if (strSourceArray[i].Split(new char[] { '|' })[0].Replace("\n", "").Equals("OBX")) { for (int j = 0; j < correspondenceArray.Length; j++) { string lis = correspondenceArray[j].Split(',')[0]; string zlchs = correspondenceArray[j].Split(',')[1]; if (strSourceArray[i].IndexOf('|' + lis + '|') > 0) { if (!string.IsNullOrEmpty(strSourceArray[i].Split('|')[9])) { sBuilder.Append(zlchs + ',' + strSourceArray[i].Split('|')[9] + '|'); } else { sBuilder.Append(zlchs + ',' + strSourceArray[i].Split('|')[5] + '|'); } } } } } string str = sBuilder.ToString().Remove(sBuilder.Length - 1); string[] strs = str.Split('|'); string ChannelType = ""; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 string testItemID = ""; string TestResultValue = ""; for (int i = 0; i < strs.Length; i++) { FindRow = tItemChannel.Select("通道编码='" + strs[i].Split(',')[0] + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { ChannelType = null; writelog.Write(strDevice, "未设置通道:" + strs[i].Split(',')[0], "log"); } else { testItemID = FindRow[0]["项目id"].ToString(); ChannelType = "0"; //普通结果 TestResultValue = TestResultValue + testItemID + "^" + strs[i].Split(',')[1].Replace("RuPT", "阴性") + "|"; } } TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; saveResult = new SaveResult(); if (!string.IsNullOrEmpty(strSampleNo) || !string.IsNullOrEmpty(strBarCode)) { saveResult.SaveTextResult(strInstrument_id, TestResultValue, TestGraph, DrSampleNoField); if (ImmediatelyUpdate) { saveResult.UpdateData(); } } if (!ImmediatelyUpdate) { saveResult.UpdateData(); } } catch (Exception e) { writelog.Write(strDevice, "处理失败: " + e.ToString(), "log"); } } else { strCmd = result; } }