Пример #1
0
        /// <summary>
        /// 执行存储过程,同步数据
        /// </summary>
        /// <param name="SynCode"></param>
        /// <param name="SynID"></param>
        internal void SyncRun(string SynCode, string SynID)
        {
            try
            {
                dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [ScheduleTxt]='开始同步',[StartUPTime]=GETDATE(),[RandomID]='{0}',[Schedule]='0' where [SynID]='{1}'", Guid.NewGuid().ToString(), SynID));
                using (DataSet ds = db.GetBaseInfoByHIS(SynCode))
                {
                    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                    {
                        dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [ScheduleTxt]='插入数据'," +
                                                        "[SynData]='{0}' where [SynID]='{1}'", XmlSerializeHelper.SerializeDataTableXml(
                                                            ds.Tables[0], SynCode).Replace("'", ""), SynID));
                        switch (SynCode)
                        {
                        case "1":
                        {
                            //将his返回的最新信息存入临时表,然后执行存储过程更新到正式表
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DDrugTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_syndruginfo ");
                            break;
                        }

                        case "2":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DWardTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_syndwardinfo ");
                            break;
                        }

                        case "3":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DEmployeeTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_synemployeeinfo ");
                            break;
                        }

                        case "4":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DMetricTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_syndmetricinfo ");
                            break;
                        }

                        case "5":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DFreqTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_synfreqinfo ");
                            break;
                        }

                        case "6":
                        {
                            dbHelp.SetPIVAsDB("EXEC bl_synpatientinfoBefore");
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "PatientTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_synpatientinfo ");
                            dbHelp.SetPIVAsDB("EXEC bl_synpatientinfoAfter");
                            break;
                        }

                        case "7":
                        {
                            DateTime tt = DateTime.Now;
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "PrescriptionTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='100',[EndUPTime]=GETDATE(),[ScheduleTxt]='拆分处方' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_fetchrecipes6");        //csw bl_fetchrecipes '6'修改成bl_fetchrecipes6
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='200',[ScheduleTxt]='开始审方' where [SynID]='{0}'", SynID));
                            int    k   = 0;
                            Thread th1 = new Thread(() =>
                                {
                                    try
                                    {
                                        dbHelp.SetPIVAsDB("EXEC bl_Remonitor ''");
                                    }
                                    catch (Exception ex)
                                    {
                                        InternalLogger.Log.Error(SynCode + "执行审方出错_1" + ex.Message);
                                    }
                                    dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='{0}' where [SynID]='{1}'", (200 + (k + 1) * 50), SynID));
                                });
                            th1.IsBackground = true;
                            th1.Start();
                            Thread th2 = new Thread(() =>
                                {
                                    try
                                    {
                                        dbHelp.SetPIVAsDB("EXEC bl_Remonitor2");
                                    }
                                    catch (Exception ex)
                                    {
                                        InternalLogger.Log.Error(SynCode + "执行审方出错_2" + ex.Message);
                                    }
                                    dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='{0}' where [SynID]='{1}'", (200 + (k + 1) * 50), SynID));
                                });
                            th2.IsBackground = true;
                            th2.Start();
                            Thread th3 = new Thread(() =>
                                {
                                    try
                                    {
                                        dbHelp.SetPIVAsDB("EXEC bl_Remonitor3");
                                    }
                                    catch (Exception ex)
                                    {
                                        InternalLogger.Log.Error(SynCode + "执行审方出错_3" + ex.Message);
                                    }
                                    dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='{0}' where [SynID]='{1}'", (200 + (k + 1) * 50), SynID));
                                });
                            th3.IsBackground = true;
                            th3.Start();
                            Thread th4 = new Thread(() =>
                                {
                                    try
                                    {
                                        dbHelp.SetPIVAsDB("EXEC bl_Remonitor4");
                                    }
                                    catch (Exception ex)
                                    {
                                        InternalLogger.Log.Error(SynCode + "执行审方出错_4" + ex.Message);
                                    }
                                    dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='{0}' where [SynID]='{1}'", (200 + (k + 1) * 50), SynID));
                                });
                            th4.IsBackground = true;
                            th4.Start();
                            while (th1.IsAlive || th2.IsAlive || th3.IsAlive || th4.IsAlive)
                            {
                                if (DateTime.Now > tt.AddMinutes(7))
                                {
                                    try
                                    {
                                        if (th1.IsAlive)
                                        {
                                            th1.Abort();
                                        }
                                        if (th2.IsAlive)
                                        {
                                            th2.Abort();
                                        }
                                        if (th3.IsAlive)
                                        {
                                            th3.Abort();
                                        }
                                        if (th4.IsAlive)
                                        {
                                            th4.Abort();
                                        }
                                    }
                                    catch { }
                                }
                            }
                            break;
                        }

                        case "8":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "UseDrugListTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='拆分药单' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_fetchdrugList6 ");
                            break;
                        }

                        case "9":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "PatientTempHTandWT");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_synpatientinfoAfter ");
                            break;
                        }

                        case "10":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "DiagnosisTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_synDiagnosisInfo ");
                            break;
                        }

                        case "11":
                        {
                            dbHelp.CopyDataTableToDB(ds.Tables[0], "HISDrugListCountTemp");
                            dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Schedule]='300',[EndUPTime]=GETDATE(),[ScheduleTxt]='信息更新' where [SynID]='{0}'", SynID));
                            dbHelp.SetPIVAsDB("EXEC bl_SynHISDrugListCount ");
                            break;
                        }
                        }
                        dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Success]='1',[Schedule]='500' ," +
                                                        "[EndTime]=GETDATE(),[ScheduleTxt]='同步成功' where [SynID]='{0}'", SynID));
                    }
                    else
                    {
                        dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Success]='0',[Schedule]='500',[EndUPTime]=" +
                                                        "GETDATE() ,[EndTime]=GETDATE(),[ScheduleTxt]='没有数据' where [SynID]='{0}'", SynID));
                    }
                }
            }
            catch (Exception ex)
            {
                dbHelp.SetPIVAsDB(string.Format("update [SynLog] set [Success]='-1',[Schedule]='500',[EndUPTime]=" +
                                                "GETDATE() ,[EndTime]=GETDATE(),[ScheduleTxt]='同步异常' where [SynID]='{0}'", SynID));
                InternalLogger.Log.Error(SynCode + "执行同步出错" + ex.Message);
            }
        }
Пример #2
0
        /// <summary>
        /// 这个方法很有用,用于将从his获取的数据,插入一个临时表TempTest。从表中分析原始数据是否有问题。
        /// </summary>
        static void testCopyDataTableToDB(int SynCode, string tempTableName)
        {
            try
            {
                DB_Help dbHelp    = new DB_Help();
                DataSet dsSynData = dbHelp.GetPIVAsDB("SELECT TOP 100 SynID,EndTime,SynData FROM " +
                                                      "SynLog  where SynCode = " + SynCode.ToString() + " order by SynID desc");

                //获取表结构
                DataSet dsHis = dbHelp.GetPIVAsDB("select top 1 * from " + tempTableName);
                foreach (DataRow item in dsSynData.Tables[0].Rows)
                {
                    string  str = item["SynData"].ToString();
                    DataSet ds  = XmlSerializeHelper.XmlToDataTable(str);
                    if (ds.Tables != null && ds.Tables.Count > 0)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            DataRow dr = ds.Tables[0].Rows[i];
                            foreach (DataColumn dc in dsHis.Tables[0].Columns)//dsHis肯定有表结构
                            {
                                try
                                {
                                    if (dc.Caption.ToLower().Equals("id") || dc.Caption.ToLower().Equals("usedrugid"))
                                    {
                                        continue;//列不存在时跳出本次
                                    }
                                    if (!ds.Tables[0].Columns.Contains(dc.Caption))
                                    {
                                        ds.Tables[0].Columns.Add(dc.Caption, dc.DataType);
                                        continue;//列不存在时添加,然后跳出本次
                                    }

                                    if (!dc.DataType.Name.ToLower().Equals("string"))
                                    {
                                        if (string.IsNullOrEmpty(dr[dc.Caption].ToString()))
                                        {
                                            dr[dc.Caption] = DBNull.Value;
                                        }
                                        else if (dc.DataType.Name.ToLower().Equals("boolean"))
                                        {
                                            bool b = dr[dc.Caption].ToString().Trim().Equals("0") ? false : true;
                                            dr[dc.Caption] = b;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    InternalLogger.Log.Error("1234567890:" + ex.Message);
                                }
                            }
                        }
                        dbHelp.CopyDataTableToDB(ds.Tables[0], tempTableName);
                        Console.WriteLine("一次同步" + SynCode.ToString() + "结束,同步时间:"
                                          + item["EndTime"].ToString());
                    }
                }
                Console.WriteLine("全部同步" + SynCode.ToString() + "结束");
            }
            catch (Exception EX)
            {
                InternalLogger.Log.Error("从xmlcopy数据到数据库表出错:" + EX.Message);
            }
        }