/// <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 AddPL(PLManager.PL12 data) { lock (ConvertPLLocker) { ConvertPL.Enqueue(data); IsNewPlSignal = true; } }
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); }
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); }
/// <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); } }