Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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();
            }
        }
Пример #3
0
        /// <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");
            }
        }
Пример #4
0
        /// <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();
        }
Пример #5
0
        /// <summary>
        /// 标本核收
        /// </summary>
        public void SampleHS()
        {
            SaveResult saveResult = new SaveResult();
            DataSet    dsTestSpecimenList;
            DataSet    dsTestApplyDetail;
            DataSet    dsGUID;
            string     strTestApplyDetailID = "";

            //strBarCode = "102021875157";
            //OracleParameter[] parameters ={
            //                        new OracleParameter("SPECIMEN_ID_IN",OracleType.VarChar,4000),
            //                        new OracleParameter("STATUS_IN",OracleType.Number,1),
            //                        new OracleParameter("OPERATOR_IN",OracleType.VarChar,36),
            //                        new OracleParameter("OPERATOR_TIME_IN",OracleType.DateTime),
            //                        new OracleParameter("LOT_IN",OracleType.VarChar,40),
            //                        new OracleParameter("deny_reason_in",OracleType.VarChar,36)};

            dsTestSpecimenList = dsHandle.GetDataSet("SPECIMEN_ID", "Test_Specimen_list", "Barcode='" + strBarCode + "'");
            foreach (DataRow dr in dsTestSpecimenList.Tables[0].Rows)
            {
                dsTestApplyDetail    = dsHandle.GetDataSet("wm_concat(TEST_APPLY_DETAIL_ID) TEST_APPLY_DETAIL_ID", "TEST_APPLY_DETAIL", "SPECIMEN_ID='" + dr["SPECIMEN_ID"].ToString() + "'");
                strTestApplyDetailID = strTestApplyDetailID + "," + dsTestApplyDetail.Tables[0].Rows[0]["TEST_APPLY_DETAIL_ID"].ToString();
            }
            ;
            if (strTestApplyDetailID.Substring(0, 1) == ",")
            {
                strTestApplyDetailID = strTestApplyDetailID.Substring(1);
            }
            dsGUID = dsHandle.GetDataSet("sysdate", "dual", "");

            ConnectDB         init = new ConnectDB();
            OracleCommand     cmd  = new OracleCommand();
            OracleTransaction transaction;

            init.DBConnect();
            cmd.Connection  = ConnectDB.con;                    // init.con;
            transaction     = ConnectDB.con.BeginTransaction(); // init.con.BeginTransaction();
            cmd.Transaction = transaction;

            cmd.CommandText = "P_TEST_SPECIMEN_LIST_UP";//声明存储过程名
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("SPECIMEN_ID_IN", OracleType.VarChar, 200);
            cmd.Parameters.Add("STATUS_IN", OracleType.Number);
            cmd.Parameters.Add("OPERATOR_IN", OracleType.VarChar, 20);
            cmd.Parameters.Add("OPERATOR_TIME_IN", OracleType.DateTime);
            cmd.Parameters.Add("LOT_IN", OracleType.VarChar, 20);
            cmd.Parameters.Add("deny_reason_in", OracleType.VarChar, 36);

            cmd.Parameters["SPECIMEN_ID_IN"].Value   = strTestApplyDetailID;
            cmd.Parameters["STATUS_IN"].Value        = 6;
            cmd.Parameters["OPERATOR_IN"].Value      = "操作员";
            cmd.Parameters["OPERATOR_TIME_IN"].Value = Convert.ToDateTime(dsGUID.Tables[0].Rows[0][0].ToString());
            cmd.Parameters["LOT_IN"].Value           = string.Empty;
            cmd.Parameters["deny_reason_in"].Value   = strInstrumentID;

            cmd.Parameters["SPECIMEN_ID_IN"].Direction   = ParameterDirection.Input;
            cmd.Parameters["STATUS_IN"].Direction        = ParameterDirection.Input;
            cmd.Parameters["OPERATOR_IN"].Direction      = ParameterDirection.Input;
            cmd.Parameters["OPERATOR_TIME_IN"].Direction = ParameterDirection.Input;
            cmd.Parameters["LOT_IN"].Direction           = ParameterDirection.Input;
            cmd.Parameters["deny_reason_in"].Direction   = ParameterDirection.Input;

            try
            {
                cmd.ExecuteNonQuery();//执行存储过程
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                writelog.Write(strDeviceName, "核收时出错!" + ex.Message, "log");
            }
            //init.DisConnectDB(init.con);
            //transaction = null;
            //cmd = null;
            //init = null;
        }