/// <summary> /// 执行同步HIS的脚本;从HIS返回最新基础信息 /// </summary> /// <param name="SynCode">同步ID</param> /// <returns></returns> internal DataSet GetBaseInfoByHIS(string SynCode) { DataSet ds = new DataSet(); try { if (!string.IsNullOrEmpty(SynCode)) { using (DataSet info = GetSynHISDataScript(SynCode)) { if (info != null && info.Tables.Count > 0 && info.Tables[0].Rows.Count > 0) { string strSQl = info.Tables[0].Rows[0]["Sql"].ToString().Trim(); if (String.IsNullOrEmpty(strSQl)) { return(ds); } //判断采用何种方式与HIS数据同步 switch (info.Tables[0].Rows[0]["SynMode"].ToString().Trim().ToUpper()) { case "SQLSERVER": //HIS数据库是SQlServer ds = dbHelp.GetPIVAsHISDBSQL(strSQl); break; case "ORACLE": ds = dbHelp.GetHisOracleByOLEDB(strSQl); break; case "WEBSERVICE": DataTable tempDS = new PivasHisCommOrigin().Syn(SynCode); if (tempDS != null && tempDS.Rows.Count > 0) //服务返回的不是空表 { ds.Tables.Add(tempDS); } break; default: break; } } } } } catch (Exception ex) { InternalLogger.Log.Error("执行同步HIS的脚本,从HIS返回最新基础信息出错:" + ex.Message); } return(ds); }
/// <summary> /// 120秒一次;获取英特吉瓶签打印状态;然后更新瓶签打印状态=3, /// </summary> void UpdateStatus() { while (true) { try { Thread.Sleep(100000);//100s DataSet dsFinished = null; //访问英特吉判断是否已排药完成;这里的分钟值(10)最好设置成定时器的间隔的2倍 string sqlFinished = "select distinct LabelNO from vLabelDispensed where " + "DATEDIFF(MI,CONVERT(DateTime,FinishTime,120),GETDATE())<=10"; dsFinished = DB.GetPIVAsHISDBSQL(sqlFinished); //拉取的已打印的,存在重复,还有上次已经获取到的 if (dsFinished != null && dsFinished.Tables.Count > 0) { foreach (DataRow item in dsFinished.Tables[0].Rows) { string labelNo = item["LabelNO"].ToString().Trim(); string strSQl = "if not exists (select 1 from IVRecord_Print where LabelNo='" + labelNo + "') " + "Insert into IVRecord_Print values('" + labelNo + "', GETDATE(), '1', 'NULL', 0," + "'NULL', 'NULL', 'NULL', 'NULL', 0)"; int rtn = DB.SetPIVAsDB(strSQl); DB.PreserveLog("Debug", "在pivas中完成更新打印表,瓶签号" + labelNo + "返回值(-1是失败,0是未执行,1是正常):" + rtn); Thread.Sleep(1000); strSQl = "update IVRecord set IVStatus = 3," + "PrintDT = case when PrintDT is null then GETDATE() else PrintDT end," + " PrinterID = '1',PrinterName = 'LaennecSysadmin' where LabelNo = '" + labelNo + "' and IVStatus <= 3 and DATEDIFF(dd,GETDATE(),InfusionDT) >= -1"; rtn = DB.SetPIVAsDB(strSQl); for (int i = 0; i < 5; i++) //最多5次 { if (rtn <= 0) //失败或未执行成功 { rtn = DB.SetPIVAsDB(strSQl); Thread.Sleep(1000); } else { break; } } DB.PreserveLog("Debug", "在pivas中完成更新瓶签表,瓶签号" + labelNo + "返回值(-1是失败,0是未执行,1是正常):" + rtn); strSQl = "if not exists(select 1 from IVRecord_Print_AllEmp where LabelNo = '" + labelNo + "') " + "Insert into IVRecord_Print_AllEmp values('" + labelNo + "', '" + "8888" + DateTime.Now.Ticks.ToString() + "', '9999-LaennecSysadmin', ''," + "'9999-LaennecSysadmin')"; rtn = DB.SetPIVAsDB(strSQl); DB.PreserveLog("Debug", "在pivas中完成更新打印临时表,瓶签号" + labelNo + "返回值(-1是失败,0是未执行,1是正常):" + rtn); Thread.Sleep(1000); } } } catch (ThreadAbortException) { } catch (Exception ex) { DB.PreserveLog("Error", "在pivas中更新瓶签打印状态出错" + ex.Message); } } }