/// <summary> /// 检查是否有卡,如果是有卡则进行读卡信息 /// </summary> /// <returns>如果无卡返回0,有卡并且卡信息正常返回1,有卡时如果验证失败返回错误信息</returns> public string CheckCard() { Thread.Sleep(200); StringBuilder sbinput = new StringBuilder("<invoke name=\"READCARDTESTINSERTCARD\"><arguments></arguments></invoke>"); string strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用检测有卡方法输出返回:" + strResult + ",输出参数:" + sbinput.ToString()); if (string.IsNullOrEmpty(sbinput.ToString())) { return("0"); } System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml(sbinput.ToString()); System.Xml.XmlNode xnd = doc.SelectSingleNode("/return/arguments/string[@id='CARDSTACKSTATE']"); if (xnd != null) { string CardStackState = xnd.InnerText; LogService.GlobalInfoMessage("读卡的类型:" + CardType + "****************" + CardStackState); if (CardStackState == "1") { //如果有卡则读取磁条卡号 Thread.Sleep(200); if (CardType == "1") { sbinput = new StringBuilder("<invoke name=\"READCARDREADMAGCARDNO\"><arguments></arguments></invoke>"); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用读取磁条卡号卡方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); doc.LoadXml(sbinput.ToString()); xnd = doc.SelectSingleNode("/return/arguments/string[@id='CARDNO']"); if (xnd != null) { string strCardNO = xnd.InnerText; SkyComm.cardInfoStruct.CardNo = strCardNO; CardRead cardUtility = new CardRead(this); string strMsg = cardUtility.GetPatiantInfo(); if (!string.IsNullOrEmpty(strMsg)) { return(strMsg); } else { return("1"); } } else { return("0"); } } else if (CardType == "2") { #region 读M1卡方法 //卡片移到射频位 sbinput = new StringBuilder("<invoke name=\"READCARDMOVECARDTORF\"><arguments></arguments></invoke>"); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用卡片移到射频位方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); //读第8块的数据 string strInput = "<invoke name=\"READCARDREADRFCARD\"><arguments>" + "<string id=\"SECTORNO\">8</string>" + "<string id=\"BLOCKNO\">2</string>" + "<string id=\"PASSWORD\">FFFFFFFFFFFF</string>" + "</arguments></invoke>"; LogService.GlobalInfoMessage("调用读射频卡数据方法输入参数1:" + strInput); sbinput = new StringBuilder(strInput); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用读射频卡数据方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); doc.LoadXml(sbinput.ToString()); xnd = doc.SelectSingleNode("/return/arguments/string[@id='ERROR']"); string strCardNO = string.Empty; if (xnd != null && xnd.InnerText == "SUCCESS") { strCardNO = SkyComm.HexStringToString( doc.SelectSingleNode("/return/arguments/string[@id='CARDNO']").InnerText, ASCIIEncoding.ASCII); LogService.GlobalInfoMessage("=============读8扇区的内容===========================" + strCardNO + "======================================"); if (strCardNO.Length >= 16) { strCardNO = strCardNO.Substring(0, 16); } } if (strCardNO.Length >= 16) //第八块内容小于16 { } LogService.GlobalInfoMessage("读取到的卡号信息:" + strCardNO + "==============================="); if (!string.IsNullOrEmpty(strCardNO) && strCardNO.Length >= 15) { SkyComm.cardInfoStruct.CardNo = strCardNO.Replace(" ", "").Replace("\0", "").Trim(); CardRead cardUtility = new CardRead(this); string strMsg = cardUtility.GetPatiantInfo(); if (!string.IsNullOrEmpty(strMsg)) { return(strMsg); } else { return("1"); } } else { return("0"); } #endregion } else if (CardType == "3") { #region 读芯片卡方法,暂时屏蔽 string mCardNO = CardCpu.getCardNo(); SkyComm.cardInfoStruct.CardNo = mCardNO; CardRead cardUtility = new CardRead(this); string strMsg = cardUtility.GetPatiantInfo(); if (!string.IsNullOrEmpty(strMsg)) { return(strMsg); } else { return("1"); } #endregion } } else { return("0"); } } else { return("0"); } return("0"); }
private void timer1_Tick(object sender, EventArgs e) { Log.Info(GetType().ToString(), "执行time1", "开始执行timer1_Tick"); //检测是否有卡 Thread.Sleep(200); StringBuilder sbinput = new StringBuilder("<invoke name=\"READCARDTESTINSERTCARD\"><arguments></arguments></invoke>"); string strResult = ""; try { strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); } catch (Exception exception) { Log.Info(GetType().ToString(), "检测有卡XuHuiInterface_DLL.XmlTcp", exception.Message); } LogService.GlobalInfoMessage("调用检测有卡方法输出返回:" + strResult + ",输出参数:" + sbinput.ToString()); if (string.IsNullOrEmpty(sbinput.ToString())) { return; } System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml(sbinput.ToString()); System.Xml.XmlNode xnd = doc.SelectSingleNode("/return/arguments/string[@id='CARDSTACKSTATE']"); if (xnd != null) { string CardStackState = xnd.InnerText; if (CardStackState == "1") { timer1.Stop(); timer2.Stop(); //如果有卡则读取磁条卡号 Thread.Sleep(200); if (CardType == "1") { sbinput = new StringBuilder("<invoke name=\"READCARDREADMAGCARDNO\"><arguments></arguments></invoke>"); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用读取磁条卡号卡方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); doc.LoadXml(sbinput.ToString()); xnd = doc.SelectSingleNode("/return/arguments/string[@id='CARDNO']"); if (xnd != null) { string strCardNO = xnd.InnerText; //如果读取到的磁条卡号长度不对,则读取居民健康卡 if (strCardNO.Length != 15) { try { //LogService.GlobalInfoMessage("2"); //移动到IC位读居民健康卡 sbinput = new StringBuilder("<invoke name=\"READCARDMOVECARDTOREAR\"><arguments></arguments></invoke>"); Thread.Sleep(200); LogService.GlobalInfoMessage("调用移动卡到卡后端方法输入参数:" + sbinput.ToString()); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用移动卡到卡后端方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); if (sbinput.ToString().IndexOf("SUCCESS") > 0) { //读居民健康卡 //居民健康卡 HealthCardBase _cardBase = HealthCardBase.CreateInstance(this); HealthCardInfoStruct Entity = _cardBase.HisRead(); SkyComm.cardInfoStruct.CardNo = Entity.HealthCardNo; if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } if (string.IsNullOrEmpty(SkyComm.cardInfoStruct.CardNo)) { SkyComm.ShowMessageInfo("读卡失败,请重新检查卡位方向!"); closePort(); this.DialogResult = DialogResult.Cancel; } } } catch (Exception ex) { LogService.GlobalInfoMessage("移动卡到卡后端,读居民健康卡失败:" + ex.Message); Thread.Sleep(200); sbinput = new StringBuilder("<invoke name=\"READCARDOUTCARD\"><arguments></arguments></invoke>"); strResult = AutoServiceSDK.SDK.XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用退卡卡方法返回:" + strResult + ",输出参数:" + sbinput.ToString());; SkyComm.ShowMessageInfo("读卡失败,请重新检查卡位方向!"); closePort(); this.DialogResult = DialogResult.Cancel; } } else { //读取就诊卡 SkyComm.cardInfoStruct.CardNo = strCardNO; if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } } } else { //移动到IC位读居民健康卡 sbinput = new StringBuilder("<invoke name=\"ReadCardMoveCardToIC\"><arguments></arguments></invoke>"); Thread.Sleep(200); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); if (strResult.IndexOf("SUCCESS") > 0) { //读居民健康卡 //居民健康卡 HealthCardBase _cardBase = HealthCardBase.CreateInstance(this); HealthCardInfoStruct Entity = _cardBase.HisRead(); SkyComm.cardInfoStruct.CardNo = Entity.HealthCardNo; if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } } } } else if (CardType == "2") { #region 读取M1卡方法 //卡片移到射频位 sbinput = new StringBuilder("<invoke name=\"READCARDMOVECARDTORF\"><arguments></arguments></invoke>"); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用卡片移到射频位方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); //读第8块的数据 string strInput = "<invoke name=\"READCARDREADRFCARD\"><arguments>" + "<string id=\"SECTORNO\">8</string>" + "<string id=\"BLOCKNO\">2</string>" + "<string id=\"PASSWORD\">FFFFFFFFFFFF</string>" + "</arguments></invoke>"; LogService.GlobalInfoMessage("调用读射频卡数据方法输入参数1:" + strInput); sbinput = new StringBuilder(strInput); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用读射频卡数据方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); doc.LoadXml(sbinput.ToString()); xnd = doc.SelectSingleNode("/return/arguments/string[@id='ERROR']"); string strCardNO = string.Empty; if (xnd != null && xnd.InnerText == "SUCCESS") { strCardNO = SkyComm.HexStringToString(doc.SelectSingleNode("/return/arguments/string[@id='CARDNO']").InnerText, ASCIIEncoding.ASCII); LogService.GlobalInfoMessage("=============读8扇区的内容===========================" + strCardNO + "======================================"); if (strCardNO.Length >= 16) { strCardNO = strCardNO.Substring(0, 16); } } if (strCardNO.Length >= 16) { } LogService.GlobalInfoMessage("读取到的卡号信息:" + strCardNO + "==========================="); if (!string.IsNullOrEmpty(strCardNO) && strCardNO.Length >= 15) { //读取就诊卡 SkyComm.cardInfoStruct.CardNo = strCardNO.Replace(" ", "").Replace("\0", "").Trim(); if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } } else { SkyComm.ShowMessageInfo("读卡失败,请重新检查卡位方向!"); closePort(); this.DialogResult = DialogResult.Cancel; } #endregion } else if (CardType == "3") { #region 读取芯片卡方法,暂时屏蔽 SkyComm.cardInfoStruct.CardNo = CardCpu.getCardNo(); if (string.IsNullOrEmpty(SkyComm.cardInfoStruct.CardNo)) { try { //LogService.GlobalInfoMessage("2"); //移动到IC位读居民健康卡 sbinput = new StringBuilder("<invoke name=\"READCARDMOVECARDTOREAR\"><arguments></arguments></invoke>"); Thread.Sleep(200); LogService.GlobalInfoMessage("调用移动卡到卡后端方法输入参数:" + sbinput.ToString()); strResult = XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用移动卡到卡后端方法返回:" + strResult + ",输出参数:" + sbinput.ToString()); if (sbinput.ToString().IndexOf("SUCCESS") > 0) { //读居民健康卡 //居民健康卡 HealthCardBase _cardBase = HealthCardBase.CreateInstance(this); HealthCardInfoStruct Entity = _cardBase.HisRead(); SkyComm.cardInfoStruct.CardNo = Entity.HealthCardNo; if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } if (string.IsNullOrEmpty(SkyComm.cardInfoStruct.CardNo)) { SkyComm.ShowMessageInfo("读卡失败,请重新检查卡位方向!"); closePort(); this.DialogResult = DialogResult.Cancel; } } } catch (Exception ex) { LogService.GlobalInfoMessage("移动卡到卡后端,读居民健康卡失败:" + ex.Message); Thread.Sleep(200); sbinput = new StringBuilder("<invoke name=\"READCARDOUTCARD\"><arguments></arguments></invoke>"); strResult = AutoServiceSDK.SDK.XuHuiInterface_DLL.XmlTcp(sbinput, 0); LogService.GlobalInfoMessage("调用退卡卡方法返回:" + strResult + ",输出参数:" + sbinput.ToString());; SkyComm.ShowMessageInfo("读卡失败,请重新检查卡位方向!"); closePort(); this.DialogResult = DialogResult.Cancel; } } else { CardRead cardUtility = new CardRead(this); string strMsg = cardUtility.GetPatiantInfo(); if (!string.IsNullOrEmpty(strMsg)) { SkyComm.ShowMessageInfo(strMsg); } if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } } #endregion } } } }