Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }