diff --git a/deviceAnalysis.cs b/deviceAnalysis.cs index c8ca486..b0941ed 100644 --- a/deviceAnalysis.cs +++ b/deviceAnalysis.cs @@ -17,9 +17,9 @@ using System.Runtime.InteropServices.ComTypes; namespace FlyDockTool { - public class deviceAnalysis + public class deviceAnalysis { - public EventHandler dataOutPutShow; + public EventHandler dataOutPutShow; public static deviceAnalysis Instance; //申明一个EcgDrawing对象,复制Null private static readonly object LockHelper = new object(); string tempData = string.Empty;//存储串口和TCP接收到的 累计数据 @@ -37,7 +37,7 @@ namespace FlyDockTool return Instance; } - deviceAnalysis() + deviceAnalysis() { _tResult = new System.Threading.Timer(obj => TResultTick(), null, -1, 5000);//调用方法TResultTick 作为定时执行的方法 处于暂停状态 _tcpResult = new System.Threading.Timer(obj => tcpResultTick(), null, -1, 10);//调用方法TResultTick 作为定时执行的方法 处于暂停状态 @@ -50,7 +50,7 @@ namespace FlyDockTool /// /// /// - int[] strCount(string keyWords,string stringStr) + int[] strCount(string keyWords, string stringStr) { List posList = new List(); for (int i = 0; (i + keyWords.Length) < stringStr.Length; i++) @@ -1472,7 +1472,7 @@ namespace FlyDockTool ermList.Clear(); if (i + 20 > resulteArray.Length) break; - string[] spArray =resulteArray[3].Trim().Split(' '); + string[] spArray = resulteArray[3].Trim().Split(' '); string sampleNo1 = resulteArray[3].Trim().Split(' ')[2].Replace("-", "0").TrimStart('0'); //string testDate1 = jiexiDate(resulteArray[i + 1], resulteArray[i + 2]); string testDate1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); @@ -1492,7 +1492,7 @@ namespace FlyDockTool erm1.sampleNo = sampleNo1; erm1.testDate = testDate1; erm1.chanelNo = "URO";//项目代号 - erm1.itemValue = resulteArray[i + 5].Substring(4,11).Trim();//项目结果 + erm1.itemValue = resulteArray[i + 5].Substring(4, 11).Trim();//项目结果 erm1.itemUnit = "mg/dL"; ermList.Add(erm1); @@ -1522,7 +1522,7 @@ namespace FlyDockTool erm4.sampleNo = sampleNo1; erm4.testDate = testDate1; erm4.chanelNo = "BIL";//项目代号 - erm4.itemValue = resulteArray[i + 8].Substring(5,13).Trim();//项目结果 + erm4.itemValue = resulteArray[i + 8].Substring(5, 13).Trim();//项目结果 erm4.itemUnit = ""; ermList.Add(erm4); @@ -1644,11 +1644,11 @@ namespace FlyDockTool if (apiOptions.CurrentDevice == "BC-5130")//BC-5130 { - + string MachineCode = apiOptions.MachineCode; string MachineID = apiOptions.MachineID; List ermList = new List(); - string[] itemArray = new string[26] { "WBC", "NEU%", "LYM%", "MON%", "EOS%", "BAS%", "NEU#", "LYM#", "MON#", "EOS#", "BAS#", "RBC", "HGB", "HCT", "MCV", "MCH", "MCHC", "RDW-SD", "PLT", "MPV", "PDW", "PCT", "RDW-CV", "PLCC", "PLCR" , "Lymphocytosis" }; + string[] itemArray = new string[26] { "WBC", "NEU%", "LYM%", "MON%", "EOS%", "BAS%", "NEU#", "LYM#", "MON#", "EOS#", "BAS#", "RBC", "HGB", "HCT", "MCV", "MCH", "MCHC", "RDW-SD", "PLT", "MPV", "PDW", "PCT", "RDW-CV", "PLCC", "PLCR", "Lymphocytosis" }; //string[] resulteArray = deviceDataStr.Split('\n'); deviceDataStr = deviceDataStr.Replace("\r", "").Replace("\n", ""); string sampleNo1 = string.Empty;//样本号 @@ -1660,7 +1660,7 @@ namespace FlyDockTool else itemStr = itemArray[i] + "^LN||"; - string val1 = deviceDataStr.Substring(deviceDataStr.IndexOf("OBR"),30); + string val1 = deviceDataStr.Substring(deviceDataStr.IndexOf("OBR"), 30); sampleNo1 = val1.Split('|')[3]; string testDate1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); examResultMode erm1 = new examResultMode(); @@ -1722,16 +1722,16 @@ namespace FlyDockTool string[] itemArray = new string[22] { "ALT", "AST", "ALP", "GGT", "IBIL", "TP", "ALB", "Crea", "UA", "GLU", "TG", "HDL", "LDL", "TB|TB", "TC", "DB", "CHE", "BUN|BUN", "TBA", "A/G", "BUN/CREA", "GLOB" }; deviceDataStr = deviceDataStr.Replace("\r", "").Replace("\n", ""); deviceDataStr = deviceDataStr.Replace("OBX", "。"); - + string[] valArray = deviceDataStr.Split('。'); string sampleNo1 = string.Empty;//样本号 for (int A = 0; A < valArray.Length; A++) { if (valArray[A].Contains("OBR|")) { - int index1 = valArray[A].Substring(valArray[A].IndexOf("OBR|"), 20).IndexOf("||")+2; - sampleNo1 = jiexisampleNo8(index1, valArray[A].Substring(valArray[A].IndexOf("OBR|"),18)).ToString(); - + int index1 = valArray[A].Substring(valArray[A].IndexOf("OBR|"), 20).IndexOf("||") + 2; + sampleNo1 = jiexisampleNo8(index1, valArray[A].Substring(valArray[A].IndexOf("OBR|"), 18)).ToString(); + } for (int i = 0; i < itemArray.Length; i++) { @@ -1778,9 +1778,9 @@ namespace FlyDockTool itemStr = itemArray[i] + "^99MRC||"; else itemStr = itemArray[i] + "^LN||"; - - int index1 = deviceDataStr.Substring(deviceDataStr.IndexOf("OBR|"), 20).IndexOf("||") + 2; - sampleNo1 = jiexisampleNo8(index1, deviceDataStr.Substring(deviceDataStr.IndexOf("OBR|"), 18)).ToString(); + + int index1 = deviceDataStr.Substring(deviceDataStr.IndexOf("OBR|"), 20).IndexOf("||") + 2; + sampleNo1 = jiexisampleNo8(index1, deviceDataStr.Substring(deviceDataStr.IndexOf("OBR|"), 18)).ToString(); @@ -1859,7 +1859,7 @@ namespace FlyDockTool erm.sampleNo = sampleNo1; erm.testDate = testDate1; erm.chanelNo = "GLU";//项目代号 - erm.itemValue = resulteArray[i + 4].Substring(4,6).Trim();//项目结果 + erm.itemValue = resulteArray[i + 4].Substring(4, 6).Trim();//项目结果 erm.itemUnit = "cells/uL"; ermList.Add(erm); @@ -1971,7 +1971,7 @@ namespace FlyDockTool erm11.sampleNo = sampleNo1; erm11.testDate = testDate1; erm11.chanelNo = "Color";//项目代号 - erm11.itemValue = resulteArray[i + 15].Replace("Color:","").Trim();//项目结果 + erm11.itemValue = resulteArray[i + 15].Replace("Color:", "").Trim();//项目结果 erm11.itemUnit = "mmol/L"; ermList.Add(erm11); //将结果提交到LIS系统 @@ -1999,8 +1999,8 @@ namespace FlyDockTool if (i + 15 > resulteArray.Length) break; string[] spArray = resulteArray[2].Trim().Split(' '); - string sampleNo1 = spArray[2].Substring(0,1).TrimStart('0'); - // string sampleNo1 = resulteArray[2].Trim().Split(' ')[1]; .Replace("-", "0").TrimStart('0') + string sampleNo1 = spArray[2].Substring(0, 1).TrimStart('0'); + // string sampleNo1 = resulteArray[2].Trim().Split(' ')[1]; .Replace("-", "0").TrimStart('0') //string testDate1 = jiexiDate(resulteArray[i + 1], resulteArray[i + 2]); string testDate1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); examResultMode erm = new examResultMode(); @@ -2116,7 +2116,7 @@ namespace FlyDockTool erm9.itemUnit = ""; ermList.Add(erm9); - + //将结果提交到LIS系统 baseMsgModel bmm1 = apiOptions.CreateInstance().upLoadExamResult(ermList); @@ -2127,13 +2127,60 @@ namespace FlyDockTool dataOutPutShow("数据提交失败:" + jsonStr, null); } + } + if (apiOptions.CurrentDevice == "BS-330E")//BS-330E 他是一次性发一条样本 但一个样本号有多个项目 挨个发其中的项目 生化 + { + string MachineCode = apiOptions.MachineCode; + string MachineID = apiOptions.MachineID; + List ermList = new List(); + string[] itemArray = new string[10] { "ALT", "AST", "T-Bil", "UA", "UREA", "CREA-S", "TC", "TG", "HDL-C", "LDL-C" }; + //string[] resulteArray = deviceDataStr.Split('\n'); + //deviceDataStr = deviceDataStr.Replace("\r", "").Replace("\n", ""); + string[] valArray = deviceDataStr.Split(''); + string sampleNo1 = string.Empty;//样本号 + string itemStr = string.Empty; + string itemValue = string.Empty; + for (int i = 0; i < itemArray.Length; i++) + { + for (int j = 0; j < valArray.Length; j++) + { + if (itemArray[i] == valArray[j].Substring(valArray[j].IndexOf("OBX|1|NM|")).Split('|')[4]) + { + sampleNo1 = valArray[j].Substring(valArray[j].IndexOf("OBR|1||") + "OBR|1||".Length, valArray[j].IndexOf("|Mindray^BS-330E|") - valArray[j].IndexOf("OBR|1||") - "OBR|1||".Length).Trim(); + itemStr = valArray[j].Substring(valArray[j].IndexOf("OBX|1|NM|")).Split('|')[4]; + itemValue = valArray[j].Substring(valArray[j].IndexOf("OBX|1|NM|")).Split('|')[5]; + string testDate1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + examResultMode erm1 = new examResultMode(); + erm1.machineCode = MachineCode; + erm1.machineID = MachineID; + erm1.sampleNo = sampleNo1; + erm1.testDate = testDate1; + erm1.chanelNo = itemStr;//项目代号 + erm1.itemValue = itemValue; + erm1.itemUnit = ""; + ermList.Add(erm1); + break; + } + } + } + + //将结果提交到LIS系统 + baseMsgModel bmm1 = apiOptions.CreateInstance().upLoadExamResult(ermList); + string jsonStr = JsonConvert.SerializeObject(ermList); + + + if (bmm1.code == 200) + dataOutPutShow("数据和图像提交成功:" + jsonStr, null); + else + dataOutPutShow("数据和图像提交失败:" + jsonStr, null); + } return rerultJson; } - + /// @@ -2147,7 +2194,7 @@ namespace FlyDockTool string ItemValueStr = ""; string Str1 = deviceDataStr.Substring(deviceDataStr.IndexOf(itemStr) + itemStr.Length, 30); int firstIndex = Str1.IndexOf('|'); - ItemValueStr= Str1.Substring(0, firstIndex); + ItemValueStr = Str1.Substring(0, firstIndex); return ItemValueStr; } @@ -2161,7 +2208,7 @@ namespace FlyDockTool string jiexiItemValueLast(string itemStr, string deviceDataStr) { string ItemValueStr = ""; - string Str1 = deviceDataStr.Substring(deviceDataStr.LastIndexOf(itemStr) + itemStr.Length+1, 10); + string Str1 = deviceDataStr.Substring(deviceDataStr.LastIndexOf(itemStr) + itemStr.Length + 1, 10); int firstIndex = Str1.IndexOf('|'); ItemValueStr = Str1.Substring(0, firstIndex); return ItemValueStr; @@ -2217,14 +2264,14 @@ namespace FlyDockTool /// /// /// - string jiexiVal(int index1,string keyStr, string dataStr) + string jiexiVal(int index1, string keyStr, string dataStr) { - string val1 =""; + string val1 = ""; for (int i = 1; i < 100; i++) { try { - string str1 = dataStr.Substring(index1+ keyStr.Length, i); + string str1 = dataStr.Substring(index1 + keyStr.Length, i); double valx = double.Parse(str1); val1 = str1; } @@ -2234,7 +2281,7 @@ namespace FlyDockTool return val1; } - + /// /// 从字符串中 解析出 jiexiBase64 图像 /// @@ -2243,28 +2290,28 @@ namespace FlyDockTool /// List jiexiBase64(int[] array1, string keyStr, string dataStr) { - List imageBase64List=new List(); + List imageBase64List = new List(); for (int i = 0; i < array1.Length; i++) { - for (int b = array1[i]; b< dataStr.Length; b++) + for (int b = array1[i]; b < dataStr.Length; b++) { string str1 = dataStr.Substring(b, keyStr.Length); - if(str1== keyStr) - { - string ImgBase64Str = dataStr.Substring(array1[i]+ 8, b- array1[i]- 8); + if (str1 == keyStr) + { + string ImgBase64Str = dataStr.Substring(array1[i] + 8, b - array1[i] - 8); imageBase64List.Add(ImgBase64Str); - break; + break; } } } return imageBase64List; } - static string jiexiDate(string dateStr,string TimeStr) + static string jiexiDate(string dateStr, string TimeStr) { string[] spArray = dateStr.Trim().Split(' '); - string[] varArray= spArray[2].Trim().Trim('\r').Split('-'); - return varArray[2]+"-"+ varArray[0]+"-"+ varArray[1]+" "+ TimeStr.Trim().Trim('\r'); + string[] varArray = spArray[2].Trim().Trim('\r').Split('-'); + return varArray[2] + "-" + varArray[0] + "-" + varArray[1] + " " + TimeStr.Trim().Trim('\r'); } @@ -2607,6 +2654,22 @@ namespace FlyDockTool SerialPortOption.CreateInstance().dataOutPutShow += new EventHandler(onReData); SerialPortOption.CreateInstance().StartDataReadThread();//开启数据接收 } + if (apiOptions.CurrentDevice == "BS-330E")//BS-330E 生化 + { + // 设置IP地址和端口号 + string tcp_ip = ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[3]; + string tcp_port = ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[4]; + IPAddress ipAddress = IPAddress.Parse(tcp_ip); + // IPAddress ipAddress = IPAddress.Any; + // 创建一个监听Socket + if (listener == null) + { + listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + listener.Bind(new IPEndPoint(ipAddress, int.Parse(tcp_port))); + listener.Listen(10000); + } + _tcpResult.Change(0, 10);//开始tcp数据接收,10毫秒频率 + } } @@ -2624,7 +2687,7 @@ namespace FlyDockTool dataOutPutShow(o, null);//把数据显示到屏幕上 } - + if (apiOptions.CurrentDevice == "HSYH-II")//华晟源尿常规型号:H-II _tResult.Change(5000, 5000);// 数据处理:延迟5秒开始 5秒计时 if (apiOptions.CurrentDevice == "BT-200")//盛世东唐BT-200尿常规 @@ -2656,7 +2719,7 @@ namespace FlyDockTool if (apiOptions.CurrentDevice == "BS-430")//生化BS-430 { //File.WriteAllText("deviceDataLog.txt", deviceDataStr, Encoding.GetEncoding("GB18030")); - + deviceAnalysisOption(tempData); tempData = string.Empty;//执行完以后 将临时积累数据清空 以便接收下一个样本数据 // _tResult.Change(10000, 10000);// 数据处理:延迟5秒开始 5秒计时 @@ -2692,9 +2755,9 @@ namespace FlyDockTool if (apiOptions.CurrentDevice == "BC-5130")//BC-5130 { // _tResult.Change(5000, 5000);// 数据处理:延迟5秒开始 5秒计时 - if (tempData.Contains("OBX|30|")|| tempData.Contains("OBX|29|"))//OBX|12|ST| 为结束符 说明字符串完整了 + if (tempData.Contains("OBX|30|") || tempData.Contains("OBX|29|"))//OBX|12|ST| 为结束符 说明字符串完整了 { - // MessageBox.Show(tempData); + // MessageBox.Show(tempData); deviceAnalysisOption(tempData); tempData = string.Empty;//执行完以后 将临时积累数据清空 以便接收下一个样本数据 } @@ -2729,6 +2792,14 @@ namespace FlyDockTool { _tResult.Change(5000, 5000);// 数据处理:延迟5秒开始 5秒计时 } + if (apiOptions.CurrentDevice == "BS-330E")//BS-330E + { + if (tempData.Split('').Length>=12&&tempData.Contains("LDL-C")) + { + deviceAnalysisOption(tempData); + tempData = string.Empty;//执行完以后 将临时积累数据清空 以便接收下一个样本数据 + } + } } /// @@ -2757,12 +2828,12 @@ namespace FlyDockTool if (clientSocket == null) clientSocket = listener.Accept(); //一旦接受连接,创建一个客户端 } - + int recv = clientSocket.Receive(data); if (recv > 0) { - byte[] data1=new byte[recv]; - for (int i = 0;iMSA|AA|"+ msgId + "||||0|"; + string responseMsg = "MSH|^~\\&|1|1|11|1|" + dateTimeNowStr + "||ACK^R01|" + msgId + "|P|2.3.1||||0||UNICODE|||MSA|AA|" + msgId + "||||0|"; byte[] sendBytes = Encoding.Unicode.GetBytes(responseMsg); clientSocket.Send(sendBytes); - onReData("应答消息:"+responseMsg, null);//数据处理 并将数据显示在软件界面上 + onReData("应答消息:" + responseMsg, null);//数据处理 并将数据显示在软件界面上 } } - + } onReData(stringData, null);//数据处理 并将数据显示在软件界面上 } @@ -2801,13 +2872,13 @@ namespace FlyDockTool accessDbPath = DateTime.Now.ToString("yyyy-MM-dd") + ".mdb"; //string sql = "select a.sampleProgramID,b.SampleNo,a.ResultValue as ItemValue,a.EName as ItemCode from sampleProgram a inner join sampleInfo b on a.SampleInfoID=b.SampleInfoID where a.stateS is NULL "; string sql = "select a.sampleProgramID,b.SampleNo,a.ResultValue as ItemValue,a.EName as ItemCode from sampleProgram a inner join sampleInfo b on a.SampleInfoID=b.SampleInfoID"; - DataTable dt_2=new DataTable(); + DataTable dt_2 = new DataTable(); try { dt_2 = accessOptions.CreateInstance(accessDbPath).ExcuteSql(sql); } catch { dt_2 = null; } - if(dt_2==null) + if (dt_2 == null) return; List ermList = new List(); string MachineCode = apiOptions.MachineCode; @@ -3052,7 +3123,11 @@ namespace FlyDockTool { SerialPortOption.CreateInstance().StopDataReadThread();//停止数据接收 } - + if (apiOptions.CurrentDevice == "BS-330E")//BS-330E + { + _tcpResult.Change(-1, 10);//停止tcp数据接收 + clientSocket.Close(); + } } /////