/// <summary> /// 读取文件 /// </summary> /// <param name="filePath">文件路径</param> /// <param name="fileName">文件名称</param> /// <param name="readType">打开方式</param> /// <param name="fileType">文件类型</param> private void ReadFile() { String inputStr; Boolean lbResult = false; FileStream ifs = new FileStream(filePath + "\\" + strFileName, FileMode.Open, FileAccess.Read); StreamReader SrReadLin = new StreamReader(ifs, System.Text.Encoding.Default); while (true) { inputStr = SrReadLin.ReadLine(); //writelog.Write(inputStr, "log"); if (lbResult == false) { //if (inputStr.IndexOf(" SEQ PAT COUNTS CONC %cvCONC UNIT CODE") < 0) continue; if (inputStr.IndexOf(" SEQ PAT COUNTS CONC %cvCONC UNIT CODE") < 0) { continue; } else { lbResult = true; } continue; } if (string.IsNullOrEmpty(inputStr)) { break; } SaveResult saveResult = new SaveResult(); inputStr = inputStr + fileName.Substring(0, fileName.IndexOf(".")); if (lngStep == 1) { strSampleInfo.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|"); } strResult = inputStr.Substring(28, 10).Replace(">", " ").Replace("<", " ").Trim(); //try //{ // strResult = Convert.ToDecimal(strResult).ToString(); //} //catch (Exception ex) //{ //} if (strFileName.ToUpper().IndexOf("HBCAB") >= 0) { saveResult.SaveTextResult(strInstrumentID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBcAbID + "^" + Convert.ToDouble(strResult).ToString("f2") + "|", TestGraph, null); } else if (strFileName.ToUpper().IndexOf("HBEAB") >= 0) { saveResult.SaveTextResult(strInstrumentID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBeAbID + "^" + Convert.ToDouble(strResult).ToString("f2") + "|", TestGraph, null); } else if (strFileName.ToUpper().IndexOf("HBEAG") >= 0) { saveResult.SaveTextResult(strInstrumentID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBeAgID + "^" + Convert.ToDouble(strResult).ToString("f3") + "|", TestGraph, null); } else if (strFileName.ToUpper().IndexOf("HBSAB") >= 0) { saveResult.SaveTextResult(strInstrumentID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBsAbID + "^" + Convert.ToDouble(strResult).ToString("f1") + "|", TestGraph, null); } else if (strFileName.ToUpper().IndexOf("HBSAG") >= 0) { saveResult.SaveTextResult(strInstrumentID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBsAgID + "^" + Convert.ToDouble(strResult).ToString("f2") + "|", TestGraph, null); } //writelog.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "|" + inputStr.Substring(57, 7).Trim() + "^^0||标本|" + "|" + strHBsAgID + "^" + Convert.ToDecimal(inputStr.Substring(28, 10).Trim()).ToString("f2") + "|", "log"); saveResult.UpdateData(); saveResult = null; } SrReadLin.Close(); ifs.Close(); }
/// <summary> /// MSH|检验日期|样本号^条码号^样本类型<13> /// OBX|通道号^结果值<13> /// </summary> public void GetResult1(object a) { //writeLog.Write("2" + detype + " " + ds.Tables[0].Rows.Count.ToString(), "log"); CallInterFaceDll.boolRun = true; try { if (Convert.ToInt32(ds.Tables[0].Rows.Count.ToString()) == 0) { return; } if (bnHPV) { FileInfo fileInfo; foreach (DataRow drRow in ds.Tables[0].Select("检测日期='" + DateTime.Now.ToString("yyyy/M/dd") + "'")) { strSampleNO = drRow[0].ToString().Substring(6, 3); dsGuid = dsHandle.GetDataSet("to_char(sysdate,'HH24:mi:ss') time", "dual", ""); resultstring = Convert.ToDateTime(drRow[11].ToString()).ToString("yyyy-MM-dd") + " " + dsGuid.Tables[0].Rows[0][0].ToString() + "|"; resultstring += Convert.ToInt32(strSampleNO).ToString() + "^^" + "|"; resultstring += "|"; resultstring += "|"; resultstring += "|"; dsGuid = dsHandle.GetDataSet("test_item_id,channel_no", "test_instrument_item_channel", "instrument_id = '" + strInstrumentID + "'"); strResult = drRow[14].ToString(); foreach (DataRow dr in dsGuid.Tables[0].Rows) { strTestItemID = dr[0].ToString(); strChannel = dr[1].ToString().ToUpper(); if (strResult.IndexOf(strChannel + " ") >= 0) { resultstring += (strTestItemID + "^+" + "|"); } else { resultstring += (strTestItemID + "^-" + "|"); } } //c:Program Files\基因芯片图像分析软件\image //c:Program Files\基因芯片图像分析软件\temp TestGraph = new List <string>(); //fileInfo = new FileInfo(@"c:Program Files\基因芯片图像分析软件\temp\" + strSampleNO + ".bmp"); //if (fileInfo.Exists) //{ //文件存在 // TestGraph.Add(fileInfo.FullName); // //writeLog.Write("log", fileInfo.FullName); //} //else //{ fileInfo = new FileInfo(@"c:Program Files\基因芯片图像分析软件\image\" + Convert.ToInt32(DateTime.Now.ToString("yyMMdd")).ToString() + strSampleNO + ".bmp"); if (fileInfo.Exists) { //文件存在 TestGraph.Add(fileInfo.FullName); //writeLog.Write("log", fileInfo.FullName); } //} saveResult.SaveTextResult(strInstrumentID, resultstring, TestGraph, null); saveResult.UpdateData(); } } else if (bnSLAN) { foreach (DataRow drRow in ds.Tables[0].Rows) { strChannel = drRow[1].ToString(); strResult = drRow[20].ToString(); dsGuid = dsHandle.GetDataSet("to_char(sysdate,'HH24:mi:ss') time", "dual", ""); resultstring = Convert.ToDateTime(drRow[19].ToString()).ToString("yyyy-MM-dd") + " " + dsGuid.Tables[0].Rows[0][0].ToString() + "|"; resultstring += Convert.ToInt32(drRow[2].ToString()).ToString() + "^^" + "|"; resultstring += "|"; resultstring += "|"; resultstring += "|"; dsGuid = dsHandle.GetDataSet("test_item_id,channel_no", "test_instrument_item_channel", "channel_no = '" + strChannel + "' and instrument_id = '" + strInstrumentID + "'"); if (dsGuid.Tables[0].Rows.Count == 0) { writeLog.Write("未设置通道:" + strChannel, "log"); continue; } else { strTestItemID = dsGuid.Tables[0].Rows[0]["test_item_id"].ToString(); } resultstring = resultstring + strTestItemID + "^" + strResult + "|"; saveResult.SaveTextResult(strInstrumentID, resultstring, TestGraph, null); saveResult.UpdateData(); } } else { if (detype == "1") { for (int i = 0; i < Convert.ToInt32(ds.Tables[0].Rows.Count.ToString()); i++) { if (boolSlan) { strSampleNO = ds.Tables[0].Rows[i][2].ToString().Substring(7); //已经审核的标本不用处理 //dsGuid = dsHandle.GetDataSet("status", "test_sample", "instrument_id='" + strInstrumentID + "' and sample_no = '" + strSampleNO + "'"); //if (Convert.ToInt32(dsGuid.Tables[0].Rows[0]["status"].ToString()) > 7) continue; strChannel = ds.Tables[0].Rows[i][1].ToString(); dsGuid = dsHandle.GetDataSet("test_item_id", "test_instrument_item_channel", "channel_no = '" + strChannel + "' and instrument_id = '" + strInstrumentID + "'"); if (dsGuid.Tables[0].Rows.Count == 0) { writeLog.Write("未设置通道:" + strChannel, "log"); continue; } else { strTestItemID = dsGuid.Tables[0].Rows[0]["test_item_id"].ToString(); } strResult = ds.Tables[0].Rows[i][20].ToString(); try { strResult = double.Parse(strResult).ToString(); } catch (Exception ex) { // } strResult = strTestItemID + "^" + strResult + "|"; resultstring = Convert.ToDateTime(ds.Tables[0].Rows[i][19].ToString()).ToString("yyyy-MM-dd HH:mm:ss") + "|" + strSampleNO + "^^|" + "|" + ds.Tables[0].Rows[i][10].ToString() + "|" + "|" + strResult; saveResult.SaveTextResult(strInstrumentID, resultstring, TestGraph, null); } else if (bnAve763) { string strSampleNo; resultstring = ds.Tables[0].Rows[i][0].ToString(); strSampleNo = resultstring.Split('|')[1].Trim().PadLeft(4, '0'); //已经审核或者发布的标本不再提取数据 dsGuid = dsHandle.GetDataSet("min(sample_status)", "test_sample", "income_time >= trunc(sysdate) and instrument_id = '" + strInstrumentID + "' and sample_no = '" + strSampleNo + "'"); if (dsGuid.Tables[0].Rows.Count > 0) { if (dsGuid.Tables[0].Rows[0][0].ToString() == "8" || dsGuid.Tables[0].Rows[0][0].ToString() == "9") { continue; } } StringBuilder objStrBd = new StringBuilder(256); string inifile = "SOLVESET.INI"; string FileName; string strImagePosition = ""; //resString = new GetResultString(); resString.listInputResult = new List <string>(); resString.ListImagePosition = new List <string>(); //resString.listInputResult.Add(resultstring); resString.ImmediatelyUpdate = true; //inifile = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + inifile; FileInfo fileInfo = new FileInfo(inifile); if ((!fileInfo.Exists)) { //文件不存在 return; } //必须是完全路径,不能是相对路径 FileName = fileInfo.FullName; long OpStation = GetPrivateProfileString("EQUIPMENT", "IMAGE", "", objStrBd, 256, FileName); if (OpStation > 0) { FileName = objStrBd.ToString(); long lngNo = 0; //判断H0001.jpg是否存在 fileInfo = new FileInfo(FileName + @"\" + DateTime.Parse(resultstring.Split('|')[0].ToString()).ToString("yyyyMMdd") + @"\" + strSampleNo + @"\H0002.jpg"); if (fileInfo.Exists) { //文件存在 strImagePosition = strImagePosition + ";" + fileInfo.FullName; lngNo += 1; } //判断H0002.jpg是否存在 fileInfo = new FileInfo(FileName + @"\" + DateTime.Parse(resultstring.Split('|')[0].ToString()).ToString("yyyyMMdd") + @"\" + strSampleNo + @"\H0003.jpg"); if (fileInfo.Exists) { //文件存在 strImagePosition = strImagePosition + ";" + fileInfo.FullName; resString.ListImagePosition.Add(strImagePosition.Substring(1)); lngNo += 1; } //if (lngNo < 2) //{ // string[] strFiles = Directory.GetFiles(FileName + @"\" + DateTime.Parse(resultstring.Split('|')[0].ToString()).ToString("yyyyMMdd") + @"\" + strSampleNo, "*.jpg"); // foreach (string name in strFiles) // { // if (string.IsNullOrEmpty(name)) continue; // lngNo += 1; // if (lngNo <= 2) // { // strImagePosition = strImagePosition + ";" + name; // if (lngNo == 2) // { // resString.ListImagePosition.Add(strImagePosition.Substring(1)); // break; // } // } // } // //if (lngNo < 2) // //{ // // resString.ListImagePosition.Add(""); // // resString.ListImagePosition.Add(""); // //} //} } resString.listInputResult.Add(resultstring); resString.ParseResult(); //resString = null; } else { resultstring = ds.Tables[0].Rows[i][0].ToString(); //writeLog.Write(resultstring, "log"); resString.listInputResult.Add(resultstring); } } } else if (detype == "2") { string sample_old = "***"; string sample_new; for (int i = 0; i < Convert.ToInt32(ds.Tables[0].Rows.Count.ToString()); i++) { sample_new = ds.Tables[0].Rows[i][1].ToString().Trim(); //新的样本号或者结束 if (sample_new != sample_old) { if (!string.IsNullOrEmpty(resultstring)) { resString.listInputResult.Add(resultstring); resString.ParseResult(); resultstring = ""; } if (ds.Tables[0].Rows[i][0] != null) { resultstring = "MSH|" + (ds.Tables[0].Rows[i][0].ToString().Substring(0, 6).IndexOf('-') > 0 ? ds.Tables[0].Rows[i][0].ToString().Substring(2) : ds.Tables[0].Rows[i][0].ToString()) + "|"; //检验日期 } if (ds.Tables[0].Rows[i][1] != null) { resultstring = resultstring + Convert.ToInt32(ds.Tables[0].Rows[i][1].ToString()) + "^"; //样本号 } if (ds.Tables[0].Rows[i][2] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][2].ToString() + "^"; //条码号 } if (ds.Tables[0].Rows[i][3] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][3].ToString() + "|"; //样本类型 } resultstring = resultstring + (char)13; resultstring = resultstring + "OBX|"; if (ds.Tables[0].Rows[i][6] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][6].ToString() + "^"; //通道号 } if (ds.Tables[0].Rows[i][7] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][7].ToString() + "|"; //结果值 } resultstring = resultstring + (char)13; sample_old = sample_new; } else { resultstring = resultstring + "OBX|"; if (ds.Tables[0].Rows[i][6] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][6].ToString() + "^"; //通道号 } if (ds.Tables[0].Rows[i][7] != null) { resultstring = resultstring + ds.Tables[0].Rows[i][7].ToString() + "|"; //结果值 } resultstring = resultstring + (char)13; } if (i + 1 == Convert.ToInt32(ds.Tables[0].Rows.Count.ToString()) && !string.IsNullOrEmpty(resultstring)) { resString.listInputResult.Add(resultstring); resultstring = ""; } } } } if (boolSlan) { saveResult.UpdateData(); saveResult = null; } else if (!bnAve763 && !bnHPV) { } else { resString.ParseResult(); } resString = null; //conDB.Close(); TestGraph = null; } catch (Exception ex) { writeLog.Write(ex.Message, "log"); } finally { CallInterFaceDll.boolRun = false; } conDB.Close(); }
/// <summary> /// '设备标准接口 //'功能:解析数据 //'参数: //'strSource:要解析的原始串 //'strResult:返回的检验结果(各仪器解析程序必须按以下标准组织结果) //' 每组检验结果以||分隔,元素之间以|分隔 //' 第0个元素:检验时间 //' 第1个元素:样本序号(标本号^条码号^样本类型) //' 第2个元素:检验人 //' 第3个元素:标本 //' 第4个元素:预留 //' 从第5个元素开始为检验结果,每2个元素表示一个检验项目。 //' 如:第5i个元素为检验项目,第5i+1个元素为检验结果 //'strReserved:最后不能完成解析的原始串,需要返回作后续处理 //'strCmd:如果需要,可返回向设备发送的命令 //'补充图像的方式: //' 1.图像数据跟随指标数据后,使用回车换行符来分隔。 //' 2.有多个图像数据时使用"^"来分隔 //' 3.单个图像数据格式: 图像画法 0=直方图 1=散点图 //' a) 直方图: 图像名称;图像画法(0=直方图 1=散点图);X1;X2;X3;X4;X5... //' b) 散点图: 图像名称;图像画法(0=直方图 1=散点图): //' 例:00000100001000010000100010;00000100001000010000100010; //' 说明:1.散点图以点阵方式保存每一行使用分号来分隔. //' 2.有多少个分号就有多少行 //' 3.每一行有多少个点由每一行的长度来确定 //' 3.画图的方向是从最上边向下画,如有65*65的图就是从65行开始画(最上边开始画) /// <summary> /// 设备标准接口[解析数据] /// </summary> /// <param name="strSource">原始字符串</param> /// <param name="strResult"> /// 返回的检验结果(各仪器解析程序必须按以下标准组织结果) //' 每组检验结果以||分隔,元素之间以|分隔 //' 第0个元素:检验时间 //' 第1个元素:样本序号(标本号^条码号^样本类型) //' 第2个元素:检验人 //' 第3个元素:标本 //' 第4个元素:预留 //' 从第5个元素开始为检验结果,每2个元素表示一个检验项目。 //' 如:第5i个元素为检验项目,第5i+1个元素为检验结果</param> /// <param name="strReserved">最后不能完成解析的原始串,需要返回作后续处理</param> /// <param name="strCmd">如果需要,可返回向设备发送的命令</param> public void ParseResult(string strSource, ref string strResult, ref string strReserved, ref string strCmd) { string channel = "0"; string testItemID = ""; string result = ""; decimal CONVERSION_RATIO = 0; decimal DECIMAL_LEVEL = 2; string ParString = ""; string SingleResult = ""; string ResultString = ""; string UnknownResult = ""; //未知项目 string TempCmd = ""; DataSet ds_GraphChannel = new DataSet(); DataSet dsGUID = new DataSet(); DataSet dsTestItem = new DataSet(); string TestResultInfo = ""; strReserved = ""; strResult = ""; strCmd = ""; //原始串为空、开始字符为空、结束字符为空时退出 if (String.IsNullOrEmpty(strSource)) { return; } if (String.IsNullOrEmpty(StrChange(strDataBegin)) || String.IsNullOrEmpty(StrChange(strDataEnd))) { writelog.Write(strDevice, !String.IsNullOrEmpty(strDataBegin) ? "开始字符未设置!" : "结束字符未设置", "log"); strReserved = strSource; return; } else if (strSource.IndexOf(StrChange(strDataBegin)) == -1 || strSource.IndexOf(StrChange(strDataEnd)) == -1) //原始串不是一条安装结果数据时退出 { strReserved = strSource; return; } writelog.Write(strDevice, strSource, "raw"); //原始串日志 TempCmd = StrChange(strACK_term); if (!String.IsNullOrEmpty(StrChange(strACK_all))) { strCmd = StrChange(strACK_all); } else if (strSource.IndexOf(TempCmd) >= 0 && !String.IsNullOrEmpty(TempCmd)) { //返回条件应答 Init_COM ic = new Init_COM(); strCmd = ic.GetCmd(strSource, TempCmd); } if (strSubEnd == @"\n") { strSubEnd = ((char)10).ToString(); } saveResult = new SaveResult(); #region 通过结束符分段解析 while (strSource.IndexOf(StrChange(strDataEnd)) >= 0) { //通过结束符分段解析 ResultString = strSource.Substring(strSource.IndexOf(StrChange(strDataBegin)) + StrChange(strDataBegin).Length, strSource.IndexOf(StrChange(strDataEnd))); strSource = strSource.Substring(strSource.IndexOf(StrChange(strDataEnd)) + StrChange(strDataEnd).Length); if (String.IsNullOrEmpty(ResultString)) { return; } TestResultValue = ""; UnknownResult = ""; //初始化 init(); //writelog.Write("ResultString" + ResultString, "log"); //writelog.Write("strdetype" + strdetype, "log"); if (strDetype == "1") //单帧 { begin = -1; end = ResultString.Length; } else if (strDetype == "2") //多帧 { //根据多帧开始位计算开始位置 if (string.IsNullOrEmpty(strSubBegin)) { begin = -1; } else { if (strSubBegin.IndexOf('<') >= 0 && strSubBegin.IndexOf('>') >= 0) { if (strSubBegin == "<10>") { begin = ResultString.IndexOf("\n"); } else { begin = ResultString.IndexOf((char)int.Parse(strSubBegin.Replace("<", "").Replace(">", ""))); } } else { begin = ResultString.IndexOf(strSubBegin); } }//根据多帧结束位计算结束位置 if (strSubEnd.IndexOf('<') >= 0 && strSubEnd.IndexOf('>') >= 0) { if (begin == -1) { end = ResultString.IndexOf((char)int.Parse(strSubEnd.Replace("<", "").Replace(">", ""))); } else { end = ResultString.IndexOf((char)int.Parse(strSubEnd.Replace("<", "").Replace(">", "")), begin); } } else { end = ResultString.IndexOf(strSubEnd, begin); } } subString = ResultString; #region 分段取数据 while (true) { //分段取数据 if (String.IsNullOrEmpty(strSubBegin) && begin != -1) { begin = begin - 1; } ParString = subString.Substring(begin + 1, end - begin - 1); //本次解析数据 if (DrTestTimeField == null && string.IsNullOrEmpty(strTestTime)) { strTestTime = dsHandle.GetDataSet("to_char(sysdate,'yyyy-MM-dd HH24:mi:ss')", "dual", "").Tables[0].Rows[0][0].ToString(); } //检验日期不为空 #region :获取检验日期、样本号 if (DrTestTimeField != null && string.IsNullOrEmpty(strTestTime)) { //检验日期标识不为空 if (DrTestTimeSignField != null) { if (GetDate(ParString, DrTestTimeSignField).Trim() == DrTestTimeSignField["sign"].ToString()) { strTestTime = GetDate(ParString, DrTestTimeField).Trim(); } } else { strTestTime = GetDate(ParString, DrTestTimeField).Trim(); } //writelog.Write("strTestTime" + strTestTime, "log"); if (!String.IsNullOrEmpty(strTestTime)) { dsGUID = dsHandle.GetDataSet("to_char(sysdate,'yyyy')", "dual", ""); //先将时间转换为yyyyMMddHHmmss格式 try { if (DrTestTimeField["FORMAT"].ToString() == "yyyyMMddHHmm") { strTestTime = strTestTime + "00"; } else if (DrTestTimeField["FORMAT"].ToString() == "yyyyMMdd") { strTestTime = strTestTime + dsHandle.GetDataSet("to_char(sysdate,'HH24miss')", "dual", "").Tables[0].Rows[0][0].ToString(); } else if (DrTestTimeField["FORMAT"].ToString() == "yyMMdd") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime + dsHandle.GetDataSet("to_char(sysdate,'HH24miss')", "dual", "").Tables[0].Rows[0][0].ToString(); } else if (DrTestTimeField["FORMAT"].ToString() == "yyMMddHHmm") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime + "00"; } else if (DrTestTimeField["FORMAT"].ToString() == "yyMMddHHmmss") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime; } else if (DrTestTimeField["FORMAT"].ToString() == "MMddHHmmss") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 4) + strTestTime; } else if (DrTestTimeField["FORMAT"].ToString() == "MMddyyHHmm") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime.Substring(4, 2) + strTestTime.Substring(0, 4) + strTestTime.Substring(6, 4) + "00"; } else if (DrTestTimeField["FORMAT"].ToString() == "yyyy-MM-dd") { strTestTime = Convert.ToDateTime(strTestTime).ToString("yyyy-MM-dd"); //+ dsHandle.GetDataSet("to_char(sysdate,'HH24miss')", "dual", "").Tables[0].Rows[0][0].ToString(); } else if (DrTestTimeField["FORMAT"].ToString() == "dd/MM/yy HH[h]mm[mn]dd[s]") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime.Substring(6, 2) + strTestTime.Substring(3, 2) + strTestTime.Substring(0, 2) + strTestTime.Substring(9, 2) + strTestTime.Substring(14, 2) + strTestTime.Substring(20, 2); } else if (DrTestTimeField["FORMAT"].ToString() == "HHmmssyyMMdd") { strTestTime = dsGUID.Tables[0].Rows[0][0].ToString().Substring(0, 2) + strTestTime.Substring(6, 6) + strTestTime.Substring(0, 6); } //writelog.Write("strTestTime" + strTestTime, "log"); if (DrTestTimeField["FORMAT"].ToString() != "yyyy-MM-dd HH:mm:ss") { /*------0621调试去掉------*/ //strTestTime = strTestTime.Substring(0, 4) + "-" + strTestTime.Substring(4, 2) + "-" + strTestTime.Substring(6, 2) + " " + strTestTime.Substring(8, 2) + ":" + strTestTime.Substring(10, 2) + ":" + strTestTime.Substring(12, 2); } } catch (Exception e) { writelog.Write(strDevice, "解析检验时间出错:" + e.Message + "(请在[检验仪器]-[规则设置]-[解析规则]中检查项目【检验日期】)", "log"); return; } } } //常规样本号不为空 if (DrSampleNoField != null && string.IsNullOrEmpty(strSampleNo)) { if (DrSampleNoSignField != null) { if (GetDate(ParString, DrSampleNoSignField).Trim() == DrSampleNoSignField["sign"].ToString()) { strSampleNo = GetDate(ParString, DrSampleNoField).Trim(); } } else { strSampleNo = GetDate(ParString, DrSampleNoField).Trim(); } } #endregion ; //writelog.Write("strSampleNo" + strSampleNo, "log"); //样本类型 #region :获取样本类型、条码号、检验人、标本 if (DrSampleTypeField == null) { strSampleType = "0"; } //writelog.Write("strSampleType" + ParString, "log"); if (DrSampleTypeField != null && string.IsNullOrEmpty(strSampleType)) { if (DrSampleTypeSignField != null) { if (GetDate(ParString, DrSampleTypeSignField).Trim() == DrSampleTypeSignField["sign"].ToString()) { strSampleType = GetDate(ParString, DrSampleTypeField).Trim(); } } else { strSampleType = GetDate(ParString, DrSampleTypeField).Trim(); } //writelog.Write("strSampleType" + strSampleType, "log"); if (!string.IsNullOrEmpty(strSampleType)) { if (!string.IsNullOrEmpty(DrSampleTypeField["devset"].ToString())) { for (int k = 0; k < DrSampleTypeField["devset"].ToString().Split(';').Length; k++) { //writelog.Write(DrSampleTypeField["devset"].ToString().Split(';')[k].ToString(), "log"); if (DrSampleTypeField["devset"].ToString().Split(';')[k].ToString().ToUpper() == strSampleType.ToUpper() && k == 0) { strSampleType = "0"; } if (DrSampleTypeField["devset"].ToString().Split(';')[k].ToString().ToUpper() == strSampleType.ToUpper() && k == 1) { strSampleType = "1"; } //质控暂时不处理 //if (DrSampleTypeField["devset"].ToString().Split(';')[k].ToString() == strSampleType && k == 2) strSampleType = "-2"; } } } } //writelog.Write("strSampleType" + strSampleType, "log"); //条码号 if (DrBarCodeField != null && string.IsNullOrEmpty(strBarCode)) { if (DrBarCodeSignField != null) { if (GetDate(ParString, DrBarCodeSignField).Trim() == DrBarCodeSignField["sign"].ToString()) { strBarCode = GetDate(ParString, DrBarCodeField).Trim(); } } else { strBarCode = GetDate(ParString, DrBarCodeField).Trim(); } } //检验人 strOperator = ""; //标本名称 if (DrSpecimenField == null) { StrSpecimen = "标本"; } if (DrSpecimenField != null && string.IsNullOrEmpty(StrSpecimen)) { if (DrSpecimenSignField != null) { if (GetDate(ParString, DrSpecimenSignField).Trim() == DrSpecimenSignField["sign"].ToString()) { StrSpecimen = GetDate(ParString, DrSpecimenField).Trim(); } } else { StrSpecimen = GetDate(ParString, DrSampleTypeField).Trim(); } } #endregion ; ResultFlag = true; //结果标识不为空 if (DrResultSignField != null) { if (GetDate(ParString, DrResultSignField).Trim() != DrResultSignField["sign"].ToString()) { ResultFlag = false; } } #region :解析结果值 if (ResultFlag == true) { string ChannelType; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 if (DrResultInfoField != null) { TestResultInfo = GetDate(ParString, DrResultInfoField); } else { TestResultInfo = ParString; } while (true) { if (DrSingleResultField != null) { SingleResult = GetDate(TestResultInfo, DrSingleResultField); } else { SingleResult = TestResultInfo; } //writelog.Write(SingleResult, "log"); if (DrChannelField != null)//取通道号 { channel = GetDate(SingleResult, DrChannelField); if (!string.IsNullOrEmpty(channel)) { if (channel.Substring(channel.Length - 1) == "/") { channel = channel.Substring(0, channel.Length - 1); } } } else { //结果值开始位为1,表明没有通道号,通道号从1开始累加 channel = (Convert.ToInt32(channel) + 1).ToString(); } #region :根据通道号查询项目组成结果串 if (!string.IsNullOrEmpty(channel)) { //FindRow = ds_ItemChannel.Tables[0].Select("通道编码 = '" + channel.Trim() + "'"); FindRow = tItemChannel.Select("通道编码='" + channel.Trim() + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { //FindRow = ds_GraphChannel.Tables[0].Select("通道编码 = '" + channel.Trim() + "'"); //if (FindRow.Length == 0) ChannelType = "";//无指标 //else //{ // ChannelType = FindRow[0]["GRAPH_TYPE"].ToString(); //} ChannelType = null; } else { testItemID = FindRow[0]["项目id"].ToString(); //CONVERSION_RATIO = Convert.ToDecimal(FindRow[0]["换算比"].ToString()); //DECIMAL_LEVEL = Convert.ToDecimal(FindRow[0]["小数位数"].ToString()); ChannelType = "0"; //普通结果 } //是通道 if (!String.IsNullOrEmpty(ChannelType)) { result = GetDate(SingleResult, DrResultField).Trim(); TestResultValue = TestResultValue + testItemID + "^" + result.Trim() + "|"; //writelog.Write(result, "log"); //if (ChannelType == "0" && tItemChannel.Select("通道编码='"+channel+"'")[0]["结果类型"].ToString() == "1")//定性普通结果根据换算比、加算值重新计算结果 //{ // result = GetNewResult(CONVERSION_RATIO, DECIMAL_LEVEL, result).Trim(); // TestResultValue = TestResultValue + testItemID + "^" + result.Trim() + "|"; //} } else { //记录未知项目 UnknownResult = UnknownResult + channel + "|" + GetDate(SingleResult, DrResultField).Trim() + "|"; } } #endregion ; if (TestResultInfo == SingleResult) { break; } if (String.IsNullOrEmpty(SingleResult)) { break; } if (String.IsNullOrEmpty(DrSingleResultField["separated_first"].ToString()) && String.IsNullOrEmpty(DrSingleResultField["separated_second"].ToString())) { TestResultInfo = TestResultInfo.Substring(TestResultInfo.IndexOf(SingleResult) + SingleResult.Length);//.TrimStart(); } else { TestResultInfo = TestResultInfo.Substring(TestResultInfo.IndexOf(SingleResult) + SingleResult.Length + DrSingleResultField["separated_first"].ToString().Length); } } } #endregion ; if (subString.Length == end) { break; } subString = subString.Substring(end + 1); if (String.IsNullOrEmpty(subString)) { break; } if (strSubBegin.IndexOf('<') >= 0 && strSubBegin.IndexOf('>') >= 0) { if (strSubBegin == "<10>") { begin = ResultString.IndexOf("\n"); } begin = subString.IndexOf((char)int.Parse(strSubBegin.Replace("<", "").Replace(">", ""))); } else { begin = subString.IndexOf(strSubBegin); } if (begin == -1) { begin = 0; } if (strSubEnd.IndexOf('<') >= 0 && strSubEnd.IndexOf('>') >= 0) { if (strSubEnd == "<13>") { end = ResultString.IndexOf("\r"); } end = subString.IndexOf((char)int.Parse(strSubEnd.Replace("<", "").Replace(">", "")), begin); } else { end = subString.IndexOf(strSubEnd, begin); } if (end == -1) { end = subString.Length; } } #endregion //分段解析结束 strReserved = strSource; //strSampleType--是否资控;strBarCode条码;strOperator检验人;StrSpecimen标本类型 //strTestTime检验时间|strSampleNo标本号^strSampleType标本类型^strBarCode条码(样本序号)|strOperator检验人|StrSpecimen标本类型|是否质控|检验结果 TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; writelog.Write(strDevice, "解析结果: " + TestResultValue, "result"); if (!String.IsNullOrEmpty(UnknownResult)) { writelog.Write(strDevice, "未知项目:" + UnknownResult, "result"); //日志写入未知项目 } if (!string.IsNullOrEmpty(strSampleNo) || !string.IsNullOrEmpty(strBarCode)) { //ListImagePosition = new List<string>(); //ListImagePosition.Add(@"D:\新建文件夹\二院仪器数据\picture200908190075\0002\F0011.jpg;D:\新建文件夹\二院仪器数据\picture200908190075\0002\F0012.jpg"); //if (ListImagePosition.Count > i) //{ // for (int j = 0; j < ListImagePosition[i].Split(';').Length; j++) // TestGraph.Add(ListImagePosition[i].Split(';')[j].ToString()); //} saveResult.SaveTextResult(strInstrument_id, TestResultValue, TestGraph, DrSampleNoField); if (ImmediatelyUpdate) { saveResult.UpdateData(); } } } #endregion if (!ImmediatelyUpdate) { saveResult.UpdateData(); } }
/// <summary> /// 默认解析方式 /// </summary> /// <param name="a"></param> /// <param name="e"></param> public void GetResult(object a, EventArgs e) { try { string strTestTime; //检验时间 string strSampleNo; //标本号 string strBarCode = ""; //条码 string strOperator = ""; //检验医师 string strSampleType = ""; //检验类型 string StrSpecimen = ""; //标本类型 string ChannelType; //0-普通结果;1-直方图;2-散点图;3-直方图界标;4-散点图界标;5-BASE64 string testItemID = ""; //通道项目ID DataRow[] FindRow; //解析设置 TestGraph = new List <string>(); saveResult = new SaveResult(); IsUpdate(); //重新检查是否有新数据 tItemChannel = OracleHelper.GetDataTable(@"Select 通道编码, m.项目id, Nvl(小数位数, 2) As 小数位数, Nvl(换算比, 0) As 换算比, Nvl(加算值, 0) As 加算值, j.结果类型 From 仪器检测项目 m, 检验项目 j Where m.项目id = j.项目id and m.仪器Id='" + strInstrumentID + "'"); if (dsResult.Tables[0].Rows.Count == 0) //判断是否有新标本 { writeLog.Write(DateTime.Now.ToString() + "未检测到新数据!", "log"); return; } DataTable _dsResult = SelectDistinct(dsResult.Tables[0], "nSid"); foreach (DataRow dr in _dsResult.Rows) //循环标本号 { strTestTime = DateTime.Parse(dr["dDate"].ToString()).ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss");; strSampleNo = dr["nSid"].ToString(); string TestResultValue = ""; foreach (DataRow dr1 in dsResult.Tables[0].Select("nSid='" + dr["nSid"].ToString() + "'"))//循环标本号里面的检验项目 { string _channelNo = dr1["sItem"].ToString(); FindRow = tItemChannel.Select("通道编码='" + _channelNo.Trim() + "'"); if (FindRow.Length == 0) //无普通结果则查找图像能道,无图像通道则更新通道类型为空 { ChannelType = null; writeLog.Write(strDevice, "未设置通道:" + _channelNo, "log"); } else { testItemID = FindRow[0]["项目id"].ToString(); ChannelType = "0"; //普通结果 TestResultValue = TestResultValue + testItemID + "^" + dr1["Result"].ToString() + "|"; } } TestResultValue = strTestTime + "|" + strSampleNo + "^" + strSampleType + "^" + strBarCode + "|" + strOperator + "|" + StrSpecimen + "|" + "|" + TestResultValue; try { saveResult.SaveTextResult(strInstrumentID, TestResultValue, TestGraph, null); saveResult.UpdateData(); writeLog.Write(strDevice, "解析结果: " + TestResultValue, "result"); } catch (Exception ex) { writeLog.Write(strDevice, "保存失败: " + ex.ToString(), "log"); } //System.Windows.Forms.MessageBox.Show(TestResultValue); } } catch (Exception exp1) { writeLog.Write(strDevice, "处理失败: " + exp1.ToString(), "log"); } }