コード例 #1
0
        private void DoJobThread(Job job)
        {
            lock (job)
            {
                if ((job.Action != null) && (job.Action.SynchState == SynchState.Stop))
                {
                    try
                    {
                        JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "开始", TraceLevel.Info));
                        job.Action.Execute();
                        job.JobSchedule.LastExecuteTime = DateTime.Now;
                        JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "结束", TraceLevel.Info));
                    }
                    catch (Exception exception)
                    {
                        JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, string.Empty, exception));
                    }
                }
            }
            //// 创建线程
            //BackgroundWorker worker = new BackgroundWorker();
            //worker.DoWork += new DoWorkEventHandler(JobThread_DoWork);
            //worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(JobThread_RunWorkerCompleted);

            //// 运行(结束后会从队列里移除任务)
            //worker.RunWorkerAsync(job);
        }
コード例 #2
0
ファイル: JobTaskManager.cs プロジェクト: xuanximoming/key
 public void WriteAllLog()
 {
     foreach (Job job in AllJobs)
     {
         JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "主应用程序关闭", TraceLevel.Info));
     }
 }
コード例 #3
0
 public override void Execute()
 {
     try
     {
         ExecuteCore(false);
     }
     catch (Exception ex)
     {
         //todo
         JobLogHelper.WriteLog(new JobExecuteInfoArgs(this.Parent, ex.Message));
     }
 }
コード例 #4
0
ファイル: ManagerForm.cs プロジェクト: xuanximoming/key
        private void LoadCustomerLog(string fileName)
        {
            _currentDataTable = null;

            if (string.IsNullOrEmpty(fileName))
            {
                return;
            }

            _currentDataTable         = JobLogHelper.LoadLogFileToTable(JobLogHelper.GetJobLogCurrentFullPath(jobTimeSetting.CurrentJob));
            gridControlLog.DataSource = _currentDataTable;
        }
コード例 #5
0
        private string MergePatientInfo(DataTable changedData, bool initialized)
        {
            m_NewPatients.Clear();
            DataRow[] matchRows;
            DataRow[] matchRows2;
            string    maxInsertDate = "";

            try
            {
                foreach (DataRow hisRow in changedData.Rows)
                {
                    // 第一条记录保存的就是最大的插入日期
                    if (!initialized && String.IsNullOrEmpty(maxInsertDate))
                    {
                        maxInsertDate = hisRow[colInsertDate].ToString();
                    }

                    matchRows = m_EmrPatientTable.Select(String.Format(" PATNOOFHIS = '{0}' ", hisRow[colHisFirstPageNo].ToString().Trim()), " PATNOOFHIS asc ");
                    switch (matchRows.Length)
                    {
                    case 0:      // 插入
                        AddNewRecord(m_EmrPatientTable, hisRow, true);
                        break;

                    case 1:      // 更新
                        matchRows2 = m_EmrPatientTable.Select(String.Format(" PATNOOFHIS = '{0}' and status='1503' ", hisRow[colHisFirstPageNo].ToString().Trim()), " PATNOOFHIS asc ");
                        if (matchRows2.Length == 0)
                        {
                            UpdateRecord(hisRow, matchRows[0], initialized, true);
                        }
                        break;

                    default:
                        //MessageBox.Show("EMR中病人数据有重复");
                        break;
                    }
                }
                //xll 2013-03-07
                ChangeBabyStatus();
            }
            catch (Exception ex)
            {
                JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "病人同步", ex));
            }
            return(maxInsertDate);
        }
コード例 #6
0
 public override void Execute()
 {
     base.SynchState = SynchState.Busy;
     try
     {
         QCTimeLimitInnerService service = new QCTimeLimitInnerService();
         service.MainProcess();
     }
     catch (Exception ex)
     {
         JobLogHelper.WriteLog(new JobExecuteInfoArgs(this.Parent, ex.Message));
         throw ex;
     }
     finally
     {
         base.SynchState = SynchState.Stop;
     }
 }
コード例 #7
0
        /// <summary>
        /// 初始化病人和床位数据
        /// </summary>
        /// <param name="patientTable"></param>
        /// <param name="bedTable"></param>
        private void InitPatientAndBedData(DataTable patientTable, DataTable bedTable)
        {
            int updatedCount;

            if ((patientTable != null) && (patientTable.Rows.Count > 0))
            {
                try
                {
                    // 取所有EMR的病人数据
                    InitEmrInpatientTable(false, CreateFilterCondition(patientTable, colHisFirstPageNo));
                    // 合并,保存
                    MergePatientInfo(patientTable, true);
                    updatedCount = SaveEmrTableData(m_EmrPatientTable, EMRPatTable);
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRPatTable, patientTable.Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
                }
                catch (Exception err)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRPatTable, err));
                    return;
                }
            }

            if ((bedTable != null) && (bedTable.Rows.Count > 0))
            {
                try
                {
                    // 取所有EMR的床位数据
                    InitEmrBedTable();
                    // 合并,保存
                    MergeBedInfo(bedTable, true);
                    updatedCount = SaveEmrTableData(m_EmrBedTable, EMRBedTable);
                    // 执行 syxh 的更新处理
                    //JobLogHelper.WriteSqlLog(Parent, "update " + EMRBedTable + " set syxh = b.syxh from " + EMRBedTable + " a, " + EMRPatTable + " b where a.hissyxh = b.hissyxh");
                    m_EmrHelper.ExecuteNoneQuery("update bed  set NoOfInpat = (select b.NoOfInpat from InPatient b where bed.PatNoOfHis = b.PatNoOfHis) where exists (select 1 from InPatient b where bed.PatNoOfHis = b.PatNoOfHis)");
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRBedTable, bedTable.Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
                }
                catch (Exception err)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRBedTable, err));
                    return;
                }
            }
        }
コード例 #8
0
        private void SendQCMessage(DataRow patientRow, string docId, InpatientState preState, DateTime inTime)
        {
            if (m_Qcsv == null)
            {
                return;
            }

            try
            {
                int       firstPageNo = Convert.ToInt32(patientRow[colFirstPageNo]);
                Inpatient inpatient   = new Inpatient(firstPageNo);
                inpatient.ReInitializeProperties();
                inpatient.PreState = preState;
                // m_Qcsv.AddRuleRecord(firstPageNo, -1, docId, QCConditionType.PatStateChange, inpatient, inTime);
            }
            catch (Exception err)
            {
                JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "时限", err));
            }
        }
コード例 #9
0
        private void ArchiveRecords()
        {
            int rowCount = 0;

            try
            {
                DateTime archiveDate = DateTime.Now.AddDays(-m_TimeSetting);

                m_SqlHelperTarget.ExecuteNoneQuery(
                    String.Format(SQL_UpdateCanArchiveEpr_2, archiveDate.ToString("yyyy-MM-dd 24")), CommandType.Text);

                m_SqlHelperTarget.ExecuteNoneQuery(
                    String.Format(SQL_UpdateCanArchiveEpr, archiveDate.ToString("yyyy-MM-dd 24")), CommandType.Text);
            }
            catch (Exception ex)
            {
                JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "RECORDDETAIL", ex));
            }
            JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "RECORDDETAIL", rowCount, rowCount, DateTime.Now, true, String.Empty, TraceLevel.Info));
        }
コード例 #10
0
        private string MergeBedInfo(DataTable changedData, bool initialized)
        {
            m_NewBeds.Clear();
            DataRow[] matchRows;
            string    maxInsertDate = "";

            try
            {
                foreach (DataRow hisRow in changedData.Rows)
                {
                    // 第一条记录保存的就是最大的插入日期
                    if (!initialized && String.IsNullOrEmpty(maxInsertDate))
                    {
                        maxInsertDate = hisRow[colInsertDate].ToString();
                    }

                    matchRows = m_EmrBedTable.Select(String.Format(CultureInfo.CurrentCulture
                                                                   , "ID = '{0}' and WardID = '{1}' and RoomID = '{2}'", hisRow[colBedNo].ToString().Trim(), hisRow["WardID"].ToString().Trim(), hisRow["RoomID"].ToString().Trim()));
                    switch (matchRows.Length)
                    {
                    case 0:      // 插入
                        AddNewRecord(m_EmrBedTable, hisRow, false);
                        break;

                    case 1:      // 更新
                        UpdateRecord(hisRow, matchRows[0], true, false);
                        break;

                    default:
                        //MessageBox.Show("EMR中病人数据有重复");
                        break;
                    }
                }
                return(maxInsertDate);
            }
            catch (Exception ex)
            {
                JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "病人同步", ex));
            }
            return(string.Empty);
        }
コード例 #11
0
        private int SaveEmrTableData(DataTable sourceTable, string tableName)
        {
            int updatedCount = 0;

            if (sourceTable != null)
            {
                //DataTable changedData = sourceTable.GetChanges();
                //if ((changedData != null) && (changedData.Rows.Count > 0))
                try
                {
                    updatedCount = m_EmrHelper.UpdateTable(sourceTable, tableName, true);
                }
                catch (Exception ex)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "病人同步", ex));
                }

                // 单独处理新入院病人(因为需要获得EMR中的syxh)
                if (m_NewPatients.Count > 0)
                {
                    StringBuilder condition = new StringBuilder("'-" + 1 + "'");
                    foreach (KeyValuePair <string, DataRow> para in m_NewPatients)
                    {
                        condition.Append(',');
                        condition.Append("'" + para.Key + "'");
                    }
                    //DrectSoft.JobManager.JobLogHelper.WriteSqlLog(Parent, "select syxh, hissyxh from " + EMRPatTable + " where hissyxh in (" + condition.ToString() + ")");
                    DataTable newPats = m_EmrHelper.ExecuteDataTable("select NoOfInpat, PatNoOfHis from " + EMRPatTable + " where PatNoOfHis in (" + condition.ToString() + ")", CommandType.Text);
                    string    key;
                    foreach (DataRow row in newPats.Rows)
                    {
                        key = row[colHisFirstPageNo].ToString();
                        m_NewPatients[key][colFirstPageNo] = row[colFirstPageNo];
                        SendQCMessage(m_NewPatients[key], m_NewPatients[key][colBedDoctor].ToString()
                                      , InpatientState.New, Convert.ToDateTime(m_NewPatients[key][colTimeOfInWard]));
                    }
                    m_NewPatients.Clear();
                }
            }
            return(updatedCount);
        }
コード例 #12
0
        private void JobThread_DoWork(object sender, DoWorkEventArgs e)
        {
            Job job = e.Argument as Job;

            e.Result = e.Argument;
            lock (job)
            {
                if ((job.Action != null) && (job.Action.SynchState == SynchState.Stop))
                {
                    try
                    {
                        JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "开始", TraceLevel.Info));
                        job.Action.Execute();
                    }
                    catch (Exception err)
                    {
                        JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, String.Empty, err));
                    }
                }
            }
        }
コード例 #13
0
ファイル: ManagerForm.cs プロジェクト: xuanximoming/key
 private void DoJobExecuteActionThread(Job job)
 {
     Cursor = Cursors.WaitCursor;
     //lock (job)
     {
         if (job.Action != null)
         {
             try
             {
                 JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "开始", TraceLevel.Info));
                 job.Action.Execute();
                 job.JobSchedule.LastExecuteTime = DateTime.Now;
                 JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "结束", TraceLevel.Info));
             }
             catch (Exception err)
             {
                 JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, String.Empty, err));
             }
         }
     }
     Cursor = Cursors.Default;
 }
コード例 #14
0
 private void JobThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     Job job = e.Result as Job;
     //lock (job)
     {
         if (job != null)
         {
             if ((job.Action != null) && (job.Action.SynchState == SynchState.Stop))
             {
                 job.JobSchedule.LastExecuteTime = DateTime.Now;
                 JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "结束", TraceLevel.Info));
             }
             lock (m_LockJobQueue)
             {
                 if (m_JobQueue.Contains(job))
                 {
                     m_JobQueue.Remove(job);
                 }
             }
         }
     }
 }
コード例 #15
0
 public override void Execute()
 {
     base.SynchState = SynchState.Busy;
     try
     {
         // 读取当前在院病人
         m_EmrPatTable.Clear();
         DataTable table = m_EmrHelper.ExecuteDataTable(s_SelectEmrCurrentPats, false);
         m_EmrPatTable.Merge(table, false, MissingSchemaAction.Ignore);
         // 读取病人的护理医嘱信息
         DataTable careLevelTable = m_HisHelper.ExecuteDataTable(s_SelectPatsCareLevel, false);
         // 更新病人数据
         // (因为可能存在一个病人有多个护理医嘱的情况,所以用DataRow匹配更新的方式)
         foreach (DataRow row in careLevelTable.Rows)
         {
             DataRow[] matchRows = m_EmrPatTable.Select("PatNoOfHis = " + row[s_ColHisFirstPageNo].ToString());
             if ((matchRows != null) && (matchRows.Length > 0))
             {
                 if (matchRows[0][s_ColCareLevelCode].ToString().Trim()
                     != row[s_ColCareLevelCode].ToString().Trim())
                 {
                     matchRows[0][s_ColCareLevelCode] = row[s_ColCareLevelCode];
                 }
             }
         }
         int updatedCount = m_EmrHelper.UpdateTable(m_EmrPatTable, "Inpatient", false);
         JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "护理级别", m_EmrPatTable.Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
     }
     catch
     {
         throw;
     }
     finally
     {
         base.SynchState = SynchState.Stop;
     }
 }
コード例 #16
0
ファイル: JobTaskManager.cs プロジェクト: xuanximoming/key
 /// <summary>
 /// 记录日志
 /// </summary>
 /// <param name="e"></param>
 public void WriteLog(JobExecuteInfoArgs e)
 {
     JobLogHelper.WriteLog(e);
 }
コード例 #17
0
        private void DoExecuteSynch()
        {
            int changedCount = 0;
            int updatedCount = 0;

            //DataTable changedTable;

            // 首先执行数据同步的处理
            foreach (TableMapping setting in BasisSynchsetting.TableMappings)
            {
                try
                {
                    if (!setting.NeedRunNow)
                    {
                        continue;
                    }

                    changedCount = 0;
                    updatedCount = 0;
                    // 如果有预执行语句要处理,则先处理,然后清空对此表的缓存
                    if (!String.IsNullOrEmpty(setting.PreHandleSentence))
                    {
                        if (m_TargetTables.Tables.Contains(setting.TargetTable))
                        {
                            m_TargetTables.Tables.Remove(setting.TargetTable);
                            m_SqlHelperTarget.ExecuteNoneQuery(setting.PreHandleSentence);
                        }
                    }

                    // 依次执行同步语句
                    foreach (TableMappingDataSource source in setting.DataSources)
                    {
                        if (source.Enabled)
                        {
                            // 如果有预执行语句要处理,则先处理,然后清空对此表的缓存
                            if (!String.IsNullOrEmpty(source.FilteCondition))
                            {
                                if (m_TargetTables.Tables.Contains(setting.TargetTable))
                                {
                                    RemoveFromTargetTable(setting.TargetTable, source);
                                }
                            }
                            changedCount += MergeSourceAndTargetTable(setting.TargetTable, source.SelectSentence);
                        }
                    }
                    changedCount += MergeSourceAndTargetTable(setting.TargetTable, setting.SelectSentence);

                    // 重设py,wb字段的值
                    if (!string.IsNullOrEmpty(setting.NameField))
                    {
                        ResetPyWbValue(m_TargetTables.Tables[setting.TargetTable], setting.NameField);
                    }

                    // 保存数据,记Log
                    if (m_TargetTables.Tables[setting.TargetTable] != null)
                    {
                        updatedCount = m_SqlHelperTarget.UpdateTable(m_TargetTables.Tables[setting.TargetTable]
                                                                     , setting.TargetTable, false);
                    }
                    if (!String.IsNullOrEmpty(setting.OtherSentence))
                    {
                        m_SqlHelperTarget.ExecuteNoneQuery(setting.OtherSentence, CommandType.Text);
                    }
                }
                catch (Exception e)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(this.Parent, e.Message));
                    base.SynchState = SynchState.Stop;
                }
                JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, setting.TargetTable, m_TargetTables.Tables[setting.TargetTable].Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
            }
        }
コード例 #18
0
        private void SynchChangedPatientAndBedData(DataTable patientTable, DataTable bedTable)
        {
            int updatedCount;
            // 增加记录病人和床位更新记录的插入日期(由数据返回,以HIS的数据库时间为准)。
            // 同步程序在更新记录时只能更新最大插入日期之前的记录,否则有可能因为读数据
            // 到执行完成之间时间差的问题,将执行期间记录的数据也置为已更新
            string maxInsertDate;

            if ((patientTable != null) && (patientTable.Rows.Count > 0))
            {
                try
                {
                    // 取指定的EMR的病人数据
                    InitEmrInpatientTable(true, "1=1");
                    //InitEmrInpatientTable(true, CreateFilterCondition(patientTable, colHisFirstPageNo));

                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, "Inpatient:" + m_EmrPatientTable.Rows.Count.ToString(), TraceLevel.Info));
                    // 合并,保存
                    maxInsertDate = MergePatientInfo(patientTable, false);
                    updatedCount  = SaveEmrTableData(m_EmrPatientTable, EMRPatTable);
                    // 操作成功后再更新HIS库中的标志
                    m_HisHelper.ExecuteNoneQuery(String.Format("update ZY_BRSYK_MSG set gxbz = 1 , gxrq = '{0}' where gxbz = 0 and crrq <= '{1}'"
                                                               , DateTime.Now.ToString("yyyyMMddHH:mm:ss"), maxInsertDate)
                                                 , CommandType.Text);
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRPatTable, patientTable.Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
                }
                catch (Exception err)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRPatTable, err));
                    return;
                }
            }

            if ((bedTable != null) && (bedTable.Rows.Count > 0))
            {
                try
                {
                    StringBuilder condition2 = new StringBuilder("ID in (");
                    foreach (DataRow row in bedTable.Rows)
                    {
                        condition2.Append("'" + row[colBedNo].ToString().Trim() + "', ");
                    }
                    condition2.Append("'')");

                    // 取指定的EMR的床位数据
                    InitEmrBedTable(condition2.ToString());
                    // 合并,保存
                    maxInsertDate = MergeBedInfo(bedTable, false);
                    updatedCount  = SaveEmrTableData(m_EmrBedTable, EMRBedTable);

                    int    totalUpdateSyxh = 0;
                    int    totalUpdateCwdm = 0;
                    object objRowcount;
                    if (m_NewBeds.Count > 0)
                    {
                        foreach (KeyValuePair <string, DataRow> para in m_NewBeds)
                        {
                            // 更新床位表中关联的EMR首页序号
                            objRowcount = m_EmrHelper.ExecuteScalar(String.Format("update {0} a set NoOfInpat = (select b.NoOfInpat from {1} b where a.PatNoOfHis = b.PatNoOfHis)"
                                                                                  + " where exists(select 1 from InPatient b where a.PatNoOfHis = b.PatNoOfHis and a.WardId = '{3}' and a.ID = '{2}' and a.InBed <> 1300)"
                                                                                  , EMRBedTable, EMRPatTable, para.Value[colBedNo], para.Value[colWardCode], para.Value[colDeptCode]));
                            if (objRowcount != null)
                            {
                                totalUpdateSyxh += Convert.ToInt32(objRowcount);
                            }
                            // 更新首页库中的当前床位
                            //JobLogHelper.WriteSqlLog(Parent, String.Format("update {0} set cycw = b.cwdm from {0} a, {1} b where a.hissyxh = b.hissyxh and b.bqdm = '{3}' and b.ksdm = '{4}' and b.cwdm = '{2}' and b.zcbz = 1301"
                            //   , EMRPatTable, EMRBedTable, para.Key, para.Value[colWardCode], para.Value[colDeptCode]));
                            objRowcount = m_EmrHelper.ExecuteScalar(String.Format("update {0} set OutBed a = (select b.ID from {1} b where a.PatNoOfHis = b.PatNoOfHis )"
                                                                                  + "where exists(select 1 from {1} b where a.PatNoOfHis = b.PatNoOfHis and  b.WardId = '{3}' and b.ID = '{2}' and b.InBed = 1301)"
                                                                                  , EMRPatTable, EMRBedTable, para.Value[colBedNo], para.Value[colWardCode], para.Value[colDeptCode]));
                            if (objRowcount != null)
                            {
                                totalUpdateCwdm += Convert.ToInt32(objRowcount);
                            }
                        }
                    }

                    // 操作成功后再更新HIS库中的标志
                    m_HisHelper.ExecuteNoneQuery(String.Format("update ZY_BCDMK_MSG set gxbz = 1 , gxrq = '{0}' where gxbz = 0 and crrq <= '{1}'"
                                                               , DateTime.Now.ToString("yyyyMMddHH:mm:ss"), maxInsertDate)
                                                 , CommandType.Text);
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRBedTable, bedTable.Rows.Count, updatedCount, DateTime.Now, true, string.Empty, TraceLevel.Info));
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRBedTable, totalUpdateSyxh, totalUpdateCwdm, DateTime.Now, true, "CWDMK.syxh/BRSYK.cycw", TraceLevel.Info));
                }
                catch (Exception err)
                {
                    JobLogHelper.WriteLog(new JobExecuteInfoArgs(Parent, EMRBedTable, err));
                    return;
                }
            }
        }