Esempio n. 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();
         }
     }
 }
Esempio n. 2
0
 public void AddDS(DI800Manager.DI800 data)
 {
     lock (ConvertDSLocker)
     {
         ConvertDS.Enqueue(data);
         IsNewDsSignal = true;
     }
 }
Esempio n. 3
0
 /// <summary>
 /// 生化仪的显示程序,如果不切换生化仪的话,线程会休眠
 /// </summary>
 private void ConvertResultDS()
 {
     while (true)
     {
         DSsignal.WaitOne();
         if (cq.IsNewDsSignal && cq.IsConvertDsAvailable)
         {
             DI800Manager.DI800 di800 = cq.GetDS();
             List <DI800Manager.DI800Result> di800result = di800.Result;
             Dispatcher.Invoke(new Action(() =>
             {
                 ResultList.Clear();//清楚上条记录
             }));
             foreach (var single in di800result)
             {
                 Result DSresult = new Result();
                 DSresult.ITEM        = single.ITEM;
                 DSresult.FULL_NAME   = single.FULL_NAME;
                 DSresult.RESULT      = single.RESULT.ToString();
                 DSresult.UNIT        = single.UNIT;
                 DSresult.NORMAL_LOW  = single.NORMAL_LOW.ToString();
                 DSresult.NORMAL_HIGH = single.NORMAL_HIGH.ToString();
                 DSresult.INDICATE    = single.INDICATE;
                 Dispatcher.Invoke(new Action(() =>
                 {
                     ResultList.Add(DSresult);
                 }));
             }
             Dispatcher.Invoke(new Action(() =>
             {
                 dsshow.DSTYPE       = di800.Type;
                 dsshow.DSPATIENT_ID = di800.PATIENT_ID;
                 dsshow.DSDOCTOR     = di800.DOCTOR;
                 dsshow.DSSAMPLE_ID  = di800.SAMPLE_ID;
                 //dsshow.DSTEST_TIME = di800.TIME.ToString();
                 dsshow.DSTEST_TIME   = di800.SEND_TIME.ToString();
                 dsshow.DSFIRST_NAME  = di800.FIRST_NAME;
                 dsshow.DSSAMPLE_KIND = di800.SAMPLE_KIND;
                 dsshow.DSAREA        = di800.AREA;
                 dsshow.DSSEX         = di800.SEX;
                 dsshow.DSBED         = di800.BED;
                 dsshow.DSDEVICE      = di800.Device;
             }));
         }
         Thread.Sleep(300);
     }
 }
Esempio n. 4
0
        public static void DSdataReceived(object receivedata, string name)//DS数据ASTM化
        {
            DI800Manager.DI800     data = (DI800Manager.DI800)receivedata;
            ASTMManager.ASTMStruct astm = new ASTMManager.ASTMStruct();
            astm.Item = new List <string>();

            ASTM_HeaderRecordPack h = new ASTM_HeaderRecordPack();

            h.DelimiterDefinition = "\\^&";
            h.SenderNameorID      = data.Device;
            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.PATIENT_ID;
            p.PatientLastName             = data.FIRST_NAME;
            p.Age                         = data.AGE;
            p.PatientSex                  = data.SEX;
            p.DocterLastName              = data.DOCTOR;
            p.Location                    = data.AREA;
            p.NatureofaltDiagCodeandClass = data.BED;

            ASTM_TestOrderRecordPack o = new ASTM_TestOrderRecordPack();

            o.SequenceNumber = "1";
            o.SampleID       = data.SAMPLE_ID;
            o.Priority       = (data.Type.IndexOf("急诊") > 0) ? "S" : "R";
            o.SpecimenCollectionDateandTime    = data.TIME.ToString("yyyyMMddhhmmss");      //检测时间
            o.DateTimeSpecimenReceivedintheLab = data.SEND_TIME.ToString("yyyyMMddhhmmss"); //送检时间
            o.ReportType = "F";                                                             //最终的结果

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

            foreach (DI800Manager.DI800Result 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.ToString();
                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.Device;
                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.Device;
            astm.Sample_ID   = data.SAMPLE_ID;
            astm.SendTime    = data.SEND_TIME.ToString();
            astmManager.AddASTM(astm);
        }
Esempio n. 5
0
        public static void DSdataReceived(object receivedata, string name)//处理生化仪样本测试结果 ORU_R01
        {
            DI800Manager.DI800   data = (DI800Manager.DI800)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.Device;
            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段,主要用来构建病人的个人信息
            oruR01.GetPATIENT_RESULT().PATIENT.PID.SetIDPID.Value = "1";//这个值还要商榷
            oruR01.GetPATIENT_RESULT().PATIENT.PID.GetPatientIdentifierList(0).ID.Value = data.PATIENT_ID;
            oruR01.GetPATIENT_RESULT().PATIENT.PID.GetAlternatePatientIDPID(0).ID.Value = data.BED;
            oruR01.GetPATIENT_RESULT().PATIENT.PID.GetPatientName(0).FamilyLastName.FamilyName.Value = data.FIRST_NAME;
            oruR01.GetPATIENT_RESULT().PATIENT.PID.GetMotherSMaidenName(0).FamilyLastName.FamilyName.Value = data.AREA;
            oruR01.GetPATIENT_RESULT().PATIENT.PID.Sex.Value = data.SEX;

            //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.TIME);
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SpecimenReceivedDateTime.TimeOfAnEvent.SetLongDate(data.SEND_TIME);
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.FillerField1.Value = data.DOCTOR;
            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.FillerField2.Value = data.DEPARTMENT;
            //oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().OBR.SpecimenReceivedDateTime.TimeOfAnEvent.Value = data.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];
                CE[]   ce  = new CE[num];
                Varies value;
                for (int i = 0; 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].ITEM;
                    obx[i].ObservationIdentifier.Identifier.Value = data.Result[i].FULL_NAME;

                    ce[i]                  = new CE(oruR01);
                    value                  = obx[i].GetObservationValue(0);
                    value.Data             = ce[i];
                    ce[i].Identifier.Value = data.Result[i].RESULT.ToString();

                    obx[i].Units.Identifier.Value     = data.Result[i].UNIT;
                    obx[i].ReferencesRange.Value      = data.Result[i].NORMAL_LOW.ToString() + "---" + data.Result[i].NORMAL_HIGH.ToString();
                    obx[i].GetAbnormalFlags(0).Value  = data.Result[i].RESULT > data.Result[i].NORMAL_HIGH ? "H" : (data.Result[i].RESULT < data.Result[i].NORMAL_LOW ? "L" : "N");
                    obx[i].NatureOfAbnormalTest.Value = data.Result[i].INDICATE;
                    hl7.Item.Add(data.Result[i].ITEM);
                }
            }
            #endregion
            hl7.HL7Message = Parser.Encode(oruR01);
            hl7.Sample_ID  = data.SAMPLE_ID;
            hl7.Device     = data.Device;
            hl7.SendTime   = data.SEND_TIME.ToString();
            hl7Manager.AddHL7(hl7);
            log.Info("HL7 DS package " + hl7.Sample_ID);
        }