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); }
public void WriteAllLog() { foreach (Job job in AllJobs) { JobLogHelper.WriteLog(new JobExecuteInfoArgs(job, "主应用程序关闭", TraceLevel.Info)); } }
public override void Execute() { try { ExecuteCore(false); } catch (Exception ex) { //todo JobLogHelper.WriteLog(new JobExecuteInfoArgs(this.Parent, ex.Message)); } }
private void LoadCustomerLog(string fileName) { _currentDataTable = null; if (string.IsNullOrEmpty(fileName)) { return; } _currentDataTable = JobLogHelper.LoadLogFileToTable(JobLogHelper.GetJobLogCurrentFullPath(jobTimeSetting.CurrentJob)); gridControlLog.DataSource = _currentDataTable; }
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); }
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; } }
/// <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; } } }
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)); } }
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)); }
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); }
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); }
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)); } } } }
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; }
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); } } } } }
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; } }
/// <summary> /// 记录日志 /// </summary> /// <param name="e"></param> public void WriteLog(JobExecuteInfoArgs e) { JobLogHelper.WriteLog(e); }
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)); } }
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; } } }