12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using MediII.Adapter.ReceiveToKCModel;
- using MediII.Adapter.Scanner;
- using System;
- using System.Configuration;
- using Microsoft.Practices.EnterpriseLibrary.Data;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using IL.Common;
- namespace MediII.Adapter.BizComponent.UE
- {
- public class HL7_TimeOut_Scanner : DBScaner
- {
- private int TaskRunTime = 5;
- public HL7_TimeOut_Scanner()
- {
- var tm = ConfigurationManager.AppSettings["TaskRunTime"];
- if (!int.TryParse(tm, out TaskRunTime))
- {
- TaskRunTime = 5;
- }
- }
- protected override long OnDo(DateTime dtEventTime, Action<LogModel> setLog)
- {
- if (setLog != null)
- setLog(new LogModel { Message = "开始一次数据库错误消息处理扫描 " });
- var sql = @"
- SELECT *
- FROM HL7_Platform.dbo.HL7_Scan with(nolock)
- WHERE 1 = 1
- AND ( TaskMsg LIKE '%Timeout 时间已到。%'
- OR TaskMsg LIKE '%此操作对该事务的状态无效%'
- OR TaskMsg LIKE '%请重新运行该事务。%' )
- AND (ErrNum<4 or ErrNum is null)
- AND TaskStatus = 3
- AND OtherNo1 > DATEADD(dy,-{0},getdate())
- ORDER BY SeqNo DESC ";
- sql = string.Format(sql, TaskRunTime);//操作中数据
- try
- {
- var listRow = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(100).ToList();
- if (listRow.Any())
- {
- process(listRow, setLog);
- }
- }
- catch (Exception ex)
- {
- if (setLog != null)
- setLog(new LogModel { Message = "重置数据库错误消息发生错误", ErrorMsg ="sql:"+ sql+"\r\n"+ ex.Message + "\r\n" + ex.StackTrace });
- }
- return 1;
- }
- private void process(IEnumerable<HL7_ScanEntity> listRow, Action<LogModel> setLog)
- {
- listRow.ToList().ForEach(o =>
- {
- try
- {
- if (setLog != null)
- setLog(new LogModel { Message = "重置数据库错误消息:" , MessageID = o.TaskType });
- var sql = "UPDATE dbo.HL7_Scan SET TaskStatus=1,StartTime=NULL,TaskIP=NULL,TaskMsg = null, TaskMac=NULL,ErrNum=ISNULL(ErrNum,0)+1 WHERE ID=@ID";
- var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
- SqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, o.ID);
- SqlDataAccess.ExecuteNonQuery(ctx, cmd);
- }
- catch (Exception ex)
- {
- if (setLog != null)
- setLog(new LogModel
- {
- Message = string.Format("重置数据库错误消息发生错误:HL7ReceiveID:{0}", o.ID),
- ErrorMsg = ex.Message + "\r\n" + ex.StackTrace
- });
- }
- });
- }
- }
- }
|