Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
                }
            }
        }