/// <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(); } } }
public void AddDS(DI800Manager.DI800 data) { lock (ConvertDSLocker) { ConvertDS.Enqueue(data); IsNewDsSignal = true; } }
/// <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); } }
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); }
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); }