Example #1
0
 /// <summary>
 /// 后台一直接收数据
 /// </summary>
 /// <param name="data"></param>
 /// <param name="name"></param>
 public static void ReceiveResult(object data, string name)//这是后台一直运行的
 {
     if (name == "DS")
     {
         DI800Manager.DI800 di800 = (DI800Manager.DI800)data;
         if (GlobalVariable.NoDisplaySampleID.Contains(di800.SAMPLE_ID))
         {
             GlobalVariable.NoDisplaySampleID.Remove(di800.SAMPLE_ID);
             return;
         }
         cq.AddDS(di800);
         while (cq.IsConvertDsMorethanOne)//队列中就保持一个
         {
             cq.RemoveDS();
         }
     }
     if (name == "PL")
     {
         PLManager.PL12 pl12 = (PLManager.PL12)data;
         cq.AddPL(pl12);
         while (cq.IsConvertPlMorethanOne)
         {
             cq.RemovePL();
         }
     }
 }
Example #2
0
 public void AddPL(PLManager.PL12 data)
 {
     lock (ConvertPLLocker)
     {
         ConvertPL.Enqueue(data);
         IsNewPlSignal = true;
     }
 }
Example #3
0
        public static void PLdataReceived(object receivedata, string name)//PL数据ASTM化
        {
            PLManager.PL12         data = (PLManager.PL12)receivedata;
            ASTMManager.ASTMStruct astm = new ASTMManager.ASTMStruct();
            astm.Item = new List <string>();

            ASTM_HeaderRecordPack h = new ASTM_HeaderRecordPack();

            h.DelimiterDefinition = "\\^&";
            h.SenderNameorID      = data.DEVEICE;
            h.ProcessingID        = "PR";
            h.VersionNumber       = "1394-97";
            h.DateandTime         = DateTime.Now.ToString("yyyyMMddhhmmss");

            ASTM_PatientRecordPack p = new ASTM_PatientRecordPack();//这个必须有

            p.SequenceNumber = "1";
            p.PatientID      = data.SAMPLE_ID;

            ASTM_TestOrderRecordPack o = new ASTM_TestOrderRecordPack();

            o.SequenceNumber = "1";
            o.SampleID       = data.SAMPLE_ID;
            o.SpecimenCollectionDateandTime = data.TEST_TIME.ToString("yyyyMMddhhmmss"); //检测时间
            o.ReportType = "F";                                                          //最终的结果

            ASTM_TestOrderRecordPack.Assay item = new ASTM_TestOrderRecordPack.Assay();
            int num = 1;
            List <ASTM_ResultRecordPack> listR = new List <ASTM_ResultRecordPack>();
            ASTM_ResultRecordPack        rAPP  = new ASTM_ResultRecordPack();

            item.AssayNo   = num.ToString();
            item.AssayName = "AAP";
            item.RepeatNum = "1";
            o.AssayList.Add(item);
            rAPP.SequenceNumber           = num.ToString();
            rAPP.AssayNo                  = num.ToString();
            rAPP.AssayName                = "诱聚剂项目";
            rAPP.Replicatenumber          = "1";
            rAPP.ResultType               = "F"; //定量结果
            rAPP.MeasurementValue         = data.AAP;
            rAPP.ResultStatus             = "F"; //最终结果
            rAPP.InstrumentIdentification = data.DEVEICE;
            listR.Add(rAPP);
            foreach (PLManager.PL12Result temp in data.Result)
            {
                ++num;
                item.AssayNo   = num.ToString();
                item.AssayName = temp.ITEM;
                item.RepeatNum = "1";
                o.AssayList.Add(item);

                ASTM_ResultRecordPack r = new ASTM_ResultRecordPack();
                r.SequenceNumber             = num.ToString();
                r.AssayNo                    = num.ToString();
                r.AssayName                  = temp.FULL_NAME;
                r.Replicatenumber            = "1";
                r.ResultType                 = "F";//定量结果
                r.MeasurementValue           = temp.RESULT;
                r.Units                      = temp.UNIT;
                r.MeasurementRangeLowerLimit = temp.NORMAL_LOW.ToString();
                r.MeasurementRangeUpperLimit = temp.NORMAL_HIGH.ToString();
                r.ResultAbnormalflag         = temp.INDICATE;
                r.ResultStatus               = "F";//最终结果
                r.InstrumentIdentification   = data.DEVEICE;
                listR.Add(r);
                astm.Item.Add(temp.ITEM);
            }
            ASTM_Encode message = new ASTM_Encode(h, p, o, listR);

            astm.ASTMMessage = message.Encode();
            astm.Device      = data.DEVEICE;
            astm.Sample_ID   = data.SAMPLE_ID;
            astmManager.AddASTM(astm);
        }
Example #4
0
        public static void PLdataReceived(object receivedata, string name)//处理血小板样本测试结果  ORU_RO1
        {
            PLManager.PL12       data = (PLManager.PL12)receivedata;
            HL7Manager.HL7Struct hl7  = new HL7Manager.HL7Struct();
            hl7.Item = new List <string>();

            PipeParser Parser = new PipeParser();
            ORU_R01    oruR01 = new ORU_R01();

            #region 消息段封装
            //MSH段,位于消息最前面
            oruR01.MSH.FieldSeparator.Value                 = "|";
            oruR01.MSH.EncodingCharacters.Value             = @"^~\&";
            oruR01.MSH.SendingApplication.NamespaceID.Value = GlobalVariable.Manufacturer; //仪器供应商
            oruR01.MSH.SendingFacility.NamespaceID.Value    = data.DEVEICE;
            oruR01.MSH.DateTimeOfMessage.TimeOfAnEvent.SetLongDate(DateTime.Now);          //当前时间
            oruR01.MSH.MessageType.MessageType.Value       = "ORU";
            oruR01.MSH.MessageType.TriggerEvent.Value      = "R01";
            oruR01.MSH.MessageControlID.Value              = "1";
            oruR01.MSH.ProcessingID.ProcessingID.Value     = "P";
            oruR01.MSH.VersionID.VersionID.Value           = "2.3.1";
            oruR01.MSH.ApplicationAcknowledgmentType.Value = "0";//样本测试结果
            oruR01.MSH.GetCharacterSet(0).Value            = GlobalVariable.SocketCode ? "ASCII" : "UTF8";
            //没有病人信息,PID段直接省略
            //OBR段,用于传输关于检验报告相关的医嘱信息
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SetIDOBR.Value = "1";
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.PlacerOrderNumber.EntityIdentifier.Value = data.SAMPLE_ID;
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.ObservationDateTime.TimeOfAnEvent.SetLongDate(data.TEST_TIME);
            //0BX段,用于在报告消息中传递观察的信息
            ORU_R01_ORDER_OBSERVATION orderObservation = oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION();

            int num = data.Result.Count();
            if (num != 0)
            {
                OBX[]  obx = new OBX[num + 1];
                CE[]   ce  = new CE[num + 1];
                Varies value;

                obx[0] = orderObservation.GetOBSERVATION(0).OBX;
                obx[0].SetIDOBX.Value         = "1";
                obx[0].ValueType.Value        = "NM";
                obx[0].ObservationSubID.Value = "AAP";
                obx[0].ObservationIdentifier.Identifier.Value = "诱聚剂项目";
                ce[0]                  = new CE(oruR01);
                value                  = obx[0].GetObservationValue(0);
                value.Data             = ce[0];
                ce[0].Identifier.Value = data.AAP;
                for (int i = 1; i <= num; i++)
                {
                    obx[i] = orderObservation.GetOBSERVATION(i).OBX;
                    obx[i].SetIDOBX.Value         = (i + 1).ToString();
                    obx[i].ValueType.Value        = "NM";
                    obx[i].ObservationSubID.Value = data.Result[i - 1].ITEM;
                    obx[i].ObservationIdentifier.Identifier.Value = data.Result[i - 1].FULL_NAME;

                    ce[i]                  = new CE(oruR01);
                    value                  = obx[i].GetObservationValue(0);
                    value.Data             = ce[i];
                    ce[i].Identifier.Value = data.Result[i - 1].RESULT.ToString();
                    if (data.Result[i - 1].UNIT != string.Empty)
                    {
                        obx[i].Units.Identifier.Value = data.Result[i - 1].UNIT;
                    }
                    if (data.Result[i - 1].NORMAL_HIGH != 0)
                    {
                        obx[i].ReferencesRange.Value     = data.Result[i - 1].NORMAL_LOW.ToString() + "---" + data.Result[i - 1].NORMAL_HIGH.ToString();
                        obx[i].GetAbnormalFlags(0).Value = data.Result[i - 1].INDICATE;
                    }
                    hl7.Item.Add(data.Result[i - 1].ITEM);
                }
            }
            #endregion

            hl7.HL7Message = Parser.Encode(oruR01);
            hl7.Sample_ID  = data.SAMPLE_ID;
            hl7.Device     = data.DEVEICE;
            hl7Manager.AddHL7(hl7);
        }
Example #5
0
        /// <summary>
        /// 血小板的显示程序,如果不切换血小板的话,线程会休眠
        /// </summary>
        private void ConvertResultPL()
        {
            while (true)
            {
                PLsignal.WaitOne();
                if (cq.IsNewPlSignal && cq.IsConvertPlAvailable)
                {
                    PLManager.PL12 pl12 = cq.GetPL();
                    List <PLManager.PL12Result> pl12result = pl12.Result;

                    /**add by wenjie for livecharts**/
                    ChartValues <double> list_pac = new ChartValues <double>();
                    for (int i = 0; i < 5; i++)
                    {
                        list_pac.Add(0.0);
                    }
                    ChartValues <double> list_rbc = new ChartValues <double>();
                    ChartValues <double> list_plt = new ChartValues <double>();
                    /**add by wenjie for livecharts**/

                    Dispatcher.Invoke(new Action(() =>
                    {
                        ResultList.Clear();//清除上条记录
                    }));
                    foreach (var single in pl12result)
                    {
                        if (single.ITEM == "RBCHist" || single.ITEM == "PLTHist" || single.ITEM == "PACBit" || single.ITEM == "PAC1" ||
                            single.ITEM == "PAC2" || single.ITEM == "PAC3" || single.ITEM == "PAC4" || single.ITEM == "PAC5" ||
                            single.ITEM == "PAC6" || single.ITEM == "PAC7" || single.ITEM == "PAC8")
                        {
                            if (single.ITEM == "RBCHist")
                            {
                                for (int i = 0, j = 0; i < single.RESULT.Length / 2; i++)
                                {
                                    int Yaxis = Convert.ToInt16(single.RESULT.Substring(j, 2), 16);
                                    list_rbc.Add(Yaxis);

                                    j = j + 2;
                                }
                            }
                            if (single.ITEM == "PLTHist")
                            {
                                for (int i = 0, j = 0; i < single.RESULT.Length / 2; i++)
                                {
                                    int Yaxis = Convert.ToInt16(single.RESULT.Substring(j, 2), 16);
                                    list_plt.Add(Yaxis);
                                    j = j + 2;
                                }
                            }
                            if (single.ITEM == "PAC1")
                            {
                                list_pac[0] = Convert.ToInt16(single.RESULT);
                            }
                            if (single.ITEM == "PAC2")
                            {
                                list_pac[1] = Convert.ToInt16(single.RESULT);
                            }
                            if (single.ITEM == "PAC3")
                            {
                                list_pac[2] = Convert.ToInt16(single.RESULT);
                            }
                            if (single.ITEM == "PAC4")
                            {
                                list_pac[3] = Convert.ToInt16(single.RESULT);
                            }
                            if (single.ITEM == "PAC5")
                            {
                                list_pac[4] = Convert.ToInt16(single.RESULT);
                            }
                            continue;
                        }
                        Result PLresult = new Result();
                        PLresult.ITEM        = single.ITEM;
                        PLresult.FULL_NAME   = single.FULL_NAME;
                        PLresult.RESULT      = single.RESULT;
                        PLresult.UNIT        = single.UNIT;
                        PLresult.NORMAL_LOW  = single.NORMAL_LOW.ToString();
                        PLresult.NORMAL_HIGH = single.NORMAL_HIGH.ToString();
                        PLresult.INDICATE    = single.INDICATE;
                        Dispatcher.Invoke(new Action(() =>
                        {
                            ResultList.Add(PLresult);
                            PLchart.LVC_PAC.Series = new SeriesCollection
                            {
                                new LineSeries
                                {
                                    Values = list_pac,
                                }
                            };
                            PLchart.LVC_RBC.Series = new SeriesCollection
                            {
                                new LineSeries
                                {
                                    Values        = list_rbc,
                                    PointGeometry = null,
                                    Fill          = Brushes.OrangeRed,
                                    Stroke        = Brushes.OrangeRed
                                }
                            };
                            PLchart.LVC_PLT.Series = new SeriesCollection
                            {
                                new LineSeries
                                {
                                    Values        = list_plt,
                                    PointGeometry = null,
                                }
                            };
                        }));
                    }
                    Dispatcher.Invoke(new Action(() =>
                    {
                        plshow.PLTYPE        = pl12.TYPE;
                        plshow.PLSAMPLE_ID   = pl12.SAMPLE_ID;
                        plshow.PLTEST_TIME   = pl12.TEST_TIME.ToString();
                        plshow.PLDEVICE      = pl12.DEVEICE;
                        plshow.PLBARCODE     = pl12.BARCODE;
                        plshow.PLSAMPLE_KIND = pl12.SAMPLE_KIND;
                        plshow.PLAAP         = pl12.AAP;
                    }));
                }
                Thread.Sleep(200);
            }
        }